diff --git a/.gitignore b/.gitignore index 731fee9..becd0fa 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ Thumbs.db #Ignore files build by Visual Studio *.obj -*.exe *.pdb *.user *.aps @@ -19,7 +18,6 @@ Thumbs.db *.cache *.ilk *.log -[Bb]in [Dd]ebug*/ *.lib *.sbr diff --git a/.nuget/NuGet.exe b/.nuget/NuGet.exe new file mode 100644 index 0000000..e313ff9 Binary files /dev/null and b/.nuget/NuGet.exe differ diff --git a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.Debug_(db_DB).xml b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.Debug_(db_DB).xml new file mode 100644 index 0000000..dc32df1 --- /dev/null +++ b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + bulk1 + bulk2 + bulk3 + bulk4 + bulk5 + bulk6 + bulk7 + bulk8 + bulk9 + bulk10 + bulk11 + bulk12 + bulk13 + bulk14 + bulk15 + bulk16 + bulk17 + bulk18 + bulk19 + bulk20 + bulk21 + bulk22 + bulk23 + bulk24 + bulk25 + bulk26 + bulk27 + bulk28 + bulk29 + bulk30 + bulk31 + bulk32 + bulk33 + bulk34 + bulk35 + bulk36 + bulk37 + bulk38 + bulk39 + bulk40 + bulk41 + bulk42 + bulk43 + bulk44 + bulk45 + bulk46 + bulk47 + bulk48 + bulk49 + bulk50 + bulk51 + bulk52 + bulk53 + bulk54 + bulk55 + bulk56 + bulk57 + bulk58 + bulk59 + bulk60 + bulk61 + bulk62 + bulk63 + bulk64 + bulk65 + bulk66 + bulk67 + bulk68 + bulk69 + bulk70 + bulk71 + bulk72 + bulk73 + bulk74 + bulk75 + bulk76 + bulk77 + bulk78 + bulk79 + bulk80 + bulk81 + bulk82 + bulk83 + bulk84 + bulk85 + bulk86 + bulk87 + bulk88 + bulk89 + bulk90 + bulk91 + bulk92 + bulk93 + bulk94 + bulk95 + bulk96 + bulk97 + bulk98 + bulk99 + bulk100 + bulk101 + bulk102 + bulk103 + bulk104 + bulk105 + bulk106 + bulk107 + bulk108 + bulk109 + bulk110 + bulk111 + bulk112 + bulk113 + bulk114 + bulk115 + bulk116 + bulk117 + bulk118 + bulk119 + bulk120 + bulk121 + bulk122 + bulk123 + bulk124 + bulk125 + bulk126 + bulk127 + bulk128 + bulk129 + bulk130 + bulk131 + bulk132 + bulk133 + bulk134 + bulk135 + bulk136 + bulk137 + bulk138 + bulk139 + bulk140 + bulk141 + bulk142 + bulk143 + bulk144 + bulk145 + bulk146 + bulk147 + bulk148 + bulk149 + bulk150 + bulk151 + bulk152 + bulk153 + bulk154 + bulk155 + bulk156 + bulk157 + bulk158 + bulk159 + bulk160 + bulk161 + bulk162 + bulk163 + bulk164 + bulk165 + bulk166 + bulk167 + bulk168 + bulk169 + bulk170 + bulk171 + bulk172 + bulk173 + bulk174 + bulk175 + bulk176 + bulk177 + bulk178 + bulk179 + bulk180 + bulk181 + bulk182 + bulk183 + bulk184 + bulk185 + bulk186 + bulk187 + bulk188 + bulk189 + bulk190 + bulk191 + bulk192 + bulk193 + bulk194 + bulk195 + bulk196 + bulk197 + bulk198 + bulk199 + bulk200 + bulk201 + bulk202 + bulk203 + bulk204 + bulk205 + bulk206 + bulk207 + bulk208 + bulk209 + bulk210 + bulk211 + bulk212 + bulk213 + bulk214 + bulk215 + bulk216 + bulk217 + bulk218 + bulk219 + bulk220 + bulk221 + bulk222 + bulk223 + bulk224 + bulk225 + bulk226 + bulk227 + bulk228 + bulk229 + bulk230 + bulk231 + bulk232 + bulk233 + bulk234 + bulk235 + bulk236 + bulk237 + bulk238 + bulk239 + bulk240 + bulk241 + bulk242 + bulk243 + bulk244 + bulk245 + bulk246 + bulk247 + bulk248 + bulk249 + bulk250 + bulk251 + bulk252 + bulk253 + bulk254 + bulk255 + bulk256 + bulk257 + bulk258 + bulk259 + bulk260 + bulk261 + bulk262 + bulk263 + bulk264 + bulk265 + bulk266 + bulk267 + bulk268 + bulk269 + bulk270 + bulk271 + bulk272 + bulk273 + bulk274 + bulk275 + bulk276 + bulk277 + bulk278 + bulk279 + bulk280 + bulk281 + bulk282 + bulk283 + bulk284 + bulk285 + bulk286 + bulk287 + bulk288 + bulk289 + bulk290 + bulk291 + bulk292 + bulk293 + bulk294 + bulk295 + bulk296 + bulk297 + bulk298 + bulk299 + bulk300 + bulk301 + bulk302 + bulk303 + bulk304 + bulk305 + bulk306 + bulk307 + bulk308 + bulk309 + bulk310 + bulk311 + bulk312 + bulk313 + bulk314 + bulk315 + bulk316 + bulk317 + bulk318 + bulk319 + bulk320 + bulk321 + bulk322 + bulk323 + bulk324 + bulk325 + bulk326 + bulk327 + bulk328 + bulk329 + bulk330 + bulk331 + bulk332 + bulk333 + bulk334 + bulk335 + bulk336 + bulk337 + bulk338 + bulk339 + bulk340 + bulk341 + bulk342 + bulk343 + bulk344 + bulk345 + bulk346 + bulk347 + bulk348 + bulk349 + bulk350 + bulk351 + bulk352 + bulk353 + bulk354 + bulk355 + bulk356 + bulk357 + bulk358 + bulk359 + bulk360 + bulk361 + bulk362 + bulk363 + bulk364 + bulk365 + bulk366 + bulk367 + bulk368 + bulk369 + bulk370 + bulk371 + bulk372 + bulk373 + bulk374 + bulk375 + bulk376 + bulk377 + bulk378 + bulk379 + bulk380 + bulk381 + bulk382 + bulk383 + bulk384 + bulk385 + bulk386 + bulk387 + bulk388 + bulk389 + bulk390 + bulk391 + bulk392 + bulk393 + bulk394 + bulk395 + bulk396 + bulk397 + bulk398 + bulk399 + bulk400 + bulk401 + bulk402 + bulk403 + bulk404 + bulk405 + bulk406 + bulk407 + bulk408 + bulk409 + bulk410 + bulk411 + bulk412 + bulk413 + bulk414 + bulk415 + bulk416 + bulk417 + bulk418 + bulk419 + bulk420 + bulk421 + bulk422 + bulk423 + bulk424 + bulk425 + bulk426 + bulk427 + bulk428 + bulk429 + bulk430 + bulk431 + bulk432 + bulk433 + bulk434 + bulk435 + bulk436 + bulk437 + bulk438 + bulk439 + bulk440 + bulk441 + bulk442 + bulk443 + bulk444 + bulk445 + bulk446 + bulk447 + bulk448 + bulk449 + bulk450 + bulk451 + bulk452 + bulk453 + bulk454 + bulk455 + bulk456 + bulk457 + bulk458 + bulk459 + bulk460 + bulk461 + bulk462 + bulk463 + bulk464 + bulk465 + bulk466 + bulk467 + bulk468 + bulk469 + bulk470 + bulk471 + bulk472 + bulk473 + bulk474 + bulk475 + bulk476 + bulk477 + bulk478 + bulk479 + bulk480 + bulk481 + bulk482 + bulk483 + bulk484 + bulk485 + bulk486 + bulk487 + bulk488 + bulk489 + bulk490 + bulk491 + bulk492 + bulk493 + bulk494 + bulk495 + bulk496 + bulk497 + bulk498 + bulk499 + bulk500 + bulk501 + bulk502 + bulk503 + bulk504 + bulk505 + bulk506 + bulk507 + bulk508 + bulk509 + bulk510 + bulk511 + bulk512 + bulk513 + bulk514 + bulk515 + bulk516 + bulk517 + bulk518 + bulk519 + bulk520 + bulk521 + bulk522 + bulk523 + bulk524 + bulk525 + bulk526 + bulk527 + bulk528 + bulk529 + bulk530 + bulk531 + bulk532 + bulk533 + bulk534 + bulk535 + bulk536 + bulk537 + bulk538 + bulk539 + bulk540 + bulk541 + bulk542 + bulk543 + bulk544 + bulk545 + bulk546 + bulk547 + bulk548 + bulk549 + bulk550 + bulk551 + bulk552 + bulk553 + bulk554 + bulk555 + bulk556 + bulk557 + bulk558 + bulk559 + bulk560 + bulk561 + bulk562 + bulk563 + bulk564 + bulk565 + bulk566 + bulk567 + bulk568 + bulk569 + bulk570 + bulk571 + bulk572 + bulk573 + bulk574 + bulk575 + bulk576 + bulk577 + bulk578 + bulk579 + bulk580 + bulk581 + bulk582 + bulk583 + bulk584 + bulk585 + bulk586 + bulk587 + bulk588 + bulk589 + bulk590 + bulk591 + bulk592 + bulk593 + bulk594 + bulk595 + bulk596 + bulk597 + bulk598 + bulk599 + bulk600 + bulk601 + bulk602 + bulk603 + bulk604 + bulk605 + bulk606 + bulk607 + bulk608 + bulk609 + bulk610 + bulk611 + bulk612 + bulk613 + bulk614 + bulk615 + bulk616 + bulk617 + bulk618 + bulk619 + bulk620 + bulk621 + bulk622 + bulk623 + bulk624 + bulk625 + bulk626 + bulk627 + bulk628 + bulk629 + bulk630 + bulk631 + bulk632 + bulk633 + bulk634 + bulk635 + bulk636 + bulk637 + bulk638 + bulk639 + bulk640 + bulk641 + bulk642 + bulk643 + bulk644 + bulk645 + bulk646 + bulk647 + bulk648 + bulk649 + bulk650 + bulk651 + bulk652 + bulk653 + bulk654 + bulk655 + bulk656 + bulk657 + bulk658 + bulk659 + bulk660 + bulk661 + bulk662 + bulk663 + bulk664 + bulk665 + bulk666 + bulk667 + bulk668 + bulk669 + bulk670 + bulk671 + bulk672 + bulk673 + bulk674 + bulk675 + bulk676 + bulk677 + bulk678 + bulk679 + bulk680 + bulk681 + bulk682 + bulk683 + bulk684 + bulk685 + bulk686 + bulk687 + bulk688 + bulk689 + bulk690 + bulk691 + bulk692 + bulk693 + bulk694 + bulk695 + bulk696 + bulk697 + bulk698 + bulk699 + bulk700 + bulk701 + bulk702 + bulk703 + bulk704 + bulk705 + bulk706 + bulk707 + bulk708 + bulk709 + bulk710 + bulk711 + bulk712 + bulk713 + bulk714 + bulk715 + bulk716 + bulk717 + bulk718 + bulk719 + bulk720 + bulk721 + bulk722 + bulk723 + bulk724 + bulk725 + bulk726 + bulk727 + bulk728 + bulk729 + bulk730 + bulk731 + bulk732 + bulk733 + bulk734 + bulk735 + bulk736 + bulk737 + bulk738 + bulk739 + bulk740 + bulk741 + bulk742 + bulk743 + bulk744 + bulk745 + bulk746 + bulk747 + bulk748 + bulk749 + bulk750 + bulk751 + bulk752 + bulk753 + bulk754 + bulk755 + bulk756 + bulk757 + bulk758 + bulk759 + bulk760 + bulk761 + bulk762 + bulk763 + bulk764 + bulk765 + bulk766 + bulk767 + bulk768 + bulk769 + bulk770 + bulk771 + bulk772 + bulk773 + bulk774 + bulk775 + bulk776 + bulk777 + bulk778 + bulk779 + bulk780 + bulk781 + bulk782 + bulk783 + bulk784 + bulk785 + bulk786 + bulk787 + bulk788 + bulk789 + bulk790 + bulk791 + bulk792 + bulk793 + bulk794 + bulk795 + bulk796 + bulk797 + bulk798 + bulk799 + bulk800 + bulk801 + bulk802 + bulk803 + bulk804 + bulk805 + bulk806 + bulk807 + bulk808 + bulk809 + bulk810 + bulk811 + bulk812 + bulk813 + bulk814 + bulk815 + bulk816 + bulk817 + bulk818 + bulk819 + bulk820 + bulk821 + bulk822 + bulk823 + bulk824 + bulk825 + bulk826 + bulk827 + bulk828 + bulk829 + bulk830 + bulk831 + bulk832 + bulk833 + bulk834 + bulk835 + bulk836 + bulk837 + bulk838 + bulk839 + bulk840 + bulk841 + bulk842 + bulk843 + bulk844 + bulk845 + bulk846 + bulk847 + bulk848 + bulk849 + bulk850 + bulk851 + bulk852 + bulk853 + bulk854 + bulk855 + bulk856 + bulk857 + bulk858 + bulk859 + bulk860 + bulk861 + bulk862 + bulk863 + bulk864 + bulk865 + bulk866 + bulk867 + bulk868 + bulk869 + bulk870 + bulk871 + bulk872 + bulk873 + bulk874 + bulk875 + bulk876 + bulk877 + bulk878 + bulk879 + bulk880 + bulk881 + bulk882 + bulk883 + bulk884 + bulk885 + bulk886 + bulk887 + bulk888 + bulk889 + bulk890 + bulk891 + bulk892 + bulk893 + bulk894 + bulk895 + bulk896 + bulk897 + bulk898 + bulk899 + bulk900 + \ No newline at end of file diff --git a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.English_(en_US)-Help.xml b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.English_(en_US)-Help.xml index 642205a..634ac2e 100644 --- a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.English_(en_US)-Help.xml +++ b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.English_(en_US)-Help.xml @@ -1,10 +1,9 @@ - - Enable or disable this module. - Enable or disable generic renaming functions. - Enter a renaming pattern to be used for automatic renaming of folders. - Enter a renaming pattern to be used for automatic renaming of files. - If enabled, Ember will automatically rename files and folders when scraping multiple movies. - If enabled, Ember will automatically rename files and folders when scraping a single movie. - Enable the bulk renaming tool. - \ No newline at end of file + Enable or disable this module. + Enable or disable generic renaming functions. + Enter a renaming pattern to be used for automatic renaming of folders. + Enter a renaming pattern to be used for automatic renaming of files. + If enabled, Ember will automatically rename files and folders when scraping multiple movies. + If enabled, Ember will automatically rename files and folders when scraping a single movie. + Enable the bulk renaming tool. + diff --git a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.English_(en_US).xml b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.English_(en_US).xml index 3a041e8..32ba5fe 100644 --- a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.English_(en_US).xml +++ b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.English_(en_US).xml @@ -1,37 +1,36 @@ - - Renamer - Renaming... - Bulk Renamer - Rename movies and files - Compiling Movie List... - Canceling Compilation... - Rename - Folder Pattern (for Single movie in Folder) - File Pattern - Folder Pattern (for Multiple movies in Folder) - Display Only Movies That Will Be Renamed - $T = Title{0}$X. (Replace Space with .){0}$D = Directory{0}$F = File Name{0}$O = OriginalTitle{0}$Y = Year{0}$I = IMDB ID{0}$R = Resolution{0}$A = Audio{0}$S = Source{0}$M = MPAA{0}$B = Base Path{0}$L = List Title{0}{{}} = Optional{0}$?aaa?bbb? = Replace aaa with bbb{0}$- = Remove previous char if next pattern does not have a value{0}$+ = Remove next char if previous pattern does not have a value{0}$^ = Remove previous and next char if next pattern does not have a value - An error occured while attempting to rename the folder:{0}{0}{1}{0}{0}Please ensure that you are not accessing this folder or any of its files from another program (including browsing via Windows Explorer - Unable to Rename Folder - An error occured while attempting to rename a file:{0}{0}{1}{0}{0}Please ensure that you are not accessing this file from another program. - Unable to Rename File - Manual Rename - Folder Name - File Name - Title: - Renaming Folder/Files... - Automatically Rename Files During Multi-Scraper - Automatically Rename Files During Single-Scraper - Default Renaming Patterns - Files Pattern - Folders Pattern - Bulk &Renamer - Rename - Auto - Manual - New Path - New File Name - Enable Generic Rename Module - Enable Bulk Renamer Tool - \ No newline at end of file + Renamer + Renaming... + Bulk Renamer + Rename movies and files + Compiling Movie List... + Canceling Compilation... + Rename + Folder Pattern (for Single movie in Folder) + File Pattern + Folder Pattern (for Multiple movies in Folder) + Display Only Movies That Will Be Renamed + $T = Title{0}$X. (Replace Space with .){0}$D = Directory{0}$F = File Name{0}$O = OriginalTitle{0}$Y = Year{0}$I = IMDB ID{0}$R = Resolution{0}$A = Audio{0}$S = Source{0}$M = MPAA{0}$B = Base Path{0}$L = List Title{0}{{}} = Optional{0}$?aaa?bbb? = Replace aaa with bbb{0}$- = Remove previous char if next pattern does not have a value{0}$+ = Remove next char if previous pattern does not have a value{0}$^ = Remove previous and next char if next pattern does not have a value + An error occured while attempting to rename the folder:{0}{0}{1}{0}{0}Please ensure that you are not accessing this folder or any of its files from another program (including browsing via Windows Explorer + Unable to Rename Folder + An error occured while attempting to rename a file:{0}{0}{1}{0}{0}Please ensure that you are not accessing this file from another program. + Unable to Rename File + Manual Rename + Folder Name + File Name + Title: + Renaming Folder/Files... + Automatically Rename Files During Multi-Scraper + Automatically Rename Files During Single-Scraper + Default Renaming Patterns + Files Pattern + Folders Pattern + Bulk &Renamer + + Auto + Manual + New Path + New File Name + Enable Generic Rename Module + Enable Bulk Renamer Tool + diff --git a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.German_(de_DE)-Help.xml b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.German_(de_DE)-Help.xml index 9224d12..98bdf69 100644 --- a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.German_(de_DE)-Help.xml +++ b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.German_(de_DE)-Help.xml @@ -1,11 +1,9 @@ - - Aktiviert dieses Modul - Aktiviert den eingebauten Mehrfach Umbenenner - Gib ein Schema zum automatischen Umbenennen von Verzeichnissen ein. - Gib ein Schema zum automatischen Umbenennen von Dateien ein. - Wenn aktiviert wird Ember automatisch Dateien und Verzeichnisse beim Multi-Scrapen umbenennen - Wenn aktiviert wird Ember automatisch Dateien und Verzeichnisse beim Einzel-Scrapen umbenennen - Aktiviert den Mehrfach Umbenenner + Aktiviert oder deaktiviert dieses Modul + Aktiviert den eingebauten Mehrfach Umbenenner. + Gib ein Schema zum automatischen Umbenennen von Verzeichnissen ein. + Gib ein Schema zum automatischen Umbenennen von Dateien ein. + Wenn aktiviert wird Ember automatisch Dateien und Verzeichnisse beim Multi-Scrapen umbenennen + Wenn aktiviert wird Ember automatisch Dateien und Verzeichnisse beim Einzel-Scrapen umbenennen + Aktiviert den Mehrfach Umbenenner - diff --git a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.German_(de_DE).xml b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.German_(de_DE).xml index 6eb31ce..d5e1ad3 100644 --- a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.German_(de_DE).xml +++ b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.German_(de_DE).xml @@ -1,9 +1,8 @@ - Umbenenner Benenne um... Bulk Renamer - Rename movies and files + Benenne Filme und Dateien um Stelle Liste zusammen... Breche Zusammenstellung ab... Benenne um @@ -12,27 +11,26 @@ Verzeichnis Schema (Mehrere Filme pro Verzeichnis) Zeige nur Elemente die umbenannt werden $T = Titel{0}$X. (Leerzeichen durch Punkt ersetzen){0}$D = Verzeichnis{0}$F = Dateiname{0}$O = OriginalTitel{0}$Y = Jahr{0}$R = Auflösung{0}$A = Audio{0}$S = Quelle{0}$M = MPAA{0}$B = Base Pfad{0}$L = List Titel{0}$E = Sort Titel{0}{{}} = Optional{0}$?aaa?bbb? = Ersetze aaa mit bbb{0}$- = Entferne das vorherige Zeichen wenn die nächste Variable keinen Wert hat{0}$+ = Entferne das nächste Zeichen wenn die vorherige Variable keinen Wert hat{0}$^ = Entferne das nächste vorherige Zeichen wenn die nächste Variable keinen Wert hat - Fehler beim umbenennen von:{0}{0}{1}{0}{0}Bitte prüfe, dass dieses Verzeichnis nicht geöffnet ist (z.B. im Explorer). - Fehler beim umbenennen - Fehler beim umbenennen von:{0}{0}{1}{0}{0}Bitte prüfe, dass diese Datei nicht geöffnet ist. - Fehler beim umbenennen + Fehler beim Umbenennen des Verzeichnisses:{0}{0}{1}{0}{0}Bitte prüfe, dass dieses Verzeichnis nicht geöffnet ist (z.B. im Explorer). + Verzeichnis konnte nicht umbenannt werden + Fehler beim Umbenennen der Datei:{0}{0}{1}{0}{0}Bitte prüfe, dass diese Datei nicht geöffnet ist. + Datei konnte nicht umbenannt werden Manuell Umben. Verzeichnis - Datei + Dateiname Titel: - Benenne um... + Benenne Verzeichn./Dateien um Automatisch Dateien beim Multi-Scrapen umbenennen Automatisch Dateien beim Einzel-Scrapen umbenennen - Standard Umbenennungs Schema - Datei Schema - Verzeichnis Schema + Standard Umbenenn.-Schema + Dateien Schema + Verzeichnisse Schema Bulk &Renamer - Benenne um + Automatisch Manuell Neues Verz. Neuer Dateiname - Umbenennungsmodul einschalten - Mehrfach Umbenenner einschalten + Umbenennungsmodul aktivieren + Mehrfach Umbenenner aktivieren - diff --git a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.Norwegian_(no_NO)-Help.xml b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..4019e19 --- /dev/null +++ b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,9 @@ + + Slå på eller slå av denne modulen. + Slå generiske navnebytte-funksjoner av eller på. + Før inn en navneendring-stil som skal brukes for automatisk navneendring av mapper. + Før inn en navneendring-stil som skal brukes for automatisk navneendring av filer. + Hvis påslått, så vil EMM automatisk endre navn på filer og mapper under detaljhenting av flere filmer. + Hvis påslått, så vil EMM automatisk endre navn på filer og mapper under detaljhenting av én film. + Slå på massenavnebytteverktøyet. + diff --git a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.Norwegian_(no_NO).xml b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.Norwegian_(no_NO).xml new file mode 100644 index 0000000..0418c39 --- /dev/null +++ b/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.Norwegian_(no_NO).xml @@ -0,0 +1,36 @@ + + Navnendrer + Endrer navn... + Masse-endrer + Endre navn på filmer og filer + Kompilerer filmliste.... + Kansellerer kompilasjon... + Endre navn + Mappestil (for én film i mappe) + Fil-stil + Mappestil (for flere filmer i en mappe) + Hvis kun filmer som vil få endret navn + $T = Tittel{0}$X. (Bytt mellomrom .){0}$D = Mappe{0}$F = Filnavn{0}$O = OriginalTittel{0}$Y = År{0}$I = IMDB ID{0}$R = Oppløsning{0}$A = Audio{0}$S = Kilde{0}$M = MPAA{0}$B = Grunnleggende bane{0}$L = Listetittel{0}{{}} = Ikke nødvendig{0}$?aaa?bbb? = bytt aaa med bbb{0}$- = Fjern forrige symbol hvis neste stil ikke har en verdi{0}$+ = Fjern neste symbol hvis forrige stil ikke har en verdi{0}$^ = Fjern forrige og neste symbol hvis neste stil ikke har en verdi + En feil oppsto under forsøk på å endre navn på:{0}{0}{1}{0}{0}Vennligst vær sikker på at du ikke bruker denne mappen eller noen av dens filer i noen andre programmer. + Kan ikke endre navn på mappe + En feil oppstå under forsøk på å endre navn på:{0}{0}{1}{0}{0}Vennligst påse at du ikke bruker denne filen i et annet program. + Kan ikke endre navn på fil + Manuell navneendring + Mappenavn + Filnavn + Tittel: + Endrer navn på mappe/filer... + Automatisk endre navn på filer under multi-detaljhenting + Automatisk endre navn på filer under detaljhenting (singel) + Standard navneendring-stiler + Fil-stiler + Mappe-stiler + Masse- &Endrer + + Auto + Manuell + Ny bane + Nytt filnavn + Slå på generisk navneendrer-modul + Slå på massenavnebytteverktøyet. + diff --git a/Addons/generic.EmberCore.BulkRename/Module.BulkRenamer.vb b/Addons/generic.EmberCore.BulkRename/Module.BulkRenamer.vb index 4abf957..43b9d8b 100644 --- a/Addons/generic.EmberCore.BulkRename/Module.BulkRenamer.vb +++ b/Addons/generic.EmberCore.BulkRename/Module.BulkRenamer.vb @@ -158,7 +158,7 @@ Public Class BulkRenamerModule tsi = DirectCast(ModulesManager.Instance.RuntimeObjects.TrayMenu.Items("cmnuTrayIconTools"), ToolStripMenuItem) tsi.DropDownItems.Add(MyTrayMenu) - ctxMyMenu.Text = Master.eLang.GetString(27, "Rename") + ctxMyMenu.Text = Master.eLang.GetString(6, "Rename") ctxMyMenu.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.R), System.Windows.Forms.Keys) ctxMySubMenu1.Text = Master.eLang.GetString(28, "Auto") ctxMySubMenu2.Text = Master.eLang.GetString(29, "Manual") diff --git a/Addons/generic.EmberCore.BulkRename/My Project/AssemblyInfo.vb b/Addons/generic.EmberCore.BulkRename/My Project/AssemblyInfo.vb index 629698f..94fb35e 100644 --- a/Addons/generic.EmberCore.BulkRename/My Project/AssemblyInfo.vb +++ b/Addons/generic.EmberCore.BulkRename/My Project/AssemblyInfo.vb @@ -9,10 +9,10 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - + - + @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/Addons/generic.EmberCore.BulkRename/clsAPIRenamer.vb b/Addons/generic.EmberCore.BulkRename/clsAPIRenamer.vb index aa103f3..0d46dc4 100644 --- a/Addons/generic.EmberCore.BulkRename/clsAPIRenamer.vb +++ b/Addons/generic.EmberCore.BulkRename/clsAPIRenamer.vb @@ -218,15 +218,7 @@ Public Class FileFolderRenamer pattern = String.Concat(pattern, strmore) nextC = pattern.IndexOf("$?") End While - pattern = pattern.Replace(":", " -") - pattern = pattern.Replace("/", String.Empty) - 'pattern = pattern.Replace("\", String.Empty) - pattern = pattern.Replace("|", String.Empty) - pattern = pattern.Replace("<", String.Empty) - pattern = pattern.Replace(">", String.Empty) - pattern = pattern.Replace("?", String.Empty) - pattern = pattern.Replace("*", String.Empty) - pattern = pattern.Replace(" ", " ") + pattern = StringUtils.CleanFileName(pattern) For Each Invalid As Char In Path.GetInvalidPathChars pattern = pattern.Replace(Invalid, String.Empty) @@ -275,6 +267,7 @@ Public Class FileFolderRenamer MovieFile.Director = _tmpMovie.Movie.Director MovieFile.FileSource = _tmpMovie.FileSource MovieFile.Country = _tmpMovie.Movie.Country + MovieFile.IMDBID = _tmpMovie.Movie.IMDBID Dim mFolders As New List(Of String) Using SQLNewcommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() SQLNewcommand.CommandText = String.Concat("SELECT Path FROM Sources;") @@ -324,12 +317,18 @@ Public Class FileFolderRenamer MovieFile.Path = If(MovieFile.Path.StartsWith(Path.DirectorySeparatorChar), MovieFile.Path.Substring(1), MovieFile.Path) If Not MovieFile.IsVideo_TS AndAlso Not MovieFile.IsBDMV Then - MovieFile.FileName = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(_tmpMovie.Filename)) - Dim stackMark As String = Path.GetFileNameWithoutExtension(_tmpMovie.Filename).Replace(MovieFile.FileName, String.Empty).ToLower - If Not stackMark = String.Empty AndAlso _tmpMovie.Movie.Title.ToLower.EndsWith(stackMark) Then - MovieFile.FileName = Path.GetFileNameWithoutExtension(_tmpMovie.Filename) + If Path.GetFileName(_tmpMovie.Filename.ToLower) = "video_ts.ifo" Then + MovieFile.FileName = "VIDEO_TS" + MovieFile.NewFileName = MovieFile.FileName + Else + MovieFile.FileName = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(_tmpMovie.Filename)) + Dim stackMark As String = Path.GetFileNameWithoutExtension(_tmpMovie.Filename).Replace(MovieFile.FileName, String.Empty).ToLower + If Not stackMark = String.Empty AndAlso _tmpMovie.Movie.Title.ToLower.EndsWith(stackMark) Then + MovieFile.FileName = Path.GetFileNameWithoutExtension(_tmpMovie.Filename) + End If + MovieFile.NewFileName = ProccessPattern(MovieFile, filePattern).Trim + End If - MovieFile.NewFileName = ProccessPattern(MovieFile, filePattern).Trim ElseIf MovieFile.IsBDMV Then MovieFile.FileName = String.Concat("BDMV", Path.DirectorySeparatorChar, "STREAM") MovieFile.NewFileName = MovieFile.FileName @@ -410,13 +409,13 @@ Public Class FileFolderRenamer Dim srcDir As String = Path.Combine(f.BasePath, f.Path) Dim destDir As String = Path.Combine(f.BasePath, f.NewPath) - If f.IsVideo_TS Then - srcDir = Path.Combine(srcDir, "VIDEO_TS") - destDir = Path.Combine(destDir, "VIDEO_TS") - ElseIf f.IsBDMV Then - srcDir = Path.Combine(srcDir, String.Concat("BDMV", Path.DirectorySeparatorChar, "STREAM")) - destDir = Path.Combine(destDir, String.Concat("BDMV", Path.DirectorySeparatorChar, "STREAM")) - End If + 'If f.IsVideo_TS Then + ' srcDir = Path.Combine(srcDir, "VIDEO_TS") + ' destDir = Path.Combine(destDir, "VIDEO_TS") + 'ElseIf f.IsBDMV Then + ' srcDir = Path.Combine(srcDir, String.Concat("BDMV", Path.DirectorySeparatorChar, "STREAM")) + ' destDir = Path.Combine(destDir, String.Concat("BDMV", Path.DirectorySeparatorChar, "STREAM")) + 'End If If Not f.ID = -1 Then _movieDB = Master.DB.LoadMovieFromDB(f.ID) @@ -503,7 +502,7 @@ Public Class FileFolderRenamer End If If DoDB AndAlso DoUpdate Then - UpdateFaSPaths(_movieDB, destDir, f.FileName, f.NewFileName) + UpdateFaSPaths(_movieDB, srcDir, destDir, f.FileName, f.NewFileName) Master.DB.SaveMovieToDB(_movieDB, False) If Not f.IsSingle Then Dim fileCount As Integer = 0 @@ -595,7 +594,11 @@ Public Class FileFolderRenamer ElseIf f.IsBDMV Then f.NewFileName = String.Concat("BDMV", Path.DirectorySeparatorChar, "STREAM") Else - f.NewFileName = ProccessPattern(f, filePattern).Trim + If Path.GetFileName(f.FileName.ToLower) = "video_ts" Then + f.NewFileName = "VIDEO_TS" + Else + f.NewFileName = ProccessPattern(f, filePattern).Trim + End If End If If HaveBase(localFolderPattern) Then @@ -665,14 +668,14 @@ Public Class FileFolderRenamer Dim srcDir As String = Path.Combine(_frename.BasePath, _frename.Path) Dim destDir As String = Path.Combine(_frename.BasePath, _frename.NewPath) - If _frename.IsVideo_TS Then - srcDir = Path.Combine(srcDir, "VIDEO_TS") - destDir = Path.Combine(destDir, "VIDEO_TS") + 'If _frename.IsVideo_TS Then + ' srcDir = Path.Combine(srcDir, "VIDEO_TS") + ' destDir = Path.Combine(destDir, "VIDEO_TS") - ElseIf _frename.IsBDMV Then - srcDir = Path.Combine(srcDir, String.Concat("BDMV", Path.DirectorySeparatorChar, "STREAM")) - destDir = Path.Combine(destDir, String.Concat("BDMV", Path.DirectorySeparatorChar, "STREAM")) - End If + 'ElseIf _frename.IsBDMV Then + ' srcDir = Path.Combine(srcDir, String.Concat("BDMV", Path.DirectorySeparatorChar, "STREAM")) + ' destDir = Path.Combine(destDir, String.Concat("BDMV", Path.DirectorySeparatorChar, "STREAM")) + 'End If 'Rename Directory If Not srcDir = destDir Then @@ -744,7 +747,7 @@ Public Class FileFolderRenamer End If End If - UpdateFaSPaths(_movie, destDir, _frename.FileName, _frename.NewFileName) + UpdateFaSPaths(_movie, srcDir, destDir, _frename.FileName, _frename.NewFileName) Master.DB.SaveMovieToDB(_movie, False, BatchMode, toNfo) If Not _frename.IsSingle Then Dim fileCount As Integer = 0 @@ -775,14 +778,14 @@ Public Class FileFolderRenamer End Try End Sub - Private Shared Sub UpdateFaSPaths(ByRef _DBM As Structures.DBMovie, ByVal newPath As String, ByVal oldFile As String, ByVal newFile As String) - If Not String.IsNullOrEmpty(_DBM.FanartPath) Then _DBM.FanartPath = Path.Combine(newPath, Path.GetFileName(_DBM.FanartPath).Replace(oldFile, newFile)) - If Not String.IsNullOrEmpty(_DBM.ExtraPath) Then _DBM.ExtraPath = Path.Combine(newPath, Path.GetFileName(_DBM.ExtraPath).Replace(oldFile, newFile)) - If Not String.IsNullOrEmpty(_DBM.Filename) Then _DBM.Filename = Path.Combine(newPath, Path.GetFileName(_DBM.Filename).Replace(oldFile, newFile)) - If Not String.IsNullOrEmpty(_DBM.NfoPath) Then _DBM.NfoPath = Path.Combine(newPath, Path.GetFileName(_DBM.NfoPath).Replace(oldFile, newFile)) - If Not String.IsNullOrEmpty(_DBM.PosterPath) Then _DBM.PosterPath = Path.Combine(newPath, Path.GetFileName(_DBM.PosterPath).Replace(oldFile, newFile)) - If Not String.IsNullOrEmpty(_DBM.SubPath) Then _DBM.SubPath = Path.Combine(newPath, Path.GetFileName(_DBM.SubPath).Replace(oldFile, newFile)) - If Not String.IsNullOrEmpty(_DBM.TrailerPath) Then _DBM.TrailerPath = Path.Combine(newPath, Path.GetFileName(_DBM.TrailerPath).Replace(oldFile, newFile)) + Private Shared Sub UpdateFaSPaths(ByRef _DBM As Structures.DBMovie, ByVal oldPath As String, ByVal newPath As String, ByVal oldFile As String, ByVal newFile As String) + If Not String.IsNullOrEmpty(_DBM.FanartPath) Then _DBM.FanartPath = Path.Combine(Directory.GetParent(_DBM.FanartPath).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.FanartPath).Replace(oldFile, newFile)) + If Not String.IsNullOrEmpty(_DBM.ExtraPath) Then _DBM.ExtraPath = Path.Combine(Directory.GetParent(_DBM.ExtraPath).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.ExtraPath).Replace(oldFile, newFile)) + If Not String.IsNullOrEmpty(_DBM.Filename) Then _DBM.Filename = Path.Combine(Directory.GetParent(_DBM.Filename).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.Filename).Replace(oldFile, newFile)) + If Not String.IsNullOrEmpty(_DBM.NfoPath) Then _DBM.NfoPath = Path.Combine(Directory.GetParent(_DBM.NfoPath).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.NfoPath).Replace(oldFile, newFile)) + If Not String.IsNullOrEmpty(_DBM.PosterPath) Then _DBM.PosterPath = Path.Combine(Directory.GetParent(_DBM.PosterPath).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.PosterPath).Replace(oldFile, newFile)) + If Not String.IsNullOrEmpty(_DBM.SubPath) Then _DBM.SubPath = Path.Combine(Directory.GetParent(_DBM.SubPath).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.SubPath).Replace(oldFile, newFile)) + If Not String.IsNullOrEmpty(_DBM.TrailerPath) Then _DBM.TrailerPath = Path.Combine(Directory.GetParent(_DBM.TrailerPath).FullName.Replace(oldPath, newPath), Path.GetFileName(_DBM.TrailerPath).Replace(oldFile, newFile)) End Sub #End Region 'Methods diff --git a/Addons/generic.EmberCore.BulkRename/dlgBulkRename.vb b/Addons/generic.EmberCore.BulkRename/dlgBulkRename.vb index 22bc166..e94f456 100644 --- a/Addons/generic.EmberCore.BulkRename/dlgBulkRename.vb +++ b/Addons/generic.EmberCore.BulkRename/dlgBulkRename.vb @@ -599,8 +599,8 @@ Public Class dlgBulkRenamer End If Dim s As String = String.Format(Master.eLang.GetString(11, "$1 = First Letter of the Title{0}$A = Audio{0}$B = Base Path{0}$C = Director{0}$D = Directory{0}$E = Sort Title{0}$F = File Name{0}$G = Genre (Follow with a space, dot or hyphen to change separator){0}$I = IMDB ID{0}$L = List Title{0}$M = MPAA{0}$O = OriginalTitle{0}$R = Resolution{0}$S = Source{0}$T = Title{0}$Y = Year{0}$X. (Replace Space with .){0}{{}} = Optional{0}$?aaa?bbb? = Replace aaa with bbb{0}$- = Remove previous char if next pattern does not have a value{0}$+ = Remove next char if previous pattern does not have a value{0}$^ = Remove previous and next char if next pattern does not have a value"), vbNewLine) dHelpTips.lblTips.Text = s - dHelpTips.Width = dHelpTips.lblTips.Width + 5 - dHelpTips.Height = dHelpTips.lblTips.Height + 35 + dHelpTips.Width = dHelpTips.lblTips.Width + 20 + dHelpTips.Height = dHelpTips.lblTips.Height + 45 dHelpTips.Top = Me.Top + 10 dHelpTips.Left = Me.Right - dHelpTips.Width - 10 If dHelpTips.Visible Then diff --git a/Addons/generic.EmberCore.BulkRename/generic.EmberCore.BulkRename.vbproj b/Addons/generic.EmberCore.BulkRename/generic.EmberCore.BulkRename.vbproj index e629cfc..3d5934a 100644 --- a/Addons/generic.EmberCore.BulkRename/generic.EmberCore.BulkRename.vbproj +++ b/Addons/generic.EmberCore.BulkRename/generic.EmberCore.BulkRename.vbproj @@ -198,6 +198,9 @@ + + PreserveNewest + PreserveNewest @@ -210,7 +213,10 @@ PreserveNewest - + + PreserveNewest + + PreserveNewest diff --git a/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.Debug_(db_DB).xml b/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.Debug_(db_DB).xml new file mode 100644 index 0000000..bbae9e6 --- /dev/null +++ b/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + extrct1 + extrct2 + extrct3 + extrct4 + extrct5 + extrct6 + extrct7 + extrct8 + extrct9 + extrct10 + extrct11 + extrct12 + extrct13 + extrct14 + extrct15 + extrct16 + extrct17 + extrct18 + extrct19 + extrct20 + extrct21 + extrct22 + extrct23 + extrct24 + extrct25 + extrct26 + extrct27 + extrct28 + extrct29 + extrct30 + extrct31 + extrct32 + extrct33 + extrct34 + extrct35 + extrct36 + extrct37 + extrct38 + extrct39 + extrct40 + extrct41 + extrct42 + extrct43 + extrct44 + extrct45 + extrct46 + extrct47 + extrct48 + extrct49 + extrct50 + extrct51 + extrct52 + extrct53 + extrct54 + extrct55 + extrct56 + extrct57 + extrct58 + extrct59 + extrct60 + extrct61 + extrct62 + extrct63 + extrct64 + extrct65 + extrct66 + extrct67 + extrct68 + extrct69 + extrct70 + extrct71 + extrct72 + extrct73 + extrct74 + extrct75 + extrct76 + extrct77 + extrct78 + extrct79 + extrct80 + extrct81 + extrct82 + extrct83 + extrct84 + extrct85 + extrct86 + extrct87 + extrct88 + extrct89 + extrct90 + extrct91 + extrct92 + extrct93 + extrct94 + extrct95 + extrct96 + extrct97 + extrct98 + extrct99 + extrct100 + extrct101 + extrct102 + extrct103 + extrct104 + extrct105 + extrct106 + extrct107 + extrct108 + extrct109 + extrct110 + extrct111 + extrct112 + extrct113 + extrct114 + extrct115 + extrct116 + extrct117 + extrct118 + extrct119 + extrct120 + extrct121 + extrct122 + extrct123 + extrct124 + extrct125 + extrct126 + extrct127 + extrct128 + extrct129 + extrct130 + extrct131 + extrct132 + extrct133 + extrct134 + extrct135 + extrct136 + extrct137 + extrct138 + extrct139 + extrct140 + extrct141 + extrct142 + extrct143 + extrct144 + extrct145 + extrct146 + extrct147 + extrct148 + extrct149 + extrct150 + extrct151 + extrct152 + extrct153 + extrct154 + extrct155 + extrct156 + extrct157 + extrct158 + extrct159 + extrct160 + extrct161 + extrct162 + extrct163 + extrct164 + extrct165 + extrct166 + extrct167 + extrct168 + extrct169 + extrct170 + extrct171 + extrct172 + extrct173 + extrct174 + extrct175 + extrct176 + extrct177 + extrct178 + extrct179 + extrct180 + extrct181 + extrct182 + extrct183 + extrct184 + extrct185 + extrct186 + extrct187 + extrct188 + extrct189 + extrct190 + extrct191 + extrct192 + extrct193 + extrct194 + extrct195 + extrct196 + extrct197 + extrct198 + extrct199 + extrct200 + extrct201 + extrct202 + extrct203 + extrct204 + extrct205 + extrct206 + extrct207 + extrct208 + extrct209 + extrct210 + extrct211 + extrct212 + extrct213 + extrct214 + extrct215 + extrct216 + extrct217 + extrct218 + extrct219 + extrct220 + extrct221 + extrct222 + extrct223 + extrct224 + extrct225 + extrct226 + extrct227 + extrct228 + extrct229 + extrct230 + extrct231 + extrct232 + extrct233 + extrct234 + extrct235 + extrct236 + extrct237 + extrct238 + extrct239 + extrct240 + extrct241 + extrct242 + extrct243 + extrct244 + extrct245 + extrct246 + extrct247 + extrct248 + extrct249 + extrct250 + extrct251 + extrct252 + extrct253 + extrct254 + extrct255 + extrct256 + extrct257 + extrct258 + extrct259 + extrct260 + extrct261 + extrct262 + extrct263 + extrct264 + extrct265 + extrct266 + extrct267 + extrct268 + extrct269 + extrct270 + extrct271 + extrct272 + extrct273 + extrct274 + extrct275 + extrct276 + extrct277 + extrct278 + extrct279 + extrct280 + extrct281 + extrct282 + extrct283 + extrct284 + extrct285 + extrct286 + extrct287 + extrct288 + extrct289 + extrct290 + extrct291 + extrct292 + extrct293 + extrct294 + extrct295 + extrct296 + extrct297 + extrct298 + extrct299 + extrct300 + extrct301 + extrct302 + extrct303 + extrct304 + extrct305 + extrct306 + extrct307 + extrct308 + extrct309 + extrct310 + extrct311 + extrct312 + extrct313 + extrct314 + extrct315 + extrct316 + extrct317 + extrct318 + extrct319 + extrct320 + extrct321 + extrct322 + extrct323 + extrct324 + extrct325 + extrct326 + extrct327 + extrct328 + extrct329 + extrct330 + extrct331 + extrct332 + extrct333 + extrct334 + extrct335 + extrct336 + extrct337 + extrct338 + extrct339 + extrct340 + extrct341 + extrct342 + extrct343 + extrct344 + extrct345 + extrct346 + extrct347 + extrct348 + extrct349 + extrct350 + extrct351 + extrct352 + extrct353 + extrct354 + extrct355 + extrct356 + extrct357 + extrct358 + extrct359 + extrct360 + extrct361 + extrct362 + extrct363 + extrct364 + extrct365 + extrct366 + extrct367 + extrct368 + extrct369 + extrct370 + extrct371 + extrct372 + extrct373 + extrct374 + extrct375 + extrct376 + extrct377 + extrct378 + extrct379 + extrct380 + extrct381 + extrct382 + extrct383 + extrct384 + extrct385 + extrct386 + extrct387 + extrct388 + extrct389 + extrct390 + extrct391 + extrct392 + extrct393 + extrct394 + extrct395 + extrct396 + extrct397 + extrct398 + extrct399 + extrct400 + extrct401 + extrct402 + extrct403 + extrct404 + extrct405 + extrct406 + extrct407 + extrct408 + extrct409 + extrct410 + extrct411 + extrct412 + extrct413 + extrct414 + extrct415 + extrct416 + extrct417 + extrct418 + extrct419 + extrct420 + extrct421 + extrct422 + extrct423 + extrct424 + extrct425 + extrct426 + extrct427 + extrct428 + extrct429 + extrct430 + extrct431 + extrct432 + extrct433 + extrct434 + extrct435 + extrct436 + extrct437 + extrct438 + extrct439 + extrct440 + extrct441 + extrct442 + extrct443 + extrct444 + extrct445 + extrct446 + extrct447 + extrct448 + extrct449 + extrct450 + extrct451 + extrct452 + extrct453 + extrct454 + extrct455 + extrct456 + extrct457 + extrct458 + extrct459 + extrct460 + extrct461 + extrct462 + extrct463 + extrct464 + extrct465 + extrct466 + extrct467 + extrct468 + extrct469 + extrct470 + extrct471 + extrct472 + extrct473 + extrct474 + extrct475 + extrct476 + extrct477 + extrct478 + extrct479 + extrct480 + extrct481 + extrct482 + extrct483 + extrct484 + extrct485 + extrct486 + extrct487 + extrct488 + extrct489 + extrct490 + extrct491 + extrct492 + extrct493 + extrct494 + extrct495 + extrct496 + extrct497 + extrct498 + extrct499 + extrct500 + extrct501 + extrct502 + extrct503 + extrct504 + extrct505 + extrct506 + extrct507 + extrct508 + extrct509 + extrct510 + extrct511 + extrct512 + extrct513 + extrct514 + extrct515 + extrct516 + extrct517 + extrct518 + extrct519 + extrct520 + extrct521 + extrct522 + extrct523 + extrct524 + extrct525 + extrct526 + extrct527 + extrct528 + extrct529 + extrct530 + extrct531 + extrct532 + extrct533 + extrct534 + extrct535 + extrct536 + extrct537 + extrct538 + extrct539 + extrct540 + extrct541 + extrct542 + extrct543 + extrct544 + extrct545 + extrct546 + extrct547 + extrct548 + extrct549 + extrct550 + extrct551 + extrct552 + extrct553 + extrct554 + extrct555 + extrct556 + extrct557 + extrct558 + extrct559 + extrct560 + extrct561 + extrct562 + extrct563 + extrct564 + extrct565 + extrct566 + extrct567 + extrct568 + extrct569 + extrct570 + extrct571 + extrct572 + extrct573 + extrct574 + extrct575 + extrct576 + extrct577 + extrct578 + extrct579 + extrct580 + extrct581 + extrct582 + extrct583 + extrct584 + extrct585 + extrct586 + extrct587 + extrct588 + extrct589 + extrct590 + extrct591 + extrct592 + extrct593 + extrct594 + extrct595 + extrct596 + extrct597 + extrct598 + extrct599 + extrct600 + extrct601 + extrct602 + extrct603 + extrct604 + extrct605 + extrct606 + extrct607 + extrct608 + extrct609 + extrct610 + extrct611 + extrct612 + extrct613 + extrct614 + extrct615 + extrct616 + extrct617 + extrct618 + extrct619 + extrct620 + extrct621 + extrct622 + extrct623 + extrct624 + extrct625 + extrct626 + extrct627 + extrct628 + extrct629 + extrct630 + extrct631 + extrct632 + extrct633 + extrct634 + extrct635 + extrct636 + extrct637 + extrct638 + extrct639 + extrct640 + extrct641 + extrct642 + extrct643 + extrct644 + extrct645 + extrct646 + extrct647 + extrct648 + extrct649 + extrct650 + extrct651 + extrct652 + extrct653 + extrct654 + extrct655 + extrct656 + extrct657 + extrct658 + extrct659 + extrct660 + extrct661 + extrct662 + extrct663 + extrct664 + extrct665 + extrct666 + extrct667 + extrct668 + extrct669 + extrct670 + extrct671 + extrct672 + extrct673 + extrct674 + extrct675 + extrct676 + extrct677 + extrct678 + extrct679 + extrct680 + extrct681 + extrct682 + extrct683 + extrct684 + extrct685 + extrct686 + extrct687 + extrct688 + extrct689 + extrct690 + extrct691 + extrct692 + extrct693 + extrct694 + extrct695 + extrct696 + extrct697 + extrct698 + extrct699 + extrct700 + extrct701 + extrct702 + extrct703 + extrct704 + extrct705 + extrct706 + extrct707 + extrct708 + extrct709 + extrct710 + extrct711 + extrct712 + extrct713 + extrct714 + extrct715 + extrct716 + extrct717 + extrct718 + extrct719 + extrct720 + extrct721 + extrct722 + extrct723 + extrct724 + extrct725 + extrct726 + extrct727 + extrct728 + extrct729 + extrct730 + extrct731 + extrct732 + extrct733 + extrct734 + extrct735 + extrct736 + extrct737 + extrct738 + extrct739 + extrct740 + extrct741 + extrct742 + extrct743 + extrct744 + extrct745 + extrct746 + extrct747 + extrct748 + extrct749 + extrct750 + extrct751 + extrct752 + extrct753 + extrct754 + extrct755 + extrct756 + extrct757 + extrct758 + extrct759 + extrct760 + extrct761 + extrct762 + extrct763 + extrct764 + extrct765 + extrct766 + extrct767 + extrct768 + extrct769 + extrct770 + extrct771 + extrct772 + extrct773 + extrct774 + extrct775 + extrct776 + extrct777 + extrct778 + extrct779 + extrct780 + extrct781 + extrct782 + extrct783 + extrct784 + extrct785 + extrct786 + extrct787 + extrct788 + extrct789 + extrct790 + extrct791 + extrct792 + extrct793 + extrct794 + extrct795 + extrct796 + extrct797 + extrct798 + extrct799 + extrct800 + extrct801 + extrct802 + extrct803 + extrct804 + extrct805 + extrct806 + extrct807 + extrct808 + extrct809 + extrct810 + extrct811 + extrct812 + extrct813 + extrct814 + extrct815 + extrct816 + extrct817 + extrct818 + extrct819 + extrct820 + extrct821 + extrct822 + extrct823 + extrct824 + extrct825 + extrct826 + extrct827 + extrct828 + extrct829 + extrct830 + extrct831 + extrct832 + extrct833 + extrct834 + extrct835 + extrct836 + extrct837 + extrct838 + extrct839 + extrct840 + extrct841 + extrct842 + extrct843 + extrct844 + extrct845 + extrct846 + extrct847 + extrct848 + extrct849 + extrct850 + extrct851 + extrct852 + extrct853 + extrct854 + extrct855 + extrct856 + extrct857 + extrct858 + extrct859 + extrct860 + extrct861 + extrct862 + extrct863 + extrct864 + extrct865 + extrct866 + extrct867 + extrct868 + extrct869 + extrct870 + extrct871 + extrct872 + extrct873 + extrct874 + extrct875 + extrct876 + extrct877 + extrct878 + extrct879 + extrct880 + extrct881 + extrct882 + extrct883 + extrct884 + extrct885 + extrct886 + extrct887 + extrct888 + extrct889 + extrct890 + extrct891 + extrct892 + extrct893 + extrct894 + extrct895 + extrct896 + extrct897 + extrct898 + extrct899 + extrct900 + \ No newline at end of file diff --git a/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.English_(en_US).xml b/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.English_(en_US).xml index ef6503e..4dd7737 100644 --- a/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.English_(en_US).xml +++ b/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.English_(en_US).xml @@ -1,12 +1,11 @@ - - Frame Extractor - Auto-Generate - # to Create: - Auto-Gen - Save Extrathumb - Extracting Frame... - Load Movie - Load Episode - Save as Poster - \ No newline at end of file + Frame Extractor + Auto-Generate + # to Create: + Auto-Gen + Save Extrathumb + Extracting Frame... + Load Movie + Load Episode + Save as Poster + diff --git a/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.German_(de_DE).xml b/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.German_(de_DE).xml index 5ddfb54..bd99d45 100644 --- a/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.German_(de_DE).xml +++ b/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.German_(de_DE).xml @@ -1,12 +1,11 @@ - - Auto-generieren - # Anzahl - Auto-Gen - Extrathumb speichern - Extrahiere Frame... - Film laden - Episode laden - Als Poster speichern + Frame Extractor + Auto-generieren + # Anzahl + Auto-Gen + Extrathumb speichern + Extrahiere Frame... + Film laden + Episode laden + Als Poster speichern - diff --git a/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.Norwegian_(no_NO).xml b/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.Norwegian_(no_NO).xml new file mode 100644 index 0000000..f107c6c --- /dev/null +++ b/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.Norwegian_(no_NO).xml @@ -0,0 +1,11 @@ + + Bildeekstraktør + Auto-generator + # til å lage: + Auto-gen + Lagre ekstrakunst + Henter bilde... + Last film + Last episode + Lagre som plakat + diff --git a/Addons/generic.EmberCore.Extractor/My Project/AssemblyInfo.vb b/Addons/generic.EmberCore.Extractor/My Project/AssemblyInfo.vb index 098ef9a..18c8661 100644 --- a/Addons/generic.EmberCore.Extractor/My Project/AssemblyInfo.vb +++ b/Addons/generic.EmberCore.Extractor/My Project/AssemblyInfo.vb @@ -9,7 +9,7 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - + diff --git a/Addons/generic.EmberCore.Extractor/generic.EmberCore.Extractor.vbproj b/Addons/generic.EmberCore.Extractor/generic.EmberCore.Extractor.vbproj index e85ddcf..d1fc387 100644 --- a/Addons/generic.EmberCore.Extractor/generic.EmberCore.Extractor.vbproj +++ b/Addons/generic.EmberCore.Extractor/generic.EmberCore.Extractor.vbproj @@ -189,13 +189,16 @@ + + PreserveNewest + PreserveNewest PreserveNewest - + PreserveNewest diff --git a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.Debug_(db_DB).xml b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.Debug_(db_DB).xml new file mode 100644 index 0000000..aea2229 --- /dev/null +++ b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + media1 + media2 + media3 + media4 + media5 + media6 + media7 + media8 + media9 + media10 + media11 + media12 + media13 + media14 + media15 + media16 + media17 + media18 + media19 + media20 + media21 + media22 + media23 + media24 + media25 + media26 + media27 + media28 + media29 + media30 + media31 + media32 + media33 + media34 + media35 + media36 + media37 + media38 + media39 + media40 + media41 + media42 + media43 + media44 + media45 + media46 + media47 + media48 + media49 + media50 + media51 + media52 + media53 + media54 + media55 + media56 + media57 + media58 + media59 + media60 + media61 + media62 + media63 + media64 + media65 + media66 + media67 + media68 + media69 + media70 + media71 + media72 + media73 + media74 + media75 + media76 + media77 + media78 + media79 + media80 + media81 + media82 + media83 + media84 + media85 + media86 + media87 + media88 + media89 + media90 + media91 + media92 + media93 + media94 + media95 + media96 + media97 + media98 + media99 + media100 + media101 + media102 + media103 + media104 + media105 + media106 + media107 + media108 + media109 + media110 + media111 + media112 + media113 + media114 + media115 + media116 + media117 + media118 + media119 + media120 + media121 + media122 + media123 + media124 + media125 + media126 + media127 + media128 + media129 + media130 + media131 + media132 + media133 + media134 + media135 + media136 + media137 + media138 + media139 + media140 + media141 + media142 + media143 + media144 + media145 + media146 + media147 + media148 + media149 + media150 + media151 + media152 + media153 + media154 + media155 + media156 + media157 + media158 + media159 + media160 + media161 + media162 + media163 + media164 + media165 + media166 + media167 + media168 + media169 + media170 + media171 + media172 + media173 + media174 + media175 + media176 + media177 + media178 + media179 + media180 + media181 + media182 + media183 + media184 + media185 + media186 + media187 + media188 + media189 + media190 + media191 + media192 + media193 + media194 + media195 + media196 + media197 + media198 + media199 + media200 + media201 + media202 + media203 + media204 + media205 + media206 + media207 + media208 + media209 + media210 + media211 + media212 + media213 + media214 + media215 + media216 + media217 + media218 + media219 + media220 + media221 + media222 + media223 + media224 + media225 + media226 + media227 + media228 + media229 + media230 + media231 + media232 + media233 + media234 + media235 + media236 + media237 + media238 + media239 + media240 + media241 + media242 + media243 + media244 + media245 + media246 + media247 + media248 + media249 + media250 + media251 + media252 + media253 + media254 + media255 + media256 + media257 + media258 + media259 + media260 + media261 + media262 + media263 + media264 + media265 + media266 + media267 + media268 + media269 + media270 + media271 + media272 + media273 + media274 + media275 + media276 + media277 + media278 + media279 + media280 + media281 + media282 + media283 + media284 + media285 + media286 + media287 + media288 + media289 + media290 + media291 + media292 + media293 + media294 + media295 + media296 + media297 + media298 + media299 + media300 + media301 + media302 + media303 + media304 + media305 + media306 + media307 + media308 + media309 + media310 + media311 + media312 + media313 + media314 + media315 + media316 + media317 + media318 + media319 + media320 + media321 + media322 + media323 + media324 + media325 + media326 + media327 + media328 + media329 + media330 + media331 + media332 + media333 + media334 + media335 + media336 + media337 + media338 + media339 + media340 + media341 + media342 + media343 + media344 + media345 + media346 + media347 + media348 + media349 + media350 + media351 + media352 + media353 + media354 + media355 + media356 + media357 + media358 + media359 + media360 + media361 + media362 + media363 + media364 + media365 + media366 + media367 + media368 + media369 + media370 + media371 + media372 + media373 + media374 + media375 + media376 + media377 + media378 + media379 + media380 + media381 + media382 + media383 + media384 + media385 + media386 + media387 + media388 + media389 + media390 + media391 + media392 + media393 + media394 + media395 + media396 + media397 + media398 + media399 + media400 + media401 + media402 + media403 + media404 + media405 + media406 + media407 + media408 + media409 + media410 + media411 + media412 + media413 + media414 + media415 + media416 + media417 + media418 + media419 + media420 + media421 + media422 + media423 + media424 + media425 + media426 + media427 + media428 + media429 + media430 + media431 + media432 + media433 + media434 + media435 + media436 + media437 + media438 + media439 + media440 + media441 + media442 + media443 + media444 + media445 + media446 + media447 + media448 + media449 + media450 + media451 + media452 + media453 + media454 + media455 + media456 + media457 + media458 + media459 + media460 + media461 + media462 + media463 + media464 + media465 + media466 + media467 + media468 + media469 + media470 + media471 + media472 + media473 + media474 + media475 + media476 + media477 + media478 + media479 + media480 + media481 + media482 + media483 + media484 + media485 + media486 + media487 + media488 + media489 + media490 + media491 + media492 + media493 + media494 + media495 + media496 + media497 + media498 + media499 + media500 + media501 + media502 + media503 + media504 + media505 + media506 + media507 + media508 + media509 + media510 + media511 + media512 + media513 + media514 + media515 + media516 + media517 + media518 + media519 + media520 + media521 + media522 + media523 + media524 + media525 + media526 + media527 + media528 + media529 + media530 + media531 + media532 + media533 + media534 + media535 + media536 + media537 + media538 + media539 + media540 + media541 + media542 + media543 + media544 + media545 + media546 + media547 + media548 + media549 + media550 + media551 + media552 + media553 + media554 + media555 + media556 + media557 + media558 + media559 + media560 + media561 + media562 + media563 + media564 + media565 + media566 + media567 + media568 + media569 + media570 + media571 + media572 + media573 + media574 + media575 + media576 + media577 + media578 + media579 + media580 + media581 + media582 + media583 + media584 + media585 + media586 + media587 + media588 + media589 + media590 + media591 + media592 + media593 + media594 + media595 + media596 + media597 + media598 + media599 + media600 + media601 + media602 + media603 + media604 + media605 + media606 + media607 + media608 + media609 + media610 + media611 + media612 + media613 + media614 + media615 + media616 + media617 + media618 + media619 + media620 + media621 + media622 + media623 + media624 + media625 + media626 + media627 + media628 + media629 + media630 + media631 + media632 + media633 + media634 + media635 + media636 + media637 + media638 + media639 + media640 + media641 + media642 + media643 + media644 + media645 + media646 + media647 + media648 + media649 + media650 + media651 + media652 + media653 + media654 + media655 + media656 + media657 + media658 + media659 + media660 + media661 + media662 + media663 + media664 + media665 + media666 + media667 + media668 + media669 + media670 + media671 + media672 + media673 + media674 + media675 + media676 + media677 + media678 + media679 + media680 + media681 + media682 + media683 + media684 + media685 + media686 + media687 + media688 + media689 + media690 + media691 + media692 + media693 + media694 + media695 + media696 + media697 + media698 + media699 + media700 + media701 + media702 + media703 + media704 + media705 + media706 + media707 + media708 + media709 + media710 + media711 + media712 + media713 + media714 + media715 + media716 + media717 + media718 + media719 + media720 + media721 + media722 + media723 + media724 + media725 + media726 + media727 + media728 + media729 + media730 + media731 + media732 + media733 + media734 + media735 + media736 + media737 + media738 + media739 + media740 + media741 + media742 + media743 + media744 + media745 + media746 + media747 + media748 + media749 + media750 + media751 + media752 + media753 + media754 + media755 + media756 + media757 + media758 + media759 + media760 + media761 + media762 + media763 + media764 + media765 + media766 + media767 + media768 + media769 + media770 + media771 + media772 + media773 + media774 + media775 + media776 + media777 + media778 + media779 + media780 + media781 + media782 + media783 + media784 + media785 + media786 + media787 + media788 + media789 + media790 + media791 + media792 + media793 + media794 + media795 + media796 + media797 + media798 + media799 + media800 + media801 + media802 + media803 + media804 + media805 + media806 + media807 + media808 + media809 + media810 + media811 + media812 + media813 + media814 + media815 + media816 + media817 + media818 + media819 + media820 + media821 + media822 + media823 + media824 + media825 + media826 + media827 + media828 + media829 + media830 + media831 + media832 + media833 + media834 + media835 + media836 + media837 + media838 + media839 + media840 + media841 + media842 + media843 + media844 + media845 + media846 + media847 + media848 + media849 + media850 + media851 + media852 + media853 + media854 + media855 + media856 + media857 + media858 + media859 + media860 + media861 + media862 + media863 + media864 + media865 + media866 + media867 + media868 + media869 + media870 + media871 + media872 + media873 + media874 + media875 + media876 + media877 + media878 + media879 + media880 + media881 + media882 + media883 + media884 + media885 + media886 + media887 + media888 + media889 + media890 + media891 + media892 + media893 + media894 + media895 + media896 + media897 + media898 + media899 + media900 + \ No newline at end of file diff --git a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.English_(en_US)-Help.xml b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.English_(en_US)-Help.xml index 134992e..76075e4 100644 --- a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.English_(en_US)-Help.xml +++ b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.English_(en_US)-Help.xml @@ -1,13 +1,12 @@ - - Enable or disable this module. - - - - - - - - - - \ No newline at end of file + Enable or disable this module. + + + + + + + + + + diff --git a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.English_(en_US).xml b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.English_(en_US).xml index 442d6ab..bdccc38 100644 --- a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.English_(en_US).xml +++ b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.English_(en_US).xml @@ -1,11 +1,10 @@ - - Media File Manager - Media File Manager - Move To - Copy To - Move from {0} To {1} - Copy from {0} To {1} - Moving Movie - Copying Movie - \ No newline at end of file + Media File Manager + Media File Manager + Move To + Copy To + Move from {0} To {1} + Copy from {0} To {1} + Moving Movie + Copying Movie + diff --git a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.German_(de_DE)-Help.xml b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.German_(de_DE)-Help.xml index 975ca42..03a384c 100644 --- a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.German_(de_DE)-Help.xml +++ b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.German_(de_DE)-Help.xml @@ -1,14 +1,12 @@ - - Aktiviert dieses Modul. - - - - - - - - - + Aktiviert oder deaktiviert dieses Modul. + + + + + + + + + - diff --git a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.German_(de_DE).xml b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.German_(de_DE).xml index 668cd4f..54c43c7 100644 --- a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.German_(de_DE).xml +++ b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.German_(de_DE).xml @@ -1,11 +1,10 @@ - - Medien Datei Manager - Verschiebe nach - Kopiere nach - Verschiebe von {0} nach {1} - Kopiere von {0} nach {1} - Verschiebe Film - Kopiere Film + Medien Datei Manager + Medien Datei Manager + Verschiebe nach + Kopiere nach + Verschiebe von {0} nach {1} + Kopiere von {0} nach {1} + Verschiebe Film + Kopiere Film - diff --git a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.Norwegian_(no_NO)-Help.xml b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..74808ef --- /dev/null +++ b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,12 @@ + + Slå på eller slå av denne modulen. + + + + + + + + + + diff --git a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.Norwegian_(no_NO).xml b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.Norwegian_(no_NO).xml new file mode 100644 index 0000000..1ee6996 --- /dev/null +++ b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.Norwegian_(no_NO).xml @@ -0,0 +1,10 @@ + + Mediafil-manager + Mediafil-manager + Flytt til + Kopiér til + Flytt fra {0} til {1} + Kopiér fra {0} til {1} + Flytter fil + Kopierer film + diff --git "a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.Portugu\303\252s_(pt-BR).xml" "b/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.Portugu\303\252s_(pt-BR).xml" deleted file mode 100644 index a91dc2d..0000000 --- "a/Addons/generic.EmberCore.MediaFileManager/Langs/generic.EmberCore.MediaFileManager.Portugu\303\252s_(pt-BR).xml" +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/Addons/generic.EmberCore.MediaFileManager/My Project/AssemblyInfo.vb b/Addons/generic.EmberCore.MediaFileManager/My Project/AssemblyInfo.vb index 05f670c..513d26c 100644 --- a/Addons/generic.EmberCore.MediaFileManager/My Project/AssemblyInfo.vb +++ b/Addons/generic.EmberCore.MediaFileManager/My Project/AssemblyInfo.vb @@ -9,7 +9,7 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - + diff --git a/Addons/generic.EmberCore.MediaFileManager/generic.EmberCore.MediaFileManager.vbproj b/Addons/generic.EmberCore.MediaFileManager/generic.EmberCore.MediaFileManager.vbproj index a979d1e..870f0d7 100644 --- a/Addons/generic.EmberCore.MediaFileManager/generic.EmberCore.MediaFileManager.vbproj +++ b/Addons/generic.EmberCore.MediaFileManager/generic.EmberCore.MediaFileManager.vbproj @@ -176,6 +176,9 @@ + + PreserveNewest + PreserveNewest @@ -188,7 +191,10 @@ PreserveNewest - + + PreserveNewest + + PreserveNewest diff --git a/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.Debug_(db_DB).xml b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.Debug_(db_DB).xml new file mode 100644 index 0000000..49d204f --- /dev/null +++ b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + export1 + export2 + export3 + export4 + export5 + export6 + export7 + export8 + export9 + export10 + export11 + export12 + export13 + export14 + export15 + export16 + export17 + export18 + export19 + export20 + export21 + export22 + export23 + export24 + export25 + export26 + export27 + export28 + export29 + export30 + export31 + export32 + export33 + export34 + export35 + export36 + export37 + export38 + export39 + export40 + export41 + export42 + export43 + export44 + export45 + export46 + export47 + export48 + export49 + export50 + export51 + export52 + export53 + export54 + export55 + export56 + export57 + export58 + export59 + export60 + export61 + export62 + export63 + export64 + export65 + export66 + export67 + export68 + export69 + export70 + export71 + export72 + export73 + export74 + export75 + export76 + export77 + export78 + export79 + export80 + export81 + export82 + export83 + export84 + export85 + export86 + export87 + export88 + export89 + export90 + export91 + export92 + export93 + export94 + export95 + export96 + export97 + export98 + export99 + export100 + export101 + export102 + export103 + export104 + export105 + export106 + export107 + export108 + export109 + export110 + export111 + export112 + export113 + export114 + export115 + export116 + export117 + export118 + export119 + export120 + export121 + export122 + export123 + export124 + export125 + export126 + export127 + export128 + export129 + export130 + export131 + export132 + export133 + export134 + export135 + export136 + export137 + export138 + export139 + export140 + export141 + export142 + export143 + export144 + export145 + export146 + export147 + export148 + export149 + export150 + export151 + export152 + export153 + export154 + export155 + export156 + export157 + export158 + export159 + export160 + export161 + export162 + export163 + export164 + export165 + export166 + export167 + export168 + export169 + export170 + export171 + export172 + export173 + export174 + export175 + export176 + export177 + export178 + export179 + export180 + export181 + export182 + export183 + export184 + export185 + export186 + export187 + export188 + export189 + export190 + export191 + export192 + export193 + export194 + export195 + export196 + export197 + export198 + export199 + export200 + export201 + export202 + export203 + export204 + export205 + export206 + export207 + export208 + export209 + export210 + export211 + export212 + export213 + export214 + export215 + export216 + export217 + export218 + export219 + export220 + export221 + export222 + export223 + export224 + export225 + export226 + export227 + export228 + export229 + export230 + export231 + export232 + export233 + export234 + export235 + export236 + export237 + export238 + export239 + export240 + export241 + export242 + export243 + export244 + export245 + export246 + export247 + export248 + export249 + export250 + export251 + export252 + export253 + export254 + export255 + export256 + export257 + export258 + export259 + export260 + export261 + export262 + export263 + export264 + export265 + export266 + export267 + export268 + export269 + export270 + export271 + export272 + export273 + export274 + export275 + export276 + export277 + export278 + export279 + export280 + export281 + export282 + export283 + export284 + export285 + export286 + export287 + export288 + export289 + export290 + export291 + export292 + export293 + export294 + export295 + export296 + export297 + export298 + export299 + export300 + export301 + export302 + export303 + export304 + export305 + export306 + export307 + export308 + export309 + export310 + export311 + export312 + export313 + export314 + export315 + export316 + export317 + export318 + export319 + export320 + export321 + export322 + export323 + export324 + export325 + export326 + export327 + export328 + export329 + export330 + export331 + export332 + export333 + export334 + export335 + export336 + export337 + export338 + export339 + export340 + export341 + export342 + export343 + export344 + export345 + export346 + export347 + export348 + export349 + export350 + export351 + export352 + export353 + export354 + export355 + export356 + export357 + export358 + export359 + export360 + export361 + export362 + export363 + export364 + export365 + export366 + export367 + export368 + export369 + export370 + export371 + export372 + export373 + export374 + export375 + export376 + export377 + export378 + export379 + export380 + export381 + export382 + export383 + export384 + export385 + export386 + export387 + export388 + export389 + export390 + export391 + export392 + export393 + export394 + export395 + export396 + export397 + export398 + export399 + export400 + export401 + export402 + export403 + export404 + export405 + export406 + export407 + export408 + export409 + export410 + export411 + export412 + export413 + export414 + export415 + export416 + export417 + export418 + export419 + export420 + export421 + export422 + export423 + export424 + export425 + export426 + export427 + export428 + export429 + export430 + export431 + export432 + export433 + export434 + export435 + export436 + export437 + export438 + export439 + export440 + export441 + export442 + export443 + export444 + export445 + export446 + export447 + export448 + export449 + export450 + export451 + export452 + export453 + export454 + export455 + export456 + export457 + export458 + export459 + export460 + export461 + export462 + export463 + export464 + export465 + export466 + export467 + export468 + export469 + export470 + export471 + export472 + export473 + export474 + export475 + export476 + export477 + export478 + export479 + export480 + export481 + export482 + export483 + export484 + export485 + export486 + export487 + export488 + export489 + export490 + export491 + export492 + export493 + export494 + export495 + export496 + export497 + export498 + export499 + export500 + export501 + export502 + export503 + export504 + export505 + export506 + export507 + export508 + export509 + export510 + export511 + export512 + export513 + export514 + export515 + export516 + export517 + export518 + export519 + export520 + export521 + export522 + export523 + export524 + export525 + export526 + export527 + export528 + export529 + export530 + export531 + export532 + export533 + export534 + export535 + export536 + export537 + export538 + export539 + export540 + export541 + export542 + export543 + export544 + export545 + export546 + export547 + export548 + export549 + export550 + export551 + export552 + export553 + export554 + export555 + export556 + export557 + export558 + export559 + export560 + export561 + export562 + export563 + export564 + export565 + export566 + export567 + export568 + export569 + export570 + export571 + export572 + export573 + export574 + export575 + export576 + export577 + export578 + export579 + export580 + export581 + export582 + export583 + export584 + export585 + export586 + export587 + export588 + export589 + export590 + export591 + export592 + export593 + export594 + export595 + export596 + export597 + export598 + export599 + export600 + export601 + export602 + export603 + export604 + export605 + export606 + export607 + export608 + export609 + export610 + export611 + export612 + export613 + export614 + export615 + export616 + export617 + export618 + export619 + export620 + export621 + export622 + export623 + export624 + export625 + export626 + export627 + export628 + export629 + export630 + export631 + export632 + export633 + export634 + export635 + export636 + export637 + export638 + export639 + export640 + export641 + export642 + export643 + export644 + export645 + export646 + export647 + export648 + export649 + export650 + export651 + export652 + export653 + export654 + export655 + export656 + export657 + export658 + export659 + export660 + export661 + export662 + export663 + export664 + export665 + export666 + export667 + export668 + export669 + export670 + export671 + export672 + export673 + export674 + export675 + export676 + export677 + export678 + export679 + export680 + export681 + export682 + export683 + export684 + export685 + export686 + export687 + export688 + export689 + export690 + export691 + export692 + export693 + export694 + export695 + export696 + export697 + export698 + export699 + export700 + export701 + export702 + export703 + export704 + export705 + export706 + export707 + export708 + export709 + export710 + export711 + export712 + export713 + export714 + export715 + export716 + export717 + export718 + export719 + export720 + export721 + export722 + export723 + export724 + export725 + export726 + export727 + export728 + export729 + export730 + export731 + export732 + export733 + export734 + export735 + export736 + export737 + export738 + export739 + export740 + export741 + export742 + export743 + export744 + export745 + export746 + export747 + export748 + export749 + export750 + export751 + export752 + export753 + export754 + export755 + export756 + export757 + export758 + export759 + export760 + export761 + export762 + export763 + export764 + export765 + export766 + export767 + export768 + export769 + export770 + export771 + export772 + export773 + export774 + export775 + export776 + export777 + export778 + export779 + export780 + export781 + export782 + export783 + export784 + export785 + export786 + export787 + export788 + export789 + export790 + export791 + export792 + export793 + export794 + export795 + export796 + export797 + export798 + export799 + export800 + export801 + export802 + export803 + export804 + export805 + export806 + export807 + export808 + export809 + export810 + export811 + export812 + export813 + export814 + export815 + export816 + export817 + export818 + export819 + export820 + export821 + export822 + export823 + export824 + export825 + export826 + export827 + export828 + export829 + export830 + export831 + export832 + export833 + export834 + export835 + export836 + export837 + export838 + export839 + export840 + export841 + export842 + export843 + export844 + export845 + export846 + export847 + export848 + export849 + export850 + export851 + export852 + export853 + export854 + export855 + export856 + export857 + export858 + export859 + export860 + export861 + export862 + export863 + export864 + export865 + export866 + export867 + export868 + export869 + export870 + export871 + export872 + export873 + export874 + export875 + export876 + export877 + export878 + export879 + export880 + export881 + export882 + export883 + export884 + export885 + export886 + export887 + export888 + export889 + export890 + export891 + export892 + export893 + export894 + export895 + export896 + export897 + export898 + export899 + export900 + \ No newline at end of file diff --git a/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.English_(en_US)-Help.xml b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.English_(en_US)-Help.xml index c7f4652..90ebade 100644 --- a/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.English_(en_US)-Help.xml +++ b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.English_(en_US)-Help.xml @@ -1,4 +1,11 @@ - - Enable or disable this module. - \ No newline at end of file + Enable or disable this module. + The folder where the created HTML Template is stored + The desired width of exported fanart. A smaller value results in smaller files and faster loading times + The desired width of exported poster. A smaller value results in smaller files and faster loading times + 100 means no quality loss, but also biggest filesize - set smaller value to enhance loading times! + Three filters which an can be used to store different filters. Those can be selected in Movie Export Interface + Different filtertypes to choose from + Save selected filter + Reset selected filter + diff --git a/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.English_(en_US).xml b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.English_(en_US).xml index 6b65299..eefa544 100644 --- a/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.English_(en_US).xml +++ b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.English_(en_US).xml @@ -1,19 +1,30 @@ - - Movie List Exporter - Source Folder - Video Flag - Audio Flag - Preparing preview. Please wait... - Source Folder - Loading. Please wait... - Saving all files. Please wait... - Export Movies - Reset - Filter - in - Compiling Movie List... - Canceling Compilation... - Template - Export Movie List - \ No newline at end of file + Movie List Exporter + Source Folder + Video Flag + Audio Flag + Preparing preview. Please wait... + Source Folder + Loading. Please wait... + Saving all files. Please wait... + Export Movies + Reset + Filter + in + Compiling Movie List... + Canceling Compilation... + Template + Export Movie List + Export TV Shows + Generate Filter + Export Path + Fanart Width [px] + Poster Height [px] + Filter Settings + Image Settings + General Settings + Save Filter + Reset Filter + Generate HTML... + Template saved to: + diff --git a/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.German_(de_DE)-Help.xml b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.German_(de_DE)-Help.xml index f1152fe..e5a051c 100644 --- a/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.German_(de_DE)-Help.xml +++ b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.German_(de_DE)-Help.xml @@ -1,5 +1,3 @@ - - Aktiviert dieses Modul + Aktiviert oder deaktiviert dieses Modul. - diff --git a/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.German_(de_DE).xml b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.German_(de_DE).xml index 75750f9..4b4c86c 100644 --- a/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.German_(de_DE).xml +++ b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.German_(de_DE).xml @@ -1,19 +1,18 @@ - - Quellverzeichnis - Video Flag - Audio Flag - Bereite Vorschau vor, bitte warten... - Quellverzeichnis - Lade, bitte warten... - Speichere allen Dateien, bitte warten... - Filme exportieren - Zurücksetzen - Filter - in - Stelle Filmliste zusammen... - Zusammenstellung abbrechen... - Template - Export Film Liste + Filmlisten Exporter + Quellverzeichnis + Video Flag + Audio Flag + Bereite Vorschau vor, bitte warten... + Quellverzeichnis + Lade, bitte warten... + Speichere allen Dateien, bitte warten... + Filme exportieren + Zurücksetzen + Filter + in + Stelle Filmliste zusammen... + Zusammenstellung abbrechen... + Template + Exportiere Filmliste - diff --git "a/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.Portugu\303\252s_(pt-BR).xml" b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.Norwegian_(no_NO)-Help.xml similarity index 52% rename from "Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.Portugu\303\252s_(pt-BR).xml" rename to Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.Norwegian_(no_NO)-Help.xml index a91dc2d..9a57705 100644 --- "a/Addons/generic.EmberCore.Extractor/Langs/generic.EmberCore.Extractor.Portugu\303\252s_(pt-BR).xml" +++ b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.Norwegian_(no_NO)-Help.xml @@ -1,3 +1,3 @@ - - \ No newline at end of file + Slå på eller slå av denne modulen. + diff --git a/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.Norwegian_(no_NO).xml b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.Norwegian_(no_NO).xml new file mode 100644 index 0000000..4af8153 --- /dev/null +++ b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.Norwegian_(no_NO).xml @@ -0,0 +1,18 @@ + + Filmliste-eksport + Kildemappe + Videoflagg + Lydflagg + Forbereder sniktitt. Vennligst vent... + Kildemappe + Laster... Vennligst vent... + Lagrer alle filer. Vennligst vent... + Eksportér filmer + Nullstill + Filter + inn + Kompilerer filmliste... + Kansellerer kompilasjon... + Templat + Exportér filmliste + diff --git "a/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.Portugu\303\252s_(pt-BR).xml" "b/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.Portugu\303\252s_(pt-BR).xml" deleted file mode 100644 index a91dc2d..0000000 --- "a/Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.Portugu\303\252s_(pt-BR).xml" +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/Addons/generic.EmberCore.MovieExport/Module.MovieExporter.vb b/Addons/generic.EmberCore.MovieExport/Module.MovieExporter.vb index 37b3e06..5066c4e 100644 --- a/Addons/generic.EmberCore.MovieExport/Module.MovieExporter.vb +++ b/Addons/generic.EmberCore.MovieExport/Module.MovieExporter.vb @@ -31,6 +31,7 @@ Public Class MovieExporterModule Private _enabled As Boolean = False Private _Name As String = "Movie List Exporter" Private _setup As frmSettingsHolder + Private MySettings As New _MySettings #End Region 'Fields @@ -123,12 +124,26 @@ Public Class MovieExporterModule Sub Init(ByVal sAssemblyName As String, ByVal sExecutable As String) Implements Interfaces.EmberExternalModule.Init _AssemblyName = sAssemblyName - Master.eLang.LoadLanguage(Master.eSettings.Language, sExecutable) - End Sub + Master.eLang.LoadLanguage(Master.eSettings.Language, sExecutable) + LoadSettings() + End Sub + + Function InjectSetup() As Containers.SettingsPanel Implements Interfaces.EmberExternalModule.InjectSetup Me._setup = New frmSettingsHolder Me._setup.cbEnabled.Checked = Me._enabled + + _setup.txt_exportmoviepath.Text = MySettings.ExportPath + _setup.chkExportTVShows.Checked = MySettings.ExportTVShows + _setup.cbo_exportmovieposter.Text = CStr(MySettings.ExportPosterHeight) + _setup.cbo_exportmoviefanart.Text = CStr(MySettings.ExportFanartWidth) + _setup.cbo_exportmoviequality.Text = CStr(MySettings.ExportImageQuality) + _setup.lbl_exportmoviefilter1saved.Text = MySettings.ExportFilter1 + _setup.lbl_exportmoviefilter2saved.Text = MySettings.ExportFilter2 + _setup.lbl_exportmoviefilter3saved.Text = MySettings.ExportFilter3 + + Dim SPanel As New Containers.SettingsPanel SPanel.Name = Me._Name SPanel.Text = Master.eLang.GetString(0, "Movie List Exporter") @@ -152,10 +167,60 @@ Public Class MovieExporterModule RaiseEvent GenericEvent(Enums.ModuleEventType.Generic, New List(Of Object)(New Object() {"controlsenabled", True})) End Sub + Sub LoadSettings() + MySettings.ExportPath = AdvancedSettings.GetSetting("ExportPath", "") + MySettings.ExportTVShows = AdvancedSettings.GetBooleanSetting("ExportTVShows", False) + MySettings.ExportPosterHeight = CInt(AdvancedSettings.GetSetting("ExportPosterHeight", "300")) + MySettings.ExportFanartWidth = CInt(AdvancedSettings.GetSetting("ExportFanartWidth", "800")) + MySettings.ExportFilter1 = AdvancedSettings.GetSetting("ExportFilter1", "-") + MySettings.ExportFilter2 = AdvancedSettings.GetSetting("ExportFilter2", "-") + MySettings.ExportFilter3 = AdvancedSettings.GetSetting("ExportFilter3", "-") + MySettings.ExportImageQuality = CInt(AdvancedSettings.GetSetting("ExportImageQuality", "70")) + End Sub + Sub SaveSetup(ByVal DoDispose As Boolean) Implements Interfaces.EmberExternalModule.SaveSetup Me.Enabled = Me._setup.cbEnabled.Checked + MySettings.ExportPath = _setup.txt_exportmoviepath.Text + MySettings.ExportTVShows = _setup.chkExportTVShows.Checked + MySettings.ExportPosterHeight = CInt(_setup.cbo_exportmovieposter.Text) + MySettings.ExportFanartWidth = CInt(_setup.cbo_exportmoviefanart.Text) + MySettings.ExportFilter1 = _setup.lbl_exportmoviefilter1saved.Text + MySettings.ExportFilter2 = _setup.lbl_exportmoviefilter2saved.Text + MySettings.ExportFilter3 = _setup.lbl_exportmoviefilter3saved.Text + MySettings.ExportImageQuality = CInt(_setup.cbo_exportmoviequality.Text) + SaveSettings() + End Sub + + Sub SaveSettings() + AdvancedSettings.SetSetting("ExportPath", MySettings.ExportPath) + AdvancedSettings.SetBooleanSetting("ExportTVShows", MySettings.ExportTVShows) + AdvancedSettings.SetSetting("ExportPosterHeight", CStr(MySettings.ExportPosterHeight)) + AdvancedSettings.SetSetting("ExportFanartWidth", CStr(MySettings.ExportFanartWidth)) + AdvancedSettings.SetSetting("ExportFilter1", MySettings.ExportFilter1) + AdvancedSettings.SetSetting("ExportFilter2", MySettings.ExportFilter2) + AdvancedSettings.SetSetting("ExportFilter3", MySettings.ExportFilter3) + AdvancedSettings.SetSetting("ExportImageQuality", CStr(MySettings.ExportImageQuality)) End Sub #End Region 'Methods +#Region "Nested Types" + + Structure _MySettings + +#Region "Fields" + + Dim ExportPath As String + Dim ExportFanartWidth As Integer + Dim ExportPosterHeight As Integer + Dim ExportFilter1 As String + Dim ExportFilter2 As String + Dim ExportFilter3 As String + Dim ExportTVShows As Boolean + Dim ExportImageQuality As Integer +#End Region 'Fields + + End Structure + +#End Region 'Nested Types End Class \ No newline at end of file diff --git a/Addons/generic.EmberCore.MovieExport/My Project/AssemblyInfo.vb b/Addons/generic.EmberCore.MovieExport/My Project/AssemblyInfo.vb index 841ad70..9a7c4e6 100644 --- a/Addons/generic.EmberCore.MovieExport/My Project/AssemblyInfo.vb +++ b/Addons/generic.EmberCore.MovieExport/My Project/AssemblyInfo.vb @@ -9,7 +9,7 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - + diff --git a/Addons/generic.EmberCore.MovieExport/dlgExportMovies.designer.vb b/Addons/generic.EmberCore.MovieExport/dlgExportMovies.designer.vb index 8260205..46b7bbf 100644 --- a/Addons/generic.EmberCore.MovieExport/dlgExportMovies.designer.vb +++ b/Addons/generic.EmberCore.MovieExport/dlgExportMovies.designer.vb @@ -5,36 +5,27 @@ Partial Class dlgExportMovies #Region "Fields" Friend WithEvents btnCancel As System.Windows.Forms.Button - Friend WithEvents btnSource As System.Windows.Forms.Button - Friend WithEvents cbSearch As System.Windows.Forms.ComboBox - Friend WithEvents cbTemplate As System.Windows.Forms.ComboBox + Friend WithEvents cbTemplate As System.Windows.Forms.ComboBox Friend WithEvents Close_Button As System.Windows.Forms.Button Friend WithEvents ImageList1 As System.Windows.Forms.ImageList - Friend WithEvents Label1 As System.Windows.Forms.Label - Friend WithEvents Label2 As System.Windows.Forms.Label - Friend WithEvents lblCanceling As System.Windows.Forms.Label - Friend WithEvents lblCompiling As System.Windows.Forms.Label - Friend WithEvents lblFile As System.Windows.Forms.Label - Friend WithEvents lblIn As System.Windows.Forms.Label - Friend WithEvents lstSources As System.Windows.Forms.CheckedListBox - Friend WithEvents pbCompile As System.Windows.Forms.ProgressBar - Friend WithEvents pnlBG As System.Windows.Forms.Panel - Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel - Friend WithEvents pnlCancel As System.Windows.Forms.Panel - Friend WithEvents pnlSearch As System.Windows.Forms.Panel - Friend WithEvents Reset_Button As System.Windows.Forms.Button - Friend WithEvents Save_Button As System.Windows.Forms.Button - Friend WithEvents Search_Button As System.Windows.Forms.Button - Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel - Friend WithEvents txtSearch As System.Windows.Forms.TextBox - Friend WithEvents wbMovieList As System.Windows.Forms.WebBrowser + Friend WithEvents lblFilterSelected As System.Windows.Forms.Label + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents lblCanceling As System.Windows.Forms.Label + Friend WithEvents lblCompiling As System.Windows.Forms.Label + Friend WithEvents lblFile As System.Windows.Forms.Label + Friend WithEvents pbCompile As System.Windows.Forms.ProgressBar + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlCancel As System.Windows.Forms.Panel + Friend WithEvents Save_Button As System.Windows.Forms.Button + Friend WithEvents wbMovieList As System.Windows.Forms.WebBrowser 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer - #End Region 'Fields +#End Region 'Fields - #Region "Methods" +#Region "Methods" 'Form overrides dispose to clean up the component list. _ @@ -53,326 +44,241 @@ Partial Class dlgExportMovies 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Me.components = New System.ComponentModel.Container() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgExportMovies)) - Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() - Me.Save_Button = New System.Windows.Forms.Button() - Me.Close_Button = New System.Windows.Forms.Button() - Me.pnlBottomMain = New System.Windows.Forms.Panel() - Me.pnlSearch = New System.Windows.Forms.Panel() - Me.btnSource = New System.Windows.Forms.Button() - Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components) - Me.Reset_Button = New System.Windows.Forms.Button() - Me.Label1 = New System.Windows.Forms.Label() - Me.Search_Button = New System.Windows.Forms.Button() - Me.lblIn = New System.Windows.Forms.Label() - Me.cbSearch = New System.Windows.Forms.ComboBox() - Me.txtSearch = New System.Windows.Forms.TextBox() - Me.Label2 = New System.Windows.Forms.Label() - Me.cbTemplate = New System.Windows.Forms.ComboBox() - Me.pnlCancel = New System.Windows.Forms.Panel() - Me.btnCancel = New System.Windows.Forms.Button() - Me.pbCompile = New System.Windows.Forms.ProgressBar() - Me.lblCompiling = New System.Windows.Forms.Label() - Me.lblFile = New System.Windows.Forms.Label() - Me.lblCanceling = New System.Windows.Forms.Label() - Me.pnlBG = New System.Windows.Forms.Panel() - Me.wbMovieList = New System.Windows.Forms.WebBrowser() - Me.lstSources = New System.Windows.Forms.CheckedListBox() - Me.TableLayoutPanel1.SuspendLayout() - Me.pnlBottomMain.SuspendLayout() - Me.pnlSearch.SuspendLayout() - Me.pnlCancel.SuspendLayout() - Me.pnlBG.SuspendLayout() - Me.SuspendLayout() - ' - 'TableLayoutPanel1 - ' - Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.TableLayoutPanel1.ColumnCount = 2 - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.Controls.Add(Me.Save_Button, 0, 0) - Me.TableLayoutPanel1.Controls.Add(Me.Close_Button, 1, 0) - Me.TableLayoutPanel1.Location = New System.Drawing.Point(886, 6) - Me.TableLayoutPanel1.Name = "TableLayoutPanel1" - Me.TableLayoutPanel1.RowCount = 1 - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29.0!)) - Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) - Me.TableLayoutPanel1.TabIndex = 0 - ' - 'Save_Button - ' - Me.Save_Button.Anchor = System.Windows.Forms.AnchorStyles.None - Me.Save_Button.Enabled = False - Me.Save_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Save_Button.Location = New System.Drawing.Point(3, 3) - Me.Save_Button.Name = "Save_Button" - Me.Save_Button.Size = New System.Drawing.Size(67, 23) - Me.Save_Button.TabIndex = 0 - Me.Save_Button.Text = "Save" - ' - 'Close_Button - ' - Me.Close_Button.Anchor = System.Windows.Forms.AnchorStyles.None - Me.Close_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Close_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Close_Button.Location = New System.Drawing.Point(76, 3) - Me.Close_Button.Name = "Close_Button" - Me.Close_Button.Size = New System.Drawing.Size(67, 23) - Me.Close_Button.TabIndex = 1 - Me.Close_Button.Text = "Close" - ' - 'pnlBottomMain - ' - Me.pnlBottomMain.Controls.Add(Me.pnlSearch) - Me.pnlBottomMain.Controls.Add(Me.Label2) - Me.pnlBottomMain.Controls.Add(Me.cbTemplate) - Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) - Me.pnlBottomMain.Location = New System.Drawing.Point(0, 502) - Me.pnlBottomMain.Name = "pnlBottomMain" - Me.pnlBottomMain.Size = New System.Drawing.Size(1035, 48) - Me.pnlBottomMain.TabIndex = 0 - ' - 'pnlSearch - ' - Me.pnlSearch.Controls.Add(Me.btnSource) - Me.pnlSearch.Controls.Add(Me.Reset_Button) - Me.pnlSearch.Controls.Add(Me.Label1) - Me.pnlSearch.Controls.Add(Me.Search_Button) - Me.pnlSearch.Controls.Add(Me.lblIn) - Me.pnlSearch.Controls.Add(Me.cbSearch) - Me.pnlSearch.Controls.Add(Me.txtSearch) - Me.pnlSearch.Enabled = False - Me.pnlSearch.Location = New System.Drawing.Point(214, 9) - Me.pnlSearch.Name = "pnlSearch" - Me.pnlSearch.Size = New System.Drawing.Size(489, 28) - Me.pnlSearch.TabIndex = 3 - ' - 'btnSource - ' - Me.btnSource.ImageIndex = 0 - Me.btnSource.ImageList = Me.ImageList1 - Me.btnSource.Location = New System.Drawing.Point(196, 4) - Me.btnSource.Name = "btnSource" - Me.btnSource.Size = New System.Drawing.Size(19, 23) - Me.btnSource.TabIndex = 2 - Me.btnSource.UseVisualStyleBackColor = True - Me.btnSource.Visible = False - ' - 'ImageList1 - ' - Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer) - Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent - Me.ImageList1.Images.SetKeyName(0, "asc.png") - Me.ImageList1.Images.SetKeyName(1, "desc.png") - ' - 'Reset_Button - ' - Me.Reset_Button.Enabled = False - Me.Reset_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Reset_Button.Location = New System.Drawing.Point(416, 2) - Me.Reset_Button.Name = "Reset_Button" - Me.Reset_Button.Size = New System.Drawing.Size(67, 23) - Me.Reset_Button.TabIndex = 6 - Me.Reset_Button.Text = "Reset" - ' - 'Label1 - ' - Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label1.Location = New System.Drawing.Point(15, 6) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(51, 14) - Me.Label1.TabIndex = 0 - Me.Label1.Text = "Filter" - Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Search_Button - ' - Me.Search_Button.Enabled = False - Me.Search_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Search_Button.Location = New System.Drawing.Point(343, 2) - Me.Search_Button.Name = "Search_Button" - Me.Search_Button.Size = New System.Drawing.Size(67, 23) - Me.Search_Button.TabIndex = 5 - Me.Search_Button.Text = "Apply" - ' - 'lblIn - ' - Me.lblIn.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblIn.Location = New System.Drawing.Point(209, 7) - Me.lblIn.Name = "lblIn" - Me.lblIn.Size = New System.Drawing.Size(32, 13) - Me.lblIn.TabIndex = 3 - Me.lblIn.Text = "in" - Me.lblIn.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'cbSearch - ' - Me.cbSearch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbSearch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbSearch.FormattingEnabled = True - Me.cbSearch.Location = New System.Drawing.Point(243, 3) - Me.cbSearch.Name = "cbSearch" - Me.cbSearch.Size = New System.Drawing.Size(94, 21) - Me.cbSearch.TabIndex = 4 - ' - 'txtSearch - ' - Me.txtSearch.Location = New System.Drawing.Point(72, 4) - Me.txtSearch.Name = "txtSearch" - Me.txtSearch.Size = New System.Drawing.Size(123, 22) - Me.txtSearch.TabIndex = 1 - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label2.Location = New System.Drawing.Point(11, 17) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(55, 13) - Me.Label2.TabIndex = 1 - Me.Label2.Text = "Template" - Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'cbTemplate - ' - Me.cbTemplate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbTemplate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbTemplate.FormattingEnabled = True - Me.cbTemplate.Location = New System.Drawing.Point(68, 13) - Me.cbTemplate.Name = "cbTemplate" - Me.cbTemplate.Size = New System.Drawing.Size(140, 21) - Me.cbTemplate.TabIndex = 2 - ' - 'pnlCancel - ' - Me.pnlCancel.BackColor = System.Drawing.Color.LightGray - Me.pnlCancel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlCancel.Controls.Add(Me.btnCancel) - Me.pnlCancel.Controls.Add(Me.pbCompile) - Me.pnlCancel.Controls.Add(Me.lblCompiling) - Me.pnlCancel.Controls.Add(Me.lblFile) - Me.pnlCancel.Controls.Add(Me.lblCanceling) - Me.pnlCancel.Location = New System.Drawing.Point(242, 12) - Me.pnlCancel.Name = "pnlCancel" - Me.pnlCancel.Size = New System.Drawing.Size(403, 76) - Me.pnlCancel.TabIndex = 1 - Me.pnlCancel.Visible = False - ' - 'btnCancel - ' - Me.btnCancel.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnCancel.Image = CType(resources.GetObject("btnCancel.Image"), System.Drawing.Image) - Me.btnCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnCancel.Location = New System.Drawing.Point(298, 3) - Me.btnCancel.Name = "btnCancel" - Me.btnCancel.Size = New System.Drawing.Size(100, 30) - Me.btnCancel.TabIndex = 2 - Me.btnCancel.Text = "Cancel" - Me.btnCancel.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnCancel.UseVisualStyleBackColor = True - ' - 'pbCompile - ' - Me.pbCompile.Location = New System.Drawing.Point(8, 36) - Me.pbCompile.Name = "pbCompile" - Me.pbCompile.Size = New System.Drawing.Size(388, 18) - Me.pbCompile.Style = System.Windows.Forms.ProgressBarStyle.Continuous - Me.pbCompile.TabIndex = 3 - ' - 'lblCompiling - ' - Me.lblCompiling.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblCompiling.Location = New System.Drawing.Point(3, 11) - Me.lblCompiling.Name = "lblCompiling" - Me.lblCompiling.Size = New System.Drawing.Size(395, 20) - Me.lblCompiling.TabIndex = 0 - Me.lblCompiling.Text = "Compiling Movie List..." - Me.lblCompiling.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.lblCompiling.Visible = False - ' - 'lblFile - ' - Me.lblFile.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblFile.Location = New System.Drawing.Point(3, 57) - Me.lblFile.Name = "lblFile" - Me.lblFile.Size = New System.Drawing.Size(395, 13) - Me.lblFile.TabIndex = 4 - Me.lblFile.Text = "File ..." - ' - 'lblCanceling - ' - Me.lblCanceling.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblCanceling.Location = New System.Drawing.Point(110, 12) - Me.lblCanceling.Name = "lblCanceling" - Me.lblCanceling.Size = New System.Drawing.Size(186, 20) - Me.lblCanceling.TabIndex = 1 - Me.lblCanceling.Text = "Canceling Compilation..." - Me.lblCanceling.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.lblCanceling.Visible = False - ' - 'pnlBG - ' - Me.pnlBG.AutoScroll = True - Me.pnlBG.Controls.Add(Me.pnlCancel) - Me.pnlBG.Controls.Add(Me.wbMovieList) - Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill - Me.pnlBG.Location = New System.Drawing.Point(0, 0) - Me.pnlBG.Name = "pnlBG" - Me.pnlBG.Size = New System.Drawing.Size(1035, 550) - Me.pnlBG.TabIndex = 2 - ' - 'wbMovieList - ' - Me.wbMovieList.Location = New System.Drawing.Point(0, 0) - Me.wbMovieList.MinimumSize = New System.Drawing.Size(20, 20) - Me.wbMovieList.Name = "wbMovieList" - Me.wbMovieList.Size = New System.Drawing.Size(1034, 500) - Me.wbMovieList.TabIndex = 0 - Me.wbMovieList.Visible = False - ' - 'lstSources - ' - Me.lstSources.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lstSources.FormattingEnabled = True - Me.lstSources.Location = New System.Drawing.Point(286, 442) - Me.lstSources.Name = "lstSources" - Me.lstSources.Size = New System.Drawing.Size(123, 89) - Me.lstSources.TabIndex = 1 - Me.lstSources.Visible = False - ' - 'dlgExportMovies - ' - Me.AcceptButton = Me.Save_Button - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.AutoScroll = True - Me.CancelButton = Me.Close_Button - Me.ClientSize = New System.Drawing.Size(1035, 550) - Me.Controls.Add(Me.lstSources) - Me.Controls.Add(Me.pnlBottomMain) - Me.Controls.Add(Me.pnlBG) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "dlgExportMovies" - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Export Movies" - Me.TableLayoutPanel1.ResumeLayout(False) - Me.pnlBottomMain.ResumeLayout(False) - Me.pnlBottomMain.PerformLayout() - Me.pnlSearch.ResumeLayout(False) - Me.pnlSearch.PerformLayout() - Me.pnlCancel.ResumeLayout(False) - Me.pnlBG.ResumeLayout(False) - Me.ResumeLayout(False) + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgExportMovies)) + Me.Save_Button = New System.Windows.Forms.Button() + Me.Close_Button = New System.Windows.Forms.Button() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.btn_BuildHTML = New System.Windows.Forms.Button() + Me.lblFilterSelected = New System.Windows.Forms.Label() + Me.cbo_SelectedFilter = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.cbTemplate = New System.Windows.Forms.ComboBox() + Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components) + Me.pnlCancel = New System.Windows.Forms.Panel() + Me.btnCancel = New System.Windows.Forms.Button() + Me.pbCompile = New System.Windows.Forms.ProgressBar() + Me.lblCompiling = New System.Windows.Forms.Label() + Me.lblFile = New System.Windows.Forms.Label() + Me.lblCanceling = New System.Windows.Forms.Label() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.wbMovieList = New System.Windows.Forms.WebBrowser() + Me.pnlBottomMain.SuspendLayout() + Me.pnlCancel.SuspendLayout() + Me.pnlBG.SuspendLayout() + Me.SuspendLayout() + ' + 'Save_Button + ' + Me.Save_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Save_Button.Enabled = False + Me.Save_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Save_Button.Location = New System.Drawing.Point(779, 9) + Me.Save_Button.Name = "Save_Button" + Me.Save_Button.Size = New System.Drawing.Size(119, 31) + Me.Save_Button.TabIndex = 6 + Me.Save_Button.Text = "Save" + ' + 'Close_Button + ' + Me.Close_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Close_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Close_Button.Location = New System.Drawing.Point(904, 9) + Me.Close_Button.Name = "Close_Button" + Me.Close_Button.Size = New System.Drawing.Size(119, 31) + Me.Close_Button.TabIndex = 1 + Me.Close_Button.Text = "Close" + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.Close_Button) + Me.pnlBottomMain.Controls.Add(Me.btn_BuildHTML) + Me.pnlBottomMain.Controls.Add(Me.Save_Button) + Me.pnlBottomMain.Controls.Add(Me.lblFilterSelected) + Me.pnlBottomMain.Controls.Add(Me.cbo_SelectedFilter) + Me.pnlBottomMain.Controls.Add(Me.Label2) + Me.pnlBottomMain.Controls.Add(Me.cbTemplate) + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 502) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(1035, 48) + Me.pnlBottomMain.TabIndex = 0 + ' + 'btn_BuildHTML + ' + Me.btn_BuildHTML.Anchor = System.Windows.Forms.AnchorStyles.None + Me.btn_BuildHTML.Enabled = False + Me.btn_BuildHTML.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btn_BuildHTML.Location = New System.Drawing.Point(604, 9) + Me.btn_BuildHTML.Name = "btn_BuildHTML" + Me.btn_BuildHTML.Size = New System.Drawing.Size(169, 31) + Me.btn_BuildHTML.TabIndex = 5 + Me.btn_BuildHTML.Text = "Generate Template" + ' + 'lblFilterSelected + ' + Me.lblFilterSelected.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblFilterSelected.Location = New System.Drawing.Point(288, 6) + Me.lblFilterSelected.Name = "lblFilterSelected" + Me.lblFilterSelected.Size = New System.Drawing.Size(43, 16) + Me.lblFilterSelected.TabIndex = 0 + Me.lblFilterSelected.Text = "Filter" + Me.lblFilterSelected.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'cbo_SelectedFilter + ' + Me.cbo_SelectedFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbo_SelectedFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbo_SelectedFilter.FormattingEnabled = True + Me.cbo_SelectedFilter.Items.AddRange(New Object() {"-", "Filter 1", "Filter 2", "Filter 3"}) + Me.cbo_SelectedFilter.Location = New System.Drawing.Point(337, 9) + Me.cbo_SelectedFilter.Name = "cbo_SelectedFilter" + Me.cbo_SelectedFilter.Size = New System.Drawing.Size(138, 21) + Me.cbo_SelectedFilter.TabIndex = 4 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(11, 9) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(54, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Template" + Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'cbTemplate + ' + Me.cbTemplate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTemplate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbTemplate.FormattingEnabled = True + Me.cbTemplate.Location = New System.Drawing.Point(71, 9) + Me.cbTemplate.Name = "cbTemplate" + Me.cbTemplate.Size = New System.Drawing.Size(195, 21) + Me.cbTemplate.TabIndex = 2 + ' + 'ImageList1 + ' + Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent + Me.ImageList1.Images.SetKeyName(0, "asc.png") + Me.ImageList1.Images.SetKeyName(1, "desc.png") + ' + 'pnlCancel + ' + Me.pnlCancel.BackColor = System.Drawing.Color.LightGray + Me.pnlCancel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlCancel.Controls.Add(Me.btnCancel) + Me.pnlCancel.Controls.Add(Me.pbCompile) + Me.pnlCancel.Controls.Add(Me.lblCompiling) + Me.pnlCancel.Controls.Add(Me.lblFile) + Me.pnlCancel.Controls.Add(Me.lblCanceling) + Me.pnlCancel.Location = New System.Drawing.Point(242, 12) + Me.pnlCancel.Name = "pnlCancel" + Me.pnlCancel.Size = New System.Drawing.Size(403, 76) + Me.pnlCancel.TabIndex = 1 + Me.pnlCancel.Visible = False + ' + 'btnCancel + ' + Me.btnCancel.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnCancel.Image = CType(resources.GetObject("btnCancel.Image"), System.Drawing.Image) + Me.btnCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnCancel.Location = New System.Drawing.Point(298, 3) + Me.btnCancel.Name = "btnCancel" + Me.btnCancel.Size = New System.Drawing.Size(100, 30) + Me.btnCancel.TabIndex = 2 + Me.btnCancel.Text = "Cancel" + Me.btnCancel.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnCancel.UseVisualStyleBackColor = True + ' + 'pbCompile + ' + Me.pbCompile.Location = New System.Drawing.Point(8, 36) + Me.pbCompile.Name = "pbCompile" + Me.pbCompile.Size = New System.Drawing.Size(388, 18) + Me.pbCompile.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbCompile.TabIndex = 3 + ' + 'lblCompiling + ' + Me.lblCompiling.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblCompiling.Location = New System.Drawing.Point(3, 11) + Me.lblCompiling.Name = "lblCompiling" + Me.lblCompiling.Size = New System.Drawing.Size(395, 20) + Me.lblCompiling.TabIndex = 0 + Me.lblCompiling.Text = "Compiling Movie List..." + Me.lblCompiling.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.lblCompiling.Visible = False + ' + 'lblFile + ' + Me.lblFile.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblFile.Location = New System.Drawing.Point(3, 57) + Me.lblFile.Name = "lblFile" + Me.lblFile.Size = New System.Drawing.Size(395, 13) + Me.lblFile.TabIndex = 4 + Me.lblFile.Text = "File ..." + ' + 'lblCanceling + ' + Me.lblCanceling.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblCanceling.Location = New System.Drawing.Point(110, 12) + Me.lblCanceling.Name = "lblCanceling" + Me.lblCanceling.Size = New System.Drawing.Size(186, 20) + Me.lblCanceling.TabIndex = 1 + Me.lblCanceling.Text = "Canceling Compilation..." + Me.lblCanceling.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblCanceling.Visible = False + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Controls.Add(Me.pnlCancel) + Me.pnlBG.Controls.Add(Me.wbMovieList) + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(1035, 550) + Me.pnlBG.TabIndex = 4 + ' + 'wbMovieList + ' + Me.wbMovieList.Location = New System.Drawing.Point(0, 0) + Me.wbMovieList.MinimumSize = New System.Drawing.Size(20, 20) + Me.wbMovieList.Name = "wbMovieList" + Me.wbMovieList.Size = New System.Drawing.Size(1034, 500) + Me.wbMovieList.TabIndex = 0 + Me.wbMovieList.Visible = False + ' + 'dlgExportMovies + ' + Me.AcceptButton = Me.Save_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Close_Button + Me.ClientSize = New System.Drawing.Size(1035, 550) + Me.Controls.Add(Me.pnlBottomMain) + Me.Controls.Add(Me.pnlBG) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgExportMovies" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Export Movies" + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlBottomMain.PerformLayout() + Me.pnlCancel.ResumeLayout(False) + Me.pnlBG.ResumeLayout(False) + Me.ResumeLayout(False) - End Sub + End Sub + Friend WithEvents cbo_SelectedFilter As System.Windows.Forms.ComboBox + Friend WithEvents btn_BuildHTML As System.Windows.Forms.Button - #End Region 'Methods +#End Region 'Methods End Class \ No newline at end of file diff --git a/Addons/generic.EmberCore.MovieExport/dlgExportMovies.resx b/Addons/generic.EmberCore.MovieExport/dlgExportMovies.resx index 960c211..c0760fd 100644 --- a/Addons/generic.EmberCore.MovieExport/dlgExportMovies.resx +++ b/Addons/generic.EmberCore.MovieExport/dlgExportMovies.resx @@ -125,7 +125,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABC - CQAAAk1TRnQBSQFMAgEBAgEAARwBAAEcAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CQAAAk1TRnQBSQFMAgEBAgEAAVwBAAFcAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -170,31 +170,31 @@ - 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 + 9rMF7VAAAAAASUVORK5CYII= - 81 + 25 diff --git a/Addons/generic.EmberCore.MovieExport/dlgExportMovies.vb b/Addons/generic.EmberCore.MovieExport/dlgExportMovies.vb index 2cd365d..fb0ff1c 100644 --- a/Addons/generic.EmberCore.MovieExport/dlgExportMovies.vb +++ b/Addons/generic.EmberCore.MovieExport/dlgExportMovies.vb @@ -25,6 +25,7 @@ Imports EmberAPI Public Class dlgExportMovies + #Region "Fields" Friend WithEvents bwLoadInfo As New System.ComponentModel.BackgroundWorker @@ -45,6 +46,8 @@ Public Class dlgExportMovies Private workerCanceled As Boolean = False Private _movies As New List(Of Structures.DBMovie) + Private AllTVShowList As String = "" + #End Region 'Fields #Region "Methods" @@ -98,7 +101,9 @@ Public Class dlgExportMovies ' copy all the files of the current directory Dim ChildFile As FileInfo For Each ChildFile In SourceDir.GetFiles() + 'cocotus: Htm File should be copied too... If (ChildFile.Attributes And FileAttributes.Hidden) = FileAttributes.Hidden OrElse Path.GetExtension(ChildFile.FullName) = ".html" Then Continue For + If Overwrite Then ChildFile.CopyTo(Path.Combine(DestDir.FullName, ChildFile.Name), True) Else @@ -141,6 +146,17 @@ Public Class dlgExportMovies Me.bexportFanart = False Me.bexportFlags = False + Dim AllMovieSetList As String = "" + Try + AllMovieSetList = GetAllMovieSets() + Catch ex As Exception + + End Try + + + + + Dim tVid As New MediaInfo.Video Dim tAud As New MediaInfo.Audio Dim tRes As String = String.Empty @@ -158,10 +174,67 @@ Public Class dlgExportMovies pattern = File.ReadAllText(htmlPath) If pattern.Contains("<$NEED_POSTERS>") Then Me.bexportPosters = True + + 'cocotus, 2013/02 Export HTML expanded: configurable resizable images + '++++++POSTER++++++++ + strPosterSize = AdvancedSettings.GetSetting("ExportPosterHeight", "300") + + 'now consider the user selection + If strPosterSize <> "" Then + If strPosterSize = "300" Then + PosterSize.Width = 200 + PosterSize.Height = 300 + ElseIf strPosterSize = "400" Then + PosterSize.Width = 267 + PosterSize.Height = 400 + ElseIf strPosterSize = "600" Then + PosterSize.Width = 400 + PosterSize.Height = 600 + ElseIf strPosterSize = "800" Then + PosterSize.Width = 533 + PosterSize.Height = 800 + ElseIf strPosterSize = "original" Then + PosterSize.Width = 1 + PosterSize.Height = 1 + Else + PosterSize.Width = 200 + PosterSize.Height = 300 + End If + End If + + 'cocotus end + pattern = pattern.Replace("<$NEED_POSTERS>", String.Empty) End If If pattern.Contains("<$NEED_FANART>") Then Me.bexportFanart = True + 'cocotus, 2013/02 Export HTML expanded: configurable resizable images + '++++++Fanart++++++++ + strFanartSize = AdvancedSettings.GetSetting("ExportFanartWidth", "800") + + 'now consider the user selection + If strFanartSize <> "" Then + If strFanartSize = "400" Then + FanartSize.Width = 400 + FanartSize.Height = 225 + ElseIf strFanartSize = "600" Then + FanartSize.Width = 600 + FanartSize.Height = 338 + ElseIf strFanartSize = "800" Then + FanartSize.Width = 800 + FanartSize.Height = 450 + ElseIf strFanartSize = "1200" Then + FanartSize.Width = 1200 + FanartSize.Height = 675 + ElseIf strFanartSize = "original" Then + FanartSize.Width = 1 + FanartSize.Height = 1 + Else + FanartSize.Width = 800 + FanartSize.Height = 450 + End If + End If + 'cocotus end pattern = pattern.Replace("<$NEED_FANART>", String.Empty) End If If pattern.Contains("<$NEED_FLAGS>") Then @@ -194,17 +267,47 @@ Public Class dlgExportMovies For Each _curMovie As Structures.DBMovie In _movies Dim _vidDetails As String = String.Empty Dim _vidDimensions As String = String.Empty + + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + 'We want to use new mediainfo fields in template to -> make them avalaible here! + Dim _vidBitrate As String = String.Empty + Dim _vidEncodedSettings As String = String.Empty + Dim _vidMultiView As String = String.Empty + Dim _audBitrate As String = String.Empty + 'cocotus end + Dim _audDetails As String = String.Empty If Not IsNothing(_curMovie.Movie.FileInfo) Then If _curMovie.Movie.FileInfo.StreamDetails.Video.Count > 0 Then tVid = NFO.GetBestVideo(_curMovie.Movie.FileInfo) tRes = NFO.GetResFromDimensions(tVid) + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + If Not String.IsNullOrEmpty(tVid.Bitrate) Then + _vidBitrate = tVid.Bitrate + End If + If Not String.IsNullOrEmpty(tVid.EncodedSettings) Then + _vidEncodedSettings = tVid.EncodedSettings + End If + If Not String.IsNullOrEmpty(tVid.MultiView) Then + _vidMultiView = tVid.MultiView + End If + 'cocotus end + _vidDimensions = NFO.GetDimensionsFromVideo(tVid) _vidDetails = String.Format("{0} / {1}", If(String.IsNullOrEmpty(tRes), Master.eLang.GetString(283, "Unknown", True), tRes), If(String.IsNullOrEmpty(tVid.Codec), Master.eLang.GetString(283, "Unknown", True), tVid.Codec)).ToUpper End If If _curMovie.Movie.FileInfo.StreamDetails.Audio.Count > 0 Then tAud = NFO.GetBestAudio(_curMovie.Movie.FileInfo, False) + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + If Not String.IsNullOrEmpty(tAud.Bitrate) Then + _audBitrate = tAud.Bitrate + End If + 'cocotus end + _audDetails = String.Format("{0} / {1}ch", If(String.IsNullOrEmpty(tAud.Codec), Master.eLang.GetString(283, "Unknown", True), tAud.Codec), If(String.IsNullOrEmpty(tAud.Channels), Master.eLang.GetString(283, "Unknown", True), tAud.Channels)).ToUpper End If End If @@ -270,7 +373,30 @@ Public Class dlgExportMovies row = row.Replace("<$VIDEO_DIMENSIONS>", _vidDimensions) row = row.Replace("<$AUDIO>", _audDetails) row = row.Replace("<$SIZE>", StringUtils.HtmlEncode(MovieSize(_curMovie.Filename).ToString)) - row = row.Replace("<$DATEADD>", StringUtils.HtmlEncode(Functions.ConvertFromUnixTimestamp(_curMovie.DateAdd).ToShortDateString)) + row = row.Replace("<$DATEADD>", StringUtils.HtmlEncode(Functions.ConvertFromUnixTimestamp(_curMovie.DateAdd).ToString("dd.MM.yyyy"))) + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + row = row.Replace("<$MOVIESETS>", StringUtils.HtmlEncode(AllMovieSetList)) 'A long string of all moviesets, seperated with |! + row = row.Replace("<$TVSHOWS>", StringUtils.HtmlEncode(AllTVShowList)) 'A long string of all tvshows, seperated with |! + row = row.Replace("<$SET>", StringUtils.HtmlEncode(GetMovieSets(_curMovie))) 'All sets which movie belongs to, seperated with |! + row = row.Replace("<$VIDEOBITRATE>", _vidBitrate) + row = row.Replace("<$VIDEOMULTIVIEW>", _vidMultiView) + row = row.Replace("<$VIDEOENCODINGSETTINGS>", _vidEncodedSettings) + row = row.Replace("<$AUDIOBITRATE>", _audBitrate) + 'Unlocking more fields to use in templates! + row = row.Replace("<$NOW>", System.DateTime.Now.ToLongDateString) 'Save Build Date. might be useful info! + row = row.Replace("<$COUNTRY>", StringUtils.HtmlEncode(_curMovie.Movie.Country)) + row = row.Replace("<$IDMOVIEDB>", StringUtils.HtmlEncode(_curMovie.Movie.IDMovieDB)) + row = row.Replace("<$ORIGINALTITLE>", StringUtils.HtmlEncode(_curMovie.Movie.OriginalTitle)) + row = row.Replace("<$PLAYCOUNT>", StringUtils.HtmlEncode(_curMovie.Movie.PlayCount)) + row = row.Replace("<$STUDIO>", StringUtils.HtmlEncode(_curMovie.Movie.Studio)) + row = row.Replace("<$TOP250>", StringUtils.HtmlEncode(_curMovie.Movie.Top250)) + row = row.Replace("<$TRAILER>", StringUtils.HtmlEncode(_curMovie.Movie.Trailer)) + row = row.Replace("<$VIDEOSOURCE>", StringUtils.HtmlEncode(_curMovie.Movie.VideoSource)) + 'row = row.Replace("<$WATCHED>", StringUtils.HtmlEncode(_curMovie.Movie.Watched)) + 'cocotus end + + row = GetAVImages(_curMovie, row) HTMLBody.Append(row) counter += 1 @@ -278,7 +404,9 @@ Public Class dlgExportMovies HTMLBody.Append(moviefooter) If Not Me.isCL Then - Dim outFile As String = Path.Combine(Me.TempPath, String.Concat(Master.eSettings.Language, ".html")) + 'just name it index.html + ' Dim outFile As String = Path.Combine(Me.TempPath, String.Concat(Master.eSettings.Language, ".html")) + Dim outFile As String = Path.Combine(Me.TempPath, "index.htm") DontSaveExtra = False Me.SaveAll(If(doNavigate, Master.eLang.GetString(4, "Preparing preview. Please wait..."), String.Empty), Path.GetDirectoryName(htmlPath), outFile) If doNavigate Then LoadHTML() @@ -288,23 +416,203 @@ Public Class dlgExportMovies End Try End Sub - Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSource.Click - If btnSource.ImageIndex = 0 Then - lstSources.Visible = True - btnSource.ImageIndex = 1 - Else - lstSources.Visible = False - btnSource.ImageIndex = 0 - Dim sFilter As String = String.Empty - If cbSearch.Text = Master.eLang.GetString(5, "Source Folder") Then - For Each s In lstSources.CheckedItems - sFilter = String.Concat(sFilter, If(sFilter = String.Empty, String.Empty, ";"), s.ToString) + Private Function GetMovieSets(_curMovie As Structures.DBMovie) As String + Dim ReturnString As String = "" + Try + + If _curMovie.Movie.Sets.Count > 0 Then + For i = 0 To _curMovie.Movie.Sets.Count - 1 + If i > 0 Then + ReturnString = ReturnString + "|" + _curMovie.Movie.Sets.Item(i).Set + Else + ReturnString = _curMovie.Movie.Sets.Item(i).Set + End If + Next - txtSearch.Text = sFilter End If - End If + Return ReturnString + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return ReturnString + End Try + + End Function + Private alSets As New List(Of String) + ' Private lMovies As New List(Of Movies) + Private Function GetAllMovieSets() As String + '// + ' Start thread to load movie information from nfo + '\\ + + Dim ReturnString As String = "" + Try + Using SQLcommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + SQLcommand.CommandText = String.Concat("SELECT SetName FROM MoviesSets;") + Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() + If SQLreader.HasRows Then + While SQLreader.Read() + If Not alSets.Contains(SQLreader("SetName").ToString) AndAlso Not String.IsNullOrEmpty(SQLreader("SetName").ToString) Then + alSets.Add(SQLreader("SetName").ToString) + End If + End While + End If + End Using + End Using + If alSets.Count > 0 Then + For i = 0 To alSets.Count - 1 + If i > 0 Then + ReturnString = ReturnString + "|" + alSets(i) + Else + ReturnString = alSets(i) + End If + Next + End If + Return ReturnString + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return "" + End Try + End Function + + Private allTVShows As New List(Of String) + ' Private lMovies As New List(Of Movies) + Private Function GetAllTVShows() As String + '// + ' Start thread to load movie information from nfo + '\\ + Dim ReturnString As String = "" + Try + + Using SQLcommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + SQLcommand.CommandText = String.Concat("SELECT * FROM TVShows ORDER BY Title COLLATE NOCASE;") + Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() + If SQLreader.HasRows Then + While SQLreader.Read() + If Not allTVShows.Contains(SQLreader("Title").ToString) AndAlso Not String.IsNullOrEmpty(SQLreader("Title").ToString) Then + If Not String.IsNullOrEmpty(SQLreader("ID").ToString) Then + allTVShows.Add(SQLreader("ID").ToString & "*" & SQLreader("Title").ToString & GetSeasonInfo(SQLreader("ID").ToString)) + End If + End If + End While + End If + End Using + End Using + If allTVShows.Count > 0 Then + For i = 0 To allTVShows.Count - 1 + If i > 0 Then + ReturnString = ReturnString + "|" + allTVShows(i) + Else + ReturnString = allTVShows(i) + End If + Next + End If + Return ReturnString + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return "" + End Try + End Function + Private Function GetSeasonInfo(ByVal Id As String) As String + Dim ReturnString As String = "" + Try + Using SQLcommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + Dim parID As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parID", DbType.Int32, 0, "id") + SQLcommand.CommandText = "SELECT * FROM TVSeason WHERE TVShowID = (?);" + parID.Value = Id + Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() + If SQLreader.HasRows Then + While SQLreader.Read() + + If Not String.IsNullOrEmpty(SQLreader("Season").ToString) AndAlso Not SQLreader("Season").ToString.Contains("999") Then + If Not String.IsNullOrEmpty(SQLreader("PosterPath").ToString) Then + ExportSeasonImage(SQLreader("TVShowID").ToString & "s" & SQLreader("Season").ToString, SQLreader("PosterPath").ToString, TempPath) + End If + ReturnString = ReturnString + "*" + SQLreader("TVShowID").ToString & "s" & SQLreader("Season").ToString + End If + End While + End If + End Using + End Using + Return ReturnString + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return ReturnString + End Try + + End Function + + Private Sub ExportSeasonImage(ByVal filename As String, ByVal source As String, ByVal temppath As String) + Try + + Dim finalpath As String = Path.Combine(temppath, "export") + Directory.CreateDirectory(finalpath) + + Try + Dim posterfile As String = Path.Combine(finalpath, String.Concat(filename, ".jpg")) + If File.Exists(source) Then + 'cocotus, 2013/02 Export HTML expanded: configurable resizable images + + 'old method + 'If new_width > 0 Then + ' Dim im As New Images + ' im.FromFile(_curMovie.PosterPath) + ' ImageUtils.ResizeImage(im.Image, new_width, new_width, False, Color.Black.ToArgb) + ' im.Save(posterfile) + 'Else + ' File.Copy(_curMovie.PosterPath, posterfile, True) + 'End If + + If strPosterSize = "original" Then + File.Copy(source, posterfile, True) + Else + 'Now we do some image processing to make the output file smaller! + Try + Dim img As Image + Dim sFileName As String = source + Dim fs As New System.IO.FileStream(sFileName, System.IO.FileMode.Open) + img = Image.FromStream(fs) + fs.Close() + '1. Step: Resizing, Image method needs Size and IMAGE object we just created, so now we can start! + Dim imgresized As Image = ImageUtils.ResizeImage(img, PosterSize) + img.Dispose() + '2. Step: Now use jpeg compression to make file even smaller... + ImageUtils.JPEGCompression(imgresized, posterfile, CInt(AdvancedSettings.GetSetting("ExportImageQuality", "70"))) + imgresized.Dispose() + + Catch ex As Exception + 'The old method, used here when anything goes wrong + File.Copy(source, posterfile, True) + End Try + End If + + 'cocotus end + + End If + + Catch + End Try + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try End Sub + 'Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) + ' If btnSource.ImageIndex = 0 Then + ' lstSources.Visible = True + ' btnSource.ImageIndex = 1 + ' Else + ' lstSources.Visible = False + ' btnSource.ImageIndex = 0 + ' Dim sFilter As String = String.Empty + ' If cbSearch.Text = Master.eLang.GetString(5, "Source Folder") Then + ' For Each s In lstSources.CheckedItems + ' sFilter = String.Concat(sFilter, If(sFilter = String.Empty, String.Empty, ";"), s.ToString) + ' Next + ' txtSearch.Text = sFilter + ' End If + ' End If + 'End Sub + Private Sub bwLoadInfo_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwLoadInfo.DoWork '// ' Thread to load movieinformation (from nfo) @@ -403,6 +711,15 @@ Public Class dlgExportMovies If Me.bexportFanart Then Me.ExportFanart(destPathShort) End If + + If AdvancedSettings.GetBooleanSetting("ExportTVShows", False) = True Then + Try + AllTVShowList = GetAllTVShows() + Catch ex As Exception + + End Try + End If + If bwSaveAll.CancellationPending Then e.Cancel = True Return @@ -427,44 +744,21 @@ Public Class dlgExportMovies workerCanceled = e.Cancelled End Sub - Private Sub cbFilterSource_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) - If ((cbSearch.Text = Master.eLang.GetString(5, "Source Folder") AndAlso lstSources.CheckedItems.Count > 0) OrElse txtSearch.Text <> "") AndAlso cbSearch.Text <> "" Then - Search_Button.Enabled = True - Else - Search_Button.Enabled = False - End If - End Sub - Private Sub cbSearch_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbSearch.SelectedIndexChanged - If ((cbSearch.Text = Master.eLang.GetString(5, "Source Folder") AndAlso lstSources.CheckedItems.Count > 0) OrElse txtSearch.Text <> "") AndAlso cbSearch.Text <> "" Then - Search_Button.Enabled = True - Else - Search_Button.Enabled = False - End If - If cbSearch.Text = Master.eLang.GetString(5, "Source Folder") Then - 'cbFilterSource.Visible = True - btnSource.Visible = True - txtSearch.ReadOnly = True - Else - 'cbFilterSource.Visible = False - btnSource.Visible = False - txtSearch.ReadOnly = False - End If - End Sub Private Sub cbTemplate_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbTemplate.SelectedIndexChanged base_template = cbTemplate.Text DontSaveExtra = False - Dim sFilter As String = String.Empty - If cbSearch.Text = Master.eLang.GetString(5, "Source Folder") Then - For Each s As String In lstSources.CheckedItems - sFilter = String.Concat(sFilter, If(sFilter = String.Empty, String.Empty, ";"), s.ToString) - Next - Else - sFilter = txtSearch.Text - End If + 'Dim sFilter As String = String.Empty + 'If cbSearch.Text = Master.eLang.GetString(5, "Source Folder") Then + ' For Each s As String In lstSources.CheckedItems + ' sFilter = String.Concat(sFilter, If(sFilter = String.Empty, String.Empty, ";"), s.ToString) + ' Next + 'Else + ' sFilter = txtSearch.Text + 'End If - BuildHTML(use_filter, sFilter, cbSearch.Text, base_template, True) + 'BuildHTML(use_filter, sFilter, cbSearch.Text, base_template, True) End Sub @@ -542,12 +836,43 @@ Public Class dlgExportMovies Dim counter As Integer = 1 Dim finalpath As String = Path.Combine(fpath, "export") Directory.CreateDirectory(finalpath) + For Each _curMovie As Structures.DBMovie In _movies.Where(Function(y) FilterMovies.Contains(y.ID)) Try Dim fanartfile As String = Path.Combine(finalpath, String.Concat(counter.ToString, "-fanart.jpg")) If File.Exists(_curMovie.FanartPath) Then - File.Copy(_curMovie.FanartPath, fanartfile, True) + 'cocotus, 2013/02 Export HTML expanded: configurable resizable images + + 'old method, just copy/no image conversion + 'File.Copy(_curMovie.FanartPath, fanartfile, True) + + If strFanartSize = "original" Then + File.Copy(_curMovie.FanartPath, fanartfile, True) + Else + 'Now we do some image processing to make the output file smaller! + Try + Dim img As Image + Dim sFileName As String = _curMovie.FanartPath + Dim fs As New System.IO.FileStream(sFileName, System.IO.FileMode.Open) + img = Image.FromStream(fs) + fs.Close() + '1. Step: Resizing, Image method needs Size and IMAGE object we just created, so now we can start! + Dim imgresized As Image = ImageUtils.ResizeImage(img, FanartSize) + img.Dispose() + '2. Step: Now use jpeg compression to make file even smaller... + ImageUtils.JPEGCompression(imgresized, fanartfile, CInt(AdvancedSettings.GetSetting("ExportImageQuality", "70"))) + imgresized.Dispose() + + Catch ex As Exception + 'The old method, used here when anything goes wrong + File.Copy(_curMovie.FanartPath, fanartfile, True) + End Try + End If + + 'cocotus end + + End If counter += 1 Catch @@ -564,6 +889,7 @@ Public Class dlgExportMovies Private Sub ExportPoster(ByVal fpath As String, ByVal new_width As Integer) Try + Dim counter As Integer = 1 Dim finalpath As String = Path.Combine(fpath, "export") Directory.CreateDirectory(finalpath) @@ -571,14 +897,45 @@ Public Class dlgExportMovies Try Dim posterfile As String = Path.Combine(finalpath, String.Concat(counter.ToString, ".jpg")) If File.Exists(_curMovie.PosterPath) Then - If new_width > 0 Then - Dim im As New Images - im.FromFile(_curMovie.PosterPath) - ImageUtils.ResizeImage(im.Image, new_width, new_width, False, Color.Black.ToArgb) - im.Save(posterfile) - Else + + + 'cocotus, 2013/02 Export HTML expanded: configurable resizable images + + 'old method + 'If new_width > 0 Then + ' Dim im As New Images + ' im.FromFile(_curMovie.PosterPath) + ' ImageUtils.ResizeImage(im.Image, new_width, new_width, False, Color.Black.ToArgb) + ' im.Save(posterfile) + 'Else + ' File.Copy(_curMovie.PosterPath, posterfile, True) + 'End If + + If strPosterSize = "original" Then File.Copy(_curMovie.PosterPath, posterfile, True) + Else + 'Now we do some image processing to make the output file smaller! + Try + Dim img As Image + Dim sFileName As String = _curMovie.PosterPath + Dim fs As New System.IO.FileStream(sFileName, System.IO.FileMode.Open) + img = Image.FromStream(fs) + fs.Close() + '1. Step: Resizing, Image method needs Size and IMAGE object we just created, so now we can start! + Dim imgresized As Image = ImageUtils.ResizeImage(img, PosterSize) + img.Dispose() + '2. Step: Now use jpeg compression to make file even smaller... + ImageUtils.JPEGCompression(imgresized, posterfile, CInt(AdvancedSettings.GetSetting("ExportImageQuality", "70"))) + imgresized.Dispose() + + Catch ex As Exception + 'The old method, used here when anything goes wrong + File.Copy(_curMovie.PosterPath, posterfile, True) + End Try End If + + 'cocotus end + End If Catch @@ -661,8 +1018,14 @@ Public Class dlgExportMovies Private Sub LoadHTML() Warning(True, Master.eLang.GetString(6, "Loading. Please wait...")) - Dim tmphtml As String = Path.Combine(Me.TempPath, String.Concat(Master.eSettings.Language, ".html")) - wbMovieList.Navigate(tmphtml) + ' Dim tmphtml As String = Path.Combine(Me.TempPath, String.Concat(Master.eSettings.Language, ".html")) + Dim tmphtml As String = Path.Combine(Me.TempPath, "index.htm") + Try + wbMovieList.Navigate(tmphtml) + Save_Button.Enabled = True + Catch ex As Exception + Save_Button.Enabled = False + End Try End Sub Function MovieSize(ByVal spath As String) As Long @@ -704,22 +1067,14 @@ Public Class dlgExportMovies Return MovieFilesSize End Function - Private Sub pnlSearch_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles pnlSearch.Paint - End Sub - Private Sub Reset_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Reset_Button.Click - pnlSearch.Enabled = False - use_filter = False - BuildHTML(use_filter, String.Empty, String.Empty, base_template, True) - End Sub + Private Sub SaveAll(ByVal sWarning As String, ByVal srcPath As String, ByVal destPath As String, Optional ByVal resizePoster As Integer = 0) - Private Sub SaveAll(ByVal sWarning As String, ByVal srcPath As String, ByVal destPath As String, Optional ByVal resizePoster As Integer = 200) wbMovieList.Visible = False If Not String.IsNullOrEmpty(sWarning) Then Warning(True, sWarning) - cbSearch.Enabled = False + cbo_SelectedFilter.Enabled = False cbTemplate.Enabled = False - Search_Button.Enabled = False - Reset_Button.Enabled = False + btn_BuildHTML.Enabled = False Save_Button.Enabled = False Me.bwSaveAll = New System.ComponentModel.BackgroundWorker Me.bwSaveAll.WorkerReportsProgress = True @@ -730,76 +1085,58 @@ Public Class dlgExportMovies Threading.Thread.Sleep(50) End While - cbSearch.Enabled = True + cbo_SelectedFilter.Enabled = True cbTemplate.Enabled = True - 'Search_Button.Enabled = True - Reset_Button.Enabled = True + btn_BuildHTML.Enabled = True Save_Button.Enabled = True If pnlCancel.Visible Then Warning(False) If Not workerCanceled Then wbMovieList.Visible = True End If + End Sub Private Sub Save_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Save_Button.Click - Dim saveHTML As New SaveFileDialog() - Dim myStream As Stream - saveHTML.Filter = "HTML files (*.htm)|*.htm" - saveHTML.FilterIndex = 2 - saveHTML.RestoreDirectory = True - - If saveHTML.ShowDialog() = DialogResult.OK Then - myStream = saveHTML.OpenFile() - myStream.Close() - If Not IsNothing(myStream) Then - DontSaveExtra = False 'Force Full Save - Dim srcPath As String = String.Concat(Functions.AppPath, "Langs", Path.DirectorySeparatorChar, "html", Path.DirectorySeparatorChar, base_template, Path.DirectorySeparatorChar) - Me.SaveAll(Master.eLang.GetString(7, "Saving all files. Please wait..."), srcPath, saveHTML.FileName) - End If - End If - End Sub - Private Sub Search_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Search_Button.Click - pnlSearch.Enabled = False - use_filter = True - Dim sFilter As String = String.Empty - If cbSearch.Text = Master.eLang.GetString(5, "Source Folder") Then - For Each s As String In lstSources.CheckedItems - sFilter = String.Concat(sFilter, If(sFilter = String.Empty, String.Empty, ";"), s.ToString) - Next + 'cocotus Use settings instead of opening filedialog which causes problems! + 'old + 'Dim saveHTML As New SaveFileDialog() + 'Dim myStream As Stream + 'saveHTML.Filter = "HTML files (*.htm)|*.htm" + 'saveHTML.FilterIndex = 2 + 'saveHTML.RestoreDirectory = True + + 'If saveHTML.ShowDialog() = DialogResult.OK Then + ' myStream = saveHTML.OpenFile() + ' myStream.Close() + ' If Not IsNothing(myStream) Then + ' DontSaveExtra = False 'Force Full Save + ' Dim srcPath As String = String.Concat(Functions.AppPath, "Langs", Path.DirectorySeparatorChar, "html", Path.DirectorySeparatorChar, base_template, Path.DirectorySeparatorChar) + ' Me.SaveAll(Master.eLang.GetString(7, "Saving all files. Please wait..."), srcPath, saveHTML.FileName) + ' End If + 'End If + 'new simply copy from temp to user defined directory + If IO.Directory.Exists(AdvancedSettings.GetSetting("ExportPath", "")) Then + CopyDirectory(TempPath, AdvancedSettings.GetSetting("ExportPath", ""), True) + Save_Button.Enabled = False + MessageBox.Show((Master.eLang.GetString(27, "Template saved to:") & AdvancedSettings.GetSetting("ExportPath", "")), Master.eLang.GetString(361, "Finished!"), MessageBoxButtons.OK) Else - sFilter = txtSearch.Text + Save_Button.Enabled = False + MessageBox.Show((Master.eLang.GetString(28, "Export Path is not valid:") & AdvancedSettings.GetSetting("ExportPath", "")), Master.eLang.GetString(816, "An Error Has Occurred"), MessageBoxButtons.OK) End If - BuildHTML(use_filter, sFilter, cbSearch.Text, base_template, True) + End Sub Private Sub SetUp() Me.Text = Master.eLang.GetString(8, "Export Movies") Me.Save_Button.Text = Master.eLang.GetString(273, "Save", True) Me.Close_Button.Text = Master.eLang.GetString(19, "Close", True) - Me.Reset_Button.Text = Master.eLang.GetString(9, "Reset") - Me.Label1.Text = Master.eLang.GetString(10, "Filter") - Me.Search_Button.Text = Master.eLang.GetString(176, "Apply", True) - Me.lblIn.Text = Master.eLang.GetString(11, "in") Me.lblCompiling.Text = Master.eLang.GetString(12, "Compiling Movie List...") Me.lblCanceling.Text = Master.eLang.GetString(13, "Canceling Compilation...") Me.btnCancel.Text = Master.eLang.GetString(167, "Cancel", True) Me.Label2.Text = Master.eLang.GetString(14, "Template") - - Me.cbSearch.Items.AddRange(New Object() {Master.eLang.GetString(21, "Title", True), Master.eLang.GetString(278, "Year", True), Master.eLang.GetString(2, "Video Flag"), Master.eLang.GetString(3, "Audio Flag"), Master.eLang.GetString(1, "Source Folder")}) - lstSources.Items.Clear() - For Each s As Structures.MovieSource In Master.MovieSources - lstSources.Items.Add(s.Name) - Next - - End Sub - - Private Sub txtSearch_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSearch.TextChanged - If txtSearch.Text <> "" AndAlso cbSearch.Text <> "" Then - Search_Button.Enabled = True - Else - Search_Button.Enabled = False - End If + Me.btn_BuildHTML.Text = Master.eLang.GetString(26, "Generate HTML...") + Save_Button.Enabled = False End Sub Private Sub Warning(ByVal show As Boolean, Optional ByVal txt As String = "") @@ -822,14 +1159,47 @@ Public Class dlgExportMovies Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles wbMovieList.DocumentCompleted If Not bCancelled Then - 'wbMovieList.Visible = True + If Not cbTemplate.Text = String.Empty Then Me.Save_Button.Enabled = True - pnlSearch.Enabled = True - Reset_Button.Enabled = bFiltered + End If Warning(False) End Sub + Private Sub btn_BuildHTML_Click(sender As Object, e As EventArgs) Handles btn_BuildHTML.Click + If cbo_SelectedFilter.Text = "Filter 1" Then + strFilter = AdvancedSettings.GetSetting("ExportFilter1", "") + ElseIf cbo_SelectedFilter.Text = "Filter 2" Then + strFilter = AdvancedSettings.GetSetting("ExportFilter2", "") + ElseIf cbo_SelectedFilter.Text = "Filter 3" Then + strFilter = AdvancedSettings.GetSetting("ExportFilter3", "") + Else + strFilter = "" + End If + If Not strFilter = "" Then + use_filter = True + Dim sFiltertype As String = String.Empty + Dim parts As String() = strFilter.Split(New String() {"#"}, StringSplitOptions.None) + strFilter = parts(0) + If parts.Length > 1 Then + sFiltertype = parts(1) + End If + BuildHTML(use_filter, strFilter, sFiltertype, base_template, True) + Else + BuildHTML(False, String.Empty, String.Empty, base_template, True) + End If + End Sub + + 'cocotus, 2013/02 Export HTML expanded: configurable resizable images + 'contains selected poster/fanart sizes + Dim strFanartSize As String = "" + Dim strPosterSize As String = "" + Dim strFilter As String = "" + 'The following resizing method of image requires Size object, so lets create that... + Dim FanartSize As New Size(1024, 576) + Dim PosterSize As New Size(200, 300) + 'cocotus end + #End Region 'Methods #Region "Nested Types" @@ -848,4 +1218,6 @@ Public Class dlgExportMovies #End Region 'Nested Types + + End Class \ No newline at end of file diff --git a/Addons/generic.EmberCore.MovieExport/frmSettingsHolder.Designer.vb b/Addons/generic.EmberCore.MovieExport/frmSettingsHolder.Designer.vb index 3afa5af..7a60615 100644 --- a/Addons/generic.EmberCore.MovieExport/frmSettingsHolder.Designer.vb +++ b/Addons/generic.EmberCore.MovieExport/frmSettingsHolder.Designer.vb @@ -22,64 +22,437 @@ Partial Class frmSettingsHolder 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Me.Panel1 = New System.Windows.Forms.Panel() - Me.cbEnabled = New System.Windows.Forms.CheckBox() - Me.pnlSettings = New System.Windows.Forms.Panel() - Me.Panel1.SuspendLayout() - Me.pnlSettings.SuspendLayout() - Me.SuspendLayout() - ' - 'Panel1 - ' - Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke - Me.Panel1.Controls.Add(Me.cbEnabled) - Me.Panel1.Dock = System.Windows.Forms.DockStyle.Top - Me.Panel1.Location = New System.Drawing.Point(0, 0) - Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(617, 25) - Me.Panel1.TabIndex = 0 - ' - 'cbEnabled - ' - Me.cbEnabled.AutoSize = True - Me.cbEnabled.Location = New System.Drawing.Point(10, 5) - Me.cbEnabled.Name = "cbEnabled" - Me.cbEnabled.Size = New System.Drawing.Size(68, 17) - Me.cbEnabled.TabIndex = 0 - Me.cbEnabled.Text = "Enabled" - Me.cbEnabled.UseVisualStyleBackColor = True - ' - 'pnlSettings - ' - Me.pnlSettings.Controls.Add(Me.Panel1) - Me.pnlSettings.Location = New System.Drawing.Point(3, 12) - Me.pnlSettings.Name = "pnlSettings" - Me.pnlSettings.Size = New System.Drawing.Size(617, 327) - Me.pnlSettings.TabIndex = 0 - ' - 'frmSettingsHolder - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.BackColor = System.Drawing.Color.White - Me.ClientSize = New System.Drawing.Size(625, 342) - Me.Controls.Add(Me.pnlSettings) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "frmSettingsHolder" - Me.ShowInTaskbar = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "frmSettingsHolder" - Me.Panel1.ResumeLayout(False) - Me.Panel1.PerformLayout() - Me.pnlSettings.ResumeLayout(False) - Me.ResumeLayout(False) + Me.Panel1 = New System.Windows.Forms.Panel() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.gpb_ExportFilterSettings = New System.Windows.Forms.GroupBox() + Me.lbl_exportmoviefilter3 = New System.Windows.Forms.Label() + Me.lbl_exportmoviefilter3saved = New System.Windows.Forms.Label() + Me.lbl_exportmoviefilter2 = New System.Windows.Forms.Label() + Me.lbl_exportmoviefilter2saved = New System.Windows.Forms.Label() + Me.cbo_exportmoviefilter = New System.Windows.Forms.ComboBox() + Me.lbl_exportmoviefilter1 = New System.Windows.Forms.Label() + Me.lbl_exportmoviefilter1saved = New System.Windows.Forms.Label() + Me.lstSources = New System.Windows.Forms.CheckedListBox() + Me.btnSource = New System.Windows.Forms.Button() + Me.btn_Apply = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.btn_Reset = New System.Windows.Forms.Button() + Me.cbSearch = New System.Windows.Forms.ComboBox() + Me.lbl_exportmoviefiltergenerate = New System.Windows.Forms.Label() + Me.lblIn = New System.Windows.Forms.Label() + Me.gpb_ExportGeneralSettings = New System.Windows.Forms.GroupBox() + Me.chkExportTVShows = New System.Windows.Forms.CheckBox() + Me.lbl_exportmoviepath = New System.Windows.Forms.Label() + Me.txt_exportmoviepath = New System.Windows.Forms.TextBox() + Me.btn_exportmoviepath = New System.Windows.Forms.Button() + Me.gpb_ExportImage = New System.Windows.Forms.GroupBox() + Me.cbo_exportmoviequality = New System.Windows.Forms.ComboBox() + Me.lbl_exportmoviequality = New System.Windows.Forms.Label() + Me.cbo_exportmoviefanart = New System.Windows.Forms.ComboBox() + Me.lbl_exportmoviefanart = New System.Windows.Forms.Label() + Me.cbo_exportmovieposter = New System.Windows.Forms.ComboBox() + Me.lbl_exportmovieposter = New System.Windows.Forms.Label() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + Me.gpb_ExportFilterSettings.SuspendLayout() + Me.gpb_ExportGeneralSettings.SuspendLayout() + Me.gpb_ExportImage.SuspendLayout() + Me.SuspendLayout() + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Dock = System.Windows.Forms.DockStyle.Top + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(610, 25) + Me.Panel1.TabIndex = 0 + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.gpb_ExportFilterSettings) + Me.pnlSettings.Controls.Add(Me.gpb_ExportGeneralSettings) + Me.pnlSettings.Controls.Add(Me.gpb_ExportImage) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Location = New System.Drawing.Point(3, 12) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(610, 387) + Me.pnlSettings.TabIndex = 0 + ' + 'gpb_ExportFilterSettings + ' + Me.gpb_ExportFilterSettings.Controls.Add(Me.lbl_exportmoviefilter3) + Me.gpb_ExportFilterSettings.Controls.Add(Me.lbl_exportmoviefilter3saved) + Me.gpb_ExportFilterSettings.Controls.Add(Me.lbl_exportmoviefilter2) + Me.gpb_ExportFilterSettings.Controls.Add(Me.lbl_exportmoviefilter2saved) + Me.gpb_ExportFilterSettings.Controls.Add(Me.cbo_exportmoviefilter) + Me.gpb_ExportFilterSettings.Controls.Add(Me.lbl_exportmoviefilter1) + Me.gpb_ExportFilterSettings.Controls.Add(Me.lbl_exportmoviefilter1saved) + Me.gpb_ExportFilterSettings.Controls.Add(Me.lstSources) + Me.gpb_ExportFilterSettings.Controls.Add(Me.btnSource) + Me.gpb_ExportFilterSettings.Controls.Add(Me.btn_Apply) + Me.gpb_ExportFilterSettings.Controls.Add(Me.txtSearch) + Me.gpb_ExportFilterSettings.Controls.Add(Me.btn_Reset) + Me.gpb_ExportFilterSettings.Controls.Add(Me.cbSearch) + Me.gpb_ExportFilterSettings.Controls.Add(Me.lbl_exportmoviefiltergenerate) + Me.gpb_ExportFilterSettings.Controls.Add(Me.lblIn) + Me.gpb_ExportFilterSettings.Location = New System.Drawing.Point(9, 152) + Me.gpb_ExportFilterSettings.Name = "gpb_ExportFilterSettings" + Me.gpb_ExportFilterSettings.Size = New System.Drawing.Size(596, 232) + Me.gpb_ExportFilterSettings.TabIndex = 22 + Me.gpb_ExportFilterSettings.TabStop = False + Me.gpb_ExportFilterSettings.Text = "Filter Settings" + ' + 'lbl_exportmoviefilter3 + ' + Me.lbl_exportmoviefilter3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lbl_exportmoviefilter3.Location = New System.Drawing.Point(6, 206) + Me.lbl_exportmoviefilter3.Name = "lbl_exportmoviefilter3" + Me.lbl_exportmoviefilter3.Size = New System.Drawing.Size(87, 20) + Me.lbl_exportmoviefilter3.TabIndex = 14 + Me.lbl_exportmoviefilter3.Text = "Filter 3" + Me.lbl_exportmoviefilter3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'lbl_exportmoviefilter3saved + ' + Me.lbl_exportmoviefilter3saved.Enabled = False + Me.lbl_exportmoviefilter3saved.Location = New System.Drawing.Point(99, 206) + Me.lbl_exportmoviefilter3saved.Name = "lbl_exportmoviefilter3saved" + Me.lbl_exportmoviefilter3saved.Size = New System.Drawing.Size(475, 20) + Me.lbl_exportmoviefilter3saved.TabIndex = 13 + Me.lbl_exportmoviefilter3saved.Text = "-" + Me.lbl_exportmoviefilter3saved.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'lbl_exportmoviefilter2 + ' + Me.lbl_exportmoviefilter2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lbl_exportmoviefilter2.Location = New System.Drawing.Point(6, 189) + Me.lbl_exportmoviefilter2.Name = "lbl_exportmoviefilter2" + Me.lbl_exportmoviefilter2.Size = New System.Drawing.Size(87, 20) + Me.lbl_exportmoviefilter2.TabIndex = 12 + Me.lbl_exportmoviefilter2.Text = "Filter 2" + Me.lbl_exportmoviefilter2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'lbl_exportmoviefilter2saved + ' + Me.lbl_exportmoviefilter2saved.Enabled = False + Me.lbl_exportmoviefilter2saved.Location = New System.Drawing.Point(99, 189) + Me.lbl_exportmoviefilter2saved.Name = "lbl_exportmoviefilter2saved" + Me.lbl_exportmoviefilter2saved.Size = New System.Drawing.Size(475, 20) + Me.lbl_exportmoviefilter2saved.TabIndex = 11 + Me.lbl_exportmoviefilter2saved.Text = "-" + Me.lbl_exportmoviefilter2saved.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'cbo_exportmoviefilter + ' + Me.cbo_exportmoviefilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbo_exportmoviefilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbo_exportmoviefilter.FormattingEnabled = True + Me.cbo_exportmoviefilter.Items.AddRange(New Object() {"Filter 1", "Filter 2", "Filter 3"}) + Me.cbo_exportmoviefilter.Location = New System.Drawing.Point(102, 21) + Me.cbo_exportmoviefilter.Name = "cbo_exportmoviefilter" + Me.cbo_exportmoviefilter.Size = New System.Drawing.Size(87, 21) + Me.cbo_exportmoviefilter.TabIndex = 10 + ' + 'lbl_exportmoviefilter1 + ' + Me.lbl_exportmoviefilter1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lbl_exportmoviefilter1.Location = New System.Drawing.Point(6, 172) + Me.lbl_exportmoviefilter1.Name = "lbl_exportmoviefilter1" + Me.lbl_exportmoviefilter1.Size = New System.Drawing.Size(87, 20) + Me.lbl_exportmoviefilter1.TabIndex = 9 + Me.lbl_exportmoviefilter1.Text = "Filter 1" + Me.lbl_exportmoviefilter1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'lbl_exportmoviefilter1saved + ' + Me.lbl_exportmoviefilter1saved.Enabled = False + Me.lbl_exportmoviefilter1saved.Location = New System.Drawing.Point(99, 172) + Me.lbl_exportmoviefilter1saved.Name = "lbl_exportmoviefilter1saved" + Me.lbl_exportmoviefilter1saved.Size = New System.Drawing.Size(475, 20) + Me.lbl_exportmoviefilter1saved.TabIndex = 8 + Me.lbl_exportmoviefilter1saved.Text = "-" + Me.lbl_exportmoviefilter1saved.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'lstSources + ' + Me.lstSources.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lstSources.FormattingEnabled = True + Me.lstSources.Location = New System.Drawing.Point(102, 73) + Me.lstSources.Name = "lstSources" + Me.lstSources.Size = New System.Drawing.Size(166, 89) + Me.lstSources.TabIndex = 7 + Me.lstSources.Visible = False + ' + 'btnSource + ' + Me.btnSource.BackColor = System.Drawing.Color.MediumSpringGreen + Me.btnSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnSource.ImageIndex = 0 + Me.btnSource.Location = New System.Drawing.Point(274, 46) + Me.btnSource.Name = "btnSource" + Me.btnSource.Size = New System.Drawing.Size(38, 20) + Me.btnSource.TabIndex = 2 + Me.btnSource.Text = "SET" + Me.btnSource.UseVisualStyleBackColor = False + Me.btnSource.Visible = False + ' + 'btn_Apply + ' + Me.btn_Apply.BackColor = System.Drawing.Color.White + Me.btn_Apply.Enabled = False + Me.btn_Apply.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btn_Apply.Location = New System.Drawing.Point(476, 47) + Me.btn_Apply.Name = "btn_Apply" + Me.btn_Apply.Size = New System.Drawing.Size(101, 51) + Me.btn_Apply.TabIndex = 5 + Me.btn_Apply.Text = "Save Filter" + Me.btn_Apply.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(102, 45) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(166, 22) + Me.txtSearch.TabIndex = 3 + ' + 'btn_Reset + ' + Me.btn_Reset.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btn_Reset.Location = New System.Drawing.Point(476, 111) + Me.btn_Reset.Name = "btn_Reset" + Me.btn_Reset.Size = New System.Drawing.Size(101, 51) + Me.btn_Reset.TabIndex = 6 + Me.btn_Reset.Text = "Reset Filter" + Me.btn_Reset.UseVisualStyleBackColor = True + ' + 'cbSearch + ' + Me.cbSearch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbSearch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbSearch.FormattingEnabled = True + Me.cbSearch.Location = New System.Drawing.Point(344, 47) + Me.cbSearch.Name = "cbSearch" + Me.cbSearch.Size = New System.Drawing.Size(117, 21) + Me.cbSearch.TabIndex = 4 + ' + 'lbl_exportmoviefiltergenerate + ' + Me.lbl_exportmoviefiltergenerate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lbl_exportmoviefiltergenerate.Location = New System.Drawing.Point(6, 22) + Me.lbl_exportmoviefiltergenerate.Name = "lbl_exportmoviefiltergenerate" + Me.lbl_exportmoviefiltergenerate.Size = New System.Drawing.Size(90, 21) + Me.lbl_exportmoviefiltergenerate.TabIndex = 0 + Me.lbl_exportmoviefiltergenerate.Text = "Generate Filter" + Me.lbl_exportmoviefiltergenerate.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'lblIn + ' + Me.lblIn.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIn.Location = New System.Drawing.Point(318, 45) + Me.lblIn.Name = "lblIn" + Me.lblIn.Size = New System.Drawing.Size(20, 22) + Me.lblIn.TabIndex = 3 + Me.lblIn.Text = "in" + Me.lblIn.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'gpb_ExportGeneralSettings + ' + Me.gpb_ExportGeneralSettings.Controls.Add(Me.chkExportTVShows) + Me.gpb_ExportGeneralSettings.Controls.Add(Me.lbl_exportmoviepath) + Me.gpb_ExportGeneralSettings.Controls.Add(Me.txt_exportmoviepath) + Me.gpb_ExportGeneralSettings.Controls.Add(Me.btn_exportmoviepath) + Me.gpb_ExportGeneralSettings.Location = New System.Drawing.Point(9, 42) + Me.gpb_ExportGeneralSettings.Name = "gpb_ExportGeneralSettings" + Me.gpb_ExportGeneralSettings.Size = New System.Drawing.Size(338, 81) + Me.gpb_ExportGeneralSettings.TabIndex = 20 + Me.gpb_ExportGeneralSettings.TabStop = False + Me.gpb_ExportGeneralSettings.Text = "General Settings" + ' + 'chkExportTVShows + ' + Me.chkExportTVShows.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkExportTVShows.Location = New System.Drawing.Point(9, 53) + Me.chkExportTVShows.Name = "chkExportTVShows" + Me.chkExportTVShows.Size = New System.Drawing.Size(290, 17) + Me.chkExportTVShows.TabIndex = 15 + Me.chkExportTVShows.Text = "Export TV Shows" + Me.chkExportTVShows.UseVisualStyleBackColor = True + ' + 'lbl_exportmoviepath + ' + Me.lbl_exportmoviepath.Location = New System.Drawing.Point(6, 22) + Me.lbl_exportmoviepath.Name = "lbl_exportmoviepath" + Me.lbl_exportmoviepath.Size = New System.Drawing.Size(65, 22) + Me.lbl_exportmoviepath.TabIndex = 12 + Me.lbl_exportmoviepath.Text = "ExportPath" + Me.lbl_exportmoviepath.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'txt_exportmoviepath + ' + Me.txt_exportmoviepath.Location = New System.Drawing.Point(77, 22) + Me.txt_exportmoviepath.Name = "txt_exportmoviepath" + Me.txt_exportmoviepath.ReadOnly = True + Me.txt_exportmoviepath.Size = New System.Drawing.Size(222, 22) + Me.txt_exportmoviepath.TabIndex = 13 + ' + 'btn_exportmoviepath + ' + Me.btn_exportmoviepath.Location = New System.Drawing.Point(302, 22) + Me.btn_exportmoviepath.Margin = New System.Windows.Forms.Padding(0) + Me.btn_exportmoviepath.Name = "btn_exportmoviepath" + Me.btn_exportmoviepath.Size = New System.Drawing.Size(24, 22) + Me.btn_exportmoviepath.TabIndex = 14 + Me.btn_exportmoviepath.Text = "..." + Me.btn_exportmoviepath.TextAlign = System.Drawing.ContentAlignment.TopCenter + Me.btn_exportmoviepath.UseVisualStyleBackColor = True + ' + 'gpb_ExportImage + ' + Me.gpb_ExportImage.Controls.Add(Me.cbo_exportmoviequality) + Me.gpb_ExportImage.Controls.Add(Me.lbl_exportmoviequality) + Me.gpb_ExportImage.Controls.Add(Me.cbo_exportmoviefanart) + Me.gpb_ExportImage.Controls.Add(Me.lbl_exportmoviefanart) + Me.gpb_ExportImage.Controls.Add(Me.cbo_exportmovieposter) + Me.gpb_ExportImage.Controls.Add(Me.lbl_exportmovieposter) + Me.gpb_ExportImage.Location = New System.Drawing.Point(353, 42) + Me.gpb_ExportImage.Name = "gpb_ExportImage" + Me.gpb_ExportImage.Size = New System.Drawing.Size(251, 104) + Me.gpb_ExportImage.TabIndex = 19 + Me.gpb_ExportImage.TabStop = False + Me.gpb_ExportImage.Text = "Image Settings" + ' + 'cbo_exportmoviequality + ' + Me.cbo_exportmoviequality.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbo_exportmoviequality.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbo_exportmoviequality.FormattingEnabled = True + Me.cbo_exportmoviequality.Items.AddRange(New Object() {"60", "70", "80", "90", "100"}) + Me.cbo_exportmoviequality.Location = New System.Drawing.Point(132, 76) + Me.cbo_exportmoviequality.Name = "cbo_exportmoviequality" + Me.cbo_exportmoviequality.Size = New System.Drawing.Size(101, 21) + Me.cbo_exportmoviequality.TabIndex = 20 + ' + 'lbl_exportmoviequality + ' + Me.lbl_exportmoviequality.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lbl_exportmoviequality.Location = New System.Drawing.Point(6, 76) + Me.lbl_exportmoviequality.Name = "lbl_exportmoviequality" + Me.lbl_exportmoviequality.Size = New System.Drawing.Size(144, 21) + Me.lbl_exportmoviequality.TabIndex = 19 + Me.lbl_exportmoviequality.Text = "Quality" + Me.lbl_exportmoviequality.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'cbo_exportmoviefanart + ' + Me.cbo_exportmoviefanart.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbo_exportmoviefanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbo_exportmoviefanart.FormattingEnabled = True + Me.cbo_exportmoviefanart.Items.AddRange(New Object() {"400", "600", "800", "1200", "original"}) + Me.cbo_exportmoviefanart.Location = New System.Drawing.Point(132, 22) + Me.cbo_exportmoviefanart.Name = "cbo_exportmoviefanart" + Me.cbo_exportmoviefanart.Size = New System.Drawing.Size(101, 21) + Me.cbo_exportmoviefanart.TabIndex = 18 + ' + 'lbl_exportmoviefanart + ' + Me.lbl_exportmoviefanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lbl_exportmoviefanart.Location = New System.Drawing.Point(6, 22) + Me.lbl_exportmoviefanart.Name = "lbl_exportmoviefanart" + Me.lbl_exportmoviefanart.Size = New System.Drawing.Size(144, 21) + Me.lbl_exportmoviefanart.TabIndex = 16 + Me.lbl_exportmoviefanart.Text = "Fanart Width [px]" + Me.lbl_exportmoviefanart.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'cbo_exportmovieposter + ' + Me.cbo_exportmovieposter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbo_exportmovieposter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbo_exportmovieposter.FormattingEnabled = True + Me.cbo_exportmovieposter.Items.AddRange(New Object() {"300", "400", "600", "800", "original"}) + Me.cbo_exportmovieposter.Location = New System.Drawing.Point(132, 49) + Me.cbo_exportmovieposter.Name = "cbo_exportmovieposter" + Me.cbo_exportmovieposter.Size = New System.Drawing.Size(101, 21) + Me.cbo_exportmovieposter.TabIndex = 17 + ' + 'lbl_exportmovieposter + ' + Me.lbl_exportmovieposter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lbl_exportmovieposter.Location = New System.Drawing.Point(6, 49) + Me.lbl_exportmovieposter.Name = "lbl_exportmovieposter" + Me.lbl_exportmovieposter.Size = New System.Drawing.Size(144, 21) + Me.lbl_exportmovieposter.TabIndex = 15 + Me.lbl_exportmovieposter.Text = "Poster Height [px]" + Me.lbl_exportmovieposter.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'frmSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(625, 411) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "frmSettingsHolder" + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + Me.gpb_ExportFilterSettings.ResumeLayout(False) + Me.gpb_ExportFilterSettings.PerformLayout() + Me.gpb_ExportGeneralSettings.ResumeLayout(False) + Me.gpb_ExportGeneralSettings.PerformLayout() + Me.gpb_ExportImage.ResumeLayout(False) + Me.ResumeLayout(False) - End Sub + End Sub Friend WithEvents Panel1 As System.Windows.Forms.Panel Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents lbl_exportmoviepath As System.Windows.Forms.Label + Friend WithEvents btn_exportmoviepath As System.Windows.Forms.Button + Friend WithEvents txt_exportmoviepath As System.Windows.Forms.TextBox + Friend WithEvents lbl_exportmoviefanart As System.Windows.Forms.Label + Friend WithEvents cbo_exportmoviefanart As System.Windows.Forms.ComboBox + Friend WithEvents lbl_exportmovieposter As System.Windows.Forms.Label + Friend WithEvents cbo_exportmovieposter As System.Windows.Forms.ComboBox + Friend WithEvents gpb_ExportImage As System.Windows.Forms.GroupBox + Friend WithEvents gpb_ExportGeneralSettings As System.Windows.Forms.GroupBox + Friend WithEvents btnSource As System.Windows.Forms.Button + Friend WithEvents btn_Reset As System.Windows.Forms.Button + Friend WithEvents lbl_exportmoviefiltergenerate As System.Windows.Forms.Label + Friend WithEvents btn_Apply As System.Windows.Forms.Button + Friend WithEvents lblIn As System.Windows.Forms.Label + Friend WithEvents cbSearch As System.Windows.Forms.ComboBox + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents lstSources As System.Windows.Forms.CheckedListBox + Friend WithEvents gpb_ExportFilterSettings As System.Windows.Forms.GroupBox + Friend WithEvents lbl_exportmoviefilter1saved As System.Windows.Forms.Label + Friend WithEvents lbl_exportmoviefilter1 As System.Windows.Forms.Label + Friend WithEvents cbo_exportmoviefilter As System.Windows.Forms.ComboBox + Friend WithEvents lbl_exportmoviefilter2 As System.Windows.Forms.Label + Friend WithEvents lbl_exportmoviefilter2saved As System.Windows.Forms.Label + Friend WithEvents lbl_exportmoviefilter3 As System.Windows.Forms.Label + Friend WithEvents lbl_exportmoviefilter3saved As System.Windows.Forms.Label + Friend WithEvents chkExportTVShows As System.Windows.Forms.CheckBox + Friend WithEvents cbo_exportmoviequality As System.Windows.Forms.ComboBox + Friend WithEvents lbl_exportmoviequality As System.Windows.Forms.Label End Class diff --git a/Addons/generic.EmberCore.MovieExport/frmSettingsHolder.vb b/Addons/generic.EmberCore.MovieExport/frmSettingsHolder.vb index 8af8454..b6daa9d 100644 --- a/Addons/generic.EmberCore.MovieExport/frmSettingsHolder.vb +++ b/Addons/generic.EmberCore.MovieExport/frmSettingsHolder.vb @@ -43,8 +43,145 @@ Public Class frmSettingsHolder Private Sub SetUp() Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkExportTVShows.Text = Master.eLang.GetString(16, "Export TV Shows") + Me.lbl_exportmoviefiltergenerate.Text = Master.eLang.GetString(17, "Generate Filter") + Me.txt_exportmoviepath.Text = Master.eLang.GetString(18, "Export Path") + Me.lbl_exportmoviefanart.Text = Master.eLang.GetString(19, "Fanart Width [px]") + Me.lbl_exportmovieposter.Text = Master.eLang.GetString(20, "Poster Height [px]") + Me.lbl_exportmoviequality.Text = Master.eLang.GetString(478, "Quality:") + Me.gpb_ExportFilterSettings.Text = Master.eLang.GetString(21, "Filter Settings") + Me.gpb_ExportImage.Text = Master.eLang.GetString(22, "Image Settings") + Me.gpb_ExportGeneralSettings.Text = Master.eLang.GetString(23, "General Settings") + Me.btn_Apply.Text = Master.eLang.GetString(24, "Save Filter") + Me.btn_Reset.Text = Master.eLang.GetString(25, "Reset Filter") + Me.lblIn.Text = Master.eLang.GetString(11, "in") + Me.cbSearch.Items.AddRange(New Object() {Master.eLang.GetString(1, "Source Folder"), Master.eLang.GetString(21, "Title", True), Master.eLang.GetString(278, "Year", True), Master.eLang.GetString(2, "Video Flag"), Master.eLang.GetString(3, "Audio Flag")}) + lstSources.Items.Clear() + For Each s As Structures.MovieSource In Master.MovieSources + lstSources.Items.Add(s.Name) + Next + End Sub + + + + Private Sub txt_exportmoviepath_TextChanged(sender As Object, e As EventArgs) Handles txt_exportmoviepath.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkExportTVShows_CheckedChanged(sender As Object, e As EventArgs) Handles chkExportTVShows.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbo_exportmoviefanart_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbo_exportmoviefanart.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbo_exportmovieposter_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbo_exportmovieposter.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub lbl_exportmoviefilter1saved_TextChanged(sender As Object, e As EventArgs) Handles lbl_exportmoviefilter1saved.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub lbl_exportmoviefilter2saved_TextChanged(sender As Object, e As EventArgs) Handles lbl_exportmoviefilter2saved.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub lbl_exportmoviefilter3saved_TextChanged(sender As Object, e As EventArgs) Handles lbl_exportmoviefilter3saved.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbo_exportmoviequality_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbo_exportmoviequality.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbSearch_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbSearch.SelectedIndexChanged + txtSearch.Text = "" + If ((cbSearch.Text = Master.eLang.GetString(5, "Source Folder") AndAlso lstSources.CheckedItems.Count > 0) OrElse txtSearch.Text <> "") AndAlso cbSearch.Text <> "" Then + btn_Apply.Enabled = True + Else + btn_Apply.Enabled = False + End If + If cbSearch.Text = Master.eLang.GetString(5, "Source Folder") Then + 'cbFilterSource.Visible = True + btnSource.Visible = True + txtSearch.ReadOnly = True + Else + 'cbFilterSource.Visible = False + btnSource.Visible = False + txtSearch.ReadOnly = False + End If + End Sub + Private Sub txtSearch_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSearch.TextChanged + If txtSearch.Text <> "" AndAlso cbSearch.Text <> "" Then + btn_Apply.Enabled = True + Else + btn_Apply.Enabled = False + End If End Sub #End Region 'Methods + + Private Sub btn_Apply_Click(sender As Object, e As EventArgs) Handles btn_Apply.Click + Dim sFilter As String = String.Empty + If cbSearch.Text = Master.eLang.GetString(5, "Source Folder") Then + For Each s As String In lstSources.CheckedItems + sFilter = String.Concat(sFilter, If(sFilter = String.Empty, String.Empty, ";"), s.ToString) + Next + Else + sFilter = txtSearch.Text + End If + sFilter = sFilter & "#" & cbSearch.Text + + If cbo_exportmoviefilter.Text = "Filter 1" Then + lbl_exportmoviefilter1saved.Text = sFilter + ElseIf cbo_exportmoviefilter.Text = "Filter 2" Then + lbl_exportmoviefilter2saved.Text = sFilter + ElseIf cbo_exportmoviefilter.Text = "Filter 3" Then + lbl_exportmoviefilter3saved.Text = sFilter + End If + txtSearch.Text = "" + End Sub + + Private Sub btnSource_Click(sender As Object, e As EventArgs) Handles btnSource.Click + If btnSource.ImageIndex = 0 Then + lstSources.Visible = True + btnSource.ImageIndex = 1 + Else + lstSources.Visible = False + btnSource.ImageIndex = 0 + Dim sFilter As String = String.Empty + If cbSearch.Text = Master.eLang.GetString(5, "Source Folder") Then + For Each s In lstSources.CheckedItems + sFilter = String.Concat(sFilter, If(sFilter = String.Empty, String.Empty, ";"), s.ToString) + Next + txtSearch.Text = sFilter + End If + End If + End Sub + + Private Sub btn_exportmoviepath_Click(sender As Object, e As EventArgs) Handles btn_exportmoviepath.Click + Using dlg As New FolderBrowserDialog() + dlg.Description = "Select ExportPath" + If dlg.ShowDialog() = DialogResult.OK Then + Me.txt_exportmoviepath.Text = dlg.SelectedPath + End If + End Using + End Sub + + + Private Sub btn_Reset_Click(sender As Object, e As EventArgs) Handles btn_Reset.Click + If cbo_exportmoviefilter.Text = "Filter 1" Then + lbl_exportmoviefilter1saved.Text = "-" + ElseIf cbo_exportmoviefilter.Text = "Filter 2" Then + lbl_exportmoviefilter2saved.Text = "-" + ElseIf cbo_exportmoviefilter.Text = "Filter 3" Then + lbl_exportmoviefilter3saved.Text = "-" + End If + txtSearch.Text = "" + End Sub + + End Class \ No newline at end of file diff --git a/Addons/generic.EmberCore.MovieExport/generic.EmberCore.MovieExporter.vbproj b/Addons/generic.EmberCore.MovieExport/generic.EmberCore.MovieExporter.vbproj index 766e804..6bfaeb3 100644 --- a/Addons/generic.EmberCore.MovieExport/generic.EmberCore.MovieExporter.vbproj +++ b/Addons/generic.EmberCore.MovieExport/generic.EmberCore.MovieExporter.vbproj @@ -189,6 +189,9 @@ + + PreserveNewest + PreserveNewest @@ -201,7 +204,10 @@ PreserveNewest - + + PreserveNewest + + PreserveNewest diff --git a/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.Debug_(db_DB).xml b/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.Debug_(db_DB).xml new file mode 100644 index 0000000..ee7cfc6 --- /dev/null +++ b/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + nmt1 + nmt2 + nmt3 + nmt4 + nmt5 + nmt6 + nmt7 + nmt8 + nmt9 + nmt10 + nmt11 + nmt12 + nmt13 + nmt14 + nmt15 + nmt16 + nmt17 + nmt18 + nmt19 + nmt20 + nmt21 + nmt22 + nmt23 + nmt24 + nmt25 + nmt26 + nmt27 + nmt28 + nmt29 + nmt30 + nmt31 + nmt32 + nmt33 + nmt34 + nmt35 + nmt36 + nmt37 + nmt38 + nmt39 + nmt40 + nmt41 + nmt42 + nmt43 + nmt44 + nmt45 + nmt46 + nmt47 + nmt48 + nmt49 + nmt50 + nmt51 + nmt52 + nmt53 + nmt54 + nmt55 + nmt56 + nmt57 + nmt58 + nmt59 + nmt60 + nmt61 + nmt62 + nmt63 + nmt64 + nmt65 + nmt66 + nmt67 + nmt68 + nmt69 + nmt70 + nmt71 + nmt72 + nmt73 + nmt74 + nmt75 + nmt76 + nmt77 + nmt78 + nmt79 + nmt80 + nmt81 + nmt82 + nmt83 + nmt84 + nmt85 + nmt86 + nmt87 + nmt88 + nmt89 + nmt90 + nmt91 + nmt92 + nmt93 + nmt94 + nmt95 + nmt96 + nmt97 + nmt98 + nmt99 + nmt100 + nmt101 + nmt102 + nmt103 + nmt104 + nmt105 + nmt106 + nmt107 + nmt108 + nmt109 + nmt110 + nmt111 + nmt112 + nmt113 + nmt114 + nmt115 + nmt116 + nmt117 + nmt118 + nmt119 + nmt120 + nmt121 + nmt122 + nmt123 + nmt124 + nmt125 + nmt126 + nmt127 + nmt128 + nmt129 + nmt130 + nmt131 + nmt132 + nmt133 + nmt134 + nmt135 + nmt136 + nmt137 + nmt138 + nmt139 + nmt140 + nmt141 + nmt142 + nmt143 + nmt144 + nmt145 + nmt146 + nmt147 + nmt148 + nmt149 + nmt150 + nmt151 + nmt152 + nmt153 + nmt154 + nmt155 + nmt156 + nmt157 + nmt158 + nmt159 + nmt160 + nmt161 + nmt162 + nmt163 + nmt164 + nmt165 + nmt166 + nmt167 + nmt168 + nmt169 + nmt170 + nmt171 + nmt172 + nmt173 + nmt174 + nmt175 + nmt176 + nmt177 + nmt178 + nmt179 + nmt180 + nmt181 + nmt182 + nmt183 + nmt184 + nmt185 + nmt186 + nmt187 + nmt188 + nmt189 + nmt190 + nmt191 + nmt192 + nmt193 + nmt194 + nmt195 + nmt196 + nmt197 + nmt198 + nmt199 + nmt200 + nmt201 + nmt202 + nmt203 + nmt204 + nmt205 + nmt206 + nmt207 + nmt208 + nmt209 + nmt210 + nmt211 + nmt212 + nmt213 + nmt214 + nmt215 + nmt216 + nmt217 + nmt218 + nmt219 + nmt220 + nmt221 + nmt222 + nmt223 + nmt224 + nmt225 + nmt226 + nmt227 + nmt228 + nmt229 + nmt230 + nmt231 + nmt232 + nmt233 + nmt234 + nmt235 + nmt236 + nmt237 + nmt238 + nmt239 + nmt240 + nmt241 + nmt242 + nmt243 + nmt244 + nmt245 + nmt246 + nmt247 + nmt248 + nmt249 + nmt250 + nmt251 + nmt252 + nmt253 + nmt254 + nmt255 + nmt256 + nmt257 + nmt258 + nmt259 + nmt260 + nmt261 + nmt262 + nmt263 + nmt264 + nmt265 + nmt266 + nmt267 + nmt268 + nmt269 + nmt270 + nmt271 + nmt272 + nmt273 + nmt274 + nmt275 + nmt276 + nmt277 + nmt278 + nmt279 + nmt280 + nmt281 + nmt282 + nmt283 + nmt284 + nmt285 + nmt286 + nmt287 + nmt288 + nmt289 + nmt290 + nmt291 + nmt292 + nmt293 + nmt294 + nmt295 + nmt296 + nmt297 + nmt298 + nmt299 + nmt300 + nmt301 + nmt302 + nmt303 + nmt304 + nmt305 + nmt306 + nmt307 + nmt308 + nmt309 + nmt310 + nmt311 + nmt312 + nmt313 + nmt314 + nmt315 + nmt316 + nmt317 + nmt318 + nmt319 + nmt320 + nmt321 + nmt322 + nmt323 + nmt324 + nmt325 + nmt326 + nmt327 + nmt328 + nmt329 + nmt330 + nmt331 + nmt332 + nmt333 + nmt334 + nmt335 + nmt336 + nmt337 + nmt338 + nmt339 + nmt340 + nmt341 + nmt342 + nmt343 + nmt344 + nmt345 + nmt346 + nmt347 + nmt348 + nmt349 + nmt350 + nmt351 + nmt352 + nmt353 + nmt354 + nmt355 + nmt356 + nmt357 + nmt358 + nmt359 + nmt360 + nmt361 + nmt362 + nmt363 + nmt364 + nmt365 + nmt366 + nmt367 + nmt368 + nmt369 + nmt370 + nmt371 + nmt372 + nmt373 + nmt374 + nmt375 + nmt376 + nmt377 + nmt378 + nmt379 + nmt380 + nmt381 + nmt382 + nmt383 + nmt384 + nmt385 + nmt386 + nmt387 + nmt388 + nmt389 + nmt390 + nmt391 + nmt392 + nmt393 + nmt394 + nmt395 + nmt396 + nmt397 + nmt398 + nmt399 + nmt400 + nmt401 + nmt402 + nmt403 + nmt404 + nmt405 + nmt406 + nmt407 + nmt408 + nmt409 + nmt410 + nmt411 + nmt412 + nmt413 + nmt414 + nmt415 + nmt416 + nmt417 + nmt418 + nmt419 + nmt420 + nmt421 + nmt422 + nmt423 + nmt424 + nmt425 + nmt426 + nmt427 + nmt428 + nmt429 + nmt430 + nmt431 + nmt432 + nmt433 + nmt434 + nmt435 + nmt436 + nmt437 + nmt438 + nmt439 + nmt440 + nmt441 + nmt442 + nmt443 + nmt444 + nmt445 + nmt446 + nmt447 + nmt448 + nmt449 + nmt450 + nmt451 + nmt452 + nmt453 + nmt454 + nmt455 + nmt456 + nmt457 + nmt458 + nmt459 + nmt460 + nmt461 + nmt462 + nmt463 + nmt464 + nmt465 + nmt466 + nmt467 + nmt468 + nmt469 + nmt470 + nmt471 + nmt472 + nmt473 + nmt474 + nmt475 + nmt476 + nmt477 + nmt478 + nmt479 + nmt480 + nmt481 + nmt482 + nmt483 + nmt484 + nmt485 + nmt486 + nmt487 + nmt488 + nmt489 + nmt490 + nmt491 + nmt492 + nmt493 + nmt494 + nmt495 + nmt496 + nmt497 + nmt498 + nmt499 + nmt500 + nmt501 + nmt502 + nmt503 + nmt504 + nmt505 + nmt506 + nmt507 + nmt508 + nmt509 + nmt510 + nmt511 + nmt512 + nmt513 + nmt514 + nmt515 + nmt516 + nmt517 + nmt518 + nmt519 + nmt520 + nmt521 + nmt522 + nmt523 + nmt524 + nmt525 + nmt526 + nmt527 + nmt528 + nmt529 + nmt530 + nmt531 + nmt532 + nmt533 + nmt534 + nmt535 + nmt536 + nmt537 + nmt538 + nmt539 + nmt540 + nmt541 + nmt542 + nmt543 + nmt544 + nmt545 + nmt546 + nmt547 + nmt548 + nmt549 + nmt550 + nmt551 + nmt552 + nmt553 + nmt554 + nmt555 + nmt556 + nmt557 + nmt558 + nmt559 + nmt560 + nmt561 + nmt562 + nmt563 + nmt564 + nmt565 + nmt566 + nmt567 + nmt568 + nmt569 + nmt570 + nmt571 + nmt572 + nmt573 + nmt574 + nmt575 + nmt576 + nmt577 + nmt578 + nmt579 + nmt580 + nmt581 + nmt582 + nmt583 + nmt584 + nmt585 + nmt586 + nmt587 + nmt588 + nmt589 + nmt590 + nmt591 + nmt592 + nmt593 + nmt594 + nmt595 + nmt596 + nmt597 + nmt598 + nmt599 + nmt600 + nmt601 + nmt602 + nmt603 + nmt604 + nmt605 + nmt606 + nmt607 + nmt608 + nmt609 + nmt610 + nmt611 + nmt612 + nmt613 + nmt614 + nmt615 + nmt616 + nmt617 + nmt618 + nmt619 + nmt620 + nmt621 + nmt622 + nmt623 + nmt624 + nmt625 + nmt626 + nmt627 + nmt628 + nmt629 + nmt630 + nmt631 + nmt632 + nmt633 + nmt634 + nmt635 + nmt636 + nmt637 + nmt638 + nmt639 + nmt640 + nmt641 + nmt642 + nmt643 + nmt644 + nmt645 + nmt646 + nmt647 + nmt648 + nmt649 + nmt650 + nmt651 + nmt652 + nmt653 + nmt654 + nmt655 + nmt656 + nmt657 + nmt658 + nmt659 + nmt660 + nmt661 + nmt662 + nmt663 + nmt664 + nmt665 + nmt666 + nmt667 + nmt668 + nmt669 + nmt670 + nmt671 + nmt672 + nmt673 + nmt674 + nmt675 + nmt676 + nmt677 + nmt678 + nmt679 + nmt680 + nmt681 + nmt682 + nmt683 + nmt684 + nmt685 + nmt686 + nmt687 + nmt688 + nmt689 + nmt690 + nmt691 + nmt692 + nmt693 + nmt694 + nmt695 + nmt696 + nmt697 + nmt698 + nmt699 + nmt700 + nmt701 + nmt702 + nmt703 + nmt704 + nmt705 + nmt706 + nmt707 + nmt708 + nmt709 + nmt710 + nmt711 + nmt712 + nmt713 + nmt714 + nmt715 + nmt716 + nmt717 + nmt718 + nmt719 + nmt720 + nmt721 + nmt722 + nmt723 + nmt724 + nmt725 + nmt726 + nmt727 + nmt728 + nmt729 + nmt730 + nmt731 + nmt732 + nmt733 + nmt734 + nmt735 + nmt736 + nmt737 + nmt738 + nmt739 + nmt740 + nmt741 + nmt742 + nmt743 + nmt744 + nmt745 + nmt746 + nmt747 + nmt748 + nmt749 + nmt750 + nmt751 + nmt752 + nmt753 + nmt754 + nmt755 + nmt756 + nmt757 + nmt758 + nmt759 + nmt760 + nmt761 + nmt762 + nmt763 + nmt764 + nmt765 + nmt766 + nmt767 + nmt768 + nmt769 + nmt770 + nmt771 + nmt772 + nmt773 + nmt774 + nmt775 + nmt776 + nmt777 + nmt778 + nmt779 + nmt780 + nmt781 + nmt782 + nmt783 + nmt784 + nmt785 + nmt786 + nmt787 + nmt788 + nmt789 + nmt790 + nmt791 + nmt792 + nmt793 + nmt794 + nmt795 + nmt796 + nmt797 + nmt798 + nmt799 + nmt800 + nmt801 + nmt802 + nmt803 + nmt804 + nmt805 + nmt806 + nmt807 + nmt808 + nmt809 + nmt810 + nmt811 + nmt812 + nmt813 + nmt814 + nmt815 + nmt816 + nmt817 + nmt818 + nmt819 + nmt820 + nmt821 + nmt822 + nmt823 + nmt824 + nmt825 + nmt826 + nmt827 + nmt828 + nmt829 + nmt830 + nmt831 + nmt832 + nmt833 + nmt834 + nmt835 + nmt836 + nmt837 + nmt838 + nmt839 + nmt840 + nmt841 + nmt842 + nmt843 + nmt844 + nmt845 + nmt846 + nmt847 + nmt848 + nmt849 + nmt850 + nmt851 + nmt852 + nmt853 + nmt854 + nmt855 + nmt856 + nmt857 + nmt858 + nmt859 + nmt860 + nmt861 + nmt862 + nmt863 + nmt864 + nmt865 + nmt866 + nmt867 + nmt868 + nmt869 + nmt870 + nmt871 + nmt872 + nmt873 + nmt874 + nmt875 + nmt876 + nmt877 + nmt878 + nmt879 + nmt880 + nmt881 + nmt882 + nmt883 + nmt884 + nmt885 + nmt886 + nmt887 + nmt888 + nmt889 + nmt890 + nmt891 + nmt892 + nmt893 + nmt894 + nmt895 + nmt896 + nmt897 + nmt898 + nmt899 + nmt900 + \ No newline at end of file diff --git a/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.English_(en_US).xml b/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.English_(en_US).xml index 0fa514f..f0f9a52 100644 --- a/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.English_(en_US).xml +++ b/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.English_(en_US).xml @@ -1,52 +1,51 @@ - - NMT Jukebox Builder - Jukebox Builder - Compiling Movie List... - Canceling Compilation... - Template - Choose a template - BasePath can not be the same as Output Folder - Warning - Movies - Exporting Data... - Movies - Exporting Flags... - Movies - Exporting Posters... - Movies - Exporting Backdrops... - Use the NMT Path when the source is not on the same Drive/Share as the Output folder.{0}Some common paths are:{0}file:///opt/sybhttpd/localhost.drives/NETWORK_SHARE/[remote_filesystem_name]/[Path_to_Source]{0}file:///opt/sybhttpd/localhost.drives/HARD_DISK/USB_DRIVE_A-1/[Path_to_Source] - Select Root Folder where Jukebox files will be exported - Output Folder - Save Settings - Build - Help - Installed - New - Starting... - Cleaning output folder... - Outdated - Preparing folders... - Validating Info... - Invalid Output Folder - Output Folder don't match Selected Sources and no NMT Path defined - Removing Template can not be undone. Are you sure? - Remove Template - Property - Value - Ember Source - NMT Path - Setting - Template Settings - Skin Properties - Install Template - Folder already exist. Overwrite? - File/Folder in use! Can Not overwrite - High Priority - When using external tools, run several instances for a faster build - Click for more details - Please Choose/Install a Template First - Version - Author - Status - Install - Remove - Details - \ No newline at end of file + NMT Jukebox Builder + Jukebox Builder + Compiling Movie List... + Canceling Compilation... + Template + Choose a template + BasePath can not be the same as Output Folder + Warning + Movies - Exporting Data... + Movies - Exporting Flags... + Movies - Exporting Posters... + Movies - Exporting Backdrops... + Use the NMT Path when the source is not on the same Drive/Share as the Output folder.{0}Some common paths are:{0}file:///opt/sybhttpd/localhost.drives/NETWORK_SHARE/[remote_filesystem_name]/[Path_to_Source]{0}file:///opt/sybhttpd/localhost.drives/HARD_DISK/USB_DRIVE_A-1/[Path_to_Source] + Select Root Folder where Jukebox files will be exported + Output Folder + Save Settings + Build + Help + Installed + New + Starting... + Cleaning output folder... + Outdated + Preparing folders... + Validating Info... + Invalid Output Folder + Output Folder don't match Selected Sources and no NMT Path defined + Removing Template can not be undone. Are you sure? + Remove Template + Property + Value + Ember Source + NMT Path + Setting + Template Settings + Skin Properties + Install Template + Folder already exist. Overwrite? + File/Folder in use! Can Not overwrite + High Priority + When using external tools, run several instances for a faster build + Click for more details + Please Choose/Install a Template First + Version + Author + Status + Install + Remove + Details + diff --git a/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.German_(de_DE).xml b/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.German_(de_DE).xml index b7540f5..60100d3 100644 --- a/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.German_(de_DE).xml +++ b/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.German_(de_DE).xml @@ -1,46 +1,51 @@ - - Jukebox Builder - Compiling Film List... - Abbruch Compilation... - Template - Template auswählen - BasePath kann nicht gleich dem Ausgangsordner sein - Achtung - Exportiere Daten... - Exportiere Flags... - Exportiere Cover... - Exportiere Hintergrund Bilder... - Benutze den NMT Pfad wenn die Quelle nicht gleich dem Ausgangsordner ist.{0}Syntax zum NMT ist:{0}file:///opt/sybhttpd/localhost.drives/NETWORK_SHARE/[remote_filesystem_name]/[Path_to_Source]{0}file:///opt/sybhttpd/localhost.drives/HARD_DISK/USB_DRIVE_A-1/[Path_to_Source] - Laufwerk und Ordner wo Jukebox Dateien exportiert werden sollen - Ausgangs Ordner - Template speichern - Erstellen - Hilfe - Installiert - Neu - Starten... - Ausgangs Ordner leeren... - veraltet - Vorbereiten Ordner... - Bestätigung Info... - Falscher Ausgangs Ordner - Bitte den korrekten NMT-Path nicht vergessen einzutragen da Ember weder Source noch NMT Path überprüft - Template entfernen kann nicht rückgängig gemacht werden. Bist du sicher? - entferne Template - Eigenschaften - Auswahl J/N - Ember Quelle - NMT Path - Einstellungen - Template Einstellungen - Skin Einstellungen - Installiere Template - Ordner existiert bereits. Überschreiben? - Datei/Ordner wird verwendet! Überschreiben nicht möglich - Hohe Priorität - Falls externe Tools benutzt werden, mehrere Instanzen laufen, bekommt Ember NMT Build hohe Priorität - Click für mehr Details - Bitte auswählen / Installiere zuerst ein Template + NMT Jukebox Builder + Jukebox Builder + Compiling Film List... + Abbruch Compilation... + Template + Template auswählen + BasePath kann nicht gleich dem Ausgangsordner sein + Achtung + Filme - Exportiere Daten... + Filme - Exportiere Flags... + Filme - Exportiere Cover... + Filme - Exportiere Hintergrund Bilder... + Benutze den NMT Pfad wenn die Quelle nicht gleich dem Ausgangsordner ist.{0}Syntax zum NMT ist:{0}file:///opt/sybhttpd/localhost.drives/NETWORK_SHARE/[remote_filesystem_name]/[Path_to_Source]{0}file:///opt/sybhttpd/localhost.drives/HARD_DISK/USB_DRIVE_A-1/[Path_to_Source] + Laufwerk und Ordner wohin die Jukebox Dateien exportiert werden sollen + Ausgangs Ordner + Template speichern + Erstellen + Hilfe + Installiert + Neu + Starten... + Ausgangs Ordner leeren... + Veraltet + Bereite Ordner vor... + Überprüfe Info... + Falscher Ausgangs Ordner + Bitte den korrekten NMT-Path nicht vergessen einzutragen da Ember weder Source noch NMT Path überprüft + Template entfernen kann nicht rückgängig gemacht werden. Bist du sicher? + Entferne Template + Eigenschaften + Auswahl J/N + Ember Quelle + NMT Path + Einstellungen + Template Einstellungen + Skin Einstellungen + Installiere Template + Ordner existiert bereits. Überschreiben? + Datei/Ordner wird verwendet! Überschreiben nicht möglich + Hohe Priorität + Falls externe Tools benutzt werden, mehrere Instanzen laufen, bekommt Ember NMT Build hohe Priorität + Click für mehr Details + Bitte wähle / installiere zuerst ein Template + Version + Autor + Status + Installieren + Entfernen + Details - \ No newline at end of file diff --git a/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.Norwegian_(no_NO).xml b/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.Norwegian_(no_NO).xml new file mode 100644 index 0000000..cd32207 --- /dev/null +++ b/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.Norwegian_(no_NO).xml @@ -0,0 +1,51 @@ + + NMT Jukebox-bygger + Jukebox-bygger + Lager filmliste... + Avbryter listelaging + Templat + Velg et templat + Grunnbanen kan ikke være den samme som utgående mappe + Advarsel + Filmer - Eksporterer data... + Filmer - Eksporterer flagg... + Filmer - Exporterer plakater... + Filmer - Eksporterer bakgrunner... + Bruk NMT-bane når kilder ikke er på den samme partisjonen som utgående bane.{0}Noen vanlige baner er:{0}file:///opt/sybhttpd/localhost.drives/NETWORK_SHARE/[remote_filesystem_name]/[Path_to_Source]{0}file:///opt/sybhttpd/localhost.drives/HARD_DISK/USB_DRIVE_A-1/[Path_to_Source] + Velg rotmappen hvor jukebox-filene vil bli eksportert til + Utgående mappe + Lagre innstillinger + Lag + Hjelp + Installert + Ny + Starter... + Renser utgående mappe... + Utdatert + Forbereder mapper... + Validerer informasjon... + Ugyldig utgående mappe + Utgående mappe stemmer ikke med valgte kilder, og ingen NMT bane definert + Fjerning av templat kan ikke omgjøres. Er du sikker? + Fjern templat + Egenskap + Verdi + EMM kilde + NMT bane + Innstilling + Templatinnstillinger + Utseendeegenskaper + Installér templat + Mappen eksisterer allerede. Overskrive? + Fil/mappe i bruk! Kan ikke overskrive + Høy prioritet + Når eksterne verktøy brukes, kjør flere instanser for å lage filen raskere + Klikk for flere detaljer + Vennligst velg/installér templat først + Versjon + Forfatter + Status + Installér + Fjern + Detaljer + diff --git "a/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.Portugu\303\252s_(pt-BR).xml" "b/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.Portugu\303\252s_(pt-BR).xml" deleted file mode 100644 index a91dc2d..0000000 --- "a/Addons/generic.EmberCore.NMT/Langs/generic.EmberCore.NMT.Portugu\303\252s_(pt-BR).xml" +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/Addons/generic.EmberCore.NMT/My Project/AssemblyInfo.vb b/Addons/generic.EmberCore.NMT/My Project/AssemblyInfo.vb index f157f5c..8bfee7d 100644 --- a/Addons/generic.EmberCore.NMT/My Project/AssemblyInfo.vb +++ b/Addons/generic.EmberCore.NMT/My Project/AssemblyInfo.vb @@ -9,7 +9,7 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - + diff --git a/Addons/generic.EmberCore.NMT/generic.EmberCore.NMT.vbproj b/Addons/generic.EmberCore.NMT/generic.EmberCore.NMT.vbproj index 8ebd15d..4823008 100644 --- a/Addons/generic.EmberCore.NMT/generic.EmberCore.NMT.vbproj +++ b/Addons/generic.EmberCore.NMT/generic.EmberCore.NMT.vbproj @@ -176,13 +176,16 @@ + + PreserveNewest + PreserveNewest PreserveNewest - + PreserveNewest diff --git a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.Debug_(db_DB).xml b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.Debug_(db_DB).xml new file mode 100644 index 0000000..ffdeab8 --- /dev/null +++ b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + noti1 + noti2 + noti3 + noti4 + noti5 + noti6 + noti7 + noti8 + noti9 + noti10 + noti11 + noti12 + noti13 + noti14 + noti15 + noti16 + noti17 + noti18 + noti19 + noti20 + noti21 + noti22 + noti23 + noti24 + noti25 + noti26 + noti27 + noti28 + noti29 + noti30 + noti31 + noti32 + noti33 + noti34 + noti35 + noti36 + noti37 + noti38 + noti39 + noti40 + noti41 + noti42 + noti43 + noti44 + noti45 + noti46 + noti47 + noti48 + noti49 + noti50 + noti51 + noti52 + noti53 + noti54 + noti55 + noti56 + noti57 + noti58 + noti59 + noti60 + noti61 + noti62 + noti63 + noti64 + noti65 + noti66 + noti67 + noti68 + noti69 + noti70 + noti71 + noti72 + noti73 + noti74 + noti75 + noti76 + noti77 + noti78 + noti79 + noti80 + noti81 + noti82 + noti83 + noti84 + noti85 + noti86 + noti87 + noti88 + noti89 + noti90 + noti91 + noti92 + noti93 + noti94 + noti95 + noti96 + noti97 + noti98 + noti99 + noti100 + noti101 + noti102 + noti103 + noti104 + noti105 + noti106 + noti107 + noti108 + noti109 + noti110 + noti111 + noti112 + noti113 + noti114 + noti115 + noti116 + noti117 + noti118 + noti119 + noti120 + noti121 + noti122 + noti123 + noti124 + noti125 + noti126 + noti127 + noti128 + noti129 + noti130 + noti131 + noti132 + noti133 + noti134 + noti135 + noti136 + noti137 + noti138 + noti139 + noti140 + noti141 + noti142 + noti143 + noti144 + noti145 + noti146 + noti147 + noti148 + noti149 + noti150 + noti151 + noti152 + noti153 + noti154 + noti155 + noti156 + noti157 + noti158 + noti159 + noti160 + noti161 + noti162 + noti163 + noti164 + noti165 + noti166 + noti167 + noti168 + noti169 + noti170 + noti171 + noti172 + noti173 + noti174 + noti175 + noti176 + noti177 + noti178 + noti179 + noti180 + noti181 + noti182 + noti183 + noti184 + noti185 + noti186 + noti187 + noti188 + noti189 + noti190 + noti191 + noti192 + noti193 + noti194 + noti195 + noti196 + noti197 + noti198 + noti199 + noti200 + noti201 + noti202 + noti203 + noti204 + noti205 + noti206 + noti207 + noti208 + noti209 + noti210 + noti211 + noti212 + noti213 + noti214 + noti215 + noti216 + noti217 + noti218 + noti219 + noti220 + noti221 + noti222 + noti223 + noti224 + noti225 + noti226 + noti227 + noti228 + noti229 + noti230 + noti231 + noti232 + noti233 + noti234 + noti235 + noti236 + noti237 + noti238 + noti239 + noti240 + noti241 + noti242 + noti243 + noti244 + noti245 + noti246 + noti247 + noti248 + noti249 + noti250 + noti251 + noti252 + noti253 + noti254 + noti255 + noti256 + noti257 + noti258 + noti259 + noti260 + noti261 + noti262 + noti263 + noti264 + noti265 + noti266 + noti267 + noti268 + noti269 + noti270 + noti271 + noti272 + noti273 + noti274 + noti275 + noti276 + noti277 + noti278 + noti279 + noti280 + noti281 + noti282 + noti283 + noti284 + noti285 + noti286 + noti287 + noti288 + noti289 + noti290 + noti291 + noti292 + noti293 + noti294 + noti295 + noti296 + noti297 + noti298 + noti299 + noti300 + noti301 + noti302 + noti303 + noti304 + noti305 + noti306 + noti307 + noti308 + noti309 + noti310 + noti311 + noti312 + noti313 + noti314 + noti315 + noti316 + noti317 + noti318 + noti319 + noti320 + noti321 + noti322 + noti323 + noti324 + noti325 + noti326 + noti327 + noti328 + noti329 + noti330 + noti331 + noti332 + noti333 + noti334 + noti335 + noti336 + noti337 + noti338 + noti339 + noti340 + noti341 + noti342 + noti343 + noti344 + noti345 + noti346 + noti347 + noti348 + noti349 + noti350 + noti351 + noti352 + noti353 + noti354 + noti355 + noti356 + noti357 + noti358 + noti359 + noti360 + noti361 + noti362 + noti363 + noti364 + noti365 + noti366 + noti367 + noti368 + noti369 + noti370 + noti371 + noti372 + noti373 + noti374 + noti375 + noti376 + noti377 + noti378 + noti379 + noti380 + noti381 + noti382 + noti383 + noti384 + noti385 + noti386 + noti387 + noti388 + noti389 + noti390 + noti391 + noti392 + noti393 + noti394 + noti395 + noti396 + noti397 + noti398 + noti399 + noti400 + noti401 + noti402 + noti403 + noti404 + noti405 + noti406 + noti407 + noti408 + noti409 + noti410 + noti411 + noti412 + noti413 + noti414 + noti415 + noti416 + noti417 + noti418 + noti419 + noti420 + noti421 + noti422 + noti423 + noti424 + noti425 + noti426 + noti427 + noti428 + noti429 + noti430 + noti431 + noti432 + noti433 + noti434 + noti435 + noti436 + noti437 + noti438 + noti439 + noti440 + noti441 + noti442 + noti443 + noti444 + noti445 + noti446 + noti447 + noti448 + noti449 + noti450 + noti451 + noti452 + noti453 + noti454 + noti455 + noti456 + noti457 + noti458 + noti459 + noti460 + noti461 + noti462 + noti463 + noti464 + noti465 + noti466 + noti467 + noti468 + noti469 + noti470 + noti471 + noti472 + noti473 + noti474 + noti475 + noti476 + noti477 + noti478 + noti479 + noti480 + noti481 + noti482 + noti483 + noti484 + noti485 + noti486 + noti487 + noti488 + noti489 + noti490 + noti491 + noti492 + noti493 + noti494 + noti495 + noti496 + noti497 + noti498 + noti499 + noti500 + noti501 + noti502 + noti503 + noti504 + noti505 + noti506 + noti507 + noti508 + noti509 + noti510 + noti511 + noti512 + noti513 + noti514 + noti515 + noti516 + noti517 + noti518 + noti519 + noti520 + noti521 + noti522 + noti523 + noti524 + noti525 + noti526 + noti527 + noti528 + noti529 + noti530 + noti531 + noti532 + noti533 + noti534 + noti535 + noti536 + noti537 + noti538 + noti539 + noti540 + noti541 + noti542 + noti543 + noti544 + noti545 + noti546 + noti547 + noti548 + noti549 + noti550 + noti551 + noti552 + noti553 + noti554 + noti555 + noti556 + noti557 + noti558 + noti559 + noti560 + noti561 + noti562 + noti563 + noti564 + noti565 + noti566 + noti567 + noti568 + noti569 + noti570 + noti571 + noti572 + noti573 + noti574 + noti575 + noti576 + noti577 + noti578 + noti579 + noti580 + noti581 + noti582 + noti583 + noti584 + noti585 + noti586 + noti587 + noti588 + noti589 + noti590 + noti591 + noti592 + noti593 + noti594 + noti595 + noti596 + noti597 + noti598 + noti599 + noti600 + noti601 + noti602 + noti603 + noti604 + noti605 + noti606 + noti607 + noti608 + noti609 + noti610 + noti611 + noti612 + noti613 + noti614 + noti615 + noti616 + noti617 + noti618 + noti619 + noti620 + noti621 + noti622 + noti623 + noti624 + noti625 + noti626 + noti627 + noti628 + noti629 + noti630 + noti631 + noti632 + noti633 + noti634 + noti635 + noti636 + noti637 + noti638 + noti639 + noti640 + noti641 + noti642 + noti643 + noti644 + noti645 + noti646 + noti647 + noti648 + noti649 + noti650 + noti651 + noti652 + noti653 + noti654 + noti655 + noti656 + noti657 + noti658 + noti659 + noti660 + noti661 + noti662 + noti663 + noti664 + noti665 + noti666 + noti667 + noti668 + noti669 + noti670 + noti671 + noti672 + noti673 + noti674 + noti675 + noti676 + noti677 + noti678 + noti679 + noti680 + noti681 + noti682 + noti683 + noti684 + noti685 + noti686 + noti687 + noti688 + noti689 + noti690 + noti691 + noti692 + noti693 + noti694 + noti695 + noti696 + noti697 + noti698 + noti699 + noti700 + noti701 + noti702 + noti703 + noti704 + noti705 + noti706 + noti707 + noti708 + noti709 + noti710 + noti711 + noti712 + noti713 + noti714 + noti715 + noti716 + noti717 + noti718 + noti719 + noti720 + noti721 + noti722 + noti723 + noti724 + noti725 + noti726 + noti727 + noti728 + noti729 + noti730 + noti731 + noti732 + noti733 + noti734 + noti735 + noti736 + noti737 + noti738 + noti739 + noti740 + noti741 + noti742 + noti743 + noti744 + noti745 + noti746 + noti747 + noti748 + noti749 + noti750 + noti751 + noti752 + noti753 + noti754 + noti755 + noti756 + noti757 + noti758 + noti759 + noti760 + noti761 + noti762 + noti763 + noti764 + noti765 + noti766 + noti767 + noti768 + noti769 + noti770 + noti771 + noti772 + noti773 + noti774 + noti775 + noti776 + noti777 + noti778 + noti779 + noti780 + noti781 + noti782 + noti783 + noti784 + noti785 + noti786 + noti787 + noti788 + noti789 + noti790 + noti791 + noti792 + noti793 + noti794 + noti795 + noti796 + noti797 + noti798 + noti799 + noti800 + noti801 + noti802 + noti803 + noti804 + noti805 + noti806 + noti807 + noti808 + noti809 + noti810 + noti811 + noti812 + noti813 + noti814 + noti815 + noti816 + noti817 + noti818 + noti819 + noti820 + noti821 + noti822 + noti823 + noti824 + noti825 + noti826 + noti827 + noti828 + noti829 + noti830 + noti831 + noti832 + noti833 + noti834 + noti835 + noti836 + noti837 + noti838 + noti839 + noti840 + noti841 + noti842 + noti843 + noti844 + noti845 + noti846 + noti847 + noti848 + noti849 + noti850 + noti851 + noti852 + noti853 + noti854 + noti855 + noti856 + noti857 + noti858 + noti859 + noti860 + noti861 + noti862 + noti863 + noti864 + noti865 + noti866 + noti867 + noti868 + noti869 + noti870 + noti871 + noti872 + noti873 + noti874 + noti875 + noti876 + noti877 + noti878 + noti879 + noti880 + noti881 + noti882 + noti883 + noti884 + noti885 + noti886 + noti887 + noti888 + noti889 + noti890 + noti891 + noti892 + noti893 + noti894 + noti895 + noti896 + noti897 + noti898 + noti899 + noti900 + \ No newline at end of file diff --git a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.English_(en_US)-Help.xml b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.English_(en_US)-Help.xml index 9903bb3..a70c390 100644 --- a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.English_(en_US)-Help.xml +++ b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.English_(en_US)-Help.xml @@ -1,8 +1,7 @@ - - Enable or disable this module. - If enabled, a notification box will be displayed when an error occurs. - If enabled, a notification box will be displayed when a movie is added to the library. - If enabled, a notification box will be displayed when a movie is scraped. - If enabled, a notification box will be displayed when an episode is added to the library. - \ No newline at end of file + Enable or disable this module. + If enabled, a notification box will be displayed when an error occurs. + If enabled, a notification box will be displayed when a movie is added to the library. + If enabled, a notification box will be displayed when a movie is scraped. + If enabled, a notification box will be displayed when an episode is added to the library. + diff --git a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.English_(en_US).xml b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.English_(en_US).xml index ec76701..d61a768 100644 --- a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.English_(en_US).xml +++ b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.English_(en_US).xml @@ -1,8 +1,7 @@ - - Notifications - On Error - On New Movie Added - On Movie Scraped - On New Episode Added - \ No newline at end of file + Notifications + On Error + On New Movie Added + On Movie Scraped + On New Episode Added + diff --git a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.German_(de_DE)-Help.xml b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.German_(de_DE)-Help.xml index 0b10aa2..564e1c2 100644 --- a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.German_(de_DE)-Help.xml +++ b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.German_(de_DE)-Help.xml @@ -1,9 +1,7 @@ - - Ein oder ausschalten des Moduls. - Wenn eingeschalten, wird ein Hinweis angezeigt falls Fehler auftreten. - Wenn eingeschalten, wird ein Hinweis angezeigt wenn ein Film zur Datenbank hinzugefuegt wird. - Wenn eingeschalten, wird ein Hinweis angezeigt wenn ein Film gescrapt wird. - Wenn eingeschalten, wird ein Hinweis angezeigt wenn eine Episode der Datenbank hinzugefuegt wird. + Ein oder ausschalten des Moduls. + Wenn eingeschalten, wird ein Hinweis angezeigt falls Fehler auftreten. + Wenn eingeschalten, wird ein Hinweis angezeigt wenn ein Film zur Datenbank hinzugefügt wird. + Wenn eingeschalten, wird ein Hinweis angezeigt wenn ein Film gescrapt wird. + Wenn eingeschalten, wird ein Hinweis angezeigt wenn eine Episode der Datenbank hinzugefügt wird. - \ No newline at end of file diff --git a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.German_(de_DE).xml b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.German_(de_DE).xml index 5299d43..7884eb4 100644 --- a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.German_(de_DE).xml +++ b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.German_(de_DE).xml @@ -1,8 +1,7 @@ - - Meldungen - Bei Fehlern - Wenn ein neuer Film in Datenbank aufgenommen wird - Beim scrapen eines Films - Wenn neue Episode in Datenbank aufgenommen wird - \ No newline at end of file + Meldungen + Bei Fehlern + Wenn ein neuer Film in Datenbank aufgenommen wird + Beim Scrapen eines Films + Wenn neue Episode in Datenbank aufgenommen wird + diff --git a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.Norwegian_(no_NO)-Help.xml b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..1cdc413 --- /dev/null +++ b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,7 @@ + + Slå på eller slå av denne modulen. + Hvis påslått, en varselboks vil vises når en feil oppstår. + Hvis påslått, en varselboks vil vises når en ny film blir lagt til i biblioteket. + Hvis påslått, en varselboks vil vises når en film blir detaljhentet. + Hvis påslått, en varselboks vil vises når en episode blir lagt til i biblioteket. + diff --git a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.Norwegian_(no_NO).xml b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.Norwegian_(no_NO).xml new file mode 100644 index 0000000..cd3ec8a --- /dev/null +++ b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.Norwegian_(no_NO).xml @@ -0,0 +1,7 @@ + + Varslinger + Ved feil + Ved ny film lagt til + Ved ny film detaljhentet + Ved ny episode lagt til + diff --git "a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.Portugu\303\252s_(pt-BR).xml" "b/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.Portugu\303\252s_(pt-BR).xml" deleted file mode 100644 index a91dc2d..0000000 --- "a/Addons/generic.EmberCore.Notifications/Langs/generic.EmberCore.Notifications.Portugu\303\252s_(pt-BR).xml" +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/Addons/generic.EmberCore.Notifications/My Project/AssemblyInfo.vb b/Addons/generic.EmberCore.Notifications/My Project/AssemblyInfo.vb index 8f802dc..b8455ed 100644 --- a/Addons/generic.EmberCore.Notifications/My Project/AssemblyInfo.vb +++ b/Addons/generic.EmberCore.Notifications/My Project/AssemblyInfo.vb @@ -9,7 +9,7 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - + diff --git a/Addons/generic.EmberCore.Notifications/generic.EmberCore.Notifications.vbproj b/Addons/generic.EmberCore.Notifications/generic.EmberCore.Notifications.vbproj index 4923385..142e196 100644 --- a/Addons/generic.EmberCore.Notifications/generic.EmberCore.Notifications.vbproj +++ b/Addons/generic.EmberCore.Notifications/generic.EmberCore.Notifications.vbproj @@ -175,6 +175,9 @@ + + PreserveNewest + PreserveNewest @@ -187,7 +190,10 @@ PreserveNewest - + + PreserveNewest + + PreserveNewest diff --git a/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.Debug_(db_DB).xml b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.Debug_(db_DB).xml new file mode 100644 index 0000000..4019405 --- /dev/null +++ b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + offline1 + offline2 + offline3 + offline4 + offline5 + offline6 + offline7 + offline8 + offline9 + offline10 + offline11 + offline12 + offline13 + offline14 + offline15 + offline16 + offline17 + offline18 + offline19 + offline20 + offline21 + offline22 + offline23 + offline24 + offline25 + offline26 + offline27 + offline28 + offline29 + offline30 + offline31 + offline32 + offline33 + offline34 + offline35 + offline36 + offline37 + offline38 + offline39 + offline40 + offline41 + offline42 + offline43 + offline44 + offline45 + offline46 + offline47 + offline48 + offline49 + offline50 + offline51 + offline52 + offline53 + offline54 + offline55 + offline56 + offline57 + offline58 + offline59 + offline60 + offline61 + offline62 + offline63 + offline64 + offline65 + offline66 + offline67 + offline68 + offline69 + offline70 + offline71 + offline72 + offline73 + offline74 + offline75 + offline76 + offline77 + offline78 + offline79 + offline80 + offline81 + offline82 + offline83 + offline84 + offline85 + offline86 + offline87 + offline88 + offline89 + offline90 + offline91 + offline92 + offline93 + offline94 + offline95 + offline96 + offline97 + offline98 + offline99 + offline100 + offline101 + offline102 + offline103 + offline104 + offline105 + offline106 + offline107 + offline108 + offline109 + offline110 + offline111 + offline112 + offline113 + offline114 + offline115 + offline116 + offline117 + offline118 + offline119 + offline120 + offline121 + offline122 + offline123 + offline124 + offline125 + offline126 + offline127 + offline128 + offline129 + offline130 + offline131 + offline132 + offline133 + offline134 + offline135 + offline136 + offline137 + offline138 + offline139 + offline140 + offline141 + offline142 + offline143 + offline144 + offline145 + offline146 + offline147 + offline148 + offline149 + offline150 + offline151 + offline152 + offline153 + offline154 + offline155 + offline156 + offline157 + offline158 + offline159 + offline160 + offline161 + offline162 + offline163 + offline164 + offline165 + offline166 + offline167 + offline168 + offline169 + offline170 + offline171 + offline172 + offline173 + offline174 + offline175 + offline176 + offline177 + offline178 + offline179 + offline180 + offline181 + offline182 + offline183 + offline184 + offline185 + offline186 + offline187 + offline188 + offline189 + offline190 + offline191 + offline192 + offline193 + offline194 + offline195 + offline196 + offline197 + offline198 + offline199 + offline200 + offline201 + offline202 + offline203 + offline204 + offline205 + offline206 + offline207 + offline208 + offline209 + offline210 + offline211 + offline212 + offline213 + offline214 + offline215 + offline216 + offline217 + offline218 + offline219 + offline220 + offline221 + offline222 + offline223 + offline224 + offline225 + offline226 + offline227 + offline228 + offline229 + offline230 + offline231 + offline232 + offline233 + offline234 + offline235 + offline236 + offline237 + offline238 + offline239 + offline240 + offline241 + offline242 + offline243 + offline244 + offline245 + offline246 + offline247 + offline248 + offline249 + offline250 + offline251 + offline252 + offline253 + offline254 + offline255 + offline256 + offline257 + offline258 + offline259 + offline260 + offline261 + offline262 + offline263 + offline264 + offline265 + offline266 + offline267 + offline268 + offline269 + offline270 + offline271 + offline272 + offline273 + offline274 + offline275 + offline276 + offline277 + offline278 + offline279 + offline280 + offline281 + offline282 + offline283 + offline284 + offline285 + offline286 + offline287 + offline288 + offline289 + offline290 + offline291 + offline292 + offline293 + offline294 + offline295 + offline296 + offline297 + offline298 + offline299 + offline300 + offline301 + offline302 + offline303 + offline304 + offline305 + offline306 + offline307 + offline308 + offline309 + offline310 + offline311 + offline312 + offline313 + offline314 + offline315 + offline316 + offline317 + offline318 + offline319 + offline320 + offline321 + offline322 + offline323 + offline324 + offline325 + offline326 + offline327 + offline328 + offline329 + offline330 + offline331 + offline332 + offline333 + offline334 + offline335 + offline336 + offline337 + offline338 + offline339 + offline340 + offline341 + offline342 + offline343 + offline344 + offline345 + offline346 + offline347 + offline348 + offline349 + offline350 + offline351 + offline352 + offline353 + offline354 + offline355 + offline356 + offline357 + offline358 + offline359 + offline360 + offline361 + offline362 + offline363 + offline364 + offline365 + offline366 + offline367 + offline368 + offline369 + offline370 + offline371 + offline372 + offline373 + offline374 + offline375 + offline376 + offline377 + offline378 + offline379 + offline380 + offline381 + offline382 + offline383 + offline384 + offline385 + offline386 + offline387 + offline388 + offline389 + offline390 + offline391 + offline392 + offline393 + offline394 + offline395 + offline396 + offline397 + offline398 + offline399 + offline400 + offline401 + offline402 + offline403 + offline404 + offline405 + offline406 + offline407 + offline408 + offline409 + offline410 + offline411 + offline412 + offline413 + offline414 + offline415 + offline416 + offline417 + offline418 + offline419 + offline420 + offline421 + offline422 + offline423 + offline424 + offline425 + offline426 + offline427 + offline428 + offline429 + offline430 + offline431 + offline432 + offline433 + offline434 + offline435 + offline436 + offline437 + offline438 + offline439 + offline440 + offline441 + offline442 + offline443 + offline444 + offline445 + offline446 + offline447 + offline448 + offline449 + offline450 + offline451 + offline452 + offline453 + offline454 + offline455 + offline456 + offline457 + offline458 + offline459 + offline460 + offline461 + offline462 + offline463 + offline464 + offline465 + offline466 + offline467 + offline468 + offline469 + offline470 + offline471 + offline472 + offline473 + offline474 + offline475 + offline476 + offline477 + offline478 + offline479 + offline480 + offline481 + offline482 + offline483 + offline484 + offline485 + offline486 + offline487 + offline488 + offline489 + offline490 + offline491 + offline492 + offline493 + offline494 + offline495 + offline496 + offline497 + offline498 + offline499 + offline500 + offline501 + offline502 + offline503 + offline504 + offline505 + offline506 + offline507 + offline508 + offline509 + offline510 + offline511 + offline512 + offline513 + offline514 + offline515 + offline516 + offline517 + offline518 + offline519 + offline520 + offline521 + offline522 + offline523 + offline524 + offline525 + offline526 + offline527 + offline528 + offline529 + offline530 + offline531 + offline532 + offline533 + offline534 + offline535 + offline536 + offline537 + offline538 + offline539 + offline540 + offline541 + offline542 + offline543 + offline544 + offline545 + offline546 + offline547 + offline548 + offline549 + offline550 + offline551 + offline552 + offline553 + offline554 + offline555 + offline556 + offline557 + offline558 + offline559 + offline560 + offline561 + offline562 + offline563 + offline564 + offline565 + offline566 + offline567 + offline568 + offline569 + offline570 + offline571 + offline572 + offline573 + offline574 + offline575 + offline576 + offline577 + offline578 + offline579 + offline580 + offline581 + offline582 + offline583 + offline584 + offline585 + offline586 + offline587 + offline588 + offline589 + offline590 + offline591 + offline592 + offline593 + offline594 + offline595 + offline596 + offline597 + offline598 + offline599 + offline600 + offline601 + offline602 + offline603 + offline604 + offline605 + offline606 + offline607 + offline608 + offline609 + offline610 + offline611 + offline612 + offline613 + offline614 + offline615 + offline616 + offline617 + offline618 + offline619 + offline620 + offline621 + offline622 + offline623 + offline624 + offline625 + offline626 + offline627 + offline628 + offline629 + offline630 + offline631 + offline632 + offline633 + offline634 + offline635 + offline636 + offline637 + offline638 + offline639 + offline640 + offline641 + offline642 + offline643 + offline644 + offline645 + offline646 + offline647 + offline648 + offline649 + offline650 + offline651 + offline652 + offline653 + offline654 + offline655 + offline656 + offline657 + offline658 + offline659 + offline660 + offline661 + offline662 + offline663 + offline664 + offline665 + offline666 + offline667 + offline668 + offline669 + offline670 + offline671 + offline672 + offline673 + offline674 + offline675 + offline676 + offline677 + offline678 + offline679 + offline680 + offline681 + offline682 + offline683 + offline684 + offline685 + offline686 + offline687 + offline688 + offline689 + offline690 + offline691 + offline692 + offline693 + offline694 + offline695 + offline696 + offline697 + offline698 + offline699 + offline700 + offline701 + offline702 + offline703 + offline704 + offline705 + offline706 + offline707 + offline708 + offline709 + offline710 + offline711 + offline712 + offline713 + offline714 + offline715 + offline716 + offline717 + offline718 + offline719 + offline720 + offline721 + offline722 + offline723 + offline724 + offline725 + offline726 + offline727 + offline728 + offline729 + offline730 + offline731 + offline732 + offline733 + offline734 + offline735 + offline736 + offline737 + offline738 + offline739 + offline740 + offline741 + offline742 + offline743 + offline744 + offline745 + offline746 + offline747 + offline748 + offline749 + offline750 + offline751 + offline752 + offline753 + offline754 + offline755 + offline756 + offline757 + offline758 + offline759 + offline760 + offline761 + offline762 + offline763 + offline764 + offline765 + offline766 + offline767 + offline768 + offline769 + offline770 + offline771 + offline772 + offline773 + offline774 + offline775 + offline776 + offline777 + offline778 + offline779 + offline780 + offline781 + offline782 + offline783 + offline784 + offline785 + offline786 + offline787 + offline788 + offline789 + offline790 + offline791 + offline792 + offline793 + offline794 + offline795 + offline796 + offline797 + offline798 + offline799 + offline800 + offline801 + offline802 + offline803 + offline804 + offline805 + offline806 + offline807 + offline808 + offline809 + offline810 + offline811 + offline812 + offline813 + offline814 + offline815 + offline816 + offline817 + offline818 + offline819 + offline820 + offline821 + offline822 + offline823 + offline824 + offline825 + offline826 + offline827 + offline828 + offline829 + offline830 + offline831 + offline832 + offline833 + offline834 + offline835 + offline836 + offline837 + offline838 + offline839 + offline840 + offline841 + offline842 + offline843 + offline844 + offline845 + offline846 + offline847 + offline848 + offline849 + offline850 + offline851 + offline852 + offline853 + offline854 + offline855 + offline856 + offline857 + offline858 + offline859 + offline860 + offline861 + offline862 + offline863 + offline864 + offline865 + offline866 + offline867 + offline868 + offline869 + offline870 + offline871 + offline872 + offline873 + offline874 + offline875 + offline876 + offline877 + offline878 + offline879 + offline880 + offline881 + offline882 + offline883 + offline884 + offline885 + offline886 + offline887 + offline888 + offline889 + offline890 + offline891 + offline892 + offline893 + offline894 + offline895 + offline896 + offline897 + offline898 + offline899 + offline900 + \ No newline at end of file diff --git a/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.English_(en_US)-Help.xml b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.English_(en_US)-Help.xml index 7b6267c..2b42b01 100644 --- a/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.English_(en_US)-Help.xml +++ b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.English_(en_US)-Help.xml @@ -1,4 +1,3 @@ - - Enable or disable this module. - \ No newline at end of file + Enable or disable this module. + diff --git a/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.English_(en_US).xml b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.English_(en_US).xml index ca2085e..53660ee 100644 --- a/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.English_(en_US).xml +++ b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.English_(en_US).xml @@ -1,35 +1,33 @@ - - Offline Media Manager - Insert DVD - Preparing Data - Creating Movie - Building Movie - Moving Files - Renaming Files - Offline movie place holder created! - Source directory does not exist or could not be found: - Source Folder - Movie (Folder Name) - Place Holder Image - Offline Media Manager - Add Offline movie - Add to Source: - Place Holder Folder/Movie Name: - Search IMDB - Bulk Creator - Condition - Create - Use Fanart for Place Holder Video - Place Holder Video Tagline: - Text Color: - Tagline Top: - Place Holder Video Format: - Use Tagline Background - Tagline background Color: - Use Ember Overlay - Select Font... - Information - Offline Media Manager - - \ No newline at end of file + Offline Media Manager + Insert DVD + Preparing Data + Creating Movie + Building Movie + Moving Files + Renaming Files + Offline movie place holder created! + Source directory does not exist or could not be found: + Source Folder + Movie (Folder Name) + Place Holder Image + Offline Media Manager + Add Offline movie + Add to Source: + Place Holder Folder/Movie Name: + Search IMDB + Bulk Creator + Condition + Create + Use Fanart for Place Holder Video + Place Holder Video Tagline: + Text Color: + Tagline Top: + Place Holder Video Format: + Use Tagline Background + Tagline background Color: + Use Ember Overlay + Select Font... + Information + Offline Media Manager + diff --git a/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.German_(de_DE)-Help.xml b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.German_(de_DE)-Help.xml index 49ec1eb..3737367 100644 --- a/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.German_(de_DE)-Help.xml +++ b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.German_(de_DE)-Help.xml @@ -1,5 +1,3 @@ - - Aktiviert dieses Modul. + Aktiviert dieses Modul. - diff --git a/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.German_(de_DE).xml b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.German_(de_DE).xml index 2f8bb27..4dbdba6 100644 --- a/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.German_(de_DE).xml +++ b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.German_(de_DE).xml @@ -1,34 +1,33 @@ - - Lege eine DVD ein - Bereite Daten vor - Erzeuge Film - Erzeuge Film - Verschiebe Dateien - Benenne Dateien um - Offline Film Platzhalter erzeugt! - Quellverzeichnis existiert nicht oder kann nicht gelesen werden: - Quellverzeichnis - Film (Verzeichn. Name) - Platzhalter Bild - Offline Medien Manager - Offline Video hinzufügemn - Zu Quelle hinzufügen: - Platzhalter Verzeichn./Film Name: - Suche auf IMDB - Bulk Creator - Kondition - Anlegen - Fanart als Platzhaltervideo benutzen - Platzhalter Video Tagline: - Text Farbe: - Tagline Top: - Platzhalter Video Format: - Tagline Hintergrund benutzen - Tagline Hintergrund Farbe: - Ember Overlay benutzen - Wähle Schriftart... - Information - Offline Media Manager + Offline Medien Manager + Lege eine DVD ein + Bereite Daten vor + Erzeuge Film + Erzeuge Film + Verschiebe Dateien + Benenne Dateien um + Offline Film Platzhalter erzeugt! + Quellverzeichnis existiert nicht oder kann nicht gelesen werden: + Quellverzeichnis + Film (Verzeichn. Name) + Platzhalter Bild + Offline Medien Manager + Offline Video hinzufügen + Zu Quelle hinzufügen: + Platzhalter Verzeichn./Film Name: + Suche auf IMDB + Bulk Creator + Kondition + Anlegen + Fanart als Platzhaltervideo benutzen + Platzhalter Video Tagline: + Text Farbe: + Tagline Top: + Platzhalter Video Format: + Tagline Hintergrund benutzen + Tagline Hintergrund Farbe: + Ember Overlay benutzen + Wähle Schriftart... + Information + Offline Medien Manager - diff --git "a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.Portugu\303\252s_(pt-BR).xml" b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.Norwegian_(no_NO)-Help.xml similarity index 53% rename from "Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.Portugu\303\252s_(pt-BR).xml" rename to Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.Norwegian_(no_NO)-Help.xml index a91dc2d..0cee9ec 100644 --- "a/Addons/generic.EmberCore.BulkRename/Langs/generic.EmberCore.BulkRename.Portugu\303\252s_(pt-BR).xml" +++ b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.Norwegian_(no_NO)-Help.xml @@ -1,3 +1,3 @@ - - \ No newline at end of file + Slå på eller slå av denne modulen. + diff --git a/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.Norwegian_(no_NO).xml b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.Norwegian_(no_NO).xml new file mode 100644 index 0000000..29675e9 --- /dev/null +++ b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.Norwegian_(no_NO).xml @@ -0,0 +1,33 @@ + + Offline mediamanager + Sett inn DVD + Forberedrer data + Lager film + Bygger film + Flytter filer + Endrer filnavn + Offline film-holder lagd! + Kildemappen eksisterer ikke, eller kunne ikke bli funnet + Kildemappe + Film (mappenavn) + Midlertidig bilde + Offline mediamanager + Legg til offline film + Legg til kilde: + Midlertidig mappe/filmnavn: + Søk IMDB + Masse-skaper + Kritérie + Lag + Bruk fankunst som Midlertidig video + Midlertidig undertittel + Tekstfarge: + Undertittel over: + Midlertidig videoformat + Bruk undertittel som bakgrunn + Bakgrunnsundertittel-farge: + Bruk EMM-overlay + Velg font... + Informasjon + Offline mediamanager + diff --git "a/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.Portugu\303\252s_(pt-BR).xml" "b/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.Portugu\303\252s_(pt-BR).xml" deleted file mode 100644 index a91dc2d..0000000 --- "a/Addons/generic.EmberCore.OfflineHolder/Langs/generic.EmberCore.OfflineHolder.Portugu\303\252s_(pt-BR).xml" +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/Addons/generic.EmberCore.OfflineHolder/My Project/AssemblyInfo.vb b/Addons/generic.EmberCore.OfflineHolder/My Project/AssemblyInfo.vb index c236a5e..b7360ee 100644 --- a/Addons/generic.EmberCore.OfflineHolder/My Project/AssemblyInfo.vb +++ b/Addons/generic.EmberCore.OfflineHolder/My Project/AssemblyInfo.vb @@ -9,7 +9,7 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - + diff --git a/Addons/generic.EmberCore.OfflineHolder/generic.EmberCore.OfflineHolder.vbproj b/Addons/generic.EmberCore.OfflineHolder/generic.EmberCore.OfflineHolder.vbproj index db8732b..f8eb3cd 100644 --- a/Addons/generic.EmberCore.OfflineHolder/generic.EmberCore.OfflineHolder.vbproj +++ b/Addons/generic.EmberCore.OfflineHolder/generic.EmberCore.OfflineHolder.vbproj @@ -195,6 +195,9 @@ + + PreserveNewest + PreserveNewest @@ -207,7 +210,10 @@ PreserveNewest - + + PreserveNewest + + PreserveNewest diff --git "a/Addons/generic.EmberCore.WebServer/Langs/generic.EmberCore.WebServer.Portugu\303\252s_(pt-BR).xml" "b/Addons/generic.EmberCore.WebServer/Langs/generic.EmberCore.WebServer.Portugu\303\252s_(pt-BR).xml" deleted file mode 100644 index a91dc2d..0000000 --- "a/Addons/generic.EmberCore.WebServer/Langs/generic.EmberCore.WebServer.Portugu\303\252s_(pt-BR).xml" +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/Addons/generic.EmberCore.WebServer/My Project/AssemblyInfo.vb b/Addons/generic.EmberCore.WebServer/My Project/AssemblyInfo.vb index a8ca617..45d38bd 100644 --- a/Addons/generic.EmberCore.WebServer/My Project/AssemblyInfo.vb +++ b/Addons/generic.EmberCore.WebServer/My Project/AssemblyInfo.vb @@ -9,7 +9,7 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - + diff --git a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.Debug_(db_DB).xml b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.Debug_(db_DB).xml new file mode 100644 index 0000000..8caf3b9 --- /dev/null +++ b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + xbmc1 + xbmc2 + xbmc3 + xbmc4 + xbmc5 + xbmc6 + xbmc7 + xbmc8 + xbmc9 + xbmc10 + xbmc11 + xbmc12 + xbmc13 + xbmc14 + xbmc15 + xbmc16 + xbmc17 + xbmc18 + xbmc19 + xbmc20 + xbmc21 + xbmc22 + xbmc23 + xbmc24 + xbmc25 + xbmc26 + xbmc27 + xbmc28 + xbmc29 + xbmc30 + xbmc31 + xbmc32 + xbmc33 + xbmc34 + xbmc35 + xbmc36 + xbmc37 + xbmc38 + xbmc39 + xbmc40 + xbmc41 + xbmc42 + xbmc43 + xbmc44 + xbmc45 + xbmc46 + xbmc47 + xbmc48 + xbmc49 + xbmc50 + xbmc51 + xbmc52 + xbmc53 + xbmc54 + xbmc55 + xbmc56 + xbmc57 + xbmc58 + xbmc59 + xbmc60 + xbmc61 + xbmc62 + xbmc63 + xbmc64 + xbmc65 + xbmc66 + xbmc67 + xbmc68 + xbmc69 + xbmc70 + xbmc71 + xbmc72 + xbmc73 + xbmc74 + xbmc75 + xbmc76 + xbmc77 + xbmc78 + xbmc79 + xbmc80 + xbmc81 + xbmc82 + xbmc83 + xbmc84 + xbmc85 + xbmc86 + xbmc87 + xbmc88 + xbmc89 + xbmc90 + xbmc91 + xbmc92 + xbmc93 + xbmc94 + xbmc95 + xbmc96 + xbmc97 + xbmc98 + xbmc99 + xbmc100 + xbmc101 + xbmc102 + xbmc103 + xbmc104 + xbmc105 + xbmc106 + xbmc107 + xbmc108 + xbmc109 + xbmc110 + xbmc111 + xbmc112 + xbmc113 + xbmc114 + xbmc115 + xbmc116 + xbmc117 + xbmc118 + xbmc119 + xbmc120 + xbmc121 + xbmc122 + xbmc123 + xbmc124 + xbmc125 + xbmc126 + xbmc127 + xbmc128 + xbmc129 + xbmc130 + xbmc131 + xbmc132 + xbmc133 + xbmc134 + xbmc135 + xbmc136 + xbmc137 + xbmc138 + xbmc139 + xbmc140 + xbmc141 + xbmc142 + xbmc143 + xbmc144 + xbmc145 + xbmc146 + xbmc147 + xbmc148 + xbmc149 + xbmc150 + xbmc151 + xbmc152 + xbmc153 + xbmc154 + xbmc155 + xbmc156 + xbmc157 + xbmc158 + xbmc159 + xbmc160 + xbmc161 + xbmc162 + xbmc163 + xbmc164 + xbmc165 + xbmc166 + xbmc167 + xbmc168 + xbmc169 + xbmc170 + xbmc171 + xbmc172 + xbmc173 + xbmc174 + xbmc175 + xbmc176 + xbmc177 + xbmc178 + xbmc179 + xbmc180 + xbmc181 + xbmc182 + xbmc183 + xbmc184 + xbmc185 + xbmc186 + xbmc187 + xbmc188 + xbmc189 + xbmc190 + xbmc191 + xbmc192 + xbmc193 + xbmc194 + xbmc195 + xbmc196 + xbmc197 + xbmc198 + xbmc199 + xbmc200 + xbmc201 + xbmc202 + xbmc203 + xbmc204 + xbmc205 + xbmc206 + xbmc207 + xbmc208 + xbmc209 + xbmc210 + xbmc211 + xbmc212 + xbmc213 + xbmc214 + xbmc215 + xbmc216 + xbmc217 + xbmc218 + xbmc219 + xbmc220 + xbmc221 + xbmc222 + xbmc223 + xbmc224 + xbmc225 + xbmc226 + xbmc227 + xbmc228 + xbmc229 + xbmc230 + xbmc231 + xbmc232 + xbmc233 + xbmc234 + xbmc235 + xbmc236 + xbmc237 + xbmc238 + xbmc239 + xbmc240 + xbmc241 + xbmc242 + xbmc243 + xbmc244 + xbmc245 + xbmc246 + xbmc247 + xbmc248 + xbmc249 + xbmc250 + xbmc251 + xbmc252 + xbmc253 + xbmc254 + xbmc255 + xbmc256 + xbmc257 + xbmc258 + xbmc259 + xbmc260 + xbmc261 + xbmc262 + xbmc263 + xbmc264 + xbmc265 + xbmc266 + xbmc267 + xbmc268 + xbmc269 + xbmc270 + xbmc271 + xbmc272 + xbmc273 + xbmc274 + xbmc275 + xbmc276 + xbmc277 + xbmc278 + xbmc279 + xbmc280 + xbmc281 + xbmc282 + xbmc283 + xbmc284 + xbmc285 + xbmc286 + xbmc287 + xbmc288 + xbmc289 + xbmc290 + xbmc291 + xbmc292 + xbmc293 + xbmc294 + xbmc295 + xbmc296 + xbmc297 + xbmc298 + xbmc299 + xbmc300 + xbmc301 + xbmc302 + xbmc303 + xbmc304 + xbmc305 + xbmc306 + xbmc307 + xbmc308 + xbmc309 + xbmc310 + xbmc311 + xbmc312 + xbmc313 + xbmc314 + xbmc315 + xbmc316 + xbmc317 + xbmc318 + xbmc319 + xbmc320 + xbmc321 + xbmc322 + xbmc323 + xbmc324 + xbmc325 + xbmc326 + xbmc327 + xbmc328 + xbmc329 + xbmc330 + xbmc331 + xbmc332 + xbmc333 + xbmc334 + xbmc335 + xbmc336 + xbmc337 + xbmc338 + xbmc339 + xbmc340 + xbmc341 + xbmc342 + xbmc343 + xbmc344 + xbmc345 + xbmc346 + xbmc347 + xbmc348 + xbmc349 + xbmc350 + xbmc351 + xbmc352 + xbmc353 + xbmc354 + xbmc355 + xbmc356 + xbmc357 + xbmc358 + xbmc359 + xbmc360 + xbmc361 + xbmc362 + xbmc363 + xbmc364 + xbmc365 + xbmc366 + xbmc367 + xbmc368 + xbmc369 + xbmc370 + xbmc371 + xbmc372 + xbmc373 + xbmc374 + xbmc375 + xbmc376 + xbmc377 + xbmc378 + xbmc379 + xbmc380 + xbmc381 + xbmc382 + xbmc383 + xbmc384 + xbmc385 + xbmc386 + xbmc387 + xbmc388 + xbmc389 + xbmc390 + xbmc391 + xbmc392 + xbmc393 + xbmc394 + xbmc395 + xbmc396 + xbmc397 + xbmc398 + xbmc399 + xbmc400 + xbmc401 + xbmc402 + xbmc403 + xbmc404 + xbmc405 + xbmc406 + xbmc407 + xbmc408 + xbmc409 + xbmc410 + xbmc411 + xbmc412 + xbmc413 + xbmc414 + xbmc415 + xbmc416 + xbmc417 + xbmc418 + xbmc419 + xbmc420 + xbmc421 + xbmc422 + xbmc423 + xbmc424 + xbmc425 + xbmc426 + xbmc427 + xbmc428 + xbmc429 + xbmc430 + xbmc431 + xbmc432 + xbmc433 + xbmc434 + xbmc435 + xbmc436 + xbmc437 + xbmc438 + xbmc439 + xbmc440 + xbmc441 + xbmc442 + xbmc443 + xbmc444 + xbmc445 + xbmc446 + xbmc447 + xbmc448 + xbmc449 + xbmc450 + xbmc451 + xbmc452 + xbmc453 + xbmc454 + xbmc455 + xbmc456 + xbmc457 + xbmc458 + xbmc459 + xbmc460 + xbmc461 + xbmc462 + xbmc463 + xbmc464 + xbmc465 + xbmc466 + xbmc467 + xbmc468 + xbmc469 + xbmc470 + xbmc471 + xbmc472 + xbmc473 + xbmc474 + xbmc475 + xbmc476 + xbmc477 + xbmc478 + xbmc479 + xbmc480 + xbmc481 + xbmc482 + xbmc483 + xbmc484 + xbmc485 + xbmc486 + xbmc487 + xbmc488 + xbmc489 + xbmc490 + xbmc491 + xbmc492 + xbmc493 + xbmc494 + xbmc495 + xbmc496 + xbmc497 + xbmc498 + xbmc499 + xbmc500 + xbmc501 + xbmc502 + xbmc503 + xbmc504 + xbmc505 + xbmc506 + xbmc507 + xbmc508 + xbmc509 + xbmc510 + xbmc511 + xbmc512 + xbmc513 + xbmc514 + xbmc515 + xbmc516 + xbmc517 + xbmc518 + xbmc519 + xbmc520 + xbmc521 + xbmc522 + xbmc523 + xbmc524 + xbmc525 + xbmc526 + xbmc527 + xbmc528 + xbmc529 + xbmc530 + xbmc531 + xbmc532 + xbmc533 + xbmc534 + xbmc535 + xbmc536 + xbmc537 + xbmc538 + xbmc539 + xbmc540 + xbmc541 + xbmc542 + xbmc543 + xbmc544 + xbmc545 + xbmc546 + xbmc547 + xbmc548 + xbmc549 + xbmc550 + xbmc551 + xbmc552 + xbmc553 + xbmc554 + xbmc555 + xbmc556 + xbmc557 + xbmc558 + xbmc559 + xbmc560 + xbmc561 + xbmc562 + xbmc563 + xbmc564 + xbmc565 + xbmc566 + xbmc567 + xbmc568 + xbmc569 + xbmc570 + xbmc571 + xbmc572 + xbmc573 + xbmc574 + xbmc575 + xbmc576 + xbmc577 + xbmc578 + xbmc579 + xbmc580 + xbmc581 + xbmc582 + xbmc583 + xbmc584 + xbmc585 + xbmc586 + xbmc587 + xbmc588 + xbmc589 + xbmc590 + xbmc591 + xbmc592 + xbmc593 + xbmc594 + xbmc595 + xbmc596 + xbmc597 + xbmc598 + xbmc599 + xbmc600 + xbmc601 + xbmc602 + xbmc603 + xbmc604 + xbmc605 + xbmc606 + xbmc607 + xbmc608 + xbmc609 + xbmc610 + xbmc611 + xbmc612 + xbmc613 + xbmc614 + xbmc615 + xbmc616 + xbmc617 + xbmc618 + xbmc619 + xbmc620 + xbmc621 + xbmc622 + xbmc623 + xbmc624 + xbmc625 + xbmc626 + xbmc627 + xbmc628 + xbmc629 + xbmc630 + xbmc631 + xbmc632 + xbmc633 + xbmc634 + xbmc635 + xbmc636 + xbmc637 + xbmc638 + xbmc639 + xbmc640 + xbmc641 + xbmc642 + xbmc643 + xbmc644 + xbmc645 + xbmc646 + xbmc647 + xbmc648 + xbmc649 + xbmc650 + xbmc651 + xbmc652 + xbmc653 + xbmc654 + xbmc655 + xbmc656 + xbmc657 + xbmc658 + xbmc659 + xbmc660 + xbmc661 + xbmc662 + xbmc663 + xbmc664 + xbmc665 + xbmc666 + xbmc667 + xbmc668 + xbmc669 + xbmc670 + xbmc671 + xbmc672 + xbmc673 + xbmc674 + xbmc675 + xbmc676 + xbmc677 + xbmc678 + xbmc679 + xbmc680 + xbmc681 + xbmc682 + xbmc683 + xbmc684 + xbmc685 + xbmc686 + xbmc687 + xbmc688 + xbmc689 + xbmc690 + xbmc691 + xbmc692 + xbmc693 + xbmc694 + xbmc695 + xbmc696 + xbmc697 + xbmc698 + xbmc699 + xbmc700 + xbmc701 + xbmc702 + xbmc703 + xbmc704 + xbmc705 + xbmc706 + xbmc707 + xbmc708 + xbmc709 + xbmc710 + xbmc711 + xbmc712 + xbmc713 + xbmc714 + xbmc715 + xbmc716 + xbmc717 + xbmc718 + xbmc719 + xbmc720 + xbmc721 + xbmc722 + xbmc723 + xbmc724 + xbmc725 + xbmc726 + xbmc727 + xbmc728 + xbmc729 + xbmc730 + xbmc731 + xbmc732 + xbmc733 + xbmc734 + xbmc735 + xbmc736 + xbmc737 + xbmc738 + xbmc739 + xbmc740 + xbmc741 + xbmc742 + xbmc743 + xbmc744 + xbmc745 + xbmc746 + xbmc747 + xbmc748 + xbmc749 + xbmc750 + xbmc751 + xbmc752 + xbmc753 + xbmc754 + xbmc755 + xbmc756 + xbmc757 + xbmc758 + xbmc759 + xbmc760 + xbmc761 + xbmc762 + xbmc763 + xbmc764 + xbmc765 + xbmc766 + xbmc767 + xbmc768 + xbmc769 + xbmc770 + xbmc771 + xbmc772 + xbmc773 + xbmc774 + xbmc775 + xbmc776 + xbmc777 + xbmc778 + xbmc779 + xbmc780 + xbmc781 + xbmc782 + xbmc783 + xbmc784 + xbmc785 + xbmc786 + xbmc787 + xbmc788 + xbmc789 + xbmc790 + xbmc791 + xbmc792 + xbmc793 + xbmc794 + xbmc795 + xbmc796 + xbmc797 + xbmc798 + xbmc799 + xbmc800 + xbmc801 + xbmc802 + xbmc803 + xbmc804 + xbmc805 + xbmc806 + xbmc807 + xbmc808 + xbmc809 + xbmc810 + xbmc811 + xbmc812 + xbmc813 + xbmc814 + xbmc815 + xbmc816 + xbmc817 + xbmc818 + xbmc819 + xbmc820 + xbmc821 + xbmc822 + xbmc823 + xbmc824 + xbmc825 + xbmc826 + xbmc827 + xbmc828 + xbmc829 + xbmc830 + xbmc831 + xbmc832 + xbmc833 + xbmc834 + xbmc835 + xbmc836 + xbmc837 + xbmc838 + xbmc839 + xbmc840 + xbmc841 + xbmc842 + xbmc843 + xbmc844 + xbmc845 + xbmc846 + xbmc847 + xbmc848 + xbmc849 + xbmc850 + xbmc851 + xbmc852 + xbmc853 + xbmc854 + xbmc855 + xbmc856 + xbmc857 + xbmc858 + xbmc859 + xbmc860 + xbmc861 + xbmc862 + xbmc863 + xbmc864 + xbmc865 + xbmc866 + xbmc867 + xbmc868 + xbmc869 + xbmc870 + xbmc871 + xbmc872 + xbmc873 + xbmc874 + xbmc875 + xbmc876 + xbmc877 + xbmc878 + xbmc879 + xbmc880 + xbmc881 + xbmc882 + xbmc883 + xbmc884 + xbmc885 + xbmc886 + xbmc887 + xbmc888 + xbmc889 + xbmc890 + xbmc891 + xbmc892 + xbmc893 + xbmc894 + xbmc895 + xbmc896 + xbmc897 + xbmc898 + xbmc899 + xbmc900 + \ No newline at end of file diff --git a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.English_(en_US)-Help.xml b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.English_(en_US)-Help.xml index f0c033e..ff01d33 100644 --- a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.English_(en_US)-Help.xml +++ b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.English_(en_US)-Help.xml @@ -1,13 +1,12 @@ - - Enable or disable this module. - The list of all entered XBMC installations with which Ember will communicate. - Remove the selected XBMC installation from the list. - Enter a unique name to identify this XBMC installation. - Enter the IP of the computer running XBMC. - Enter the port number of the computer running XBMC. - Enter the username that will be used to access this XBMC installation. - Enter the password that will be used to access this XBMC installation. - Change the selected XBMC installation to use the newly entered information. - Add the entered information as a new XBMC installation. - \ No newline at end of file + Enable or disable this module. + The list of all entered XBMC installations with which Ember will communicate. + Remove the selected XBMC installation from the list. + Enter a unique name to identify this XBMC installation. + Enter the IP of the computer running XBMC. + Enter the port number of the computer running XBMC. + Enter the username that will be used to access this XBMC installation. + Enter the password that will be used to access this XBMC installation. + Change the selected XBMC installation to use the newly entered information. + Add the entered information as a new XBMC installation. + diff --git a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.English_(en_US).xml b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.English_(en_US).xml index f74ece1..4cd5563 100644 --- a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.English_(en_US).xml +++ b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.English_(en_US).xml @@ -1,35 +1,34 @@ - - XBMC Controller - The name you are attempting to use for this XBMC installation is already in use. Please choose another. - Each name must be unique - You must enter a port for this XBMC installation. - Please Enter a Port - You must enter an IP for this XBMC installation. - Please Enter an IP - You must enter a name for this XBMC installation. - Please Enter a Unique Name - XBMC Communication - Edit - Name: - Add - XBMC IP: - XBMC Port: - Remove Selected - Unable to Start XBMC Update - There was a problem communicating with {0}{1}. - XBMC - XBMC Controller - Enable Real Time synchronization - Real Time synchronization - Searching ... - Populate Sources - Ember Source - XBMC Source - XBMC Source type - Windows Drive Letter (X:\) - Windows UNC/Linux/MacOS X - XBMC Host - Send Notifications - Retrieve PlayCount from: - \ No newline at end of file + XBMC Controller + The name you are attempting to use for this XBMC installation is already in use. Please choose another. + Each name must be unique + You must enter a port for this XBMC installation. + Please Enter a Port + You must enter an IP for this XBMC installation. + Please Enter an IP + You must enter a name for this XBMC installation. + Please Enter a Unique Name + XBMC Communication + Edit + Name: + Add + XBMC IP: + XBMC Port: + Remove Selected + Unable to Start XBMC Update + There was a problem communicating with {0}{1}. + XBMC + XBMC Controller + Enable Real Time synchronization + Real Time synchronization + Searching ... + Populate Sources + Ember Source + XBMC Source + XBMC Source type + Windows Drive Letter (X:\) + Windows UNC/Linux/MacOS X + XBMC Host + Send Notifications + Retrieve PlayCount from: + diff --git a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.German_(de_DE)-Help.xml b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.German_(de_DE)-Help.xml index 0cabc3d..3e65115 100644 --- a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.German_(de_DE)-Help.xml +++ b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.German_(de_DE)-Help.xml @@ -1,14 +1,12 @@ - - Aktiviert dieses Modul - Liste aller XBMC Installationen mit denen Ember kommuniziern wird - Entfernt die gewählte Installation von der Liste - Gib einen eindeutigen Namen für diese Installation ein. - Gib die IP ein, unter der XBMC erreichbar ist. - Gib das Port ein, unter der XBMC erreichbar ist ein. - Gib einen Benutzernamen für die Verbindung mit XBMC ein. - Gib ein Passwort für die Verbindung mit XBMC ein. - Speichert die aktuelle XBMC Installation - Speichert die aktuellen Informationen für eine neue XBMC installation. + Aktiviert dieses Modul. + Liste aller XBMC Installationen mit denen Ember kommunizieren wird. + Entfernt die gewählte Installation von der Liste. + Gib einen eindeutigen Namen für diese Installation ein. + Gib die IP ein, unter der XBMC erreichbar ist. + Gib das Port ein, unter der XBMC erreichbar ist ein. + Gib einen Benutzernamen für die Verbindung mit XBMC ein. + Gib ein Passwort für die Verbindung mit XBMC ein. + Speichert die aktuelle XBMC Installation. + Speichert die aktuellen Informationen für als neue XBMC installation. - diff --git a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.German_(de_DE).xml b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.German_(de_DE).xml index b5043c9..127702f 100644 --- a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.German_(de_DE).xml +++ b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.German_(de_DE).xml @@ -1,35 +1,34 @@ - - XBMC Controller - Dieser XBMC Name ist bereits vergeben. - Jeder Name muss eindeutig sein. - Du musst einen Port eingeben. - Gib einen Port ein. - Du musst eine IP eingeben. - Gib eine IP ein. - Du musst einen XBMC Namen eingeben. - Gib einen Namen ein. - XBMC Kommunikation - Übernehmen. - Name: - Neu - XBMC IP: - XBMC Port: - Entfernen - XBMC Update konnte nicht gestartet werden. - Bei der Kommunikation mit {0}{1} gab es ein Problem - XBMC - XBMC Controller - Echtzeit Synchronisierung einschalten - Echtzeit Synchronisierung - Suche ... - Setze Quellen - Ember Quelle - XBMC Quelle - XBMC Host OS - Windows - Linux/MacOS X - XBMC Host - Benachrichtigungen + XBMC Controller + Dieser XBMC Name ist bereits vergeben. Bitte wähle einen anderen. + Jeder Name muss einmalig sein. + Du musst einen Port eingeben. + Gib einen Port ein. + Du musst eine IP eingeben. + Gib eine IP ein. + Du musst einen XBMC Namen eingeben. + Gib einen einmaligen Namen ein. + XBMC Kommunikation + Bearbeiten + Name: + Neu + XBMC IP: + XBMC Port: + Markierte entfernen + XBMC Update konnte nicht gestartet werden. + Bei der Kommunikation mit {0}{1} gab es ein Problem + XBMC + XBMC Controller + Echtzeit Synchronisierung einschalten + Echtzeit Synchronisierung + Suche ... + Setze Quellen + Ember Quelle + XBMC Quelle + XBMC Host OS + Windows + Linux/MacOS X + XBMC Host + Benachrichtigungen + Hole PlayCount von: - diff --git a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.Norwegian_(no_NO)-Help.xml b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..571d302 --- /dev/null +++ b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,12 @@ + + Slå på eller slå av denne modulen. + Liste over alle XBMC-installasjoner som EMM vil kommunisere med. + Fjerne valgte XBMC-installasjon fra listen. + Før inn et unikt navn for å identifisere denne XBMC-installasjonen. + Før inn IP-adressen til PCen som kjører XBMC. + Før inn port-nummeret til PCen som kjører XBMC. + Før inn brukernavnet som vil bli brukt til å logge inn i XBMC-installasjonen. + Før inn passordet til XBMC-installasjonen. + Forandre den valgte XBMC-installasjonen til å bruke den nylig innførte informasjonen. + Legg til den innførte informasjonen som en ny XBMC-installasjon. + diff --git a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.Norwegian_(no_NO).xml b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.Norwegian_(no_NO).xml new file mode 100644 index 0000000..deb10f6 --- /dev/null +++ b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.Norwegian_(no_NO).xml @@ -0,0 +1,34 @@ + + XBMC-kontroller + Navnet du innførte er allerede i bruk. Vennligst velg et annet. + Hvert navn må være unikt. + Du må føre inn et port-nummer for denne XBMC-installasjonen. + Vennligst før inn et port-nummer. + Du må føre inn en IP-adresse til denne XBMC-installasjonen. + Før inn en IP-adresse. + Du må føre inn et navn for denne XBMC-installasjonen. + Vennligst før inn et unikt navn. + XBMC-kommunikasjon + Endre + Navn: + Legg til + XBMC IP: + XBMC Port: + Fjerne valgte + Kan ikke starte XBMC-oppdatering + En feil oppstod under kommunikasjon med {0}{1}. + XBMC + XBMC-kontroller + Slå på Reell tidssynkronisering + Reell tidssynkronisering + Søker... + Hent kilder + EMM Kilde + XBMC kilde + XBMC kildetype + Windows Partisjonsbokstav (x:\) + Windows UNC/Linux/OSX + XBMC-host + Send varslinger + Hent spilleantall fra: + diff --git "a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.Portugu\303\252s_(pt-BR).xml" "b/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.Portugu\303\252s_(pt-BR).xml" deleted file mode 100644 index a91dc2d..0000000 --- "a/Addons/generic.EmberCore.XBMC/Langs/generic.EmberCore.XBMC.Portugu\303\252s_(pt-BR).xml" +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/Addons/generic.EmberCore.XBMC/My Project/AssemblyInfo.vb b/Addons/generic.EmberCore.XBMC/My Project/AssemblyInfo.vb index b208095..78ee75f 100644 --- a/Addons/generic.EmberCore.XBMC/My Project/AssemblyInfo.vb +++ b/Addons/generic.EmberCore.XBMC/My Project/AssemblyInfo.vb @@ -9,7 +9,7 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - + diff --git a/Addons/generic.EmberCore.XBMC/generic.EmberCore.XBMC.vbproj b/Addons/generic.EmberCore.XBMC/generic.EmberCore.XBMC.vbproj index 36a27fc..c9299b8 100644 --- a/Addons/generic.EmberCore.XBMC/generic.EmberCore.XBMC.vbproj +++ b/Addons/generic.EmberCore.XBMC/generic.EmberCore.XBMC.vbproj @@ -175,6 +175,9 @@ + + PreserveNewest + PreserveNewest @@ -187,7 +190,10 @@ PreserveNewest - + + PreserveNewest + + PreserveNewest diff --git a/Addons/multi.Compatibility/Langs/multi.Compatibility.Debug_(db_DB).xml b/Addons/multi.Compatibility/Langs/multi.Compatibility.Debug_(db_DB).xml new file mode 100644 index 0000000..9bcd647 --- /dev/null +++ b/Addons/multi.Compatibility/Langs/multi.Compatibility.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + comp1 + comp2 + comp3 + comp4 + comp5 + comp6 + comp7 + comp8 + comp9 + comp10 + comp11 + comp12 + comp13 + comp14 + comp15 + comp16 + comp17 + comp18 + comp19 + comp20 + comp21 + comp22 + comp23 + comp24 + comp25 + comp26 + comp27 + comp28 + comp29 + comp30 + comp31 + comp32 + comp33 + comp34 + comp35 + comp36 + comp37 + comp38 + comp39 + comp40 + comp41 + comp42 + comp43 + comp44 + comp45 + comp46 + comp47 + comp48 + comp49 + comp50 + comp51 + comp52 + comp53 + comp54 + comp55 + comp56 + comp57 + comp58 + comp59 + comp60 + comp61 + comp62 + comp63 + comp64 + comp65 + comp66 + comp67 + comp68 + comp69 + comp70 + comp71 + comp72 + comp73 + comp74 + comp75 + comp76 + comp77 + comp78 + comp79 + comp80 + comp81 + comp82 + comp83 + comp84 + comp85 + comp86 + comp87 + comp88 + comp89 + comp90 + comp91 + comp92 + comp93 + comp94 + comp95 + comp96 + comp97 + comp98 + comp99 + comp100 + comp101 + comp102 + comp103 + comp104 + comp105 + comp106 + comp107 + comp108 + comp109 + comp110 + comp111 + comp112 + comp113 + comp114 + comp115 + comp116 + comp117 + comp118 + comp119 + comp120 + comp121 + comp122 + comp123 + comp124 + comp125 + comp126 + comp127 + comp128 + comp129 + comp130 + comp131 + comp132 + comp133 + comp134 + comp135 + comp136 + comp137 + comp138 + comp139 + comp140 + comp141 + comp142 + comp143 + comp144 + comp145 + comp146 + comp147 + comp148 + comp149 + comp150 + comp151 + comp152 + comp153 + comp154 + comp155 + comp156 + comp157 + comp158 + comp159 + comp160 + comp161 + comp162 + comp163 + comp164 + comp165 + comp166 + comp167 + comp168 + comp169 + comp170 + comp171 + comp172 + comp173 + comp174 + comp175 + comp176 + comp177 + comp178 + comp179 + comp180 + comp181 + comp182 + comp183 + comp184 + comp185 + comp186 + comp187 + comp188 + comp189 + comp190 + comp191 + comp192 + comp193 + comp194 + comp195 + comp196 + comp197 + comp198 + comp199 + comp200 + comp201 + comp202 + comp203 + comp204 + comp205 + comp206 + comp207 + comp208 + comp209 + comp210 + comp211 + comp212 + comp213 + comp214 + comp215 + comp216 + comp217 + comp218 + comp219 + comp220 + comp221 + comp222 + comp223 + comp224 + comp225 + comp226 + comp227 + comp228 + comp229 + comp230 + comp231 + comp232 + comp233 + comp234 + comp235 + comp236 + comp237 + comp238 + comp239 + comp240 + comp241 + comp242 + comp243 + comp244 + comp245 + comp246 + comp247 + comp248 + comp249 + comp250 + comp251 + comp252 + comp253 + comp254 + comp255 + comp256 + comp257 + comp258 + comp259 + comp260 + comp261 + comp262 + comp263 + comp264 + comp265 + comp266 + comp267 + comp268 + comp269 + comp270 + comp271 + comp272 + comp273 + comp274 + comp275 + comp276 + comp277 + comp278 + comp279 + comp280 + comp281 + comp282 + comp283 + comp284 + comp285 + comp286 + comp287 + comp288 + comp289 + comp290 + comp291 + comp292 + comp293 + comp294 + comp295 + comp296 + comp297 + comp298 + comp299 + comp300 + comp301 + comp302 + comp303 + comp304 + comp305 + comp306 + comp307 + comp308 + comp309 + comp310 + comp311 + comp312 + comp313 + comp314 + comp315 + comp316 + comp317 + comp318 + comp319 + comp320 + comp321 + comp322 + comp323 + comp324 + comp325 + comp326 + comp327 + comp328 + comp329 + comp330 + comp331 + comp332 + comp333 + comp334 + comp335 + comp336 + comp337 + comp338 + comp339 + comp340 + comp341 + comp342 + comp343 + comp344 + comp345 + comp346 + comp347 + comp348 + comp349 + comp350 + comp351 + comp352 + comp353 + comp354 + comp355 + comp356 + comp357 + comp358 + comp359 + comp360 + comp361 + comp362 + comp363 + comp364 + comp365 + comp366 + comp367 + comp368 + comp369 + comp370 + comp371 + comp372 + comp373 + comp374 + comp375 + comp376 + comp377 + comp378 + comp379 + comp380 + comp381 + comp382 + comp383 + comp384 + comp385 + comp386 + comp387 + comp388 + comp389 + comp390 + comp391 + comp392 + comp393 + comp394 + comp395 + comp396 + comp397 + comp398 + comp399 + comp400 + comp401 + comp402 + comp403 + comp404 + comp405 + comp406 + comp407 + comp408 + comp409 + comp410 + comp411 + comp412 + comp413 + comp414 + comp415 + comp416 + comp417 + comp418 + comp419 + comp420 + comp421 + comp422 + comp423 + comp424 + comp425 + comp426 + comp427 + comp428 + comp429 + comp430 + comp431 + comp432 + comp433 + comp434 + comp435 + comp436 + comp437 + comp438 + comp439 + comp440 + comp441 + comp442 + comp443 + comp444 + comp445 + comp446 + comp447 + comp448 + comp449 + comp450 + comp451 + comp452 + comp453 + comp454 + comp455 + comp456 + comp457 + comp458 + comp459 + comp460 + comp461 + comp462 + comp463 + comp464 + comp465 + comp466 + comp467 + comp468 + comp469 + comp470 + comp471 + comp472 + comp473 + comp474 + comp475 + comp476 + comp477 + comp478 + comp479 + comp480 + comp481 + comp482 + comp483 + comp484 + comp485 + comp486 + comp487 + comp488 + comp489 + comp490 + comp491 + comp492 + comp493 + comp494 + comp495 + comp496 + comp497 + comp498 + comp499 + comp500 + comp501 + comp502 + comp503 + comp504 + comp505 + comp506 + comp507 + comp508 + comp509 + comp510 + comp511 + comp512 + comp513 + comp514 + comp515 + comp516 + comp517 + comp518 + comp519 + comp520 + comp521 + comp522 + comp523 + comp524 + comp525 + comp526 + comp527 + comp528 + comp529 + comp530 + comp531 + comp532 + comp533 + comp534 + comp535 + comp536 + comp537 + comp538 + comp539 + comp540 + comp541 + comp542 + comp543 + comp544 + comp545 + comp546 + comp547 + comp548 + comp549 + comp550 + comp551 + comp552 + comp553 + comp554 + comp555 + comp556 + comp557 + comp558 + comp559 + comp560 + comp561 + comp562 + comp563 + comp564 + comp565 + comp566 + comp567 + comp568 + comp569 + comp570 + comp571 + comp572 + comp573 + comp574 + comp575 + comp576 + comp577 + comp578 + comp579 + comp580 + comp581 + comp582 + comp583 + comp584 + comp585 + comp586 + comp587 + comp588 + comp589 + comp590 + comp591 + comp592 + comp593 + comp594 + comp595 + comp596 + comp597 + comp598 + comp599 + comp600 + comp601 + comp602 + comp603 + comp604 + comp605 + comp606 + comp607 + comp608 + comp609 + comp610 + comp611 + comp612 + comp613 + comp614 + comp615 + comp616 + comp617 + comp618 + comp619 + comp620 + comp621 + comp622 + comp623 + comp624 + comp625 + comp626 + comp627 + comp628 + comp629 + comp630 + comp631 + comp632 + comp633 + comp634 + comp635 + comp636 + comp637 + comp638 + comp639 + comp640 + comp641 + comp642 + comp643 + comp644 + comp645 + comp646 + comp647 + comp648 + comp649 + comp650 + comp651 + comp652 + comp653 + comp654 + comp655 + comp656 + comp657 + comp658 + comp659 + comp660 + comp661 + comp662 + comp663 + comp664 + comp665 + comp666 + comp667 + comp668 + comp669 + comp670 + comp671 + comp672 + comp673 + comp674 + comp675 + comp676 + comp677 + comp678 + comp679 + comp680 + comp681 + comp682 + comp683 + comp684 + comp685 + comp686 + comp687 + comp688 + comp689 + comp690 + comp691 + comp692 + comp693 + comp694 + comp695 + comp696 + comp697 + comp698 + comp699 + comp700 + comp701 + comp702 + comp703 + comp704 + comp705 + comp706 + comp707 + comp708 + comp709 + comp710 + comp711 + comp712 + comp713 + comp714 + comp715 + comp716 + comp717 + comp718 + comp719 + comp720 + comp721 + comp722 + comp723 + comp724 + comp725 + comp726 + comp727 + comp728 + comp729 + comp730 + comp731 + comp732 + comp733 + comp734 + comp735 + comp736 + comp737 + comp738 + comp739 + comp740 + comp741 + comp742 + comp743 + comp744 + comp745 + comp746 + comp747 + comp748 + comp749 + comp750 + comp751 + comp752 + comp753 + comp754 + comp755 + comp756 + comp757 + comp758 + comp759 + comp760 + comp761 + comp762 + comp763 + comp764 + comp765 + comp766 + comp767 + comp768 + comp769 + comp770 + comp771 + comp772 + comp773 + comp774 + comp775 + comp776 + comp777 + comp778 + comp779 + comp780 + comp781 + comp782 + comp783 + comp784 + comp785 + comp786 + comp787 + comp788 + comp789 + comp790 + comp791 + comp792 + comp793 + comp794 + comp795 + comp796 + comp797 + comp798 + comp799 + comp800 + comp801 + comp802 + comp803 + comp804 + comp805 + comp806 + comp807 + comp808 + comp809 + comp810 + comp811 + comp812 + comp813 + comp814 + comp815 + comp816 + comp817 + comp818 + comp819 + comp820 + comp821 + comp822 + comp823 + comp824 + comp825 + comp826 + comp827 + comp828 + comp829 + comp830 + comp831 + comp832 + comp833 + comp834 + comp835 + comp836 + comp837 + comp838 + comp839 + comp840 + comp841 + comp842 + comp843 + comp844 + comp845 + comp846 + comp847 + comp848 + comp849 + comp850 + comp851 + comp852 + comp853 + comp854 + comp855 + comp856 + comp857 + comp858 + comp859 + comp860 + comp861 + comp862 + comp863 + comp864 + comp865 + comp866 + comp867 + comp868 + comp869 + comp870 + comp871 + comp872 + comp873 + comp874 + comp875 + comp876 + comp877 + comp878 + comp879 + comp880 + comp881 + comp882 + comp883 + comp884 + comp885 + comp886 + comp887 + comp888 + comp889 + comp890 + comp891 + comp892 + comp893 + comp894 + comp895 + comp896 + comp897 + comp898 + comp899 + comp900 + \ No newline at end of file diff --git a/Addons/multi.Compatibility/Langs/multi.Compatibility.English_(en_US).xml b/Addons/multi.Compatibility/Langs/multi.Compatibility.English_(en_US).xml index 3c27425..29e19c3 100644 --- a/Addons/multi.Compatibility/Langs/multi.Compatibility.English_(en_US).xml +++ b/Addons/multi.Compatibility/Langs/multi.Compatibility.English_(en_US).xml @@ -1,21 +1,22 @@ - - MediaBrowser Compatibility - YAMJ Compatibility - YAMJ Compatible Sets - Compatible VIDEO_TS File Placement/Naming (NOTE: This will be applyed even if module is disabled) - YAMJ Compatible TV Images Naming - YAMJ Specific NFO fields - Show Poster as Set_<Show>_1.jpg - Show Poster as Set_<Show>_1.fanart.jpg - Season Poster as <Episode>SxxE01.jpg - Season Fanart as <Episode>SxxE01.fanart.jpg - Episode Poster as <Show>.videoimage.jpg - Compatible VIDEO_TS File Placement/Naming (NOTE: This will be applyed even if module is disabled) - Movie Fanart as backdrop.jpg - Media Browser mymovies.xml - Show All Season as Season 1.banner.jpg - Replace ID field with Boxee Id Field - TV Show Options - Experimental module + MediaBrowser Compatibility + YAMJ Compatibility + YAMJ Compatible Sets + Compatible VIDEO_TS File Placement/Naming (NOTE: This will be applyed even if module is disabled) + YAMJ Compatible TV Images Naming + YAMJ Specific NFO fields + Show Poster as Set_<Show>_1.jpg + Show Poster as Set_<Show>_1.fanart.jpg + Season Poster as <Episode>.jpg * + Season Fanart as <Episode>.fanart.jpg * + Episode Poster as <Episode>.videoimage.jpg + Compatible VIDEO_TS File Placement/Naming (NOTE: This will be applyed even if module is disabled) + Movie Fanart as backdrop.jpg + Media Browser mymovies.xml + All Seasons Poster as Set_<Show>_1.banner.jpg + Replace ID field with Boxee Id Field + TV Show Options + Use YAMJ Settings + Boxee Compatibility + * Use allways the first existing episode of a season diff --git a/Addons/multi.Compatibility/Langs/multi.Compatibility.German_(de_DE).xml b/Addons/multi.Compatibility/Langs/multi.Compatibility.German_(de_DE).xml index df43985..b41b8bd 100644 --- a/Addons/multi.Compatibility/Langs/multi.Compatibility.German_(de_DE).xml +++ b/Addons/multi.Compatibility/Langs/multi.Compatibility.German_(de_DE).xml @@ -1,18 +1,21 @@ - - YAMJ Kompatiblitätsmodul - YAMJ komaptible Sets - YAMJ kompatible VIDEO_TS Datei und Namen - YAMJ kompatible TV Images Namen - YAMJ spezifische NFO Einträge - Zeige Cover als SET_<Show>_1.jpg - Zeige Cover als SET_<Show>_1.fanart.jpg - Staffel Cover als <Episode>SxxE01.jpg - Staffel Fanart als <Episode>SxxE01.fanart.jpg - Episode Poster als <Show>.videoimage.jpg - kompatible VIDEO_TS VIDEO_TS Datei und Namen (Aktiv belassen falls Modul deaktiviert, wegen YAMJ) - Movie Fanart als backdrop.jpg - Media Browser mymovies.xml - Zeige alle Staffeln als Season 1.banner.jpg + MediaBrowser Kompatibilität + YAMJ Kompatibilität + YAMJ komaptible Sets + YAMJ kompatible VIDEO_TS Datei und Namen (INFO: Diese Option greift auch wenn das Modul deaktiviert ist) + YAMJ kompatible TV Images Namen + YAMJ spezifische NFO Einträge + Zeige Cover als SET_<Show>_1.jpg + Zeige Cover als SET_<Show>_1.fanart.jpg + Staffel Cover als <Episode>SxxE01.jpg + Staffel Fanart als <Episode>SxxE01.fanart.jpg + Episode Poster als <Show>.videoimage.jpg + YAMJ kompatible VIDEO_TS Datei und Namen (INFO: Diese Option greift auch wenn das Modul deaktiviert ist) + Movie Fanart als backdrop.jpg + Media Browser mymovies.xml + Zeige alle Staffeln als Season 1.banner.jpg + Ersetze die ID mit der Boxee ID + TV Serien Optionen + Experimentelles Modul + Boxee Kompatibilität - \ No newline at end of file diff --git a/Addons/multi.Compatibility/Langs/multi.Compatibility.Norwegian_(no_NO).xml b/Addons/multi.Compatibility/Langs/multi.Compatibility.Norwegian_(no_NO).xml new file mode 100644 index 0000000..406a6a3 --- /dev/null +++ b/Addons/multi.Compatibility/Langs/multi.Compatibility.Norwegian_(no_NO).xml @@ -0,0 +1,21 @@ + + MediaBrowser-kompabilitet + YAMJ-kompatibilitet + YAMJ-kompatible samlinger + Kompatible VIDEO_TS filplasseringer/navn (BEMERK: Dette vil bli satt selv om modulen er avslått) + YAMJ-kompatible TV-bildenavn + YAMJ-spesifikke NFO-felt + Vis plakat som Set_<serie>_1.jpg + Vis plakat som Set_<serie>_1.fanart.jpg + Sesongplakat som <Episode>SxxE01.jpg + Sesongbakgrunn som <Episode>SxxE01.fanart.jpg + Episodeplakat som <serie>.videoimage.jpg + Kompatible VIDEO_TS filplasseringer/navn (BEMERK: Dette vil bli satt selv om modulen er avslått) + Filmplakat som backdrop.jpg + Mediautforsker mymovies.xml + Vis Alle Sesonger som Season 1.banner.jpg + Erstatt ID-felt med Boxee ID-felt + TVserie-valg + Eksperimental modul + Boxee-kompatibilitet + diff --git "a/Addons/multi.Compatibility/Langs/multi.Compatibility.Portugu\303\252s_(pt-BR).xml" "b/Addons/multi.Compatibility/Langs/multi.Compatibility.Portugu\303\252s_(pt-BR).xml" deleted file mode 100644 index a91dc2d..0000000 --- "a/Addons/multi.Compatibility/Langs/multi.Compatibility.Portugu\303\252s_(pt-BR).xml" +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/Addons/multi.Compatibility/My Project/AssemblyInfo.vb b/Addons/multi.Compatibility/My Project/AssemblyInfo.vb index cfd6b1f..3571a28 100644 --- a/Addons/multi.Compatibility/My Project/AssemblyInfo.vb +++ b/Addons/multi.Compatibility/My Project/AssemblyInfo.vb @@ -7,7 +7,7 @@ Imports System.Runtime.InteropServices ' associated with an assembly. ' Review the values of the assembly attributes - + diff --git a/Addons/multi.Compatibility/frmYAMJ.designer.vb b/Addons/multi.Compatibility/frmYAMJ.designer.vb index 1f505de..d538754 100644 --- a/Addons/multi.Compatibility/frmYAMJ.designer.vb +++ b/Addons/multi.Compatibility/frmYAMJ.designer.vb @@ -22,213 +22,224 @@ Partial Class frmYAMJ 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Me.pnlSettings = New System.Windows.Forms.Panel() - Me.btnCheckAll = New System.Windows.Forms.Button() - Me.chkYAMJCompatibleTVImages = New System.Windows.Forms.CheckBox() - Me.gbImages = New System.Windows.Forms.GroupBox() - Me.chkAllSeasonPoster = New System.Windows.Forms.CheckBox() - Me.chkEpisodePoster = New System.Windows.Forms.CheckBox() - Me.chkShowFanart = New System.Windows.Forms.CheckBox() - Me.chkShowPoster = New System.Windows.Forms.CheckBox() - Me.chkSeasonFanart = New System.Windows.Forms.CheckBox() - Me.chkSeasonPoster = New System.Windows.Forms.CheckBox() - Me.chkYAMJnfoFields = New System.Windows.Forms.CheckBox() - Me.chkVideoTSParent = New System.Windows.Forms.CheckBox() - Me.chkYAMJCompatibleSets = New System.Windows.Forms.CheckBox() - Me.Panel1 = New System.Windows.Forms.Panel() - Me.chkEnabled = New System.Windows.Forms.CheckBox() - Me.pnlSettings.SuspendLayout() - Me.gbImages.SuspendLayout() - Me.Panel1.SuspendLayout() - Me.SuspendLayout() - ' - 'pnlSettings - ' - Me.pnlSettings.BackColor = System.Drawing.Color.White - Me.pnlSettings.Controls.Add(Me.btnCheckAll) - Me.pnlSettings.Controls.Add(Me.chkYAMJCompatibleTVImages) - Me.pnlSettings.Controls.Add(Me.gbImages) - Me.pnlSettings.Controls.Add(Me.chkYAMJnfoFields) - Me.pnlSettings.Controls.Add(Me.chkVideoTSParent) - Me.pnlSettings.Controls.Add(Me.chkYAMJCompatibleSets) - Me.pnlSettings.Controls.Add(Me.Panel1) - Me.pnlSettings.Location = New System.Drawing.Point(13, 15) - Me.pnlSettings.Name = "pnlSettings" - Me.pnlSettings.Size = New System.Drawing.Size(617, 327) - Me.pnlSettings.TabIndex = 0 - ' - 'btnCheckAll - ' - Me.btnCheckAll.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnCheckAll.Location = New System.Drawing.Point(13, 30) - Me.btnCheckAll.Name = "btnCheckAll" - Me.btnCheckAll.Size = New System.Drawing.Size(93, 20) - Me.btnCheckAll.TabIndex = 1 - Me.btnCheckAll.Text = "Check All" - Me.btnCheckAll.UseVisualStyleBackColor = True - ' - 'chkYAMJCompatibleTVImages - ' - Me.chkYAMJCompatibleTVImages.AutoSize = True - Me.chkYAMJCompatibleTVImages.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkYAMJCompatibleTVImages.Location = New System.Drawing.Point(13, 125) - Me.chkYAMJCompatibleTVImages.Name = "chkYAMJCompatibleTVImages" - Me.chkYAMJCompatibleTVImages.Size = New System.Drawing.Size(211, 17) - Me.chkYAMJCompatibleTVImages.TabIndex = 5 - Me.chkYAMJCompatibleTVImages.Text = "YAMJ Compatible TV Images Naming" - Me.chkYAMJCompatibleTVImages.UseVisualStyleBackColor = True - ' - 'gbImages - ' - Me.gbImages.Controls.Add(Me.chkAllSeasonPoster) - Me.gbImages.Controls.Add(Me.chkEpisodePoster) - Me.gbImages.Controls.Add(Me.chkShowFanart) - Me.gbImages.Controls.Add(Me.chkShowPoster) - Me.gbImages.Controls.Add(Me.chkSeasonFanart) - Me.gbImages.Controls.Add(Me.chkSeasonPoster) - Me.gbImages.Enabled = False - Me.gbImages.Location = New System.Drawing.Point(6, 126) - Me.gbImages.Name = "gbImages" - Me.gbImages.Size = New System.Drawing.Size(594, 114) - Me.gbImages.TabIndex = 6 - Me.gbImages.TabStop = False - ' - 'chkAllSeasonPoster - ' - Me.chkAllSeasonPoster.AutoSize = True - Me.chkAllSeasonPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkAllSeasonPoster.Location = New System.Drawing.Point(15, 39) - Me.chkAllSeasonPoster.Name = "chkAllSeasonPoster" - Me.chkAllSeasonPoster.Size = New System.Drawing.Size(234, 17) - Me.chkAllSeasonPoster.TabIndex = 1 - Me.chkAllSeasonPoster.Text = "Show All Season as Season 1.banner.jpg" - Me.chkAllSeasonPoster.UseVisualStyleBackColor = True - ' - 'chkEpisodePoster - ' - Me.chkEpisodePoster.AutoSize = True - Me.chkEpisodePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodePoster.Location = New System.Drawing.Point(15, 85) - Me.chkEpisodePoster.Name = "chkEpisodePoster" - Me.chkEpisodePoster.Size = New System.Drawing.Size(246, 17) - Me.chkEpisodePoster.TabIndex = 3 - Me.chkEpisodePoster.Text = "Episode Poster as .videoimage.jpg" - Me.chkEpisodePoster.UseVisualStyleBackColor = True - ' - 'chkShowFanart - ' - Me.chkShowFanart.AutoSize = True - Me.chkShowFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowFanart.Location = New System.Drawing.Point(286, 20) - Me.chkShowFanart.Name = "chkShowFanart" - Me.chkShowFanart.Size = New System.Drawing.Size(238, 17) - Me.chkShowFanart.TabIndex = 4 - Me.chkShowFanart.Text = "Show Poster as Set__1.fanart.jpg" - Me.chkShowFanart.UseVisualStyleBackColor = True - ' - 'chkShowPoster - ' - Me.chkShowPoster.AutoSize = True - Me.chkShowPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowPoster.Location = New System.Drawing.Point(15, 20) - Me.chkShowPoster.Name = "chkShowPoster" - Me.chkShowPoster.Size = New System.Drawing.Size(204, 17) - Me.chkShowPoster.TabIndex = 0 - Me.chkShowPoster.Text = "Show Poster as Set__1.jpg" - Me.chkShowPoster.UseVisualStyleBackColor = True - ' - 'chkSeasonFanart - ' - Me.chkSeasonFanart.AutoSize = True - Me.chkSeasonFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonFanart.Location = New System.Drawing.Point(286, 62) - Me.chkSeasonFanart.Name = "chkSeasonFanart" - Me.chkSeasonFanart.Size = New System.Drawing.Size(261, 17) - Me.chkSeasonFanart.TabIndex = 5 - Me.chkSeasonFanart.Text = "Season Fanart as SxxE01.fanart.jpg" - Me.chkSeasonFanart.UseVisualStyleBackColor = True - ' - 'chkSeasonPoster - ' - Me.chkSeasonPoster.AutoSize = True - Me.chkSeasonPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonPoster.Location = New System.Drawing.Point(15, 62) - Me.chkSeasonPoster.Name = "chkSeasonPoster" - Me.chkSeasonPoster.Size = New System.Drawing.Size(226, 17) - Me.chkSeasonPoster.TabIndex = 2 - Me.chkSeasonPoster.Text = "Season Poster as SxxE01.jpg" - Me.chkSeasonPoster.UseVisualStyleBackColor = True - ' - 'chkYAMJnfoFields - ' - Me.chkYAMJnfoFields.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkYAMJnfoFields.Location = New System.Drawing.Point(13, 102) - Me.chkYAMJnfoFields.Name = "chkYAMJnfoFields" - Me.chkYAMJnfoFields.Size = New System.Drawing.Size(584, 18) - Me.chkYAMJnfoFields.TabIndex = 4 - Me.chkYAMJnfoFields.Text = "YAMJ Specific NFO fields" - Me.chkYAMJnfoFields.UseVisualStyleBackColor = True - ' - 'chkVideoTSParent - ' - Me.chkVideoTSParent.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkVideoTSParent.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkVideoTSParent.Location = New System.Drawing.Point(13, 58) - Me.chkVideoTSParent.Name = "chkVideoTSParent" - Me.chkVideoTSParent.Size = New System.Drawing.Size(584, 17) - Me.chkVideoTSParent.TabIndex = 2 - Me.chkVideoTSParent.Text = "Compatible VIDEO_TS File Placement/Naming" - Me.chkVideoTSParent.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkVideoTSParent.UseVisualStyleBackColor = True - ' - 'chkYAMJCompatibleSets - ' - Me.chkYAMJCompatibleSets.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkYAMJCompatibleSets.Location = New System.Drawing.Point(13, 81) - Me.chkYAMJCompatibleSets.Name = "chkYAMJCompatibleSets" - Me.chkYAMJCompatibleSets.Size = New System.Drawing.Size(584, 17) - Me.chkYAMJCompatibleSets.TabIndex = 3 - Me.chkYAMJCompatibleSets.Text = "YAMJ Compatible Movie Sets" - Me.chkYAMJCompatibleSets.UseVisualStyleBackColor = True - ' - 'Panel1 - ' - Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke - Me.Panel1.Controls.Add(Me.chkEnabled) - Me.Panel1.Dock = System.Windows.Forms.DockStyle.Top - Me.Panel1.Location = New System.Drawing.Point(0, 0) - Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(617, 25) - Me.Panel1.TabIndex = 0 - ' - 'chkEnabled - ' - Me.chkEnabled.AutoSize = True - Me.chkEnabled.Location = New System.Drawing.Point(10, 5) - Me.chkEnabled.Name = "chkEnabled" - Me.chkEnabled.Size = New System.Drawing.Size(68, 17) - Me.chkEnabled.TabIndex = 0 - Me.chkEnabled.Text = "Enabled" - Me.chkEnabled.UseVisualStyleBackColor = True - ' - 'frmYAMJ - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.ClientSize = New System.Drawing.Size(643, 356) - Me.Controls.Add(Me.pnlSettings) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Name = "frmYAMJ" - Me.Text = "frmSettingsHolder" - Me.pnlSettings.ResumeLayout(False) - Me.pnlSettings.PerformLayout() - Me.gbImages.ResumeLayout(False) - Me.gbImages.PerformLayout() - Me.Panel1.ResumeLayout(False) - Me.Panel1.PerformLayout() - Me.ResumeLayout(False) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.btnCheckAll = New System.Windows.Forms.Button() + Me.chkYAMJCompatibleTVImages = New System.Windows.Forms.CheckBox() + Me.gbImages = New System.Windows.Forms.GroupBox() + Me.chkAllSeasonPoster = New System.Windows.Forms.CheckBox() + Me.chkEpisodePoster = New System.Windows.Forms.CheckBox() + Me.chkShowFanart = New System.Windows.Forms.CheckBox() + Me.chkShowPoster = New System.Windows.Forms.CheckBox() + Me.chkSeasonFanart = New System.Windows.Forms.CheckBox() + Me.chkSeasonPoster = New System.Windows.Forms.CheckBox() + Me.chkYAMJnfoFields = New System.Windows.Forms.CheckBox() + Me.chkVideoTSParent = New System.Windows.Forms.CheckBox() + Me.chkYAMJCompatibleSets = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.chkEnabled = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlSettings.SuspendLayout() + Me.gbImages.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.BackColor = System.Drawing.Color.White + Me.pnlSettings.Controls.Add(Me.btnCheckAll) + Me.pnlSettings.Controls.Add(Me.chkYAMJCompatibleTVImages) + Me.pnlSettings.Controls.Add(Me.gbImages) + Me.pnlSettings.Controls.Add(Me.chkYAMJnfoFields) + Me.pnlSettings.Controls.Add(Me.chkVideoTSParent) + Me.pnlSettings.Controls.Add(Me.chkYAMJCompatibleSets) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Location = New System.Drawing.Point(13, 15) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 327) + Me.pnlSettings.TabIndex = 0 + ' + 'btnCheckAll + ' + Me.btnCheckAll.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnCheckAll.Location = New System.Drawing.Point(13, 30) + Me.btnCheckAll.Name = "btnCheckAll" + Me.btnCheckAll.Size = New System.Drawing.Size(93, 20) + Me.btnCheckAll.TabIndex = 1 + Me.btnCheckAll.Text = "Check All" + Me.btnCheckAll.UseVisualStyleBackColor = True + ' + 'chkYAMJCompatibleTVImages + ' + Me.chkYAMJCompatibleTVImages.AutoSize = True + Me.chkYAMJCompatibleTVImages.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYAMJCompatibleTVImages.Location = New System.Drawing.Point(13, 125) + Me.chkYAMJCompatibleTVImages.Name = "chkYAMJCompatibleTVImages" + Me.chkYAMJCompatibleTVImages.Size = New System.Drawing.Size(211, 17) + Me.chkYAMJCompatibleTVImages.TabIndex = 5 + Me.chkYAMJCompatibleTVImages.Text = "YAMJ Compatible TV Images Naming" + Me.chkYAMJCompatibleTVImages.UseVisualStyleBackColor = True + ' + 'gbImages + ' + Me.gbImages.Controls.Add(Me.lblInfo) + Me.gbImages.Controls.Add(Me.chkAllSeasonPoster) + Me.gbImages.Controls.Add(Me.chkEpisodePoster) + Me.gbImages.Controls.Add(Me.chkShowFanart) + Me.gbImages.Controls.Add(Me.chkShowPoster) + Me.gbImages.Controls.Add(Me.chkSeasonFanart) + Me.gbImages.Controls.Add(Me.chkSeasonPoster) + Me.gbImages.Enabled = False + Me.gbImages.Location = New System.Drawing.Point(6, 126) + Me.gbImages.Name = "gbImages" + Me.gbImages.Size = New System.Drawing.Size(594, 121) + Me.gbImages.TabIndex = 6 + Me.gbImages.TabStop = False + ' + 'chkAllSeasonPoster + ' + Me.chkAllSeasonPoster.AutoSize = True + Me.chkAllSeasonPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkAllSeasonPoster.Location = New System.Drawing.Point(15, 66) + Me.chkAllSeasonPoster.Name = "chkAllSeasonPoster" + Me.chkAllSeasonPoster.Size = New System.Drawing.Size(273, 17) + Me.chkAllSeasonPoster.TabIndex = 1 + Me.chkAllSeasonPoster.Text = "All Seasons Poster as Set__1.banner.jpg" + Me.chkAllSeasonPoster.UseVisualStyleBackColor = True + ' + 'chkEpisodePoster + ' + Me.chkEpisodePoster.AutoSize = True + Me.chkEpisodePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodePoster.Location = New System.Drawing.Point(298, 66) + Me.chkEpisodePoster.Name = "chkEpisodePoster" + Me.chkEpisodePoster.Size = New System.Drawing.Size(258, 17) + Me.chkEpisodePoster.TabIndex = 3 + Me.chkEpisodePoster.Text = "Episode Poster as .videoimage.jpg" + Me.chkEpisodePoster.UseVisualStyleBackColor = True + ' + 'chkShowFanart + ' + Me.chkShowFanart.AutoSize = True + Me.chkShowFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowFanart.Location = New System.Drawing.Point(15, 43) + Me.chkShowFanart.Name = "chkShowFanart" + Me.chkShowFanart.Size = New System.Drawing.Size(238, 17) + Me.chkShowFanart.TabIndex = 4 + Me.chkShowFanart.Text = "Show Poster as Set__1.fanart.jpg" + Me.chkShowFanart.UseVisualStyleBackColor = True + ' + 'chkShowPoster + ' + Me.chkShowPoster.AutoSize = True + Me.chkShowPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowPoster.Location = New System.Drawing.Point(15, 20) + Me.chkShowPoster.Name = "chkShowPoster" + Me.chkShowPoster.Size = New System.Drawing.Size(204, 17) + Me.chkShowPoster.TabIndex = 0 + Me.chkShowPoster.Text = "Show Poster as Set__1.jpg" + Me.chkShowPoster.UseVisualStyleBackColor = True + ' + 'chkSeasonFanart + ' + Me.chkSeasonFanart.AutoSize = True + Me.chkSeasonFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonFanart.Location = New System.Drawing.Point(298, 43) + Me.chkSeasonFanart.Name = "chkSeasonFanart" + Me.chkSeasonFanart.Size = New System.Drawing.Size(235, 17) + Me.chkSeasonFanart.TabIndex = 5 + Me.chkSeasonFanart.Text = "Season Fanart as .fanart.jpg *" + Me.chkSeasonFanart.UseVisualStyleBackColor = True + ' + 'chkSeasonPoster + ' + Me.chkSeasonPoster.AutoSize = True + Me.chkSeasonPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonPoster.Location = New System.Drawing.Point(298, 20) + Me.chkSeasonPoster.Name = "chkSeasonPoster" + Me.chkSeasonPoster.Size = New System.Drawing.Size(200, 17) + Me.chkSeasonPoster.TabIndex = 2 + Me.chkSeasonPoster.Text = "Season Poster as .jpg *" + Me.chkSeasonPoster.UseVisualStyleBackColor = True + ' + 'chkYAMJnfoFields + ' + Me.chkYAMJnfoFields.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYAMJnfoFields.Location = New System.Drawing.Point(13, 102) + Me.chkYAMJnfoFields.Name = "chkYAMJnfoFields" + Me.chkYAMJnfoFields.Size = New System.Drawing.Size(584, 18) + Me.chkYAMJnfoFields.TabIndex = 4 + Me.chkYAMJnfoFields.Text = "YAMJ Specific NFO fields" + Me.chkYAMJnfoFields.UseVisualStyleBackColor = True + ' + 'chkVideoTSParent + ' + Me.chkVideoTSParent.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkVideoTSParent.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVideoTSParent.Location = New System.Drawing.Point(13, 58) + Me.chkVideoTSParent.Name = "chkVideoTSParent" + Me.chkVideoTSParent.Size = New System.Drawing.Size(584, 17) + Me.chkVideoTSParent.TabIndex = 2 + Me.chkVideoTSParent.Text = "Compatible VIDEO_TS File Placement/Naming" + Me.chkVideoTSParent.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkVideoTSParent.UseVisualStyleBackColor = True + ' + 'chkYAMJCompatibleSets + ' + Me.chkYAMJCompatibleSets.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYAMJCompatibleSets.Location = New System.Drawing.Point(13, 81) + Me.chkYAMJCompatibleSets.Name = "chkYAMJCompatibleSets" + Me.chkYAMJCompatibleSets.Size = New System.Drawing.Size(584, 17) + Me.chkYAMJCompatibleSets.TabIndex = 3 + Me.chkYAMJCompatibleSets.Text = "YAMJ Compatible Movie Sets" + Me.chkYAMJCompatibleSets.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.chkEnabled) + Me.Panel1.Dock = System.Windows.Forms.DockStyle.Top + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(617, 25) + Me.Panel1.TabIndex = 0 + ' + 'chkEnabled + ' + Me.chkEnabled.AutoSize = True + Me.chkEnabled.Location = New System.Drawing.Point(10, 5) + Me.chkEnabled.Name = "chkEnabled" + Me.chkEnabled.Size = New System.Drawing.Size(68, 17) + Me.chkEnabled.TabIndex = 0 + Me.chkEnabled.Text = "Enabled" + Me.chkEnabled.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.AutoSize = True + Me.lblInfo.Location = New System.Drawing.Point(160, 98) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(266, 13) + Me.lblInfo.TabIndex = 7 + Me.lblInfo.Text = "* Use allways the first existing episode of a season" + ' + 'frmYAMJ + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.ClientSize = New System.Drawing.Size(643, 356) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Name = "frmYAMJ" + Me.Text = "frmSettingsHolder" + Me.pnlSettings.ResumeLayout(False) + Me.pnlSettings.PerformLayout() + Me.gbImages.ResumeLayout(False) + Me.gbImages.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.ResumeLayout(False) - End Sub + End Sub Friend WithEvents pnlSettings As System.Windows.Forms.Panel Friend WithEvents Panel1 As System.Windows.Forms.Panel Friend WithEvents chkEnabled As System.Windows.Forms.CheckBox @@ -244,4 +255,5 @@ Partial Class frmYAMJ Friend WithEvents chkShowPoster As System.Windows.Forms.CheckBox Friend WithEvents chkEpisodePoster As System.Windows.Forms.CheckBox Friend WithEvents chkAllSeasonPoster As System.Windows.Forms.CheckBox + Friend WithEvents lblInfo As System.Windows.Forms.Label End Class diff --git a/Addons/multi.Compatibility/frmYAMJ.vb b/Addons/multi.Compatibility/frmYAMJ.vb index 71a92ca..b1082ea 100644 --- a/Addons/multi.Compatibility/frmYAMJ.vb +++ b/Addons/multi.Compatibility/frmYAMJ.vb @@ -45,11 +45,12 @@ Public Class frmYAMJ Me.chkYAMJnfoFields.Text = Master.eLang.GetString(5, "YAMJ Specific NFO fields") Me.chkShowPoster.Text = Master.eLang.GetString(6, "Show Poster as Set__1.jpg") Me.chkShowFanart.Text = Master.eLang.GetString(7, "Show Poster as Set__1.fanart.jpg") - Me.chkSeasonPoster.Text = Master.eLang.GetString(8, "Season Poster as SxxE01.jpg") - Me.chkSeasonFanart.Text = Master.eLang.GetString(9, "Season Fanart as SxxE01.fanart.jpg") - Me.chkEpisodePoster.Text = Master.eLang.GetString(10, "Episode Poster as .videoimage.jpg") - Me.chkAllSeasonPoster.Text = Master.eLang.GetString(14, "Show All Season as Set__1.banner.jpg") - Me.btnCheckAll.Text = Master.eLang.GetString(17, "Check all") + Me.chkSeasonPoster.Text = Master.eLang.GetString(8, "Season Poster as .jpg *") + Me.chkSeasonFanart.Text = Master.eLang.GetString(9, "Season Fanart as .fanart.jpg *") + Me.chkEpisodePoster.Text = Master.eLang.GetString(10, "Episode Poster as .videoimage.jpg") + Me.chkAllSeasonPoster.Text = Master.eLang.GetString(14, "All Seasons Poster as Set__1.banner.jpg") + Me.btnCheckAll.Text = Master.eLang.GetString(17, "Use YAMJ Settings") + Me.lblInfo.Text = Master.eLang.GetString(19, "* Use allways the first existing episode of a season") End Sub Private Sub chkYAMJCompatibleSets_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYAMJCompatibleSets.CheckedChanged @@ -58,6 +59,16 @@ Public Class frmYAMJ Private Sub chkYAMJCompatibleTVSets_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYAMJCompatibleTVImages.CheckedChanged gbImages.Enabled = chkYAMJCompatibleTVImages.Checked + + If Not Me.chkYAMJCompatibleTVImages.Checked Then + Me.chkAllSeasonPoster.Checked = False + Me.chkEpisodePoster.Checked = False + Me.chkSeasonFanart.Checked = False + Me.chkSeasonPoster.Checked = False + Me.chkShowFanart.Checked = False + Me.chkShowPoster.Checked = False + End If + RaiseEvent ModuleSettingsChanged() End Sub @@ -71,8 +82,7 @@ Public Class frmYAMJ chkSeasonPoster.Checked = True chkSeasonFanart.Checked = True chkEpisodePoster.Checked = True - Me.chkAllSeasonPoster.Checked = True - + chkAllSeasonPoster.Checked = True End Sub Private Sub chkYAMJnfoFields_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYAMJnfoFields.CheckedChanged diff --git a/Addons/multi.Compatibility/genericBoxee.vb b/Addons/multi.Compatibility/genericBoxee.vb index 21dfc56..b512f52 100644 --- a/Addons/multi.Compatibility/genericBoxee.vb +++ b/Addons/multi.Compatibility/genericBoxee.vb @@ -67,7 +67,7 @@ Public Class genericBoxee Me.fBoxee.chkBoxeeId.Checked = AdvancedSettings.GetBooleanSetting("BoxeeTVShowId", False) 'chkYAMJnfoFields SPanel.Name = _name - SPanel.Text = Master.eLang.GetString(1, "Boxee Compatibility") + SPanel.Text = Master.eLang.GetString(18, "Boxee Compatibility") SPanel.Prefix = "Boxee_" SPanel.Type = Master.eLang.GetString(802, "Modules", True) SPanel.ImageIndex = If(Me._enabled, 9, 10) diff --git a/Addons/multi.Compatibility/genericMediaBrowser.vb b/Addons/multi.Compatibility/genericMediaBrowser.vb index 78bb872..9eebd88 100644 --- a/Addons/multi.Compatibility/genericMediaBrowser.vb +++ b/Addons/multi.Compatibility/genericMediaBrowser.vb @@ -107,7 +107,7 @@ Public Class genericMediaBrowser Public Function RunGeneric(ByVal mType As EmberAPI.Enums.ModuleEventType, ByRef _params As System.Collections.Generic.List(Of Object), ByRef _refparam As Object) As EmberAPI.Interfaces.ModuleResult Implements EmberAPI.Interfaces.EmberExternalModule.RunGeneric Dim doContinue As Boolean Dim mMovie As Structures.DBMovie - Dim _image As Image + Dim _image As Images If Enabled Then Try Select Case mType @@ -121,11 +121,11 @@ Public Class genericMediaBrowser Case Enums.ModuleEventType.OnMovieFanartSave If AdvancedSettings.GetBooleanSetting("MediaBrowserBackdrop", False) Then mMovie = DirectCast(_params(0), Structures.DBMovie) - _image = DirectCast(_refparam, Image) + _image = DirectCast(_refparam, Images) Dim fPath As String = Path.Combine(Path.GetDirectoryName(mMovie.Filename), "backdrop.jpg") Dim eimage As New Images - eimage.Image = _image - eimage.Save(fPath, Master.eSettings.FanartQuality) + eimage = _image + eimage.Save(fPath, Master.eSettings.FanartQuality, , False) End If End Select diff --git a/Addons/multi.Compatibility/genericYAMJ.vb b/Addons/multi.Compatibility/genericYAMJ.vb index f903a64..fa722db 100644 --- a/Addons/multi.Compatibility/genericYAMJ.vb +++ b/Addons/multi.Compatibility/genericYAMJ.vb @@ -135,19 +135,17 @@ Public Class genericYAMJ Case Enums.TVImageType.AllSeasonPoster If AdvancedSettings.GetBooleanSetting("YAMJAllSeasonPoster", False) Then Dim seasonPath As String = Functions.GetSeasonDirectoryFromShowPath(mShow.ShowPath, 0) - If String.IsNullOrEmpty(seasonPath) Then - Dim dtSeasons As New DataTable - Master.DB.FillDataTable(dtSeasons, String.Concat("SELECT * FROM TVSeason WHERE TVShowID = ", mShow.ShowID, " AND Season <> 999 ORDER BY Season;")) - If dtSeasons.Rows.Count > 0 Then - seasonPath = Functions.GetSeasonDirectoryFromShowPath(mShow.ShowPath, Convert.ToInt32(dtSeasons.Rows(0).Item("Season").ToString)) - End If - End If - tPath = Path.Combine(mShow.ShowPath, seasonPath) - 'tPath = Path.Combine(tPath, String.Concat("Set_", FileUtils.Common.GetDirectory(mShow.ShowPath), "_1.banner.jpg")) - tPath = Path.Combine(tPath, "Season 1.banner.jpg") - imageList.Add(tPath) - 'doContinue = False - 'SET__1.banner.jpg + If String.IsNullOrEmpty(seasonPath) Then + Dim dtSeasons As New DataTable + Master.DB.FillDataTable(dtSeasons, String.Concat("SELECT * FROM TVSeason WHERE TVShowID = ", mShow.ShowID, " AND Season <> 999 ORDER BY Season;")) + If dtSeasons.Rows.Count > 0 Then + seasonPath = Functions.GetSeasonDirectoryFromShowPath(mShow.ShowPath, Convert.ToInt32(dtSeasons.Rows(0).Item("Season").ToString)) + End If + End If + tPath = Path.Combine(mShow.ShowPath, seasonPath) + tPath = Path.Combine(tPath, String.Concat("Set_", FileUtils.Common.GetDirectory(mShow.ShowPath), "_1.banner.jpg")) + imageList.Add(tPath) + 'doContinue = False End If Case Enums.TVImageType.EpisodePoster If AdvancedSettings.GetBooleanSetting("YAMJEpisodePoster", False) Then @@ -193,7 +191,6 @@ Public Class genericYAMJ tPath = Path.Combine(tPath, String.Concat("Set_", FileUtils.Common.GetDirectory(mShow.ShowPath), "_1.jpg")) imageList.Add(tPath) 'doContinue = False - 'SET__1.jpg End If Case Enums.TVImageType.ShowFanart If AdvancedSettings.GetBooleanSetting("YAMJShowFanart", False) Then @@ -209,7 +206,6 @@ Public Class genericYAMJ tPath = Path.Combine(tPath, String.Concat("Set_", FileUtils.Common.GetDirectory(mShow.ShowPath), "_1.fanart.jpg")) imageList.Add(tPath) 'doContinue = False - 'SET__1.fanart.jpg End If End Select End If diff --git a/Addons/multi.Compatibility/multi.Compatibility.vbproj b/Addons/multi.Compatibility/multi.Compatibility.vbproj index 63c1ac1..8e6e403 100644 --- a/Addons/multi.Compatibility/multi.Compatibility.vbproj +++ b/Addons/multi.Compatibility/multi.Compatibility.vbproj @@ -151,13 +151,16 @@ + + PreserveNewest + PreserveNewest PreserveNewest - + PreserveNewest diff --git a/Addons/multi.EmberExtras/Langs/multi.EmberExtras.Debug_(db_DB).xml b/Addons/multi.EmberExtras/Langs/multi.EmberExtras.Debug_(db_DB).xml new file mode 100644 index 0000000..fd75676 --- /dev/null +++ b/Addons/multi.EmberExtras/Langs/multi.EmberExtras.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + extra1 + extra2 + extra3 + extra4 + extra5 + extra6 + extra7 + extra8 + extra9 + extra10 + extra11 + extra12 + extra13 + extra14 + extra15 + extra16 + extra17 + extra18 + extra19 + extra20 + extra21 + extra22 + extra23 + extra24 + extra25 + extra26 + extra27 + extra28 + extra29 + extra30 + extra31 + extra32 + extra33 + extra34 + extra35 + extra36 + extra37 + extra38 + extra39 + extra40 + extra41 + extra42 + extra43 + extra44 + extra45 + extra46 + extra47 + extra48 + extra49 + extra50 + extra51 + extra52 + extra53 + extra54 + extra55 + extra56 + extra57 + extra58 + extra59 + extra60 + extra61 + extra62 + extra63 + extra64 + extra65 + extra66 + extra67 + extra68 + extra69 + extra70 + extra71 + extra72 + extra73 + extra74 + extra75 + extra76 + extra77 + extra78 + extra79 + extra80 + extra81 + extra82 + extra83 + extra84 + extra85 + extra86 + extra87 + extra88 + extra89 + extra90 + extra91 + extra92 + extra93 + extra94 + extra95 + extra96 + extra97 + extra98 + extra99 + extra100 + extra101 + extra102 + extra103 + extra104 + extra105 + extra106 + extra107 + extra108 + extra109 + extra110 + extra111 + extra112 + extra113 + extra114 + extra115 + extra116 + extra117 + extra118 + extra119 + extra120 + extra121 + extra122 + extra123 + extra124 + extra125 + extra126 + extra127 + extra128 + extra129 + extra130 + extra131 + extra132 + extra133 + extra134 + extra135 + extra136 + extra137 + extra138 + extra139 + extra140 + extra141 + extra142 + extra143 + extra144 + extra145 + extra146 + extra147 + extra148 + extra149 + extra150 + extra151 + extra152 + extra153 + extra154 + extra155 + extra156 + extra157 + extra158 + extra159 + extra160 + extra161 + extra162 + extra163 + extra164 + extra165 + extra166 + extra167 + extra168 + extra169 + extra170 + extra171 + extra172 + extra173 + extra174 + extra175 + extra176 + extra177 + extra178 + extra179 + extra180 + extra181 + extra182 + extra183 + extra184 + extra185 + extra186 + extra187 + extra188 + extra189 + extra190 + extra191 + extra192 + extra193 + extra194 + extra195 + extra196 + extra197 + extra198 + extra199 + extra200 + extra201 + extra202 + extra203 + extra204 + extra205 + extra206 + extra207 + extra208 + extra209 + extra210 + extra211 + extra212 + extra213 + extra214 + extra215 + extra216 + extra217 + extra218 + extra219 + extra220 + extra221 + extra222 + extra223 + extra224 + extra225 + extra226 + extra227 + extra228 + extra229 + extra230 + extra231 + extra232 + extra233 + extra234 + extra235 + extra236 + extra237 + extra238 + extra239 + extra240 + extra241 + extra242 + extra243 + extra244 + extra245 + extra246 + extra247 + extra248 + extra249 + extra250 + extra251 + extra252 + extra253 + extra254 + extra255 + extra256 + extra257 + extra258 + extra259 + extra260 + extra261 + extra262 + extra263 + extra264 + extra265 + extra266 + extra267 + extra268 + extra269 + extra270 + extra271 + extra272 + extra273 + extra274 + extra275 + extra276 + extra277 + extra278 + extra279 + extra280 + extra281 + extra282 + extra283 + extra284 + extra285 + extra286 + extra287 + extra288 + extra289 + extra290 + extra291 + extra292 + extra293 + extra294 + extra295 + extra296 + extra297 + extra298 + extra299 + extra300 + extra301 + extra302 + extra303 + extra304 + extra305 + extra306 + extra307 + extra308 + extra309 + extra310 + extra311 + extra312 + extra313 + extra314 + extra315 + extra316 + extra317 + extra318 + extra319 + extra320 + extra321 + extra322 + extra323 + extra324 + extra325 + extra326 + extra327 + extra328 + extra329 + extra330 + extra331 + extra332 + extra333 + extra334 + extra335 + extra336 + extra337 + extra338 + extra339 + extra340 + extra341 + extra342 + extra343 + extra344 + extra345 + extra346 + extra347 + extra348 + extra349 + extra350 + extra351 + extra352 + extra353 + extra354 + extra355 + extra356 + extra357 + extra358 + extra359 + extra360 + extra361 + extra362 + extra363 + extra364 + extra365 + extra366 + extra367 + extra368 + extra369 + extra370 + extra371 + extra372 + extra373 + extra374 + extra375 + extra376 + extra377 + extra378 + extra379 + extra380 + extra381 + extra382 + extra383 + extra384 + extra385 + extra386 + extra387 + extra388 + extra389 + extra390 + extra391 + extra392 + extra393 + extra394 + extra395 + extra396 + extra397 + extra398 + extra399 + extra400 + extra401 + extra402 + extra403 + extra404 + extra405 + extra406 + extra407 + extra408 + extra409 + extra410 + extra411 + extra412 + extra413 + extra414 + extra415 + extra416 + extra417 + extra418 + extra419 + extra420 + extra421 + extra422 + extra423 + extra424 + extra425 + extra426 + extra427 + extra428 + extra429 + extra430 + extra431 + extra432 + extra433 + extra434 + extra435 + extra436 + extra437 + extra438 + extra439 + extra440 + extra441 + extra442 + extra443 + extra444 + extra445 + extra446 + extra447 + extra448 + extra449 + extra450 + extra451 + extra452 + extra453 + extra454 + extra455 + extra456 + extra457 + extra458 + extra459 + extra460 + extra461 + extra462 + extra463 + extra464 + extra465 + extra466 + extra467 + extra468 + extra469 + extra470 + extra471 + extra472 + extra473 + extra474 + extra475 + extra476 + extra477 + extra478 + extra479 + extra480 + extra481 + extra482 + extra483 + extra484 + extra485 + extra486 + extra487 + extra488 + extra489 + extra490 + extra491 + extra492 + extra493 + extra494 + extra495 + extra496 + extra497 + extra498 + extra499 + extra500 + extra501 + extra502 + extra503 + extra504 + extra505 + extra506 + extra507 + extra508 + extra509 + extra510 + extra511 + extra512 + extra513 + extra514 + extra515 + extra516 + extra517 + extra518 + extra519 + extra520 + extra521 + extra522 + extra523 + extra524 + extra525 + extra526 + extra527 + extra528 + extra529 + extra530 + extra531 + extra532 + extra533 + extra534 + extra535 + extra536 + extra537 + extra538 + extra539 + extra540 + extra541 + extra542 + extra543 + extra544 + extra545 + extra546 + extra547 + extra548 + extra549 + extra550 + extra551 + extra552 + extra553 + extra554 + extra555 + extra556 + extra557 + extra558 + extra559 + extra560 + extra561 + extra562 + extra563 + extra564 + extra565 + extra566 + extra567 + extra568 + extra569 + extra570 + extra571 + extra572 + extra573 + extra574 + extra575 + extra576 + extra577 + extra578 + extra579 + extra580 + extra581 + extra582 + extra583 + extra584 + extra585 + extra586 + extra587 + extra588 + extra589 + extra590 + extra591 + extra592 + extra593 + extra594 + extra595 + extra596 + extra597 + extra598 + extra599 + extra600 + extra601 + extra602 + extra603 + extra604 + extra605 + extra606 + extra607 + extra608 + extra609 + extra610 + extra611 + extra612 + extra613 + extra614 + extra615 + extra616 + extra617 + extra618 + extra619 + extra620 + extra621 + extra622 + extra623 + extra624 + extra625 + extra626 + extra627 + extra628 + extra629 + extra630 + extra631 + extra632 + extra633 + extra634 + extra635 + extra636 + extra637 + extra638 + extra639 + extra640 + extra641 + extra642 + extra643 + extra644 + extra645 + extra646 + extra647 + extra648 + extra649 + extra650 + extra651 + extra652 + extra653 + extra654 + extra655 + extra656 + extra657 + extra658 + extra659 + extra660 + extra661 + extra662 + extra663 + extra664 + extra665 + extra666 + extra667 + extra668 + extra669 + extra670 + extra671 + extra672 + extra673 + extra674 + extra675 + extra676 + extra677 + extra678 + extra679 + extra680 + extra681 + extra682 + extra683 + extra684 + extra685 + extra686 + extra687 + extra688 + extra689 + extra690 + extra691 + extra692 + extra693 + extra694 + extra695 + extra696 + extra697 + extra698 + extra699 + extra700 + extra701 + extra702 + extra703 + extra704 + extra705 + extra706 + extra707 + extra708 + extra709 + extra710 + extra711 + extra712 + extra713 + extra714 + extra715 + extra716 + extra717 + extra718 + extra719 + extra720 + extra721 + extra722 + extra723 + extra724 + extra725 + extra726 + extra727 + extra728 + extra729 + extra730 + extra731 + extra732 + extra733 + extra734 + extra735 + extra736 + extra737 + extra738 + extra739 + extra740 + extra741 + extra742 + extra743 + extra744 + extra745 + extra746 + extra747 + extra748 + extra749 + extra750 + extra751 + extra752 + extra753 + extra754 + extra755 + extra756 + extra757 + extra758 + extra759 + extra760 + extra761 + extra762 + extra763 + extra764 + extra765 + extra766 + extra767 + extra768 + extra769 + extra770 + extra771 + extra772 + extra773 + extra774 + extra775 + extra776 + extra777 + extra778 + extra779 + extra780 + extra781 + extra782 + extra783 + extra784 + extra785 + extra786 + extra787 + extra788 + extra789 + extra790 + extra791 + extra792 + extra793 + extra794 + extra795 + extra796 + extra797 + extra798 + extra799 + extra800 + extra801 + extra802 + extra803 + extra804 + extra805 + extra806 + extra807 + extra808 + extra809 + extra810 + extra811 + extra812 + extra813 + extra814 + extra815 + extra816 + extra817 + extra818 + extra819 + extra820 + extra821 + extra822 + extra823 + extra824 + extra825 + extra826 + extra827 + extra828 + extra829 + extra830 + extra831 + extra832 + extra833 + extra834 + extra835 + extra836 + extra837 + extra838 + extra839 + extra840 + extra841 + extra842 + extra843 + extra844 + extra845 + extra846 + extra847 + extra848 + extra849 + extra850 + extra851 + extra852 + extra853 + extra854 + extra855 + extra856 + extra857 + extra858 + extra859 + extra860 + extra861 + extra862 + extra863 + extra864 + extra865 + extra866 + extra867 + extra868 + extra869 + extra870 + extra871 + extra872 + extra873 + extra874 + extra875 + extra876 + extra877 + extra878 + extra879 + extra880 + extra881 + extra882 + extra883 + extra884 + extra885 + extra886 + extra887 + extra888 + extra889 + extra890 + extra891 + extra892 + extra893 + extra894 + extra895 + extra896 + extra897 + extra898 + extra899 + extra900 + \ No newline at end of file diff --git a/Addons/multi.EmberExtras/Langs/multi.EmberExtras.English_(en_US).xml b/Addons/multi.EmberExtras/Langs/multi.EmberExtras.English_(en_US).xml index 913e6c8..51e93b9 100644 --- a/Addons/multi.EmberExtras/Langs/multi.EmberExtras.English_(en_US).xml +++ b/Addons/multi.EmberExtras/Langs/multi.EmberExtras.English_(en_US).xml @@ -1,28 +1,34 @@ - - Audio & Video Codec Mapping - Genres Editor - < All > - Enter the new Language - New Language - This will remove the Language from all Genres. Are you sure? - Remove Language - Languages - Change - Image - Genres Filter - - - Audio - Video - Mediainfo Codec - Mapped Codec - - Media Sources Editor - Sources - Search String - Source Name - Map Media Source by File Extension - File Extension - Set Defaults - + Audio & Video Codec Mapping + Genres Editor + < All > + Enter the new Language + New Language + This will remove the Language from all Genres. Are you sure? + Remove Language + Languages + Change + Image + Genres Filter + + Audio + Video + Mediainfo Codec + Mapped Codec + Media Sources Editor + Sources + Search String + Source Name + Map Media Source by File Extension + File Extension + Set Defaults + Use trakt.tv as source for "Playcount" + trakt.tv Playcount Sync + Get watched movies + Save playcount to database/nfo + + Username + Password + Get watched episodes + Save + \ No newline at end of file diff --git a/Addons/multi.EmberExtras/Langs/multi.EmberExtras.German_(de_DE).xml b/Addons/multi.EmberExtras/Langs/multi.EmberExtras.German_(de_DE).xml index cb2021a..77ec305 100644 --- a/Addons/multi.EmberExtras/Langs/multi.EmberExtras.German_(de_DE).xml +++ b/Addons/multi.EmberExtras/Langs/multi.EmberExtras.German_(de_DE).xml @@ -1,26 +1,34 @@ - - Genre Editor - < All > - Enter,neue Sprache aktivieren - Neue Sprache - Dies löscht die Sprache von allen Genren. Bist du ganz sicher? - Entferne Sprache - Sprachen - Ändern - Bild - Genre Filter - - Audio - Video - Mediainfo Codec - Mapped Codec - Media Source Editor - Sources - Such String - Source Name - Map Media Source aufgrund File Extension - Datei Extension - Als Standard + Audio & Video Codec Mapping + Genre Editor + < All > + Neue Sprache eingeben + Neue Sprache + Dies löscht die Sprache von allen Genren. Bist du ganz sicher? + Entferne Sprache + Sprachen + Ändern + Bild + Genre Filter + + Audio + Video + Mediainfo Codec + Mapped Codec + Media Source Editor + Sources + Such String + Quellen Name + Map Media Source aufgrund File Extension + Datei Erweiterung + Als Standard + Nutze Trakt.tv als Quelle für "Gesehen" Status + Trakt.tv Playcount Sync + Gesehene Filme abrufen + Playcount in Datenbank/NFO speichern + Nutze "Erstellt:"-Dateiinfo der Videodatei + Benutzername + Passwort + Gesehene Episoden abrufen + Speichern - \ No newline at end of file diff --git a/Addons/multi.EmberExtras/Langs/multi.EmberExtras.Norwegian_(no_NO).xml b/Addons/multi.EmberExtras/Langs/multi.EmberExtras.Norwegian_(no_NO).xml new file mode 100644 index 0000000..e8f6383 --- /dev/null +++ b/Addons/multi.EmberExtras/Langs/multi.EmberExtras.Norwegian_(no_NO).xml @@ -0,0 +1,34 @@ + + Lyd- og videokodekkobling + Sjanger-forandrer + < Alle > + Før inn det nye språket + Nytt språk + Dette vil fjerne det valgte språket fra alle sjangere. Er du sikker? + Fjern språk + Språk + Forandre + Bilde + Sjangerfilter + + Lyd + Video + Mediainfo Codec + Stilcodec + Mediakilde-forandrer + Kilder + Søkestring + Kildenavn + Finn mediakilde fra filtype + Filtype + Sett standarder + Bruk trakt.tv som kilde for "Spilt antall ganger" + trakt.tv Spilleantall-synkronisering. + Hente sette filmer. + Lagre spilleantall i databasen/nfo. + Bruk laget-dato fra videofilen. + Brukernavn + Passord + Hent episoder som er sett + Lagre + diff --git "a/Addons/multi.EmberExtras/Langs/multi.EmberExtras.Portugu\303\252s_(pt-BR).xml" "b/Addons/multi.EmberExtras/Langs/multi.EmberExtras.Portugu\303\252s_(pt-BR).xml" deleted file mode 100644 index a91dc2d..0000000 --- "a/Addons/multi.EmberExtras/Langs/multi.EmberExtras.Portugu\303\252s_(pt-BR).xml" +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/Addons/multi.EmberExtras/My Project/AssemblyInfo.vb b/Addons/multi.EmberExtras/My Project/AssemblyInfo.vb index 99aa119..f4e4d3c 100644 --- a/Addons/multi.EmberExtras/My Project/AssemblyInfo.vb +++ b/Addons/multi.EmberExtras/My Project/AssemblyInfo.vb @@ -7,10 +7,10 @@ Imports System.Runtime.InteropServices ' associated with an assembly. ' Review the values of the assembly attributes - + - + @@ -27,5 +27,5 @@ Imports System.Runtime.InteropServices ' You can specify all the values or you can default the Build and Revision Numbers ' by using the '*' as shown below: ' - - \ No newline at end of file + + \ No newline at end of file diff --git a/Addons/multi.EmberExtras/My Project/Resources.Designer.vb b/Addons/multi.EmberExtras/My Project/Resources.Designer.vb index 4bcc494..99cc672 100644 --- a/Addons/multi.EmberExtras/My Project/Resources.Designer.vb +++ b/Addons/multi.EmberExtras/My Project/Resources.Designer.vb @@ -1,10 +1,10 @@ '------------------------------------------------------------------------------ ' -' This code was generated by a tool. -' Runtime Version:4.0.30319.239 +' Dieser Code wurde von einem Tool generiert. +' Laufzeitversion:4.0.30319.18033 ' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. +' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +' der Code erneut generiert wird. ' '------------------------------------------------------------------------------ @@ -15,12 +15,12 @@ Imports System Namespace My.Resources - 'This class was auto-generated by the StronglyTypedResourceBuilder - 'class via a tool like ResGen or Visual Studio. - 'To add or remove a member, edit your .ResX file then rerun ResGen - 'with the /str option, or rebuild your VS project. + 'Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert + '-Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. + 'Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + 'mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. ''' - ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. ''' - ''' Returns the cached ResourceManager instance used by this class. + ''' Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. ''' _ Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager @@ -47,8 +47,8 @@ Namespace My.Resources End Property ''' - ''' Overrides the current thread's CurrentUICulture property for all - ''' resource lookups using this strongly typed resource class. + ''' Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + ''' Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. ''' _ Friend Property Culture() As Global.System.Globalization.CultureInfo @@ -60,6 +60,9 @@ Namespace My.Resources End Set End Property + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' Friend ReadOnly Property GenresEditor() As System.Drawing.Bitmap Get Dim obj As Object = ResourceManager.GetObject("GenresEditor", resourceCulture) @@ -67,6 +70,9 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' Friend ReadOnly Property image() As System.Drawing.Bitmap Get Dim obj As Object = ResourceManager.GetObject("image", resourceCulture) @@ -74,6 +80,9 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' Friend ReadOnly Property MediaSourcesEditor() As System.Drawing.Bitmap Get Dim obj As Object = ResourceManager.GetObject("MediaSourcesEditor", resourceCulture) @@ -81,11 +90,24 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' Friend ReadOnly Property MetadataEditor() As System.Drawing.Bitmap Get Dim obj As Object = ResourceManager.GetObject("MetadataEditor", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property trakt() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("trakt", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property End Module End Namespace diff --git a/Addons/multi.EmberExtras/My Project/Resources.resx b/Addons/multi.EmberExtras/My Project/Resources.resx index d46c51f..5cf700c 100644 --- a/Addons/multi.EmberExtras/My Project/Resources.resx +++ b/Addons/multi.EmberExtras/My Project/Resources.resx @@ -130,4 +130,7 @@ ..\Resources\dvd.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\trakt.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Addons/multi.EmberExtras/Resources/trakt.png b/Addons/multi.EmberExtras/Resources/trakt.png new file mode 100644 index 0000000..0982ef4 Binary files /dev/null and b/Addons/multi.EmberExtras/Resources/trakt.png differ diff --git a/Addons/multi.EmberExtras/frmTrakt.Designer.vb b/Addons/multi.EmberExtras/frmTrakt.Designer.vb new file mode 100644 index 0000000..42de2fc --- /dev/null +++ b/Addons/multi.EmberExtras/frmTrakt.Designer.vb @@ -0,0 +1,235 @@ + _ +Partial Class frmTrakt + Inherits System.Windows.Forms.Form + + 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Wird vom Windows Form-Designer benötigt. + Private components As System.ComponentModel.IContainer + + 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. + 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. + 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. + _ + Private Sub InitializeComponent() + Me.txtTraktUser = New System.Windows.Forms.TextBox() + Me.lblTraktUser = New System.Windows.Forms.Label() + Me.btGetMoviesTrakt = New System.Windows.Forms.Button() + Me.chkUseTrakt = New System.Windows.Forms.CheckBox() + Me.pnlTrakt = New System.Windows.Forms.Panel() + Me.btGetSeriesTrakt = New System.Windows.Forms.Button() + Me.btnSavetraktsettings = New System.Windows.Forms.Button() + Me.lblTraktPassword = New System.Windows.Forms.Label() + Me.txtTraktPassword = New System.Windows.Forms.TextBox() + Me.lblstate = New System.Windows.Forms.Label() + Me.prgtrakt = New System.Windows.Forms.ProgressBar() + Me.btSaveMoviesTrakt = New System.Windows.Forms.Button() + Me.dgvTraktWatched = New System.Windows.Forms.DataGridView() + Me.col1 = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.col2 = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.pnlTrakt.SuspendLayout() + CType(Me.dgvTraktWatched, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'txtTraktUser + ' + Me.txtTraktUser.Enabled = False + Me.txtTraktUser.Location = New System.Drawing.Point(78, 51) + Me.txtTraktUser.Name = "txtTraktUser" + Me.txtTraktUser.Size = New System.Drawing.Size(167, 20) + Me.txtTraktUser.TabIndex = 0 + ' + 'lblTraktUser + ' + Me.lblTraktUser.AutoSize = True + Me.lblTraktUser.Location = New System.Drawing.Point(19, 51) + Me.lblTraktUser.Name = "lblTraktUser" + Me.lblTraktUser.Size = New System.Drawing.Size(55, 13) + Me.lblTraktUser.TabIndex = 1 + Me.lblTraktUser.Text = "Username" + ' + 'btGetMoviesTrakt + ' + Me.btGetMoviesTrakt.Enabled = False + Me.btGetMoviesTrakt.Location = New System.Drawing.Point(22, 208) + Me.btGetMoviesTrakt.Name = "btGetMoviesTrakt" + Me.btGetMoviesTrakt.Size = New System.Drawing.Size(105, 66) + Me.btGetMoviesTrakt.TabIndex = 4 + Me.btGetMoviesTrakt.Text = "Get watched movies" + Me.btGetMoviesTrakt.UseVisualStyleBackColor = True + ' + 'chkUseTrakt + ' + Me.chkUseTrakt.AutoSize = True + Me.chkUseTrakt.Location = New System.Drawing.Point(22, 16) + Me.chkUseTrakt.Name = "chkUseTrakt" + Me.chkUseTrakt.Size = New System.Drawing.Size(85, 17) + Me.chkUseTrakt.TabIndex = 6 + Me.chkUseTrakt.Text = "Use Trakt.tv" + Me.chkUseTrakt.UseVisualStyleBackColor = True + ' + 'pnlTrakt + ' + Me.pnlTrakt.Controls.Add(Me.btGetSeriesTrakt) + Me.pnlTrakt.Controls.Add(Me.btnSavetraktsettings) + Me.pnlTrakt.Controls.Add(Me.lblTraktPassword) + Me.pnlTrakt.Controls.Add(Me.txtTraktPassword) + Me.pnlTrakt.Controls.Add(Me.lblstate) + Me.pnlTrakt.Controls.Add(Me.prgtrakt) + Me.pnlTrakt.Controls.Add(Me.btSaveMoviesTrakt) + Me.pnlTrakt.Controls.Add(Me.dgvTraktWatched) + Me.pnlTrakt.Controls.Add(Me.chkUseTrakt) + Me.pnlTrakt.Controls.Add(Me.btGetMoviesTrakt) + Me.pnlTrakt.Controls.Add(Me.lblTraktUser) + Me.pnlTrakt.Controls.Add(Me.txtTraktUser) + Me.pnlTrakt.Location = New System.Drawing.Point(0, 0) + Me.pnlTrakt.Name = "pnlTrakt" + Me.pnlTrakt.Size = New System.Drawing.Size(627, 367) + Me.pnlTrakt.TabIndex = 0 + ' + 'btGetSeriesTrakt + ' + Me.btGetSeriesTrakt.Enabled = False + Me.btGetSeriesTrakt.Location = New System.Drawing.Point(140, 208) + Me.btGetSeriesTrakt.Name = "btGetSeriesTrakt" + Me.btGetSeriesTrakt.Size = New System.Drawing.Size(105, 66) + Me.btGetSeriesTrakt.TabIndex = 39 + Me.btGetSeriesTrakt.Text = "Get watched episodes" + Me.btGetSeriesTrakt.UseVisualStyleBackColor = True + ' + 'btnSavetraktsettings + ' + Me.btnSavetraktsettings.Location = New System.Drawing.Point(78, 104) + Me.btnSavetraktsettings.Name = "btnSavetraktsettings" + Me.btnSavetraktsettings.Size = New System.Drawing.Size(75, 23) + Me.btnSavetraktsettings.TabIndex = 38 + Me.btnSavetraktsettings.Text = "Save " + Me.btnSavetraktsettings.UseVisualStyleBackColor = True + ' + 'lblTraktPassword + ' + Me.lblTraktPassword.AutoSize = True + Me.lblTraktPassword.Location = New System.Drawing.Point(19, 77) + Me.lblTraktPassword.Name = "lblTraktPassword" + Me.lblTraktPassword.Size = New System.Drawing.Size(53, 13) + Me.lblTraktPassword.TabIndex = 37 + Me.lblTraktPassword.Text = "Password" + ' + 'txtTraktPassword + ' + Me.txtTraktPassword.Enabled = False + Me.txtTraktPassword.Location = New System.Drawing.Point(78, 77) + Me.txtTraktPassword.Name = "txtTraktPassword" + Me.txtTraktPassword.Size = New System.Drawing.Size(167, 20) + Me.txtTraktPassword.TabIndex = 36 + ' + 'lblstate + ' + Me.lblstate.AutoSize = True + Me.lblstate.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblstate.ForeColor = System.Drawing.Color.SteelBlue + Me.lblstate.Location = New System.Drawing.Point(251, 309) + Me.lblstate.Name = "lblstate" + Me.lblstate.Size = New System.Drawing.Size(45, 15) + Me.lblstate.TabIndex = 35 + Me.lblstate.Text = "Done!" + Me.lblstate.Visible = False + ' + 'prgtrakt + ' + Me.prgtrakt.Location = New System.Drawing.Point(22, 330) + Me.prgtrakt.Name = "prgtrakt" + Me.prgtrakt.Size = New System.Drawing.Size(274, 23) + Me.prgtrakt.TabIndex = 34 + ' + 'btSaveMoviesTrakt + ' + Me.btSaveMoviesTrakt.Enabled = False + Me.btSaveMoviesTrakt.Location = New System.Drawing.Point(22, 280) + Me.btSaveMoviesTrakt.Name = "btSaveMoviesTrakt" + Me.btSaveMoviesTrakt.Size = New System.Drawing.Size(223, 44) + Me.btSaveMoviesTrakt.TabIndex = 33 + Me.btSaveMoviesTrakt.Text = "Save playcount to database/Nfo" + Me.btSaveMoviesTrakt.UseVisualStyleBackColor = True + ' + 'dgvTraktWatched + ' + Me.dgvTraktWatched.AllowUserToAddRows = False + Me.dgvTraktWatched.AllowUserToDeleteRows = False + Me.dgvTraktWatched.AllowUserToResizeColumns = False + Me.dgvTraktWatched.AllowUserToResizeRows = False + Me.dgvTraktWatched.BackgroundColor = System.Drawing.Color.White + Me.dgvTraktWatched.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing + Me.dgvTraktWatched.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.col1, Me.col2}) + Me.dgvTraktWatched.Location = New System.Drawing.Point(302, 16) + Me.dgvTraktWatched.MultiSelect = False + Me.dgvTraktWatched.Name = "dgvTraktWatched" + Me.dgvTraktWatched.RowHeadersVisible = False + Me.dgvTraktWatched.RowHeadersWidth = 175 + Me.dgvTraktWatched.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.dgvTraktWatched.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect + Me.dgvTraktWatched.ShowCellErrors = False + Me.dgvTraktWatched.ShowCellToolTips = False + Me.dgvTraktWatched.ShowRowErrors = False + Me.dgvTraktWatched.Size = New System.Drawing.Size(314, 338) + Me.dgvTraktWatched.TabIndex = 32 + ' + 'col1 + ' + Me.col1.Frozen = True + Me.col1.HeaderText = "Title" + Me.col1.Name = "col1" + Me.col1.Width = 250 + ' + 'col2 + ' + Me.col2.Frozen = True + Me.col2.HeaderText = "Played" + Me.col2.Name = "col2" + Me.col2.Width = 64 + ' + 'frmTrakt + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(628, 366) + Me.Controls.Add(Me.pnlTrakt) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTrakt" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "frmTrakt" + Me.pnlTrakt.ResumeLayout(False) + Me.pnlTrakt.PerformLayout() + CType(Me.dgvTraktWatched, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents txtTraktUser As System.Windows.Forms.TextBox + Friend WithEvents lblTraktUser As System.Windows.Forms.Label + Friend WithEvents btGetMoviesTrakt As System.Windows.Forms.Button + Friend WithEvents chkUseTrakt As System.Windows.Forms.CheckBox + Friend WithEvents pnlTrakt As System.Windows.Forms.Panel + Friend WithEvents dgvTraktWatched As System.Windows.Forms.DataGridView + Friend WithEvents btSaveMoviesTrakt As System.Windows.Forms.Button + Friend WithEvents prgtrakt As System.Windows.Forms.ProgressBar + Friend WithEvents lblstate As System.Windows.Forms.Label + Friend WithEvents col1 As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents col2 As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents txtTraktPassword As System.Windows.Forms.TextBox + Friend WithEvents lblTraktPassword As System.Windows.Forms.Label + Friend WithEvents btnSavetraktsettings As System.Windows.Forms.Button + Friend WithEvents btGetSeriesTrakt As System.Windows.Forms.Button +End Class diff --git a/Addons/multi.EmberExtras/frmTrakt.resx b/Addons/multi.EmberExtras/frmTrakt.resx new file mode 100644 index 0000000..57034ac --- /dev/null +++ b/Addons/multi.EmberExtras/frmTrakt.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + \ No newline at end of file diff --git a/Addons/multi.EmberExtras/frmTrakt.vb b/Addons/multi.EmberExtras/frmTrakt.vb new file mode 100644 index 0000000..df5137d --- /dev/null +++ b/Addons/multi.EmberExtras/frmTrakt.vb @@ -0,0 +1,481 @@ +Imports System.Windows.Forms +Imports System.Xml.Serialization +Imports System.IO +Imports EmberAPI + +Public Class frmTrakt + Public Event ModuleSettingsChanged() + Dim myWatchedMovies As New Dictionary(Of String, KeyValuePair(Of String, Integer)) + Dim myWatchedEpisodes As New Dictionary(Of String, KeyValuePair(Of String, List(Of SeasonClass))) + Dim bkWrk As New System.ComponentModel.BackgroundWorker() + + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + SetUp() + End Sub + + Sub SetUp() + lblstate.Visible = False + prgtrakt.Value = 0 + prgtrakt.Maximum = myWatchedMovies.Count + prgtrakt.Minimum = 0 + prgtrakt.Step = 1 + chkUseTrakt.Text = Master.eLang.GetString(68, "Use trakt.tv as source for ""Playcount""") + btGetMoviesTrakt.Text = Master.eLang.GetString(70, "Get watched movies") + btSaveMoviesTrakt.Text = Master.eLang.GetString(71, "Save playcount to database/Nfo") + txtTraktUser.Text = Master.eSettings.TraktUser + lblTraktUser.Text = Master.eLang.GetString(73, "Username") + txtTraktPassword.Text = Master.eSettings.TraktPassword + lblTraktPassword.Text = Master.eLang.GetString(74, "Password") + btGetSeriesTrakt.Text = Master.eLang.GetString(75, "Get watched episodes") + btnSavetraktsettings.Text = Master.eLang.GetString(76, "Save") + txtTraktPassword.PasswordChar = "*"c + + If Not String.IsNullOrEmpty(Master.eSettings.UseTrakt.ToString) Then + chkUseTrakt.Checked = Master.eSettings.UseTrakt + End If + dgvTraktWatched.DataSource = Nothing + dgvTraktWatched.Rows.Clear() + + If Master.eSettings.UseTrakt = True Then + txtTraktUser.Enabled = True + txtTraktPassword.Enabled = True + If Not String.IsNullOrEmpty(Master.eSettings.TraktUser) AndAlso Not String.IsNullOrEmpty(Master.eSettings.TraktPassword) Then + btGetMoviesTrakt.Enabled = True + btGetSeriesTrakt.Enabled = True + Else + btGetMoviesTrakt.Enabled = False + btGetSeriesTrakt.Enabled = False + End If + Else + btGetMoviesTrakt.Enabled = False + btGetSeriesTrakt.Enabled = False + txtTraktUser.Enabled = False + End If + End Sub + 'Little Control over Form-Controls + Private Sub chkUseTrakt_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseTrakt.CheckedChanged + If chkUseTrakt.Checked = True Then + If Not String.IsNullOrEmpty(txtTraktUser.Text) AndAlso Not String.IsNullOrEmpty(txtTraktPassword.Text) Then + btGetMoviesTrakt.Enabled = True + btGetSeriesTrakt.Enabled = True + End If + txtTraktUser.Enabled = True + txtTraktPassword.Enabled = True + Else + btGetMoviesTrakt.Enabled = False + btGetSeriesTrakt.Enabled = False + txtTraktUser.Enabled = False + txtTraktPassword.Enabled = False + End If + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTraktUser_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTraktUser.TextChanged + RaiseEvent ModuleSettingsChanged() + If Not String.IsNullOrEmpty(txtTraktUser.Text) AndAlso txtTraktUser.Enabled = True Then + btGetMoviesTrakt.Enabled = True + btGetSeriesTrakt.Enabled = True + Else + btGetMoviesTrakt.Enabled = False + btGetSeriesTrakt.Enabled = False + End If + End Sub + + Private Sub txtTraktPassword_TextChanged(sender As Object, e As EventArgs) Handles txtTraktPassword.TextChanged + RaiseEvent ModuleSettingsChanged() + If Not String.IsNullOrEmpty(txtTraktPassword.Text) AndAlso txtTraktPassword.Enabled = True Then + btGetMoviesTrakt.Enabled = True + btGetSeriesTrakt.Enabled = True + Else + btGetMoviesTrakt.Enabled = False + btGetSeriesTrakt.Enabled = False + End If + End Sub + + Private Sub btGetMoviesTrakt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btGetMoviesTrakt.Click + myWatchedEpisodes = Nothing + dgvTraktWatched.DataSource = Nothing + dgvTraktWatched.Rows.Clear() + ' myWatchedMovies.Clear() + + If Not String.IsNullOrEmpty(txtTraktUser.Text) AndAlso chkUseTrakt.Checked = True AndAlso Not String.IsNullOrEmpty(txtTraktPassword.Text) Then + myWatchedMovies = GetWatchedMoviesFromTrakt(txtTraktUser.Text, txtTraktPassword.Text) + End If + dgvTraktWatched.AutoGenerateColumns = True + If Not myWatchedMovies Is Nothing Then + btSaveMoviesTrakt.Enabled = True + 'we map to dgv manually + dgvTraktWatched.AutoGenerateColumns = False + 'fill rows + For Each Item In myWatchedMovies + dgvTraktWatched.Rows.Add(New Object() {Item.Key, Item.Value.Value}) + Next + Else + btSaveMoviesTrakt.Enabled = False + End If + End Sub + + Private Sub btGetSeriesTrakt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btGetSeriesTrakt.Click + myWatchedMovies = Nothing + dgvTraktWatched.DataSource = Nothing + dgvTraktWatched.Rows.Clear() + ' myWatchedMovies.Clear() + + If Not String.IsNullOrEmpty(txtTraktUser.Text) AndAlso chkUseTrakt.Checked = True AndAlso Not String.IsNullOrEmpty(txtTraktPassword.Text) Then + myWatchedEpisodes = GetWatchedEpisodesFromTrakt(txtTraktUser.Text, txtTraktPassword.Text) + End If + dgvTraktWatched.AutoGenerateColumns = True + If Not myWatchedEpisodes Is Nothing Then + btSaveMoviesTrakt.Enabled = True + 'we map to dgv manually + dgvTraktWatched.AutoGenerateColumns = False + 'fill rows + For Each Item In myWatchedEpisodes + 'x = Episodes watched für specific tv show, use a loop to sum up the episodes of tvshow + Dim x As Integer = 0 + For i = 0 To Item.Value.Value.Count - 1 + x = x + Item.Value.Value.Item(i).episodes.Count + Next + + dgvTraktWatched.Rows.Add(New Object() {Item.Key, x}) + Next + Else + btSaveMoviesTrakt.Enabled = False + End If + End Sub + + Private Sub btnSavetraktsettings_Click(sender As Object, e As EventArgs) Handles btnSavetraktsettings.Click + SaveChanges() + End Sub + + Public Sub SaveChanges() + Master.eSettings.TraktUser = txtTraktUser.Text + Master.eSettings.TraktPassword = txtTraktPassword.Text + Master.eSettings.UseTrakt = chkUseTrakt.Checked + If Not String.IsNullOrEmpty(Master.eSettings.TraktUser) AndAlso Master.eSettings.UseTrakt = True AndAlso Not String.IsNullOrEmpty(Master.eSettings.TraktPassword) Then + btGetMoviesTrakt.Enabled = True + btGetSeriesTrakt.Enabled = True + Else + btGetMoviesTrakt.Enabled = False + btGetSeriesTrakt.Enabled = False + End If + End Sub + + Private Sub btSaveMoviesTrakt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btSaveMoviesTrakt.Click + If Not String.IsNullOrEmpty(txtTraktUser.Text) AndAlso chkUseTrakt.Checked = True AndAlso Not String.IsNullOrEmpty(txtTraktPassword.Text) Then + 'Movies + If Not myWatchedMovies Is Nothing Then + prgtrakt.Value = 0 + prgtrakt.Maximum = myWatchedMovies.Count + prgtrakt.Minimum = 0 + prgtrakt.Step = 1 + btSaveMoviesTrakt.Enabled = False + Dim traktthread As Threading.Thread + traktthread = New Threading.Thread(AddressOf SaveMoviePlaycount) + traktthread.IsBackground = True + traktthread.Start() + 'Tv-Show + ElseIf Not myWatchedEpisodes Is Nothing Then + prgtrakt.Value = 0 + prgtrakt.Maximum = myWatchedEpisodes.Count + 'start not with empty progressbar(no problem for movies) because it takes long to update for first tv show and user might think it hangs -> set value 1 to show something is going on + If myWatchedEpisodes.Count > 1 Then + prgtrakt.Value = 1 + End If + prgtrakt.Minimum = 0 + prgtrakt.Step = 1 + btSaveMoviesTrakt.Enabled = False + Dim traktthread As Threading.Thread + traktthread = New Threading.Thread(AddressOf SaveEpisodePlaycount) + traktthread.IsBackground = True + traktthread.Start() + End If + + End If + End Sub + + + 'Save plays-information from trakt.tv to database/nfo - Movie Thread + Private Sub SaveMoviePlaycount() + Try + + Dim i As Integer = 0 + For Each watchedMovieData In myWatchedMovies + i = i + 1 + Master.DB.SaveMoviePlayCountInDatabase(watchedMovieData) + ' Invoke to update UI from thread... + prgtrakt.Invoke(New UpdateProgressBarDelegate(AddressOf UpdateProgressBar), i) + Threading.Thread.Sleep(10) + Next + + Catch ex As Exception + + End Try + + End Sub + + 'Save plays-information from trakt.tv to database/nfo - Tv Show Thread + Private Sub SaveEpisodePlaycount() + Try + + Dim i As Integer = 0 + For Each watchedEpisodeData In myWatchedEpisodes + i = i + 1 + + 'loop through every season of certain tvshow + For z = 0 To watchedEpisodeData.Value.Value.Count - 1 + 'now go to every episode of current season + For Each episode In watchedEpisodeData.Value.Value.Item(z).episodes + '..and save playcount of every episode to database + Master.DB.SaveEpisodePlayCountInDatabase(watchedEpisodeData.Value.Key, watchedEpisodeData.Value.Value.Item(z).season.ToString, episode.ToString) + Next + Next + ' Invoke to update UI from thread... + prgtrakt.Invoke(New UpdateProgressBarDelegate(AddressOf UpdateProgressBar), i) + Threading.Thread.Sleep(10) + Next + + Catch ex As Exception + + End Try + + End Sub + + + Private Delegate Sub UpdateProgressBarDelegate(ByVal i As Integer) + ' Do all the ui thread updates here + 'Use progressbar to show user progress of saving, since it can take some time + Private Sub UpdateProgressBar(ByVal i As Integer) + If i = 1 Then + lblstate.Visible = False + End If + + prgtrakt.Value = i + If Not myWatchedMovies Is Nothing Then + If i = myWatchedMovies.Count - 1 Then + lblstate.Text = "Done!" + lblstate.Visible = True + End If + ElseIf Not myWatchedEpisodes Is Nothing Then + If i = myWatchedEpisodes.Count - 1 Then + lblstate.Text = "Done!" + lblstate.Visible = True + End If + End If + + + End Sub + + ''' + ''' cocotus 2013/02 Trakt.tv syncing: Movies + ''' Connects with trakt.tv Website and gets Watched Movies from specific User and returns them in special Dictionary + ''' More Info here: http://trakt.tv/api-docs/user-library-movies-watched + ''' + ''' Username + ''' password + ''' 3 values in dictionary: IMDBID (ex: tt0114746), Title, Playcount/Plays + Public Shared Function GetWatchedMoviesFromTrakt(ByVal traktID As String, ByVal traktPW As String) As Dictionary(Of String, KeyValuePair(Of String, Integer)) + + Dim wc As New Net.WebClient + Try + 'Saving 3 values in Dictionary style + Dim dictMovieWatched As New Dictionary(Of String, KeyValuePair(Of String, Integer)) + + 'The REQUEST String (includes API-ID + UserID) + Dim URL As String = "http://api.trakt.tv/user/library/movies/watched.json/b59a24b6a3fb93fc2fb565a681bb8a1d/" & traktID + + Dim json As String = wc.DownloadString(URL) + If Not String.IsNullOrEmpty(json) Then + + 'Now we are using free 3rd party class/dll to make an easy parse of the json String + Dim client = New RestSharp.RestClient(URL) + 'added basic authentification, to get even protected user information + client.Authenticator = New RestSharp.HttpBasicAuthenticator(traktID, traktPW) + Dim request = New RestSharp.RestRequest(RestSharp.Method.[GET]) + Dim response = client.Execute(Of List(Of TraktWatchedMovieData))(request) + + If Not response Is Nothing Then + 'Now loop through to every entry + For Each Item As TraktWatchedMovieData In response.Data + 'Check if information is stored... + If Not Item.title Is Nothing AndAlso Item.title <> "" AndAlso Not Item.imdb_id Is Nothing AndAlso Item.imdb_id <> "" Then + If Not dictMovieWatched.ContainsKey(Item.title) Then + 'Now store imdbid, title and playcount information into dictionary (for now no other info needed...) + If Item.imdb_id.Length > 2 AndAlso Item.imdb_id.Substring(0, 2) = "tt" Then + 'IMDBID beginning with tt -> strip tt first and save only number! + dictMovieWatched.Add(Item.title, New KeyValuePair(Of String, Integer)(Item.imdb_id.Substring(2), CInt(Item.plays))) + Else + 'IMDBID is alright + dictMovieWatched.Add(Item.title, New KeyValuePair(Of String, Integer)(Item.imdb_id, CInt(Item.plays))) + End If + End If + End If + Next + End If + End If + wc.Dispose() + Return dictMovieWatched + + Catch ex As Exception + wc.Dispose() + Return Nothing + End Try + End Function + + ''' + ''' cocotus 2013/03 Trakt.tv syncing: TV Shows + ''' Connects with trakt.tv Website and gets Watched Episodes from specific User and returns them in a special Dictionary + ''' More Info here: http://trakt.tv/api-docs/user-library-shows-watched + ''' + ''' Username + ''' password + ''' 3 values in dictionary: TvShowTitle, TVDBID, Special Season Class (Season + Watched Episodes in list) + Public Shared Function GetWatchedEpisodesFromTrakt(ByVal traktID As String, ByVal traktPW As String) As Dictionary(Of String, KeyValuePair(Of String, List(Of SeasonClass))) + + Dim wc As New Net.WebClient + Try + 'Saving 3 values in Dictionary style + Dim dictMovieWatched As New Dictionary(Of String, KeyValuePair(Of String, List(Of SeasonClass))) + + 'The REQUEST String (includes API-ID + UserID) + Dim URL As String = "http://api.trakt.tv/user/library/shows/watched.json/b59a24b6a3fb93fc2fb565a681bb8a1d/" & traktID + + Dim json As String = wc.DownloadString(URL) + If Not String.IsNullOrEmpty(json) Then + + 'Now we are using free 3rd party class/dll to make an easy parse of the json String + Dim client = New RestSharp.RestClient(URL) + 'added basic authentification, to get even protected user information + client.Authenticator = New RestSharp.HttpBasicAuthenticator(traktID, traktPW) + Dim request = New RestSharp.RestRequest(RestSharp.Method.[GET]) + Dim response = client.Execute(Of List(Of TraktWatchedEpisodeData))(request) + + If Not response Is Nothing Then + 'Now loop through to every entry + For Each Item As TraktWatchedEpisodeData In response.Data + 'Check if information is stored... + If Not Item.title Is Nothing AndAlso Item.title <> "" AndAlso Not Item.tvdb_id Is Nothing AndAlso Item.tvdb_id <> "" Then + If Not dictMovieWatched.ContainsKey(Item.title) Then + 'Now store tvdbID, title and the season-episode-list in dictionary... + dictMovieWatched.Add(Item.title, New KeyValuePair(Of String, List(Of SeasonClass))(Item.tvdb_id, Item.seasons)) + End If + End If + Next + End If + End If + wc.Dispose() + Return dictMovieWatched + + Catch ex As Exception + wc.Dispose() + Return Nothing + End Try + End Function + + +End Class + +'New Class which holds/described an item of WatcheMovie on trakt.tv +'Todo Expand class move to seperate project and build wrapper around +Public Class TraktWatchedMovieData + Private m_title As String + Public Property title() As String + Get + Return m_title + End Get + Set(value As String) + m_title = value + End Set + End Property + + Private m_url As String + Public Property url() As String + Get + Return m_url + End Get + Set(value As String) + m_url = value + End Set + End Property + + Private m_imdb_id As String + Public Property imdb_id() As String + Get + Return m_imdb_id + End Get + Set(value As String) + m_imdb_id = value + End Set + End Property + + Private m_plays As String + Public Property plays() As String + Get + Return m_plays + End Get + Set(value As String) + m_plays = value + End Set + End Property + +End Class + +'New Class which holds/described an item of WatchedEpsiode on trakt.tv +'Todo Expand class move to seperate project and build wrapper around +Public Class TraktWatchedEpisodeData + Private m_title As String + Public Property title() As String + Get + Return m_title + End Get + Set(value As String) + m_title = value + End Set + End Property + + Private m_tvdb_id As String + Public Property tvdb_id() As String + Get + Return m_tvdb_id + End Get + Set(value As String) + m_tvdb_id = value + End Set + End Property + + Private m_seasons As List(Of SeasonClass) + Public Property seasons() As List(Of SeasonClass) + Get + Return m_seasons + End Get + Set(value As List(Of SeasonClass)) + m_seasons = value + End Set + End Property + +End Class +'Child-Class of Episode Class, to store watched episodes +Public Class SeasonClass + Private m_season As Integer + Public Property season() As Integer + Get + Return m_season + End Get + Set(value As Integer) + m_season = value + End Set + End Property + + Private m_episode As List(Of Integer) + Public Property episodes() As List(Of Integer) + Get + Return m_episode + End Get + Set(value As List(Of Integer)) + m_episode = value + End Set + End Property + +End Class diff --git a/Addons/multi.EmberExtras/genericGenresEditor.vb b/Addons/multi.EmberExtras/genericGenresEditor.vb index 5295aa6..a69677b 100644 --- a/Addons/multi.EmberExtras/genericGenresEditor.vb +++ b/Addons/multi.EmberExtras/genericGenresEditor.vb @@ -60,10 +60,10 @@ Public Class genericGenresEditor Public Function InjectSetup() As EmberAPI.Containers.SettingsPanel Implements EmberAPI.Interfaces.EmberExternalModule.InjectSetup Dim SPanel As New Containers.SettingsPanel Me.fGenres = New frmGenresEditor - SPanel.Name = Master.eLang.GetString(1, "Genres Editor") - SPanel.Text = Master.eLang.GetString(1, "Genres Editor") + SPanel.Name = Master.eLang.GetString(1, "Genres Editor", False) + SPanel.Text = Master.eLang.GetString(1, "Genres Editor", False) SPanel.Prefix = "GenresEditor_" - SPanel.Type = Master.eLang.GetString(822, "Miscellaneous") + SPanel.Type = Master.eLang.GetString(822, "Miscellaneous", True) SPanel.ImageIndex = -1 SPanel.Image = My.Resources.GenresEditor SPanel.Order = 100 diff --git a/Addons/multi.EmberExtras/genericMediaSources.vb b/Addons/multi.EmberExtras/genericMediaSources.vb index a62fa35..8fd70b1 100644 --- a/Addons/multi.EmberExtras/genericMediaSources.vb +++ b/Addons/multi.EmberExtras/genericMediaSources.vb @@ -61,10 +61,10 @@ Public Class genericMediaSources Public Function InjectSetup() As EmberAPI.Containers.SettingsPanel Implements EmberAPI.Interfaces.EmberExternalModule.InjectSetup Dim SPanel As New Containers.SettingsPanel Me.fMediaSources = New frmMediaSources - SPanel.Name = Master.eLang.GetString(61, "Media Sources Editor") - SPanel.Text = Master.eLang.GetString(61, "Media Sources Editor") + SPanel.Name = Master.eLang.GetString(61, "Media Sources Editor", False) + SPanel.Text = Master.eLang.GetString(61, "Media Sources Editor", False) SPanel.Prefix = "MediaSourcesEditor_" - SPanel.Type = Master.eLang.GetString(822, "Miscellaneous") + SPanel.Type = Master.eLang.GetString(822, "Miscellaneous", True) SPanel.ImageIndex = -1 SPanel.Image = My.Resources.MediaSourcesEditor SPanel.Order = 100 diff --git a/Addons/multi.EmberExtras/genericMetadataEditor.vb b/Addons/multi.EmberExtras/genericMetadataEditor.vb index 74cc11e..e3c8145 100644 --- a/Addons/multi.EmberExtras/genericMetadataEditor.vb +++ b/Addons/multi.EmberExtras/genericMetadataEditor.vb @@ -61,10 +61,10 @@ Public Class genericMetadataEditor Public Function InjectSetup() As EmberAPI.Containers.SettingsPanel Implements EmberAPI.Interfaces.EmberExternalModule.InjectSetup Dim SPanel As New Containers.SettingsPanel Me.fMetadata = New frmAVCodecEditor - SPanel.Name = Master.eLang.GetString(0, "Audio & Video Codec Mapping") - SPanel.Text = Master.eLang.GetString(0, "Audio & Video Codec Mapping") + SPanel.Name = Master.eLang.GetString(0, "Audio & Video Codec Mapping", False) + SPanel.Text = Master.eLang.GetString(0, "Audio & Video Codec Mapping", False) SPanel.Prefix = "AVCodecEditor_" - SPanel.Type = Master.eLang.GetString(822, "Miscellaneous") + SPanel.Type = Master.eLang.GetString(822, "Miscellaneous", True) SPanel.ImageIndex = -1 SPanel.Image = My.Resources.MetadataEditor SPanel.Order = 100 diff --git a/Addons/multi.EmberExtras/genericTrakt.vb b/Addons/multi.EmberExtras/genericTrakt.vb new file mode 100644 index 0000000..446ba4b --- /dev/null +++ b/Addons/multi.EmberExtras/genericTrakt.vb @@ -0,0 +1,93 @@ +Imports EmberAPI + +Public Class genericTrakt + Implements Interfaces.EmberExternalModule + +#Region "Fields" + + Private fTrakt As frmTrakt + Private _AssemblyName As String = String.Empty + +#End Region 'Fields + +#Region "Events" + + Public Event GenericEvent(ByVal mType As EmberAPI.Enums.ModuleEventType, ByRef _params As System.Collections.Generic.List(Of Object)) Implements EmberAPI.Interfaces.EmberExternalModule.GenericEvent + + Public Event ModuleSettingsChanged() Implements EmberAPI.Interfaces.EmberExternalModule.ModuleSettingsChanged + + Public Event ModuleSetupChanged(ByVal Name As String, ByVal State As Boolean, ByVal diffOrder As Integer) Implements EmberAPI.Interfaces.EmberExternalModule.ModuleSetupChanged + +#End Region 'Events + +#Region "Properties" + + Public Property Enabled() As Boolean Implements EmberAPI.Interfaces.EmberExternalModule.Enabled + Get + Return True + End Get + Set(ByVal value As Boolean) + End Set + End Property + + Public ReadOnly Property ModuleName() As String Implements EmberAPI.Interfaces.EmberExternalModule.ModuleName + Get + Return "Trakt Settings" + End Get + End Property + + Public ReadOnly Property ModuleType() As System.Collections.Generic.List(Of EmberAPI.Enums.ModuleEventType) Implements EmberAPI.Interfaces.EmberExternalModule.ModuleType + Get + Return New List(Of Enums.ModuleEventType)(New Enums.ModuleEventType() {Enums.ModuleEventType.Generic}) + End Get + End Property + + Public ReadOnly Property ModuleVersion() As String Implements EmberAPI.Interfaces.EmberExternalModule.ModuleVersion + Get + Return FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + +#End Region 'Properties + +#Region "Methods" + + Public Sub Init(ByVal sAssemblyName As String, ByVal sExecutable As String) Implements EmberAPI.Interfaces.EmberExternalModule.Init + _AssemblyName = sAssemblyName + Master.eLang.LoadLanguage(Master.eSettings.Language, sExecutable) + End Sub + + Public Function InjectSetup() As EmberAPI.Containers.SettingsPanel Implements EmberAPI.Interfaces.EmberExternalModule.InjectSetup + Dim SPanel As New Containers.SettingsPanel + Me.fTrakt = New frmTrakt + SPanel.Name = Master.eLang.GetString(871, "Trakt Settings", False) + SPanel.Text = Master.eLang.GetString(871, "Trakt Settings", False) + SPanel.Prefix = "TraktSettings_" + SPanel.Type = Master.eLang.GetString(822, "Miscellaneous", True) + SPanel.ImageIndex = -1 + SPanel.Image = My.Resources.trakt + SPanel.Order = 100 + SPanel.Panel = Me.fTrakt.pnlTrakt + AddHandler Me.fTrakt.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + Return SPanel + End Function + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + + Public Function RunGeneric(ByVal mType As EmberAPI.Enums.ModuleEventType, ByRef _params As System.Collections.Generic.List(Of Object), ByRef _refparam As Object) As EmberAPI.Interfaces.ModuleResult Implements EmberAPI.Interfaces.EmberExternalModule.RunGeneric + End Function + + Public Sub SaveSetup(ByVal DoDispose As Boolean) Implements EmberAPI.Interfaces.EmberExternalModule.SaveSetup + fTrakt.SaveChanges() + End Sub +#End Region 'Methods + +#Region "Nested Types" + +#End Region 'Nested Types + +End Class diff --git a/Addons/multi.EmberExtras/multi.EmberExtras.vbproj b/Addons/multi.EmberExtras/multi.EmberExtras.vbproj index 5e38cfa..1e7256d 100644 --- a/Addons/multi.EmberExtras/multi.EmberExtras.vbproj +++ b/Addons/multi.EmberExtras/multi.EmberExtras.vbproj @@ -54,6 +54,10 @@ ;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules + + False + ..\..\packages\RestSharp.104.1\lib\net35\RestSharp.dll + @@ -81,6 +85,12 @@ Form + + frmTrakt.vb + + + Form + frmAVCodecEditor.vb @@ -96,6 +106,7 @@ + True @@ -126,6 +137,9 @@ frmGenresEditor.vb Designer + + frmTrakt.vb + VbMyResourcesResXFileCodeGenerator Resources.Designer.vb @@ -152,15 +166,19 @@ + + PreserveNewest + PreserveNewest PreserveNewest - + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/My Project/Settings.Designer.vb b/Addons/scraper.EmberCore.TMDB/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f020222 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.EmberScraperModule.My.MySettings + Get + Return Global.EmberScraperModule.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Addons/scraper.EmberCore.TMDB/My Project/Settings.settings b/Addons/scraper.EmberCore.TMDB/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Addons/scraper.EmberCore.TMDB/Resources/Logo.png b/Addons/scraper.EmberCore.TMDB/Resources/Logo.png new file mode 100644 index 0000000..a89dae1 Binary files /dev/null and b/Addons/scraper.EmberCore.TMDB/Resources/Logo.png differ diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeFANARTTV.vb b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeFANARTTV.vb new file mode 100644 index 0000000..13c1748 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeFANARTTV.vb @@ -0,0 +1,173 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ +' # HD Movie Logos -> logo.png (choose this first) +' # ClearLOGOs -> logo.png (use this as a backup if no HD Logo in the lanaguage specified) +' # ClearART -> clearart.png (use this as a backup if no HD ClearArt, in the language specified) +' # HDClearART -> clearart.png (choose this first) +' # cdART -> disc.png +' # Movie Backgrounds -> Fanart (this is the only fanart.tv artwork that might overlap with 'typical' artwork scraping from IMDB/TMDB) +' # Movie Banner -> Banner (not poster - Frodo supports both now, -poster.jpg/png and -banner.jpg/png or poster.jpg/png and banner.jpg/png) +' # Movie Thumbs -> landscape.png +' # Special note - the Logos and ClearArts are language-specific and should be tagged with the appropriate language. Will want to have a setting allowing users to specify a language so as not to get a bunch of foreign-language artwork. +' # 1) Logo.png - to be added at a later stage, today is not possible to save +' # 2) Clearart.png - to be added at a later stage, today is not possible to save +' # 3) Disc.png - to be added at a later stage, today is not possible to save +' # 4) Landscape.png - to be added at a later stage, today is not possible to save +' # language is in image properties + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports FanartTVAPI + +Namespace FANARTTVs + + Public Class Scraper + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _FanartTV As FanartTV.V1.FanartTV + Friend WithEvents bwFANARTTV As New System.ComponentModel.BackgroundWorker + Private _APIInvalid As Boolean = False +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _FanartTV = New FanartTV.V1.FanartTV(_MySettings.FANARTTVApiKey) + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest("1", "JSON", "all", 1, 1)) + If IsNothing(Result) Then + If Not IsNothing(_FanartTV.Error) Then + Master.eLog.WriteToErrorLog(_FanartTV.Error, "", "Error") + _APIInvalid = True + End If + End If + End Sub + + Public Sub Cancel() + If Me.bwFANARTTV.IsBusy Then Me.bwFANARTTV.CancelAsync() + + While Me.bwFANARTTV.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwFANARTTV.IsBusy Then + bwFANARTTV.WorkerSupportsCancellation = True + bwFANARTTV.WorkerReportsProgress = True + bwFANARTTV.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetFANARTTVImages(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + If _APIInvalid Then + Return Nothing + End If + Try + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest(imdbID, "JSON", "all", 1, 2)) + If bwFANARTTV.CancellationPending Then Return Nothing + If IsNothing(Result) Then Return alPoster + If IsNothing(Result.movieinfo.moviebackground) Then Return alPoster + For Each image In Result.movieinfo.moviebackground + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = image.url}) + alPoster.Add(New MediaContainers.Image With {.Description = "thumb", .URL = image.url & "/preview"}) + Next + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwFANARTTVA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTV.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetFANARTTVImages(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwFANARTTV_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTV.ProgressChanged + If Not bwFANARTTV.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwFANARTTV_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTV.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeIMDB.vb b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeIMDB.vb new file mode 100644 index 0000000..ec6d1be --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeIMDB.vb @@ -0,0 +1,174 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports System.Diagnostics +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMDBimg + + Public Class Scraper + +#Region "Fields" + + + + Friend WithEvents bwIMDBimg As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If Me.bwIMDBimg.IsBusy Then Me.bwIMDBimg.CancelAsync() + + While Me.bwIMDBimg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMDBimg.IsBusy Then + bwIMDBimg.WorkerSupportsCancellation = True + bwIMDBimg.WorkerReportsProgress = True + bwIMDBimg.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMDBimg.CancellationPending Then Return Nothing + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", imdbID, "")) + sHTTP = Nothing + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(1) + End If + + + ' check existence of a line like this + ' 0 Then + debug.print("GetIMDBPoster 1 - {0}", mcIMDB(0).Value) + 'Dim sUrl1 As String = sHTTP.DownloadData(mcIMDB(0).Value) + mcIMDB = Regex.Matches(HTML, "http://ia.media-imdb.com/images/.{3,80}?.jpg") + If mcIMDB.Count > 0 Then + 'just use the first one if more are found + Debug.Print("GetIMDBPoster 2 - {0}", mcIMDB(0).Value) + alPoster.Add(New MediaContainers.Image With {.Description = "cover", .URL = mcIMDB(0).Value}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(2) + End If + + Dim aSP As String() = Regex.Split(mcIMDB(0).Value, "._V\d+?_SY\d+?_CR\d+?,\d+?,\d+?,\d+?_") + Dim sUrl1 = aSP(0) + aSP(1) + Debug.Print("GetIMDBPoster 3 - {0}", sUrl1) + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = sUrl1}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMDBimg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBimg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMDBimg_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBimg.ProgressChanged + If Not bwIMDBimg.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMDBimg_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBimg.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeIMPA.vb b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeIMPA.vb new file mode 100644 index 0000000..cfe43a1 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeIMPA.vb @@ -0,0 +1,189 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMPA + + Public Class Scraper + + #Region "Fields" + + + + Friend WithEvents bwIMPA As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwIMPA.IsBusy Then Me.bwIMPA.CancelAsync() + + While Me.bwIMPA.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMPA.IsBusy Then + bwIMPA.WorkerSupportsCancellation = True + bwIMPA.WorkerReportsProgress = True + bwIMPA.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMPAPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMPA.CancellationPending Then Return Nothing + Dim sURL As String = GetLink(imdbID) + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(1) + End If + + If Not String.IsNullOrEmpty(sURL) Then + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If bwIMPA.CancellationPending Then Return Nothing + + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(2) + End If + + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + + Dim PosterURL As String + + For Each mPoster As Match In mcPoster + If bwIMPA.CancellationPending Then Return Nothing + PosterURL = Strings.Replace(String.Format("{0}/{1}", sURL.Substring(0, sURL.LastIndexOf("/")), mPoster.Value.ToString()).Replace("thumbs", "posters"), "imp_", String.Empty) + + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + + PosterURL = PosterURL.Insert(PosterURL.LastIndexOf("."), "_xlg") + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = PosterURL}) + Next + End If + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMPA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPA.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMPAPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMPA_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPA.ProgressChanged + If Not bwIMPA.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMPA_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPA.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + Private Function GetLink(ByVal IMDBID As String) As String + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) + sHTTP = Nothing + + Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") + If mcIMPA.Count > 0 Then + 'just use the first one if more are found + Return mcIMPA(0).Value.ToString + Else + Return String.Empty + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return String.Empty + End Try + End Function + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + Dim sType As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeImages.vb b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeImages.vb new file mode 100644 index 0000000..d335b62 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeImages.vb @@ -0,0 +1,1209 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Public Class ScrapeImages + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private TMDB As TMDB.Scraper + Private IMPA As New IMPA.Scraper + Private MPDB As New MPDB.Scraper + Private IMDB As New IMDBimg.Scraper + Private FANARTTVs As FANARTTVs.Scraper + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Function GetPreferredImage(ByRef Image As Images, ByVal IMDBID As String, ByVal TMDBID As String, ByVal iType As Enums.ImageType, ByRef imgResult As Containers.ImgResult, ByVal sPath As String, ByVal doETs As Boolean, Optional ByVal doAsk As Boolean = False) As Boolean + '// + ' Try to get the best match between what the user selected in settings and the actual posters downloaded + '\\ + + Dim hasImages As Boolean = False + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim tmpListIMPA As New List(Of MediaContainers.Image) + Dim tmpListIMDB As New List(Of MediaContainers.Image) + Dim tmpListMPDB As New List(Of MediaContainers.Image) + Dim tmpIMDBX As Images = Nothing + Dim tmpIMDBL As Images = Nothing + Dim tmpIMDBM As Images = Nothing + Dim tmpIMDBS As Images = Nothing + Dim tmpIMDBW As Images = Nothing + Dim tmpTMDBX As Images = Nothing + Dim tmpTMDBL As Images = Nothing + Dim tmpTMDBM As Images = Nothing + Dim tmpTMDBS As Images = Nothing + Dim tmpTMDBW As Images = Nothing + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) + + Try + + If iType = Enums.ImageType.Posters Then 'posters + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tImage.URL) + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + tmpListTMDB.AddRange(TMDB.GetTMDBImages(TMDBID, "poster")) + + If _MySettings.UseIMPA Then + tmpListTMDB.AddRange(IMPA.GetIMPAPosters(IMDBID)) + End If + + If _MySettings.UseMPDB Then + tmpListMPDB.AddRange(MPDB.GetMPDBPosters(IMDBID)) + End If + + If _MySettings.UseIMDB Then + tmpListTMDB.AddRange(IMDB.GetIMDBPosters(IMDBID)) + End If + + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) + If Not IsNothing(tmdbThumb.WebImage.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) + End If + Image.Clear() + Next + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + End If + Else + 'download all TMBD images + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "poster") + + 'check each one for it's size to see if it matched the preferred size + If tmpListTMDB.Count > 0 Then + hasImages = True + + If Not Master.eSettings.NoSaveImagesToNfo Then + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + imgResult.Posters.Add(tmdbThumb.URL) + Next + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Xlrg + If iMovie.Description.ToLower = "original" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Lrg + If iMovie.Description.ToLower = "mid" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Mid + If iMovie.Description.ToLower = "cover" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Small + If iMovie.Description.ToLower = "thumb" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + 'no "wide" for TMDB + End Select + Image.Clear() + Next + End If + + If _MySettings.UseIMDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB found... try IMPA + + tmpListIMDB = IMDB.GetIMDBPosters(IMDBID) + + If tmpListIMDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMDBX) Then + tmpIMDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMDBL) Then + tmpIMDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMDBM) Then + tmpIMDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMDBS) Then + tmpIMDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMDBW) Then + tmpIMDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseIMPA Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from IMDB found... try IMPA + + tmpListIMPA = IMPA.GetIMPAPosters(IMDBID) + + If tmpListIMPA.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMPA + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMPAX) Then + tmpIMPAX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMPAL) Then + tmpIMPAL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMPAM) Then + tmpIMPAM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMPAS) Then + tmpIMPAS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMPAW) Then + tmpIMPAW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseMPDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB or IMPA found... try MPDB + + tmpListMPDB = MPDB.GetMPDBPosters(IMDBID) + + If tmpListMPDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListMPDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpMPDBX) Then + tmpMPDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpMPDBL) Then + tmpMPDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpMPDBM) Then + tmpMPDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpMPDBS) Then + tmpMPDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpMPDBW) Then + tmpMPDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If IsNothing(Image.Image) AndAlso Not doAsk Then + 'STILL no image found, just get the first available image, starting with the largest + 'check TMDB first + If tmpListTMDB.Count > 0 Then + Dim x = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If x.Count > 0 Then + Image.FromWeb(x(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "cover" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + End If + + Image.Clear() + + If _MySettings.UseIMDB Then + If tmpListIMDB.Count > 0 Then + If Not IsNothing(tmpIMDBX) Then + Image = tmpIMDBX + GoTo foundIT + End If + If Not IsNothing(tmpIMDBL) Then + Image = tmpIMDBL + GoTo foundIT + End If + If Not IsNothing(tmpIMDBM) Then + Image = tmpIMDBM + GoTo foundIT + End If + If Not IsNothing(tmpIMDBS) Then + Image = tmpIMDBS + GoTo foundIT + End If + If Not IsNothing(tmpIMDBW) Then + Image = tmpIMDBW + GoTo foundIT + End If + End If + End If + + If _MySettings.UseIMPA Then + If tmpListIMPA.Count > 0 Then + If Not IsNothing(tmpIMPAX) Then + Image = tmpIMPAX + GoTo foundIT + End If + If Not IsNothing(tmpIMPAL) Then + Image = tmpIMPAL + GoTo foundIT + End If + If Not IsNothing(tmpIMPAM) Then + Image = tmpIMPAM + GoTo foundIT + End If + If Not IsNothing(tmpIMPAS) Then + Image = tmpIMPAS + GoTo foundIT + End If + If Not IsNothing(tmpIMPAW) Then + Image = tmpIMPAW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + If _MySettings.UseMPDB Then + If tmpListMPDB.Count > 0 Then + If Not IsNothing(tmpMPDBX) Then + Image = tmpMPDBX + GoTo foundIT + End If + If Not IsNothing(tmpMPDBL) Then + Image = tmpMPDBL + GoTo foundIT + End If + If Not IsNothing(tmpMPDBM) Then + Image = tmpMPDBM + GoTo foundIT + End If + If Not IsNothing(tmpMPDBS) Then + Image = tmpMPDBS + GoTo foundIT + End If + If Not IsNothing(tmpMPDBW) Then + Image = tmpMPDBW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + End If + + End If + + Else 'fanart + + Dim ETHashes As New List(Of String) + If Master.eSettings.AutoET AndAlso doETs Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + End If + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + Image.Clear() + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + + End If + End If + End If + + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + End If + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + +foundIT: + tmpListTMDB = Nothing + tmpListIMPA = Nothing + tmpListMPDB = Nothing + Return hasImages + End Function + + Public Sub GetPreferredFAasET(ByVal IMDBID As String, ByVal sPath As String) + Dim _Image As Image + + If AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim ETHashes As New List(Of String) + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, "fanart") + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + For Each sFile As FileInfo In lFi + Select Case True + Case sFile.Name.Contains("(original)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Master.eSettings.AutoET Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + End If + Next + End If + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + 'Me.Clear() + Next + + _Image = Nothing + FileUtils.Delete.DeleteDirectory(CachePath) + + End If + End If + End If + End Sub + + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ + AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ + (AdvancedSettings.GetBooleanSetting("tUseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + Public Shared Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + End If + + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) + End Sub + + + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0) + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub + Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo + Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() + + For i As Integer = 0 To UBound(Encoders) + If Encoders(i).FormatID = Format.Guid Then + Return Encoders(i) + End If + Next + + Return Nothing + End Function +#End Region 'Methods + + + +End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeMPDB.vb b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeMPDB.vb new file mode 100644 index 0000000..cd949ec --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeMPDB.vb @@ -0,0 +1,167 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Namespace MPDB + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwMPDB As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwMPDB.IsBusy Then Me.bwMPDB.CancelAsync() + + While Me.bwMPDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String) + Try + If Not Me.bwMPDB.IsBusy Then + Me.bwMPDB.WorkerSupportsCancellation = True + Me.bwMPDB.WorkerReportsProgress = True + Me.bwMPDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetMPDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + + If Me.bwMPDB.CancellationPending Then Return Nothing + + Try + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.movieposterdb.com/movie/", imdbID)) + sHTTP = Nothing + + If Me.bwMPDB.CancellationPending Then Return Nothing + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(1) + End If + + If Regex.IsMatch(HTML, String.Concat("http://www.imdb.com/title/tt", imdbID), RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline) Then + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "http://www.movieposterdb.com/posters/[0-9_](.*?)/[0-9](.*?)/[0-9](.*?)/[a-z0-9_](.*?).jpg") + + Dim PosterURL As String = String.Empty + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(2) + End If + + For Each mPoster As Match In mcPoster + If Me.bwMPDB.CancellationPending Then Return Nothing + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "l") + alPosters.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "t") + alPosters.Add(New MediaContainers.Image With {.Description = "thumb", .URL = PosterURL}) + Next + End If + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Private Sub bwMPDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetMPDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwMPDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDB.ProgressChanged + If Not bwMPDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwMPDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeOFDB.vb b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeOFDB.vb new file mode 100644 index 0000000..2e94cca --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeOFDB.vb @@ -0,0 +1,242 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class OFDB + + #Region "Fields" + + Private imdbID As String + Private OFDBMovie As MediaContainers.Movie + Private _genre As String + Private _outline As String + Private _plot As String + Private _title As String + + #End Region 'Fields + + #Region "Constructors" + + Public Sub New(ByVal sID As String, ByRef mMovie As MediaContainers.Movie) + Clear() + imdbID = sID + OFDBMovie = mMovie + + GetOFDBDetails() + End Sub + + #End Region 'Constructors + + #Region "Properties" + + Public Property Genre() As String + Get + Return _genre + End Get + Set(ByVal value As String) + _genre = value + End Set + End Property + + Public Property Outline() As String + Get + Return _outline + End Get + Set(ByVal value As String) + _outline = value + End Set + End Property + + Public Property Plot() As String + Get + Return _plot + End Get + Set(ByVal value As String) + _plot = value + End Set + End Property + + Public Property Title() As String + Get + Return _title + End Get + Set(ByVal value As String) + _title = value + End Set + End Property + + #End Region 'Properties + + #Region "Methods" + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Sub Clear() + _title = String.Empty + _outline = String.Empty + _plot = String.Empty + _genre = String.Empty + End Sub + + Private Function GetFullPlot(ByVal sURL As String) As String + Dim FullPlot As String = String.Empty + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + Dim D, W, B As Integer + Dim tmpHTML As String + + D = Html.IndexOf("Eine Inhaltsangabe von") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim + W = tmpHTML.IndexOf("

") + If W > 0 Then + B = tmpHTML.IndexOf("

", W + 16) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("
", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return FullPlot + End Function + + Private Sub GetOFDBDetails() + Dim sURL As String = GetOFDBUrlFromIMDBID() + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(Html) Then + 'title + If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(Html, "

([^<]+)

").Groups(1).Value.ToString)) + _title = OFDBTitle + End If + + Dim D, W, B As Integer + Dim tmpHTML As String + + 'outline + If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then + D = Html.IndexOf("Inhalt:") + + If D > 0 Then + W = Html.IndexOf("
", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + + 'full plot + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then + D = Html.IndexOf("Inhalt:") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 14, L - (D + 14)).Trim + W = tmpHTML.IndexOf(" 0 Then + B = tmpHTML.IndexOf(""">[mehr]", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + End If + End If + + 'genre + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Genre) OrElse Not Master.eSettings.LockGenre Then + D = HTML.IndexOf("class=""Normal"">Genre(s):") + If D > 0 Then + W = HTML.IndexOf("", D) + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), ".*?)[""'].*?>(?.*?)") + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetOFDBUrlFromIMDBID() As String + Dim ofdbURL As String = String.Empty + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.ofdb.de/view.php?SText=", imdbID, "&Kat=IMDb&page=suchergebnis&sourceid=mozilla-search")) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(HTML) Then + Dim mcOFDBURL As MatchCollection = Regex.Matches(HTML, " 0 Then + 'just use the first one if more are found + ofdbURL = String.Concat("http://www.ofdb.de/", Regex.Match(mcOFDBURL(0).Value.ToString, """(film/([^<]+))""").Groups(1).Value.ToString) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return ofdbURL + End Function + + #End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTMDB.vb b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTMDB.vb new file mode 100644 index 0000000..9db6818 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTMDB.vb @@ -0,0 +1,282 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDB + + Public Class Scraper + +#Region "Fields" + + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Private backdrop_names(3) As v3Size + Private poster_names(5) As v3Size + + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + ' v3 does not have description anymore + poster_names(0).description = "thumb" + poster_names(0).size = "w92" + poster_names(0).width = 92 + poster_names(1).description = "w154" + poster_names(1).size = "w154" + poster_names(1).width = 154 + poster_names(2).description = "cover" + poster_names(2).size = "w185" + poster_names(2).width = 185 + poster_names(3).description = "w342" + poster_names(3).size = "w342" + poster_names(3).width = 342 + poster_names(4).description = "mid" + poster_names(4).size = "w500" + poster_names(4).width = 500 + poster_names(5).description = "original" + poster_names(5).size = "original" + poster_names(5).width = 0 + backdrop_names(0).description = "thumb" + backdrop_names(0).size = "w300" + backdrop_names(0).width = 300 + backdrop_names(1).description = "poster" + backdrop_names(1).size = "w780" + backdrop_names(1).width = 780 + backdrop_names(2).description = "w1280" + backdrop_names(2).size = "w1280" + backdrop_names(2).width = 1280 + backdrop_names(3).description = "original" + backdrop_names(3).size = "original" + backdrop_names(3).width = 0 + End Sub + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim images As V3.TmdbMovieImages + Dim aW, aH As Integer + + If bwTMDB.CancellationPending Then Return Nothing + Try + images = _TMDBApi.GetMovieImages(CInt(imdbID), _MySettings.TMDBLanguage) + If sType = "poster" Then + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + Return alPosters + End If + End If + Else + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + Return alPosters + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If sType = "poster" Then + For Each tmdbI As V3.Poster In images.posters + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In poster_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + ElseIf sType = "backdrop" Then + For Each tmdbI As V3.Backdrop In images.backdrops + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In backdrop_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As List(Of String) + Dim trailers As V3.TmdbMovieTrailers + Dim YT As New List(Of String) + + Try + If bwTMDB.CancellationPending Then Return Nothing + trailers = _TMDBApi.GetMovieTrailers(CInt(imdbID), _MySettings.TMDBLanguage) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + trailers = _TMDBApiE.GetMovieTrailers(CInt(imdbID)) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + Return Nothing + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + 'If bwTMDB.WorkerReportsProgress Then + ' bwTMDB.ReportProgress(2) + 'End If + + If trailers.youtube.Count > 0 Then + For Each trailer In trailers.youtube + YT.Add(String.Format("http://www.youtube.com/watch?v={0}{1})", trailer.source, CStr(IIf(trailer.size = "HD", "&hd=1", "")))) + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return YT + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure v3Size + +#Region "Fields" + + Dim size As String + Dim description As String + Dim width As Integer + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTMDB_old.vb b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTMDB_old.vb new file mode 100644 index 0000000..c5bca0a --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTMDB_old.vb @@ -0,0 +1,244 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports EmberAPI + +Namespace TMDB_old + + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + + Private Const APIKey As String = "b1ecff8c76278262b27de1569f57f6bd" + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB.......Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB................Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB................Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + sHTTP = Nothing + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As String + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + Dim tLang As String + + tLang = AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en") + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/{0}/tt{1}", APIKey, imdbID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + Dim tmdbNode = From xNode In xmlTMDB.Elements + + If tmdbNode.Count > 0 Then + If Not tmdbNode(0).Value = "Your query didn't return any results." Then + Dim movieID As String = xmlTMDB.............Value + Dim i As Integer + + + For i = 0 To 1 Step 1 + sHTTP = New HTTP + ApiXML = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/{0}/xml/{1}/{2}", tLang, APIKey, movieID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + Dim Trailers = From tNode In xmlTMDB......... Select tNode. + If Trailers.Count > 0 AndAlso Not String.IsNullOrEmpty(Trailers(0).Value) Then + If Trailers(0).Value.ToLower.IndexOf("youtube.com") > 0 Then + Return Trailers(0).Value + i += 1 + End If + Else + tLang = "en" + End If + End If + Next + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return String.Empty + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTMDBg.vb b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTMDBg.vb new file mode 100644 index 0000000..4f21ee0 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTMDBg.vb @@ -0,0 +1,740 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.Globalization +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDBg + + Public Class MovieSearchResults + +#Region "Fields" + + Private _Matches As New List(Of MediaContainers.Movie) + +#End Region 'Fields + +#Region "Properties" + + Public Property Matches() As List(Of MediaContainers.Movie) + Get + Return _Matches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _Matches = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class Scraper + +#Region "Fields" + + 'Public IMDBURL As String + 'Private _TMDBId As String + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Private Const IMDB_ID_REGEX As String = "tt\d\d\d\d\d\d\d" + + Friend WithEvents bwTMDBg As New System.ComponentModel.BackgroundWorker + + Private _sPoster As String + +#End Region 'Fields + +#Region "Properties" + Public ReadOnly Property TMDBConf() As V3.TmdbConfiguration + Get + Return _TMDBConf + End Get + End Property +#End Region + +#Region "Enumerations" + + Private Enum SearchType + Movies = 0 + Details = 1 + SearchDetails = 2 + End Enum + +#End Region 'Enumerations + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + + Public Event SearchResultsDownloaded(ByVal mResults As TMDBg.MovieSearchResults) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + End Sub + + Public Sub CancelAsync() + If bwTMDBg.IsBusy Then bwTMDBg.CancelAsync() + + While bwTMDBg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetMovieID(ByRef DBMovie As Structures.DBMovie) + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + + If bwTMDBg.CancellationPending Then Return + + Movie = _TMDBApi.GetMovieByIMDB(DBMovie.Movie.ID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(DBMovie.Movie.ID) + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return + End If + + DBMovie.Movie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End Sub + + Public Function GetMovieInfo(ByVal strID As String, ByRef IMDBMovie As MediaContainers.Movie, ByVal FullCrew As Boolean, ByVal FullCast As Boolean, ByVal GetPoster As Boolean, ByVal Options As Structures.ScrapeOptions, ByVal IsSearch As Boolean) As Boolean + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + Dim tStr As String + + If bwTMDBg.CancellationPending Then Return Nothing + + If Strings.Left(strID.ToLower(), 2) = "tt" Then + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(strID) + Else + Movie = _TMDBApi.GetMovieInfo(CInt(strID), _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieInfo(CInt(strID)) + End If + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return False + End If + + IMDBMovie.ID = CStr(IIf(String.IsNullOrEmpty(Movie.imdb_id) AndAlso _MySettings.FallBackEng, MovieE.imdb_id, Movie.imdb_id)) + IMDBMovie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + If bwTMDBg.CancellationPending Or IsNothing(Movie) Then Return Nothing + + Dim Keywords As WatTmdb.V3.TmdbMovieKeywords + Keywords = _TMDBApi.GetMovieKeywords(Movie.id) + If Not IsNothing(Keywords) AndAlso Not IsNothing(Keywords.keywords) Then + If Keywords.keywords.Count <> 0 AndAlso _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + End If + + ' to be added the tags structure + '' + '' ... + '' Name of the tag + '' ... + '' + If Options.bTitle Then + IMDBMovie.OriginalTitle = CStr(IIf(String.IsNullOrEmpty(Movie.original_title) AndAlso _MySettings.FallBackEng, MovieE.original_title, Movie.original_title)) + If String.IsNullOrEmpty(IMDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + IMDBMovie.Title = CStr(IIf(String.IsNullOrEmpty(Movie.title) AndAlso _MySettings.FallBackEng, MovieE.title, Movie.title)) + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If GetPoster Then + ' I will add original always. to be updated if size, TMDBConf.images.poster_sizes(0) & + Dim Images As WatTmdb.V3.TmdbMovieImages + Images = _TMDBApi.GetMovieImages(Movie.id, _MySettings.TMDBLanguage) + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If (Images.posters.Count = 0) AndAlso _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + End If + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If Images.posters.Count > 0 Then + _sPoster = _TMDBConf.images.base_url & "w92" & Images.posters(0).file_path + Else + _sPoster = "" + End If + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bYear Then IMDBMovie.Year = Left(CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)), 4) + + Dim Releases As WatTmdb.V3.TmdbMovieReleases = Nothing + If Options.bMPAA Then + IMDBMovie.MPAA = "" + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each Country In Releases.countries + If Country.iso_3166_1.ToUpper = CStr(IIf(Master.eSettings.CertificationLang = "", "US", Master.eSettings.CertificationLang)) Then + IMDBMovie.MPAA = Country.certification + Exit For + End If + Next + End If + IMDBMovie.Certification = IMDBMovie.MPAA + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bRelease Then + IMDBMovie.ReleaseDate = CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)) + End If + + If Options.bRating AndAlso (String.IsNullOrEmpty(IMDBMovie.Rating) OrElse Not Master.eSettings.LockRating) Then + IMDBMovie.Rating = CStr(IIf(IsNothing(Movie.vote_average) AndAlso Movie.vote_average = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_average, Movie.vote_average)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'trailer + If Options.bTrailer AndAlso (String.IsNullOrEmpty(IMDBMovie.Trailer) OrElse Not Master.eSettings.LockTrailer) Then + Dim Trailers As WatTmdb.V3.TmdbMovieTrailers + Trailers = _TMDBApi.GetMovieTrailers(Movie.id) + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If (Trailers.youtube.Count = 0) AndAlso _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + End If + + IMDBMovie.Trailer = "" + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If Trailers.youtube.Count > 0 Then + IMDBMovie.Trailer = "http://www.youtube.com/watch?hd=1&v=" & Trailers.youtube(0).source + End If + End If + + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bVotes Then + IMDBMovie.Votes = CStr(IIf(IsNothing(Movie.vote_count) AndAlso Movie.vote_count = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_count.ToString(), Movie.vote_count.ToString())) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Dim aCast As WatTmdb.V3.TmdbMovieCast = Nothing + If Options.bCast Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.cast.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + + Dim Cast As New List(Of MediaContainers.Person) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + For Each aAc As WatTmdb.V3.Cast In aCast.cast + Dim aPer As New MediaContainers.Person + aPer.Name = aAc.name + aPer.Role = aAc.character + ' to be added / dialog to choose the size of the images + aPer.Thumb = _TMDBConf.images.base_url & "original" & aAc.profile_path + Cast.Add(aPer) + Next + End If + IMDBMovie.Actors = Cast + End If + + If Options.bTagline AndAlso (String.IsNullOrEmpty(IMDBMovie.Tagline) OrElse Not Master.eSettings.LockTagline) Then + IMDBMovie.Tagline = CStr(IIf(String.IsNullOrEmpty(IMDBMovie.Tagline) AndAlso _MySettings.FallBackEng, MovieE.tagline, Movie.tagline)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get countries of the movie + If Options.bCountry Then + If IsNothing(Releases) Then + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + End If + IMDBMovie.Countries.Clear() + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each aCo As WatTmdb.V3.ReleaseCountry In Releases.countries + IMDBMovie.Countries.Add(aCo.iso_3166_1) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get genres of the movie + If Options.bGenre AndAlso (String.IsNullOrEmpty(IMDBMovie.Genre) OrElse Not Master.eSettings.LockGenre) Then + IMDBMovie.Genres.Clear() + Dim tGen As System.Collections.Generic.List(Of WatTmdb.V3.MovieGenre) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tGen = CType(IIf(Movie.genres.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.genres, Movie.genres), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + Else + tGen = CType(IIf(_MySettings.FallBackEng, MovieE.genres, Nothing), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + End If + + + If Not IsNothing(tGen) Then + For Each aGen As WatTmdb.V3.MovieGenre In tGen + IMDBMovie.Genres.Add(aGen.name) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bOutline AndAlso (String.IsNullOrEmpty(IMDBMovie.Outline) OrElse Not Master.eSettings.LockOutline) Then + IMDBMovie.Outline = CStr(IIf(String.IsNullOrEmpty(Movie.overview) AndAlso _MySettings.FallBackEng, MovieE.overview, Movie.overview)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bPlot AndAlso (String.IsNullOrEmpty(IMDBMovie.Plot) OrElse Not Master.eSettings.LockPlot) Then + If Master.eSettings.OutlineForPlot AndAlso String.IsNullOrEmpty(IMDBMovie.Plot) AndAlso Not String.IsNullOrEmpty(IMDBMovie.Outline) Then + IMDBMovie.Plot = IMDBMovie.Outline + Else + IMDBMovie.Plot = "" + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get the movie duration + If Options.bRuntime Then + IMDBMovie.Runtime = CStr(IIf(IsNothing(Movie.runtime) AndAlso Movie.runtime = 0 AndAlso _MySettings.FallBackEng, MovieE.runtime.ToString(), Movie.runtime.ToString())) + End If + + 'Get Production Studio + If Options.bStudio AndAlso (String.IsNullOrEmpty(IMDBMovie.Studio) OrElse Not Master.eSettings.LockStudio) Then + tStr = "" + Dim tPC As System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tPC = CType(IIf(Movie.production_companies.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.production_companies, Movie.production_companies), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + Else + tPC = CType(IIf(_MySettings.FallBackEng, MovieE.production_companies, Nothing), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + End If + + If Not IsNothing(tPC) Then + For Each aPro As WatTmdb.V3.ProductionCompany In tPC + tStr = tStr & " / " & aPro.name + Next + End If + If Len(tStr) > 3 Then + tStr = Trim(Right(tStr, Len(tStr) - 3)) + End If + IMDBMovie.Studio = tStr + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get All Other Info + If FullCrew Or Options.bWriters Or Options.bDirector Then + If IsNothing(aCast) Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.crew.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + End If + IMDBMovie.Credits.Clear() + IMDBMovie.Directors.Clear() + If Not IsNothing(aCast.crew) Then + For Each aAc As WatTmdb.V3.Crew In aCast.crew + If FullCrew Then + IMDBMovie.Credits.Add(aAc.name) + ElseIf Options.bWriters Then + If aAc.department = "Writing" AndAlso aAc.job = "Writer" Then + IMDBMovie.Credits.Add(aAc.name) + End If + End If + If Options.bDirector Then + If aAc.job = "Director" Then + IMDBMovie.Directors.Add(aAc.name) + End If + End If + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Return True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Function GetMovieStudios(ByVal strID As String) As List(Of String) + Dim alStudio As New List(Of String) + Dim Movie As WatTmdb.V3.TmdbMovie + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + If Movie.production_companies.Count = 0 And _MySettings.FallBackEng Then + Movie = _TMDBApi.GetMovieByIMDB(strID, "en") + End If + For Each aComp In Movie.production_companies + alStudio.Add(aComp.name) + Next + + Return alStudio + + End Function + + Public Function GetSearchMovieInfo(ByVal sMovieName As String, ByRef dbMovie As Structures.DBMovie, ByVal iType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As MediaContainers.Movie + Dim r As MovieSearchResults = SearchMovie(sMovieName) + Dim b As Boolean = False + Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie + + Try + Select Case iType + Case Enums.ScrapeType.FullAsk, Enums.ScrapeType.UpdateAsk, Enums.ScrapeType.NewAsk, Enums.ScrapeType.MarkAsk, Enums.ScrapeType.FilterAsk + + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + Master.tmpMovie.Clear() + Using dIMDB As New dlgTMDBSearchResults(_MySettings, Me) + + If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + b = False + Else + b = GetMovieInfo(Master.tmpMovie.ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + Else + b = False + End If + End Using + End If + Case Enums.ScrapeType.FullAuto, Enums.ScrapeType.UpdateAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.SingleScrape, Enums.ScrapeType.FilterAuto + Dim exactHaveYear As Integer = FindYear(dbMovie.Filename, r.Matches) + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + b = GetMovieInfo(r.Matches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + End Select + + If b Then + Return imdbMovie + Else + Return New MediaContainers.Movie + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New MediaContainers.Movie + End Try + End Function + + Private Function FindYear(ByVal tmpname As String, ByVal lst As List(Of MediaContainers.Movie)) As Integer + Dim tmpyear As String = "" + Dim i As Integer + Dim ret As Integer = -1 + tmpname = Path.GetFileNameWithoutExtension(tmpname) + tmpname = tmpname.Replace(".", " ").Trim.Replace("(", " ").Replace(")", "").Trim + i = tmpname.LastIndexOf(" ") + If i >= 0 Then + tmpyear = tmpname.Substring(i + 1, tmpname.Length - i - 1) + If IsNumeric(tmpyear) AndAlso Convert.ToInt32(tmpyear) > 1950 Then 'let's assume there are no movies older then 1950 + For c = 0 To lst.Count - 1 + If lst(c).Year = tmpyear Then + ret = c + Exit For + End If + Next + End If + End If + Return ret + End Function + + Public Sub GetSearchMovieInfoAsync(ByVal imdbID As String, ByVal IMDBMovie As MediaContainers.Movie, ByVal Options As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.SearchDetails, _ + .Parameter = imdbID, .IMDBMovie = IMDBMovie, .Options = Options}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + + Public Sub SearchMovieAsync(ByVal sMovie As String, ByVal filterOptions As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.Movies, _ + .Parameter = sMovie, .Options = filterOptions}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + Select Case Args.Search + Case SearchType.Movies + Dim r As MovieSearchResults = SearchMovie(Args.Parameter) + e.Result = New Results With {.ResultType = SearchType.Movies, .Result = r} + Case SearchType.SearchDetails + Dim s As Boolean = GetMovieInfo(Args.Parameter, Args.IMDBMovie, False, False, True, Args.Options, True) + e.Result = New Results With {.ResultType = SearchType.SearchDetails, .Success = s} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub BW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBg.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.ResultType + Case SearchType.Movies + RaiseEvent SearchResultsDownloaded(DirectCast(Res.Result, MovieSearchResults)) + Case SearchType.SearchDetails + Dim movieInfo As MovieSearchResults = DirectCast(Res.Result, MovieSearchResults) + RaiseEvent SearchMovieInfoDownloaded(_sPoster, Res.Success) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + 'Private Function GetForcedTitle(ByVal strID As String, ByVal oTitle As String) As String + ' Dim fTitle As String = oTitle + ' Dim Movie As WatTmdb.V3.TmdbMovie + + ' Try + ' '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + ' If Left(strID.ToLower(), 4) = "tt" Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), _MySettings.TMDBLanguage) + ' If IsNothing(Movie) And _MySettings.FallBackEng Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), "en") + ' End If + ' Else + ' Movie = _TMDBApi.GetMovieByIMDB(strID) + ' End If + + ' fTitle = Movie.title + + ' Return fTitle + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' Return fTitle + ' End Try + 'End Function + + Private Function SearchMovie(ByVal sMovie As String) As MovieSearchResults + Try + Dim R As New MovieSearchResults + Dim Page As Integer = 1 + Dim Movies As WatTmdb.V3.TmdbMovieSearch + Dim TotP As Integer + Dim aE As Boolean + Dim eMovie As WatTmdb.V3.TmdbMovie + + If Regex.IsMatch(sMovie.ToLower, IMDB_ID_REGEX) Then + Dim sIMDBID As String = Regex.Match(sMovie.ToLower, IMDB_ID_REGEX).ToString + eMovie = _TMDBApi.GetMovieByIMDB(sIMDBID, _MySettings.TMDBLanguage) + If eMovie.id > 0 Then + Dim e1 As String = eMovie.imdb_id + Dim e2 As String = CStr(IIf(String.IsNullOrEmpty(eMovie.title), "", eMovie.title)) + Dim e3 As String = Left(CStr(IIf(String.IsNullOrEmpty(eMovie.release_date), "", eMovie.release_date)), 4) + Dim eNewMovie As MediaContainers.Movie = New MediaContainers.Movie(e1, e2, e3, 0) + eNewMovie.TMDBID = eMovie.id.ToString + R.Matches.Add(eNewMovie) + End If + Else + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + If Movies.total_results = 0 And _MySettings.FallBackEng Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + aE = True + End If + If Movies.total_results > 0 Then + Dim t1 As String + Dim t2 As String + Dim t3 As String + TotP = Movies.total_pages + While Page <= TotP And Page <= 3 + For Each aMovie In Movies.results + Dim aMI As WatTmdb.V3.TmdbMovie + aMI = _TMDBApi.GetMovieInfo(aMovie.id) + If IsNothing(aMI) Then + aMI = _TMDBApiE.GetMovieInfo(aMovie.id) + End If + If IsNothing(aMI.imdb_id) Then + t1 = "" + Else + t1 = aMI.imdb_id.ToString + End If + t2 = CStr(IIf(String.IsNullOrEmpty(aMovie.title), "", aMovie.title)) + t3 = Left(CStr(IIf(String.IsNullOrEmpty(aMovie.release_date), "", aMovie.release_date)), 4) + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(t1, t2, t3, 0) + lNewMovie.TMDBID = aMI.id.ToString + R.Matches.Add(lNewMovie) + Next + Page = Page + 1 + If aE Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + Else + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + End If + + End While + End If + End If + + Return R + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Nothing + End Try + End Function + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim FullCast As Boolean + Dim FullCrew As Boolean + Dim IMDBMovie As MediaContainers.Movie + Dim Options As Structures.ScrapeOptions + Dim Parameter As String + Dim Search As SearchType + 'Dim TMDBConf As V3.TmdbConfiguration + 'Dim TMDBApi As V3.Tmdb + 'Dim FallBackEng As Boolean + 'Dim TMDBLang As String +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultType As SearchType + Dim Success As Boolean + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTrailers.vb b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTrailers.vb new file mode 100644 index 0000000..72ce5f8 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTrailers.vb @@ -0,0 +1,265 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System +Imports System.IO +Imports System.Net +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI +Imports WatTmdb + +Public Class Trailers + +#Region "Fields" + + Private WebPage As New HTTP + Private _ImdbID As String = String.Empty + Private _ImdbTrailerPage As String = String.Empty + Private _TrailerList As New List(Of String) + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + Me.Clear() + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + AddHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + Me.WebPage.Cancel() + End Sub + + Public Sub Clear() + Me._TrailerList.Clear() + Me._ImdbID = String.Empty + Me._ImdbTrailerPage = String.Empty + End Sub + + Public Sub DeleteTrailers(ByVal sPath As String, ByVal NewTrailer As String) + Dim parPath As String = Directory.GetParent(sPath).FullName + Dim tmpName As String = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(sPath))) + Dim tmpNameNoStack As String = Path.Combine(parPath, Path.GetFileNameWithoutExtension(sPath)) + For Each t As String In Master.eSettings.ValidExts + If File.Exists(String.Concat(tmpName, "-trailer", t)) AndAlso Not String.Concat(tmpName, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpName, "[trailer]", t)) AndAlso Not String.Concat(tmpName, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "[trailer]", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "-trailer", t)) AndAlso Not String.Concat(tmpNameNoStack, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) + End If + Next + End Sub + + Public Sub DownloadProgressUpdated(ByVal iPercent As Integer) + RaiseEvent ProgressUpdated(iPercent) + End Sub + + Public Function DownloadSingleTrailer(ByVal sPath As String, ByVal ImdbID As String, ByVal isSingle As Boolean, ByVal currNfoTrailer As String) As String + Dim tURL As String = String.Empty + Try + Me._TrailerList.Clear() + + If Not Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, True) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + + Dim tLink As String = String.Empty + If Regex.IsMatch(Me._TrailerList.Item(0).ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Dim YT As New YouTube.Scraper + YT.GetVideoLinks(Me._TrailerList.Item(0).ToString) + If YT.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + tLink = YT.VideoLinks(Master.eSettings.PreferredTrailerQuality).URL + Else + Select Case Master.eSettings.PreferredTrailerQuality + Case Enums.TrailerQuality.HD1080p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720p) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720p).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD1080pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720pVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720pVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HD720p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD720pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HQFLV + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HQVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.SQMP4 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.SQFLV + tLink = String.Empty + Case Enums.TrailerQuality.SQVP8 + tLink = String.Empty + End Select + End If + Else + tLink = Me._TrailerList.Item(0).ToString + End If + + If Not String.IsNullOrEmpty(tLink) Then + tURL = WebPage.DownloadFile(tLink, sPath, False, "trailer") + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + End If + ElseIf Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, False) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + tURL = Me._TrailerList.Item(0).ToString + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return tURL + End Function + + Public Function DownloadTrailer(ByVal sPath As String, ByVal sURL As String) As String + Dim tURL As String = String.Empty + If Not String.IsNullOrEmpty(sURL) Then + tURL = WebPage.DownloadFile(sURL, sPath, True, "trailer") + + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + Return tURL + End Function + + Public Function GetTrailers(ByVal ImdbID As String, Optional ByVal BreakAfterFound As Boolean = True) As List(Of String) + Me._ImdbID = ImdbID + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", False) Then + Me.GetTMDBTrailer() + End If + + Return Me._TrailerList + End Function + + Public Function IsAllowedToDownload(ByVal sPath As String, ByVal isDL As Boolean, ByVal currNfoTrailer As String, Optional ByVal isSS As Boolean = False) As Boolean + Dim fScanner As New Scanner + + If isDL Then + If String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) OrElse Master.eSettings.OverwriteTrailer Then + Return True + Else + If isSS AndAlso String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) Then + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + Else + Return False + End If + End If + Else + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + End If + End Function + + Private Sub GetTMDBTrailer() + Dim TMDB As New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim YT As List(Of String) + + YT = TMDB.GetTrailers(_ImdbID) + + If Not YT.Count = 0 Then + For Each ast In YT + Me._TrailerList.Add(ast) + Next + End If + + TMDB = Nothing + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeYouTube.vb b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeYouTube.vb new file mode 100644 index 0000000..51ed7c4 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeYouTube.vb @@ -0,0 +1,336 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace YouTube + + Public Class Scraper + +#Region "Fields" + + Friend WithEvents bwYT As New System.ComponentModel.BackgroundWorker + + Private _VideoLinks As VideoLinkItemCollection + +#End Region 'Fields + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event VideoLinksRetrieved(ByVal bSuccess As Boolean) + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property VideoLinks() As VideoLinkItemCollection + Get + If _VideoLinks Is Nothing Then + _VideoLinks = New VideoLinkItemCollection + End If + Return _VideoLinks + End Get + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() + If bwYT.IsBusy Then bwYT.CancelAsync() + + While bwYT.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetVideoLinks(ByVal url As String) + Try + _VideoLinks = ParseYTFormats(url, False) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub GetVideoLinksAsync(ByVal url As String) + Try + If Not bwYT.IsBusy Then + _VideoLinks = Nothing + bwYT.WorkerSupportsCancellation = True + bwYT.RunWorkerAsync(url) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwYT.DoWork + Dim Url As String = DirectCast(e.Argument, String) + + Try + e.Result = ParseYTFormats(Url, True) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwYT.RunWorkerCompleted + Try + If e.Cancelled Then + 'user cancelled + RaiseEvent VideoLinksRetrieved(False) + ElseIf e.Error IsNot Nothing Then + 'exception occurred + RaiseEvent Exception(e.Error) + Else + 'all good + If e.Result IsNot Nothing Then + _VideoLinks = DirectCast(e.Result, VideoLinkItemCollection) + RaiseEvent VideoLinksRetrieved(True) + Else + RaiseEvent VideoLinksRetrieved(False) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetVideoTitle(ByVal HTML As String) As String + Dim result As String = "" + 'Dim KeyPattern As String = "'VIDEO_TITLE':\s*'([^']*?)'" + Dim KeyPattern As String = "meta name=\""title\"" content=\s*\""([^']*?)\""" + 'meta name="title" content= + If Regex.IsMatch(HTML, KeyPattern) Then + result = Regex.Match(HTML, KeyPattern).Groups(1).Value + End If + + Return result + End Function + + Private Function ParseYTFormats(ByVal url As String, ByVal doProgress As Boolean) As VideoLinkItemCollection + Dim DownloadLinks As New VideoLinkItemCollection + Dim sHTTP As New HTTP + + Try + If bwYT.CancellationPending Then Return DownloadLinks + + Dim Html As String = sHTTP.DownloadData(url) + If Html.ToLower.Contains("page not found") Then + Html = String.Empty + End If + + If String.IsNullOrEmpty(Html.Trim) Then Return DownloadLinks + If bwYT.CancellationPending Then Return DownloadLinks + + Dim VideoTitle As String = GetVideoTitle(Html) + VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") + + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) + If fmtMatch.Success Then + Dim FormatMap As String = fmtMatch.Groups(1).Value + Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") + + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) + Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) + + For i As Integer = 0 To FormatArray.Length - 1 + Dim yturl As String = rurl.Match(FormatArray(i)).Groups(1).Value + Dim ytitag As String = ritag.Match(FormatArray(i)).Groups(1).Value + Dim ytsig As String = rsig.Match(FormatArray(i)).Groups(1).Value + + 'Console.WriteLine("Trailer Itag: {0}", ytitag) + 'Console.WriteLine("Trailer Url: {0}", yturl) + 'Console.WriteLine("Trailer Sig: {0}", ytsig) + + Dim Link As New VideoLinkItem + Select Case ytitag + ' ********************************************************************** + ' see all itags http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs + ' ********************************************************************** + Case "5" + Link.Description = "240p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "6" + Link.Description = "270p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "13" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "17" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "18" + Link.Description = "360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQMP4 + Case "22" + Link.Description = "720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD720p + Case "34" + Link.Description = "360p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQFLV + Case "35" + Link.Description = "480p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HQFLV + Case "36" + Link.Description = "240p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "37" + Link.Description = "1080p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD1080p + Case "38" + Link.Description = "1536p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "43" + Link.Description = "360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.SQVP8 + Case "44" + Link.Description = "480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HQVP8 + Case "45" + Link.Description = "720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD720pVP8 + Case "46" + Link.Description = "1080p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD1080pVP8 + Case "82" + Link.Description = "3D 360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "83" + Link.Description = "3D 480p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "84" + Link.Description = "3D 720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "85" + Link.Description = "3D 520p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "100" + Link.Description = "3D 360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "101" + Link.Description = "3D 480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "102" + Link.Description = "3D 720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "120" + Link.Description = "720p LiveStream (FLV, AVC)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case Else + Link.Description = "Other" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + 'Continue For + End Select + + Link.URL = Web.HttpUtility.UrlDecode(Web.HttpUtility.UrlDecode(yturl)) & "&signature=" & ytsig & "&title=" & Web.HttpUtility.UrlEncode(VideoTitle) + Link.URL = Link.URL.Replace("sig=", "signature=") ' sig= returns HTTP 403 //oldstyle, keep it + 'Console.WriteLine("Trailer Url decoded: {0}", Link.URL) + + If bwYT.CancellationPending Then Return DownloadLinks + + If Not String.IsNullOrEmpty(Link.URL) AndAlso sHTTP.IsValidURL(Link.URL) Then + DownloadLinks.Add(Link) + End If + + If bwYT.CancellationPending Then Return DownloadLinks + + Next + + End If + Return DownloadLinks + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New VideoLinkItemCollection + Finally + sHTTP = Nothing + End Try + End Function + +#End Region 'Methods + + End Class + + Public Class VideoLinkItem + +#Region "Fields" + + Private _Description As String + Private _FormatQuality As Enums.TrailerQuality + Private _URL As String + +#End Region 'Fields + +#Region "Properties" + + Public Property Description() As String + Get + Return _Description + End Get + Set(ByVal value As String) + _Description = value + End Set + End Property + + Public Property URL() As String + Get + Return _URL + End Get + Set(ByVal value As String) + _URL = value + End Set + End Property + + Friend Property FormatQuality() As Enums.TrailerQuality + Get + Return _FormatQuality + End Get + Set(ByVal value As Enums.TrailerQuality) + _FormatQuality = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class VideoLinkItemCollection + Inherits Generic.SortedList(Of Enums.TrailerQuality, VideoLinkItem) + +#Region "Methods" + + Public Shadows Sub Add(ByVal Link As VideoLinkItem) + If Not MyBase.ContainsKey(Link.FormatQuality) Then MyBase.Add(Link.FormatQuality, Link) + End Sub + +#End Region 'Methods + + End Class + +End Namespace + diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/dlgImgSelect.Designer.vb b/Addons/scraper.EmberCore.TMDB/Scraper/dlgImgSelect.Designer.vb new file mode 100644 index 0000000..3c9254c --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/dlgImgSelect.Designer.vb @@ -0,0 +1,569 @@ + _ +Partial Class dlgImgSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgImgSelect)) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.pnlSize = New System.Windows.Forms.Panel() + Me.btnPreview = New System.Windows.Forms.Button() + Me.rbSmall = New System.Windows.Forms.RadioButton() + Me.rbMedium = New System.Windows.Forms.RadioButton() + Me.rbLarge = New System.Windows.Forms.RadioButton() + Me.rbXLarge = New System.Windows.Forms.RadioButton() + Me.pnlFanart = New System.Windows.Forms.Panel() + Me.chkThumb = New System.Windows.Forms.CheckBox() + Me.chkMid = New System.Windows.Forms.CheckBox() + Me.chkOriginal = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlDLStatus = New System.Windows.Forms.Panel() + Me.pnlIMDB = New System.Windows.Forms.Panel() + Me.lblDL6Status = New System.Windows.Forms.Label() + Me.lblDL6 = New System.Windows.Forms.Label() + Me.pbDL6 = New System.Windows.Forms.ProgressBar() + Me.pnlSinglePic = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlFANARTTV = New System.Windows.Forms.Panel() + Me.lblDL3Status = New System.Windows.Forms.Label() + Me.lblDL3 = New System.Windows.Forms.Label() + Me.pbDL3 = New System.Windows.Forms.ProgressBar() + Me.pnlMDB = New System.Windows.Forms.Panel() + Me.lblDL5Status = New System.Windows.Forms.Label() + Me.lblDL5 = New System.Windows.Forms.Label() + Me.pbDL5 = New System.Windows.Forms.ProgressBar() + Me.pnlIMPA = New System.Windows.Forms.Panel() + Me.lblDL4Status = New System.Windows.Forms.Label() + Me.lblDL4 = New System.Windows.Forms.Label() + Me.pbDL4 = New System.Windows.Forms.ProgressBar() + Me.pnlTMDB = New System.Windows.Forms.Panel() + Me.lblDL2Status = New System.Windows.Forms.Label() + Me.lblDL2 = New System.Windows.Forms.Label() + Me.pbDL2 = New System.Windows.Forms.ProgressBar() + Me.TableLayoutPanel1.SuspendLayout() + Me.pnlBottomMain.SuspendLayout() + Me.pnlSize.SuspendLayout() + Me.pnlFanart.SuspendLayout() + Me.pnlDLStatus.SuspendLayout() + Me.pnlIMDB.SuspendLayout() + Me.pnlSinglePic.SuspendLayout() + Me.pnlFANARTTV.SuspendLayout() + Me.pnlMDB.SuspendLayout() + Me.pnlIMPA.SuspendLayout() + Me.pnlTMDB.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(687, 11) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(836, 495) + Me.pnlBG.TabIndex = 1 + Me.pnlBG.Visible = False + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.pnlSize) + Me.pnlBottomMain.Controls.Add(Me.pnlFanart) + Me.pnlBottomMain.Controls.Add(Me.lblInfo) + Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) + Me.pnlBottomMain.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 495) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(836, 50) + Me.pnlBottomMain.TabIndex = 0 + ' + 'pnlSize + ' + Me.pnlSize.BackColor = System.Drawing.Color.White + Me.pnlSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.pnlSize.Controls.Add(Me.btnPreview) + Me.pnlSize.Controls.Add(Me.rbSmall) + Me.pnlSize.Controls.Add(Me.rbMedium) + Me.pnlSize.Controls.Add(Me.rbLarge) + Me.pnlSize.Controls.Add(Me.rbXLarge) + Me.pnlSize.Location = New System.Drawing.Point(8, 8) + Me.pnlSize.Name = "pnlSize" + Me.pnlSize.Size = New System.Drawing.Size(673, 34) + Me.pnlSize.TabIndex = 4 + Me.pnlSize.Visible = False + ' + 'btnPreview + ' + Me.btnPreview.Enabled = False + Me.btnPreview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnPreview.Image = CType(resources.GetObject("btnPreview.Image"), System.Drawing.Image) + Me.btnPreview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPreview.Location = New System.Drawing.Point(593, 5) + Me.btnPreview.Name = "btnPreview" + Me.btnPreview.Size = New System.Drawing.Size(75, 23) + Me.btnPreview.TabIndex = 6 + Me.btnPreview.Text = "Preview" + Me.btnPreview.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPreview.UseVisualStyleBackColor = True + ' + 'rbSmall + ' + Me.rbSmall.AutoSize = True + Me.rbSmall.Enabled = False + Me.rbSmall.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbSmall.Location = New System.Drawing.Point(475, 8) + Me.rbSmall.Name = "rbSmall" + Me.rbSmall.Size = New System.Drawing.Size(53, 17) + Me.rbSmall.TabIndex = 5 + Me.rbSmall.TabStop = True + Me.rbSmall.Text = "Small" + Me.rbSmall.UseVisualStyleBackColor = True + ' + 'rbMedium + ' + Me.rbMedium.AutoSize = True + Me.rbMedium.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbMedium.Location = New System.Drawing.Point(201, 8) + Me.rbMedium.Name = "rbMedium" + Me.rbMedium.Size = New System.Drawing.Size(69, 17) + Me.rbMedium.TabIndex = 4 + Me.rbMedium.TabStop = True + Me.rbMedium.Text = "Medium" + Me.rbMedium.UseVisualStyleBackColor = True + ' + 'rbLarge + ' + Me.rbLarge.AutoSize = True + Me.rbLarge.Enabled = False + Me.rbLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbLarge.Location = New System.Drawing.Point(343, 8) + Me.rbLarge.Name = "rbLarge" + Me.rbLarge.Size = New System.Drawing.Size(55, 17) + Me.rbLarge.TabIndex = 3 + Me.rbLarge.TabStop = True + Me.rbLarge.Text = "Cover" + Me.rbLarge.UseVisualStyleBackColor = True + ' + 'rbXLarge + ' + Me.rbXLarge.AutoSize = True + Me.rbXLarge.Enabled = False + Me.rbXLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbXLarge.Location = New System.Drawing.Point(26, 8) + Me.rbXLarge.Name = "rbXLarge" + Me.rbXLarge.Size = New System.Drawing.Size(66, 17) + Me.rbXLarge.TabIndex = 2 + Me.rbXLarge.TabStop = True + Me.rbXLarge.Text = "Original" + Me.rbXLarge.UseVisualStyleBackColor = True + ' + 'pnlFanart + ' + Me.pnlFanart.BackColor = System.Drawing.Color.White + Me.pnlFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFanart.Controls.Add(Me.chkThumb) + Me.pnlFanart.Controls.Add(Me.chkMid) + Me.pnlFanart.Controls.Add(Me.chkOriginal) + Me.pnlFanart.Location = New System.Drawing.Point(8, 8) + Me.pnlFanart.Name = "pnlFanart" + Me.pnlFanart.Size = New System.Drawing.Size(339, 34) + Me.pnlFanart.TabIndex = 5 + Me.pnlFanart.Visible = False + ' + 'chkThumb + ' + Me.chkThumb.AutoSize = True + Me.chkThumb.Location = New System.Drawing.Point(231, 8) + Me.chkThumb.Name = "chkThumb" + Me.chkThumb.Size = New System.Drawing.Size(111, 17) + Me.chkThumb.TabIndex = 9 + Me.chkThumb.Text = "Check All Thumb" + Me.chkThumb.UseVisualStyleBackColor = True + ' + 'chkMid + ' + Me.chkMid.AutoSize = True + Me.chkMid.Location = New System.Drawing.Point(131, 8) + Me.chkMid.Name = "chkMid" + Me.chkMid.Size = New System.Drawing.Size(96, 17) + Me.chkMid.TabIndex = 7 + Me.chkMid.Text = "Check All Mid" + Me.chkMid.UseVisualStyleBackColor = True + ' + 'chkOriginal + ' + Me.chkOriginal.AutoSize = True + Me.chkOriginal.Location = New System.Drawing.Point(7, 8) + Me.chkOriginal.Name = "chkOriginal" + Me.chkOriginal.Size = New System.Drawing.Size(118, 17) + Me.chkOriginal.TabIndex = 8 + Me.chkOriginal.Text = "Check All Original" + Me.chkOriginal.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.Location = New System.Drawing.Point(402, 10) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(240, 31) + Me.lblInfo.TabIndex = 3 + Me.lblInfo.Text = "Selected item will be set as fanart. All checked items will be saved to \extrathu" & _ + "mbs." + Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblInfo.Visible = False + ' + 'pnlDLStatus + ' + Me.pnlDLStatus.BackColor = System.Drawing.Color.White + Me.pnlDLStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlDLStatus.Controls.Add(Me.pnlIMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlSinglePic) + Me.pnlDLStatus.Controls.Add(Me.pnlFANARTTV) + Me.pnlDLStatus.Controls.Add(Me.pnlMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlIMPA) + Me.pnlDLStatus.Controls.Add(Me.pnlTMDB) + Me.pnlDLStatus.Location = New System.Drawing.Point(253, 98) + Me.pnlDLStatus.Name = "pnlDLStatus" + Me.pnlDLStatus.Size = New System.Drawing.Size(331, 330) + Me.pnlDLStatus.TabIndex = 0 + Me.pnlDLStatus.Visible = False + ' + 'pnlIMDB + ' + Me.pnlIMDB.Controls.Add(Me.lblDL6Status) + Me.pnlIMDB.Controls.Add(Me.lblDL6) + Me.pnlIMDB.Controls.Add(Me.pbDL6) + Me.pnlIMDB.Location = New System.Drawing.Point(3, 84) + Me.pnlIMDB.Name = "pnlIMDB" + Me.pnlIMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlIMDB.TabIndex = 9 + ' + 'lblDL6Status + ' + Me.lblDL6Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL6Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL6Status.Name = "lblDL6Status" + Me.lblDL6Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL6Status.TabIndex = 8 + ' + 'lblDL6 + ' + Me.lblDL6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL6.Location = New System.Drawing.Point(5, 10) + Me.lblDL6.Name = "lblDL6" + Me.lblDL6.Size = New System.Drawing.Size(310, 13) + Me.lblDL6.TabIndex = 7 + Me.lblDL6.Text = "Performing Preliminary Tasks..." + ' + 'pbDL6 + ' + Me.pbDL6.Location = New System.Drawing.Point(6, 52) + Me.pbDL6.Name = "pbDL6" + Me.pbDL6.Size = New System.Drawing.Size(309, 19) + Me.pbDL6.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL6.TabIndex = 6 + ' + 'pnlSinglePic + ' + Me.pnlSinglePic.BackColor = System.Drawing.Color.White + Me.pnlSinglePic.Controls.Add(Me.Label2) + Me.pnlSinglePic.Controls.Add(Me.ProgressBar1) + Me.pnlSinglePic.Location = New System.Drawing.Point(3, 3) + Me.pnlSinglePic.Name = "pnlSinglePic" + Me.pnlSinglePic.Size = New System.Drawing.Size(321, 75) + Me.pnlSinglePic.TabIndex = 9 + Me.pnlSinglePic.Visible = False + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(5, 10) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(310, 13) + Me.Label2.TabIndex = 7 + Me.Label2.Text = "Downloading Selected Image..." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(6, 53) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(309, 19) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 6 + ' + 'pnlFANARTTV + ' + Me.pnlFANARTTV.Controls.Add(Me.lblDL3Status) + Me.pnlFANARTTV.Controls.Add(Me.lblDL3) + Me.pnlFANARTTV.Controls.Add(Me.pbDL3) + Me.pnlFANARTTV.Location = New System.Drawing.Point(3, 84) + Me.pnlFANARTTV.Name = "pnlFANARTTV" + Me.pnlFANARTTV.Size = New System.Drawing.Size(321, 75) + Me.pnlFANARTTV.TabIndex = 11 + ' + 'lblDL3Status + ' + Me.lblDL3Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL3Status.Name = "lblDL3Status" + Me.lblDL3Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL3Status.TabIndex = 8 + ' + 'lblDL3 + ' + Me.lblDL3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3.Location = New System.Drawing.Point(5, 10) + Me.lblDL3.Name = "lblDL3" + Me.lblDL3.Size = New System.Drawing.Size(310, 13) + Me.lblDL3.TabIndex = 7 + Me.lblDL3.Text = "Performing Preliminary Tasks..." + ' + 'pbDL3 + ' + Me.pbDL3.Location = New System.Drawing.Point(6, 53) + Me.pbDL3.Name = "pbDL3" + Me.pbDL3.Size = New System.Drawing.Size(309, 19) + Me.pbDL3.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL3.TabIndex = 6 + ' + 'pnlMDB + ' + Me.pnlMDB.Controls.Add(Me.lblDL5Status) + Me.pnlMDB.Controls.Add(Me.lblDL5) + Me.pnlMDB.Controls.Add(Me.pbDL5) + Me.pnlMDB.Location = New System.Drawing.Point(3, 246) + Me.pnlMDB.Name = "pnlMDB" + Me.pnlMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlMDB.TabIndex = 9 + ' + 'lblDL5Status + ' + Me.lblDL5Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL5Status.Name = "lblDL5Status" + Me.lblDL5Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL5Status.TabIndex = 8 + ' + 'lblDL5 + ' + Me.lblDL5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5.Location = New System.Drawing.Point(5, 10) + Me.lblDL5.Name = "lblDL5" + Me.lblDL5.Size = New System.Drawing.Size(310, 13) + Me.lblDL5.TabIndex = 7 + Me.lblDL5.Text = "Performing Preliminary Tasks..." + ' + 'pbDL5 + ' + Me.pbDL5.Location = New System.Drawing.Point(6, 53) + Me.pbDL5.Name = "pbDL5" + Me.pbDL5.Size = New System.Drawing.Size(309, 19) + Me.pbDL5.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL5.TabIndex = 6 + ' + 'pnlIMPA + ' + Me.pnlIMPA.Controls.Add(Me.lblDL4Status) + Me.pnlIMPA.Controls.Add(Me.lblDL4) + Me.pnlIMPA.Controls.Add(Me.pbDL4) + Me.pnlIMPA.Location = New System.Drawing.Point(3, 165) + Me.pnlIMPA.Name = "pnlIMPA" + Me.pnlIMPA.Size = New System.Drawing.Size(321, 75) + Me.pnlIMPA.TabIndex = 6 + ' + 'lblDL4Status + ' + Me.lblDL4Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL4Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL4Status.Name = "lblDL4Status" + Me.lblDL4Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL4Status.TabIndex = 8 + ' + 'lblDL4 + ' + Me.lblDL4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL4.Location = New System.Drawing.Point(5, 10) + Me.lblDL4.Name = "lblDL4" + Me.lblDL4.Size = New System.Drawing.Size(310, 13) + Me.lblDL4.TabIndex = 7 + Me.lblDL4.Text = "Performing Preliminary Tasks..." + ' + 'pbDL4 + ' + Me.pbDL4.Location = New System.Drawing.Point(6, 52) + Me.pbDL4.Name = "pbDL4" + Me.pbDL4.Size = New System.Drawing.Size(309, 19) + Me.pbDL4.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL4.TabIndex = 6 + ' + 'pnlTMDB + ' + Me.pnlTMDB.Controls.Add(Me.lblDL2Status) + Me.pnlTMDB.Controls.Add(Me.lblDL2) + Me.pnlTMDB.Controls.Add(Me.pbDL2) + Me.pnlTMDB.Location = New System.Drawing.Point(3, 3) + Me.pnlTMDB.Name = "pnlTMDB" + Me.pnlTMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlTMDB.TabIndex = 10 + ' + 'lblDL2Status + ' + Me.lblDL2Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL2Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL2Status.Name = "lblDL2Status" + Me.lblDL2Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL2Status.TabIndex = 8 + ' + 'lblDL2 + ' + Me.lblDL2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL2.Location = New System.Drawing.Point(5, 10) + Me.lblDL2.Name = "lblDL2" + Me.lblDL2.Size = New System.Drawing.Size(310, 13) + Me.lblDL2.TabIndex = 7 + Me.lblDL2.Text = "Performing Preliminary Tasks..." + ' + 'pbDL2 + ' + Me.pbDL2.Location = New System.Drawing.Point(6, 52) + Me.pbDL2.Name = "pbDL2" + Me.pbDL2.Size = New System.Drawing.Size(309, 19) + Me.pbDL2.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL2.TabIndex = 6 + ' + 'dlgImgSelect + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(836, 545) + Me.ControlBox = False + Me.Controls.Add(Me.pnlDLStatus) + Me.Controls.Add(Me.pnlBG) + Me.Controls.Add(Me.pnlBottomMain) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgImgSelect" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Poster" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlSize.ResumeLayout(False) + Me.pnlSize.PerformLayout() + Me.pnlFanart.ResumeLayout(False) + Me.pnlFanart.PerformLayout() + Me.pnlDLStatus.ResumeLayout(False) + Me.pnlIMDB.ResumeLayout(False) + Me.pnlSinglePic.ResumeLayout(False) + Me.pnlFANARTTV.ResumeLayout(False) + Me.pnlMDB.ResumeLayout(False) + Me.pnlIMPA.ResumeLayout(False) + Me.pnlTMDB.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlDLStatus As System.Windows.Forms.Panel + Friend WithEvents pnlIMPA As System.Windows.Forms.Panel + Friend WithEvents lblDL4Status As System.Windows.Forms.Label + Friend WithEvents lblDL4 As System.Windows.Forms.Label + Friend WithEvents pbDL4 As System.Windows.Forms.ProgressBar + Friend WithEvents lblInfo As System.Windows.Forms.Label + Friend WithEvents pnlSize As System.Windows.Forms.Panel + Friend WithEvents rbSmall As System.Windows.Forms.RadioButton + Friend WithEvents rbMedium As System.Windows.Forms.RadioButton + Friend WithEvents rbLarge As System.Windows.Forms.RadioButton + Friend WithEvents rbXLarge As System.Windows.Forms.RadioButton + Friend WithEvents pnlSinglePic As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL5Status As System.Windows.Forms.Label + Friend WithEvents lblDL5 As System.Windows.Forms.Label + Friend WithEvents pbDL5 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlFanart As System.Windows.Forms.Panel + Friend WithEvents chkThumb As System.Windows.Forms.CheckBox + Friend WithEvents chkMid As System.Windows.Forms.CheckBox + Friend WithEvents chkOriginal As System.Windows.Forms.CheckBox + Friend WithEvents btnPreview As System.Windows.Forms.Button + Friend WithEvents pnlFANARTTV As System.Windows.Forms.Panel + Friend WithEvents lblDL3Status As System.Windows.Forms.Label + Friend WithEvents lblDL3 As System.Windows.Forms.Label + Friend WithEvents pbDL3 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlTMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL2Status As System.Windows.Forms.Label + Friend WithEvents lblDL2 As System.Windows.Forms.Label + Friend WithEvents pbDL2 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlIMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL6Status As System.Windows.Forms.Label + Friend WithEvents lblDL6 As System.Windows.Forms.Label + Friend WithEvents pbDL6 As System.Windows.Forms.ProgressBar + +End Class diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/dlgImgSelect.resx b/Addons/scraper.EmberCore.TMDB/Scraper/dlgImgSelect.resx new file mode 100644 index 0000000..3491405 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/dlgImgSelect.resx @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA + Cv8BNGKaggAAAuRJREFUOE+lkltsS3Ecx3+ILAsPFrfEyxJPXkh0bokg4UG78TQNI5FImPBAJKiNhBAy + MTwRMRJ1ibsZ29jc2t00Vrq1p3q6tqft6Tk9t87YeLCHff3/3Sp4dZJPvv/f5fs7///5HwJA/8Nv88jw + 8ApD1y+blnnNtKwGjmXl/qCQMxt+fB9xjI2NEYdGR0dp9OfP6Yph+gOKjpBmMcy8CoxwPi5gok81kDGt + BPOUci+xt1LO0Gy+ZAZuUcbtCe4NpHEtLKNBkHGfrQt5dySNrpSKIcvcbJkmka5pNKhrtrfxFE71RlD3 + UcT5gIjt7THMvhLHTEZlSwz1n0ScZTXe8yKextec6TRNY3zAF0O3tUYl7Ovqh+t9EHs8IRSdC4FO9+WZ + VBfEjlchHPEF8z2PRQnDg9b4AE3L0hA7wqNwDFWvP2Cn1w9Hox90zAc6McFRH9Y97MWuDn++56YwgJEc + G2CwAdmsSkPsCLf6I1jb3IUNL3sY3Zhxxgs67AG5PCg+4YW9uRsbWY33XAp8xrBlOHVdI1IVhb5oWdv1 + QBjLn3qwtqUDq5s6MOd0O2jfizwlx9uwqtGLdazGey76Q/hm6k4tmyXKyDLlVMV29aOApU0erHnWgWmH + noF2NYL2Ph2nuhFF+5uw8okXy1hP/YcghjTVqSgZoqQkkZZK2m58ErDouRfzLjSDKt2grbf+ZpMbJSeb + sPA520FvCINqxinLaaKoKHJsETGK1rCIh+8F3HnTh7vvgrjHbqMAjx/0CGiNDCAqJZGUEk45zQYk4nG+ + i7LPgoBkNIpsOglTzcDSFOQ0FTmdwdRiyvNqKolELAZZlre0t7URLSkro21VVSVdnZ1pSZKQSqXAPizY + /wHDMMCuKg+Ps6oKJZNBsL//6+7q6gWTaPzhWjx31qzF5Xb7Acf69S6mNRV2e22Fw1G7gcGVUcPyro3l + 5Qfnl5auYZ4Zk7l3ClsxuBQGTszNx/9SqHHDVG76BaMnpgu1OH2ZAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/dlgImgSelect.vb b/Addons/scraper.EmberCore.TMDB/Scraper/dlgImgSelect.vb new file mode 100644 index 0000000..b2e44a9 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/dlgImgSelect.vb @@ -0,0 +1,1582 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports EmberScraperModule.EmberTMDBScraperModule +Imports RestSharp +Imports WatTmdb + +Public Class dlgImgSelect + +#Region "Fields" + + Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwIMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwFANARTTVDownload As New System.ComponentModel.BackgroundWorker + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Private TMDB As TMDB.Scraper + Private TMDBPosters As New List(Of MediaContainers.Image) + + Private MPDB As New MPDB.Scraper + Private MPDBPosters As New List(Of MediaContainers.Image) + + Private IMPA As New IMPA.Scraper + Private IMPAPosters As New List(Of MediaContainers.Image) + + Private IMDB As New IMDBimg.Scraper + Private IMDBPosters As New List(Of MediaContainers.Image) + + Private FANARTTVs As FANARTTVs.Scraper + Private FANARTTVPosters As New List(Of MediaContainers.Image) + + Private CachePath As String = String.Empty + Private chkImage() As CheckBox + Private DLType As Enums.ImageType + Private ETHashes As New List(Of String) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + + Private isEdit As Boolean = False + Private isShown As Boolean = False + Private iTop As Integer = 5 + Private lblImage() As Label + + Private noImages As Boolean = False + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private PreDL As Boolean = False + Private Results As New Containers.ImgResult + Private selIndex As Integer = -1 + + Private tMovie As New Structures.DBMovie + Private tmpImage As New MediaContainers.Image + Private _impaDone As Boolean = True + Private _imdbDone As Boolean = True + Private _fanarttvDone As Boolean = True + Private _mpdbDone As Boolean = True + Private _tmdbDone As Boolean = True + +#End Region 'Fields + +#Region "Events" + + Private Event IMPADone() + + Private Event MPDBDone() + + Private Event TMDBDone() + + Private Event IMDBDone() + + Private Event FANARTTVDone() +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.PreDL = True + Me.SetUp() + Me.StartDownload() + End Sub + + Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult + '// + ' Overload to pass data + '\\ + + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.isShown = True + + MyBase.ShowDialog() + Return Results + End Function + + Public Overloads Function ShowDialog() As Containers.ImgResult + Me.isShown = True + MyBase.ShowDialog() + + Return Results + End Function + + 'Rewrite to simplify + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal isChecked As Boolean, poster As MediaContainers.Image) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(256, 286) + Me.pbImage(iIndex).Size = New Size(250, 250) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.pnlImage(iIndex).Tag = poster + Me.pbImage(iIndex).Tag = poster + Me.pbImage(iIndex).Image = poster.WebImage.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.pnlBG.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If Me.DLType = Enums.ImageType.Fanart Then + ReDim Preserve Me.chkImage(iIndex) + Me.chkImage(iIndex) = New CheckBox() + Me.chkImage(iIndex).Name = iIndex.ToString + Me.chkImage(iIndex).Size = New Size(250, 30) + Me.chkImage(iIndex).AutoSize = False + Me.chkImage(iIndex).BackColor = Color.White + Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + 'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + Me.chkImage(iIndex).Left = 0 + Me.chkImage(iIndex).Top = 250 + Me.chkImage(iIndex).Checked = isChecked + Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve Me.lblImage(iIndex) + Me.lblImage(iIndex) = New Label() + Me.lblImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Size = New Size(250, 30) + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + If IsTMDBURL(poster.URL) Then + Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + Else + Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + End If + Me.lblImage(iIndex).Tag = poster + Me.lblImage(iIndex).Left = 0 + Me.lblImage(iIndex).Top = 250 + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 301 + Else + Me.iLeft += 271 + End If + End Sub + + Private Sub AllDoneDownloading() + If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone AndAlso Me._imdbDone AndAlso Me._fanarttvDone Then + Me.pnlDLStatus.Visible = False + Me.TMDBPosters.AddRange(Me.IMPAPosters) + Me.TMDBPosters.AddRange(Me.MPDBPosters) + Me.TMDBPosters.AddRange(Me.IMDBPosters) + Me.TMDBPosters.AddRange(Me.FANARTTVPosters) + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + End If + End Sub + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + PreviewImage() + End Sub + + Private Sub PreviewImage() + Try + Dim tImage As New Images + Me.pnlTMDB.Visible = False + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = True + Me.pnlDLStatus.Height = 85 + Me.pnlDLStatus.Top = 185 + + Application.DoEvents() + + Select Case True + Case rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + Case rbLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + Case rbMedium.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case rbSmall.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End Select + + Me.pnlSinglePic.Visible = False + + If Not IsNothing(tImage.Image) Then + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image) + + End If + + tImage.Dispose() + tImage = Nothing + + Catch ex As Exception + Me.pnlSinglePic.Visible = False + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.IMDBPosters.Count - 1 + Try + If Me.bwIMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMDBDownload.ReportProgress(i + 1, Me.IMDBPosters.Item(i).URL) + Try + Me.IMDBPosters.Item(i).WebImage.FromWeb(Me.IMDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMDBPosters.Item(i).URL = StringUtils.CleanURL(Me.IMDBPosters.Item(i).URL) + Me.IMDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMDBPosters.Item(i).Description, ")_(url=", Me.IMDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwIMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL6Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL6.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._imdbDone = True + RaiseEvent IMDBDone() + End If + End Sub + + Private Sub bwFANARTTVDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTVDownload.DoWork + '// + ' Thread to download FanartTV images from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.FANARTTVPosters.Count - 1 + Try + If Me.bwFANARTTVDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwFANARTTVDownload.ReportProgress(i + 1, Me.FANARTTVPosters.Item(i).URL) + Try + Me.FANARTTVPosters.Item(i).WebImage.FromWeb(Me.FANARTTVPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.FANARTTVPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.FANARTTVPosters.Item(i).URL = StringUtils.CleanURL(Me.FANARTTVPosters.Item(i).URL) + Me.FANARTTVPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.FANARTTVPosters.Item(i).Description, ")_(url=", Me.FANARTTVPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwFANARTTVDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTVDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL3.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwFANARTTVDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTVDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._fanarttvDone = True + RaiseEvent FANARTTVDone() + End If + End Sub + + Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork + '// + ' Thread to download impa posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + + For i As Integer = 0 To Me.IMPAPosters.Count - 1 + If bwIMPADownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL) + Try + Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL) + Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL4Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL4.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPABownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._impaDone = True + RaiseEvent IMPADone() + End If + End Sub + + Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.MPDBPosters.Count - 1 + Try + If Me.bwMPDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL) + Try + Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL) + Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL5Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL5.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._mpdbDone = True + RaiseEvent MPDBDone() + End If + End Sub + + Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork + '// + ' Thread to download tmdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + Dim thumbLink As String = String.Empty + Dim savePath As String = String.Empty + Dim extrathumbSize As String = String.Empty + + extrathumbSize = _MySettings.ManualETSize + + 'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all. + Dim posters As MediaContainers.Image() + If Me.DLType = Enums.ImageType.Fanart Then + posters = TMDBPosters.Where(Function(s) s.Description = extrathumbSize).ToArray() + Else + posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray() + End If + + For i As Integer = 0 To posters.Count - 1 + Try + If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then + If Me.bwTMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwTMDBDownload.ReportProgress((i + 1), posters(i).URL) + Try + posters(i).WebImage.FromWeb(posters(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then + If Me.DLType = Enums.ImageType.Fanart Then + + + If Not posters(i).URL.Contains("-thumb.") Then + Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org" + thumbLink = RemoveServerURL(posters(i).URL) + 'If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("-poster.", "-thumb.") + thumbLink = thumbLink.Replace("-original.", "-thumb.") + ''Else + 'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb") + 'End If + Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Else + Me.Results.Posters.Add(posters(i).URL) + End If + End If + If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then + Try + posters(i).URL = Me.CleanTMDBURL(posters(i).URL) + + savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg")) + posters(i).WebImage.Save(savePath, , , False) + + If Master.eSettings.AutoET Then + Dim tSize As New Enums.FanartSize + Select Case posters(i).Description.ToLower + Case "original" + tSize = Enums.FanartSize.Lrg + Case "mid" + tSize = Enums.FanartSize.Mid + Case "thumb" + tSize = Enums.FanartSize.Small + End Select + If Master.eSettings.AutoETSize = tSize Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + posters(i).isChecked = True + End If + End If + End If + + Catch + End Try + End If + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL2.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._tmdbDone = True + RaiseEvent TMDBDone() + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + IMPA.Cancel() + MPDB.Cancel() + TMDB.Cancel() + IMDB.Cancel() + FANARTTVs.Cancel() + + If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync() + If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync() + If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync() + If bwIMDBDownload.IsBusy Then bwIMDBDownload.CancelAsync() + If bwFANARTTVDownload.IsBusy Then bwFANARTTVDownload.CancelAsync() + + While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean) + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Text.ToLower.Contains(sType) Then + Me.chkImage(i).Checked = Checked + End If + Next + End Sub + + Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged + Me.CheckAll("(poster)", chkMid.Checked) + End Sub + + Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged + Me.CheckAll("(original)", chkOriginal.Checked) + End Sub + + Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged + Me.CheckAll("(thumb)", chkThumb.Checked) + End Sub + + Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'Me.tmpImage.Dispose() + + IMPA = Nothing + MPDB = Nothing + TMDB = Nothing + IMDB = Nothing + FANARTTVs = Nothing + + IMPAPosters = Nothing + MPDBPosters = Nothing + TMDBPosters = Nothing + IMDBPosters = Nothing + FANARTTVPosters = Nothing + + End Sub + + Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath) + End Sub + + Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not PreDL Then SetUp() + End Sub + + Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Try + Application.DoEvents() + If Not PreDL Then + StartDownload() + ElseIf noImages Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image) + Try + 'set all pnl colors to white first + 'remove all the current genres + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(i).BackColor = Color.White + Me.chkImage(i).ForeColor = Color.Black + Else + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + End If + Next + + 'set selected pnl color to blue + Me.pnlImage(iIndex).BackColor = Color.Blue + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(iIndex).BackColor = Color.Blue + Me.chkImage(iIndex).ForeColor = Color.White + Else + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + End If + + Me.selIndex = iIndex + + Me.pnlSize.Visible = False + + If IsTMDBURL(poster.URL) Then + Me.SetupSizes(poster.ParentID) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + Me.OK_Button.Enabled = False + Else + Me.OK_Button.Focus() + End If + Me.tmpImage.Clear() + Else + Me.rbXLarge.Checked = False + Me.rbLarge.Checked = False + Me.rbMedium.Checked = False + Me.rbSmall.Checked = False + Me.OK_Button.Enabled = True + Me.OK_Button.Focus() + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function IsTMDBURL(ByVal sURL As String) As Boolean + If sURL.ToLower.Contains(_TMDBConf.images.base_url.ToLower) Then + Return True + Else + Return False + End If + End Function + + Private Function CleanTMDBURL(ByVal sURL As String) As String + If IsTMDBURL(sURL) Then + Dim _sURL As New Uri(sURL) + sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped)) + Else + sURL = StringUtils.TruncateURL(sURL, 40, True) + End If + Return sURL.Replace(":", "$c$").Replace("/", "$s$") + End Function + + + Private Sub GetFanart() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim di As New DirectoryInfo(CachePath) + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + If Not IsNothing(tImage.WebImage.Image) Then + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + 'Case sFile.Name.Contains("(mid)") + ' tImage.Description = "mid" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + End If + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "backdrop") + + If _MySettings.UseFANARTTV Then + Me.lblDL3.Text = Master.eLang.GetString(120, "Retrieving data from Fanart.tv...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._fanarttvDone = False + + Me.FANARTTVs.GetImagesAsync(tMovie.Movie.ID) + Else + Me.lblDL3.Text = Master.eLang.GetString(121, "Fanart.tv is not enabled") + End If + + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub GetPosters() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim lFi As New List(Of FileInfo) + Dim di As New DirectoryInfo(CachePath) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 207 + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "poster") + + If _MySettings.UseIMDB Then + Me.lblDL6.Text = Master.eLang.GetString(117, "Retrieving data from IMDB.com...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._imdbDone = False + + Me.IMDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL6.Text = Master.eLang.GetString(118, "IMDB.com is not enabled") + End If + + If _MySettings.UseIMPA Then + Me.lblDL4.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._impaDone = False + + Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL4.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled") + End If + + If _MySettings.UseMPDB Then + Me.lblDL5.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._mpdbDone = False + + Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL5.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVDoneDownloading() + Try + Me._fanarttvDone = True + Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL3.Value = 0 + + 'Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = Posters.Count + + Me.FANARTTVPosters = Posters + + Me.bwFANARTTVDownload.WorkerSupportsCancellation = True + Me.bwFANARTTVDownload.WorkerReportsProgress = True + Me.bwFANARTTVDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVProgressUpdated(ByVal iPercent As Integer) + Me.pbDL3.Value = iPercent + End Sub + + Private Sub IMDBDoneDownloading() + Try + Me._imdbDone = True + Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL6.Value = 0 + + 'Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = Posters.Count + + Me.IMDBPosters = Posters + + Me.bwIMDBDownload.WorkerSupportsCancellation = True + Me.bwIMDBDownload.WorkerReportsProgress = True + Me.bwIMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL6.Value = iPercent + End Sub + + Private Sub IMPADoneDownloading() + Try + Me._impaDone = True + Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL4.Value = 0 + + 'Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = Posters.Count + + Me.IMPAPosters = Posters + + Me.bwIMPADownload.WorkerSupportsCancellation = True + Me.bwIMPADownload.WorkerReportsProgress = True + Me.bwIMPADownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAProgressUpdated(ByVal iPercent As Integer) + Me.pbDL4.Value = iPercent + End Sub + + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then + pnlBG.VerticalScroll.Value += 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum + End If + Else + If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then + pnlBG.VerticalScroll.Value -= 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub MPDBDoneDownloading() + Try + Me._mpdbDone = True + Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL5.Value = 0 + + 'Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = Posters.Count + + Me.MPDBPosters = Posters + + Me.bwMPDBDownload.WorkerSupportsCancellation = True + Me.bwMPDBDownload.WorkerReportsProgress = True + Me.bwMPDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL5.Value = iPercent + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + Dim tmpPathPlus As String = String.Empty + Dim extrathumbSize As String + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + If DLType = Enums.ImageType.Fanart Then + tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") + Else + tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") + End If + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If + + If Me.DLType = Enums.ImageType.Fanart Then + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + Dim isChecked As Boolean = False + + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + isChecked = True + Exit For + End If + Next + + If isChecked Then + Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs") + If isEdit Then + extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName) + Else + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName) + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName) + Else + extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName) + End If + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + End If + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + Dim fsET As FileStream + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) + Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg) + fsET.Close() + iVal += 1 + End If + Next + fsET = Nothing + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + Try + 'If Me.DLType = Enums.ImageType.Fanart OrElse Not IsTMDBURL(DirectCast(sender, PictureBox).Tag.ToString) Then + 'ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(DirectCast(sender, PictureBox).Image) + 'Else + PreviewImage() + 'End If + Catch + End Try + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Panel).Name), DirectCast(DirectCast(sender, Panel).Tag, MediaContainers.Image)) + End Sub + + Private Sub ProcessPics(ByVal posters As List(Of MediaContainers.Image)) + Try + Dim iIndex As Integer = 0 + + 'remove all entries with invalid images + If Master.eSettings.UseImgCache Then + For i As Integer = posters.Count - 1 To 0 Step -1 + If IsNothing(posters.Item(i).WebImage.Image) Then + posters.RemoveAt(i) + End If + Next + End If + + If posters.Count > 0 Then + For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) RemoveServerURL(p.URL)) + If Not IsNothing(xPoster.WebImage.Image) AndAlso (Me.DLType = Enums.ImageType.Fanart OrElse Not (IsTMDBURL(xPoster.URL) AndAlso Not xPoster.Description = "cover")) Then + Me.AddImage(xPoster.Description, iIndex, xPoster.isChecked, xPoster) + iIndex += 1 + End If + Next + Else + If Not Me.PreDL OrElse isShown Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Else + noImages = True + End If + End If + + Me.Activate() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub rbLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbMedium_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbMedium.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbSmall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSmall.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbXLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbXLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub SetUp() + Try + AddHandler TMDB.PostersDownloaded, AddressOf TMDBPostersDownloaded + AddHandler TMDB.ProgressUpdated, AddressOf TMDBProgressUpdated + AddHandler IMPA.PostersDownloaded, AddressOf IMPAPostersDownloaded + AddHandler IMPA.ProgressUpdated, AddressOf IMPAProgressUpdated + AddHandler MPDB.PostersDownloaded, AddressOf MPDBPostersDownloaded + AddHandler MPDB.ProgressUpdated, AddressOf MPDBProgressUpdated + AddHandler IMDB.PostersDownloaded, AddressOf IMDBPostersDownloaded + AddHandler IMDB.ProgressUpdated, AddressOf IMDBProgressUpdated + AddHandler FANARTTVs.PostersDownloaded, AddressOf FANARTTVPostersDownloaded + AddHandler FANARTTVs.ProgressUpdated, AddressOf FANARTTVProgressUpdated + AddHandler IMPADone, AddressOf IMPADoneDownloading + AddHandler TMDBDone, AddressOf TMDBDoneDownloading + AddHandler MPDBDone, AddressOf MPDBDoneDownloading + AddHandler IMDBDone, AddressOf IMDBDoneDownloading + AddHandler FANARTTVDone, AddressOf FANARTTVDoneDownloading + + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlBG.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlBG) + + If Me.DLType = Enums.ImageType.Posters Then + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = True + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = True + Me.pnlMDB.Visible = True + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 328 + Me.pnlDLStatus.Top = 82 + Else + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = True + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 129 + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(tMovie.Filename) + End If + End If + + CachePath = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, tMovie.Movie.IMDBID, Path.DirectorySeparatorChar, If(Me.DLType = Enums.ImageType.Posters, "posters", "fanart")) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview", True) + Me.chkThumb.Text = Master.eLang.GetString(41, "Check All Thumb") + Me.chkMid.Text = Master.eLang.GetString(42, "Check All Mid") + Me.chkOriginal.Text = Master.eLang.GetString(43, "Check All Original") + Me.lblInfo.Text = Master.eLang.GetString(44, "Selected item will be set as fanart. All checked items will be saved to \extrathumbs.") + Me.lblDL5.Text = Master.eLang.GetString(45, "Performing Preliminary Tasks...") + Me.lblDL4.Text = Me.lblDL5.Text + Me.lblDL3.Text = Me.lblDL5.Text + Me.lblDL2.Text = Me.lblDL5.Text + Me.Label2.Text = Master.eLang.GetString(46, "Downloading Selected Image...") + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(0, sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Function RemoveServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Sub SetupSizes(ByVal ParentID As String) + Try + rbXLarge.Checked = False + rbXLarge.Enabled = False + rbXLarge.Text = Master.eLang.GetString(47, "Original") + rbLarge.Checked = False + rbLarge.Enabled = False + rbMedium.Checked = False + rbSmall.Checked = False + rbSmall.Enabled = False + If Me.DLType = Enums.ImageType.Fanart Then + rbLarge.Text = "w1280" + rbMedium.Text = "poster" + rbSmall.Text = "thumb" + Else + rbLarge.Text = Master.eLang.GetString(48, "Cover") + rbMedium.Text = Master.eLang.GetString(49, "Medium") + rbSmall.Text = Master.eLang.GetString(50, "Small") + End If + + For Each TMDBPoster As MediaContainers.Image In TMDBPosters.Where(Function(f) f.ParentID = ParentID) + Select Case TMDBPoster.Description + Case "original" + ' xlarge + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbXLarge.Enabled = True + rbXLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "cover" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "w1280" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format("w1280 ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + End If + Case "thumb" + ' small + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbSmall.Enabled = True + rbSmall.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "mid" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + Case "poster" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format("Poster ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + End Select + Next + + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Small + rbSmall.Checked = rbSmall.Enabled + Case Enums.PosterSize.Mid + rbMedium.Checked = rbMedium.Enabled + Case Enums.PosterSize.Lrg + rbLarge.Checked = rbLarge.Enabled + Case Enums.PosterSize.Xlrg + rbXLarge.Checked = rbXLarge.Enabled + End Select + + pnlSize.Visible = True + + Invalidate() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub StartDownload() + Try + Select Case Me.DLType + Case Enums.ImageType.Posters + Me.GetPosters() + Case Enums.ImageType.Fanart + Me.GetFanart() + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBDoneDownloading() + Try + Me._tmdbDone = True + Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL2.Value = 0 + + 'Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = Posters.Count + + Me.TMDBPosters = Posters + + Me.bwTMDBDownload.WorkerSupportsCancellation = True + Me.bwTMDBDownload.WorkerReportsProgress = True + Me.bwTMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL2.Value = iPercent + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/dlgTMDBSearchResults.Designer.vb b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTMDBSearchResults.Designer.vb new file mode 100644 index 0000000..edf9f3b --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTMDBSearchResults.Designer.vb @@ -0,0 +1,460 @@ + _ +Partial Class dlgTMDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtTMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(497, 401) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(570, 401) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(4, 96) + Me.tvResults.Name = "tvResults" + Me.tvResults.ShowLines = False + Me.tvResults.ShowPlusMinus = False + Me.tvResults.ShowRootLines = False + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 4 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(294, 130) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(291, 70) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(291, 89) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(294, 295) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(472, 130) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(472, 156) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(472, 183) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtTMDBID + ' + Me.txtTMDBID.Enabled = False + Me.txtTMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBID.Location = New System.Drawing.Point(139, 399) + Me.txtTMDBID.Name = "txtTMDBID" + Me.txtTMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtTMDBID.TabIndex = 6 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(643, 64) + Me.pnlTop.TabIndex = 8 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(257, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(4, 403) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(130, 17) + Me.chkManual.TabIndex = 5 + Me.chkManual.Text = "Manual TMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(245, 399) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 7 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(472, 247) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(37, 13) + Me.lblIMDB.TabIndex = 20 + Me.lblIMDB.Text = "TMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(410, 130) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(33, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(410, 156) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(410, 183) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(410, 247) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(56, 13) + Me.lblIMDBHeader.TabIndex = 19 + Me.lblIMDBHeader.Text = "TMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(291, 279) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(262, 70) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 3 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(4, 71) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 2 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(364, 183) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 18 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(100, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching TMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(308, 155) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'dlgTMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(643, 454) + Me.ControlBox = False + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtTMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgTMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents tvResults As System.Windows.Forms.TreeView + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lblYear As System.Windows.Forms.Label + Friend WithEvents lblDirector As System.Windows.Forms.Label + Friend WithEvents lblGenre As System.Windows.Forms.Label + Friend WithEvents txtTMDBID As System.Windows.Forms.TextBox + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents lblIMDB As System.Windows.Forms.Label + Friend WithEvents lblYearHeader As System.Windows.Forms.Label + Friend WithEvents lblDirectorHeader As System.Windows.Forms.Label + Friend WithEvents lblGenreHeader As System.Windows.Forms.Label + Friend WithEvents lblIMDBHeader As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel + Friend WithEvents Label4 As System.Windows.Forms.Label + +End Class diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/dlgTMDBSearchResults.resx b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTMDBSearchResults.resx new file mode 100644 index 0000000..017a5ad --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTMDBSearchResults.resx @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + gg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA + CukB/XXO0wAAAepJREFUOE+lkktIG1EUhkeFaLQ+UGulgthNEUHRCrqyIHZTdSd0Iyq46cL3Sly50ppV + uywYi2uDiyKK1ioFk0lm7mSmSgymJuIqSkwwCTVpGs3fM0Pa+poWceBj4N5zvnvOuZcDwN2HeyWrB98Q + LFosuRJjz51O6cXmxsaj/1V3RSAx8fVXRQnIsgwVRZHjJHr7L8kfAROFPoWS3G43gicnCIVC8O7vQ11z + StKsnkQTrK6sGCSJBXddLpyfJ5FKpTTUz+f1gvbA22w1t0k0AW3WCYIAv9+PZPIn4vGYRiLxA+HwKRhj + EByOIV2BdWur3mG34/j4iJISiEYjRBSx2BkikQiYKOJQ4ft1BZ/X13NIEHalW1CrUEVACj6fF4yqe2W2 + TegK0m0MiBSoziEQCNAQg/B4PPi2I8Fk+QJucBnZI0vvrkuuXCPP8+PU63dC7RnbTvHi/cKnA2O3GYbu + OeT0ziOv58Na8djHgt+iGw+JHk+pzWrtpMF27cn2Ko7jMnLbTebCl1MoaH+D/I4ZFHbM7FZ0ThtvfYl6 + 913WMjFc2jyGkqZRlNC/om2yXBNk0RFEEfGEqCZqiXriGdGYpoHCHhdXtg6W1fQKD592mQwZ3N8KKCiL + yCaMRB7xgMi/zuXqMinnTi3otfYLj6yxrhdJtZ8AAAAASUVORK5CYII= + + + \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/dlgTMDBSearchResults.vb b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTMDBSearchResults.vb new file mode 100644 index 0000000..8c80915 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTMDBSearchResults.vb @@ -0,0 +1,462 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb + +Public Class dlgTMDBSearchResults + +#Region "Fields" + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + Friend WithEvents tmrLoad As New System.Windows.Forms.Timer + Friend WithEvents tmrWait As New System.Windows.Forms.Timer + + Private TMDBg As TMDBg.Scraper + Private sHTTP As New HTTP + Private _currnode As Integer = -1 + Private _prevnode As Integer = -2 + Private MySettings As EmberTMDBScraperModule.sMySettings + 'Private TMDBConf As V3.TmdbConfiguration + 'Private TMDBApi As V3.Tmdb + + Private _InfoCache As New Dictionary(Of String, MediaContainers.Movie) + Private _PosterCache As New Dictionary(Of String, System.Drawing.Image) + Private _filterOptions As Structures.ScrapeOptions + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(_MySettings As EmberTMDBScraperModule.sMySettings, _TMDBg As TMDBg.Scraper) + + ' This call is required by the designer. + InitializeComponent() + 'TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + 'TMDBConf = TMDBApi.GetConfiguration() + MySettings = _MySettings + TMDBg = _TMDBg + End Sub + + + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + _filterOptions = filterOptions + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + chkManual.Enabled = False + 'TMDBg.IMDBURL = TMDBId + TMDBg.SearchMovieAsync(sMovieTitle, _filterOptions) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal Res As TMDBg.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + SearchResultsDownloaded(Res) + + Return MyBase.ShowDialog() + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.OK_Button.Enabled = False + pnlPicStatus.Visible = False + _InfoCache.Clear() + _PosterCache.Clear() + Me.ClearInfo() + Me.Label3.Text = Master.eLang.GetString(11, "Searching TMDB...") + Me.pnlLoading.Visible = True + chkManual.Enabled = False + TMDBg.CancelAsync() + 'IMDB.IMDBURL = IMDBURL + TMDBg.SearchMovieAsync(Me.txtSearch.Text, _filterOptions) + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + TMDBg.GetSearchMovieInfoAsync(Me.txtTMDBID.Text, Master.tmpMovie, Master.DefaultOptions) + + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + sHTTP.StartDownloadImage(Args.pURL) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image, .IMDBId = Args.IMDBId} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + '// + ' Thread finished: display pic if it was able to get one + '\\ + + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbPoster.Image = Res.Result + If Not _PosterCache.ContainsKey(Res.IMDBId) Then + _PosterCache.Add(Res.IMDBId, Res.Result) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + pnlPicStatus.Visible = False + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Master.tmpMovie.Clear() + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtTMDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.tvResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtTMDBID.Text = String.Empty + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblTagline.Text = String.Empty + Me.lblYear.Text = String.Empty + Me.lblDirector.Text = String.Empty + Me.lblGenre.Text = String.Empty + Me.txtOutline.Text = String.Empty + Me.lblIMDB.Text = String.Empty + Me.pbPoster.Image = Nothing + + Master.tmpMovie.Clear() + + TMDBg.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.lblYearHeader.Visible = areVisible + Me.lblDirectorHeader.Visible = areVisible + Me.lblGenreHeader.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.lblIMDBHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + Me.lblYear.Visible = areVisible + Me.lblTagline.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblDirector.Visible = areVisible + Me.lblGenre.Visible = areVisible + Me.lblIMDB.Visible = areVisible + Me.pbPoster.Visible = areVisible + End Sub + + Private Sub dlgIMDBSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub dlgIMDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + pnlPicStatus.Visible = False + 'TMDBg.IMDBURL = IMDBURL + AddHandler TMDBg.SearchMovieInfoDownloaded, AddressOf SearchMovieInfoDownloaded + AddHandler TMDBg.SearchResultsDownloaded, AddressOf SearchResultsDownloaded + + Try + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgIMDBSearchResults_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + Me.tvResults.Focus() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + If Me.chkManual.Checked AndAlso Me.btnVerify.Enabled Then + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Master.tmpMovie.IMDBID = Me.txtTMDBID.Text + End If + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.Close() + End Sub + + Private Sub SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + '// + ' Info downloaded... fill form with data + '\\ + + Me.pnlLoading.Visible = False + Me.OK_Button.Enabled = True + + Try + If bSuccess Then + Me.ControlsVisible(True) + Me.lblTitle.Text = Master.tmpMovie.Title + Me.lblTagline.Text = Master.tmpMovie.Tagline + Me.lblYear.Text = Master.tmpMovie.Year + Me.lblDirector.Text = Master.tmpMovie.Director + Me.lblGenre.Text = Master.tmpMovie.Genre + Me.txtOutline.Text = Master.tmpMovie.Outline + Me.lblIMDB.Text = Master.tmpMovie.IMDBID + + If _PosterCache.ContainsKey(Master.tmpMovie.TMDBID) Then + 'just set it + Me.pbPoster.Image = _PosterCache(Master.tmpMovie.TMDBID) + Else + 'go download it, if available + If Not String.IsNullOrEmpty(sPoster) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + pnlPicStatus.Visible = True + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = sPoster, .IMDBId = Master.tmpMovie.TMDBID}) + End If + + End If + + 'store clone of tmpmovie + If Not _InfoCache.ContainsKey(Master.tmpMovie.TMDBID) Then + _InfoCache.Add(Master.tmpMovie.TMDBID, GetMovieClone(Master.tmpMovie)) + End If + + + Me.btnVerify.Enabled = False + Else + If Me.chkManual.Checked Then + MsgBox(Master.eLang.GetString(15, "Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again."), MsgBoxStyle.Exclamation, Master.eLang.GetString(16, "Verification Failed")) + Me.btnVerify.Enabled = True + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SearchResultsDownloaded(ByVal M As TMDBg.MovieSearchResults) + '// + ' Process the results that IMDB gave us + '\\ + 'Dim TnP As New TreeNode + 'Dim selNode As New TreeNode + + Try + 'Me.tvResults.Nodes.Clear() + Me.ClearInfo() + If Not IsNothing(M) AndAlso M.Matches.Count > 0 Then + + 'M.Matches.Sort() + For Each Movie As MediaContainers.Movie In M.Matches + 'TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Me.tvResults.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.TMDBID}) + Next + 'TnP.Expand() + 'Me.tvResults.Nodes.Add(TnP) + 'selNode = Me.tvResults.Nodes(0) + 'selNode = TnP.FirstNode + 'selNode = Me.tvResults.Nodes(0) + Me.tvResults.SelectedNode = Me.tvResults.Nodes(0) + + Me._prevnode = -2 + + Me.tvResults.Focus() + Else + Me.tvResults.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(20, "No Matches Found")}) + End If + Me.pnlLoading.Visible = False + chkManual.Enabled = True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.Label2.Text = Master.eLang.GetString(21, "View details of each result to find the proper movie.") + Me.Label1.Text = Master.eLang.GetString(22, "Movie Search Results") + Me.chkManual.Text = Master.eLang.GetString(23, "Manual TMDB Entry:") + Me.btnVerify.Text = Master.eLang.GetString(24, "Verify") + Me.lblYearHeader.Text = Master.eLang.GetString(49, "Year:", True) + Me.lblDirectorHeader.Text = Master.eLang.GetString(239, "Director:", True) + Me.lblGenreHeader.Text = Master.eLang.GetString(51, "Genre(s):", True) + Me.lblIMDBHeader.Text = Master.eLang.GetString(116, "TMDB ID:") + Me.lblPlotHeader.Text = Master.eLang.GetString(242, "Plot Outline:", True) + Me.Label3.Text = Master.eLang.GetString(25, "Searching TMDB...") + End Sub + + Private Sub tmrLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoad.Tick + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + Me.pnlLoading.Visible = True + Me.Label3.Text = Master.eLang.GetString(26, "Downloading details...") + + 'IMDB.IMDBURL = IMDBURL + TMDBg.GetSearchMovieInfoAsync(Me.tvResults.SelectedNode.Tag.ToString, Master.tmpMovie, Master.DefaultOptions) + End Sub + + Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrWait.Tick + If Not Me._prevnode = Me._currnode Then + Me._prevnode = Me._currnode + Me.tmrWait.Stop() + Me.tmrLoad.Start() + Else + Me.tmrLoad.Stop() + Me.tmrWait.Stop() + End If + End Sub + + Private Sub tvResults_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvResults.AfterSelect + Try + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + + Me.ClearInfo() + Me.OK_Button.Enabled = False + + If Not IsNothing(Me.tvResults.SelectedNode.Tag) AndAlso Not String.IsNullOrEmpty(Me.tvResults.SelectedNode.Tag.ToString) Then + Me._currnode = Me.tvResults.SelectedNode.Index + + 'check if this movie is in the cache already + If _InfoCache.ContainsKey(Me.tvResults.SelectedNode.Tag.ToString) Then + Master.tmpMovie = GetMovieClone(_InfoCache(Me.tvResults.SelectedNode.Tag.ToString)) + SearchMovieInfoDownloaded(String.Empty, True) + Return + End If + + Me.pnlLoading.Visible = True + Me.tmrWait.Start() + Else + Me.pnlLoading.Visible = False + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub tvResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub txtIMDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTMDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtIMDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBID.TextChanged + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Function GetMovieClone(ByVal original As MediaContainers.Movie) As MediaContainers.Movie + 'have to do this the old-fashioned way because it is not serializable + Dim result As New MediaContainers.Movie + With result + .IMDBID = original.IMDBID + .Genre = original.Genre + .Title = original.Title + .Tagline = original.Tagline + .Year = original.Year + .Director = original.Director + .Genre = original.Genre + .Outline = original.Outline + End With + Return result + 'Using mem As New IO.MemoryStream() + ' Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, New System.Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.Clone)) + ' bin.Serialize(mem, original) + ' mem.Seek(0, IO.SeekOrigin.Begin) + ' Return DirectCast(bin.Deserialize(mem), MediaContainers.Movie) + 'End Using + End Function + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim pURL As String + Dim IMDBId As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Image + Dim IMDBId As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailer.Designer.vb new file mode 100644 index 0000000..1865dbc --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailer.Designer.vb @@ -0,0 +1,279 @@ + _ +Partial Class dlgTrailer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(290, 339) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(74, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(369, 339) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(411, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(424, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(112, 82) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(120, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(411, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(376, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(365, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(72, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(392, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(153, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 339) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(106, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(207, 339) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(77, 23) + Me.btnSetNfo.TabIndex = 4 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(444, 331) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(450, 366) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lbTrailers As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnPlayTrailer As System.Windows.Forms.Button + Friend WithEvents btnSetNfo As System.Windows.Forms.Button + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtYouTube As System.Windows.Forms.TextBox + Friend WithEvents btnBrowse As System.Windows.Forms.Button + Friend WithEvents txtManual As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog + Friend WithEvents btnGetTrailers As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailer.resx b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailer.resx new file mode 100644 index 0000000..2be3cac --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailer.resx @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAGHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3NPsx9OAAAB80lEQVQ4T6XTTWsTQRgH8EGr9GDFm19AseDBgzc9eba0FJqvIOTiRase + RAIKtRo9LbbxpYmtggXR2KRFqGLfDio9tDGbdUMrbvc1+57sioiVv7NDLE3MXnTgz8DsPr95dpglAMj/ + pKVY17QuyzLP2raVoBlybHvIc92EUKmcidukBTBrtasUAC0GLWYJggaWl5dw9056uBPSAtDi8aiYAY4N + 13HwLQyxuLiAW6OjyIyPXW5H2gFuZ/cm4HseNFVFsTCD2WIRHz+8P7cb6Qjs7iDqIkLCMEC97kedZWMB + egasA8s24TsBQm8bob8N3w3YZzUzFgsYus6ZZo0WhPisvMackGQR5Dm2xnDLjAdUVeF0XUPD/Yl31eu4 + sURY3orXaDe/EOGGoccDsrzFKYoMz/yON0IaqYVDLPPCTdTtH6D3BKqixANfNjc5SZJga3XMlm5jeP4w + S6E0AsdoQJFlbElSPMCXy/ekDQUTK1eQzB/B+cJxlmT+KB6sXID61UBVFDOxh7i+tjbCf+KxXl7FpZeD + SOR6WS6+6EepsgpREFHh+XRHYC8hB/r7+k7kshOZ/PSrZ7mn2cnTqd7qqdSxjUdPHk7NPC9OT00+vj84 + MHByDyEH/yA7F4kC+wgh3dGDaDTnHkK6etrWuum7+/8C/vWX/g1N2vpUAmZdeAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAACwwAAAsMAT9AIsgAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfZBBoSIQHX+6QX + AAACOElEQVQ4T7WSTWvaQRCHozlYNQSiVXwBNSSKKAhqKogo2hx8OeUQpPVY9OBFId+g0IufoQnegslF + EEG8qAgeiij4hohoDjkphJAIGg/udGepfyLV3rowLDu788zs/GZv73+st7e35NPT069KpfJaLpdnj4+P + nel0+p3mOvhnvoeHh0+j0WieTCbB6XSSYDAIoVAIXC4Xicfj0Ov1IJ/Pf9kKweBisQharZbY7XbweDxg + sVjg7OwM8Ix2enpK7u/v4e7u7ttfEJp5QZ3k8PAQ1Go1hMNhyGazIJFIQKVSMd/R0RHgm2azCQqFQsNB + FovFFZZLHZz5fD7AlU6nmY/H43F3NpsNWq3WLQeYz+d1JL8H4BfW6+bmZgOO77rd7isHqNfrM3Ty+XzY + 399n5vV6WfxqtWL79fX1RiWlUgnPHxlkDRAKhSASiUAsFoPf72eBhBAGeXl5AZlMBgKBgIGoxLirGOD5 + +blL/0iwSVKpFORyOVxcXHAV0HtUhzUUm4yATqezpPsHBphMJj8uLy9BqVSCRqOB4+NjiEQiDICZUU6d + TseUQLjb7YZqtVp6L+UBlREBxGg0soBoNArL5RJQDavVCmazGecAKyTtdhtOTk68G7OQy+W+1mo1MJlM + hE4hA2BV5+fnLKPD4QC9Xk8KhQKkUqmfW6cxk8nE6ERCIpFgkxgIBFgzERCLxWAwGOwOXhPpPzWNRuN2 + PB7P+v0+oA2HwyWVrWIwGD5vzbzDyaN++R+phLsCfwMUR2eb8uMbUAAAAABJRU5ErkJggg== + + + + 17, 17 + + + 40 + + \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailer.vb b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailer.vb new file mode 100644 index 0000000..d63ea34 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailer.vb @@ -0,0 +1,465 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb +Imports EmberScraperModule.EmberTMDBScraperModule + +Public Class dlgTrailer + +#Region "Fields" + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Friend WithEvents bwCompileList As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwDownloadTrailer As New System.ComponentModel.BackgroundWorker + + Private cTrailer As Trailers + Private imdbID As String = String.Empty + Private prePath As String = String.Empty + Private sPath As String = String.Empty + Private tArray As New List(Of String) + Private tURL As String = String.Empty + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = TMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + cTrailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + End Sub + + Public Overloads Function ShowDialog(ByVal _imdbID As String, ByVal _sPath As String) As String + Me.imdbID = _imdbID + Me.sPath = _sPath + + If MyBase.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + Return Replace(Me.tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + Return Me.tURL + End If + Else + Return String.Empty + End If + End Function + + Protected Overrides Sub Finalize() + cTrailer = Nothing + MyBase.Finalize() + End Sub + + Private Sub BeginDownload(ByVal CloseDialog As Boolean) + Dim didCancel As Boolean = False + + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(56, "Downloading selected trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + If CloseDialog Then + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, Path.GetFileName(Me.prePath)) + FileUtils.Common.MoveFileWithStream(Me.prePath, Me.tURL) + + File.Delete(Me.prePath) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.prePath, """")) + didCancel = True + End If + ElseIf Me.txtManual.Text.Length > 0 Then + Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + If CloseDialog Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.txtManual.Text, """")) + didCancel = True + End If + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + didCancel = True + End If + ElseIf Regex.IsMatch(Me.txtYouTube.Text, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.txtYouTube.Text) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + ElseIf StringUtils.isValidURL(Me.txtYouTube.Text) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = Me.txtYouTube.Text, .bType = CloseDialog}) + Else + If Regex.IsMatch(Me.lbTrailers.SelectedItem.ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.lbTrailers.SelectedItem.ToString) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + Else + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = lbTrailers.SelectedItem.ToString, .bType = CloseDialog}) + End If + End If + + If didCancel Then + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + End Sub + + Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click + Try + With ofdTrailer + .InitialDirectory = Directory.GetParent(Master.currMovie.Filename).FullName + .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.ValidExts.ToArray(), ";*")) + .FilterIndex = 0 + End With + + If ofdTrailer.ShowDialog() = DialogResult.OK Then + txtManual.Text = ofdTrailer.FileName + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub btnGetTrailers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTrailers.Click + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.pnlStatus.Visible = True + + Me.bwCompileList = New System.ComponentModel.BackgroundWorker + Me.bwCompileList.WorkerSupportsCancellation = True + Me.bwCompileList.RunWorkerAsync() + End Sub + + Private Sub btnPlayTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayTrailer.Click + Try + Me.BeginDownload(False) + Catch + MsgBox(Master.eLang.GetString(58, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), MsgBoxStyle.Critical, Master.eLang.GetString(59, "Error Playing Trailer")) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Try + End Sub + + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click + + If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(62, "Moving specified file to trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + File.Move(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + Else + Dim didCancel As Boolean = False + + If StringUtils.isValidURL(Me.txtYouTube.Text) Then + tURL = Me.txtYouTube.Text + ElseIf Me.lbTrailers.SelectedItems.Count > 0 Then + tURL = lbTrailers.SelectedItem.ToString + Else + didCancel = True + End If + + If Not didCancel Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + + End Sub + + Private Sub bwCompileList_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwCompileList.DoWork + Try + tArray = cTrailer.GetTrailers(Me.imdbID, False) + + If Me.bwCompileList.CancellationPending Then + e.Cancel = True + End If + Catch + End Try + End Sub + + Private Sub bwCompileList_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwCompileList.RunWorkerCompleted + If Not e.Cancelled Then + If Me.tArray.Count > 0 Then + For Each tTrail As String In Me.tArray + Me.lbTrailers.Items.Add(tTrail) + Next + + Me.btnGetTrailers.Visible = False + Else + Me.btnGetTrailers.Enabled = False + End If + + End If + + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Sub + + Private Sub bwDownloadTrailer_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTrailer.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + + If Args.bType Then + Me.tURL = cTrailer.DownloadTrailer(Me.sPath, Args.Parameter) + Else + Me.prePath = cTrailer.DownloadTrailer(Path.Combine(Master.TempPath, Path.GetFileName(Me.sPath)), Args.Parameter) + End If + + Catch + End Try + + e.Result = Args.bType + + If Me.bwDownloadTrailer.CancellationPending Then + e.Cancel = True + End If + End Sub + + Private Sub bwDownloadTrailer_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwDownloadTrailer.ProgressChanged + pbStatus.Value = e.ProgressPercentage + End Sub + + Private Sub bwDownloadTrailer_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadTrailer.RunWorkerCompleted + If Not e.Cancelled Then + If Convert.ToBoolean(e.Result) Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + If Not String.IsNullOrEmpty(Me.prePath) Then System.Diagnostics.Process.Start(String.Concat("""", prePath, """")) + End If + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.cTrailer.Cancel() + + If Me.bwCompileList.IsBusy Then Me.bwCompileList.CancelAsync() + If Me.bwDownloadTrailer.IsBusy Then Me.bwDownloadTrailer.CancelAsync() + + While Me.bwCompileList.IsBusy OrElse Me.bwDownloadTrailer.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + AddHandler cTrailer.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + + Private Sub dlgTrailer_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub DownloadProgressUpdated(ByVal iProgress As Integer) + bwDownloadTrailer.ReportProgress(iProgress) + End Sub + + Private Sub lbTrailers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbTrailers.SelectedIndexChanged + Me.SetEnabled(True) + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.BeginDownload(True) + End Sub + + Private Sub SetEnabled(ByVal DeletePre As Boolean) + If DeletePre AndAlso Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + File.Delete(Me.prePath) + Me.prePath = String.Empty + End If + + If StringUtils.isValidURL(Me.txtYouTube.Text) OrElse Me.lbTrailers.SelectedItems.Count > 0 OrElse Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Enabled = True + Me.btnSetNfo.Enabled = True + Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") + Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") + Else + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + Else + Me.OK_Button.Enabled = False + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnPlayTrailer.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(64, "Select Trailer") + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.GroupBox1.Text = Master.eLang.GetString(65, "Select Trailer to Download") + Me.GroupBox2.Text = Master.eLang.GetString(66, "Manual Trailer Entry") + Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") + Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") + Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") + End Sub + + Private Sub txtManual_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtManual.TextChanged + Me.SetEnabled(True) + End Sub + + Private Sub txtYouTube_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtYouTube.TextChanged + Me.SetEnabled(True) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim bType As Boolean + Dim Parameter As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailerFormat.Designer.vb new file mode 100644 index 0000000..22f1374 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailerFormat.Designer.vb @@ -0,0 +1,155 @@ + _ +Partial Class dlgTrailerFormat + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(84, 117) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(154, 117) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(17, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(78, 69) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(53, 2) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(114, 100) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(10, 29) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.pnlStatus) + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(2, 4) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(220, 111) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 143) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lstFormats As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailerFormat.resx b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailerFormat.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailerFormat.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailerFormat.vb b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailerFormat.vb new file mode 100644 index 0000000..8f0ad6e --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/Scraper/dlgTrailerFormat.vb @@ -0,0 +1,114 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Public Class dlgTrailerFormat + +#Region "Fields" + + Private WithEvents YouTube As YouTube.Scraper + Private _selectedformaturl As String + Private _yturl As String + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal YTURL As String) As String + Me._yturl = YTURL + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return _selectedformaturl + Else + Return String.Empty + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailerFormat_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + Me.SetUp() + + lstFormats.DataSource = Nothing + + YouTube = New YouTube.Scraper + YouTube.GetVideoLinksAsync(Me._yturl) + + Catch ex As Exception + MsgBox(Master.eLang.GetString(71, "The video format links could not be retrieved."), MsgBoxStyle.Critical, Master.eLang.GetString(72, "Error Retrieving Video Format Links")) + End Try + End Sub + + Private Sub lstFormats_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFormats.SelectedIndexChanged + Try + Me._selectedformaturl = DirectCast(lstFormats.SelectedItem, YouTube.VideoLinkItem).URL + + If Me.lstFormats.SelectedItems.Count > 0 Then + Me.OK_Button.Enabled = True + Else + Me.OK_Button.Enabled = False + End If + Catch + End Try + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(73, "Select Format") + Me.lblStatus.Text = Master.eLang.GetString(74, "Getting available formats...") + Me.GroupBox1.Text = Master.eLang.GetString(75, "Available Formats") + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub YouTube_VideoLinksRetrieved(ByVal bSuccess As Boolean) Handles YouTube.VideoLinksRetrieved + Try + + If bSuccess Then + lstFormats.DataSource = YouTube.VideoLinks.Values.ToList + lstFormats.DisplayMember = "Description" + lstFormats.ValueMember = "URL" + + If YouTube.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + Me.lstFormats.SelectedIndex = YouTube.VideoLinks.IndexOfKey(Master.eSettings.PreferredTrailerQuality) + ElseIf Me.lstFormats.Items.Count = 1 Then + Me.lstFormats.SelectedIndex = 0 + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + Me.pnlStatus.Visible = False + Me.lstFormats.Enabled = True + End Try + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/frmTMDBInfoSettingsHolder.Designer.vb b/Addons/scraper.EmberCore.TMDB/frmTMDBInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..f610c2c --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/frmTMDBInfoSettingsHolder.Designer.vb @@ -0,0 +1,545 @@ + _ +Partial Class frmTMDBInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.chkFallBackEng = New System.Windows.Forms.CheckBox() + Me.cbTMDBPrefLanguage = New System.Windows.Forms.ComboBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtTMDBApiKey = New System.Windows.Forms.TextBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.txtFANARTTVApiKey = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.pbTMDB = New System.Windows.Forms.PictureBox() + Me.pbFANARTTV = New System.Windows.Forms.PictureBox() + Me.GroupBox30.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + Me.GroupBox1.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.pbTMDB) + Me.GroupBox30.Controls.Add(Me.chkFallBackEng) + Me.GroupBox30.Controls.Add(Me.cbTMDBPrefLanguage) + Me.GroupBox30.Controls.Add(Me.Label3) + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtTMDBApiKey) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(309, 123) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "TMDB" + ' + 'chkFallBackEng + ' + Me.chkFallBackEng.AutoSize = True + Me.chkFallBackEng.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFallBackEng.Location = New System.Drawing.Point(8, 100) + Me.chkFallBackEng.Name = "chkFallBackEng" + Me.chkFallBackEng.Size = New System.Drawing.Size(129, 17) + Me.chkFallBackEng.TabIndex = 4 + Me.chkFallBackEng.Text = "Fall back on english" + Me.chkFallBackEng.UseVisualStyleBackColor = True + ' + 'cbTMDBPrefLanguage + ' + Me.cbTMDBPrefLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTMDBPrefLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTMDBPrefLanguage.FormattingEnabled = True + Me.cbTMDBPrefLanguage.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTMDBPrefLanguage.Location = New System.Drawing.Point(123, 65) + Me.cbTMDBPrefLanguage.Name = "cbTMDBPrefLanguage" + Me.cbTMDBPrefLanguage.Size = New System.Drawing.Size(45, 21) + Me.cbTMDBPrefLanguage.TabIndex = 3 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label3.Location = New System.Drawing.Point(6, 68) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(111, 13) + Me.Label3.TabIndex = 2 + Me.Label3.Text = "Preferred Language:" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(79, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "TMDB API Key:" + ' + 'txtTMDBApiKey + ' + Me.txtTMDBApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtTMDBApiKey.Name = "txtTMDBApiKey" + Me.txtTMDBApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtTMDBApiKey.TabIndex = 1 + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pbFANARTTV) + Me.GroupBox1.Controls.Add(Me.Label5) + Me.GroupBox1.Controls.Add(Me.txtFANARTTVApiKey) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(8, 169) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(309, 71) + Me.GroupBox1.TabIndex = 75 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Fanart.tv" + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.Location = New System.Drawing.Point(6, 18) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(94, 13) + Me.Label5.TabIndex = 0 + Me.Label5.Text = "Fanart.tv API Key:" + ' + 'txtFANARTTVApiKey + ' + Me.txtFANARTTVApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtFANARTTVApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtFANARTTVApiKey.Name = "txtFANARTTVApiKey" + Me.txtFANARTTVApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtFANARTTVApiKey.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(323, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(283, 150) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(225, 17) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(52, 17) + Me.chkCrew.TabIndex = 19 + Me.chkCrew.Text = "Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(131, 123) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 89) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 72) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 89) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 123) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(131, 106) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 106) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 72) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'pbTMDB + ' + Me.pbTMDB.Image = CType(resources.GetObject("pbTMDB.Image"), System.Drawing.Image) + Me.pbTMDB.Location = New System.Drawing.Point(287, 34) + Me.pbTMDB.Name = "pbTMDB" + Me.pbTMDB.Size = New System.Drawing.Size(16, 16) + Me.pbTMDB.TabIndex = 5 + Me.pbTMDB.TabStop = False + ' + 'pbFANARTTV + ' + Me.pbFANARTTV.Image = CType(resources.GetObject("pbFANARTTV.Image"), System.Drawing.Image) + Me.pbFANARTTV.Location = New System.Drawing.Point(287, 34) + Me.pbFANARTTV.Name = "pbFANARTTV" + Me.pbFANARTTV.Size = New System.Drawing.Size(16, 16) + Me.pbFANARTTV.TabIndex = 6 + Me.pbFANARTTV.TabStop = False + ' + 'frmTMDBInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox + Friend WithEvents Label18 As System.Windows.Forms.Label + Friend WithEvents txtTMDBApiKey As System.Windows.Forms.TextBox + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents gbOptions As System.Windows.Forms.GroupBox + Friend WithEvents chkCountry As System.Windows.Forms.CheckBox + Friend WithEvents chkStudio As System.Windows.Forms.CheckBox + Friend WithEvents chkRuntime As System.Windows.Forms.CheckBox + Friend WithEvents chkOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkTagline As System.Windows.Forms.CheckBox + Friend WithEvents chkCast As System.Windows.Forms.CheckBox + Friend WithEvents chkVotes As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailer As System.Windows.Forms.CheckBox + Friend WithEvents chkRating As System.Windows.Forms.CheckBox + Friend WithEvents chkRelease As System.Windows.Forms.CheckBox + Friend WithEvents chkMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkYear As System.Windows.Forms.CheckBox + Friend WithEvents chkTitle As System.Windows.Forms.CheckBox + Friend WithEvents chkFallBackEng As System.Windows.Forms.CheckBox + Friend WithEvents cbTMDBPrefLanguage As System.Windows.Forms.ComboBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents chkCrew As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label5 As System.Windows.Forms.Label + Friend WithEvents txtFANARTTVApiKey As System.Windows.Forms.TextBox + Friend WithEvents pbTMDB As System.Windows.Forms.PictureBox + Friend WithEvents pbFANARTTV As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.EmberCore.TMDB/frmTMDBInfoSettingsHolder.resx b/Addons/scraper.EmberCore.TMDB/frmTMDBInfoSettingsHolder.resx new file mode 100644 index 0000000..b1bac92 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/frmTMDBInfoSettingsHolder.resx @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== + + + + + 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 + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/frmTMDBInfoSettingsHolder.vb b/Addons/scraper.EmberCore.TMDB/frmTMDBInfoSettingsHolder.vb new file mode 100644 index 0000000..d17768a --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/frmTMDBInfoSettingsHolder.vb @@ -0,0 +1,218 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports System.Diagnostics + +Public Class frmTMDBInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + Public Event SetupNeedsRestart() + +#End Region 'Events + +#Region "Fields" + + Private Api1 As String + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Private Sub chkCrew_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFallBackEng_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkFallBackEng.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTMDBPrefLanguage_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cbTMDBPrefLanguage.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtFANARTTVApiKey_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtFANARTTVApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Enter + Api1 = txtTMDBApiKey.Text + End Sub + + Private Sub txtTMDBApiKey_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextValidated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Validated + If Not (Api1 = txtTMDBApiKey.Text) Then + RaiseEvent SetupNeedsRestart() + End If + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label18.Text = Master.eLang.GetString(854, "TMDB API Key:") + Me.gbOptions.Text = Master.eLang.GetString(6, "Scraper Fields - Scraper specific") + Me.chkStudio.Text = Master.eLang.GetString(395, "Studio", True) + Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime", True) + Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline", True) + Me.chkGenre.Text = Master.eLang.GetString(20, "Genres", True) + Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline", True) + Me.chkCast.Text = Master.eLang.GetString(856, "Cast and Crew", True) + Me.chkVotes.Text = Master.eLang.GetString(399, "Votes", True) + Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer", True) + Me.chkRating.Text = Master.eLang.GetString(400, "Rating", True) + Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date", True) + Me.chkMPAA.Text = Master.eLang.GetString(859, "MPAA & Certification", True) + Me.chkYear.Text = Master.eLang.GetString(278, "Year", True) + Me.chkTitle.Text = Master.eLang.GetString(21, "Title", True) + 'Me.chkCertification.Text = Master.eLang.GetString(722, "Certification", True) + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkFallBackEng.Text = Master.eLang.GetString(114, "Fall back on english") + Me.Label3.Text = Master.eLang.GetString(115, "Preferred Language:") + + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + +#End Region 'Methods + + Private Sub PictureBox2_Click(sender As System.Object, e As System.EventArgs) Handles pbTMDB.Click + If Master.isWindows Then + Process.Start("http://docs.themoviedb.apiary.io/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://docs.themoviedb.apiary.io/" + Explorer.Start() + End Using + End If + + End Sub + + Private Sub pbFANARTTV_Click(sender As System.Object, e As System.EventArgs) Handles pbFANARTTV.Click + If Master.isWindows Then + Process.Start("http://fanart.tv/get-an-api-key/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://fanart.tv/get-an-api-key/" + Explorer.Start() + End Using + End If + + End Sub +End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/frmTMDBMediaSettingsHolder.Designer.vb b/Addons/scraper.EmberCore.TMDB/frmTMDBMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..68e3c03 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/frmTMDBMediaSettingsHolder.Designer.vb @@ -0,0 +1,525 @@ + _ +Partial Class frmTMDBMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBMediaSettingsHolder)) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.chkUseFANARTTV = New System.Windows.Forms.CheckBox() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkUseMPDB = New System.Windows.Forms.CheckBox() + Me.chkUseIMDBp = New System.Windows.Forms.CheckBox() + Me.chkUseIMPA = New System.Windows.Forms.CheckBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.cbManualETSize = New System.Windows.Forms.ComboBox() + Me.grpSaveFanart = New System.Windows.Forms.GroupBox() + Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() + Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() + Me.chkScrapePoster = New System.Windows.Forms.CheckBox() + Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.txtTimeout = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() + Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox9.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.grpSaveFanart.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.GroupBox3) + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Panel2) + Me.pnlSettings.Location = New System.Drawing.Point(12, 4) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 94 + Me.PictureBox1.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.GroupBox6) + Me.GroupBox3.Controls.Add(Me.GroupBox9) + Me.GroupBox3.Controls.Add(Me.GroupBox4) + Me.GroupBox3.Controls.Add(Me.grpSaveFanart) + Me.GroupBox3.Controls.Add(Me.chkScrapePoster) + Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(15, 31) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(505, 154) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Images" + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.chkUseFANARTTV) + Me.GroupBox6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox6.Location = New System.Drawing.Point(331, 21) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(160, 55) + Me.GroupBox6.TabIndex = 96 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Get Fanart From:" + ' + 'chkUseFANARTTV + ' + Me.chkUseFANARTTV.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseFANARTTV.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseFANARTTV.Location = New System.Drawing.Point(6, 21) + Me.chkUseFANARTTV.Name = "chkUseFANARTTV" + Me.chkUseFANARTTV.Size = New System.Drawing.Size(150, 22) + Me.chkUseFANARTTV.TabIndex = 2 + Me.chkUseFANARTTV.Text = "fanart.tv" + Me.chkUseFANARTTV.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseFANARTTV.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkUseMPDB) + Me.GroupBox9.Controls.Add(Me.chkUseIMDBp) + Me.GroupBox9.Controls.Add(Me.chkUseIMPA) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(165, 19) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(160, 78) + Me.GroupBox9.TabIndex = 5 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Get Poster From:" + ' + 'chkUseMPDB + ' + Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) + Me.chkUseMPDB.Name = "chkUseMPDB" + Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) + Me.chkUseMPDB.TabIndex = 2 + Me.chkUseMPDB.Text = "MoviePosterDB.com" + Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.UseVisualStyleBackColor = True + ' + 'chkUseIMDBp + ' + Me.chkUseIMDBp.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMDBp.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMDBp.Location = New System.Drawing.Point(6, 18) + Me.chkUseIMDBp.Name = "chkUseIMDBp" + Me.chkUseIMDBp.Size = New System.Drawing.Size(149, 19) + Me.chkUseIMDBp.TabIndex = 0 + Me.chkUseIMDBp.Text = "IMDB.com" + Me.chkUseIMDBp.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMDBp.UseVisualStyleBackColor = True + ' + 'chkUseIMPA + ' + Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) + Me.chkUseIMPA.Name = "chkUseIMPA" + Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) + Me.chkUseIMPA.TabIndex = 1 + Me.chkUseIMPA.Text = "IMPAwards.com" + Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.UseVisualStyleBackColor = True + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.cbManualETSize) + Me.GroupBox4.Location = New System.Drawing.Point(331, 94) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(160, 55) + Me.GroupBox4.TabIndex = 4 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "TMDB Extrathumbs Size:" + ' + 'cbManualETSize + ' + Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbManualETSize.FormattingEnabled = True + Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) + Me.cbManualETSize.Location = New System.Drawing.Point(12, 21) + Me.cbManualETSize.Name = "cbManualETSize" + Me.cbManualETSize.Size = New System.Drawing.Size(131, 21) + Me.cbManualETSize.TabIndex = 0 + ' + 'grpSaveFanart + ' + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) + Me.grpSaveFanart.Enabled = False + Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) + Me.grpSaveFanart.Name = "grpSaveFanart" + Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) + Me.grpSaveFanart.TabIndex = 2 + Me.grpSaveFanart.TabStop = False + Me.grpSaveFanart.Text = "Save Fanart In:" + ' + 'optFanartFolderExtraFanart + ' + Me.optFanartFolderExtraFanart.AutoSize = True + Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) + Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" + Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) + Me.optFanartFolderExtraFanart.TabIndex = 1 + Me.optFanartFolderExtraFanart.TabStop = True + Me.optFanartFolderExtraFanart.Text = "\extrafanart" + Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True + ' + 'optFanartFolderExtraThumbs + ' + Me.optFanartFolderExtraThumbs.AutoSize = True + Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) + Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" + Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) + Me.optFanartFolderExtraThumbs.TabIndex = 0 + Me.optFanartFolderExtraThumbs.TabStop = True + Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" + Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True + ' + 'chkScrapePoster + ' + Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) + Me.chkScrapePoster.Name = "chkScrapePoster" + Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) + Me.chkScrapePoster.TabIndex = 0 + Me.chkScrapePoster.Text = "Get Posters" + Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.UseVisualStyleBackColor = True + ' + 'chkScrapeFanart + ' + Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) + Me.chkScrapeFanart.Name = "chkScrapeFanart" + Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) + Me.chkScrapeFanart.TabIndex = 1 + Me.chkScrapeFanart.Text = "Get Fanart" + Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox1.Controls.Add(Me.Label23) + Me.GroupBox1.Controls.Add(Me.txtTimeout) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(15, 203) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(464, 126) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Trailers" + Me.GroupBox1.UseCompatibleTextRendering = True + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label23.Location = New System.Drawing.Point(21, 43) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(51, 13) + Me.Label23.TabIndex = 1 + Me.Label23.Text = "Timeout:" + ' + 'txtTimeout + ' + Me.txtTimeout.Enabled = False + Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTimeout.Location = New System.Drawing.Point(82, 39) + Me.txtTimeout.Name = "txtTimeout" + Me.txtTimeout.Size = New System.Drawing.Size(50, 22) + Me.txtTimeout.TabIndex = 2 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) + Me.GroupBox2.Controls.Add(Me.GroupBox5) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(165, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(291, 104) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Supported Sites:" + ' + 'chkTrailerIMDB + ' + Me.chkTrailerIMDB.AutoSize = True + Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) + Me.chkTrailerIMDB.Name = "chkTrailerIMDB" + Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) + Me.chkTrailerIMDB.TabIndex = 5 + Me.chkTrailerIMDB.Text = "IMDB" + Me.chkTrailerIMDB.UseVisualStyleBackColor = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) + Me.GroupBox5.Controls.Add(Me.Label2) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) + Me.GroupBox5.Location = New System.Drawing.Point(123, 12) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(161, 83) + Me.GroupBox5.TabIndex = 4 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Youtube/TMDB Trailer:" + ' + 'cbTrailerTMDBPref + ' + Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerTMDBPref.Enabled = False + Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTrailerTMDBPref.FormattingEnabled = True + Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) + Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" + Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) + Me.cbTrailerTMDBPref.TabIndex = 1 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label2.Location = New System.Drawing.Point(26, 26) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(111, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Preferred Language:" + ' + 'chkTrailerTMDBXBMC + ' + Me.chkTrailerTMDBXBMC.AutoSize = True + Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) + Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" + Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) + Me.chkTrailerTMDBXBMC.TabIndex = 1 + Me.chkTrailerTMDBXBMC.Text = "XBMC Format" + Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True + ' + 'chkTrailerTMDB + ' + Me.chkTrailerTMDB.AutoSize = True + Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) + Me.chkTrailerTMDB.Name = "chkTrailerTMDB" + Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) + Me.chkTrailerTMDB.TabIndex = 0 + Me.chkTrailerTMDB.Text = "Youtube/TMDB" + Me.chkTrailerTMDB.UseVisualStyleBackColor = True + ' + 'Panel2 + ' + Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Controls.Add(Me.btnDown) + Me.Panel2.Controls.Add(Me.btnUp) + Me.Panel2.Controls.Add(Me.cbEnabled) + Me.Panel2.Location = New System.Drawing.Point(0, 0) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(1125, 25) + Me.Panel2.TabIndex = 0 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(500, 7) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 12) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'frmTMDBMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.grpSaveFanart.ResumeLayout(False) + Me.grpSaveFanart.PerformLayout() + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents chkScrapeFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkScrapePoster As System.Windows.Forms.CheckBox + Friend WithEvents chkDownloadTrailer As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Panel2 As System.Windows.Forms.Panel + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Label23 As System.Windows.Forms.Label + Friend WithEvents txtTimeout As System.Windows.Forms.TextBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents grpSaveFanart As System.Windows.Forms.GroupBox + Friend WithEvents optFanartFolderExtraFanart As System.Windows.Forms.RadioButton + Friend WithEvents optFanartFolderExtraThumbs As System.Windows.Forms.RadioButton + Friend WithEvents chkTrailerTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDBXBMC As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents cbManualETSize As System.Windows.Forms.ComboBox + Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox + Friend WithEvents cbTrailerTMDBPref As System.Windows.Forms.ComboBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox9 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseMPDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMDBp As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMPA As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerIMDB As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseFANARTTV As System.Windows.Forms.CheckBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/frmTMDBMediaSettingsHolder.resx b/Addons/scraper.EmberCore.TMDB/frmTMDBMediaSettingsHolder.resx new file mode 100644 index 0000000..3c46229 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/frmTMDBMediaSettingsHolder.resx @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/frmTMDBMediaSettingsHolder.vb b/Addons/scraper.EmberCore.TMDB/frmTMDBMediaSettingsHolder.vb new file mode 100644 index 0000000..6ccca98 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/frmTMDBMediaSettingsHolder.vb @@ -0,0 +1,165 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTMDBMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order + 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order - 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Sub CheckTrailer() + Me.txtTimeout.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDBXBMC.Enabled = Me.chkDownloadTrailer.Checked + If Not Me.chkDownloadTrailer.Checked Then + Me.txtTimeout.Text = "2" + Me.chkTrailerTMDB.Checked = False + Me.chkTrailerTMDBXBMC.Checked = False + End If + End Sub + + Private Sub chkDownloadTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDownloadTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + CheckTrailer() + End Sub + + Private Sub chkTrailerTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDB.CheckedChanged + chkTrailerTMDBXBMC.Enabled = chkTrailerTMDB.Checked + cbTrailerTMDBPref.Enabled = chkTrailerTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerIMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerTMDBXBMC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDBXBMC.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkScrapeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapeFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + grpSaveFanart.Enabled = chkScrapeFanart.Checked + End Sub + + Private Sub chkScrapePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapePoster.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseFANARTTV_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkUseFANARTTV.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMDBp_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkUseIMDBp.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMDBf_CheckedChanged(sender As System.Object, e As System.EventArgs) + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMPA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseIMPA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseMPDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseMPDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Sub SetUp() + Me.txtTimeout.Text = Master.eSettings.TrailerTimeout.ToString + Me.Label23.Text = Master.eLang.GetString(7, "Timeout:") + Me.GroupBox2.Text = Master.eLang.GetString(8, "Supported Sites:") + Me.grpSaveFanart.Text = Master.eLang.GetString(8001, "Save Fanart In:") + Me.chkDownloadTrailer.Text = Master.eLang.GetString(529, "Enable Trailer Support", True) + Me.Label3.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkScrapePoster.Text = Master.eLang.GetString(101, "Get Posters") + Me.chkScrapeFanart.Text = Master.eLang.GetString(102, "Get Fanart") + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + Private Sub txtTimeout_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTimeout.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraThumbs_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraThumbs.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbManualETSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbManualETSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTrailerTMDBPref_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbTrailerTMDBPref.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/packages.config b/Addons/scraper.EmberCore.TMDB/packages.config new file mode 100644 index 0000000..9d72b1b --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/scraper.EmberCore.TMDB.vbproj b/Addons/scraper.EmberCore.TMDB/scraper.EmberCore.TMDB.vbproj new file mode 100644 index 0000000..1827882 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/scraper.EmberCore.TMDB.vbproj @@ -0,0 +1,287 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {2EB03DAA-1A5D-47C5-9883-56DCD0F70D23} + Library + EmberScraperModule + scraper.EmberCore.TMDB + 512 + Windows + v3.5 + On + Binary + On + On + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + ..\..\ + true + + + + + + + + + + + true + true + true + ..\..\EmberMM-Dev\Modules\ + 42353,42354,42355 + full + x86 + 41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109 + ..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.vb + AllRules.ruleset + ;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets + ;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules + + + true + ..\..\EmberMM-Deploy\Modules\ + true + 42353,42354,42355 + pdbonly + x86 + 41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109 + ..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.vb + AllRules.ruleset + ;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets + ;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules + + + + ..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll + + + ..\..\packages\RestSharp.104.1\lib\net35\RestSharp.dll + + + + + + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + + + + + + + + + dlgTMDBSearchResults.vb + + + Form + + + dlgImgSelect.vb + + + Form + + + dlgTrailer.vb + + + Form + + + dlgTrailerFormat.vb + + + Form + + + frmTMDBMediaSettingsHolder.vb + + + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + frmTMDBInfoSettingsHolder.vb + + + Form + + + + + + dlgTMDBSearchResults.vb + Designer + + + dlgImgSelect.vb + Designer + + + dlgTrailer.vb + Designer + + + dlgTrailerFormat.vb + Designer + + + frmTMDBMediaSettingsHolder.vb + Designer + + + frmTMDBInfoSettingsHolder.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + {208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279} + EmberAPI + False + + + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6} + FanartTVAPI + + + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8} + WatTmdb + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + + + + + + \ No newline at end of file diff --git a/Addons/scraper.EmberCore.TMDB/scraperMovieTMDBModule.vb b/Addons/scraper.EmberCore.TMDB/scraperMovieTMDBModule.vb new file mode 100644 index 0000000..7ac1344 --- /dev/null +++ b/Addons/scraper.EmberCore.TMDB/scraperMovieTMDBModule.vb @@ -0,0 +1,761 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports RestSharp +Imports WatTmdb +Imports EmberScraperModule.TMDBg + +''' +''' Native Scraper +''' +''' +Public Class EmberTMDBScraperModule + Implements Interfaces.EmberMovieScraperModule + + +#Region "Fields" + + Public Shared ConfigOptions As New Structures.ScrapeOptions + Public Shared ConfigScrapeModifier As New Structures.ScrapeModifier + Public Shared _AssemblyName As String + + Private dFImgSelect As dlgImgSelect = Nothing + + Private TMDBId As String + 'Private IMDBid As String + + ''' + ''' Scraping Here + ''' + ''' + Private _MySettings As New sMySettings + Private _TMDBg As TMDBg.Scraper + Private _Name As String = "Ember TMDB Movie Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmTMDBInfoSettingsHolder + Private _setupPost As frmTMDBMediaSettingsHolder + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberMovieScraperModule.ModuleSettingsChanged + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsScraper + Get + Return True + End Get + End Property + + ReadOnly Property ModuleName() As String Implements Interfaces.EmberMovieScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberMovieScraperModule.ModuleVersion + Get + Return System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Property PostScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Property ScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean Implements Interfaces.EmberMovieScraperModule.QueryPostScraperCapabilities + Select Case cap + Case Enums.PostScraperCapabilities.Fanart + Return True + Case Enums.PostScraperCapabilities.Poster + Return True + Case Enums.PostScraperCapabilities.Trailer + If _MySettings.DownloadTrailers Then Return True + End Select + Return False + End Function + + Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.DownloadTrailer + Using dTrailer As New dlgTrailer(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + sURL = dTrailer.ShowDialog(DBMovie.Movie.TMDBID, DBMovie.Filename) + End Using + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef studio As List(Of String)) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.GetMovieStudio + '' perche' lo crea? + + ''Dim TMDBg As New TMDBg.Scraper + ''TMDBg.IMDBURL = MySettings.IMDBURL + studio = _TMDBg.GetMovieStudios(DBMovie.Movie.ID) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupNeedsRestart() + RaiseEvent SetupNeedsRestart() + End Sub + + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + + Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberMovieScraperModule.Init + _AssemblyName = sAssemblyName + LoadSettings() + 'Must be after Load settings to retrieve the correct API key + _TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Info") + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + End If + End If + _TMDBConf = _TMDBApi.GetConfiguration() + _TMDBApiE = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey) + _TMDBConfE = _TMDBApiE.GetConfiguration() + _TMDBg = New TMDBg.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + End Sub + + Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupPostScraper + Dim Spanel As New Containers.SettingsPanel + _setupPost = New frmTMDBMediaSettingsHolder + LoadSettings() + _setupPost.cbEnabled.Checked = _PostScraperEnabled + _setupPost.chkTrailerIMDB.Checked = _MySettings.UseIMDBTrailer + _setupPost.chkTrailerTMDB.Checked = _MySettings.UseTMDBTrailer + _setupPost.cbTrailerTMDBPref.Text = _MySettings.UseTMDBTrailerPref + _setupPost.chkTrailerTMDBXBMC.Checked = _MySettings.UseTMDBTrailerXBMC + _setupPost.chkScrapePoster.Checked = ConfigScrapeModifier.Poster + _setupPost.chkScrapeFanart.Checked = ConfigScrapeModifier.Fanart + _setupPost.chkUseIMDBp.Checked = _MySettings.UseIMDB + _setupPost.chkUseIMPA.Checked = _MySettings.UseIMPA + _setupPost.chkUseMPDB.Checked = _MySettings.UseMPDB + _setupPost.chkUseFANARTTV.Checked = _MySettings.UseFANARTTV + + ' ad size from TMDB + '_setupPost.cbManualETSize.Items.Clear() + 'If Not IsNothing(_TMDBg.TMDBConf.images) Then + ' For Each aSi In _TMDBg.TMDBConf.images.poster_sizes + ' _setupPost.cbManualETSize.Items.Add(aSi) + ' Next + ' + 'End If + _setupPost.cbManualETSize.Text = _MySettings.ManualETSize + + _setupPost.txtTimeout.Text = _MySettings.TrailerTimeout.ToString + _setupPost.chkDownloadTrailer.Checked = _MySettings.DownloadTrailers + _setupPost.CheckTrailer() + _setupPost.orderChanged() + Spanel.Name = String.Concat(Me._Name, "PostScraper") + Spanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + Spanel.Prefix = "TMDBMovieMedia_" + Spanel.Order = 110 + Spanel.Parent = "pnlMovieMedia" + Spanel.Type = Master.eLang.GetString(36, "Movies", True) + Spanel.ImageIndex = If(Me._PostScraperEnabled, 9, 10) + Spanel.Panel = Me._setupPost.pnlSettings + + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return Spanel + End Function + + Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmTMDBInfoSettingsHolder + LoadSettings() + _setup.cbEnabled.Checked = _ScraperEnabled + _setup.chkTitle.Checked = ConfigOptions.bTitle + _setup.chkYear.Checked = ConfigOptions.bYear + _setup.chkMPAA.Checked = ConfigOptions.bMPAA + _setup.chkRelease.Checked = ConfigOptions.bRelease + _setup.chkRuntime.Checked = ConfigOptions.bRuntime + _setup.chkRating.Checked = ConfigOptions.bRating + _setup.chkVotes.Checked = ConfigOptions.bVotes + _setup.chkStudio.Checked = ConfigOptions.bStudio + _setup.chkTagline.Checked = ConfigOptions.bTagline + _setup.chkOutline.Checked = ConfigOptions.bOutline + _setup.chkCast.Checked = ConfigOptions.bFullCast + _setup.chkGenre.Checked = ConfigOptions.bGenre + _setup.chkTrailer.Checked = ConfigOptions.bTrailer + _setup.chkCountry.Checked = ConfigOptions.bCountry + _setup.chkCrew.Checked = ConfigOptions.bFullCrew + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + + '_setup.chkCertification.Checked = ConfigOptions.bCert + + If String.IsNullOrEmpty(_MySettings.TMDBAPIKey) Then + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + _setup.txtTMDBApiKey.Text = _MySettings.TMDBAPIKey + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.orderChanged() + If String.IsNullOrEmpty(_MySettings.FANARTTVApiKey) Then + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _setup.txtFANARTTVApiKey.Text = _MySettings.FANARTTVApiKey + + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + SPanel.Prefix = "TMDBMovieInfo_" + SPanel.Order = 110 + SPanel.Parent = "pnlMovieData" + SPanel.Type = Master.eLang.GetString(36, "Movies", True) + SPanel.ImageIndex = If(_ScraperEnabled, 9, 10) + SPanel.Panel = _setup.pnlSettings + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return SPanel + End Function + + Sub LoadSettings() + ConfigOptions.bTitle = AdvancedSettings.GetBooleanSetting("DoTitle", True) + ConfigOptions.bYear = AdvancedSettings.GetBooleanSetting("DoYear", True) + ConfigOptions.bMPAA = AdvancedSettings.GetBooleanSetting("DoMPAA", True) + ConfigOptions.bRelease = AdvancedSettings.GetBooleanSetting("DoRelease", True) + ConfigOptions.bRuntime = AdvancedSettings.GetBooleanSetting("DoRuntime", True) + ConfigOptions.bRating = AdvancedSettings.GetBooleanSetting("DoRating", True) + ConfigOptions.bVotes = AdvancedSettings.GetBooleanSetting("DoVotes", True) + ConfigOptions.bStudio = AdvancedSettings.GetBooleanSetting("DoStudio", True) + ConfigOptions.bTagline = AdvancedSettings.GetBooleanSetting("DoTagline", True) + ConfigOptions.bOutline = AdvancedSettings.GetBooleanSetting("DoOutline", True) + ConfigOptions.bPlot = AdvancedSettings.GetBooleanSetting("DoPlot", True) + ConfigOptions.bCast = AdvancedSettings.GetBooleanSetting("DoCast", True) + ConfigOptions.bDirector = AdvancedSettings.GetBooleanSetting("DoDirector", True) + ConfigOptions.bWriters = AdvancedSettings.GetBooleanSetting("DoWriters", True) + ConfigOptions.bProducers = AdvancedSettings.GetBooleanSetting("DoProducers", True) + ConfigOptions.bGenre = AdvancedSettings.GetBooleanSetting("DoGenres", True) + ConfigOptions.bTrailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + ConfigOptions.bMusicBy = AdvancedSettings.GetBooleanSetting("DoMusic", True) + ConfigOptions.bOtherCrew = AdvancedSettings.GetBooleanSetting("DoOtherCrews", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("DoFullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("DoFullCrews", True) + ConfigOptions.bTop250 = AdvancedSettings.GetBooleanSetting("DoTop250", True) + ConfigOptions.bCountry = AdvancedSettings.GetBooleanSetting("DoCountry", True) + ConfigOptions.bCert = AdvancedSettings.GetBooleanSetting("DoCert", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("FullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("FullCrew", True) + + _MySettings.TMDBAPIKey = AdvancedSettings.GetSetting("TMDBAPIKey", "Get your API Key from http://www.themoviedb.org") + _MySettings.FANARTTVApiKey = AdvancedSettings.GetSetting("FANARTTVApiKey", "Get your API Key from http://fanart.tv") + _MySettings.FallBackEng = AdvancedSettings.GetBooleanSetting("FallBackEn", False) + _MySettings.TMDBLanguage = AdvancedSettings.GetSetting("TMDBLanguage", "en") + _MySettings.DownloadTrailers = AdvancedSettings.GetBooleanSetting("DownloadTraliers", False) + + _MySettings.TrailerTimeout = Convert.ToInt32(AdvancedSettings.GetSetting("TrailerTimeout", "10")) + _MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) + _MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) + _MySettings.UseIMPA = AdvancedSettings.GetBooleanSetting("UseIMPA", False) + _MySettings.UseMPDB = AdvancedSettings.GetBooleanSetting("UseMPDB", False) + _MySettings.UseIMDB = AdvancedSettings.GetBooleanSetting("UseIMDB", False) + _MySettings.UseFANARTTV = AdvancedSettings.GetBooleanSetting("UseFANARTTV", False) + _MySettings.UseIMDBTrailer = AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", True) + _MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + _MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) + + ConfigScrapeModifier.DoSearch = True + ConfigScrapeModifier.Meta = True + ConfigScrapeModifier.NFO = True + ConfigScrapeModifier.Extra = True + ConfigScrapeModifier.Actors = True + + ConfigScrapeModifier.Poster = AdvancedSettings.GetBooleanSetting("DoPoster", True) + ConfigScrapeModifier.Fanart = AdvancedSettings.GetBooleanSetting("DoFanart", True) + ConfigScrapeModifier.Trailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + End Sub + + Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.PostScraper + 'LoadSettings() + Dim Poster As New Images + Dim Fanart As New Images + Dim pResults As Containers.ImgResult + Dim fResults As Containers.ImgResult + Dim tURL As String = String.Empty + Dim Trailer As Trailers + Dim aScrapeImages As ScrapeImages + + LoadSettings() + If String.IsNullOrEmpty(DBMovie.Movie.TMDBID) Then + _TMDBg.GetMovieID(DBMovie) + End If + Trailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim saveModifier As Structures.ScrapeModifier = Master.GlobalScrapeMod + Master.GlobalScrapeMod = Functions.ScrapeModifierAndAlso(Master.GlobalScrapeMod, ConfigScrapeModifier) + + Dim doSave As Boolean = False + + aScrapeImages = New ScrapeImages(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + If Master.GlobalScrapeMod.Poster Then + Poster.Clear() + If Poster.IsAllowedToDownload(DBMovie, Enums.ImageType.Posters) Then + pResults = New Containers.ImgResult + If aScrapeImages.GetPreferredImage(Poster, DBMovie.Movie.ID, DBMovie.Movie.TMDBID, Enums.ImageType.Posters, pResults, DBMovie.Filename, False, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Poster.Image) Then + pResults.ImagePath = Poster.SaveAsPoster(DBMovie) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(76, "A poster of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size")) + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApi, _MySettings) + pResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Posters) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + End Using + End If + End If + End If + End If + Dim didEts As Boolean + If Master.GlobalScrapeMod.Fanart Then + Fanart.Clear() + If Fanart.IsAllowedToDownload(DBMovie, Enums.ImageType.Fanart) Then + fResults = New Containers.ImgResult + didEts = True + If aScrapeImages.GetPreferredImage(Fanart, DBMovie.Movie.IMDBID, DBMovie.Movie.TMDBID, Enums.ImageType.Fanart, fResults, DBMovie.Filename, Master.GlobalScrapeMod.Extra, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Fanart.Image) Then + fResults.ImagePath = Fanart.SaveAsFanart(DBMovie) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) ' + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(78, "Fanart of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size:")) + + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApi, _MySettings) + fResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Fanart) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + End Using + End If + End If + End If + End If + If Master.GlobalScrapeMod.Trailer AndAlso _MySettings.DownloadTrailers Then + tURL = Trailer.DownloadSingleTrailer(DBMovie.Filename, DBMovie.Movie.TMDBID, DBMovie.isSingle, DBMovie.Movie.Trailer) + If Not String.IsNullOrEmpty(tURL) Then + If tURL.Substring(0, 22) = "http://www.youtube.com" Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + DBMovie.Movie.Trailer = Replace(tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + DBMovie.Movie.Trailer = tURL + End If + ElseIf tURL.Substring(0, 7) = "http://" Then + DBMovie.Movie.Trailer = tURL + Else + DBMovie.TrailerPath = tURL + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.TrailerItem, True) + End If + End If + End If + If Master.GlobalScrapeMod.Extra Then + If Master.eSettings.AutoET AndAlso DBMovie.isSingle Then + Try + aScrapeImages.GetPreferredFAasET(DBMovie.Movie.TMDBID, DBMovie.Filename) + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.ThumbsItem, True) + Catch ex As Exception + End Try + End If + End If + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then + For Each act As MediaContainers.Person In DBMovie.Movie.Actors + Dim img As New Images + img.FromWeb(act.Thumb) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If + Next + End If + Master.GlobalScrapeMod = saveModifier + Return New Interfaces.ModuleResult With {.breakChain = False, .BoolProperty = didEts} + End Function + + Sub SaveSettings() + AdvancedSettings.SetBooleanSetting("DoFullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("DoFullCrews", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DoTitle", ConfigOptions.bTitle) + AdvancedSettings.SetBooleanSetting("DoYear", ConfigOptions.bYear) + AdvancedSettings.SetBooleanSetting("DoMPAA", ConfigOptions.bMPAA) + AdvancedSettings.SetBooleanSetting("DoRelease", ConfigOptions.bRelease) + AdvancedSettings.SetBooleanSetting("DoRuntime", ConfigOptions.bRuntime) + AdvancedSettings.SetBooleanSetting("DoRating", ConfigOptions.bRating) + AdvancedSettings.SetBooleanSetting("DoVotes", ConfigOptions.bVotes) + AdvancedSettings.SetBooleanSetting("DoStudio", ConfigOptions.bStudio) + AdvancedSettings.SetBooleanSetting("DoTagline", ConfigOptions.bTagline) + AdvancedSettings.SetBooleanSetting("DoOutline", ConfigOptions.bOutline) + AdvancedSettings.SetBooleanSetting("DoPlot", ConfigOptions.bPlot) + AdvancedSettings.SetBooleanSetting("DoCast", ConfigOptions.bCast) + AdvancedSettings.SetBooleanSetting("DoDirector", ConfigOptions.bDirector) + AdvancedSettings.SetBooleanSetting("DoWriters", ConfigOptions.bWriters) + AdvancedSettings.SetBooleanSetting("DoProducers", ConfigOptions.bProducers) + AdvancedSettings.SetBooleanSetting("DoGenres", ConfigOptions.bGenre) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigOptions.bTrailer) + AdvancedSettings.SetBooleanSetting("DoMusic", ConfigOptions.bMusicBy) + AdvancedSettings.SetBooleanSetting("DoOtherCrews", ConfigOptions.bOtherCrew) + AdvancedSettings.SetBooleanSetting("DoCountry", ConfigOptions.bCountry) + AdvancedSettings.SetBooleanSetting("DoTop250", ConfigOptions.bTop250) + AdvancedSettings.SetBooleanSetting("DoCert", ConfigOptions.bCert) + + AdvancedSettings.SetBooleanSetting("FullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("FullCrew", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DownloadTraliers", _MySettings.DownloadTrailers) + + AdvancedSettings.SetSetting("TrailerTimeout", _MySettings.TrailerTimeout.ToString) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailer", _MySettings.UseTMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", _MySettings.UseTMDBTrailerXBMC) + AdvancedSettings.SetBooleanSetting("UseIMDBTrailer", _MySettings.UseIMDBTrailer) + + AdvancedSettings.SetSetting("ManualETSize", _MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("UseTMDBTrailerPref", _MySettings.UseTMDBTrailerPref.ToString) + + AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) + AdvancedSettings.SetBooleanSetting("DoFanart", ConfigScrapeModifier.Fanart) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigScrapeModifier.Trailer) + + AdvancedSettings.SetSetting("TMDBAPIKey", _MySettings.TMDBAPIKey) + AdvancedSettings.SetSetting("FANARTTVApiKey", _MySettings.FANARTTVApiKey) + AdvancedSettings.SetBooleanSetting("FallBackEn", _MySettings.FallBackEng) + AdvancedSettings.SetSetting("TMDBLanguage", _MySettings.TMDBLanguage) + AdvancedSettings.SetBooleanSetting("UseIMPA", _MySettings.UseIMPA) + AdvancedSettings.SetBooleanSetting("UseMPDB", _MySettings.UseMPDB) + AdvancedSettings.SetBooleanSetting("UseIMDB", _MySettings.UseIMDB) + AdvancedSettings.SetBooleanSetting("UseFANARTTV", _MySettings.UseFANARTTV) + End Sub + + Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupPostScraper + _MySettings.DownloadTrailers = _setupPost.chkDownloadTrailer.Checked + _MySettings.UseIMDBTrailer = _setupPost.chkTrailerIMDB.Checked + _MySettings.UseTMDBTrailer = _setupPost.chkTrailerTMDB.Checked + _MySettings.UseTMDBTrailerXBMC = _setupPost.chkTrailerTMDBXBMC.Checked + _MySettings.TrailerTimeout = Convert.ToInt32(_setupPost.txtTimeout.Text) + _MySettings.ManualETSize = _setupPost.cbManualETSize.Text + _MySettings.UseTMDBTrailerPref = _setupPost.cbTrailerTMDBPref.Text + _MySettings.UseIMDB = _setupPost.chkUseIMDBp.Checked + _MySettings.UseIMPA = _setupPost.chkUseIMPA.Checked + _MySettings.UseMPDB = _setupPost.chkUseMPDB.Checked + _MySettings.UseFANARTTV = _setupPost.chkUseFANARTTV.Checked + ConfigScrapeModifier.Poster = _setupPost.chkScrapePoster.Checked + ConfigScrapeModifier.Fanart = _setupPost.chkScrapeFanart.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + RemoveHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + _setupPost.Dispose() + End If + End Sub + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupScraper + If Not String.IsNullOrEmpty(_setup.txtTMDBApiKey.Text) Then + _MySettings.TMDBAPIKey = _setup.txtTMDBApiKey.Text + Else + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + If Not String.IsNullOrEmpty(_setup.txtFANARTTVApiKey.Text) Then + _MySettings.FANARTTVApiKey = _setup.txtFANARTTVApiKey.Text + Else + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + ConfigOptions.bTitle = _setup.chkTitle.Checked + ConfigOptions.bYear = _setup.chkYear.Checked + ConfigOptions.bMPAA = _setup.chkMPAA.Checked + ConfigOptions.bRelease = _setup.chkRelease.Checked + ConfigOptions.bRuntime = _setup.chkRuntime.Checked + ConfigOptions.bRating = _setup.chkRating.Checked + ConfigOptions.bVotes = _setup.chkVotes.Checked + ConfigOptions.bStudio = _setup.chkStudio.Checked + ConfigOptions.bTagline = _setup.chkTagline.Checked + ConfigOptions.bOutline = _setup.chkOutline.Checked + ConfigOptions.bPlot = False + ConfigOptions.bCast = _setup.chkCast.Checked + ConfigOptions.bDirector = _setup.chkCrew.Checked + ConfigOptions.bWriters = _setup.chkCrew.Checked + ConfigOptions.bProducers = _setup.chkCrew.Checked + ConfigOptions.bGenre = _setup.chkGenre.Checked + ConfigOptions.bTrailer = _setup.chkTrailer.Checked + ConfigOptions.bMusicBy = _setup.chkCrew.Checked + ConfigOptions.bOtherCrew = _setup.chkCrew.Checked + ConfigOptions.bCountry = _setup.chkCountry.Checked + ConfigOptions.bTop250 = False + ConfigOptions.bFullCrew = _setup.chkCrew.Checked + ConfigOptions.bFullCast = _setup.chkCast.Checked + ConfigOptions.bCert = ConfigOptions.bMPAA + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + RemoveHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + _setup.Dispose() + End If + End Sub + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.Scraper + 'LoadSettings() + ''TMDBg.IMDBURL = MySettings.IMDBURL + ''TMDBg.UseOFDBTitle = MySettings.UseOFDBTitle + ''TMDBg.UseOFDBOutline = MySettings.UseOFDBOutline + ''TMDBg.UseOFDBPlot = MySettings.UseOFDBPlot + ''TMDBg.UseOFDBGenre = MySettings.UseOFDBGenre + Dim tTitle As String = String.Empty + Dim OldTitle As String = DBMovie.Movie.Title + + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + + If Master.GlobalScrapeMod.NFO AndAlso Not Master.GlobalScrapeMod.DoSearch Then + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, Options.bFullCrew, Options.bFullCast, False, Options, False) + ElseIf Not ScrapeType = Enums.ScrapeType.SingleScrape Then + DBMovie.Movie = _TMDBg.GetSearchMovieInfo(DBMovie.Movie.Title, DBMovie, ScrapeType, Options) + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + If ScrapeType = Enums.ScrapeType.SingleScrape AndAlso Master.GlobalScrapeMod.DoSearch _ + AndAlso ModulesManager.Instance.externalScrapersModules.OrderBy(Function(y) y.ScraperOrder).FirstOrDefault(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled).AssemblyName = _AssemblyName Then + DBMovie.Movie.IMDBID = String.Empty + DBMovie.ClearExtras = True + DBMovie.PosterPath = String.Empty + DBMovie.FanartPath = String.Empty + DBMovie.TrailerPath = String.Empty + DBMovie.ExtraPath = String.Empty + DBMovie.SubPath = String.Empty + DBMovie.NfoPath = String.Empty + DBMovie.Movie.Clear() + End If + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + Select Case ScrapeType + Case Enums.ScrapeType.FilterAuto, Enums.ScrapeType.FullAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.UpdateAuto + Return New Interfaces.ModuleResult With {.breakChain = False} + End Select + If ScrapeType = Enums.ScrapeType.SingleScrape Then + Using dSearch As New dlgTMDBSearchResults(_MySettings, Me._TMDBg) + '' dSearch.IMDBURL = MySettings.IMDBURL + Dim tmpTitle As String = DBMovie.Movie.Title + If String.IsNullOrEmpty(tmpTitle) Then + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name, False) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name, False) + Else + tmpTitle = StringUtils.FilterName(If(DBMovie.isSingle, Directory.GetParent(DBMovie.Filename).Name, Path.GetFileNameWithoutExtension(DBMovie.Filename))) + End If + End If + Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) + If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID + End If + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + + Master.currMovie.ClearExtras = True + Master.currMovie.PosterPath = String.Empty + Master.currMovie.FanartPath = String.Empty + Master.currMovie.TrailerPath = String.Empty + Master.currMovie.ExtraPath = String.Empty + Master.currMovie.SubPath = String.Empty + Master.currMovie.NfoPath = String.Empty + + + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, filterOptions.bFullCrew, filterOptions.bFullCast, False, filterOptions, False) + End If + Else + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End Using + End If + End If + + If Not String.IsNullOrEmpty(DBMovie.Movie.Title) Then + tTitle = StringUtils.FilterTokens(DBMovie.Movie.Title) + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = tTitle + If Master.eSettings.DisplayYear AndAlso Not String.IsNullOrEmpty(DBMovie.Movie.Year) Then + DBMovie.ListTitle = String.Format("{0} ({1})", tTitle, DBMovie.Movie.Year) + Else + DBMovie.ListTitle = tTitle + End If + Else + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name) + Else + If DBMovie.UseFolder AndAlso DBMovie.isSingle Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(DBMovie.Filename).Name) + Else + DBMovie.ListTitle = StringUtils.FilterName(Path.GetFileNameWithoutExtension(DBMovie.Filename)) + End If + End If + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = DBMovie.ListTitle + End If + + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function SelectImageOfType(ByRef mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.SelectImageOfType + If String.IsNullOrEmpty(mMovie.Movie.TMDBID) Then + _TMDBg.GetMovieID(mMovie) + End If + If preload AndAlso _DLType = Enums.ImageType.Fanart AndAlso Not IsNothing(dFImgSelect) Then + pResults = dFImgSelect.ShowDialog() + dFImgSelect = Nothing + Else + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + If preload Then + dFImgSelect = New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + dFImgSelect.PreLoad(mMovie, Enums.ImageType.Fanart, _isEdit) + End If + '' dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(mMovie, _DLType, _isEdit) + End Using + End If + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + Public Sub PostScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.PostScraperOrderChanged + _setup.orderChanged() + End Sub + + Public Sub ScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.ScraperOrderChanged + _setupPost.orderChanged() + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Structure sMySettings + +#Region "Fields" + Dim DownloadTrailers As Boolean + Dim TrailerTimeout As Integer + Dim UseTMDBTrailer As Boolean + Dim UseTMDBTrailerXBMC As Boolean + Dim ManualETSize As String + Dim UseTMDBTrailerPref As String + Dim TMDBAPIKey As String + Dim FANARTTVApiKey As String + Dim TMDBLanguage As String + Dim FallBackEng As Boolean + Dim UseIMDB As Boolean + Dim UseIMPA As Boolean + Dim UseMPDB As Boolean + Dim UseFANARTTV As Boolean + Dim UseIMDBTrailer As Boolean +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.Debug_(db_DB).xml b/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.Debug_(db_DB).xml new file mode 100644 index 0000000..2b6a351 --- /dev/null +++ b/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + xml1 + xml2 + xml3 + xml4 + xml5 + xml6 + xml7 + xml8 + xml9 + xml10 + xml11 + xml12 + xml13 + xml14 + xml15 + xml16 + xml17 + xml18 + xml19 + xml20 + xml21 + xml22 + xml23 + xml24 + xml25 + xml26 + xml27 + xml28 + xml29 + xml30 + xml31 + xml32 + xml33 + xml34 + xml35 + xml36 + xml37 + xml38 + xml39 + xml40 + xml41 + xml42 + xml43 + xml44 + xml45 + xml46 + xml47 + xml48 + xml49 + xml50 + xml51 + xml52 + xml53 + xml54 + xml55 + xml56 + xml57 + xml58 + xml59 + xml60 + xml61 + xml62 + xml63 + xml64 + xml65 + xml66 + xml67 + xml68 + xml69 + xml70 + xml71 + xml72 + xml73 + xml74 + xml75 + xml76 + xml77 + xml78 + xml79 + xml80 + xml81 + xml82 + xml83 + xml84 + xml85 + xml86 + xml87 + xml88 + xml89 + xml90 + xml91 + xml92 + xml93 + xml94 + xml95 + xml96 + xml97 + xml98 + xml99 + xml100 + xml101 + xml102 + xml103 + xml104 + xml105 + xml106 + xml107 + xml108 + xml109 + xml110 + xml111 + xml112 + xml113 + xml114 + xml115 + xml116 + xml117 + xml118 + xml119 + xml120 + xml121 + xml122 + xml123 + xml124 + xml125 + xml126 + xml127 + xml128 + xml129 + xml130 + xml131 + xml132 + xml133 + xml134 + xml135 + xml136 + xml137 + xml138 + xml139 + xml140 + xml141 + xml142 + xml143 + xml144 + xml145 + xml146 + xml147 + xml148 + xml149 + xml150 + xml151 + xml152 + xml153 + xml154 + xml155 + xml156 + xml157 + xml158 + xml159 + xml160 + xml161 + xml162 + xml163 + xml164 + xml165 + xml166 + xml167 + xml168 + xml169 + xml170 + xml171 + xml172 + xml173 + xml174 + xml175 + xml176 + xml177 + xml178 + xml179 + xml180 + xml181 + xml182 + xml183 + xml184 + xml185 + xml186 + xml187 + xml188 + xml189 + xml190 + xml191 + xml192 + xml193 + xml194 + xml195 + xml196 + xml197 + xml198 + xml199 + xml200 + xml201 + xml202 + xml203 + xml204 + xml205 + xml206 + xml207 + xml208 + xml209 + xml210 + xml211 + xml212 + xml213 + xml214 + xml215 + xml216 + xml217 + xml218 + xml219 + xml220 + xml221 + xml222 + xml223 + xml224 + xml225 + xml226 + xml227 + xml228 + xml229 + xml230 + xml231 + xml232 + xml233 + xml234 + xml235 + xml236 + xml237 + xml238 + xml239 + xml240 + xml241 + xml242 + xml243 + xml244 + xml245 + xml246 + xml247 + xml248 + xml249 + xml250 + xml251 + xml252 + xml253 + xml254 + xml255 + xml256 + xml257 + xml258 + xml259 + xml260 + xml261 + xml262 + xml263 + xml264 + xml265 + xml266 + xml267 + xml268 + xml269 + xml270 + xml271 + xml272 + xml273 + xml274 + xml275 + xml276 + xml277 + xml278 + xml279 + xml280 + xml281 + xml282 + xml283 + xml284 + xml285 + xml286 + xml287 + xml288 + xml289 + xml290 + xml291 + xml292 + xml293 + xml294 + xml295 + xml296 + xml297 + xml298 + xml299 + xml300 + xml301 + xml302 + xml303 + xml304 + xml305 + xml306 + xml307 + xml308 + xml309 + xml310 + xml311 + xml312 + xml313 + xml314 + xml315 + xml316 + xml317 + xml318 + xml319 + xml320 + xml321 + xml322 + xml323 + xml324 + xml325 + xml326 + xml327 + xml328 + xml329 + xml330 + xml331 + xml332 + xml333 + xml334 + xml335 + xml336 + xml337 + xml338 + xml339 + xml340 + xml341 + xml342 + xml343 + xml344 + xml345 + xml346 + xml347 + xml348 + xml349 + xml350 + xml351 + xml352 + xml353 + xml354 + xml355 + xml356 + xml357 + xml358 + xml359 + xml360 + xml361 + xml362 + xml363 + xml364 + xml365 + xml366 + xml367 + xml368 + xml369 + xml370 + xml371 + xml372 + xml373 + xml374 + xml375 + xml376 + xml377 + xml378 + xml379 + xml380 + xml381 + xml382 + xml383 + xml384 + xml385 + xml386 + xml387 + xml388 + xml389 + xml390 + xml391 + xml392 + xml393 + xml394 + xml395 + xml396 + xml397 + xml398 + xml399 + xml400 + xml401 + xml402 + xml403 + xml404 + xml405 + xml406 + xml407 + xml408 + xml409 + xml410 + xml411 + xml412 + xml413 + xml414 + xml415 + xml416 + xml417 + xml418 + xml419 + xml420 + xml421 + xml422 + xml423 + xml424 + xml425 + xml426 + xml427 + xml428 + xml429 + xml430 + xml431 + xml432 + xml433 + xml434 + xml435 + xml436 + xml437 + xml438 + xml439 + xml440 + xml441 + xml442 + xml443 + xml444 + xml445 + xml446 + xml447 + xml448 + xml449 + xml450 + xml451 + xml452 + xml453 + xml454 + xml455 + xml456 + xml457 + xml458 + xml459 + xml460 + xml461 + xml462 + xml463 + xml464 + xml465 + xml466 + xml467 + xml468 + xml469 + xml470 + xml471 + xml472 + xml473 + xml474 + xml475 + xml476 + xml477 + xml478 + xml479 + xml480 + xml481 + xml482 + xml483 + xml484 + xml485 + xml486 + xml487 + xml488 + xml489 + xml490 + xml491 + xml492 + xml493 + xml494 + xml495 + xml496 + xml497 + xml498 + xml499 + xml500 + xml501 + xml502 + xml503 + xml504 + xml505 + xml506 + xml507 + xml508 + xml509 + xml510 + xml511 + xml512 + xml513 + xml514 + xml515 + xml516 + xml517 + xml518 + xml519 + xml520 + xml521 + xml522 + xml523 + xml524 + xml525 + xml526 + xml527 + xml528 + xml529 + xml530 + xml531 + xml532 + xml533 + xml534 + xml535 + xml536 + xml537 + xml538 + xml539 + xml540 + xml541 + xml542 + xml543 + xml544 + xml545 + xml546 + xml547 + xml548 + xml549 + xml550 + xml551 + xml552 + xml553 + xml554 + xml555 + xml556 + xml557 + xml558 + xml559 + xml560 + xml561 + xml562 + xml563 + xml564 + xml565 + xml566 + xml567 + xml568 + xml569 + xml570 + xml571 + xml572 + xml573 + xml574 + xml575 + xml576 + xml577 + xml578 + xml579 + xml580 + xml581 + xml582 + xml583 + xml584 + xml585 + xml586 + xml587 + xml588 + xml589 + xml590 + xml591 + xml592 + xml593 + xml594 + xml595 + xml596 + xml597 + xml598 + xml599 + xml600 + xml601 + xml602 + xml603 + xml604 + xml605 + xml606 + xml607 + xml608 + xml609 + xml610 + xml611 + xml612 + xml613 + xml614 + xml615 + xml616 + xml617 + xml618 + xml619 + xml620 + xml621 + xml622 + xml623 + xml624 + xml625 + xml626 + xml627 + xml628 + xml629 + xml630 + xml631 + xml632 + xml633 + xml634 + xml635 + xml636 + xml637 + xml638 + xml639 + xml640 + xml641 + xml642 + xml643 + xml644 + xml645 + xml646 + xml647 + xml648 + xml649 + xml650 + xml651 + xml652 + xml653 + xml654 + xml655 + xml656 + xml657 + xml658 + xml659 + xml660 + xml661 + xml662 + xml663 + xml664 + xml665 + xml666 + xml667 + xml668 + xml669 + xml670 + xml671 + xml672 + xml673 + xml674 + xml675 + xml676 + xml677 + xml678 + xml679 + xml680 + xml681 + xml682 + xml683 + xml684 + xml685 + xml686 + xml687 + xml688 + xml689 + xml690 + xml691 + xml692 + xml693 + xml694 + xml695 + xml696 + xml697 + xml698 + xml699 + xml700 + xml701 + xml702 + xml703 + xml704 + xml705 + xml706 + xml707 + xml708 + xml709 + xml710 + xml711 + xml712 + xml713 + xml714 + xml715 + xml716 + xml717 + xml718 + xml719 + xml720 + xml721 + xml722 + xml723 + xml724 + xml725 + xml726 + xml727 + xml728 + xml729 + xml730 + xml731 + xml732 + xml733 + xml734 + xml735 + xml736 + xml737 + xml738 + xml739 + xml740 + xml741 + xml742 + xml743 + xml744 + xml745 + xml746 + xml747 + xml748 + xml749 + xml750 + xml751 + xml752 + xml753 + xml754 + xml755 + xml756 + xml757 + xml758 + xml759 + xml760 + xml761 + xml762 + xml763 + xml764 + xml765 + xml766 + xml767 + xml768 + xml769 + xml770 + xml771 + xml772 + xml773 + xml774 + xml775 + xml776 + xml777 + xml778 + xml779 + xml780 + xml781 + xml782 + xml783 + xml784 + xml785 + xml786 + xml787 + xml788 + xml789 + xml790 + xml791 + xml792 + xml793 + xml794 + xml795 + xml796 + xml797 + xml798 + xml799 + xml800 + xml801 + xml802 + xml803 + xml804 + xml805 + xml806 + xml807 + xml808 + xml809 + xml810 + xml811 + xml812 + xml813 + xml814 + xml815 + xml816 + xml817 + xml818 + xml819 + xml820 + xml821 + xml822 + xml823 + xml824 + xml825 + xml826 + xml827 + xml828 + xml829 + xml830 + xml831 + xml832 + xml833 + xml834 + xml835 + xml836 + xml837 + xml838 + xml839 + xml840 + xml841 + xml842 + xml843 + xml844 + xml845 + xml846 + xml847 + xml848 + xml849 + xml850 + xml851 + xml852 + xml853 + xml854 + xml855 + xml856 + xml857 + xml858 + xml859 + xml860 + xml861 + xml862 + xml863 + xml864 + xml865 + xml866 + xml867 + xml868 + xml869 + xml870 + xml871 + xml872 + xml873 + xml874 + xml875 + xml876 + xml877 + xml878 + xml879 + xml880 + xml881 + xml882 + xml883 + xml884 + xml885 + xml886 + xml887 + xml888 + xml889 + xml890 + xml891 + xml892 + xml893 + xml894 + xml895 + xml896 + xml897 + xml898 + xml899 + xml900 + \ No newline at end of file diff --git a/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.English_(en_US).xml b/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.English_(en_US).xml index 6491906..6418f5c 100644 --- a/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.English_(en_US).xml +++ b/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.English_(en_US).xml @@ -1,19 +1,18 @@ - - Ember XML Movie Scrapers - - Genre(s): - View details of each result to find the proper movie. - Movie Search Results - Searching ... - Downloading details... - Search Results - - Configure this Scraper Settings in - Loading Please Wait - Scraper Fields - Scraper specific - These settings are specific to this module.{0}Please refer to the global settings for more options. - Scraper - Populate scrapers - Settings - Settings - \ No newline at end of file + Ember XML Movie Scrapers + + Genre(s): + View details of each result to find the proper movie. + Movie Search Results + Searching ... + Downloading details... + Search Results + Configure this Scraper Settings in + Loading Please Wait + Scraper Fields - Scraper specific + These settings are specific to this module.{0}Please refer to the global settings for more options. + Scraper + Populate scrapers + Settings + Settings + diff --git a/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.German_(de_DE).xml b/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.German_(de_DE).xml index 671e6cb..034035b 100644 --- a/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.German_(de_DE).xml +++ b/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.German_(de_DE).xml @@ -1,16 +1,18 @@ - - Ember XML Film Scrapers - - Genre(s): - Zeigt Details jedes Ergebnisses an, um den richtigen Film zu finden. - Film Such Ergebnis - Suchen... - Downloading details... - Suche Ergebnisse - - Configuriere diese Scraper Einstellungen in - Lade Bitte Warten - Scraper Felder - Scraper spezifisch - Diese Einstellungen sind zu diesem Modul spezifisch.{0}Beziehe dich bitte auf die globalen Einstellungen für mehr Optionen. + Ember XML Film Scrapers + + Genre(s): + Zeigt Details jedes Ergebnisses an, um den richtigen Film zu finden. + Film Suchergebnisse + Suchen... + Downloading details... + Suchergebnis + Configuriere diese Scraper Einstellungen in + Lade Bitte Warten + Scraper Felder - Scraper spezifisch + Diese Einstellungen sind zu diesem Modul spezifisch.{0}Beziehe dich bitte auf die globalen Einstellungen für mehr Optionen. + Scraper + Setze Scraper + Einstellungen + Einstellungen - \ No newline at end of file diff --git a/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.Norwegian_(no_NO).xml b/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.Norwegian_(no_NO).xml new file mode 100644 index 0000000..4230d70 --- /dev/null +++ b/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.Norwegian_(no_NO).xml @@ -0,0 +1,18 @@ + + EMM XML Detaljhentere + + Sjangre: + Se detaljer fra hvert treff for å finne riktig film. + Filmsøkresultater + Søker... + Laster ned detaljer... + Søkeresultater + Konfigurer denne detaljhenteren i + Laster... Vennligst vent... + Detaljhenterområder - Detaljhenterspesifikk + Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg. + Detaljhenter + Hent detaljhentere + Innstillinger + Innstillinger + diff --git "a/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.Portugu\303\252s_(pt_BR).xml" "b/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.Portugu\303\252s_(pt_BR).xml" deleted file mode 100644 index a91dc2d..0000000 --- "a/Addons/scraper.EmberCore.XML/Langs/scraper.EmberCore.XML.Portugu\303\252s_(pt_BR).xml" +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/Addons/scraper.EmberCore.XML/My Project/AssemblyInfo.vb b/Addons/scraper.EmberCore.XML/My Project/AssemblyInfo.vb index 390ef2d..c4ec335 100644 --- a/Addons/scraper.EmberCore.XML/My Project/AssemblyInfo.vb +++ b/Addons/scraper.EmberCore.XML/My Project/AssemblyInfo.vb @@ -9,7 +9,7 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - + diff --git a/Addons/scraper.EmberCore.XML/XMLScraper/MediaTags/AlbumTag.vb b/Addons/scraper.EmberCore.XML/XMLScraper/MediaTags/AlbumTag.vb index ace4c25..57f0fdf 100644 --- a/Addons/scraper.EmberCore.XML/XMLScraper/MediaTags/AlbumTag.vb +++ b/Addons/scraper.EmberCore.XML/XMLScraper/MediaTags/AlbumTag.vb @@ -234,29 +234,29 @@ Namespace XMLScraper Return changed End Function - Public Overloads Overrides Sub Deserialize(ByVal element As XElement) - Title = element.GetStringElement("title", Title) - Artist = element.GetStringElement("artist", Artist) - Label = element.GetStringElement("label", Label) - Type = element.GetStringElement("type", Type) - ReleaseDate = element.GetStringElement("releaseddate", ReleaseDate) - Year = element.GetIntElement("year", Year) - Review = element.GetStringElement("review", Review) - - element.UpdateThumbList("thumb", Thumbs) - - element.UpdateStringList("genre", Genres) - element.UpdateStringList("style", Styles) - element.UpdateStringList("mood", Moods) - element.UpdateStringList("theme", Themes) - - For Each item As XElement In element.Elements("track") - Dim newtrack As New AlbumTrack(item) - If Not Tracks.Contains(newtrack) Then - Tracks.Add(newtrack) - End If - Next - End Sub + Public Overloads Overrides Sub Deserialize(ByVal element As XElement) + Title = element.GetStringElement("title", Title) + Artist = element.GetStringElement("artist", Artist) + Label = element.GetStringElement("label", Label) + Type = element.GetStringElement("type", Type) + ReleaseDate = element.GetStringElement("releaseddate", ReleaseDate) + Year = element.GetIntElement("year", Year) + Review = element.GetStringElement("review", Review) + + element.UpdateThumbList("thumb", Thumbs) + + element.UpdateStringList("genre", Genres) + element.UpdateStringList("style", Styles) + element.UpdateStringList("mood", Moods) + element.UpdateStringList("theme", Themes) + + For Each item As XElement In element.Elements("track") + Dim newtrack As New AlbumTrack(item) + If Not Tracks.Contains(newtrack) Then + Tracks.Add(newtrack) + End If + Next + End Sub Public Overloads Sub Deserialize(ByVal xInfo As XDocument) Deserialize(xInfo.Root) diff --git a/Addons/scraper.EmberCore.XML/clsScrapeImages.vb b/Addons/scraper.EmberCore.XML/clsScrapeImages.vb index 8aa2147..4558580 100644 --- a/Addons/scraper.EmberCore.XML/clsScrapeImages.vb +++ b/Addons/scraper.EmberCore.XML/clsScrapeImages.vb @@ -84,7 +84,7 @@ Public Class ScrapeImages If Not IsNothing(Fanart.Image) Then _Image = Fanart.Image Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(url=", StringUtils.CleanURL(miFanart.Url), ").jpg")) - Save(_Image, savePath) + Fanart.Save(savePath, , , False) If Master.eSettings.AutoET Then If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then SaveFAasET(savePath, sPath) @@ -109,7 +109,7 @@ Public Class ScrapeImages If Not IsNothing(Fanart.Image) Then _Image = Fanart.Image savePath = Path.Combine(CachePath, String.Concat("fanart_(url=", StringUtils.CleanURL(miFanart.Url), ").jpg")) - Save(_Image, savePath) + Fanart.Save(savePath, , , False) If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then SaveFAasET(savePath, sPath) End If @@ -146,48 +146,48 @@ Public Class ScrapeImages End Sub - Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0) - Try - If IsNothing(_image) Then Exit Sub - - Dim doesExist As Boolean = File.Exists(sPath) - Dim fAtt As New FileAttributes - If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then - If doesExist Then - 'get the current attributes to set them back after writing - fAtt = File.GetAttributes(sPath) - 'set attributes to none for writing - File.SetAttributes(sPath, FileAttributes.Normal) - End If - - Using msSave As New MemoryStream - Dim retSave() As Byte - Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) - Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) - - EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) - - If iQuality > 0 Then - EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) - End If - - _image.Save(msSave, ICI, EncPars) - - retSave = msSave.ToArray - - Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) - fs.Write(retSave, 0, retSave.Length) - fs.Flush() - End Using - msSave.Flush() - End Using - - If doesExist Then File.SetAttributes(sPath, fAtt) - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0) + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() diff --git a/Addons/scraper.EmberCore.XML/dlgImgSelect.vb b/Addons/scraper.EmberCore.XML/dlgImgSelect.vb index c44ba96..cb56178 100644 --- a/Addons/scraper.EmberCore.XML/dlgImgSelect.vb +++ b/Addons/scraper.EmberCore.XML/dlgImgSelect.vb @@ -89,82 +89,82 @@ Public Class dlgImgSelect Return Results End Function - Private Sub AddImage(ByVal iImage As Image, ByVal sDescription As String, ByVal iIndex As Integer, ByVal sURL As String, ByVal isChecked As Boolean) - Try - ReDim Preserve pnlImage(iIndex) - ReDim Preserve pbImage(iIndex) - pnlImage(iIndex) = New Panel() - pbImage(iIndex) = New PictureBox() - pbImage(iIndex).Name = iIndex.ToString - pnlImage(iIndex).Name = iIndex.ToString - pnlImage(iIndex).Size = New Size(256, 286) - pbImage(iIndex).Size = New Size(250, 250) - pnlImage(iIndex).BackColor = Color.White - pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle - pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom - pnlImage(iIndex).Tag = sURL - pbImage(iIndex).Tag = sURL - pbImage(iIndex).Image = iImage - pnlImage(iIndex).Left = iLeft - pbImage(iIndex).Left = 3 - pnlImage(iIndex).Top = iTop - pbImage(iIndex).Top = 3 - pnlBG.Controls.Add(pnlImage(iIndex)) - pnlImage(iIndex).Controls.Add(pbImage(iIndex)) - pnlImage(iIndex).BringToFront() - AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click - AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick - AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click - - AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent - AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent - - If DLType = Enums.ImageType.Fanart Then - ReDim Preserve chkImage(iIndex) - chkImage(iIndex) = New CheckBox() - chkImage(iIndex).Name = iIndex.ToString - chkImage(iIndex).Size = New Size(250, 30) - chkImage(iIndex).AutoSize = False - chkImage(iIndex).BackColor = Color.White - chkImage(iIndex).TextAlign = ContentAlignment.MiddleCenter - chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", pbImage(iIndex).Image.Width.ToString, pbImage(iIndex).Image.Height.ToString, sDescription) - chkImage(iIndex).Left = 0 - chkImage(iIndex).Top = 250 - chkImage(iIndex).Checked = isChecked - pnlImage(iIndex).Controls.Add(chkImage(iIndex)) - AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent - Else - ReDim Preserve lblImage(iIndex) - lblImage(iIndex) = New Label() - lblImage(iIndex).Name = iIndex.ToString - lblImage(iIndex).Size = New Size(250, 30) - lblImage(iIndex).AutoSize = False - lblImage(iIndex).BackColor = Color.White - lblImage(iIndex).TextAlign = ContentAlignment.MiddleCenter - 'lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") - lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", pbImage(iIndex).Image.Width.ToString, pbImage(iIndex).Image.Height.ToString, sDescription) - - lblImage(iIndex).Tag = sURL - lblImage(iIndex).Left = 0 - lblImage(iIndex).Top = 250 - pnlImage(iIndex).Controls.Add(lblImage(iIndex)) - AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click - AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - - iCounter += 1 - - If iCounter = 3 Then - iCounter = 0 - iLeft = 5 - iTop += 301 - Else - iLeft += 271 - End If - End Sub + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal ImgTag As ImageTag, ByVal isChecked As Boolean) + Try + ReDim Preserve pnlImage(iIndex) + ReDim Preserve pbImage(iIndex) + pnlImage(iIndex) = New Panel() + pbImage(iIndex) = New PictureBox() + pbImage(iIndex).Name = iIndex.ToString + pnlImage(iIndex).Name = iIndex.ToString + pnlImage(iIndex).Size = New Size(256, 286) + pbImage(iIndex).Size = New Size(250, 250) + pnlImage(iIndex).BackColor = Color.White + pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + pnlImage(iIndex).Tag = ImgTag + pbImage(iIndex).Tag = ImgTag + pbImage(iIndex).Image = ImgTag.ImageObj.Image + pnlImage(iIndex).Left = iLeft + pbImage(iIndex).Left = 3 + pnlImage(iIndex).Top = iTop + pbImage(iIndex).Top = 3 + pnlBG.Controls.Add(pnlImage(iIndex)) + pnlImage(iIndex).Controls.Add(pbImage(iIndex)) + pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If DLType = Enums.ImageType.Fanart Then + ReDim Preserve chkImage(iIndex) + chkImage(iIndex) = New CheckBox() + chkImage(iIndex).Name = iIndex.ToString + chkImage(iIndex).Size = New Size(250, 30) + chkImage(iIndex).AutoSize = False + chkImage(iIndex).BackColor = Color.White + chkImage(iIndex).TextAlign = ContentAlignment.MiddleCenter + chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", pbImage(iIndex).Image.Width.ToString, pbImage(iIndex).Image.Height.ToString, sDescription) + chkImage(iIndex).Left = 0 + chkImage(iIndex).Top = 250 + chkImage(iIndex).Checked = isChecked + pnlImage(iIndex).Controls.Add(chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve lblImage(iIndex) + lblImage(iIndex) = New Label() + lblImage(iIndex).Name = iIndex.ToString + lblImage(iIndex).Size = New Size(250, 30) + lblImage(iIndex).AutoSize = False + lblImage(iIndex).BackColor = Color.White + lblImage(iIndex).TextAlign = ContentAlignment.MiddleCenter + 'lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", pbImage(iIndex).Image.Width.ToString, pbImage(iIndex).Image.Height.ToString, sDescription) + + lblImage(iIndex).Tag = ImgTag + lblImage(iIndex).Left = 0 + lblImage(iIndex).Top = 250 + pnlImage(iIndex).Controls.Add(lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + iCounter += 1 + + If iCounter = 3 Then + iCounter = 0 + iLeft = 5 + iTop += 301 + Else + iLeft += 271 + End If + End Sub Private Sub AllDoneDownloading() ' If _impaDone AndAlso _tmdbDone AndAlso _mpdbDone Then @@ -243,7 +243,7 @@ Public Class dlgImgSelect If Master.eSettings.UseImgCache Then Try MovieImages.Item(i).URL = StringUtils.CleanURL(MovieImages.Item(i).URL) - MovieImages.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", MovieImages.Item(i).Description, ")_(url=", MovieImages.Item(i).URL, ").jpg"))) + MovieImages.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", MovieImages.Item(i).Description, ")_(url=", MovieImages.Item(i).URL, ").jpg")), , , False) Catch End Try End If @@ -370,23 +370,23 @@ Public Class dlgImgSelect pnlSize.Visible = False - If Not DLType = Enums.ImageType.Fanart AndAlso sURL.ToLower.Contains("themoviedb.org") Then - SetupSizes(sURL) - If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then - OK_Button.Enabled = False - Else - OK_Button.Focus() - End If - tmpImage.Clear() - Else - rbXLarge.Checked = False - rbLarge.Checked = False - rbMedium.Checked = False - rbSmall.Checked = False - OK_Button.Enabled = True - OK_Button.Focus() - tmpImage.Image = pbImage(iIndex).Image - End If + If Not DLType = Enums.ImageType.Fanart Then 'AndAlso sURL.ToLower.Contains("themoviedb.org") Then + SetupSizes(sURL) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + OK_Button.Enabled = False + Else + OK_Button.Focus() + End If + tmpImage.Clear() + Else + rbXLarge.Checked = False + rbLarge.Checked = False + rbMedium.Checked = False + rbSmall.Checked = False + OK_Button.Enabled = True + OK_Button.Focus() + tmpImage = CType(pbImage(iIndex).Tag, ImageTag).ImageObj + End If Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") @@ -594,7 +594,7 @@ Public Class dlgImgSelect If Not IsNothing(tmpImage.Image) Then If isEdit Then - tmpImage.Save(tmpPathPlus) + tmpImage.Save(tmpPathPlus, , , False) Results.ImagePath = tmpPathPlus Else If DLType = Enums.ImageType.Fanart Then @@ -622,7 +622,7 @@ Public Class dlgImgSelect tmpImage.FromWeb(rbLarge.Tag.ToString) End If Case rbMedium.Checked - tmpImage.Image = pbImage(selIndex).Image + tmpImage = CType(pbImage(selIndex).Tag, ImageTag).ImageObj Case rbSmall.Checked If Master.eSettings.UseImgCache Then tmpImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", rbSmall.Tag, ").jpg"))) @@ -633,7 +633,7 @@ Public Class dlgImgSelect If Not IsNothing(tmpImage.Image) Then If isEdit Then - tmpImage.Save(tmpPathPlus) + tmpImage.Save(tmpPathPlus, , , False) Results.ImagePath = tmpPathPlus Else If DLType = Enums.ImageType.Fanart Then @@ -679,15 +679,12 @@ Public Class dlgImgSelect Directory.CreateDirectory(extraPath) End If - Dim fsET As FileStream - For i As Integer = 0 To UBound(chkImage) - If chkImage(i).Checked Then - fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) - pbImage(i).Image.Save(fsET, Imaging.ImageFormat.Jpeg) - fsET.Close() - iVal += 1 - End If - Next + For i As Integer = 0 To UBound(chkImage) + If chkImage(i).Checked Then + CType(pbImage(i).Tag, ImageTag).ImageObj.Save(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), , , False) + iVal += 1 + End If + Next End If End If Catch ex As Exception @@ -731,7 +728,7 @@ Public Class dlgImgSelect If posters.Count > 0 Then For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) p.URL) If Not IsNothing(xPoster.WebImage.Image) AndAlso (DLType = Enums.ImageType.Fanart OrElse Not (xPoster.URL.ToLower.Contains("themoviedb.org") AndAlso Not xPoster.Description = "cover")) Then - AddImage(xPoster.WebImage.Image, xPoster.Description, iIndex, xPoster.URL, xPoster.isChecked) + AddImage(xPoster.Description, iIndex, New ImageTag With {.URL = xPoster.URL, .ImageObj = xPoster.WebImage}, xPoster.isChecked) iIndex += 1 End If Next @@ -786,9 +783,9 @@ Public Class dlgImgSelect Functions.PNLDoubleBuffer(pnlBG) If DLType = Enums.ImageType.Posters Then - Text = String.Concat(Master.eLang.GetString(39, "Select Poster - "), If(Not String.IsNullOrEmpty(tMovie.Movie.Title), tMovie.Movie.Title, tMovie.ListTitle)) + Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(tMovie.Movie.Title), tMovie.Movie.Title, tMovie.ListTitle)) Else - Text = String.Concat(Master.eLang.GetString(40, "Select Fanart - "), If(Not String.IsNullOrEmpty(tMovie.Movie.Title), tMovie.Movie.Title, tMovie.ListTitle)) + Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(tMovie.Movie.Title), tMovie.Movie.Title, tMovie.ListTitle)) pnlDLStatus.Height = 75 pnlDLStatus.Top = 207 @@ -893,4 +890,18 @@ Public Class dlgImgSelect #End Region 'Methods +#Region "Nested Types" + + Private Structure ImageTag + +#Region "Fields" + + Dim URL As String + Dim ImageObj As Images + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore.XML/scraper.EmberCore.XML.vbproj b/Addons/scraper.EmberCore.XML/scraper.EmberCore.XML.vbproj index d27a1be..b54935e 100644 --- a/Addons/scraper.EmberCore.XML/scraper.EmberCore.XML.vbproj +++ b/Addons/scraper.EmberCore.XML/scraper.EmberCore.XML.vbproj @@ -255,13 +255,16 @@ + + PreserveNewest + PreserveNewest PreserveNewest - + PreserveNewest diff --git a/Addons/scraper.EmberCore.XML/scraperMovieXMLModule.vb b/Addons/scraper.EmberCore.XML/scraperMovieXMLModule.vb index ad26585..8da9558 100644 --- a/Addons/scraper.EmberCore.XML/scraperMovieXMLModule.vb +++ b/Addons/scraper.EmberCore.XML/scraperMovieXMLModule.vb @@ -57,6 +57,7 @@ Public Class EmberXMLScraperModule Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart #End Region 'Events @@ -519,11 +520,13 @@ Public Class EmberXMLScraperModule End Try End If End If - If Master.GlobalScrapeMod.Actors AndAlso AdvancedSettings.GetBooleanSetting("ScrapeActorsThumbs", False) Then + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then For Each act As MediaContainers.Person In DBMovie.Movie.Actors Dim img As New Images img.FromWeb(act.Thumb) - img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If Next End If Catch ex As Exception diff --git a/Addons/scraper.EmberCore/Langs/scraper.EmberCore.Debug_(db_DB).xml b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.Debug_(db_DB).xml new file mode 100644 index 0000000..0fba5b0 --- /dev/null +++ b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + native1 + native2 + native3 + native4 + native5 + native6 + native7 + native8 + native9 + native10 + native11 + native12 + native13 + native14 + native15 + native16 + native17 + native18 + native19 + native20 + native21 + native22 + native23 + native24 + native25 + native26 + native27 + native28 + native29 + native30 + native31 + native32 + native33 + native34 + native35 + native36 + native37 + native38 + native39 + native40 + native41 + native42 + native43 + native44 + native45 + native46 + native47 + native48 + native49 + native50 + native51 + native52 + native53 + native54 + native55 + native56 + native57 + native58 + native59 + native60 + native61 + native62 + native63 + native64 + native65 + native66 + native67 + native68 + native69 + native70 + native71 + native72 + native73 + native74 + native75 + native76 + native77 + native78 + native79 + native80 + native81 + native82 + native83 + native84 + native85 + native86 + native87 + native88 + native89 + native90 + native91 + native92 + native93 + native94 + native95 + native96 + native97 + native98 + native99 + native100 + native101 + native102 + native103 + native104 + native105 + native106 + native107 + native108 + native109 + native110 + native111 + native112 + native113 + native114 + native115 + native116 + native117 + native118 + native119 + native120 + native121 + native122 + native123 + native124 + native125 + native126 + native127 + native128 + native129 + native130 + native131 + native132 + native133 + native134 + native135 + native136 + native137 + native138 + native139 + native140 + native141 + native142 + native143 + native144 + native145 + native146 + native147 + native148 + native149 + native150 + native151 + native152 + native153 + native154 + native155 + native156 + native157 + native158 + native159 + native160 + native161 + native162 + native163 + native164 + native165 + native166 + native167 + native168 + native169 + native170 + native171 + native172 + native173 + native174 + native175 + native176 + native177 + native178 + native179 + native180 + native181 + native182 + native183 + native184 + native185 + native186 + native187 + native188 + native189 + native190 + native191 + native192 + native193 + native194 + native195 + native196 + native197 + native198 + native199 + native200 + native201 + native202 + native203 + native204 + native205 + native206 + native207 + native208 + native209 + native210 + native211 + native212 + native213 + native214 + native215 + native216 + native217 + native218 + native219 + native220 + native221 + native222 + native223 + native224 + native225 + native226 + native227 + native228 + native229 + native230 + native231 + native232 + native233 + native234 + native235 + native236 + native237 + native238 + native239 + native240 + native241 + native242 + native243 + native244 + native245 + native246 + native247 + native248 + native249 + native250 + native251 + native252 + native253 + native254 + native255 + native256 + native257 + native258 + native259 + native260 + native261 + native262 + native263 + native264 + native265 + native266 + native267 + native268 + native269 + native270 + native271 + native272 + native273 + native274 + native275 + native276 + native277 + native278 + native279 + native280 + native281 + native282 + native283 + native284 + native285 + native286 + native287 + native288 + native289 + native290 + native291 + native292 + native293 + native294 + native295 + native296 + native297 + native298 + native299 + native300 + native301 + native302 + native303 + native304 + native305 + native306 + native307 + native308 + native309 + native310 + native311 + native312 + native313 + native314 + native315 + native316 + native317 + native318 + native319 + native320 + native321 + native322 + native323 + native324 + native325 + native326 + native327 + native328 + native329 + native330 + native331 + native332 + native333 + native334 + native335 + native336 + native337 + native338 + native339 + native340 + native341 + native342 + native343 + native344 + native345 + native346 + native347 + native348 + native349 + native350 + native351 + native352 + native353 + native354 + native355 + native356 + native357 + native358 + native359 + native360 + native361 + native362 + native363 + native364 + native365 + native366 + native367 + native368 + native369 + native370 + native371 + native372 + native373 + native374 + native375 + native376 + native377 + native378 + native379 + native380 + native381 + native382 + native383 + native384 + native385 + native386 + native387 + native388 + native389 + native390 + native391 + native392 + native393 + native394 + native395 + native396 + native397 + native398 + native399 + native400 + native401 + native402 + native403 + native404 + native405 + native406 + native407 + native408 + native409 + native410 + native411 + native412 + native413 + native414 + native415 + native416 + native417 + native418 + native419 + native420 + native421 + native422 + native423 + native424 + native425 + native426 + native427 + native428 + native429 + native430 + native431 + native432 + native433 + native434 + native435 + native436 + native437 + native438 + native439 + native440 + native441 + native442 + native443 + native444 + native445 + native446 + native447 + native448 + native449 + native450 + native451 + native452 + native453 + native454 + native455 + native456 + native457 + native458 + native459 + native460 + native461 + native462 + native463 + native464 + native465 + native466 + native467 + native468 + native469 + native470 + native471 + native472 + native473 + native474 + native475 + native476 + native477 + native478 + native479 + native480 + native481 + native482 + native483 + native484 + native485 + native486 + native487 + native488 + native489 + native490 + native491 + native492 + native493 + native494 + native495 + native496 + native497 + native498 + native499 + native500 + native501 + native502 + native503 + native504 + native505 + native506 + native507 + native508 + native509 + native510 + native511 + native512 + native513 + native514 + native515 + native516 + native517 + native518 + native519 + native520 + native521 + native522 + native523 + native524 + native525 + native526 + native527 + native528 + native529 + native530 + native531 + native532 + native533 + native534 + native535 + native536 + native537 + native538 + native539 + native540 + native541 + native542 + native543 + native544 + native545 + native546 + native547 + native548 + native549 + native550 + native551 + native552 + native553 + native554 + native555 + native556 + native557 + native558 + native559 + native560 + native561 + native562 + native563 + native564 + native565 + native566 + native567 + native568 + native569 + native570 + native571 + native572 + native573 + native574 + native575 + native576 + native577 + native578 + native579 + native580 + native581 + native582 + native583 + native584 + native585 + native586 + native587 + native588 + native589 + native590 + native591 + native592 + native593 + native594 + native595 + native596 + native597 + native598 + native599 + native600 + native601 + native602 + native603 + native604 + native605 + native606 + native607 + native608 + native609 + native610 + native611 + native612 + native613 + native614 + native615 + native616 + native617 + native618 + native619 + native620 + native621 + native622 + native623 + native624 + native625 + native626 + native627 + native628 + native629 + native630 + native631 + native632 + native633 + native634 + native635 + native636 + native637 + native638 + native639 + native640 + native641 + native642 + native643 + native644 + native645 + native646 + native647 + native648 + native649 + native650 + native651 + native652 + native653 + native654 + native655 + native656 + native657 + native658 + native659 + native660 + native661 + native662 + native663 + native664 + native665 + native666 + native667 + native668 + native669 + native670 + native671 + native672 + native673 + native674 + native675 + native676 + native677 + native678 + native679 + native680 + native681 + native682 + native683 + native684 + native685 + native686 + native687 + native688 + native689 + native690 + native691 + native692 + native693 + native694 + native695 + native696 + native697 + native698 + native699 + native700 + native701 + native702 + native703 + native704 + native705 + native706 + native707 + native708 + native709 + native710 + native711 + native712 + native713 + native714 + native715 + native716 + native717 + native718 + native719 + native720 + native721 + native722 + native723 + native724 + native725 + native726 + native727 + native728 + native729 + native730 + native731 + native732 + native733 + native734 + native735 + native736 + native737 + native738 + native739 + native740 + native741 + native742 + native743 + native744 + native745 + native746 + native747 + native748 + native749 + native750 + native751 + native752 + native753 + native754 + native755 + native756 + native757 + native758 + native759 + native760 + native761 + native762 + native763 + native764 + native765 + native766 + native767 + native768 + native769 + native770 + native771 + native772 + native773 + native774 + native775 + native776 + native777 + native778 + native779 + native780 + native781 + native782 + native783 + native784 + native785 + native786 + native787 + native788 + native789 + native790 + native791 + native792 + native793 + native794 + native795 + native796 + native797 + native798 + native799 + native800 + native801 + native802 + native803 + native804 + native805 + native806 + native807 + native808 + native809 + native810 + native811 + native812 + native813 + native814 + native815 + native816 + native817 + native818 + native819 + native820 + native821 + native822 + native823 + native824 + native825 + native826 + native827 + native828 + native829 + native830 + native831 + native832 + native833 + native834 + native835 + native836 + native837 + native838 + native839 + native840 + native841 + native842 + native843 + native844 + native845 + native846 + native847 + native848 + native849 + native850 + native851 + native852 + native853 + native854 + native855 + native856 + native857 + native858 + native859 + native860 + native861 + native862 + native863 + native864 + native865 + native866 + native867 + native868 + native869 + native870 + native871 + native872 + native873 + native874 + native875 + native876 + native877 + native878 + native879 + native880 + native881 + native882 + native883 + native884 + native885 + native886 + native887 + native888 + native889 + native890 + native891 + native892 + native893 + native894 + native895 + native896 + native897 + native898 + native899 + native900 + \ No newline at end of file diff --git a/Addons/scraper.EmberCore/Langs/scraper.EmberCore.English_(en_US)-Help.xml b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.English_(en_US)-Help.xml index fd5185b..1705beb 100644 --- a/Addons/scraper.EmberCore/Langs/scraper.EmberCore.English_(en_US)-Help.xml +++ b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.English_(en_US)-Help.xml @@ -1,46 +1,45 @@ - - Enable or disable this module. - Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom) - Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom) - Enter the mirror to use when retrieving information from IMDB. - If enabled, Ember will attempt to retreive the movie title from OFDB (a German language site) when scraping. - If enabled, Ember will attempt to retreive the movie outline from OFDB (a German language site) when scraping. - If enabled, Ember will attempt to retreive the movie plot from OFDB (a German language site) when scraping. - If enabled, Ember will attempt to retreive the movie genre from OFDB (a German language site) when scraping. - Enable scraping movie certification. - Enable scraping movie Top 250 ranking. - Limit the number of scraped genres to the entered value. - Limit the number of scraped actors to the entered value. - Enable scraping movie other crew. (Scrape Full Crew must be enabled) - Enable scraping movie musicians. (Scrape Full Crew must be enabled) - Enable scraping movie producers. (Scrape Full Crew must be enabled) - Enable scraping movie writers. - Enable scraping movie studio. - Enable scraping movie runtime. - Enable scraping movie plot. - Enable scraping movie outline. - Enable scraping movie genre. - Enable scraping movie director. - Enable scraping movie tagline. - Enable scraping movie cast. - Enable scraping movie votes. - Enable scraping movie trailer url. - Enable scraping movie rating. - Enable scraping movie release date. - Enable scraping movie MPAA. - Enable scraping movie year. - Enable scraping movie title. - Enable or disable this module. - Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom) - Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom) - Enable scraping posters from this module. (Refer to global poster settings for more options) - Enable scraping fanart from this module. (Refer to global fanart settings for more options) - Enable retrieving images from theMovieDB.org. - Enable retrieving images from - Enable retrieving images from MoviePosterDB.com. - Enable automatic extraction of extrathumbs from this module. (Refer to global extrathumb settings for more options) - Enable trailer downloading from this module. (Refer to global trailer settings for more options) - Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.) - Select the sites from which you would like to retrieve trailer URLs and/or files. - \ No newline at end of file + Enable or disable this module. + Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom) + Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom) + Enter the mirror to use when retrieving information from IMDB. + If enabled, Ember will attempt to retreive the movie title from OFDB (a German language site) when scraping. + If enabled, Ember will attempt to retreive the movie outline from OFDB (a German language site) when scraping. + If enabled, Ember will attempt to retreive the movie plot from OFDB (a German language site) when scraping. + If enabled, Ember will attempt to retreive the movie genre from OFDB (a German language site) when scraping. + Enable scraping movie certification. + Enable scraping movie Top 250 ranking. + Limit the number of scraped genres to the entered value. + Limit the number of scraped actors to the entered value. + Enable scraping movie other crew. (Scrape Full Crew must be enabled) + Enable scraping movie musicians. (Scrape Full Crew must be enabled) + Enable scraping movie producers. (Scrape Full Crew must be enabled) + Enable scraping movie writers. + Enable scraping movie studio. + Enable scraping movie runtime. + Enable scraping movie plot. + Enable scraping movie outline. + Enable scraping movie genre. + Enable scraping movie director. + Enable scraping movie tagline. + Enable scraping movie cast. + Enable scraping movie votes. + Enable scraping movie trailer url. + Enable scraping movie rating. + Enable scraping movie release date. + Enable scraping movie MPAA. + Enable scraping movie year. + Enable scraping movie title. + Enable or disable this module. + Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom) + Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom) + Enable scraping posters from this module. (Refer to global poster settings for more options) + Enable scraping fanart from this module. (Refer to global fanart settings for more options) + Enable retrieving images from theMovieDB.org. + Enable retrieving images from + Enable retrieving images from MoviePosterDB.com. + Enable automatic extraction of extrathumbs from this module. (Refer to global extrathumb settings for more options) + Enable trailer downloading from this module. (Refer to global trailer settings for more options) + Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.) + Select the sites from which you would like to retrieve trailer URLs and/or files. + diff --git a/Addons/scraper.EmberCore/Langs/scraper.EmberCore.English_(en_US).xml b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.English_(en_US).xml index 41b998b..87a19b5 100644 --- a/Addons/scraper.EmberCore/Langs/scraper.EmberCore.English_(en_US).xml +++ b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.English_(en_US).xml @@ -1,117 +1,117 @@ - - Ember Native TV Scrapers - Use OFDB Genre - Use OFDB Plot - Use OFDB Outline - Use OFDB Title - IMDB Mirror: - Scraper Fields - Scraper specific - Timeout: - Supported Sites: - Get Images From: - Search Results - - Searching IMDB... - The ID you entered is not a valid IMDB ID. - You have manually entered an IMDB ID but have not verified it is correct. - Continue without verification? - Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again. - Verification Failed - Partial Matches ({0}) - Exact Matches ({0}) - Popular Titles ({0}) - No Matches Found - View details of each result to find the proper movie. - Movie Search Results - Manual IMDB Entry: - Verify - Searching IMDB... - Downloading details... - Downloading {0} - No Fanart found for this movie. - No Fanart Found - No Posters found for this movie. - No Posters Found - Retrieving data from TheMovieDB.com... - TheMovieDB.com is not enabled - Retrieving data from IMPAwards.com... - IMPAwards.com is not enabled - Retrieving data from MoviePosterDB.com... - MoviePostersDB.com is not enabled - Preparing images... - Select Poster - - Select Fanart - - Check All Thumb - Check All Mid - Check All Original - Selected item will be set as fanart. All checked items will be saved to \extrathumbs. - Performing Preliminary Tasks... - Downloading Selected Image... - Original - Cover - Medium - Small - Original ({0}x{1}) - Cover ({0}x{1}) - Small ({0}x{1}) - Medium ({0}x{1}) - Multiple - Downloading selected trailer... - Copying specified file to trailer... - The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type. - Error Playing Trailer - Move - Copy - Moving specified file to trailer... - Set To Nfo - Select Trailer - Select Trailer to Download - Manual Trailer Entry - Direct Link or YouTube URL: - Compiling trailer list... - Preview Trailer - Local Trailer: - The video format links could not be retrieved. - Error Retrieving Video Format Links - Select Format - Getting available formats... - Available Formats - A poster of your preferred size could not be found. Please choose another. - No Preferred Size - Fanart of your preferred size could not be found. Please choose another. - There are no known episodes for this show. Scrape the show, season, or episode and try again. - No Known Episodes - There is no poster available for this episode. - Guest Star - The ID you entered is not a valid TVDB ID. - Downloading show info... - TV Search Results - View details of each result to find the proper TV show. - Downloading Fullsize Fanart Image... - Loading Current Images... - (Down)Loading New Images... - Setting Defaults... - Show Poster - Episode Fanart - Show Fanart - All Seasons Poster - Season Posters - Season Fanart - Season {0} Posters - Season {0} Fanart - TV Image Selection - Current Image: - Get Posters - Get Fanart - These settings are specific to this module.{0}Please refer to the global settings for more options. - Ember Native Movie Scrapers - - IMDB - OFDB (German) - TMDB Extrathumbs Size: - Trailers - Youtube/TMDB Trailer: - XBMC Format - Preferred language - Save Fanart In: - \ No newline at end of file + Ember Native TV Scrapers + Use OFDB Genre + Use OFDB Plot + Use OFDB Outline + Use OFDB Title + IMDB Mirror: + Scraper Fields - Scraper specific + Timeout: + Supported Sites: + Get Images From: + Search Results + Searching IMDB... + The ID you entered is not a valid IMDB ID. + You have manually entered an IMDB ID but have not verified it is correct. + Continue without verification? + Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again. + Verification Failed + Partial Matches ({0}) + Exact Matches ({0}) + Popular Titles ({0}) + No Matches Found + View details of each result to find the proper movie. + Movie Search Results + Manual IMDB Entry: + Verify + Searching IMDB... + Downloading details... + Downloading {0} + No Fanart found for this movie. + No Fanart Found + No Posters found for this movie. + No Posters Found + Retrieving data from TheMovieDB.com... + TheMovieDB.com is not enabled + Retrieving data from IMPAwards.com... + IMPAwards.com is not enabled + Retrieving data from MoviePosterDB.com... + MoviePostersDB.com is not enabled + Preparing images... + Select Poster + Select Fanart + Check All Thumb + Check All Mid + Check All Original + Selected item will be set as fanart. All checked items will be saved to \extrathumbs. + Performing Preliminary Tasks... + Downloading Selected Image... + Original + Cover + Medium + Small + Original ({0}x{1}) + Cover ({0}x{1}) + Small ({0}x{1}) + Medium ({0}x{1}) + Multiple + Downloading selected trailer... + Copying specified file to trailer... + The trailer could not be played. This could be due to an invalid URL or you do not have the proper player to play the trailer type. + Error Playing Trailer + Move + Copy + Moving specified file to trailer... + Set To Nfo + Select Trailer + Select Trailer to Download + Manual Trailer Entry + Direct Link or YouTube URL: + Compiling trailer list... + Preview Trailer + Local Trailer: + The video format links could not be retrieved. + Error Retrieving Video Format Links + Select Format + Getting available formats... + Available Formats + A poster of your preferred size could not be found. Please choose another. + No Preferred Size + Fanart of your preferred size could not be found. Please choose another. + There are no known episodes for this show. Scrape the show, season, or episode and try again. + No Known Episodes + There is no poster available for this episode. + Guest Star + The ID you entered is not a valid TVDB ID. + Downloading show info... + TV Search Results + View details of each result to find the proper TV show. + Downloading Fullsize Fanart Image... + Loading Current Images... + (Down)Loading New Images... + Setting Defaults... + Show Poster + Episode Fanart + Show Fanart + All Seasons Poster + Season Posters + Season Fanart + Season {0} Posters + Season {0} Fanart + TV Image Selection + Current Image: + Get Posters + Get Fanart + These settings are specific to this module.{0}Please refer to the global settings for more options. + Ember Native Movie Scrapers + + IMDB + OFDB (German) + TMDB Extrathumbs Size: + Trailers + Youtube/TMDB Trailer: + XBMC Format + Preferred language + Save Fanart In: + Open In Browser + diff --git a/Addons/scraper.EmberCore/Langs/scraper.EmberCore.German_(de_DE)-Help.xml b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.German_(de_DE)-Help.xml new file mode 100644 index 0000000..f4c930d --- /dev/null +++ b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.German_(de_DE)-Help.xml @@ -0,0 +1,45 @@ + + Aktiviert dieses Modul. + Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.) + Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.) + Gib den Mirror ein über den Ember mit der IMDB kommunizieren soll. + Wenn aktiviert versucht Ember den Titel von der deutschen Seite OFDB.DE zu scrapen. + Wenn aktiviert versucht Ember die Kurzebschreibung von der deutschen Seite OFDB.DE zu scrapen. + Wenn aktiviert versucht Ember die Inhaltsangabe von der deutschen Seite OFDB.DE zu scrapen. + Wenn aktiviert versucht Ember die Genres von der deutschen Seite OFDB.DE zu scrapen. + Aktiviert das Scrapen der Altersbeschränkung mit diesem Modul. + Aktiviert das Scrapen der IMDB Top250 mit diesem Modul. + Die Anzahl der gescrapten Genres limitieren. + Die Anzahl der gescrapten Schauspieler limitieren. + Aktiviert das Scrapen der Sonstigen Crew mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!) + Aktiviert das Scrapen der Musiker mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!) + Aktiviert das Scrapen der Produzenten mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!) + Aktiviert das Scrapen der Autoren mit diesem Modul. + Aktiviert das Scrapen des Studios mit diesem Modul. + Aktiviert das Scrapen der Spielzeit mit diesem Modul. + Aktiviert das Scrapen des Inhalts mit diesem Modul. + Aktiviert das Scrapen der Kurzbeschreibung mit diesem Modul. + Aktiviert das Scrapen von Genre mit diesem Modul. + Aktiviert das Scrapen des Regisseurs mit diesem Modul. + Aktiviert das Scrapen der Tagline mit diesem Modul. + Aktiviert das Scrapen der Schauspieler mit diesem Modul. + Aktiviert das Scrapen der Anzahl Bewertungen mit diesem Modul. + Aktiviert das Scrapen von Trailern mit diesem Modul. + Aktiviert das Scrapen der Bewertung mit diesem Modul. + Aktiviert das Scrapen des Premiere Datums mit diesem Modul. + Aktiviert das Scrapen der MPAA Bewertung mit diesem Modul. + Aktiviert das Scrapen des Jahres mit diesem Modul. + Aktiviert das Scrapen des Titels mit diesem Modul. + Aktiviert dieses Modul. + Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.) + Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.) + Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration!) + Aktiviert das Laden von Fanart mit diesem Modul. (Schau auch in die Globale Konfiguration!) + Aktiviert das Laden von Bildern von TheMovieDB.org. + Aktiviert das Laden von Bildern von IMPA + Aktiviert das Laden von Bildern von MoviePosterDB.com. + Automatische Frame extraktion mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!) + Trailer laden mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!) + Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Zeite in dieser Zeit nicht geantwortet hat wird sie übersprungen) + Wähle die Seite von der Trailer URLs/Dateien geladen werden sollen. + diff --git a/Addons/scraper.EmberCore/Scraper/scraper.EmberCore.German_(de_DE).xml b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.German_(de_DE).xml similarity index 77% rename from Addons/scraper.EmberCore/Scraper/scraper.EmberCore.German_(de_DE).xml rename to Addons/scraper.EmberCore/Langs/scraper.EmberCore.German_(de_DE).xml index aa4283d..0349557 100644 --- a/Addons/scraper.EmberCore/Scraper/scraper.EmberCore.German_(de_DE).xml +++ b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.German_(de_DE).xml @@ -1,4 +1,3 @@ - Ember Nativer TV Scraper OFDB Genre benutzen @@ -10,12 +9,12 @@ Timeout: Unterstützte Seiten: Bilder holen von: - Suchergebnis - + Suchergebnis Suche in der IMDB... - Die eingegebene ID ist keine gültige IMDB ID - Die IMDB ID ist noch nicht geprüft + Die eingegebene ID ist keine gültige IMDB ID. + Die IMDB ID ist noch nicht geprüft. Ohne Prüfung fortfahren? - Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben + Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben. Prüfung fehlgeschlagen Teil Treffer ({0}) Exakte Treffer({0}) @@ -39,12 +38,12 @@ Lade Daten von MoviePosterDB.com... MoviePostersDB.com ist nicht aktiviert. Bereite Bilder vor... - Wähle Poster - - Wähle Fanart - + Wähle Poster + Wähle Fanart Alle Thumbs Alle Mittl. Alle Original - Markiertes Bild wird Fanart. Alle aktivierten werden extrathumbs. + Markiertes Bild wird Fanart. Alle aktivierten werden Extrathumbs. Vorarbeit läuft... Lade gewähltes Bild... Original @@ -58,16 +57,16 @@ Mehrfach Lade gewählten Trailer... Kopiere gewählten Trailer... - Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URI liegen oder es ist kein Player für diesen Dateityp vorhanden. - Fehler beim abspielen des Trailers + Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URL liegen oder es ist kein Player für diesen Dateityp vorhanden. + Fehler beim Abspielen des Trailers Verschieben Kopieren - Kopiere gewählten Trailer... - Set To Nfo + Verschiebe gewählten Trailer... + In NFO speichern Trailer wählen Trailer zum laden wählen Man. Trailer - Direktlink oder YouTube URL + Direktlink oder YouTube URL: Stelle Trailerliste zusammen... Trailer Vorschau Lokaler Trailer: @@ -77,13 +76,13 @@ Hole verfügbare Formate... Verfügbare Formate Es konnte kein Poster in der gewünschten Größe gefunden werden. Wähle ein anderes. - Keine gewünschte Größe. + Keine gewünschte Größe Es konnte kein Fanart in der gewünschten Größe gefunden werden. Wähle ein anderes. Keine Episoden für diese TV-Serie verfügbar. Scrape diese Serie, Staffel oder Episode und versuche es erneut. - Keine Episoden verfügbar. + Keine Episoden verfügbar Kein Poster für diese Episode vorhanden. Gast Star - Die eingegebene ID ist keine gültige TVDB ID + Die eingegebene ID ist keine gültige TVDB ID. Lade Serien Informationen... Serien Suchergebnis Betrachte die Details um die richtige TV-Serie zu erkennen. @@ -103,7 +102,16 @@ Aktuelles Bild: Poster laden Fanart laden - Diese Einstellungen sind Modulspezifisch{0}Schaue auch in die Globale Konfiguration! - Ember Nativer TV Scraper + Diese Einstellungen sind Modul-spezifisch. {0} Bitte werfen sie einen blick in die Globalen Einstellungen für noch mehr Optionen. + Ember Nativer Film Scraper + + IMDB + OFDB (German) + TMDB Extrathumbs Grösse: + Trailer + Youtube/TMDB Trailer: + XBMC Format + Bevorzugte Sprache + Speichere Fanart in: + Im Browser öffnen - diff --git a/Addons/scraper.EmberCore/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..79a98bf --- /dev/null +++ b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,45 @@ + + Slå modulen av eller på. + Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.) + Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.) + Før inn speilserver til IMDB. + Hvis påslått, EMM vil å prøve å finne filmtittel fra OFDB (en tyskspråklig side) under detaljhenting. + Hvis påslått, EMM vil prøve å finne beskrivelse av filmen på OFDB (en tyskspråklig side) under detaljhenting. + Hvis påslått, EMM vil hente filmhistorien fra OFDB (en tyskspråklig side) under detaljhenting. + Hvis påslått, EMM vil hente filmsjanger fra OFDB (en tyskspråklig side) under detaljhenting. + Slå på detaljhenting av filmsertifisering. + Slå på detaljhenting av IMDB Top 250-plassering. + Begrens antall detaljhentede sjangre. + Begrens antall skuespillere. + Slå på detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått) + Slå på detaljhenting av musikere. (Detaljhenting av fullt crew må være påslått) + Slå på detaljhenting av filmprodusenter. (Detaljhenting av full crew må være påslått) + Slå på detaljhenting av manusforfattere. + Slå på detaljhenting av studio. + Slå på detaljhenting av filmlengde. + Slå på detaljhenting av filmens historie. + Slå på detaljhenting av filmens beskrivelse. + Slå på detaljhenting av filmens sjanger. + Slå på detaljhetning av filmens regissør. + Slå på detaljhetning av filmens undertittel. + Slå på detaljhetning av filmens skuespillerbeholdning. + Slå på detaljhetning av filmens poeng. + Slå på detaljhetning av filmens trailer URL. + Slå på detaljhetning av filmens aldersgrense. + Slå på detaljhetning av filmens premieredato. + Slå på detaljhetning av filmens MPAA-markering. + Slå på detaljhetning av filmens år. + Slå på detaljhetning av filmens tittel. + Slå modulen av eller på. + Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.) + Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.) + Slå på detaljhetning av plakater i denne modulen. (Se globale plakatinnstillinger for flere valg) + Slå på detaljhetning av fankunst i denne modulen. (Se globale fankunstinnstillinger for flere valg) + Slå på bildehenting fra theMovieDB.org. + Slå på bildehenting fra + Slå på bildehenting fra MoviePosterDB.com + Slå på automatisk henting av ekstrakunst fra denne modulen. (Se globale ekstrakunstinnstillinger for flere valg) + Slå på automatisk henting av trailer fra denne modulen. (Se globale trailerinnstillinger for flere valg) + Før inn tiden (i sekunder) du vil bruke for timeout for trailersider. (Hvis siden ikke svarer innen timeoutfristen, så vil den bli hoppet over) + Velg sidene du vil bruke til trailer URL og/eller filer. + diff --git a/Addons/scraper.EmberCore/Langs/scraper.EmberCore.Norwegian_(no_NO).xml b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.Norwegian_(no_NO).xml new file mode 100644 index 0000000..52370c3 --- /dev/null +++ b/Addons/scraper.EmberCore/Langs/scraper.EmberCore.Norwegian_(no_NO).xml @@ -0,0 +1,117 @@ + + EMM TV-detaljhentere + Bruk OFDB-sjangere + Bruk OFDB-filmhistorie + Bruk OFDB-beskrivelse + Bruk OFDB-tittel + IMDB-speilserver: + Detaljhenterområder - Detaljhenterspesifikk + Tidsavbrudd: + Støttede sider: + Hent bilder fra: + Søkeresultater + Søker TMDB... + IDen du førte inn er ikke en riktig IMDB-ID. + Du har ført inn en IMDB-ID, men har ikke verifisert om den er riktig. + Fortsette uten verifisering? + Kunne ikke hente filmdetaljer for den innførte IDen. Vennligst sjekk IDen og prøv igjen. + Verifisering feilet + Delvise treff ({0}) + Eksakte treff ({0}) + Populære titler ({0}) + Ingen funnet + Se detaljer fra hvert treff for å finne riktig film. + Filmsøkresultater + Manuell IMDB innføring: + Verifiser + Søker TMDB... + Laster ned detaljer... + Laster ned {0} + Ingen fankunst funnet for denne filmen. + Ingen fankunst funnet + Ingen plakater funnet for denne filmen. + Ingen plakater funnet + Henter data fra TheMovieDB.com... + TheMovieDB.com er ikke påslått + Henter data fra IMPAwards.com... + IMPAwards.com er ikke påslått + Henter data fra MoviePosterDB.com... + MoviePostersDB.com er ikke påslått + Forbereder bilder... + Velg plakat + Velg fankunst + Huk av alle tommelbilder + Huk av alle Mid + Huk av alle originale + Valgte objekt vil bli satt som fankunst. Alle hukede objekter vil bli lagret i \extrathumbs. + Utfører forberedende oppgaver... + Laster ned valgte bilde... + Original + Cover + Medium + Liten + Original ({0}x{1}) + Cover {0}x{1} + Liten ({0}x{1}) + Medium ({0}x{1}) + Flere + Laster ned valgt trailer... + Kopierer valgt fil til trailer... + Traileren kunne ikke spilles av. Det kan være at URL ikke er gyldig, eller at du ikke har riktig avspiller for denne filtypen. + Kunne spille av trailer. + Flytt + Kopiér + Flytter valgt fil til trailer... + Sett i nfo + Velg trailer + Velg trailer til å laste ned + Manuell trailerinnføring + Direkte link eller YouTube URL: + Kompilerer trailerliste... + Sniktitt på trailer + Lokal trailer: + Videoformatlenkene kunne ikke hentes + Kunne ikke hente videoformatlenker + Velg format + Henter tilgjengelige formater... + Tilgjengelige formater + En plakat i din valgte størrelse kunne ikke hentes. Vennligst velg en annen. + Ingen foretrukket størrelse + Fankunst i din foretrukkede størrelse kunne ikke bli funnet. Vennligst velg en annen. + Det er ingen kjente episoder for denne serien. Detaljhent serien, sesongen eller episoden og prøv på nytt. + Ingen kjente episoder + Det er ingen plakater for denne episoden. + Gjesteskuespiller + IDen du innførte er ikke en gyldig TVDB ID. + Laster ned serieinfo... + TVsøk-resultater + Se detaljer fra hvert resultat for å finne riktig serie. + Laster ned fankunst i full størrelse... + Laster inn nåværende bilder... + Laster (ned) nye bilder... + Setter standarder... + Serieplakat + Episodefankunst + Vis fankunst + Alle sesonger-plakat + Sesongplakater + Sesongfankunst + Sesong {0}-plakater + Sesong {0}-fankunst + TV-bilde valg + Nåværende bilde: + Hent plakater + Hent fankunst + Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg. + EMM film-detaljhentere + + IMDB + OFDB (Tysk) + TMDB Ekstrakunst-størrelse: + Trailere + Youtube/TMDB Trailer: + XBMC-format + Foretrukket språk + Lagre fankunst i: + Åpne i nettleser + diff --git a/Addons/scraper.EmberCore/My Project/AssemblyInfo.vb b/Addons/scraper.EmberCore/My Project/AssemblyInfo.vb index 38ae1c7..555f7f0 100644 --- a/Addons/scraper.EmberCore/My Project/AssemblyInfo.vb +++ b/Addons/scraper.EmberCore/My Project/AssemblyInfo.vb @@ -9,10 +9,10 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - + - + @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/Addons/scraper.EmberCore/Scraper/clsScrapeIMDB.vb b/Addons/scraper.EmberCore/Scraper/clsScrapeIMDB.vb index 0103bae..db4c27e 100644 --- a/Addons/scraper.EmberCore/Scraper/clsScrapeIMDB.vb +++ b/Addons/scraper.EmberCore/Scraper/clsScrapeIMDB.vb @@ -201,7 +201,7 @@ Namespace IMDB Dim D, W, tempD As Integer - If Options.bMPAA Then + If Options.bMPAA AndAlso (String.IsNullOrEmpty(IMDBMovie.MPAA) OrElse Not Master.eSettings.LockMPAA) Then tempD = If(HTML.IndexOf("
MPAA:
") > 0, HTML.IndexOf("
MPAA:
"), 0) D = If(tempD > 0, HTML.IndexOf("
", tempD), 0) @@ -213,7 +213,7 @@ Namespace IMDB If bwIMDB.CancellationPending Then Return Nothing - If Options.bCert Then + If Options.bCert AndAlso (String.IsNullOrEmpty(IMDBMovie.Certification) OrElse Not Master.eSettings.LockMPAA) Then 'get certifications D = HTML.IndexOf("
Certification:
") @@ -230,15 +230,83 @@ Namespace IMDB If Options.bMPAA AndAlso Master.eSettings.UseCertForMPAA AndAlso (Not Master.eSettings.CertificationLang = "USA" OrElse (Master.eSettings.CertificationLang = "USA" AndAlso String.IsNullOrEmpty(IMDBMovie.MPAA))) Then IMDBMovie.MPAA = If(Master.eSettings.CertificationLang = "USA", StringUtils.USACertToMPAA(IMDBMovie.Certification), If(Master.eSettings.OnlyValueForCert, IMDBMovie.Certification.Split(Convert.ToChar(":"))(1), IMDBMovie.Certification)) End If + + + Else + 'No FSK Rating was found -> Alternative: Set USA Rating instead as fallback, MPAA will be converted to FSK, Certification from USA will be used, so people can see that US info was used! + If Master.eSettings.UseMPAAForFSK Then + Try + If Master.eSettings.CertificationLang = "Germany" AndAlso (IMDBMovie.MPAA.ToLower.Contains("usa") Or IMDBMovie.MPAA.ToLower.Contains("rated")) Then + Dim LANGRATING As String = "USA" + Dim Cert2 = From M In rCert Select N = String.Format("{0}:{1}", DirectCast(M, Match).Groups(1).ToString.Trim, DirectCast(M, Match).Groups(2).ToString.Trim) Order By N Descending Where N.Contains(LANGRATING) + If Cert2.Count > 0 Then + IMDBMovie.Certification = Cert2(0).ToString.Replace("West", String.Empty).Trim + If Options.bMPAA AndAlso Master.eSettings.UseCertForMPAA Then + If IMDBMovie.MPAA.ToLower.Contains("usa:g") Or IMDBMovie.MPAA.ToLower.Contains("rated g") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:0" + Else + IMDBMovie.MPAA = "0" + End If + + ElseIf IMDBMovie.MPAA.ToLower.Contains("usa:pg-13") Or IMDBMovie.MPAA.ToLower.Contains("rated pg-13") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:16" + Else + IMDBMovie.MPAA = "16" + End If + + ElseIf IMDBMovie.MPAA.ToLower.Contains("usa:pg") Or IMDBMovie.MPAA.ToLower.Contains("rated pg") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:12" + Else + IMDBMovie.MPAA = "12" + End If + + ElseIf IMDBMovie.Certification.ToLower.Contains("usa:r") Or IMDBMovie.Certification.ToLower.Contains("rated r") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:18" + Else + IMDBMovie.MPAA = "18" + End If + + ElseIf IMDBMovie.Certification.ToLower.Contains("usa:nc-17") Or IMDBMovie.Certification.ToLower.Contains("rated nc") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:18" + Else + IMDBMovie.MPAA = "18" + End If + + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End If End If + + Else + IMDBMovie.Certification = Strings.Join(Cert.ToArray, " / ").Trim + + End If End If End If + If String.IsNullOrEmpty(IMDBMovie.Certification) AndAlso Not String.IsNullOrEmpty(IMDBMovie.MPAA) Then IMDBMovie.Certification = IMDBMovie.MPAA End If + End If If bwIMDB.CancellationPending Then Return Nothing @@ -308,6 +376,7 @@ Namespace IMDB 'Find all cast of the movie 'Match the table only 1 time Dim ActorsTable As String = Regex.Match(HTML, ACTORTABLE_PATTERN).ToString + Dim ThumbsSize = AdvancedSettings.GetSetting("ActorThumbsSize", "SY275_SX400") Dim rCast As MatchCollection = Regex.Matches(ActorsTable, TR_PATTERN) @@ -318,7 +387,7 @@ Namespace IMDB Select New MediaContainers.Person(Web.HttpUtility.HtmlDecode(m1.Groups("name").ToString.Trim), _ Web.HttpUtility.HtmlDecode(m2.ToString.Trim), _ If(m3.Groups("thumb").ToString.IndexOf("addtiny") > 0 OrElse m3.Groups("thumb").ToString.IndexOf("no_photo") > 0, String.Empty, Strings.Replace(Web.HttpUtility.HtmlDecode(m3.Groups("thumb").ToString.Trim), _ - "._SX23_SY30_.jpg", "._SY275_SX400_.jpg"))) Take If(Master.eSettings.ActorLimit > 0, Master.eSettings.ActorLimit, 999999) + "._SX23_SY30_.jpg", String.Concat("._", ThumbsSize, "_.jpg")))) Take If(Master.eSettings.ActorLimit > 0, Master.eSettings.ActorLimit, 999999) If Master.eSettings.CastImagesOnly Then Cast1 = Cast1.Where(Function(p As MediaContainers.Person) (Not String.IsNullOrEmpty(p.Thumb))) @@ -389,9 +458,20 @@ Namespace IMDB Select Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) If Cou.Count > 0 Then - IMDBMovie.Country = Strings.Join(Cou.ToArray, " / ").Trim + + 'fix for display country flag in XBMC! + If Strings.Join(Cou.ToArray, " / ").Trim.ToUpper.Contains("USA") Then + IMDBMovie.Country = "United States of America" + ElseIf Strings.Join(Cou.ToArray, " / ").Trim.ToUpper.Contains("UK") Then + IMDBMovie.Country = "United Kingdom" + Else + IMDBMovie.Country = Strings.Join(Cou.ToArray, " / ").Trim() + End If + End If End If + + End If If bwIMDB.CancellationPending Then Return Nothing @@ -413,8 +493,11 @@ Namespace IMDB Dim Gen = From M In rGenres _ Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) Where Not N.Contains("more") Take If(Master.eSettings.GenreLimit > 0, Master.eSettings.GenreLimit, 999999) If Gen.Count > 0 Then - 'force splitting of /ed genres - IMDBMovie.Genre = Strings.Join(Gen.ToArray, "/").Trim.Replace("/", " / ").Trim + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + tGenre = StringUtils.GenreFilter(tGenre) + If Not String.IsNullOrEmpty(tGenre) Then + IMDBMovie.Genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If End If End If End If @@ -637,9 +720,9 @@ mPlot: Dim b As Boolean = False Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie - r.PopularTitles.Sort() - r.ExactMatches.Sort() - r.PartialMatches.Sort() + 'r.PopularTitles.Sort() + 'r.ExactMatches.Sort() + 'r.PartialMatches.Sort() Try Select Case iType @@ -655,7 +738,7 @@ mPlot: Master.tmpMovie.Clear() Using dIMDB As New dlgIMDBSearchResults dIMDB.IMDBURL = IMDBURL - If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If dIMDB.ShowDialog(r, sMovieName, dbMovie.Filename) = Windows.Forms.DialogResult.OK Then If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then b = False Else @@ -689,8 +772,16 @@ mPlot: 'End If If r.ExactMatches.Count = 1 Then b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) - ElseIf r.ExactMatches.Count > 1 AndAlso (r.ExactMatches(If(exactHaveYear >= 0, exactHaveYear, 0)).Lev <= 5 OrElse useAnyway) Then - b = GetMovieInfo(r.ExactMatches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.ExactMatches.Count > 1 AndAlso exactHaveYear >= 0 Then + b = GetMovieInfo(r.ExactMatches.Item(exactHaveYear).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count > 0 AndAlso popularHaveYear >= 0 Then + b = GetMovieInfo(r.PopularTitles.Item(popularHaveYear).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCrew, False, Options, True) + ElseIf r.ExactMatches.Count > 0 AndAlso (r.ExactMatches(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count > 0 AndAlso (r.PopularTitles(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.PopularTitles.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PartialMatches.Count > 0 AndAlso (r.PartialMatches(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.PartialMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) End If End Select @@ -843,84 +934,95 @@ mPlot: Dim D, W As Integer Dim R As New MovieSearchResults - Dim sHTTP As New HTTP - Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie, System.Text.Encoding.GetEncoding("ISO-8859-1")), "&s=all")) - Dim HTMLm As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie, System.Text.Encoding.GetEncoding("ISO-8859-1")), "&s=tt&ttype=ft&ref_=fn_ft")) - Dim HTMLe As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie, System.Text.Encoding.GetEncoding("ISO-8859-1")), "&s=tt&ttype=ft&exact=true&ref_=fn_tt_ex")) - Dim rUri As String = sHTTP.ResponseUri - sHTTP = Nothing - - 'Check if we've been redirected straight to the movie page - If Regex.IsMatch(rUri, IMDB_ID_REGEX) Then - Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(Regex.Match(rUri, IMDB_ID_REGEX).ToString, _ - StringUtils.ProperCase(sMovie), Regex.Match(Regex.Match(HTML, MOVIE_TITLE_PATTERN).ToString, "(?<=\()\d+(?=.*\))").ToString, 0) + If Regex.IsMatch(sMovie.ToLower, IMDB_ID_REGEX) Then + Dim sHTTP As New HTTP + Dim eIMDBID = Regex.Match(sMovie.ToLower, IMDB_ID_REGEX).ToString + Dim HTMLe As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/", eIMDBID)) + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(eIMDBID, StringUtils.ProperCase(sMovie), Regex.Match(Regex.Match(HTMLe, MOVIE_TITLE_PATTERN).ToString, "(?<=\()\d+(?=.*\))").ToString, 0) R.ExactMatches.Add(lNewMovie) Return R - End If + Else + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft")) + Dim HTMLp As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&ref_=fn_tt_pop")) + Dim HTMLm As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&ref_=fn_ft")) + Dim HTMLe As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&exact=true&ref_=fn_tt_ex")) + Dim rUri As String = sHTTP.ResponseUri + sHTTP = Nothing + + 'Check if we've been redirected straight to the movie page + If Regex.IsMatch(rUri.ToLower, IMDB_ID_REGEX) Then + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(Regex.Match(rUri.ToLower, IMDB_ID_REGEX).ToString, _ + StringUtils.ProperCase(sMovie), Regex.Match(Regex.Match(HTML, MOVIE_TITLE_PATTERN).ToString, "(?<=\()\d+(?=.*\))").ToString, 0) + R.ExactMatches.Add(lNewMovie) + Return R + End If - D = HTML.IndexOf("Titles") - If D <= 0 Then GoTo mPartial - W = HTML.IndexOf("", D) + 8 + 'popular titles + D = HTMLp.IndexOf("Titles") + If D <= 0 Then GoTo mPartial + W = HTMLp.IndexOf("", D) + 8 - Dim Table As String = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString + Dim Table As String = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString - Dim qPopular = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ - Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("Titles") - If D <= 0 Then GoTo mApprox - W = HTMLm.IndexOf("", D) + 8 + D = HTMLm.IndexOf("Titles") + If D <= 0 Then GoTo mExact + W = HTMLm.IndexOf("", D) + 8 - Table = Regex.Match(HTMLm.Substring(D, W - D), TABLE_PATTERN).ToString - Dim qpartial = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ - Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("", D) + 8 + ' 'Now process "Approx Matches" and merge both Partial and Approx matches + ' D = HTML.IndexOf("Titles (Approx Matches)") + ' If D <= 0 Then GoTo mExact + ' W = HTML.IndexOf("", D) + 8 - Table = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString + ' Table = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString - Dim qApprox = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ - Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("Titles") - If D <= 0 Then GoTo mResult - W = HTMLe.IndexOf("", D) + 8 + D = HTMLe.IndexOf("Titles") + If D <= 0 Then GoTo mResult + W = HTMLe.IndexOf("", D) + 8 - Table = String.Empty - Table = Regex.Match(HTMLe.Substring(D, W - D), TABLE_PATTERN).ToString + Table = String.Empty + Table = Regex.Match(HTMLe.Substring(D, W - D), TABLE_PATTERN).ToString - Dim qExact = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ - Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") Dim PosterURL As String @@ -129,7 +129,7 @@ Namespace IMPA Try Dim sHTTP As New HTTP - Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", IMDBID, "/posters")) + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) sHTTP = Nothing Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") diff --git a/Addons/scraper.EmberCore/Scraper/clsScrapeImages.vb b/Addons/scraper.EmberCore/Scraper/clsScrapeImages.vb index 5fc7e6f..7bdb821 100644 --- a/Addons/scraper.EmberCore/Scraper/clsScrapeImages.vb +++ b/Addons/scraper.EmberCore/Scraper/clsScrapeImages.vb @@ -39,16 +39,16 @@ Public Class ScrapeImages Dim tmpListTMDB As New List(Of MediaContainers.Image) Dim tmpListIMPA As New List(Of MediaContainers.Image) Dim tmpListMPDB As New List(Of MediaContainers.Image) - Dim tmpIMPAX As Image = Nothing - Dim tmpIMPAL As Image = Nothing - Dim tmpIMPAM As Image = Nothing - Dim tmpIMPAS As Image = Nothing - Dim tmpIMPAW As Image = Nothing - Dim tmpMPDBX As Image = Nothing - Dim tmpMPDBL As Image = Nothing - Dim tmpMPDBM As Image = Nothing - Dim tmpMPDBS As Image = Nothing - Dim tmpMPDBW As Image = Nothing + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) @@ -109,8 +109,8 @@ Public Class ScrapeImages tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) If Not IsNothing(tmdbThumb.WebImage.Image) Then If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) - Image.Image = tmdbThumb.WebImage.Image - Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg"))) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) End If Image.Clear() Next @@ -128,13 +128,13 @@ Public Class ScrapeImages For Each iMovie As MediaContainers.Image In tmpListTMDB If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then - Image.Image = iMovie.WebImage.Image + Image = iMovie.WebImage GoTo foundit End If Next If Not doAsk Then - Image.Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage.Image + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage End If End If Else @@ -199,23 +199,23 @@ Public Class ScrapeImages Select Case tmpSize Case Enums.PosterSize.Xlrg If IsNothing(tmpIMPAX) Then - tmpIMPAX = New Bitmap(Image.Image) + tmpIMPAX = Image End If Case Enums.PosterSize.Lrg If IsNothing(tmpIMPAL) Then - tmpIMPAL = New Bitmap(Image.Image) + tmpIMPAL = Image End If Case Enums.PosterSize.Mid If IsNothing(tmpIMPAM) Then - tmpIMPAM = New Bitmap(Image.Image) + tmpIMPAM = Image End If Case Enums.PosterSize.Small If IsNothing(tmpIMPAS) Then - tmpIMPAS = New Bitmap(Image.Image) + tmpIMPAS = Image End If Case Enums.PosterSize.Wide If IsNothing(tmpIMPAW) Then - tmpIMPAW = New Bitmap(Image.Image) + tmpIMPAW = Image End If End Select Else @@ -247,23 +247,23 @@ Public Class ScrapeImages Select Case tmpSize Case Enums.PosterSize.Xlrg If IsNothing(tmpMPDBX) Then - tmpMPDBX = New Bitmap(Image.Image) + tmpMPDBX = Image End If Case Enums.PosterSize.Lrg If IsNothing(tmpMPDBL) Then - tmpMPDBL = New Bitmap(Image.Image) + tmpMPDBL = Image End If Case Enums.PosterSize.Mid If IsNothing(tmpMPDBM) Then - tmpMPDBM = New Bitmap(Image.Image) + tmpMPDBM = Image End If Case Enums.PosterSize.Small If IsNothing(tmpMPDBS) Then - tmpMPDBS = New Bitmap(Image.Image) + tmpMPDBS = Image End If Case Enums.PosterSize.Wide If IsNothing(tmpMPDBW) Then - tmpMPDBW = New Bitmap(Image.Image) + tmpMPDBW = Image End If End Select Else @@ -314,23 +314,23 @@ Public Class ScrapeImages If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then If tmpListIMPA.Count > 0 Then If Not IsNothing(tmpIMPAX) Then - Image.Image = New Bitmap(tmpIMPAX) + Image = tmpIMPAX GoTo foundIT End If If Not IsNothing(tmpIMPAL) Then - Image.Image = New Bitmap(tmpIMPAL) + Image = tmpIMPAL GoTo foundIT End If If Not IsNothing(tmpIMPAM) Then - Image.Image = New Bitmap(tmpIMPAM) + Image = tmpIMPAM GoTo foundIT End If If Not IsNothing(tmpIMPAS) Then - Image.Image = New Bitmap(tmpIMPAS) + Image = tmpIMPAS GoTo foundIT End If If Not IsNothing(tmpIMPAW) Then - Image.Image = New Bitmap(tmpIMPAW) + Image = tmpIMPAW GoTo foundIT End If End If @@ -341,23 +341,23 @@ Public Class ScrapeImages If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then If tmpListMPDB.Count > 0 Then If Not IsNothing(tmpMPDBX) Then - Image.Image = New Bitmap(tmpMPDBX) + Image = tmpMPDBX GoTo foundIT End If If Not IsNothing(tmpMPDBL) Then - Image.Image = New Bitmap(tmpMPDBL) + Image = tmpMPDBL GoTo foundIT End If If Not IsNothing(tmpMPDBM) Then - Image.Image = New Bitmap(tmpMPDBM) + Image = tmpMPDBM GoTo foundIT End If If Not IsNothing(tmpMPDBS) Then - Image.Image = New Bitmap(tmpMPDBS) + Image = tmpMPDBS GoTo foundIT End If If Not IsNothing(tmpMPDBW) Then - Image.Image = New Bitmap(tmpMPDBW) + Image = tmpMPDBW GoTo foundIT End If End If @@ -436,9 +436,9 @@ Public Class ScrapeImages For Each miFanart As MediaContainers.Image In tmpListTMDB miFanart.WebImage.FromWeb(miFanart.URL) If Not IsNothing(miFanart.WebImage.Image) Then - Image.Image = miFanart.WebImage.Image + Image = miFanart.WebImage Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) - Image.Save(savePath) + Image.Save(savePath, , , False) If Master.eSettings.AutoET AndAlso doETs Then Select Case miFanart.Description.ToLower Case "original" @@ -489,7 +489,7 @@ Public Class ScrapeImages For Each iMovie As MediaContainers.Image In tmpListTMDB If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then - Image.Image = iMovie.WebImage.Image + Image = iMovie.WebImage GoTo foundit End If Next @@ -497,7 +497,7 @@ Public Class ScrapeImages Image.Clear() If Not doAsk Then - Image.Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage.Image + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage End If End If @@ -538,9 +538,9 @@ Public Class ScrapeImages If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then miFanart.WebImage.FromWeb(miFanart.URL) If Not IsNothing(miFanart.WebImage.Image) Then - Image.Image = miFanart.WebImage.Image + Image = miFanart.WebImage savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) - Image.Save(savePath) + Image.Save(savePath, , , False) If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then Image.SaveFAasET(savePath, sPath) End If @@ -550,9 +550,9 @@ Public Class ScrapeImages If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then miFanart.WebImage.FromWeb(miFanart.URL) If Not IsNothing(miFanart.WebImage.Image) Then - Image.Image = miFanart.WebImage.Image + Image = miFanart.WebImage savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) - Image.Save(savePath) + Image.Save(savePath, , , False) If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then Image.SaveFAasET(savePath, sPath) End If @@ -562,9 +562,9 @@ Public Class ScrapeImages If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then miFanart.WebImage.FromWeb(miFanart.URL) If Not IsNothing(miFanart.WebImage.Image) Then - Image.Image = miFanart.WebImage.Image + Image = miFanart.WebImage savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) - Image.Save(savePath) + Image.Save(savePath, , , False) If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then Image.SaveFAasET(savePath, sPath) End If @@ -582,7 +582,7 @@ Public Class ScrapeImages Case Enums.FanartSize.Lrg If iMovie.Description.ToLower = "original" Then If Not IsNothing(iMovie.WebImage.Image) Then - Image.Image = iMovie.WebImage.Image + Image = iMovie.WebImage Else Image.FromWeb(iMovie.URL) End If @@ -591,7 +591,7 @@ Public Class ScrapeImages Case Enums.FanartSize.Mid If iMovie.Description.ToLower = "mid" Then If Not IsNothing(iMovie.WebImage.Image) Then - Image.Image = iMovie.WebImage.Image + Image = iMovie.WebImage Else Image.FromWeb(iMovie.URL) End If @@ -600,7 +600,7 @@ Public Class ScrapeImages Case Enums.FanartSize.Small If iMovie.Description.ToLower = "thumb" Then If Not IsNothing(iMovie.WebImage.Image) Then - Image.Image = iMovie.WebImage.Image + Image = iMovie.WebImage Else Image.FromWeb(iMovie.URL) End If @@ -722,7 +722,7 @@ foundIT: If Not IsNothing(miFanart.WebImage.Image) Then _Image = miFanart.WebImage.Image Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) - Save(_Image, savePath) + miFanart.WebImage.Save(savePath, , , False) If Master.eSettings.AutoET Then Select Case miFanart.Description.ToLower Case "original" @@ -768,7 +768,7 @@ foundIT: If Not IsNothing(miFanart.WebImage.Image) Then _Image = miFanart.WebImage.Image savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) - Save(_Image, savePath) + miFanart.WebImage.Save(savePath, , , False) If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then SaveFAasET(savePath, sPath) End If @@ -780,7 +780,7 @@ foundIT: If Not IsNothing(miFanart.WebImage.Image) Then _Image = miFanart.WebImage.Image savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) - Save(_Image, savePath) + miFanart.WebImage.Save(savePath, , , False) If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then SaveFAasET(savePath, sPath) End If @@ -792,7 +792,7 @@ foundIT: If Not IsNothing(miFanart.WebImage.Image) Then _Image = miFanart.WebImage.Image savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) - Save(_Image, savePath) + miFanart.WebImage.Save(savePath, , , False) If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then SaveFAasET(savePath, sPath) End If @@ -845,9 +845,11 @@ foundIT: If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then - extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") - Else - extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") End If iMod = Functions.GetExtraModifier(extraPath) @@ -860,67 +862,68 @@ foundIT: FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) End Sub + ' Duplicate of clsImage + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0, Optional ByVal sUrl As String = "") + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' If Not sUrl = "" Then + ' Dim stroriginalurl As String = sUrl + + ' 'Image Download from tmdb is special, need original size + ' If Not sUrl.Contains("impawards") AndAlso Not sUrl.Contains("movieposterdb") Then + ' 'Always get original image... + ' 'links to images (tmdb) have following structure: 'example: http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w92/x65b4vsFKYuA878pLN1mJiAsgIP.jpg + ' Dim stringArray() As String = Split(stroriginalurl, "/") + ' If stringArray.Length > 4 Then + ' ' stringArray(5) contains values like "w185","original", "w154"...-->size -> we want original! + ' stringArray(5) = "original" + ' stroriginalurl = Join(stringArray, "/") + ' End If + ' End If + ' Dim webclient As New Net.WebClient + ' webclient.DownloadFile(stroriginalurl, sPath) + ' Else + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + ' End If + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub - Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0, Optional ByVal sUrl As String = "") - Try - If IsNothing(_image) Then Exit Sub - - Dim doesExist As Boolean = File.Exists(sPath) - Dim fAtt As New FileAttributes - If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then - If doesExist Then - 'get the current attributes to set them back after writing - fAtt = File.GetAttributes(sPath) - 'set attributes to none for writing - File.SetAttributes(sPath, FileAttributes.Normal) - End If - - If Not sUrl = "" Then - Dim stroriginalurl As String = sUrl - - 'Image Download from tmdb is special, need original size - If Not sUrl.Contains("impawards") AndAlso Not sUrl.Contains("movieposterdb") Then - 'Always get original image... - 'links to images (tmdb) have following structure: 'example: http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w92/x65b4vsFKYuA878pLN1mJiAsgIP.jpg - Dim stringArray() As String = Split(stroriginalurl, "/") - If stringArray.Length > 4 Then - ' stringArray(5) contains values like "w185","original", "w154"...-->size -> we want original! - stringArray(5) = "original" - stroriginalurl = Join(stringArray, "/") - End If - End If - Dim webclient As New Net.WebClient - webclient.DownloadFile(stroriginalurl, sPath) - Else - Using msSave As New MemoryStream - Dim retSave() As Byte - Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) - Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) - - EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) - - If iQuality > 0 Then - EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) - End If - - _image.Save(msSave, ICI, EncPars) - - retSave = msSave.ToArray - - Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) - fs.Write(retSave, 0, retSave.Length) - fs.Flush() - End Using - msSave.Flush() - End Using - End If - - If doesExist Then File.SetAttributes(sPath, fAtt) - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() diff --git a/Addons/scraper.EmberCore/Scraper/clsScrapeOFDB.vb b/Addons/scraper.EmberCore/Scraper/clsScrapeOFDB.vb index 2e94cca..a220a06 100644 --- a/Addons/scraper.EmberCore/Scraper/clsScrapeOFDB.vb +++ b/Addons/scraper.EmberCore/Scraper/clsScrapeOFDB.vb @@ -119,15 +119,20 @@ Public Class OFDB Dim HTML As String = sHTTP.DownloadData(sURL) sHTTP = Nothing - Dim D, W, B As Integer + Dim D, W, Wq, Wqq, B As Integer Dim tmpHTML As String - D = Html.IndexOf("Eine Inhaltsangabe von") + D = HTML.IndexOf("Eine Inhaltsangabe von") If D > 0 Then Dim L As Integer = Html.Length tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim W = tmpHTML.IndexOf("

") - If W > 0 Then + Wq = tmpHTML.IndexOf("Quelle:") + If Wq > 0 Then + Wqq = tmpHTML.IndexOf("

", Wq) + B = tmpHTML.IndexOf("

", Wqq + 8) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(Wqq + 8, B - (Wqq + 8)).Replace("
", String.Empty).Replace(vbCrLf, " ").Trim) + ElseIf W > 0 Then B = tmpHTML.IndexOf("

", W + 16) FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("
", String.Empty).Replace(vbCrLf, " ").Trim) End If @@ -153,30 +158,60 @@ Public Class OFDB If Not String.IsNullOrEmpty(Html) Then 'title If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then - Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(Html, "

([^<]+)

").Groups(1).Value.ToString)) - _title = OFDBTitle + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(HTML, "

([^<]+)

").Groups(1).Value.ToString)) + If OFDBTitle.EndsWith(", Der") Then + _title = String.Concat("Der ", OFDBTitle.Replace(", Der", " ")).Trim + ElseIf OFDBTitle.EndsWith(", Die") Then + _title = String.Concat("Die ", OFDBTitle.Replace(", Die", " ")).Trim + ElseIf OFDBTitle.EndsWith(", Das") Then + _title = String.Concat("Das ", OFDBTitle.Replace(", Das", " ")).Trim + ElseIf OFDBTitle.EndsWith(", The") Then + _title = String.Concat("The ", OFDBTitle.Replace(", The", " ")).Trim + Else + _title = OFDBTitle + End If End If - Dim D, W, B As Integer + Dim D, Dq, W, Wq, B As Integer Dim tmpHTML As String 'outline If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then - D = Html.IndexOf("Inhalt:") - - If D > 0 Then - W = Html.IndexOf("", String.Empty).Replace(vbCrLf, " ").Trim) + D = HTML.IndexOf("Inhalt:") + Dq = HTML.IndexOf("Inhalt: ", Dq) + W = HTML.IndexOf("", String.Empty).Replace(vbCrLf, " ").Trim) + ElseIf D > 0 Then + W = HTML.IndexOf("", String.Empty).Replace(vbCrLf, " ").Trim) End If End If 'full plot - D = 0 : W = 0 + D = 0 : Dq = 0 : W = 0 If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then - D = Html.IndexOf("Inhalt:") - If D > 0 Then - Dim L As Integer = Html.Length - tmpHTML = Html.Substring(D + 14, L - (D + 14)).Trim + D = HTML.IndexOf("Inhalt:") + Dq = HTML.IndexOf("Inhalt: 0 Then + B = tmpHTML.IndexOf(""">[mehr]", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + ElseIf D > 0 Then + Dim L As Integer = HTML.Length + tmpHTML = HTML.Substring(D + 44, L - (D + 44)).Trim W = tmpHTML.IndexOf(" 0 Then B = tmpHTML.IndexOf(""">[mehr]", W + 9) @@ -197,12 +232,15 @@ Public Class OFDB If D > 0 Then W = HTML.IndexOf("", D) If W > 0 Then - Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), ".*?)[""'].*?>(?.*?)") + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), ".*?)[""'].*?>(?.*?)") Dim Gen = From M In rGenres _ Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) If Gen.Count > 0 Then Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim - _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + tGenre = StringUtils.GenreFilter(tGenre) + If Not String.IsNullOrEmpty(tGenre) Then + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If End If End If End If diff --git a/Addons/scraper.EmberCore/Scraper/clsScrapeTMDB.vb b/Addons/scraper.EmberCore/Scraper/clsScrapeTMDB.vb index 3fd3402..d40e628 100644 --- a/Addons/scraper.EmberCore/Scraper/clsScrapeTMDB.vb +++ b/Addons/scraper.EmberCore/Scraper/clsScrapeTMDB.vb @@ -73,44 +73,44 @@ Namespace TMDB If bwTMDB.CancellationPending Then Return Nothing Try Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) - - If Not String.IsNullOrEmpty(ApiXML) Then - Try - xmlTMDB = XDocument.Parse(ApiXML) - Catch - Return alPosters - End Try - - If bwTMDB.WorkerReportsProgress Then - bwTMDB.ReportProgress(1) - End If - - If bwTMDB.CancellationPending Then Return Nothing - - If Not xmlTMDB.......Value = "Nothing found." Then - If sType = "poster" Then - Dim tmdbImages = From iNode In xmlTMDB................Elements Select iNode - If tmdbImages.Count > 0 Then - For Each tmdbI As XElement In tmdbImages - Dim parentID As String = tmdbI.Parent.Attribute("id").Value - If bwTMDB.CancellationPending Then Return Nothing - Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} - alPosters.Add(tmpPoster) - Next - End If - ElseIf sType = "backdrop" Then - Dim tmdbImages = From iNode In xmlTMDB................Elements Select iNode - If tmdbImages.Count > 0 Then - For Each tmdbI As XElement In tmdbImages - Dim parentID As String = tmdbI.Parent.Attribute("id").Value - If bwTMDB.CancellationPending Then Return Nothing - Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} - alPosters.Add(tmpPoster) - Next - End If - End If - End If - End If + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB.......Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB................Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB................Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Debug.Print("{0}/t{1}", tmdbI.@size, tmdbI.@url) + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If If bwTMDB.WorkerReportsProgress Then bwTMDB.ReportProgress(2) diff --git a/Addons/scraper.EmberCore/Scraper/clsScrapeTrailers.vb b/Addons/scraper.EmberCore/Scraper/clsScrapeTrailers.vb index 70d407a..19327b4 100644 --- a/Addons/scraper.EmberCore/Scraper/clsScrapeTrailers.vb +++ b/Addons/scraper.EmberCore/Scraper/clsScrapeTrailers.vb @@ -79,6 +79,8 @@ Public Class Trailers File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) End If Next End Sub diff --git a/Addons/scraper.EmberCore/Scraper/clsScrapeYouTube.vb b/Addons/scraper.EmberCore/Scraper/clsScrapeYouTube.vb index 68dbcc8..b4603fd 100644 --- a/Addons/scraper.EmberCore/Scraper/clsScrapeYouTube.vb +++ b/Addons/scraper.EmberCore/Scraper/clsScrapeYouTube.vb @@ -148,14 +148,14 @@ Namespace YouTube Dim VideoTitle As String = GetVideoTitle(Html) VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") - Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map=(.*?)\\u0026amp;", RegexOptions.IgnoreCase) + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) If fmtMatch.Success Then Dim FormatMap As String = fmtMatch.Groups(1).Value Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) - Dim FormatArray() As String = Split(decoded, ",") + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") - Dim rurl As New Regex("url=([^&,]+)", RegexOptions.IgnoreCase) - Dim rsig As New Regex("sig=([^&,]+)", RegexOptions.IgnoreCase) + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) For i As Integer = 0 To FormatArray.Length - 1 diff --git a/Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.Designer.vb b/Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.Designer.vb index fe32b41..6d0924e 100644 --- a/Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.Designer.vb +++ b/Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.Designer.vb @@ -22,407 +22,428 @@ Partial Class dlgIMDBSearchResults 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgIMDBSearchResults)) - Me.OK_Button = New System.Windows.Forms.Button() - Me.Cancel_Button = New System.Windows.Forms.Button() - Me.tvResults = New System.Windows.Forms.TreeView() - Me.pbPoster = New System.Windows.Forms.PictureBox() - Me.lblTitle = New System.Windows.Forms.Label() - Me.lblTagline = New System.Windows.Forms.Label() - Me.txtOutline = New System.Windows.Forms.TextBox() - Me.lblYear = New System.Windows.Forms.Label() - Me.lblDirector = New System.Windows.Forms.Label() - Me.lblGenre = New System.Windows.Forms.Label() - Me.txtIMDBID = New System.Windows.Forms.TextBox() - Me.pnlTop = New System.Windows.Forms.Panel() - Me.Label2 = New System.Windows.Forms.Label() - Me.Label1 = New System.Windows.Forms.Label() - Me.PictureBox1 = New System.Windows.Forms.PictureBox() - Me.chkManual = New System.Windows.Forms.CheckBox() - Me.btnVerify = New System.Windows.Forms.Button() - Me.lblIMDB = New System.Windows.Forms.Label() - Me.lblYearHeader = New System.Windows.Forms.Label() - Me.lblDirectorHeader = New System.Windows.Forms.Label() - Me.lblGenreHeader = New System.Windows.Forms.Label() - Me.lblIMDBHeader = New System.Windows.Forms.Label() - Me.lblPlotHeader = New System.Windows.Forms.Label() - Me.btnSearch = New System.Windows.Forms.Button() - Me.txtSearch = New System.Windows.Forms.TextBox() - Me.pnlLoading = New System.Windows.Forms.Panel() - Me.Label3 = New System.Windows.Forms.Label() - Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() - Me.pnlPicStatus = New System.Windows.Forms.Panel() - Me.Label4 = New System.Windows.Forms.Label() - CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlTop.SuspendLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlLoading.SuspendLayout() - Me.pnlPicStatus.SuspendLayout() - Me.SuspendLayout() - ' - 'OK_Button - ' - Me.OK_Button.Enabled = False - Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.OK_Button.Location = New System.Drawing.Point(497, 401) - Me.OK_Button.Name = "OK_Button" - Me.OK_Button.Size = New System.Drawing.Size(67, 22) - Me.OK_Button.TabIndex = 0 - Me.OK_Button.Text = "OK" - ' - 'Cancel_Button - ' - Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Cancel_Button.Location = New System.Drawing.Point(570, 401) - Me.Cancel_Button.Name = "Cancel_Button" - Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) - Me.Cancel_Button.TabIndex = 1 - Me.Cancel_Button.Text = "Cancel" - ' - 'tvResults - ' - Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.tvResults.HideSelection = False - Me.tvResults.Location = New System.Drawing.Point(4, 96) - Me.tvResults.Name = "tvResults" - Me.tvResults.Size = New System.Drawing.Size(281, 299) - Me.tvResults.TabIndex = 5 - ' - 'pbPoster - ' - Me.pbPoster.Location = New System.Drawing.Point(294, 130) - Me.pbPoster.Name = "pbPoster" - Me.pbPoster.Size = New System.Drawing.Size(110, 130) - Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbPoster.TabIndex = 2 - Me.pbPoster.TabStop = False - Me.pbPoster.Visible = False - ' - 'lblTitle - ' - Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblTitle.Location = New System.Drawing.Point(291, 70) - Me.lblTitle.Name = "lblTitle" - Me.lblTitle.Size = New System.Drawing.Size(346, 19) - Me.lblTitle.TabIndex = 9 - Me.lblTitle.Text = "Title" - Me.lblTitle.Visible = False - ' - 'lblTagline - ' - Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblTagline.Location = New System.Drawing.Point(291, 89) - Me.lblTagline.Name = "lblTagline" - Me.lblTagline.Size = New System.Drawing.Size(346, 16) - Me.lblTagline.TabIndex = 10 - Me.lblTagline.Text = "Tagline" - Me.lblTagline.Visible = False - ' - 'txtOutline - ' - Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtOutline.Location = New System.Drawing.Point(294, 295) - Me.txtOutline.Multiline = True - Me.txtOutline.Name = "txtOutline" - Me.txtOutline.Size = New System.Drawing.Size(343, 100) - Me.txtOutline.TabIndex = 22 - Me.txtOutline.TabStop = False - Me.txtOutline.Visible = False - ' - 'lblYear - ' - Me.lblYear.AutoSize = True - Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblYear.Location = New System.Drawing.Point(472, 130) - Me.lblYear.Name = "lblYear" - Me.lblYear.Size = New System.Drawing.Size(31, 13) - Me.lblYear.TabIndex = 13 - Me.lblYear.Text = "0000" - Me.lblYear.Visible = False - ' - 'lblDirector - ' - Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblDirector.Location = New System.Drawing.Point(472, 156) - Me.lblDirector.Name = "lblDirector" - Me.lblDirector.Size = New System.Drawing.Size(165, 16) - Me.lblDirector.TabIndex = 15 - Me.lblDirector.Text = "Director" - Me.lblDirector.Visible = False - ' - 'lblGenre - ' - Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblGenre.Location = New System.Drawing.Point(472, 183) - Me.lblGenre.Name = "lblGenre" - Me.lblGenre.Size = New System.Drawing.Size(165, 52) - Me.lblGenre.TabIndex = 17 - Me.lblGenre.Text = "Genre" - Me.lblGenre.Visible = False - ' - 'txtIMDBID - ' - Me.txtIMDBID.Enabled = False - Me.txtIMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtIMDBID.Location = New System.Drawing.Point(139, 399) - Me.txtIMDBID.Name = "txtIMDBID" - Me.txtIMDBID.Size = New System.Drawing.Size(100, 22) - Me.txtIMDBID.TabIndex = 7 - ' - 'pnlTop - ' - Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue - Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlTop.Controls.Add(Me.Label2) - Me.pnlTop.Controls.Add(Me.Label1) - Me.pnlTop.Controls.Add(Me.PictureBox1) - Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top - Me.pnlTop.Location = New System.Drawing.Point(0, 0) - Me.pnlTop.Name = "pnlTop" - Me.pnlTop.Size = New System.Drawing.Size(643, 64) - Me.pnlTop.TabIndex = 2 - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.BackColor = System.Drawing.Color.Transparent - Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label2.ForeColor = System.Drawing.Color.White - Me.Label2.Location = New System.Drawing.Point(61, 38) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(276, 13) - Me.Label2.TabIndex = 1 - Me.Label2.Text = "View details of each result to find the proper movie." - ' - 'Label1 - ' - Me.Label1.AutoSize = True - Me.Label1.BackColor = System.Drawing.Color.Transparent - Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label1.ForeColor = System.Drawing.Color.White - Me.Label1.Location = New System.Drawing.Point(58, 3) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(257, 32) - Me.Label1.TabIndex = 0 - Me.Label1.Text = "Movie Search Results" - ' - 'PictureBox1 - ' - Me.PictureBox1.BackColor = System.Drawing.Color.Transparent - Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) - Me.PictureBox1.Location = New System.Drawing.Point(7, 8) - Me.PictureBox1.Name = "PictureBox1" - Me.PictureBox1.Size = New System.Drawing.Size(48, 48) - Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox1.TabIndex = 0 - Me.PictureBox1.TabStop = False - ' - 'chkManual - ' - Me.chkManual.AutoSize = True - Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkManual.Location = New System.Drawing.Point(4, 403) - Me.chkManual.Name = "chkManual" - Me.chkManual.Size = New System.Drawing.Size(128, 17) - Me.chkManual.TabIndex = 6 - Me.chkManual.Text = "Manual IMDB Entry:" - Me.chkManual.UseVisualStyleBackColor = True - ' - 'btnVerify - ' - Me.btnVerify.Enabled = False - Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnVerify.Location = New System.Drawing.Point(245, 399) - Me.btnVerify.Name = "btnVerify" - Me.btnVerify.Size = New System.Drawing.Size(75, 22) - Me.btnVerify.TabIndex = 8 - Me.btnVerify.Text = "Verify" - Me.btnVerify.UseVisualStyleBackColor = True - ' - 'lblIMDB - ' - Me.lblIMDB.AutoSize = True - Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblIMDB.Location = New System.Drawing.Point(472, 247) - Me.lblIMDB.Name = "lblIMDB" - Me.lblIMDB.Size = New System.Drawing.Size(35, 13) - Me.lblIMDB.TabIndex = 19 - Me.lblIMDB.Text = "IMDB" - Me.lblIMDB.Visible = False - ' - 'lblYearHeader - ' - Me.lblYearHeader.AutoSize = True - Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblYearHeader.Location = New System.Drawing.Point(410, 130) - Me.lblYearHeader.Name = "lblYearHeader" - Me.lblYearHeader.Size = New System.Drawing.Size(33, 13) - Me.lblYearHeader.TabIndex = 12 - Me.lblYearHeader.Text = "Year:" - Me.lblYearHeader.Visible = False - ' - 'lblDirectorHeader - ' - Me.lblDirectorHeader.AutoSize = True - Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblDirectorHeader.Location = New System.Drawing.Point(410, 156) - Me.lblDirectorHeader.Name = "lblDirectorHeader" - Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) - Me.lblDirectorHeader.TabIndex = 14 - Me.lblDirectorHeader.Text = "Director:" - Me.lblDirectorHeader.Visible = False - ' - 'lblGenreHeader - ' - Me.lblGenreHeader.AutoSize = True - Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblGenreHeader.Location = New System.Drawing.Point(410, 183) - Me.lblGenreHeader.Name = "lblGenreHeader" - Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) - Me.lblGenreHeader.TabIndex = 16 - Me.lblGenreHeader.Text = "Genre(s):" - Me.lblGenreHeader.Visible = False - ' - 'lblIMDBHeader - ' - Me.lblIMDBHeader.AutoSize = True - Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblIMDBHeader.Location = New System.Drawing.Point(410, 247) - Me.lblIMDBHeader.Name = "lblIMDBHeader" - Me.lblIMDBHeader.Size = New System.Drawing.Size(53, 13) - Me.lblIMDBHeader.TabIndex = 18 - Me.lblIMDBHeader.Text = "IMDB ID:" - Me.lblIMDBHeader.Visible = False - ' - 'lblPlotHeader - ' - Me.lblPlotHeader.AutoSize = True - Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblPlotHeader.Location = New System.Drawing.Point(291, 279) - Me.lblPlotHeader.Name = "lblPlotHeader" - Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) - Me.lblPlotHeader.TabIndex = 21 - Me.lblPlotHeader.Text = "Plot Summary:" - Me.lblPlotHeader.Visible = False - ' - 'btnSearch - ' - Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) - Me.btnSearch.Location = New System.Drawing.Point(262, 70) - Me.btnSearch.Name = "btnSearch" - Me.btnSearch.Size = New System.Drawing.Size(23, 23) - Me.btnSearch.TabIndex = 4 - Me.btnSearch.UseVisualStyleBackColor = True - ' - 'txtSearch - ' - Me.txtSearch.Location = New System.Drawing.Point(4, 71) - Me.txtSearch.Name = "txtSearch" - Me.txtSearch.Size = New System.Drawing.Size(252, 22) - Me.txtSearch.TabIndex = 3 - ' - 'pnlLoading - ' - Me.pnlLoading.BackColor = System.Drawing.Color.White - Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlLoading.Controls.Add(Me.Label3) - Me.pnlLoading.Controls.Add(Me.ProgressBar1) - Me.pnlLoading.Location = New System.Drawing.Point(364, 183) - Me.pnlLoading.Name = "pnlLoading" - Me.pnlLoading.Size = New System.Drawing.Size(200, 54) - Me.pnlLoading.TabIndex = 20 - ' - 'Label3 - ' - Me.Label3.AutoSize = True - Me.Label3.Location = New System.Drawing.Point(3, 10) - Me.Label3.Name = "Label3" - Me.Label3.Size = New System.Drawing.Size(98, 13) - Me.Label3.TabIndex = 0 - Me.Label3.Text = "Searching IMDB..." - Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'ProgressBar1 - ' - Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) - Me.ProgressBar1.MarqueeAnimationSpeed = 25 - Me.ProgressBar1.Name = "ProgressBar1" - Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) - Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee - Me.ProgressBar1.TabIndex = 1 - ' - 'pnlPicStatus - ' - Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue - Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlPicStatus.Controls.Add(Me.Label4) - Me.pnlPicStatus.Location = New System.Drawing.Point(308, 155) - Me.pnlPicStatus.Name = "pnlPicStatus" - Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) - Me.pnlPicStatus.TabIndex = 11 - ' - 'Label4 - ' - Me.Label4.Location = New System.Drawing.Point(5, 5) - Me.Label4.Name = "Label4" - Me.Label4.Size = New System.Drawing.Size(70, 33) - Me.Label4.TabIndex = 0 - Me.Label4.Text = "Fetching Poster..." - Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'dlgIMDBSearchResults - ' - Me.AcceptButton = Me.OK_Button - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(643, 454) - Me.ControlBox = False - Me.Controls.Add(Me.pnlLoading) - Me.Controls.Add(Me.pnlPicStatus) - Me.Controls.Add(Me.Cancel_Button) - Me.Controls.Add(Me.OK_Button) - Me.Controls.Add(Me.btnSearch) - Me.Controls.Add(Me.txtSearch) - Me.Controls.Add(Me.lblPlotHeader) - Me.Controls.Add(Me.lblIMDBHeader) - Me.Controls.Add(Me.lblGenreHeader) - Me.Controls.Add(Me.lblDirectorHeader) - Me.Controls.Add(Me.lblYearHeader) - Me.Controls.Add(Me.lblIMDB) - Me.Controls.Add(Me.btnVerify) - Me.Controls.Add(Me.chkManual) - Me.Controls.Add(Me.pnlTop) - Me.Controls.Add(Me.txtIMDBID) - Me.Controls.Add(Me.lblGenre) - Me.Controls.Add(Me.lblDirector) - Me.Controls.Add(Me.lblYear) - Me.Controls.Add(Me.txtOutline) - Me.Controls.Add(Me.lblTagline) - Me.Controls.Add(Me.lblTitle) - Me.Controls.Add(Me.pbPoster) - Me.Controls.Add(Me.tvResults) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.MinimumSize = New System.Drawing.Size(649, 460) - Me.Name = "dlgIMDBSearchResults" - Me.ShowIcon = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Search Results" - CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlTop.ResumeLayout(False) - Me.pnlTop.PerformLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlLoading.ResumeLayout(False) - Me.pnlLoading.PerformLayout() - Me.pnlPicStatus.ResumeLayout(False) - Me.ResumeLayout(False) - Me.PerformLayout() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgIMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtIMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + Me.txtFileName = New System.Windows.Forms.TextBox() + Me.btnOpenFolder = New System.Windows.Forms.Button() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(501, 431) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(574, 431) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(8, 126) + Me.tvResults.Name = "tvResults" + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 5 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(298, 160) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(295, 100) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(295, 119) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(298, 325) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(476, 160) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(476, 186) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(476, 213) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtIMDBID + ' + Me.txtIMDBID.Enabled = False + Me.txtIMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtIMDBID.Location = New System.Drawing.Point(143, 429) + Me.txtIMDBID.Name = "txtIMDBID" + Me.txtIMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtIMDBID.TabIndex = 7 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(647, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(256, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(8, 433) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(128, 17) + Me.chkManual.TabIndex = 6 + Me.chkManual.Text = "Manual IMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(249, 429) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 8 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(476, 277) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(35, 13) + Me.lblIMDB.TabIndex = 19 + Me.lblIMDB.Text = "IMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(414, 160) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(32, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(414, 186) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(414, 213) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(414, 277) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(53, 13) + Me.lblIMDBHeader.TabIndex = 18 + Me.lblIMDBHeader.Text = "IMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(295, 309) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(266, 100) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 4 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(8, 101) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 3 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(368, 213) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 20 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(98, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching IMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(312, 185) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'txtFileName + ' + Me.txtFileName.Enabled = False + Me.txtFileName.Location = New System.Drawing.Point(8, 73) + Me.txtFileName.Name = "txtFileName" + Me.txtFileName.Size = New System.Drawing.Size(598, 22) + Me.txtFileName.TabIndex = 3 + ' + 'btnOpenFolder + ' + Me.btnOpenFolder.Location = New System.Drawing.Point(612, 73) + Me.btnOpenFolder.Name = "btnOpenFolder" + Me.btnOpenFolder.Size = New System.Drawing.Size(29, 23) + Me.btnOpenFolder.TabIndex = 23 + Me.btnOpenFolder.Text = "..." + Me.btnOpenFolder.UseVisualStyleBackColor = True + ' + 'dlgIMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(647, 492) + Me.ControlBox = False + Me.Controls.Add(Me.btnOpenFolder) + Me.Controls.Add(Me.txtFileName) + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtIMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgIMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() - End Sub + End Sub Friend WithEvents OK_Button As System.Windows.Forms.Button Friend WithEvents Cancel_Button As System.Windows.Forms.Button Friend WithEvents tvResults As System.Windows.Forms.TreeView @@ -453,5 +474,7 @@ Partial Class dlgIMDBSearchResults Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel Friend WithEvents Label4 As System.Windows.Forms.Label + Friend WithEvents txtFileName As System.Windows.Forms.TextBox + Friend WithEvents btnOpenFolder As System.Windows.Forms.Button End Class diff --git a/Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.resx b/Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.resx index 09fbdab..fc0d614 100644 --- a/Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.resx +++ b/Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.resx @@ -120,72 +120,71 @@ - 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 - gg== + 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 \ No newline at end of file diff --git a/Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.vb b/Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.vb index f6ab164..6eddfac 100644 --- a/Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.vb +++ b/Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.vb @@ -19,6 +19,7 @@ ' ################################################################################ Imports System.Text.RegularExpressions +Imports System.IO Imports EmberAPI Public Class dlgIMDBSearchResults @@ -48,16 +49,17 @@ Public Class dlgIMDBSearchResults #Region "Methods" - Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions, ByVal sFilename As String) As Windows.Forms.DialogResult Me.tmrWait.Enabled = False Me.tmrWait.Interval = 250 Me.tmrLoad.Enabled = False Me.tmrLoad.Interval = 100 - _filterOptions = filterOptions + _filterOptions = filterOptions - Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results - "), sMovieTitle) - Me.txtSearch.Text = sMovieTitle + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + Me.txtFileName.Text = sFilename chkManual.Enabled = False IMDB.IMDBURL = IMDBURL IMDB.SearchMovieAsync(sMovieTitle, _filterOptions) @@ -65,14 +67,15 @@ Public Class dlgIMDBSearchResults Return MyBase.ShowDialog() End Function - Public Overloads Function ShowDialog(ByVal Res As IMDB.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Public Overloads Function ShowDialog(ByVal Res As IMDB.MovieSearchResults, ByVal sMovieTitle As String, ByVal sFilename As String) As Windows.Forms.DialogResult Me.tmrWait.Enabled = False Me.tmrWait.Interval = 250 Me.tmrLoad.Enabled = False Me.tmrLoad.Interval = 100 - Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results - "), sMovieTitle) - Me.txtSearch.Text = sMovieTitle + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + Me.txtFileName.Text = sFilename SearchResultsDownloaded(Res) Return MyBase.ShowDialog() @@ -142,6 +145,14 @@ Public Class dlgIMDBSearchResults Me.Close() End Sub + Private Sub btnOpenFolder_Click(sender As Object, e As EventArgs) Handles btnOpenFolder.Click + Dim fPath As String = Directory.GetParent(Me.txtFileName.Text).FullName + + If Not String.IsNullOrEmpty(fPath) Then + Shell("Explorer.exe " & fPath, vbNormalFocus) + End If + End Sub + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged Me.ClearInfo() Me.OK_Button.Enabled = False @@ -353,11 +364,11 @@ Public Class dlgIMDBSearchResults 'determine if we automatically start downloading info for selected node If M.ExactMatches.Count > 0 Then - 'If M.ExactMatches.Count = 1 Then Me.tvResults.SelectedNode = selNode - 'Else - 'Me.tvResults.SelectedNode = Nothing - 'End If + ElseIf M.PopularTitles.Count > 0 Then + Me.tvResults.SelectedNode = selNode + ElseIf M.PartialMatches.Count > 0 Then + Me.tvResults.SelectedNode = selNode Else Me.tvResults.SelectedNode = Nothing End If @@ -506,4 +517,5 @@ Public Class dlgIMDBSearchResults End Structure #End Region 'Nested Types + End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore/Scraper/dlgImgSelect.vb b/Addons/scraper.EmberCore/Scraper/dlgImgSelect.vb index 8b467fd..7e37076 100644 --- a/Addons/scraper.EmberCore/Scraper/dlgImgSelect.vb +++ b/Addons/scraper.EmberCore/Scraper/dlgImgSelect.vb @@ -57,7 +57,7 @@ Public Class dlgImgSelect Private TMDB As New TMDB.Scraper Private TMDBPosters As New List(Of MediaContainers.Image) Private tMovie As New Structures.DBMovie - Private tmpImage As New Images + Private tmpImage As New MediaContainers.Image Private _impaDone As Boolean = True Private _mpdbDone As Boolean = True Private _tmdbDone As Boolean = True @@ -589,7 +589,7 @@ Public Class dlgImgSelect Me.rbSmall.Checked = False Me.OK_Button.Enabled = True Me.OK_Button.Focus() - Me.tmpImage.Image = Me.pbImage(iIndex).Image + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) End If Catch ex As Exception @@ -897,75 +897,77 @@ Public Class dlgImgSelect tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") End If - If Not IsNothing(Me.tmpImage.Image) Then - If isEdit Then - Me.tmpImage.Save(tmpPathPlus, 100, selURL) - Results.ImagePath = tmpPathPlus - Else - If Me.DLType = Enums.ImageType.Fanart Then - Results.ImagePath = Me.tmpImage.SaveAsFanart(tMovie) - Else - Results.ImagePath = Me.tmpImage.SaveAsPoster(tMovie) - End If - End If - Else - Me.pnlBG.Visible = False - Me.pnlSinglePic.Visible = True - Me.Refresh() - Application.DoEvents() - Select Case True - Case Me.rbXLarge.Checked - If Master.eSettings.UseImgCache Then - tmpImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) - Else - If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then - Me.tmpImage.Image = Me.pbImage(selIndex).Image - Else - Me.tmpImage.FromWeb(Me.rbXLarge.Tag.ToString) - End If - End If - Case Me.rbLarge.Checked - If Master.eSettings.UseImgCache Then - Me.tmpImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) - Else - If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then - Me.tmpImage.Image = Me.pbImage(selIndex).Image - Else - Me.tmpImage.FromWeb(Me.rbLarge.Tag.ToString) - End If - End If - Case Me.rbMedium.Checked - If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then - Me.tmpImage.Image = Me.pbImage(selIndex).Image - Else - Me.tmpImage.FromWeb(Me.rbMedium.Tag.ToString) - End If - Case Me.rbSmall.Checked - If Master.eSettings.UseImgCache Then - Me.tmpImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) - Else - If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then - Me.tmpImage.Image = Me.pbImage(selIndex).Image - Else - Me.tmpImage.FromWeb(Me.rbSmall.Tag.ToString) - End If - End If - End Select - - If Not IsNothing(Me.tmpImage.Image) Then - If isEdit Then - Me.tmpImage.Save(tmpPathPlus, 100, selURL) - Results.ImagePath = tmpPathPlus - Else - If Me.DLType = Enums.ImageType.Fanart Then - Results.ImagePath = Me.tmpImage.SaveAsFanart(Me.tMovie) - Else - Results.ImagePath = Me.tmpImage.SaveAsPoster(Me.tMovie) - End If - End If - End If - Me.pnlSinglePic.Visible = False - End If + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + 'Me.tmpImage.Save(tmpPathPlus, 100, selURL) + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + 'Me.tmpImage.Save(tmpPathPlus, 100, selURL) + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If If Me.DLType = Enums.ImageType.Fanart Then Dim iMod As Integer = 0 @@ -1121,9 +1123,9 @@ Public Class dlgImgSelect Functions.PNLDoubleBuffer(Me.pnlBG) If Me.DLType = Enums.ImageType.Posters Then - Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster - "), If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) Else - Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart - "), If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) Me.pnlDLStatus.Height = 75 Me.pnlDLStatus.Top = 207 diff --git a/Addons/scraper.EmberCore/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.EmberCore/Scraper/dlgTrailer.Designer.vb index 1865dbc..2871b29 100644 --- a/Addons/scraper.EmberCore/Scraper/dlgTrailer.Designer.vb +++ b/Addons/scraper.EmberCore/Scraper/dlgTrailer.Designer.vb @@ -22,241 +22,253 @@ Partial Class dlgTrailer 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) - Me.OK_Button = New System.Windows.Forms.Button() - Me.Cancel_Button = New System.Windows.Forms.Button() - Me.lbTrailers = New System.Windows.Forms.ListBox() - Me.GroupBox1 = New System.Windows.Forms.GroupBox() - Me.pnlStatus = New System.Windows.Forms.Panel() - Me.lblStatus = New System.Windows.Forms.Label() - Me.pbStatus = New System.Windows.Forms.ProgressBar() - Me.btnGetTrailers = New System.Windows.Forms.Button() - Me.GroupBox2 = New System.Windows.Forms.GroupBox() - Me.btnBrowse = New System.Windows.Forms.Button() - Me.txtManual = New System.Windows.Forms.TextBox() - Me.Label2 = New System.Windows.Forms.Label() - Me.txtYouTube = New System.Windows.Forms.TextBox() - Me.Label1 = New System.Windows.Forms.Label() - Me.btnPlayTrailer = New System.Windows.Forms.Button() - Me.btnSetNfo = New System.Windows.Forms.Button() - Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() - Me.Panel1 = New System.Windows.Forms.Panel() - Me.GroupBox1.SuspendLayout() - Me.pnlStatus.SuspendLayout() - Me.GroupBox2.SuspendLayout() - Me.Panel1.SuspendLayout() - Me.SuspendLayout() - ' - 'OK_Button - ' - Me.OK_Button.Enabled = False - Me.OK_Button.Location = New System.Drawing.Point(290, 339) - Me.OK_Button.Name = "OK_Button" - Me.OK_Button.Size = New System.Drawing.Size(74, 23) - Me.OK_Button.TabIndex = 0 - Me.OK_Button.Text = "Download" - ' - 'Cancel_Button - ' - Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Cancel_Button.Location = New System.Drawing.Point(369, 339) - Me.Cancel_Button.Name = "Cancel_Button" - Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) - Me.Cancel_Button.TabIndex = 1 - Me.Cancel_Button.Text = "Cancel" - ' - 'lbTrailers - ' - Me.lbTrailers.Enabled = False - Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lbTrailers.FormattingEnabled = True - Me.lbTrailers.HorizontalScrollbar = True - Me.lbTrailers.Location = New System.Drawing.Point(6, 19) - Me.lbTrailers.Name = "lbTrailers" - Me.lbTrailers.Size = New System.Drawing.Size(411, 173) - Me.lbTrailers.TabIndex = 0 - ' - 'GroupBox1 - ' - Me.GroupBox1.Controls.Add(Me.pnlStatus) - Me.GroupBox1.Controls.Add(Me.btnGetTrailers) - Me.GroupBox1.Controls.Add(Me.GroupBox2) - Me.GroupBox1.Controls.Add(Me.lbTrailers) - Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.GroupBox1.Location = New System.Drawing.Point(9, 9) - Me.GroupBox1.Name = "GroupBox1" - Me.GroupBox1.Size = New System.Drawing.Size(424, 319) - Me.GroupBox1.TabIndex = 0 - Me.GroupBox1.TabStop = False - Me.GroupBox1.Text = "Select Trailer to Scrape" - ' - 'pnlStatus - ' - Me.pnlStatus.BackColor = System.Drawing.Color.White - Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlStatus.Controls.Add(Me.lblStatus) - Me.pnlStatus.Controls.Add(Me.pbStatus) - Me.pnlStatus.Location = New System.Drawing.Point(112, 82) - Me.pnlStatus.Name = "pnlStatus" - Me.pnlStatus.Size = New System.Drawing.Size(200, 54) - Me.pnlStatus.TabIndex = 1 - Me.pnlStatus.Visible = False - ' - 'lblStatus - ' - Me.lblStatus.AutoSize = True - Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblStatus.Location = New System.Drawing.Point(3, 10) - Me.lblStatus.Name = "lblStatus" - Me.lblStatus.Size = New System.Drawing.Size(121, 13) - Me.lblStatus.TabIndex = 0 - Me.lblStatus.Text = "Compiling trailer list..." - Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'pbStatus - ' - Me.pbStatus.Location = New System.Drawing.Point(3, 32) - Me.pbStatus.MarqueeAnimationSpeed = 25 - Me.pbStatus.Name = "pbStatus" - Me.pbStatus.Size = New System.Drawing.Size(192, 17) - Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee - Me.pbStatus.TabIndex = 1 - ' - 'btnGetTrailers - ' - Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) - Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnGetTrailers.Location = New System.Drawing.Point(120, 82) - Me.btnGetTrailers.Name = "btnGetTrailers" - Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) - Me.btnGetTrailers.TabIndex = 2 - Me.btnGetTrailers.Text = "Download Trailer List" - Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnGetTrailers.UseVisualStyleBackColor = True - ' - 'GroupBox2 - ' - Me.GroupBox2.Controls.Add(Me.btnBrowse) - Me.GroupBox2.Controls.Add(Me.txtManual) - Me.GroupBox2.Controls.Add(Me.Label2) - Me.GroupBox2.Controls.Add(Me.txtYouTube) - Me.GroupBox2.Controls.Add(Me.Label1) - Me.GroupBox2.Location = New System.Drawing.Point(6, 201) - Me.GroupBox2.Name = "GroupBox2" - Me.GroupBox2.Size = New System.Drawing.Size(411, 111) - Me.GroupBox2.TabIndex = 3 - Me.GroupBox2.TabStop = False - Me.GroupBox2.Text = "Manual Trailer Entry" - ' - 'btnBrowse - ' - Me.btnBrowse.Location = New System.Drawing.Point(376, 82) - Me.btnBrowse.Name = "btnBrowse" - Me.btnBrowse.Size = New System.Drawing.Size(25, 23) - Me.btnBrowse.TabIndex = 4 - Me.btnBrowse.Text = "..." - Me.btnBrowse.UseVisualStyleBackColor = True - ' - 'txtManual - ' - Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtManual.Location = New System.Drawing.Point(9, 82) - Me.txtManual.Name = "txtManual" - Me.txtManual.Size = New System.Drawing.Size(365, 22) - Me.txtManual.TabIndex = 3 - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label2.Location = New System.Drawing.Point(6, 68) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(72, 13) - Me.Label2.TabIndex = 2 - Me.Label2.Text = "Local Trailer:" - ' - 'txtYouTube - ' - Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtYouTube.Location = New System.Drawing.Point(9, 28) - Me.txtYouTube.Name = "txtYouTube" - Me.txtYouTube.Size = New System.Drawing.Size(392, 22) - Me.txtYouTube.TabIndex = 1 - ' - 'Label1 - ' - Me.Label1.AutoSize = True - Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label1.Location = New System.Drawing.Point(6, 14) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(153, 13) - Me.Label1.TabIndex = 0 - Me.Label1.Text = "Direct Link or YouTube URL:" - ' - 'btnPlayTrailer - ' - Me.btnPlayTrailer.Enabled = False - Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) - Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 339) - Me.btnPlayTrailer.Name = "btnPlayTrailer" - Me.btnPlayTrailer.Size = New System.Drawing.Size(106, 23) - Me.btnPlayTrailer.TabIndex = 3 - Me.btnPlayTrailer.Text = "Preview Trailer" - Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnPlayTrailer.UseVisualStyleBackColor = True - ' - 'btnSetNfo - ' - Me.btnSetNfo.Enabled = False - Me.btnSetNfo.Location = New System.Drawing.Point(207, 339) - Me.btnSetNfo.Name = "btnSetNfo" - Me.btnSetNfo.Size = New System.Drawing.Size(77, 23) - Me.btnSetNfo.TabIndex = 4 - Me.btnSetNfo.Text = "Set To Nfo" - ' - 'Panel1 - ' - Me.Panel1.BackColor = System.Drawing.Color.White - Me.Panel1.Controls.Add(Me.GroupBox1) - Me.Panel1.Location = New System.Drawing.Point(3, 3) - Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(444, 331) - Me.Panel1.TabIndex = 2 - ' - 'dlgTrailer - ' - Me.AcceptButton = Me.OK_Button - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(450, 366) - Me.ControlBox = False - Me.Controls.Add(Me.Panel1) - Me.Controls.Add(Me.btnSetNfo) - Me.Controls.Add(Me.Cancel_Button) - Me.Controls.Add(Me.OK_Button) - Me.Controls.Add(Me.btnPlayTrailer) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "dlgTrailer" - Me.ShowIcon = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Select Trailer" - Me.GroupBox1.ResumeLayout(False) - Me.pnlStatus.ResumeLayout(False) - Me.pnlStatus.PerformLayout() - Me.GroupBox2.ResumeLayout(False) - Me.GroupBox2.PerformLayout() - Me.Panel1.ResumeLayout(False) - Me.ResumeLayout(False) + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.btnPlayBrowser = New System.Windows.Forms.Button() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(350, 340) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(120, 23) + Me.OK_Button.TabIndex = 6 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(350, 369) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(120, 23) + Me.Cancel_Button.TabIndex = 7 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(445, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(458, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(122, 60) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(130, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(445, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(410, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(395, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(71, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(426, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(151, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 369) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(120, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(224, 340) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(120, 23) + Me.btnSetNfo.TabIndex = 5 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(478, 331) + Me.Panel1.TabIndex = 2 + ' + 'btnPlayBrowser + ' + Me.btnPlayBrowser.Enabled = False + Me.btnPlayBrowser.Location = New System.Drawing.Point(12, 340) + Me.btnPlayBrowser.Name = "btnPlayBrowser" + Me.btnPlayBrowser.Size = New System.Drawing.Size(120, 23) + Me.btnPlayBrowser.TabIndex = 4 + Me.btnPlayBrowser.Text = "Open In Browser" + Me.btnPlayBrowser.UseVisualStyleBackColor = True + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(484, 398) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Controls.Add(Me.btnPlayBrowser) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) - End Sub + End Sub Friend WithEvents OK_Button As System.Windows.Forms.Button Friend WithEvents Cancel_Button As System.Windows.Forms.Button Friend WithEvents lbTrailers As System.Windows.Forms.ListBox @@ -275,5 +287,6 @@ Partial Class dlgTrailer Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog Friend WithEvents btnGetTrailers As System.Windows.Forms.Button Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents btnPlayBrowser As System.Windows.Forms.Button End Class diff --git a/Addons/scraper.EmberCore/Scraper/dlgTrailer.resx b/Addons/scraper.EmberCore/Scraper/dlgTrailer.resx index 2be3cac..f08e020 100644 --- a/Addons/scraper.EmberCore/Scraper/dlgTrailer.resx +++ b/Addons/scraper.EmberCore/Scraper/dlgTrailer.resx @@ -120,33 +120,33 @@ - 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 diff --git a/Addons/scraper.EmberCore/Scraper/dlgTrailer.vb b/Addons/scraper.EmberCore/Scraper/dlgTrailer.vb index 7e3454f..67c25ca 100644 --- a/Addons/scraper.EmberCore/Scraper/dlgTrailer.vb +++ b/Addons/scraper.EmberCore/Scraper/dlgTrailer.vb @@ -68,6 +68,7 @@ Public Class dlgTrailer Me.OK_Button.Enabled = False Me.btnSetNfo.Enabled = False Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False Me.lbTrailers.Enabled = False Me.txtYouTube.Enabled = False Me.txtManual.Enabled = False @@ -95,7 +96,15 @@ Public Class dlgTrailer Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then If CloseDialog Then - Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) Me.DialogResult = System.Windows.Forms.DialogResult.OK @@ -178,6 +187,7 @@ Public Class dlgTrailer Me.OK_Button.Enabled = False Me.btnSetNfo.Enabled = False Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False Me.lbTrailers.Enabled = False Me.txtYouTube.Enabled = False Me.txtManual.Enabled = False @@ -203,6 +213,30 @@ Public Class dlgTrailer End Try End Sub + Private Sub btnPlayBrowser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayBrowser.Click + If Not String.IsNullOrEmpty(Me.txtYouTube.Text) Then + If Master.isWindows Then + Process.Start(Me.txtYouTube.Text) + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = Me.txtYouTube.Text + Explorer.Start() + End Using + End If + Else + If Master.isWindows Then + Process.Start(Me.lbTrailers.SelectedItem.ToString) + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = Me.lbTrailers.SelectedItem.ToString + Explorer.Start() + End Using + End If + End If + End Sub + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then @@ -210,6 +244,7 @@ Public Class dlgTrailer Me.OK_Button.Enabled = False Me.btnSetNfo.Enabled = False Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False Me.lbTrailers.Enabled = False Me.txtYouTube.Enabled = False Me.txtManual.Enabled = False @@ -220,7 +255,14 @@ Public Class dlgTrailer Me.pnlStatus.Visible = True Application.DoEvents() - Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If File.Move(Me.txtManual.Text, Me.tURL) Me.DialogResult = System.Windows.Forms.DialogResult.OK @@ -374,6 +416,11 @@ Public Class dlgTrailer Me.OK_Button.Enabled = True Me.btnSetNfo.Enabled = True Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.btnPlayBrowser.Enabled = False + Else + Me.btnPlayBrowser.Enabled = True + End If If Me.txtManual.Text.Length > 0 Then Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") @@ -385,6 +432,7 @@ Public Class dlgTrailer Me.OK_Button.Enabled = False Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False Me.btnSetNfo.Enabled = False Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") End If @@ -399,6 +447,7 @@ Public Class dlgTrailer Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnPlayBrowser.Text = Master.eLang.GetString(114, "Open In Browser") Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") End Sub diff --git a/Addons/scraper.EmberCore/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.EmberCore/Scraper/dlgTrailerFormat.Designer.vb index aa7ae6a..8d135fa 100644 --- a/Addons/scraper.EmberCore/Scraper/dlgTrailerFormat.Designer.vb +++ b/Addons/scraper.EmberCore/Scraper/dlgTrailerFormat.Designer.vb @@ -22,127 +22,127 @@ Partial Class dlgTrailerFormat 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Me.OK_Button = New System.Windows.Forms.Button() - Me.Cancel_Button = New System.Windows.Forms.Button() - Me.lstFormats = New System.Windows.Forms.ListBox() - Me.GroupBox1 = New System.Windows.Forms.GroupBox() - Me.pnlStatus = New System.Windows.Forms.Panel() - Me.lblStatus = New System.Windows.Forms.Label() - Me.pbStatus = New System.Windows.Forms.ProgressBar() - Me.Panel1 = New System.Windows.Forms.Panel() - Me.GroupBox1.SuspendLayout() - Me.pnlStatus.SuspendLayout() - Me.Panel1.SuspendLayout() - Me.SuspendLayout() - ' - 'OK_Button - ' - Me.OK_Button.Enabled = False - Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.OK_Button.Location = New System.Drawing.Point(84, 117) - Me.OK_Button.Name = "OK_Button" - Me.OK_Button.Size = New System.Drawing.Size(67, 23) - Me.OK_Button.TabIndex = 0 - Me.OK_Button.Text = "OK" - ' - 'Cancel_Button - ' - Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Cancel_Button.Location = New System.Drawing.Point(154, 117) - Me.Cancel_Button.Name = "Cancel_Button" - Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) - Me.Cancel_Button.TabIndex = 1 - Me.Cancel_Button.Text = "Cancel" - ' - 'lstFormats - ' - Me.lstFormats.Enabled = False - Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lstFormats.FormattingEnabled = True - Me.lstFormats.Location = New System.Drawing.Point(6, 19) - Me.lstFormats.Name = "lstFormats" - Me.lstFormats.Size = New System.Drawing.Size(177, 69) - Me.lstFormats.TabIndex = 0 - ' - 'GroupBox1 - ' - Me.GroupBox1.Controls.Add(Me.lstFormats) - Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox1.Location = New System.Drawing.Point(17, 2) - Me.GroupBox1.Name = "GroupBox1" - Me.GroupBox1.Size = New System.Drawing.Size(189, 100) - Me.GroupBox1.TabIndex = 0 - Me.GroupBox1.TabStop = False - Me.GroupBox1.Text = "Available Formats" - ' - 'pnlStatus - ' - Me.pnlStatus.BackColor = System.Drawing.Color.White - Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlStatus.Controls.Add(Me.lblStatus) - Me.pnlStatus.Controls.Add(Me.pbStatus) - Me.pnlStatus.Location = New System.Drawing.Point(10, 29) - Me.pnlStatus.Name = "pnlStatus" - Me.pnlStatus.Size = New System.Drawing.Size(200, 54) - Me.pnlStatus.TabIndex = 1 - ' - 'lblStatus - ' - Me.lblStatus.AutoSize = True - Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblStatus.Location = New System.Drawing.Point(3, 10) - Me.lblStatus.Name = "lblStatus" - Me.lblStatus.Size = New System.Drawing.Size(147, 13) - Me.lblStatus.TabIndex = 0 - Me.lblStatus.Text = "Getting available formats..." - Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'pbStatus - ' - Me.pbStatus.Location = New System.Drawing.Point(3, 29) - Me.pbStatus.MarqueeAnimationSpeed = 25 - Me.pbStatus.Name = "pbStatus" - Me.pbStatus.Size = New System.Drawing.Size(192, 17) - Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee - Me.pbStatus.TabIndex = 1 - ' - 'Panel1 - ' - Me.Panel1.BackColor = System.Drawing.Color.White - Me.Panel1.Controls.Add(Me.pnlStatus) - Me.Panel1.Controls.Add(Me.GroupBox1) - Me.Panel1.Location = New System.Drawing.Point(2, 4) - Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(220, 111) - Me.Panel1.TabIndex = 2 - ' - 'dlgTrailerFormat - ' - Me.AcceptButton = Me.OK_Button - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(224, 143) - Me.Controls.Add(Me.Panel1) - Me.Controls.Add(Me.Cancel_Button) - Me.Controls.Add(Me.OK_Button) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "dlgTrailerFormat" - Me.ShowIcon = False - Me.ShowInTaskbar = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Select Format" - Me.GroupBox1.ResumeLayout(False) - Me.pnlStatus.ResumeLayout(False) - Me.pnlStatus.PerformLayout() - Me.Panel1.ResumeLayout(False) - Me.ResumeLayout(False) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(72, 187) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(145, 187) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(4, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(170, 121) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(10, 8) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(180, 151) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(12, 75) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(12, 12) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(200, 169) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 217) + Me.Controls.Add(Me.pnlStatus) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) - End Sub + End Sub Friend WithEvents OK_Button As System.Windows.Forms.Button Friend WithEvents Cancel_Button As System.Windows.Forms.Button Friend WithEvents lstFormats As System.Windows.Forms.ListBox diff --git a/Addons/scraper.EmberCore/Scraper/scraper.EmberCore.German_(de_DE)-Help.xml b/Addons/scraper.EmberCore/Scraper/scraper.EmberCore.German_(de_DE)-Help.xml deleted file mode 100644 index b613dee..0000000 --- a/Addons/scraper.EmberCore/Scraper/scraper.EmberCore.German_(de_DE)-Help.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - Aktiviert dieses Modul. - Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.) - Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.) - Gib den Mirror ein über den Ember mit der IMDB kommunizieren soll. - Wenn aktiviert versucht Ember den Titel von der deutschen Seite OFDB.DE zu scrapen. - Wenn aktiviert versucht Ember die Kurzebschreibung von der deutschen Seite OFDB.DE zu scrapen. - Wenn aktiviert versucht Ember die Inhaltsangabe von der deutschen Seite OFDB.DE zu scrapen. - Wenn aktiviert versucht Ember die Genres von der deutschen Seite OFDB.DE zu scrapen. - Aktiviert das scrapen der Altersbeschränkung (=Certification) mit diesem Modul. - Aktiviert das scrapen der IMDB Top250 mit diesem Modul. - Die Anzahl der gescrapten Genres limitieren. - Die Anzahl der gescrapten Schauspieler limitieren. - Aktiviert das scrapen der Sonstigen Crew mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!) - Aktiviert das scrapen der Musiker mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!) - Aktiviert das scrapen der Produzenten mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!) - Aktiviert das scrapen der Autoren mit diesem Modul. - Aktiviert das scrapen des Studios mit diesem Modul. - Aktiviert das scrapen der Spielzeit mit diesem Modul. - Aktiviert das scrapen des Inhalts (=Plot)) mit diesem Modul. - Aktiviert das scrapen der Kurzbeschreibung mit diesem Modul. - Aktiviert das scrapen von Genre mit diesem Modul. - Aktiviert das scrapen des Regisseurs mit diesem Modul. - Aktiviert das scrapen der Tagline mit diesem Modul. - Aktiviert das scrapen der Schauspieler mit diesem Modul. - Aktiviert das scrapen der Anzahl Bewertungen (=Stimmen) mit diesem Modul. - Aktiviert das scrapen von Trailern mit diesem Modul. - Aktiviert das scrapen der Bewertung mit diesem Modul. - Aktiviert das scrapen des Premiere Datums mit diesem Modul. - Aktiviert das scrapen der MPAA Bewertung mit diesem Modul. - Aktiviert das scrapen des Jahres mit diesem Modul. - Aktiviert das scrapen des Titels mit diesem Modul. - Aktiviert dieses Modul. - Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.) - Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.) - Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration!) - Aktiviert das Laden von Fanart mit diesem Modul. (Schau auch in die Globale Konfiguration!) - Aktiviert das Laden von Bildern von TheMovieDB.org. - Aktiviert das Laden von Bildern von IMPA - Aktiviert das Laden von Bildern von MoviePosterDB.com. - Automatische Frame extraktion mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!) - Trailer laden mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!) - Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Zeite in dieser Zeit nicht geantwortet hat wird sie übersprungen) - Wähle die Seite von der Trailer URLS/Dateien geladen werden sollen. - - diff --git "a/Addons/scraper.EmberCore/Scraper/scraper.EmberCore.Portugu\303\252s_(pt-BR).xml" "b/Addons/scraper.EmberCore/Scraper/scraper.EmberCore.Portugu\303\252s_(pt-BR).xml" deleted file mode 100644 index a91dc2d..0000000 --- "a/Addons/scraper.EmberCore/Scraper/scraper.EmberCore.Portugu\303\252s_(pt-BR).xml" +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/Addons/scraper.EmberCore/TVScraper/clsScrapeTVDB.vb b/Addons/scraper.EmberCore/TVScraper/clsScrapeTVDB.vb index 4459f88..b0f8531 100644 --- a/Addons/scraper.EmberCore/TVScraper/clsScrapeTVDB.vb +++ b/Addons/scraper.EmberCore/TVScraper/clsScrapeTVDB.vb @@ -94,9 +94,9 @@ Public Class Scraper Return sObject.GetSingleEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .TVDBID = TVDBID, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) End Function - Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Image) As Image - Return sObject.GetSingleImage(New Structures.ScrapeInfo With {.ShowTitle = Title, .ShowID = ShowID, .TVDBID = TVDBID, .ImageType = Type, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .CurrentImage = CurrentImage}) - End Function + Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images) As Images + Return sObject.GetSingleImage(New Structures.ScrapeInfo With {.ShowTitle = Title, .ShowID = ShowID, .TVDBID = TVDBID, .ImageType = Type, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .CurrentImage = CurrentImage}) + End Function Public Sub InnerEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) RaiseEvent ScraperEvent(eType, iProgress, Parameter) @@ -424,105 +424,105 @@ Public Class Scraper Return New MediaContainers.EpisodeDetails End Function - Public Function GetSingleImage(ByVal sInfo As Structures.ScrapeInfo) As Image - tmpTVDBShow = New TVDBShow - - If sInfo.ImageType = Enums.TVImageType.EpisodePoster Then - - If String.IsNullOrEmpty(sInfo.TVDBID) Then - Using dTVDBSearch As New dlgTVDBSearchResults - sInfo = dTVDBSearch.ShowDialog(sInfo, True) - If Not String.IsNullOrEmpty(sInfo.TVDBID) Then - Master.currShow.TVShow.ID = sInfo.TVDBID - - Using tImage As New Images - Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) - If Not IsNothing(tmpEp) Then - - If File.Exists(tmpEp.LocalFile) Then - tImage.FromFile(tmpEp.LocalFile) - Else - tImage.FromWeb(tmpEp.PosterURL) - If Not IsNothing(tImage.Image) Then - Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) - tImage.Save(tmpEp.LocalFile) - End If - End If - - If Not IsNothing(tImage.Image) Then - Using dPosterConfirm As New dlgTVEpisodePoster - If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then - Return tImage.Image - Else - Return Nothing - End If - End Using - Else - MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) - Return Nothing - End If - Else - Return Nothing - End If - End Using - Else - Return Nothing - End If - End Using - Else - Using tImage As New Images - Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) - If Not IsNothing(tmpEp) Then - - If File.Exists(tmpEp.LocalFile) Then - tImage.FromFile(tmpEp.LocalFile) - Else - tImage.FromWeb(tmpEp.PosterURL) - If Not IsNothing(tImage.Image) Then - Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) - tImage.Save(tmpEp.LocalFile) - End If - End If - - If Not IsNothing(tImage.Image) Then - Using dPosterConfirm As New dlgTVEpisodePoster - If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then - Return tImage.Image - Else - Return Nothing - End If - End Using - Else - MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) - Return Nothing - End If - Else - Return Nothing - End If - End Using - End If - Else - If String.IsNullOrEmpty(sInfo.TVDBID) Then - Using dTVDBSearch As New dlgTVDBSearchResults - sInfo = dTVDBSearch.ShowDialog(sInfo, True) - If Not String.IsNullOrEmpty(sInfo.TVDBID) Then - Master.currShow.TVShow.ID = sInfo.TVDBID - Me.DownloadSeries(sInfo, True) - Using dImageSelect As New dlgTVImageSelect - Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) - End Using - Else - Return Nothing - End If - End Using - Else - Me.DownloadSeries(sInfo, True) - Using dImageSelect As New dlgTVImageSelect - Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) - End Using - End If - End If - End Function + Public Function GetSingleImage(ByVal sInfo As Structures.ScrapeInfo) As Images + tmpTVDBShow = New TVDBShow + + If sInfo.ImageType = Enums.TVImageType.EpisodePoster Then + + If String.IsNullOrEmpty(sInfo.TVDBID) Then + Using dTVDBSearch As New dlgTVDBSearchResults + sInfo = dTVDBSearch.ShowDialog(sInfo, True) + If Not String.IsNullOrEmpty(sInfo.TVDBID) Then + Master.currShow.TVShow.ID = sInfo.TVDBID + + Using tImage As New Images + Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) + If Not IsNothing(tmpEp) Then + + If File.Exists(tmpEp.LocalFile) Then + tImage.FromFile(tmpEp.LocalFile) + Else + tImage.FromWeb(tmpEp.PosterURL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) + tImage.Save(tmpEp.LocalFile, , , False) + End If + End If + + If Not IsNothing(tImage.Image) Then + Using dPosterConfirm As New dlgTVEpisodePoster + If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Using + Else + MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) + Return Nothing + End If + Else + Return Nothing + End If + End Using + Else + Return Nothing + End If + End Using + Else + Using tImage As New Images + Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) + If Not IsNothing(tmpEp) Then + + If File.Exists(tmpEp.LocalFile) Then + tImage.FromFile(tmpEp.LocalFile) + Else + tImage.FromWeb(tmpEp.PosterURL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) + tImage.Save(tmpEp.LocalFile, , , False) + End If + End If + + If Not IsNothing(tImage.Image) Then + Using dPosterConfirm As New dlgTVEpisodePoster + If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Using + Else + MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) + Return Nothing + End If + Else + Return Nothing + End If + End Using + End If + Else + If String.IsNullOrEmpty(sInfo.TVDBID) Then + Using dTVDBSearch As New dlgTVDBSearchResults + sInfo = dTVDBSearch.ShowDialog(sInfo, True) + If Not String.IsNullOrEmpty(sInfo.TVDBID) Then + Master.currShow.TVShow.ID = sInfo.TVDBID + Me.DownloadSeries(sInfo, True) + Using dImageSelect As New dlgTVImageSelect + Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) + End Using + Else + Return Nothing + End If + End Using + Else + Me.DownloadSeries(sInfo, True) + Using dImageSelect As New dlgTVImageSelect + Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) + End Using + End If + End If + End Function Public Function IsBusy() As Boolean Return bwTVDB.IsBusy @@ -848,17 +848,17 @@ Public Class Scraper If Me.bwTVDB.CancellationPending Then Return If Episode.TVEp.Season > -1 AndAlso Episode.TVEp.Episode > -1 AndAlso Not Episode.IsLockEp Then - If Not IsNothing(Episode.TVEp.Poster.Image) Then Episode.EpPosterPath = Episode.TVEp.Poster.SaveAsEpPoster(Episode) + If Not IsNothing(Episode.TVEp.Poster.Image) Then Episode.EpPosterPath = Episode.TVEp.Poster.SaveAsEpPoster(Episode, Episode.TVEp.PosterURL) If Me.bwTVDB.CancellationPending Then Return - If Master.eSettings.EpisodeFanartEnabled AndAlso Not IsNothing(Episode.TVEp.Fanart.Image) Then Episode.EpFanartPath = Episode.TVEp.Fanart.SaveAsEpFanart(Episode) + If Master.eSettings.EpisodeFanartEnabled AndAlso Not IsNothing(Episode.TVEp.Fanart.Image) Then Episode.EpFanartPath = Episode.TVEp.Fanart.SaveAsEpFanart(Episode, ) If Me.bwTVDB.CancellationPending Then Return Dim cSea = From cSeason As TVDBSeasonImage In TVDBImages.SeasonImageList Where cSeason.Season = iSea Take 1 If cSea.Count > 0 Then - If Not IsNothing(cSea(0).Poster.Image) Then Episode.SeasonPosterPath = cSea(0).Poster.SaveAsSeasonPoster(Episode) + If Not IsNothing(cSea(0).Poster.Image) Then Episode.SeasonPosterPath = cSea(0).Poster.SaveAsSeasonPoster(Episode) If Me.bwTVDB.CancellationPending Then Return @@ -871,7 +871,7 @@ Public Class Scraper cSea(0).Fanart.Image.FromWeb(cSea(0).Fanart.URL) If Not IsNothing(cSea(0).Fanart.Image.Image) Then Directory.CreateDirectory(Directory.GetParent(cSea(0).Fanart.LocalFile).FullName) - cSea(0).Fanart.Image.Save(cSea(0).Fanart.LocalFile) + cSea(0).Fanart.Image.Save(cSea(0).Fanart.LocalFile, , , False) Episode.SeasonFanartPath = cSea(0).Fanart.Image.SaveAsSeasonFanart(Episode) End If End If @@ -934,24 +934,14 @@ Public Class Scraper End Sub Private Sub SaveToCache(ByVal sID As String, ByVal sURL As String, ByVal sPath As String) - Dim sHTTP As New HTTP Dim sImage As New Images - sHTTP.StartDownloadImage(sURL) - - While sHTTP.IsDownloading - Application.DoEvents() - Threading.Thread.Sleep(50) - End While - - sImage.Image = sHTTP.Image + sImage.FromWeb(sURL) If Not IsNothing(sImage.Image) Then - sImage.Save(Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, sPath.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar)))) + sImage.Save(Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, sPath.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), , , True) End If - - sImage = Nothing - sHTTP = Nothing + sImage = Nothing End Sub Private Function SearchSeries(ByVal sInfo As Structures.ScrapeInfo) As List(Of TVSearchResults) diff --git a/Addons/scraper.EmberCore/TVScraper/dlgTVImageSelect.vb b/Addons/scraper.EmberCore/TVScraper/dlgTVImageSelect.vb index 12e7038..288414e 100644 --- a/Addons/scraper.EmberCore/TVScraper/dlgTVImageSelect.vb +++ b/Addons/scraper.EmberCore/TVScraper/dlgTVImageSelect.vb @@ -80,22 +80,22 @@ Public Class dlgTVImageSelect 'no preferred size, just get any one of them If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) - If Not IsNothing(tSP) Then - Scraper.TVDBImages.ShowPoster.Image.Image = tSP.Image.Image - Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile - Scraper.TVDBImages.ShowPoster.URL = tSP.URL - Else - 'still nothing? try to get from generic posters - Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) p.Language = Master.eSettings.TVDBLanguage AndAlso Not IsNothing(p.Image.Image)) - - If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) - - If Not IsNothing(tSPg) Then - Scraper.TVDBImages.ShowPoster.Image.Image = tSPg.Image.Image - Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile - Scraper.TVDBImages.ShowPoster.URL = tSPg.URL - End If - End If + If Not IsNothing(tSP) Then + Scraper.TVDBImages.ShowPoster.Image = tSP.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSP.URL + Else + 'still nothing? try to get from generic posters + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) p.Language = Master.eSettings.TVDBLanguage AndAlso Not IsNothing(p.Image.Image)) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.ShowPoster.Image = tSPg.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSPg.URL + End If + End If Else Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredShowPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) @@ -109,7 +109,7 @@ Public Class dlgTVImageSelect If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) If Not IsNothing(tSPg) Then - Scraper.TVDBImages.ShowPoster.Image.Image = tSPg.Image.Image + Scraper.TVDBImages.ShowPoster.Image = tSPg.Image Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile Scraper.TVDBImages.ShowPoster.URL = tSPg.URL Else @@ -118,7 +118,7 @@ Public Class dlgTVImageSelect If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) If Not IsNothing(tSP) Then - Scraper.TVDBImages.ShowPoster.Image.Image = tSP.Image.Image + Scraper.TVDBImages.ShowPoster.Image = tSP.Image Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile Scraper.TVDBImages.ShowPoster.URL = tSP.URL End If @@ -148,7 +148,7 @@ Public Class dlgTVImageSelect Scraper.TVDBImages.ShowFanart.Image.FromWeb(tSF.URL) If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then Directory.CreateDirectory(Directory.GetParent(tSF.LocalFile).FullName) - Scraper.TVDBImages.ShowFanart.Image.Save(tSF.LocalFile) + Scraper.TVDBImages.ShowFanart.Image.Save(tSF.LocalFile, , , False) Scraper.TVDBImages.ShowFanart.LocalFile = tSF.LocalFile Scraper.TVDBImages.ShowFanart.URL = tSF.URL End If @@ -171,7 +171,7 @@ Public Class dlgTVImageSelect If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) If Not IsNothing(tSP) Then - Scraper.TVDBImages.AllSeasonPoster.Image.Image = tSP.Image.Image + Scraper.TVDBImages.AllSeasonPoster.Image = tSP.Image Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSP.LocalFile Scraper.TVDBImages.AllSeasonPoster.URL = tSP.URL Else @@ -181,7 +181,7 @@ Public Class dlgTVImageSelect If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) If Not IsNothing(tSPg) Then - Scraper.TVDBImages.AllSeasonPoster.Image.Image = tSPg.Image.Image + Scraper.TVDBImages.AllSeasonPoster.Image = tSPg.Image Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSPg.LocalFile Scraper.TVDBImages.AllSeasonPoster.URL = tSPg.URL End If @@ -195,7 +195,7 @@ Public Class dlgTVImageSelect If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) If Not IsNothing(tSPg) Then - Scraper.TVDBImages.AllSeasonPoster.Image.Image = tSPg.Image.Image + Scraper.TVDBImages.AllSeasonPoster.Image = tSPg.Image Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSPg.LocalFile Scraper.TVDBImages.AllSeasonPoster.URL = tSPg.URL Else @@ -204,7 +204,7 @@ Public Class dlgTVImageSelect If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) If Not IsNothing(tSP) Then - Scraper.TVDBImages.AllSeasonPoster.Image.Image = tSP.Image.Image + Scraper.TVDBImages.AllSeasonPoster.Image = tSP.Image Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSP.LocalFile Scraper.TVDBImages.AllSeasonPoster.URL = tSP.URL End If @@ -225,9 +225,9 @@ Public Class dlgTVImageSelect tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason AndAlso p.Type = Master.eSettings.PreferredSeasonPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) If IsNothing(tSea) Then tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason AndAlso p.Type = Master.eSettings.PreferredSeasonPosterSize) If IsNothing(tSea) Then tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason) - If Not IsNothing(tSea) Then cSeason.Poster.Image = tSea.Image.Image + If Not IsNothing(tSea) Then cSeason.Poster = tSea.Image End If - If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonFanart) AndAlso Master.eSettings.SeasonFanartEnabled AndAlso IsNothing(cSeason.Fanart.Image.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then cSeason.Fanart.Image.Image = Scraper.TVDBImages.ShowFanart.Image.Image + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonFanart) AndAlso Master.eSettings.SeasonFanartEnabled AndAlso IsNothing(cSeason.Fanart.Image.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then cSeason.Fanart.Image = Scraper.TVDBImages.ShowFanart.Image If Me.bwLoadImages.CancellationPending Then Return True @@ -253,7 +253,7 @@ Public Class dlgTVImageSelect If Not String.IsNullOrEmpty(Episode.EpFanartPath) Then Episode.TVEp.Fanart.FromFile(Episode.EpFanartPath) ElseIf Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then - Episode.TVEp.Fanart.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Episode.TVEp.Fanart = Scraper.TVDBImages.ShowFanart.Image End If End If @@ -284,77 +284,78 @@ Public Class dlgTVImageSelect Return MyBase.ShowDialog End Function - Public Overloads Function ShowDialog(ByVal ShowID As Integer, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal CurrentImage As Image) As Image - Me._id = ShowID - Me._type = Type - Me._season = Season - Me.pbCurrent.Image = CurrentImage - - If MyBase.ShowDialog = Windows.Forms.DialogResult.OK Then - Return Me.pbCurrent.Image - Else - Return Nothing - End If - End Function - - Private Sub AddImage(ByVal iImage As Image, ByVal sDescription As String, ByVal iIndex As Integer, ByVal fTag As ImageTag) - Try - ReDim Preserve Me.pnlImage(iIndex) - ReDim Preserve Me.pbImage(iIndex) - ReDim Preserve Me.lblImage(iIndex) - Me.pnlImage(iIndex) = New Panel() - Me.pbImage(iIndex) = New PictureBox() - Me.lblImage(iIndex) = New Label() - Me.pbImage(iIndex).Name = iIndex.ToString - Me.pnlImage(iIndex).Name = iIndex.ToString - Me.lblImage(iIndex).Name = iIndex.ToString - Me.pnlImage(iIndex).Size = New Size(187, 187) - Me.pbImage(iIndex).Size = New Size(181, 151) - Me.lblImage(iIndex).Size = New Size(181, 30) - Me.pnlImage(iIndex).BackColor = Color.White - Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle - Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom - Me.lblImage(iIndex).AutoSize = False - Me.lblImage(iIndex).BackColor = Color.White - Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.lblImage(iIndex).Text = sDescription - Me.pbImage(iIndex).Image = iImage - Me.pnlImage(iIndex).Left = iLeft - Me.pbImage(iIndex).Left = 3 - Me.lblImage(iIndex).Left = 0 - Me.pnlImage(iIndex).Top = iTop - Me.pbImage(iIndex).Top = 3 - Me.lblImage(iIndex).Top = 151 - Me.pnlImage(iIndex).Tag = fTag - Me.pbImage(iIndex).Tag = fTag - Me.lblImage(iIndex).Tag = fTag - Me.pnlImages.Controls.Add(Me.pnlImage(iIndex)) - Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) - Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) - Me.pnlImage(iIndex).BringToFront() - AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click - AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick - AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click - AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click - - AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent - AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent - AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent - - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - - Me.iCounter += 1 - - If Me.iCounter = 3 Then - Me.iCounter = 0 - Me.iLeft = 5 - Me.iTop += 192 - Else - Me.iLeft += 192 - End If - End Sub + Public Overloads Function ShowDialog(ByVal ShowID As Integer, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal CurrentImage As Images) As Images + Me._id = ShowID + Me._type = Type + Me._season = Season + Me.pbCurrent.Image = CurrentImage.Image + Me.pbCurrent.Tag = CurrentImage + + If MyBase.ShowDialog = Windows.Forms.DialogResult.OK Then + Return CType(Me.pbCurrent.Tag, Images) + Else + Return Nothing + End If + End Function + + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal fTag As ImageTag) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + ReDim Preserve Me.lblImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.lblImage(iIndex) = New Label() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(187, 187) + Me.pbImage(iIndex).Size = New Size(181, 151) + Me.lblImage(iIndex).Size = New Size(181, 30) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblImage(iIndex).Text = sDescription + Me.pbImage(iIndex).Image = fTag.ImageObj.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.lblImage(iIndex).Left = 0 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.lblImage(iIndex).Top = 151 + Me.pnlImage(iIndex).Tag = fTag + Me.pbImage(iIndex).Tag = fTag + Me.lblImage(iIndex).Tag = fTag + Me.pnlImages.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 192 + Else + Me.iLeft += 192 + End If + End Sub Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click If Me.bwLoadData.IsBusy Then Me.bwLoadData.CancelAsync() @@ -387,7 +388,7 @@ Public Class dlgTVImageSelect Scraper.TVDBImages.ShowFanart.Image.FromWeb(Scraper.TVDBImages.ShowFanart.URL) If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.ShowFanart.LocalFile).FullName) - Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile) + Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile, , , False) Master.currShow.ShowFanartPath = Scraper.TVDBImages.ShowFanart.LocalFile End If End If @@ -398,32 +399,36 @@ Public Class dlgTVImageSelect Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") Me.pbStatus.Style = ProgressBarStyle.Marquee Me.pnlStatus.Visible = True - If Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then - Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromFile(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) - Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image - ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then - Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Clear() - Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromWeb(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) - If Not IsNothing(Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image) Then - Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile).FullName) - Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Save(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) - Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image - End If - End If + If Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromFile(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) + Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Clear() + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromWeb(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) + If Not IsNothing(Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile).FullName) + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Save(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile, , , False) + Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image + End If + End If ElseIf (Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart) AndAlso Me._fanartchanged Then Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") Me.pbStatus.Style = ProgressBarStyle.Marquee Me.pnlStatus.Visible = True If Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.ShowFanart.LocalFile) Then Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.TVDBImages.ShowFanart.LocalFile) - Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) Then Scraper.TVDBImages.ShowFanart.Image.Clear() Scraper.TVDBImages.ShowFanart.Image.FromWeb(Scraper.TVDBImages.ShowFanart.URL) If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.ShowFanart.LocalFile).FullName) - Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile) - Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile, , , False) + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image End If End If End If @@ -453,21 +458,21 @@ Public Class dlgTVImageSelect Select Case Me._type Case Enums.TVImageType.AllSeasonPoster - Scraper.TVDBImages.AllSeasonPoster.Image.Image = Me.pbCurrent.Image + Scraper.TVDBImages.AllSeasonPoster.Image = CType(Me.pbCurrent.Tag, Images) Case Enums.TVImageType.SeasonFanart cSI = New Scraper.TVDBSeasonImage cSI.Season = Me._season - cSI.Fanart.Image.Image = Me.pbCurrent.Image + cSI.Fanart.Image = CType(Me.pbCurrent.Tag, Images) Scraper.TVDBImages.SeasonImageList.Add(cSI) Case Enums.TVImageType.SeasonPoster cSI = New Scraper.TVDBSeasonImage cSI.Season = Me._season - cSI.Poster.Image = Me.pbCurrent.Image + cSI.Poster = CType(Me.pbCurrent.Tag, Images) Scraper.TVDBImages.SeasonImageList.Add(cSI) Case Enums.TVImageType.ShowFanart, Enums.TVImageType.EpisodeFanart - Scraper.TVDBImages.ShowFanart.Image.Image = Me.pbCurrent.Image + Scraper.TVDBImages.ShowFanart.Image = CType(Me.pbCurrent.Tag, Images) Case Enums.TVImageType.ShowPoster - Scraper.TVDBImages.ShowPoster.Image.Image = Me.pbCurrent.Image + Scraper.TVDBImages.ShowPoster.Image = CType(Me.pbCurrent.Tag, Images) Case Enums.TVImageType.All If _withcurrent Then @@ -652,7 +657,8 @@ Public Class dlgTVImageSelect Me.iCounter = 0 Me.iLeft = 5 Me.iTop = 5 - Me.pbCurrent.Image = Nothing + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Tag = Nothing If Me.pnlImages.Controls.Count > 0 Then For i As Integer = UBound(Me.pnlImage) To 0 Step -1 @@ -684,25 +690,25 @@ Public Class dlgTVImageSelect Me.bwLoadData.RunWorkerAsync() End Sub - Private Sub DoSelect(ByVal iIndex As Integer, ByVal SelImage As Image, ByVal SelTag As ImageTag) - Try - For i As Integer = 0 To UBound(Me.pnlImage) - Me.pnlImage(i).BackColor = Color.White - Me.lblImage(i).BackColor = Color.White - Me.lblImage(i).ForeColor = Color.Black - Next + Private Sub DoSelect(ByVal iIndex As Integer, ByVal SelTag As ImageTag) + Try + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + Next - Me.pnlImage(iIndex).BackColor = Color.Blue - Me.lblImage(iIndex).BackColor = Color.Blue - Me.lblImage(iIndex).ForeColor = Color.White + Me.pnlImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White - SetImage(SelImage, SelTag) + SetImage(SelTag) - Me.CheckCurrentImage() - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub + Me.CheckCurrentImage() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub Private Function DownloadAllImages() As Boolean Dim iProgress As Integer = 1 @@ -745,7 +751,7 @@ Public Class dlgTVImageSelect Seas.Image.FromWeb(Seas.URL) If Not IsNothing(Seas.Image.Image) Then Directory.CreateDirectory(Directory.GetParent(Seas.LocalFile).FullName) - Seas.Image.Save(Seas.LocalFile) + Seas.Image.Save(Seas.LocalFile, , , False) SeasonList.Add(Seas) End If End If @@ -774,12 +780,12 @@ Public Class dlgTVImageSelect SPost.Image.FromWeb(SPost.URL) If Not IsNothing(SPost.Image.Image) Then Directory.CreateDirectory(Directory.GetParent(SPost.LocalFile).FullName) - SPost.Image.Save(SPost.LocalFile) + SPost.Image.Save(SPost.LocalFile, , , False) ShowPosterList.Add(SPost) End If End If Else - SPost.Image.FromFile(SPost.LocalFile) + SPost.Image.FromFile(SPost.LocalFile) ShowPosterList.Add(SPost) End If @@ -803,7 +809,7 @@ Public Class dlgTVImageSelect SFan.Image.FromWeb(SFan.ThumbnailURL) If Not IsNothing(SFan.Image.Image) Then Directory.CreateDirectory(Directory.GetParent(SFan.LocalThumb).FullName) - SFan.Image.Image.Save(SFan.LocalThumb) + SFan.Image.Save(SFan.LocalThumb, , , False) FanartList.Add(SFan) End If End If @@ -833,7 +839,7 @@ Public Class dlgTVImageSelect Post.Image.FromWeb(Post.URL) If Not IsNothing(Post.Image.Image) Then Directory.CreateDirectory(Directory.GetParent(Post.LocalFile).FullName) - Post.Image.Save(Post.LocalFile) + Post.Image.Save(Post.LocalFile, , , False) GenericPosterList.Add(Post) End If End If @@ -877,7 +883,7 @@ Public Class dlgTVImageSelect tImage.FromWeb(iTag.URL) If Not IsNothing(tImage.Image) Then Directory.CreateDirectory(Directory.GetParent(iTag.Path).FullName) - tImage.Save(iTag.Path) + tImage.Save(iTag.Path, , , False) End If sHTTP = Nothing @@ -955,7 +961,7 @@ Public Class dlgTVImageSelect Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim iindex As Integer = Convert.ToInt32(DirectCast(sender, Label).Name) - Me.DoSelect(iindex, Me.pbImage(iindex).Image, DirectCast(DirectCast(sender, Label).Tag, ImageTag)) + Me.DoSelect(iindex, DirectCast(DirectCast(sender, Label).Tag, ImageTag)) End Sub Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) @@ -975,12 +981,13 @@ Public Class dlgTVImageSelect End Sub Private Sub pbDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbDelete.Click - Me.pbCurrent.Image = Nothing - Me.SetImage(Nothing, New ImageTag) + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Tag = Nothing + Me.SetImage(New ImageTag) End Sub Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) - Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(sender, PictureBox).Image, DirectCast(DirectCast(sender, PictureBox).Tag, ImageTag)) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, ImageTag)) End Sub Private Sub pbImage_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) @@ -998,74 +1005,80 @@ Public Class dlgTVImageSelect Private Sub pbUndo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbUndo.Click If Me.SelSeason = -999 Then If Me.SelIsPoster Then - Scraper.TVDBImages.ShowPoster.Image.Image = DefaultImages.ShowPoster.Image.Image + Scraper.TVDBImages.ShowPoster.Image = DefaultImages.ShowPoster.Image Scraper.TVDBImages.ShowPoster.LocalFile = DefaultImages.ShowPoster.LocalFile Scraper.TVDBImages.ShowPoster.URL = DefaultImages.ShowPoster.URL - Me.pbCurrent.Image = Scraper.TVDBImages.ShowPoster.Image.Image + Me.pbCurrent.Image = Scraper.TVDBImages.ShowPoster.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowPoster.Image Else - Scraper.TVDBImages.ShowFanart.Image.Image = DefaultImages.ShowFanart.Image.Image + Scraper.TVDBImages.ShowFanart.Image = DefaultImages.ShowFanart.Image Scraper.TVDBImages.ShowFanart.LocalFile = DefaultImages.ShowFanart.LocalFile Scraper.TVDBImages.ShowFanart.URL = DefaultImages.ShowFanart.URL - Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image End If ElseIf Me.SelSeason = 999 Then - Scraper.TVDBImages.AllSeasonPoster.Image.Image = DefaultImages.AllSeasonPoster.Image.Image + Scraper.TVDBImages.AllSeasonPoster.Image = DefaultImages.AllSeasonPoster.Image Scraper.TVDBImages.AllSeasonPoster.LocalFile = DefaultImages.AllSeasonPoster.LocalFile Scraper.TVDBImages.AllSeasonPoster.URL = DefaultImages.AllSeasonPoster.URL - Me.pbCurrent.Image = Scraper.TVDBImages.AllSeasonPoster.Image.Image + Me.pbCurrent.Image = Scraper.TVDBImages.AllSeasonPoster.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.AllSeasonPoster.Image Else If Me.SelIsPoster Then - Dim dSPost As Image = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster.Image - Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster.Image = dSPost - Me.pbCurrent.Image = dSPost + Dim dSPost As Images = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster + Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster = dSPost + Me.pbCurrent.Image = dSPost.Image + Me.pbCurrent.Tag = dSPost Else Dim dSFan As Scraper.TVDBFanart = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart Dim tSFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart - tSFan.Image.Image = dSFan.Image.Image + tSFan.Image = dSFan.Image tSFan.LocalFile = dSFan.LocalFile tSFan.URL = dSFan.URL - Me.pbCurrent.Image = dSFan.Image.Image + Me.pbCurrent.Image = dSFan.Image.Image + Me.pbCurrent.Tag = dSFan.Image End If End If End Sub Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim iIndex As Integer = Convert.ToInt32(DirectCast(sender, Panel).Name) - Me.DoSelect(iIndex, Me.pbImage(iIndex).Image, DirectCast(DirectCast(sender, Panel).Tag, ImageTag)) + Me.DoSelect(iIndex, DirectCast(DirectCast(sender, Panel).Tag, ImageTag)) End Sub - Private Sub SetImage(ByVal SelImage As Image, ByVal SelTag As ImageTag) - Me.pbCurrent.Image = SelImage - - Me._fanartchanged = True - - If Me.SelSeason = -999 Then - If Me.SelIsPoster Then - Scraper.TVDBImages.ShowPoster.Image.Image = SelImage - Scraper.TVDBImages.ShowPoster.LocalFile = SelTag.Path - Scraper.TVDBImages.ShowPoster.URL = SelTag.URL - Else - Scraper.TVDBImages.ShowFanart.Image.Image = SelImage - Scraper.TVDBImages.ShowFanart.LocalFile = SelTag.Path - Scraper.TVDBImages.ShowFanart.URL = SelTag.URL - End If - ElseIf Me.SelSeason = 999 Then - Scraper.TVDBImages.AllSeasonPoster.Image.Image = SelImage - Scraper.TVDBImages.AllSeasonPoster.LocalFile = SelTag.Path - Scraper.TVDBImages.AllSeasonPoster.URL = SelTag.URL - Else - If Me.SelIsPoster Then - Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster.Image = SelImage - Else - Dim tFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart - If Not IsNothing(tFan) Then - tFan.Image.Image = SelImage - tFan.LocalFile = SelTag.Path - tFan.URL = SelTag.URL - End If - End If - End If - End Sub + Private Sub SetImage(ByVal SelTag As ImageTag) + Me.pbCurrent.Image = SelTag.ImageObj.Image + Me.pbCurrent.Tag = SelTag.ImageObj + + Me._fanartchanged = True + + If Me.SelSeason = -999 Then + If Me.SelIsPoster Then + Scraper.TVDBImages.ShowPoster.Image = SelTag.ImageObj + Scraper.TVDBImages.ShowPoster.LocalFile = SelTag.Path + Scraper.TVDBImages.ShowPoster.URL = SelTag.URL + Else + Scraper.TVDBImages.ShowFanart.Image = SelTag.ImageObj + Scraper.TVDBImages.ShowFanart.LocalFile = SelTag.Path + Scraper.TVDBImages.ShowFanart.URL = SelTag.URL + End If + ElseIf Me.SelSeason = 999 Then + Scraper.TVDBImages.AllSeasonPoster.Image = SelTag.ImageObj + Scraper.TVDBImages.AllSeasonPoster.LocalFile = SelTag.Path + Scraper.TVDBImages.AllSeasonPoster.URL = SelTag.URL + Else + If Me.SelIsPoster Then + Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster = SelTag.ImageObj + Else + Dim tFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + If Not IsNothing(tFan) Then + tFan.Image = SelTag.ImageObj + tFan.LocalFile = SelTag.Path + tFan.URL = SelTag.URL + End If + End If + End If + End Sub Private Sub SetUp() Me.Text = Master.eLang.GetString(99, "TV Image Selection") @@ -1094,13 +1107,13 @@ Public Class dlgTVImageSelect iCount = ShowPosterList.Count For i = 0 To iCount - 1 If Not IsNothing(ShowPosterList(i)) AndAlso Not IsNothing(ShowPosterList(i).Image) AndAlso Not IsNothing(ShowPosterList(i).Image.Image) Then - Me.AddImage(ShowPosterList(i).Image.Image, String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False}) + Me.AddImage(String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False, .ImageObj = ShowPosterList(i).Image}) End If Next For i = 0 To GenericPosterList.Count - 1 If Not IsNothing(GenericPosterList(i)) AndAlso Not IsNothing(GenericPosterList(i).Image) AndAlso Not IsNothing(GenericPosterList(i).Image.Image) Then - Me.AddImage(GenericPosterList(i).Image.Image, String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False}) + Me.AddImage(String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False, .ImageObj = GenericPosterList(i).Image}) End If Next @@ -1116,7 +1129,7 @@ Public Class dlgTVImageSelect For i = 0 To FanartList.Count - 1 If Not IsNothing(FanartList(i)) AndAlso Not IsNothing(FanartList(i).Image) AndAlso Not IsNothing(FanartList(i).Image.Image) Then - Me.AddImage(FanartList(i).Image.Image, String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True}) + Me.AddImage(String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True, .ImageObj = FanartList(i).Image}) End If Next @@ -1132,13 +1145,13 @@ Public Class dlgTVImageSelect iCount = GenericPosterList.Count For i = 0 To iCount - 1 If Not IsNothing(GenericPosterList(i)) AndAlso Not IsNothing(GenericPosterList(i).Image) AndAlso Not IsNothing(GenericPosterList(i).Image.Image) Then - Me.AddImage(GenericPosterList(i).Image.Image, String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False}) + Me.AddImage(String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False, .ImageObj = GenericPosterList(i).Image}) End If Next For i = 0 To ShowPosterList.Count - 1 If Not IsNothing(ShowPosterList(i)) AndAlso Not IsNothing(ShowPosterList(i).Image) AndAlso Not IsNothing(ShowPosterList(i).Image.Image) Then - Me.AddImage(ShowPosterList(i).Image.Image, String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False}) + Me.AddImage(String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False, .ImageObj = ShowPosterList(i).Image}) End If Next Else @@ -1155,7 +1168,7 @@ Public Class dlgTVImageSelect End If For i = 0 To FanartList.Count - 1 If Not IsNothing(FanartList(i)) AndAlso Not IsNothing(FanartList(i).Image) AndAlso Not IsNothing(FanartList(i).Image.Image) Then - Me.AddImage(FanartList(i).Image.Image, String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True}) + Me.AddImage(String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True, .ImageObj = FanartList(i).Image}) End If Next ElseIf tMatch.Groups("type").Value = "p" Then @@ -1170,7 +1183,7 @@ Public Class dlgTVImageSelect iCount = 0 For Each SImage As Scraper.TVDBSeasonPoster In SeasonList.Where(Function(s) s.Season = Convert.ToInt32(tMatch.Groups("num").Value)) If Not IsNothing(SImage.Image) AndAlso Not IsNothing(SImage.Image.Image) Then - Me.AddImage(SImage.Image.Image, String.Format("{0}x{1}", SImage.Image.Image.Width, SImage.Image.Image.Height), iCount, New ImageTag With {.URL = SImage.URL, .Path = SImage.LocalFile, .isFanart = False}) + Me.AddImage(String.Format("{0}x{1}", SImage.Image.Image.Width, SImage.Image.Image.Height), iCount, New ImageTag With {.URL = SImage.URL, .Path = SImage.LocalFile, .isFanart = False, .ImageObj = SImage.Image}) End If iCount += 1 Next @@ -1199,7 +1212,8 @@ Public Class dlgTVImageSelect Dim isFanart As Boolean Dim Path As String - Dim URL As String + Dim URL As String + Dim ImageObj As Images #End Region 'Fields diff --git a/Addons/scraper.EmberCore/frmInfoSettingsHolder.Designer.vb b/Addons/scraper.EmberCore/frmInfoSettingsHolder.Designer.vb index fa997c4..c3675d6 100644 --- a/Addons/scraper.EmberCore/frmInfoSettingsHolder.Designer.vb +++ b/Addons/scraper.EmberCore/frmInfoSettingsHolder.Designer.vb @@ -22,570 +22,570 @@ Partial Class frmInfoSettingsHolder 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmInfoSettingsHolder)) - Me.lblVersion = New System.Windows.Forms.Label() - Me.GroupBox30 = New System.Windows.Forms.GroupBox() - Me.Label18 = New System.Windows.Forms.Label() - Me.txtIMDBURL = New System.Windows.Forms.TextBox() - Me.GroupBox15 = New System.Windows.Forms.GroupBox() - Me.chkOFDBGenre = New System.Windows.Forms.CheckBox() - Me.chkOFDBPlot = New System.Windows.Forms.CheckBox() - Me.chkOFDBOutline = New System.Windows.Forms.CheckBox() - Me.chkOFDBTitle = New System.Windows.Forms.CheckBox() - Me.cbEnabled = New System.Windows.Forms.CheckBox() - Me.Panel1 = New System.Windows.Forms.Panel() - Me.Label2 = New System.Windows.Forms.Label() - Me.btnDown = New System.Windows.Forms.Button() - Me.btnUp = New System.Windows.Forms.Button() - Me.pnlSettings = New System.Windows.Forms.Panel() - Me.Label1 = New System.Windows.Forms.Label() - Me.PictureBox1 = New System.Windows.Forms.PictureBox() - Me.gbOptions = New System.Windows.Forms.GroupBox() - Me.chkCertification = New System.Windows.Forms.CheckBox() - Me.chkCountry = New System.Windows.Forms.CheckBox() - Me.chkTop250 = New System.Windows.Forms.CheckBox() - Me.chkCrew = New System.Windows.Forms.CheckBox() - Me.chkMusicBy = New System.Windows.Forms.CheckBox() - Me.chkProducers = New System.Windows.Forms.CheckBox() - Me.chkFullCast = New System.Windows.Forms.CheckBox() - Me.chkWriters = New System.Windows.Forms.CheckBox() - Me.chkStudio = New System.Windows.Forms.CheckBox() - Me.chkRuntime = New System.Windows.Forms.CheckBox() - Me.chkFullCrew = New System.Windows.Forms.CheckBox() - Me.chkPlot = New System.Windows.Forms.CheckBox() - Me.chkOutline = New System.Windows.Forms.CheckBox() - Me.chkGenre = New System.Windows.Forms.CheckBox() - Me.chkDirector = New System.Windows.Forms.CheckBox() - Me.chkTagline = New System.Windows.Forms.CheckBox() - Me.chkCast = New System.Windows.Forms.CheckBox() - Me.chkVotes = New System.Windows.Forms.CheckBox() - Me.chkTrailer = New System.Windows.Forms.CheckBox() - Me.chkRating = New System.Windows.Forms.CheckBox() - Me.chkRelease = New System.Windows.Forms.CheckBox() - Me.chkMPAA = New System.Windows.Forms.CheckBox() - Me.chkYear = New System.Windows.Forms.CheckBox() - Me.chkTitle = New System.Windows.Forms.CheckBox() - Me.GroupBox30.SuspendLayout() - Me.GroupBox15.SuspendLayout() - Me.Panel1.SuspendLayout() - Me.pnlSettings.SuspendLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() - Me.gbOptions.SuspendLayout() - Me.SuspendLayout() - ' - 'lblVersion - ' - Me.lblVersion.Location = New System.Drawing.Point(286, 393) - Me.lblVersion.Name = "lblVersion" - Me.lblVersion.Size = New System.Drawing.Size(90, 16) - Me.lblVersion.TabIndex = 74 - Me.lblVersion.Text = "Version:" - ' - 'GroupBox30 - ' - Me.GroupBox30.Controls.Add(Me.Label18) - Me.GroupBox30.Controls.Add(Me.txtIMDBURL) - Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox30.Location = New System.Drawing.Point(8, 40) - Me.GroupBox30.Name = "GroupBox30" - Me.GroupBox30.Size = New System.Drawing.Size(213, 69) - Me.GroupBox30.TabIndex = 1 - Me.GroupBox30.TabStop = False - Me.GroupBox30.Text = "IMDB" - ' - 'Label18 - ' - Me.Label18.AutoSize = True - Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label18.Location = New System.Drawing.Point(6, 18) - Me.Label18.Name = "Label18" - Me.Label18.Size = New System.Drawing.Size(73, 13) - Me.Label18.TabIndex = 0 - Me.Label18.Text = "IMDB Mirror:" - ' - 'txtIMDBURL - ' - Me.txtIMDBURL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtIMDBURL.Location = New System.Drawing.Point(8, 32) - Me.txtIMDBURL.Name = "txtIMDBURL" - Me.txtIMDBURL.Size = New System.Drawing.Size(192, 22) - Me.txtIMDBURL.TabIndex = 1 - ' - 'GroupBox15 - ' - Me.GroupBox15.Controls.Add(Me.chkOFDBGenre) - Me.GroupBox15.Controls.Add(Me.chkOFDBPlot) - Me.GroupBox15.Controls.Add(Me.chkOFDBOutline) - Me.GroupBox15.Controls.Add(Me.chkOFDBTitle) - Me.GroupBox15.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox15.Location = New System.Drawing.Point(8, 114) - Me.GroupBox15.Name = "GroupBox15" - Me.GroupBox15.Size = New System.Drawing.Size(213, 87) - Me.GroupBox15.TabIndex = 2 - Me.GroupBox15.TabStop = False - Me.GroupBox15.Text = "OFDB (German)" - ' - 'chkOFDBGenre - ' - Me.chkOFDBGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOFDBGenre.Location = New System.Drawing.Point(6, 65) - Me.chkOFDBGenre.Name = "chkOFDBGenre" - Me.chkOFDBGenre.Size = New System.Drawing.Size(168, 17) - Me.chkOFDBGenre.TabIndex = 3 - Me.chkOFDBGenre.Text = "Use OFDB Genre" - Me.chkOFDBGenre.UseVisualStyleBackColor = True - ' - 'chkOFDBPlot - ' - Me.chkOFDBPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOFDBPlot.Location = New System.Drawing.Point(6, 49) - Me.chkOFDBPlot.Name = "chkOFDBPlot" - Me.chkOFDBPlot.Size = New System.Drawing.Size(168, 17) - Me.chkOFDBPlot.TabIndex = 2 - Me.chkOFDBPlot.Text = "Use OFDB Plot" - Me.chkOFDBPlot.UseVisualStyleBackColor = True - ' - 'chkOFDBOutline - ' - Me.chkOFDBOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOFDBOutline.Location = New System.Drawing.Point(6, 33) - Me.chkOFDBOutline.Name = "chkOFDBOutline" - Me.chkOFDBOutline.Size = New System.Drawing.Size(168, 17) - Me.chkOFDBOutline.TabIndex = 1 - Me.chkOFDBOutline.Text = "Use OFDB Outline" - Me.chkOFDBOutline.UseVisualStyleBackColor = True - ' - 'chkOFDBTitle - ' - Me.chkOFDBTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOFDBTitle.Location = New System.Drawing.Point(6, 17) - Me.chkOFDBTitle.Name = "chkOFDBTitle" - Me.chkOFDBTitle.Size = New System.Drawing.Size(168, 17) - Me.chkOFDBTitle.TabIndex = 0 - Me.chkOFDBTitle.Text = "Use OFDB Title" - Me.chkOFDBTitle.UseVisualStyleBackColor = True - ' - 'cbEnabled - ' - Me.cbEnabled.AutoSize = True - Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.cbEnabled.Location = New System.Drawing.Point(10, 5) - Me.cbEnabled.Name = "cbEnabled" - Me.cbEnabled.Size = New System.Drawing.Size(68, 17) - Me.cbEnabled.TabIndex = 0 - Me.cbEnabled.Text = "Enabled" - Me.cbEnabled.UseVisualStyleBackColor = True - ' - 'Panel1 - ' - Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke - Me.Panel1.Controls.Add(Me.Label2) - Me.Panel1.Controls.Add(Me.btnDown) - Me.Panel1.Controls.Add(Me.cbEnabled) - Me.Panel1.Controls.Add(Me.btnUp) - Me.Panel1.Location = New System.Drawing.Point(0, 0) - Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(1125, 25) - Me.Panel1.TabIndex = 0 - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label2.Location = New System.Drawing.Point(500, 7) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(58, 12) - Me.Label2.TabIndex = 1 - Me.Label2.Text = "Scraper order" - ' - 'btnDown - ' - Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) - Me.btnDown.Location = New System.Drawing.Point(591, 1) - Me.btnDown.Name = "btnDown" - Me.btnDown.Size = New System.Drawing.Size(23, 23) - Me.btnDown.TabIndex = 3 - Me.btnDown.UseVisualStyleBackColor = True - ' - 'btnUp - ' - Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) - Me.btnUp.Location = New System.Drawing.Point(566, 1) - Me.btnUp.Name = "btnUp" - Me.btnUp.Size = New System.Drawing.Size(23, 23) - Me.btnUp.TabIndex = 2 - Me.btnUp.UseVisualStyleBackColor = True - ' - 'pnlSettings - ' - Me.pnlSettings.Controls.Add(Me.Label1) - Me.pnlSettings.Controls.Add(Me.PictureBox1) - Me.pnlSettings.Controls.Add(Me.Panel1) - Me.pnlSettings.Controls.Add(Me.GroupBox30) - Me.pnlSettings.Controls.Add(Me.GroupBox15) - Me.pnlSettings.Controls.Add(Me.gbOptions) - Me.pnlSettings.Location = New System.Drawing.Point(12, 1) - Me.pnlSettings.Name = "pnlSettings" - Me.pnlSettings.Size = New System.Drawing.Size(617, 369) - Me.pnlSettings.TabIndex = 0 - ' - 'Label1 - ' - Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label1.ForeColor = System.Drawing.Color.Blue - Me.Label1.Location = New System.Drawing.Point(37, 337) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(225, 31) - Me.Label1.TabIndex = 4 - Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ - "for more options." - Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'PictureBox1 - ' - Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) - Me.PictureBox1.Location = New System.Drawing.Point(3, 335) - Me.PictureBox1.Name = "PictureBox1" - Me.PictureBox1.Size = New System.Drawing.Size(30, 31) - Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage - Me.PictureBox1.TabIndex = 96 - Me.PictureBox1.TabStop = False - ' - 'gbOptions - ' - Me.gbOptions.Controls.Add(Me.chkCertification) - Me.gbOptions.Controls.Add(Me.chkCountry) - Me.gbOptions.Controls.Add(Me.chkTop250) - Me.gbOptions.Controls.Add(Me.chkCrew) - Me.gbOptions.Controls.Add(Me.chkMusicBy) - Me.gbOptions.Controls.Add(Me.chkProducers) - Me.gbOptions.Controls.Add(Me.chkFullCast) - Me.gbOptions.Controls.Add(Me.chkWriters) - Me.gbOptions.Controls.Add(Me.chkStudio) - Me.gbOptions.Controls.Add(Me.chkRuntime) - Me.gbOptions.Controls.Add(Me.chkFullCrew) - Me.gbOptions.Controls.Add(Me.chkPlot) - Me.gbOptions.Controls.Add(Me.chkOutline) - Me.gbOptions.Controls.Add(Me.chkGenre) - Me.gbOptions.Controls.Add(Me.chkDirector) - Me.gbOptions.Controls.Add(Me.chkTagline) - Me.gbOptions.Controls.Add(Me.chkCast) - Me.gbOptions.Controls.Add(Me.chkVotes) - Me.gbOptions.Controls.Add(Me.chkTrailer) - Me.gbOptions.Controls.Add(Me.chkRating) - Me.gbOptions.Controls.Add(Me.chkRelease) - Me.gbOptions.Controls.Add(Me.chkMPAA) - Me.gbOptions.Controls.Add(Me.chkYear) - Me.gbOptions.Controls.Add(Me.chkTitle) - Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.gbOptions.Location = New System.Drawing.Point(227, 40) - Me.gbOptions.Name = "gbOptions" - Me.gbOptions.Size = New System.Drawing.Size(387, 161) - Me.gbOptions.TabIndex = 3 - Me.gbOptions.TabStop = False - Me.gbOptions.Text = "Scraper Fields" - ' - 'chkCertification - ' - Me.chkCertification.AutoSize = True - Me.chkCertification.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCertification.Location = New System.Drawing.Point(6, 70) - Me.chkCertification.Name = "chkCertification" - Me.chkCertification.Size = New System.Drawing.Size(89, 17) - Me.chkCertification.TabIndex = 3 - Me.chkCertification.Text = "Certification" - Me.chkCertification.UseVisualStyleBackColor = True - ' - 'chkCountry - ' - Me.chkCountry.AutoSize = True - Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCountry.Location = New System.Drawing.Point(237, 53) - Me.chkCountry.Name = "chkCountry" - Me.chkCountry.Size = New System.Drawing.Size(67, 17) - Me.chkCountry.TabIndex = 18 - Me.chkCountry.Text = "Country" - Me.chkCountry.UseVisualStyleBackColor = True - ' - 'chkTop250 - ' - Me.chkTop250.AutoSize = True - Me.chkTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTop250.Location = New System.Drawing.Point(237, 19) - Me.chkTop250.Name = "chkTop250" - Me.chkTop250.Size = New System.Drawing.Size(66, 17) - Me.chkTop250.TabIndex = 16 - Me.chkTop250.Text = "Top 250" - Me.chkTop250.UseVisualStyleBackColor = True - ' - 'chkCrew - ' - Me.chkCrew.AutoSize = True - Me.chkCrew.Enabled = False - Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCrew.Location = New System.Drawing.Point(246, 104) - Me.chkCrew.Name = "chkCrew" - Me.chkCrew.Size = New System.Drawing.Size(85, 17) - Me.chkCrew.TabIndex = 21 - Me.chkCrew.Text = "Other Crew" - Me.chkCrew.UseVisualStyleBackColor = True - ' - 'chkMusicBy - ' - Me.chkMusicBy.AutoSize = True - Me.chkMusicBy.Enabled = False - Me.chkMusicBy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMusicBy.Location = New System.Drawing.Point(246, 121) - Me.chkMusicBy.Name = "chkMusicBy" - Me.chkMusicBy.Size = New System.Drawing.Size(71, 17) - Me.chkMusicBy.TabIndex = 22 - Me.chkMusicBy.Text = "Music By" - Me.chkMusicBy.UseVisualStyleBackColor = True - ' - 'chkProducers - ' - Me.chkProducers.AutoSize = True - Me.chkProducers.Enabled = False - Me.chkProducers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkProducers.Location = New System.Drawing.Point(246, 138) - Me.chkProducers.Name = "chkProducers" - Me.chkProducers.Size = New System.Drawing.Size(77, 17) - Me.chkProducers.TabIndex = 23 - Me.chkProducers.Text = "Producers" - Me.chkProducers.UseVisualStyleBackColor = True - ' - 'chkFullCast - ' - Me.chkFullCast.AutoSize = True - Me.chkFullCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkFullCast.Location = New System.Drawing.Point(237, 70) - Me.chkFullCast.Name = "chkFullCast" - Me.chkFullCast.Size = New System.Drawing.Size(107, 17) - Me.chkFullCast.TabIndex = 19 - Me.chkFullCast.Text = "Scrape Full Cast" - Me.chkFullCast.UseVisualStyleBackColor = True - ' - 'chkWriters - ' - Me.chkWriters.AutoSize = True - Me.chkWriters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkWriters.Location = New System.Drawing.Point(131, 121) - Me.chkWriters.Name = "chkWriters" - Me.chkWriters.Size = New System.Drawing.Size(63, 17) - Me.chkWriters.TabIndex = 14 - Me.chkWriters.Text = "Writers" - Me.chkWriters.UseVisualStyleBackColor = True - ' - 'chkStudio - ' - Me.chkStudio.AutoSize = True - Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkStudio.Location = New System.Drawing.Point(131, 19) - Me.chkStudio.Name = "chkStudio" - Me.chkStudio.Size = New System.Drawing.Size(60, 17) - Me.chkStudio.TabIndex = 8 - Me.chkStudio.Text = "Studio" - Me.chkStudio.UseVisualStyleBackColor = True - ' - 'chkRuntime - ' - Me.chkRuntime.AutoSize = True - Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkRuntime.Location = New System.Drawing.Point(6, 104) - Me.chkRuntime.Name = "chkRuntime" - Me.chkRuntime.Size = New System.Drawing.Size(69, 17) - Me.chkRuntime.TabIndex = 5 - Me.chkRuntime.Text = "Runtime" - Me.chkRuntime.UseVisualStyleBackColor = True - ' - 'chkFullCrew - ' - Me.chkFullCrew.AutoSize = True - Me.chkFullCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkFullCrew.Location = New System.Drawing.Point(237, 87) - Me.chkFullCrew.Name = "chkFullCrew" - Me.chkFullCrew.Size = New System.Drawing.Size(111, 17) - Me.chkFullCrew.TabIndex = 20 - Me.chkFullCrew.Text = "Scrape Full Crew" - Me.chkFullCrew.UseVisualStyleBackColor = True - ' - 'chkPlot - ' - Me.chkPlot.AutoSize = True - Me.chkPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkPlot.Location = New System.Drawing.Point(131, 70) - Me.chkPlot.Name = "chkPlot" - Me.chkPlot.Size = New System.Drawing.Size(46, 17) - Me.chkPlot.TabIndex = 11 - Me.chkPlot.Text = "Plot" - Me.chkPlot.UseVisualStyleBackColor = True - ' - 'chkOutline - ' - Me.chkOutline.AutoSize = True - Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOutline.Location = New System.Drawing.Point(131, 53) - Me.chkOutline.Name = "chkOutline" - Me.chkOutline.Size = New System.Drawing.Size(65, 17) - Me.chkOutline.TabIndex = 10 - Me.chkOutline.Text = "Outline" - Me.chkOutline.UseVisualStyleBackColor = True - ' - 'chkGenre - ' - Me.chkGenre.AutoSize = True - Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkGenre.Location = New System.Drawing.Point(131, 138) - Me.chkGenre.Name = "chkGenre" - Me.chkGenre.Size = New System.Drawing.Size(57, 17) - Me.chkGenre.TabIndex = 15 - Me.chkGenre.Text = "Genre" - Me.chkGenre.UseVisualStyleBackColor = True - ' - 'chkDirector - ' - Me.chkDirector.AutoSize = True - Me.chkDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkDirector.Location = New System.Drawing.Point(131, 104) - Me.chkDirector.Name = "chkDirector" - Me.chkDirector.Size = New System.Drawing.Size(67, 17) - Me.chkDirector.TabIndex = 13 - Me.chkDirector.Text = "Director" - Me.chkDirector.UseVisualStyleBackColor = True - ' - 'chkTagline - ' - Me.chkTagline.AutoSize = True - Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTagline.Location = New System.Drawing.Point(131, 36) - Me.chkTagline.Name = "chkTagline" - Me.chkTagline.Size = New System.Drawing.Size(63, 17) - Me.chkTagline.TabIndex = 9 - Me.chkTagline.Text = "Tagline" - Me.chkTagline.UseVisualStyleBackColor = True - ' - 'chkCast - ' - Me.chkCast.AutoSize = True - Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCast.Location = New System.Drawing.Point(131, 87) - Me.chkCast.Name = "chkCast" - Me.chkCast.Size = New System.Drawing.Size(48, 17) - Me.chkCast.TabIndex = 12 - Me.chkCast.Text = "Cast" - Me.chkCast.UseVisualStyleBackColor = True - ' - 'chkVotes - ' - Me.chkVotes.AutoSize = True - Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkVotes.Location = New System.Drawing.Point(6, 138) - Me.chkVotes.Name = "chkVotes" - Me.chkVotes.Size = New System.Drawing.Size(55, 17) - Me.chkVotes.TabIndex = 7 - Me.chkVotes.Text = "Votes" - Me.chkVotes.UseVisualStyleBackColor = True - ' - 'chkTrailer - ' - Me.chkTrailer.AutoSize = True - Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTrailer.Location = New System.Drawing.Point(237, 36) - Me.chkTrailer.Name = "chkTrailer" - Me.chkTrailer.Size = New System.Drawing.Size(57, 17) - Me.chkTrailer.TabIndex = 17 - Me.chkTrailer.Text = "Trailer" - Me.chkTrailer.UseVisualStyleBackColor = True - ' - 'chkRating - ' - Me.chkRating.AutoSize = True - Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkRating.Location = New System.Drawing.Point(6, 121) - Me.chkRating.Name = "chkRating" - Me.chkRating.Size = New System.Drawing.Size(60, 17) - Me.chkRating.TabIndex = 6 - Me.chkRating.Text = "Rating" - Me.chkRating.UseVisualStyleBackColor = True - ' - 'chkRelease - ' - Me.chkRelease.AutoSize = True - Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkRelease.Location = New System.Drawing.Point(6, 87) - Me.chkRelease.Name = "chkRelease" - Me.chkRelease.Size = New System.Drawing.Size(92, 17) - Me.chkRelease.TabIndex = 4 - Me.chkRelease.Text = "Release Date" - Me.chkRelease.UseVisualStyleBackColor = True - ' - 'chkMPAA - ' - Me.chkMPAA.AutoSize = True - Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMPAA.Location = New System.Drawing.Point(6, 53) - Me.chkMPAA.Name = "chkMPAA" - Me.chkMPAA.Size = New System.Drawing.Size(56, 17) - Me.chkMPAA.TabIndex = 2 - Me.chkMPAA.Text = "MPAA" - Me.chkMPAA.UseVisualStyleBackColor = True - ' - 'chkYear - ' - Me.chkYear.AutoSize = True - Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkYear.Location = New System.Drawing.Point(6, 36) - Me.chkYear.Name = "chkYear" - Me.chkYear.Size = New System.Drawing.Size(47, 17) - Me.chkYear.TabIndex = 1 - Me.chkYear.Text = "Year" - Me.chkYear.UseVisualStyleBackColor = True - ' - 'chkTitle - ' - Me.chkTitle.AutoSize = True - Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTitle.Location = New System.Drawing.Point(6, 19) - Me.chkTitle.Name = "chkTitle" - Me.chkTitle.Size = New System.Drawing.Size(47, 17) - Me.chkTitle.TabIndex = 0 - Me.chkTitle.Text = "Title" - Me.chkTitle.UseVisualStyleBackColor = True - ' - 'frmInfoSettingsHolder - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.BackColor = System.Drawing.Color.White - Me.ClientSize = New System.Drawing.Size(652, 388) - Me.Controls.Add(Me.pnlSettings) - Me.Controls.Add(Me.lblVersion) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "frmInfoSettingsHolder" - Me.ShowInTaskbar = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Scraper Setup" - Me.GroupBox30.ResumeLayout(False) - Me.GroupBox30.PerformLayout() - Me.GroupBox15.ResumeLayout(False) - Me.Panel1.ResumeLayout(False) - Me.Panel1.PerformLayout() - Me.pnlSettings.ResumeLayout(False) - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() - Me.gbOptions.ResumeLayout(False) - Me.gbOptions.PerformLayout() - Me.ResumeLayout(False) + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtIMDBURL = New System.Windows.Forms.TextBox() + Me.GroupBox15 = New System.Windows.Forms.GroupBox() + Me.chkOFDBGenre = New System.Windows.Forms.CheckBox() + Me.chkOFDBPlot = New System.Windows.Forms.CheckBox() + Me.chkOFDBOutline = New System.Windows.Forms.CheckBox() + Me.chkOFDBTitle = New System.Windows.Forms.CheckBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCertification = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkTop250 = New System.Windows.Forms.CheckBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkMusicBy = New System.Windows.Forms.CheckBox() + Me.chkProducers = New System.Windows.Forms.CheckBox() + Me.chkFullCast = New System.Windows.Forms.CheckBox() + Me.chkWriters = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkFullCrew = New System.Windows.Forms.CheckBox() + Me.chkPlot = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkDirector = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.GroupBox30.SuspendLayout() + Me.GroupBox15.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtIMDBURL) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(213, 69) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "IMDB" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(73, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "IMDB Mirror:" + ' + 'txtIMDBURL + ' + Me.txtIMDBURL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtIMDBURL.Location = New System.Drawing.Point(8, 32) + Me.txtIMDBURL.Name = "txtIMDBURL" + Me.txtIMDBURL.Size = New System.Drawing.Size(192, 22) + Me.txtIMDBURL.TabIndex = 1 + ' + 'GroupBox15 + ' + Me.GroupBox15.Controls.Add(Me.chkOFDBGenre) + Me.GroupBox15.Controls.Add(Me.chkOFDBPlot) + Me.GroupBox15.Controls.Add(Me.chkOFDBOutline) + Me.GroupBox15.Controls.Add(Me.chkOFDBTitle) + Me.GroupBox15.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox15.Location = New System.Drawing.Point(8, 114) + Me.GroupBox15.Name = "GroupBox15" + Me.GroupBox15.Size = New System.Drawing.Size(213, 87) + Me.GroupBox15.TabIndex = 2 + Me.GroupBox15.TabStop = False + Me.GroupBox15.Text = "OFDB (German)" + ' + 'chkOFDBGenre + ' + Me.chkOFDBGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBGenre.Location = New System.Drawing.Point(6, 65) + Me.chkOFDBGenre.Name = "chkOFDBGenre" + Me.chkOFDBGenre.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBGenre.TabIndex = 3 + Me.chkOFDBGenre.Text = "Use OFDB Genre" + Me.chkOFDBGenre.UseVisualStyleBackColor = True + ' + 'chkOFDBPlot + ' + Me.chkOFDBPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBPlot.Location = New System.Drawing.Point(6, 49) + Me.chkOFDBPlot.Name = "chkOFDBPlot" + Me.chkOFDBPlot.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBPlot.TabIndex = 2 + Me.chkOFDBPlot.Text = "Use OFDB Plot" + Me.chkOFDBPlot.UseVisualStyleBackColor = True + ' + 'chkOFDBOutline + ' + Me.chkOFDBOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBOutline.Location = New System.Drawing.Point(6, 33) + Me.chkOFDBOutline.Name = "chkOFDBOutline" + Me.chkOFDBOutline.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBOutline.TabIndex = 1 + Me.chkOFDBOutline.Text = "Use OFDB Outline" + Me.chkOFDBOutline.UseVisualStyleBackColor = True + ' + 'chkOFDBTitle + ' + Me.chkOFDBTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBTitle.Location = New System.Drawing.Point(6, 17) + Me.chkOFDBTitle.Name = "chkOFDBTitle" + Me.chkOFDBTitle.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBTitle.TabIndex = 0 + Me.chkOFDBTitle.Text = "Use OFDB Title" + Me.chkOFDBTitle.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.GroupBox15) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCertification) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkTop250) + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkMusicBy) + Me.gbOptions.Controls.Add(Me.chkProducers) + Me.gbOptions.Controls.Add(Me.chkFullCast) + Me.gbOptions.Controls.Add(Me.chkWriters) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkFullCrew) + Me.gbOptions.Controls.Add(Me.chkPlot) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkDirector) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(227, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(387, 161) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCertification + ' + Me.chkCertification.AutoSize = True + Me.chkCertification.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCertification.Location = New System.Drawing.Point(6, 70) + Me.chkCertification.Name = "chkCertification" + Me.chkCertification.Size = New System.Drawing.Size(89, 17) + Me.chkCertification.TabIndex = 3 + Me.chkCertification.Text = "Certification" + Me.chkCertification.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(237, 53) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkTop250 + ' + Me.chkTop250.AutoSize = True + Me.chkTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTop250.Location = New System.Drawing.Point(237, 19) + Me.chkTop250.Name = "chkTop250" + Me.chkTop250.Size = New System.Drawing.Size(66, 17) + Me.chkTop250.TabIndex = 16 + Me.chkTop250.Text = "Top 250" + Me.chkTop250.UseVisualStyleBackColor = True + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Enabled = False + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(246, 104) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(85, 17) + Me.chkCrew.TabIndex = 21 + Me.chkCrew.Text = "Other Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkMusicBy + ' + Me.chkMusicBy.AutoSize = True + Me.chkMusicBy.Enabled = False + Me.chkMusicBy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMusicBy.Location = New System.Drawing.Point(246, 121) + Me.chkMusicBy.Name = "chkMusicBy" + Me.chkMusicBy.Size = New System.Drawing.Size(71, 17) + Me.chkMusicBy.TabIndex = 22 + Me.chkMusicBy.Text = "Music By" + Me.chkMusicBy.UseVisualStyleBackColor = True + ' + 'chkProducers + ' + Me.chkProducers.AutoSize = True + Me.chkProducers.Enabled = False + Me.chkProducers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkProducers.Location = New System.Drawing.Point(246, 138) + Me.chkProducers.Name = "chkProducers" + Me.chkProducers.Size = New System.Drawing.Size(77, 17) + Me.chkProducers.TabIndex = 23 + Me.chkProducers.Text = "Producers" + Me.chkProducers.UseVisualStyleBackColor = True + ' + 'chkFullCast + ' + Me.chkFullCast.AutoSize = True + Me.chkFullCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCast.Location = New System.Drawing.Point(237, 70) + Me.chkFullCast.Name = "chkFullCast" + Me.chkFullCast.Size = New System.Drawing.Size(107, 17) + Me.chkFullCast.TabIndex = 19 + Me.chkFullCast.Text = "Scrape Full Cast" + Me.chkFullCast.UseVisualStyleBackColor = True + ' + 'chkWriters + ' + Me.chkWriters.AutoSize = True + Me.chkWriters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkWriters.Location = New System.Drawing.Point(131, 121) + Me.chkWriters.Name = "chkWriters" + Me.chkWriters.Size = New System.Drawing.Size(63, 17) + Me.chkWriters.TabIndex = 14 + Me.chkWriters.Text = "Writers" + Me.chkWriters.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 104) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkFullCrew + ' + Me.chkFullCrew.AutoSize = True + Me.chkFullCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCrew.Location = New System.Drawing.Point(237, 87) + Me.chkFullCrew.Name = "chkFullCrew" + Me.chkFullCrew.Size = New System.Drawing.Size(111, 17) + Me.chkFullCrew.TabIndex = 20 + Me.chkFullCrew.Text = "Scrape Full Crew" + Me.chkFullCrew.UseVisualStyleBackColor = True + ' + 'chkPlot + ' + Me.chkPlot.AutoSize = True + Me.chkPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkPlot.Location = New System.Drawing.Point(131, 70) + Me.chkPlot.Name = "chkPlot" + Me.chkPlot.Size = New System.Drawing.Size(46, 17) + Me.chkPlot.TabIndex = 11 + Me.chkPlot.Text = "Plot" + Me.chkPlot.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 138) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkDirector + ' + Me.chkDirector.AutoSize = True + Me.chkDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDirector.Location = New System.Drawing.Point(131, 104) + Me.chkDirector.Name = "chkDirector" + Me.chkDirector.Size = New System.Drawing.Size(67, 17) + Me.chkDirector.TabIndex = 13 + Me.chkDirector.Text = "Director" + Me.chkDirector.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 87) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 138) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(237, 36) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 121) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 87) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'frmInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.GroupBox15.ResumeLayout(False) + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + Me.ResumeLayout(False) - End Sub + End Sub Friend WithEvents lblVersion As System.Windows.Forms.Label Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox Friend WithEvents Label18 As System.Windows.Forms.Label diff --git a/Addons/scraper.EmberCore/frmInfoSettingsHolder.resx b/Addons/scraper.EmberCore/frmInfoSettingsHolder.resx index c37233a..1a3b6b2 100644 --- a/Addons/scraper.EmberCore/frmInfoSettingsHolder.resx +++ b/Addons/scraper.EmberCore/frmInfoSettingsHolder.resx @@ -120,76 +120,74 @@ - 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 + rkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A - ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje - PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH - m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF - jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh - /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y - uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX - g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT - uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX - IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g - GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 - ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + 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 - RK5CYII= + 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 \ No newline at end of file diff --git a/Addons/scraper.EmberCore/frmInfoSettingsHolder.vb b/Addons/scraper.EmberCore/frmInfoSettingsHolder.vb index 21a3d0b..0a2f1c0 100644 --- a/Addons/scraper.EmberCore/frmInfoSettingsHolder.vb +++ b/Addons/scraper.EmberCore/frmInfoSettingsHolder.vb @@ -34,23 +34,25 @@ Public Class frmInfoSettingsHolder #Region "Methods" Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click - Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder - If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then - ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order - ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 - RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) - orderChanged() - End If + Dim order As Integer = ModulesManager.Instance.externalDataScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + + 'If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ' ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ' ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + ' RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + ' orderChanged() + 'End If End Sub Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click - Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder - If order > 0 Then - ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order - ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 - RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) - orderChanged() - End If + Dim order As Integer = ModulesManager.Instance.externalDataScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + 'Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + ' If order > 0 Then + ' ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ' ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + ' RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + ' orderChanged() + ' End If End Sub Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged diff --git a/Addons/scraper.EmberCore/frmMediaSettingsHolder.Designer.vb b/Addons/scraper.EmberCore/frmMediaSettingsHolder.Designer.vb index b5e621a..2c09e78 100644 --- a/Addons/scraper.EmberCore/frmMediaSettingsHolder.Designer.vb +++ b/Addons/scraper.EmberCore/frmMediaSettingsHolder.Designer.vb @@ -22,445 +22,471 @@ Partial Class frmMediaSettingsHolder 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMediaSettingsHolder)) - Me.pnlSettings = New System.Windows.Forms.Panel() - Me.Label1 = New System.Windows.Forms.Label() - Me.PictureBox1 = New System.Windows.Forms.PictureBox() - Me.GroupBox3 = New System.Windows.Forms.GroupBox() - Me.GroupBox4 = New System.Windows.Forms.GroupBox() - Me.cbManualETSize = New System.Windows.Forms.ComboBox() - Me.grpSaveFanart = New System.Windows.Forms.GroupBox() - Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() - Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() - Me.GroupBox9 = New System.Windows.Forms.GroupBox() - Me.chkUseMPDB = New System.Windows.Forms.CheckBox() - Me.chkUseTMDB = New System.Windows.Forms.CheckBox() - Me.chkUseIMPA = New System.Windows.Forms.CheckBox() - Me.chkScrapePoster = New System.Windows.Forms.CheckBox() - Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() - Me.GroupBox1 = New System.Windows.Forms.GroupBox() - Me.GroupBox5 = New System.Windows.Forms.GroupBox() - Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() - Me.Label2 = New System.Windows.Forms.Label() - Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() - Me.Label23 = New System.Windows.Forms.Label() - Me.txtTimeout = New System.Windows.Forms.TextBox() - Me.GroupBox2 = New System.Windows.Forms.GroupBox() - Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() - Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() - Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() - Me.Panel2 = New System.Windows.Forms.Panel() - Me.Label3 = New System.Windows.Forms.Label() - Me.btnDown = New System.Windows.Forms.Button() - Me.btnUp = New System.Windows.Forms.Button() - Me.cbEnabled = New System.Windows.Forms.CheckBox() - Me.pnlSettings.SuspendLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() - Me.GroupBox3.SuspendLayout() - Me.GroupBox4.SuspendLayout() - Me.grpSaveFanart.SuspendLayout() - Me.GroupBox9.SuspendLayout() - Me.GroupBox1.SuspendLayout() - Me.GroupBox5.SuspendLayout() - Me.GroupBox2.SuspendLayout() - Me.Panel2.SuspendLayout() - Me.SuspendLayout() - ' - 'pnlSettings - ' - Me.pnlSettings.Controls.Add(Me.Label1) - Me.pnlSettings.Controls.Add(Me.PictureBox1) - Me.pnlSettings.Controls.Add(Me.GroupBox3) - Me.pnlSettings.Controls.Add(Me.GroupBox1) - Me.pnlSettings.Controls.Add(Me.Panel2) - Me.pnlSettings.Location = New System.Drawing.Point(12, 4) - Me.pnlSettings.Name = "pnlSettings" - Me.pnlSettings.Size = New System.Drawing.Size(617, 369) - Me.pnlSettings.TabIndex = 0 - ' - 'Label1 - ' - Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label1.ForeColor = System.Drawing.Color.Blue - Me.Label1.Location = New System.Drawing.Point(37, 337) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(225, 31) - Me.Label1.TabIndex = 3 - Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ - "for more options." - Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'PictureBox1 - ' - Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) - Me.PictureBox1.Location = New System.Drawing.Point(3, 335) - Me.PictureBox1.Name = "PictureBox1" - Me.PictureBox1.Size = New System.Drawing.Size(30, 31) - Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage - Me.PictureBox1.TabIndex = 94 - Me.PictureBox1.TabStop = False - ' - 'GroupBox3 - ' - Me.GroupBox3.Controls.Add(Me.GroupBox4) - Me.GroupBox3.Controls.Add(Me.grpSaveFanart) - Me.GroupBox3.Controls.Add(Me.GroupBox9) - Me.GroupBox3.Controls.Add(Me.chkScrapePoster) - Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) - Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.GroupBox3.Location = New System.Drawing.Point(15, 31) - Me.GroupBox3.Name = "GroupBox3" - Me.GroupBox3.Size = New System.Drawing.Size(587, 131) - Me.GroupBox3.TabIndex = 1 - Me.GroupBox3.TabStop = False - Me.GroupBox3.Text = "Images" - ' - 'GroupBox4 - ' - Me.GroupBox4.Controls.Add(Me.cbManualETSize) - Me.GroupBox4.Location = New System.Drawing.Point(374, 11) - Me.GroupBox4.Name = "GroupBox4" - Me.GroupBox4.Size = New System.Drawing.Size(160, 80) - Me.GroupBox4.TabIndex = 4 - Me.GroupBox4.TabStop = False - Me.GroupBox4.Text = "TMDB Extrathumbs Size:" - ' - 'cbManualETSize - ' - Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbManualETSize.Enabled = False - Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.cbManualETSize.FormattingEnabled = True - Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) - Me.cbManualETSize.Location = New System.Drawing.Point(21, 35) - Me.cbManualETSize.Name = "cbManualETSize" - Me.cbManualETSize.Size = New System.Drawing.Size(121, 21) - Me.cbManualETSize.TabIndex = 0 - ' - 'grpSaveFanart - ' - Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) - Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) - Me.grpSaveFanart.Enabled = False - Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) - Me.grpSaveFanart.Name = "grpSaveFanart" - Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) - Me.grpSaveFanart.TabIndex = 2 - Me.grpSaveFanart.TabStop = False - Me.grpSaveFanart.Text = "Save Fanart In:" - ' - 'optFanartFolderExtraFanart - ' - Me.optFanartFolderExtraFanart.AutoSize = True - Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) - Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" - Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) - Me.optFanartFolderExtraFanart.TabIndex = 1 - Me.optFanartFolderExtraFanart.TabStop = True - Me.optFanartFolderExtraFanart.Text = "\extrafanart" - Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True - ' - 'optFanartFolderExtraThumbs - ' - Me.optFanartFolderExtraThumbs.AutoSize = True - Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) - Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" - Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) - Me.optFanartFolderExtraThumbs.TabIndex = 0 - Me.optFanartFolderExtraThumbs.TabStop = True - Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" - Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True - ' - 'GroupBox9 - ' - Me.GroupBox9.Controls.Add(Me.chkUseMPDB) - Me.GroupBox9.Controls.Add(Me.chkUseTMDB) - Me.GroupBox9.Controls.Add(Me.chkUseIMPA) - Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.GroupBox9.Location = New System.Drawing.Point(165, 11) - Me.GroupBox9.Name = "GroupBox9" - Me.GroupBox9.Size = New System.Drawing.Size(160, 80) - Me.GroupBox9.TabIndex = 3 - Me.GroupBox9.TabStop = False - Me.GroupBox9.Text = "Get Images From:" - ' - 'chkUseMPDB - ' - Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) - Me.chkUseMPDB.Name = "chkUseMPDB" - Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) - Me.chkUseMPDB.TabIndex = 2 - Me.chkUseMPDB.Text = "MoviePosterDB.com" - Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkUseMPDB.UseVisualStyleBackColor = True - ' - 'chkUseTMDB - ' - Me.chkUseTMDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkUseTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkUseTMDB.Location = New System.Drawing.Point(6, 18) - Me.chkUseTMDB.Name = "chkUseTMDB" - Me.chkUseTMDB.Size = New System.Drawing.Size(149, 19) - Me.chkUseTMDB.TabIndex = 0 - Me.chkUseTMDB.Text = "themoviedb.org" - Me.chkUseTMDB.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkUseTMDB.UseVisualStyleBackColor = True - ' - 'chkUseIMPA - ' - Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) - Me.chkUseIMPA.Name = "chkUseIMPA" - Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) - Me.chkUseIMPA.TabIndex = 1 - Me.chkUseIMPA.Text = "IMPAwards.com" - Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkUseIMPA.UseVisualStyleBackColor = True - ' - 'chkScrapePoster - ' - Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) - Me.chkScrapePoster.Name = "chkScrapePoster" - Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) - Me.chkScrapePoster.TabIndex = 0 - Me.chkScrapePoster.Text = "Get Posters" - Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkScrapePoster.UseVisualStyleBackColor = True - ' - 'chkScrapeFanart - ' - Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) - Me.chkScrapeFanart.Name = "chkScrapeFanart" - Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) - Me.chkScrapeFanart.TabIndex = 1 - Me.chkScrapeFanart.Text = "Get Fanart" - Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkScrapeFanart.UseVisualStyleBackColor = True - ' - 'GroupBox1 - ' - Me.GroupBox1.Controls.Add(Me.GroupBox5) - Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) - Me.GroupBox1.Controls.Add(Me.Label23) - Me.GroupBox1.Controls.Add(Me.txtTimeout) - Me.GroupBox1.Controls.Add(Me.GroupBox2) - Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.GroupBox1.Location = New System.Drawing.Point(15, 168) - Me.GroupBox1.Name = "GroupBox1" - Me.GroupBox1.Size = New System.Drawing.Size(587, 112) - Me.GroupBox1.TabIndex = 2 - Me.GroupBox1.TabStop = False - Me.GroupBox1.Text = "Trailers" - Me.GroupBox1.UseCompatibleTextRendering = True - ' - 'GroupBox5 - ' - Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) - Me.GroupBox5.Controls.Add(Me.Label2) - Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) - Me.GroupBox5.Location = New System.Drawing.Point(374, 12) - Me.GroupBox5.Name = "GroupBox5" - Me.GroupBox5.Size = New System.Drawing.Size(161, 94) - Me.GroupBox5.TabIndex = 4 - Me.GroupBox5.TabStop = False - Me.GroupBox5.Text = "Youtube/TMDB Trailer:" - ' - 'cbTrailerTMDBPref - ' - Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbTrailerTMDBPref.Enabled = False - Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) - Me.cbTrailerTMDBPref.FormattingEnabled = True - Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) - Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) - Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" - Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) - Me.cbTrailerTMDBPref.TabIndex = 1 - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) - Me.Label2.Location = New System.Drawing.Point(26, 26) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(111, 13) - Me.Label2.TabIndex = 0 - Me.Label2.Text = "Preferred Language:" - ' - 'chkDownloadTrailer - ' - Me.chkDownloadTrailer.AutoSize = True - Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) - Me.chkDownloadTrailer.Name = "chkDownloadTrailer" - Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) - Me.chkDownloadTrailer.TabIndex = 0 - Me.chkDownloadTrailer.Text = "Enable Trailer Support" - Me.chkDownloadTrailer.UseVisualStyleBackColor = True - ' - 'Label23 - ' - Me.Label23.AutoSize = True - Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label23.Location = New System.Drawing.Point(21, 43) - Me.Label23.Name = "Label23" - Me.Label23.Size = New System.Drawing.Size(51, 13) - Me.Label23.TabIndex = 1 - Me.Label23.Text = "Timeout:" - ' - 'txtTimeout - ' - Me.txtTimeout.Enabled = False - Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtTimeout.Location = New System.Drawing.Point(82, 39) - Me.txtTimeout.Name = "txtTimeout" - Me.txtTimeout.Size = New System.Drawing.Size(50, 22) - Me.txtTimeout.TabIndex = 2 - ' - 'GroupBox2 - ' - Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) - Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) - Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) - Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.GroupBox2.Location = New System.Drawing.Point(165, 12) - Me.GroupBox2.Name = "GroupBox2" - Me.GroupBox2.Size = New System.Drawing.Size(161, 94) - Me.GroupBox2.TabIndex = 3 - Me.GroupBox2.TabStop = False - Me.GroupBox2.Text = "Supported Sites:" - ' - 'chkTrailerTMDBXBMC - ' - Me.chkTrailerTMDBXBMC.AutoSize = True - Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) - Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" - Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) - Me.chkTrailerTMDBXBMC.TabIndex = 1 - Me.chkTrailerTMDBXBMC.Text = "XBMC Format" - Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True - ' - 'chkTrailerIMDB - ' - Me.chkTrailerIMDB.AutoSize = True - Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) - Me.chkTrailerIMDB.Name = "chkTrailerIMDB" - Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) - Me.chkTrailerIMDB.TabIndex = 2 - Me.chkTrailerIMDB.Text = "IMDB" - Me.chkTrailerIMDB.UseVisualStyleBackColor = True - ' - 'chkTrailerTMDB - ' - Me.chkTrailerTMDB.AutoSize = True - Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) - Me.chkTrailerTMDB.Name = "chkTrailerTMDB" - Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) - Me.chkTrailerTMDB.TabIndex = 0 - Me.chkTrailerTMDB.Text = "Youtube/TMDB" - Me.chkTrailerTMDB.UseVisualStyleBackColor = True - ' - 'Panel2 - ' - Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke - Me.Panel2.Controls.Add(Me.Label3) - Me.Panel2.Controls.Add(Me.btnDown) - Me.Panel2.Controls.Add(Me.btnUp) - Me.Panel2.Controls.Add(Me.cbEnabled) - Me.Panel2.Location = New System.Drawing.Point(0, 0) - Me.Panel2.Name = "Panel2" - Me.Panel2.Size = New System.Drawing.Size(1125, 25) - Me.Panel2.TabIndex = 0 - ' - 'Label3 - ' - Me.Label3.AutoSize = True - Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label3.Location = New System.Drawing.Point(500, 7) - Me.Label3.Name = "Label3" - Me.Label3.Size = New System.Drawing.Size(58, 12) - Me.Label3.TabIndex = 1 - Me.Label3.Text = "Scraper order" - ' - 'btnDown - ' - Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) - Me.btnDown.Location = New System.Drawing.Point(591, 1) - Me.btnDown.Name = "btnDown" - Me.btnDown.Size = New System.Drawing.Size(23, 23) - Me.btnDown.TabIndex = 3 - Me.btnDown.UseVisualStyleBackColor = True - ' - 'btnUp - ' - Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) - Me.btnUp.Location = New System.Drawing.Point(566, 1) - Me.btnUp.Name = "btnUp" - Me.btnUp.Size = New System.Drawing.Size(23, 23) - Me.btnUp.TabIndex = 2 - Me.btnUp.UseVisualStyleBackColor = True - ' - 'cbEnabled - ' - Me.cbEnabled.AutoSize = True - Me.cbEnabled.Location = New System.Drawing.Point(10, 5) - Me.cbEnabled.Name = "cbEnabled" - Me.cbEnabled.Size = New System.Drawing.Size(68, 17) - Me.cbEnabled.TabIndex = 0 - Me.cbEnabled.Text = "Enabled" - Me.cbEnabled.UseVisualStyleBackColor = True - ' - 'frmMediaSettingsHolder - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.BackColor = System.Drawing.Color.White - Me.ClientSize = New System.Drawing.Size(652, 388) - Me.Controls.Add(Me.pnlSettings) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "frmMediaSettingsHolder" - Me.ShowInTaskbar = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Scraper Setup" - Me.pnlSettings.ResumeLayout(False) - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() - Me.GroupBox3.ResumeLayout(False) - Me.GroupBox4.ResumeLayout(False) - Me.grpSaveFanart.ResumeLayout(False) - Me.grpSaveFanart.PerformLayout() - Me.GroupBox9.ResumeLayout(False) - Me.GroupBox1.ResumeLayout(False) - Me.GroupBox1.PerformLayout() - Me.GroupBox5.ResumeLayout(False) - Me.GroupBox5.PerformLayout() - Me.GroupBox2.ResumeLayout(False) - Me.GroupBox2.PerformLayout() - Me.Panel2.ResumeLayout(False) - Me.Panel2.PerformLayout() - Me.ResumeLayout(False) + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMediaSettingsHolder)) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.cbActorThumbsSize = New System.Windows.Forms.ComboBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.cbManualETSize = New System.Windows.Forms.ComboBox() + Me.grpSaveFanart = New System.Windows.Forms.GroupBox() + Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() + Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkUseMPDB = New System.Windows.Forms.CheckBox() + Me.chkUseTMDB = New System.Windows.Forms.CheckBox() + Me.chkUseIMPA = New System.Windows.Forms.CheckBox() + Me.chkScrapePoster = New System.Windows.Forms.CheckBox() + Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.txtTimeout = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() + Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() + Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.grpSaveFanart.SuspendLayout() + Me.GroupBox9.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.GroupBox3) + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Panel2) + Me.pnlSettings.Location = New System.Drawing.Point(12, 4) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 94 + Me.PictureBox1.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.GroupBox6) + Me.GroupBox3.Controls.Add(Me.GroupBox4) + Me.GroupBox3.Controls.Add(Me.grpSaveFanart) + Me.GroupBox3.Controls.Add(Me.GroupBox9) + Me.GroupBox3.Controls.Add(Me.chkScrapePoster) + Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(15, 31) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(587, 177) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Images" + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.cbActorThumbsSize) + Me.GroupBox6.Location = New System.Drawing.Point(374, 98) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(160, 73) + Me.GroupBox6.TabIndex = 5 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Actor Thumbs Size:" + ' + 'cbActorThumbsSize + ' + Me.cbActorThumbsSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbActorThumbsSize.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbActorThumbsSize.FormattingEnabled = True + Me.cbActorThumbsSize.Items.AddRange(New Object() {"SY275_SX400", "SY720_SX1080", "SY1080_SX1920"}) + Me.cbActorThumbsSize.Location = New System.Drawing.Point(21, 35) + Me.cbActorThumbsSize.Name = "cbActorThumbsSize" + Me.cbActorThumbsSize.Size = New System.Drawing.Size(121, 21) + Me.cbActorThumbsSize.TabIndex = 0 + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.cbManualETSize) + Me.GroupBox4.Location = New System.Drawing.Point(374, 11) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(160, 80) + Me.GroupBox4.TabIndex = 4 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "TMDB Extrathumbs Size:" + ' + 'cbManualETSize + ' + Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbManualETSize.Enabled = False + Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbManualETSize.FormattingEnabled = True + Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) + Me.cbManualETSize.Location = New System.Drawing.Point(21, 35) + Me.cbManualETSize.Name = "cbManualETSize" + Me.cbManualETSize.Size = New System.Drawing.Size(121, 21) + Me.cbManualETSize.TabIndex = 0 + ' + 'grpSaveFanart + ' + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) + Me.grpSaveFanart.Enabled = False + Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) + Me.grpSaveFanart.Name = "grpSaveFanart" + Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) + Me.grpSaveFanart.TabIndex = 2 + Me.grpSaveFanart.TabStop = False + Me.grpSaveFanart.Text = "Save Fanart In:" + ' + 'optFanartFolderExtraFanart + ' + Me.optFanartFolderExtraFanart.AutoSize = True + Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) + Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" + Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) + Me.optFanartFolderExtraFanart.TabIndex = 1 + Me.optFanartFolderExtraFanart.TabStop = True + Me.optFanartFolderExtraFanart.Text = "\extrafanart" + Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True + ' + 'optFanartFolderExtraThumbs + ' + Me.optFanartFolderExtraThumbs.AutoSize = True + Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) + Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" + Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) + Me.optFanartFolderExtraThumbs.TabIndex = 0 + Me.optFanartFolderExtraThumbs.TabStop = True + Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" + Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkUseMPDB) + Me.GroupBox9.Controls.Add(Me.chkUseTMDB) + Me.GroupBox9.Controls.Add(Me.chkUseIMPA) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(165, 11) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(160, 80) + Me.GroupBox9.TabIndex = 3 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Get Images From:" + ' + 'chkUseMPDB + ' + Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) + Me.chkUseMPDB.Name = "chkUseMPDB" + Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) + Me.chkUseMPDB.TabIndex = 2 + Me.chkUseMPDB.Text = "MoviePosterDB.com" + Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.UseVisualStyleBackColor = True + ' + 'chkUseTMDB + ' + Me.chkUseTMDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseTMDB.Location = New System.Drawing.Point(6, 18) + Me.chkUseTMDB.Name = "chkUseTMDB" + Me.chkUseTMDB.Size = New System.Drawing.Size(149, 19) + Me.chkUseTMDB.TabIndex = 0 + Me.chkUseTMDB.Text = "themoviedb.org" + Me.chkUseTMDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseTMDB.UseVisualStyleBackColor = True + ' + 'chkUseIMPA + ' + Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) + Me.chkUseIMPA.Name = "chkUseIMPA" + Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) + Me.chkUseIMPA.TabIndex = 1 + Me.chkUseIMPA.Text = "IMPAwards.com" + Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.UseVisualStyleBackColor = True + ' + 'chkScrapePoster + ' + Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) + Me.chkScrapePoster.Name = "chkScrapePoster" + Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) + Me.chkScrapePoster.TabIndex = 0 + Me.chkScrapePoster.Text = "Get Posters" + Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.UseVisualStyleBackColor = True + ' + 'chkScrapeFanart + ' + Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) + Me.chkScrapeFanart.Name = "chkScrapeFanart" + Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) + Me.chkScrapeFanart.TabIndex = 1 + Me.chkScrapeFanart.Text = "Get Fanart" + Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.GroupBox5) + Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox1.Controls.Add(Me.Label23) + Me.GroupBox1.Controls.Add(Me.txtTimeout) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(15, 214) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(587, 112) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Trailers" + Me.GroupBox1.UseCompatibleTextRendering = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) + Me.GroupBox5.Controls.Add(Me.Label2) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) + Me.GroupBox5.Location = New System.Drawing.Point(374, 12) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(161, 94) + Me.GroupBox5.TabIndex = 4 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Youtube/TMDB Trailer:" + ' + 'cbTrailerTMDBPref + ' + Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerTMDBPref.Enabled = False + Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTrailerTMDBPref.FormattingEnabled = True + Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) + Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" + Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) + Me.cbTrailerTMDBPref.TabIndex = 1 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label2.Location = New System.Drawing.Point(26, 26) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(111, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Preferred Language:" + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label23.Location = New System.Drawing.Point(21, 43) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(51, 13) + Me.Label23.TabIndex = 1 + Me.Label23.Text = "Timeout:" + ' + 'txtTimeout + ' + Me.txtTimeout.Enabled = False + Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTimeout.Location = New System.Drawing.Point(82, 39) + Me.txtTimeout.Name = "txtTimeout" + Me.txtTimeout.Size = New System.Drawing.Size(50, 22) + Me.txtTimeout.TabIndex = 2 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) + Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(165, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(161, 94) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Supported Sites:" + ' + 'chkTrailerTMDBXBMC + ' + Me.chkTrailerTMDBXBMC.AutoSize = True + Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) + Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" + Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) + Me.chkTrailerTMDBXBMC.TabIndex = 1 + Me.chkTrailerTMDBXBMC.Text = "XBMC Format" + Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True + ' + 'chkTrailerIMDB + ' + Me.chkTrailerIMDB.AutoSize = True + Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) + Me.chkTrailerIMDB.Name = "chkTrailerIMDB" + Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) + Me.chkTrailerIMDB.TabIndex = 2 + Me.chkTrailerIMDB.Text = "IMDB" + Me.chkTrailerIMDB.UseVisualStyleBackColor = True + ' + 'chkTrailerTMDB + ' + Me.chkTrailerTMDB.AutoSize = True + Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) + Me.chkTrailerTMDB.Name = "chkTrailerTMDB" + Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) + Me.chkTrailerTMDB.TabIndex = 0 + Me.chkTrailerTMDB.Text = "Youtube/TMDB" + Me.chkTrailerTMDB.UseVisualStyleBackColor = True + ' + 'Panel2 + ' + Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Controls.Add(Me.btnDown) + Me.Panel2.Controls.Add(Me.btnUp) + Me.Panel2.Controls.Add(Me.cbEnabled) + Me.Panel2.Location = New System.Drawing.Point(0, 0) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(1125, 25) + Me.Panel2.TabIndex = 0 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(500, 7) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 12) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'frmMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.grpSaveFanart.ResumeLayout(False) + Me.grpSaveFanart.PerformLayout() + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) - End Sub + End Sub Friend WithEvents pnlSettings As System.Windows.Forms.Panel Friend WithEvents chkScrapeFanart As System.Windows.Forms.CheckBox Friend WithEvents chkScrapePoster As System.Windows.Forms.CheckBox @@ -492,5 +518,7 @@ Partial Class frmMediaSettingsHolder Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox Friend WithEvents cbTrailerTMDBPref As System.Windows.Forms.ComboBox Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents cbActorThumbsSize As System.Windows.Forms.ComboBox End Class \ No newline at end of file diff --git a/Addons/scraper.EmberCore/frmMediaSettingsHolder.resx b/Addons/scraper.EmberCore/frmMediaSettingsHolder.resx index 3c46229..023cf14 100644 --- a/Addons/scraper.EmberCore/frmMediaSettingsHolder.resx +++ b/Addons/scraper.EmberCore/frmMediaSettingsHolder.resx @@ -165,74 +165,73 @@ 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 + 6bKz54D4Hdc/dStsxIkAAAAAAElFTkSuQmCC - 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 + rkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A - ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje - PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH - m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF - jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh - /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y - uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX - g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT - uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX - IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g - GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 - ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC \ No newline at end of file diff --git a/Addons/scraper.EmberCore/frmMediaSettingsHolder.vb b/Addons/scraper.EmberCore/frmMediaSettingsHolder.vb index eb04560..401240a 100644 --- a/Addons/scraper.EmberCore/frmMediaSettingsHolder.vb +++ b/Addons/scraper.EmberCore/frmMediaSettingsHolder.vb @@ -133,14 +133,14 @@ Public Class frmMediaSettingsHolder Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) Me.chkScrapePoster.Text = Master.eLang.GetString(101, "Get Posters") Me.chkScrapeFanart.Text = Master.eLang.GetString(102, "Get Fanart") - Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) - Me.GroupBox3.Text = Master.eLang.GetString(467, "Images", True) - Me.GroupBox4.Text = Master.eLang.GetString(108, "TMDB Extrathumbs Size:") - Me.GroupBox1.Text = Master.eLang.GetString(109, "Trailers") - Me.GroupBox5.Text = Master.eLang.GetString(110, "Youtube/TMDB Trailer:") - Me.chkTrailerTMDBXBMC.Text = Master.eLang.GetString(111, "XBMC Format") - Me.Label2.Text = Master.eLang.GetString(112, "Preferred language") - Me.grpSaveFanart.Text = Master.eLang.GetString(113, "Save Fanart In:") + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + Me.GroupBox3.Text = Master.eLang.GetString(497, "Images", True) + Me.GroupBox4.Text = Master.eLang.GetString(108, "TMDB Extrathumbs Size:") + Me.GroupBox1.Text = Master.eLang.GetString(109, "Trailers") + Me.GroupBox5.Text = Master.eLang.GetString(110, "Youtube/TMDB Trailer:") + Me.chkTrailerTMDBXBMC.Text = Master.eLang.GetString(111, "XBMC Format") + Me.Label2.Text = Master.eLang.GetString(112, "Preferred language") + Me.grpSaveFanart.Text = Master.eLang.GetString(113, "Save Fanart In:") End Sub Private Sub txtTimeout_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTimeout.TextChanged @@ -159,6 +159,10 @@ Public Class frmMediaSettingsHolder RaiseEvent ModuleSettingsChanged() End Sub + Private Sub cbActorThumbsSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbActorThumbsSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + Private Sub cbTrailerTMDBPref_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbTrailerTMDBPref.SelectedIndexChanged RaiseEvent ModuleSettingsChanged() End Sub diff --git a/Addons/scraper.EmberCore/scraper.EmberCore.vbproj b/Addons/scraper.EmberCore/scraper.EmberCore.vbproj index 675af3e..58452a4 100644 --- a/Addons/scraper.EmberCore/scraper.EmberCore.vbproj +++ b/Addons/scraper.EmberCore/scraper.EmberCore.vbproj @@ -298,15 +298,27 @@ + + PreserveNewest + PreserveNewest PreserveNewest - - - + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + Always diff --git a/Addons/scraper.EmberCore/scraperMovieNativeModule.vb b/Addons/scraper.EmberCore/scraperMovieNativeModule.vb index 8385e57..358521f 100644 --- a/Addons/scraper.EmberCore/scraperMovieNativeModule.vb +++ b/Addons/scraper.EmberCore/scraperMovieNativeModule.vb @@ -61,7 +61,9 @@ Public Class EmberNativeScraperModule Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged - Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart #End Region 'Events @@ -181,6 +183,7 @@ Public Class EmberNativeScraperModule _setupPost.chkUseIMPA.Checked = MySettings.UseIMPA _setupPost.chkUseMPDB.Checked = MySettings.UseMPDB _setupPost.cbManualETSize.Text = MySettings.ManualETSize + _setupPost.cbActorThumbsSize.Text = MySettings.ActorThumbsSize _setupPost.txtTimeout.Text = MySettings.TrailerTimeout.ToString _setupPost.chkDownloadTrailer.Checked = MySettings.DownloadTrailers _setupPost.CheckTrailer() @@ -292,6 +295,7 @@ Public Class EmberNativeScraperModule MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + MySettings.ActorThumbsSize = Convert.ToString(AdvancedSettings.GetSetting("ActorThumbsSize", "SY275_SX400")) MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) ConfigScrapeModifier.DoSearch = True @@ -410,11 +414,13 @@ Public Class EmberNativeScraperModule End Try End If End If - If Master.GlobalScrapeMod.Actors AndAlso AdvancedSettings.GetBooleanSetting("ScrapeActorsThumbs", False) Then + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then For Each act As MediaContainers.Person In DBMovie.Movie.Actors Dim img As New Images img.FromWeb(act.Thumb) - img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If Next End If Master.GlobalScrapeMod = saveModifier @@ -465,6 +471,7 @@ Public Class EmberNativeScraperModule AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", MySettings.UseTMDBTrailerXBMC) AdvancedSettings.SetSetting("ManualETSize", MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("ActorThumbsSize", MySettings.ActorThumbsSize.ToString) AdvancedSettings.SetSetting("UseTMDBTrailerPref", MySettings.UseTMDBTrailerPref.ToString) AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) @@ -482,6 +489,7 @@ Public Class EmberNativeScraperModule MySettings.UseIMPA = _setupPost.chkUseIMPA.Checked MySettings.UseMPDB = _setupPost.chkUseMPDB.Checked MySettings.ManualETSize = _setupPost.cbManualETSize.Text + MySettings.ActorThumbsSize = _setupPost.cbActorThumbsSize.Text MySettings.UseTMDBTrailerPref = _setupPost.cbTrailerTMDBPref.Text ConfigScrapeModifier.Poster = _setupPost.chkScrapePoster.Checked ConfigScrapeModifier.Fanart = _setupPost.chkScrapeFanart.Checked @@ -587,7 +595,7 @@ Public Class EmberNativeScraperModule End If End If Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) - If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If dSearch.ShowDialog(tmpTitle, filterOptions, DBMovie.Filename) = Windows.Forms.DialogResult.OK Then If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID End If @@ -683,6 +691,7 @@ Public Class EmberNativeScraperModule Dim UseIMDBTrailer As Boolean Dim UseTMDBTrailerXBMC As Boolean Dim ManualETSize As String + Dim ActorThumbsSize As String Dim UseTMDBTrailerPref As String #End Region 'Fields diff --git a/Addons/scraper.EmberCore/scraperTVNativeModule.vb b/Addons/scraper.EmberCore/scraperTVNativeModule.vb index 028ed1d..450e6d6 100644 --- a/Addons/scraper.EmberCore/scraperTVNativeModule.vb +++ b/Addons/scraper.EmberCore/scraperTVNativeModule.vb @@ -124,10 +124,10 @@ Public Class EmberNativeTVScraperModule Return New Interfaces.ModuleResult With {.breakChain = False} End Function - Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Image, ByRef Image As Image) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetSingleImage - Image = TVScraper.GetSingleImage(Title, ShowID, TVDBID, Type, Season, Episode, Lang, Ordering, CurrentImage) - Return New Interfaces.ModuleResult With {.breakChain = True} - End Function + Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images, ByRef Image As Images) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetSingleImage + Image = TVScraper.GetSingleImage(Title, ShowID, TVDBID, Type, Season, Episode, Lang, Ordering, CurrentImage) + Return New Interfaces.ModuleResult With {.breakChain = True} + End Function Public Sub Handler_ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) RaiseEvent TVScraperEvent(eType, iProgress, Parameter) diff --git a/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml new file mode 100644 index 0000000..cb66cd5 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + tmdb1 + tmdb2 + tmdb3 + tmdb4 + tmdb5 + tmdb6 + tmdb7 + tmdb8 + tmdb9 + tmdb10 + tmdb11 + tmdb12 + tmdb13 + tmdb14 + tmdb15 + tmdb16 + tmdb17 + tmdb18 + tmdb19 + tmdb20 + tmdb21 + tmdb22 + tmdb23 + tmdb24 + tmdb25 + tmdb26 + tmdb27 + tmdb28 + tmdb29 + tmdb30 + tmdb31 + tmdb32 + tmdb33 + tmdb34 + tmdb35 + tmdb36 + tmdb37 + tmdb38 + tmdb39 + tmdb40 + tmdb41 + tmdb42 + tmdb43 + tmdb44 + tmdb45 + tmdb46 + tmdb47 + tmdb48 + tmdb49 + tmdb50 + tmdb51 + tmdb52 + tmdb53 + tmdb54 + tmdb55 + tmdb56 + tmdb57 + tmdb58 + tmdb59 + tmdb60 + tmdb61 + tmdb62 + tmdb63 + tmdb64 + tmdb65 + tmdb66 + tmdb67 + tmdb68 + tmdb69 + tmdb70 + tmdb71 + tmdb72 + tmdb73 + tmdb74 + tmdb75 + tmdb76 + tmdb77 + tmdb78 + tmdb79 + tmdb80 + tmdb81 + tmdb82 + tmdb83 + tmdb84 + tmdb85 + tmdb86 + tmdb87 + tmdb88 + tmdb89 + tmdb90 + tmdb91 + tmdb92 + tmdb93 + tmdb94 + tmdb95 + tmdb96 + tmdb97 + tmdb98 + tmdb99 + tmdb100 + tmdb101 + tmdb102 + tmdb103 + tmdb104 + tmdb105 + tmdb106 + tmdb107 + tmdb108 + tmdb109 + tmdb110 + tmdb111 + tmdb112 + tmdb113 + tmdb114 + tmdb115 + tmdb116 + tmdb117 + tmdb118 + tmdb119 + tmdb120 + tmdb121 + tmdb122 + tmdb123 + tmdb124 + tmdb125 + tmdb126 + tmdb127 + tmdb128 + tmdb129 + tmdb130 + tmdb131 + tmdb132 + tmdb133 + tmdb134 + tmdb135 + tmdb136 + tmdb137 + tmdb138 + tmdb139 + tmdb140 + tmdb141 + tmdb142 + tmdb143 + tmdb144 + tmdb145 + tmdb146 + tmdb147 + tmdb148 + tmdb149 + tmdb150 + tmdb151 + tmdb152 + tmdb153 + tmdb154 + tmdb155 + tmdb156 + tmdb157 + tmdb158 + tmdb159 + tmdb160 + tmdb161 + tmdb162 + tmdb163 + tmdb164 + tmdb165 + tmdb166 + tmdb167 + tmdb168 + tmdb169 + tmdb170 + tmdb171 + tmdb172 + tmdb173 + tmdb174 + tmdb175 + tmdb176 + tmdb177 + tmdb178 + tmdb179 + tmdb180 + tmdb181 + tmdb182 + tmdb183 + tmdb184 + tmdb185 + tmdb186 + tmdb187 + tmdb188 + tmdb189 + tmdb190 + tmdb191 + tmdb192 + tmdb193 + tmdb194 + tmdb195 + tmdb196 + tmdb197 + tmdb198 + tmdb199 + tmdb200 + tmdb201 + tmdb202 + tmdb203 + tmdb204 + tmdb205 + tmdb206 + tmdb207 + tmdb208 + tmdb209 + tmdb210 + tmdb211 + tmdb212 + tmdb213 + tmdb214 + tmdb215 + tmdb216 + tmdb217 + tmdb218 + tmdb219 + tmdb220 + tmdb221 + tmdb222 + tmdb223 + tmdb224 + tmdb225 + tmdb226 + tmdb227 + tmdb228 + tmdb229 + tmdb230 + tmdb231 + tmdb232 + tmdb233 + tmdb234 + tmdb235 + tmdb236 + tmdb237 + tmdb238 + tmdb239 + tmdb240 + tmdb241 + tmdb242 + tmdb243 + tmdb244 + tmdb245 + tmdb246 + tmdb247 + tmdb248 + tmdb249 + tmdb250 + tmdb251 + tmdb252 + tmdb253 + tmdb254 + tmdb255 + tmdb256 + tmdb257 + tmdb258 + tmdb259 + tmdb260 + tmdb261 + tmdb262 + tmdb263 + tmdb264 + tmdb265 + tmdb266 + tmdb267 + tmdb268 + tmdb269 + tmdb270 + tmdb271 + tmdb272 + tmdb273 + tmdb274 + tmdb275 + tmdb276 + tmdb277 + tmdb278 + tmdb279 + tmdb280 + tmdb281 + tmdb282 + tmdb283 + tmdb284 + tmdb285 + tmdb286 + tmdb287 + tmdb288 + tmdb289 + tmdb290 + tmdb291 + tmdb292 + tmdb293 + tmdb294 + tmdb295 + tmdb296 + tmdb297 + tmdb298 + tmdb299 + tmdb300 + tmdb301 + tmdb302 + tmdb303 + tmdb304 + tmdb305 + tmdb306 + tmdb307 + tmdb308 + tmdb309 + tmdb310 + tmdb311 + tmdb312 + tmdb313 + tmdb314 + tmdb315 + tmdb316 + tmdb317 + tmdb318 + tmdb319 + tmdb320 + tmdb321 + tmdb322 + tmdb323 + tmdb324 + tmdb325 + tmdb326 + tmdb327 + tmdb328 + tmdb329 + tmdb330 + tmdb331 + tmdb332 + tmdb333 + tmdb334 + tmdb335 + tmdb336 + tmdb337 + tmdb338 + tmdb339 + tmdb340 + tmdb341 + tmdb342 + tmdb343 + tmdb344 + tmdb345 + tmdb346 + tmdb347 + tmdb348 + tmdb349 + tmdb350 + tmdb351 + tmdb352 + tmdb353 + tmdb354 + tmdb355 + tmdb356 + tmdb357 + tmdb358 + tmdb359 + tmdb360 + tmdb361 + tmdb362 + tmdb363 + tmdb364 + tmdb365 + tmdb366 + tmdb367 + tmdb368 + tmdb369 + tmdb370 + tmdb371 + tmdb372 + tmdb373 + tmdb374 + tmdb375 + tmdb376 + tmdb377 + tmdb378 + tmdb379 + tmdb380 + tmdb381 + tmdb382 + tmdb383 + tmdb384 + tmdb385 + tmdb386 + tmdb387 + tmdb388 + tmdb389 + tmdb390 + tmdb391 + tmdb392 + tmdb393 + tmdb394 + tmdb395 + tmdb396 + tmdb397 + tmdb398 + tmdb399 + tmdb400 + tmdb401 + tmdb402 + tmdb403 + tmdb404 + tmdb405 + tmdb406 + tmdb407 + tmdb408 + tmdb409 + tmdb410 + tmdb411 + tmdb412 + tmdb413 + tmdb414 + tmdb415 + tmdb416 + tmdb417 + tmdb418 + tmdb419 + tmdb420 + tmdb421 + tmdb422 + tmdb423 + tmdb424 + tmdb425 + tmdb426 + tmdb427 + tmdb428 + tmdb429 + tmdb430 + tmdb431 + tmdb432 + tmdb433 + tmdb434 + tmdb435 + tmdb436 + tmdb437 + tmdb438 + tmdb439 + tmdb440 + tmdb441 + tmdb442 + tmdb443 + tmdb444 + tmdb445 + tmdb446 + tmdb447 + tmdb448 + tmdb449 + tmdb450 + tmdb451 + tmdb452 + tmdb453 + tmdb454 + tmdb455 + tmdb456 + tmdb457 + tmdb458 + tmdb459 + tmdb460 + tmdb461 + tmdb462 + tmdb463 + tmdb464 + tmdb465 + tmdb466 + tmdb467 + tmdb468 + tmdb469 + tmdb470 + tmdb471 + tmdb472 + tmdb473 + tmdb474 + tmdb475 + tmdb476 + tmdb477 + tmdb478 + tmdb479 + tmdb480 + tmdb481 + tmdb482 + tmdb483 + tmdb484 + tmdb485 + tmdb486 + tmdb487 + tmdb488 + tmdb489 + tmdb490 + tmdb491 + tmdb492 + tmdb493 + tmdb494 + tmdb495 + tmdb496 + tmdb497 + tmdb498 + tmdb499 + tmdb500 + tmdb501 + tmdb502 + tmdb503 + tmdb504 + tmdb505 + tmdb506 + tmdb507 + tmdb508 + tmdb509 + tmdb510 + tmdb511 + tmdb512 + tmdb513 + tmdb514 + tmdb515 + tmdb516 + tmdb517 + tmdb518 + tmdb519 + tmdb520 + tmdb521 + tmdb522 + tmdb523 + tmdb524 + tmdb525 + tmdb526 + tmdb527 + tmdb528 + tmdb529 + tmdb530 + tmdb531 + tmdb532 + tmdb533 + tmdb534 + tmdb535 + tmdb536 + tmdb537 + tmdb538 + tmdb539 + tmdb540 + tmdb541 + tmdb542 + tmdb543 + tmdb544 + tmdb545 + tmdb546 + tmdb547 + tmdb548 + tmdb549 + tmdb550 + tmdb551 + tmdb552 + tmdb553 + tmdb554 + tmdb555 + tmdb556 + tmdb557 + tmdb558 + tmdb559 + tmdb560 + tmdb561 + tmdb562 + tmdb563 + tmdb564 + tmdb565 + tmdb566 + tmdb567 + tmdb568 + tmdb569 + tmdb570 + tmdb571 + tmdb572 + tmdb573 + tmdb574 + tmdb575 + tmdb576 + tmdb577 + tmdb578 + tmdb579 + tmdb580 + tmdb581 + tmdb582 + tmdb583 + tmdb584 + tmdb585 + tmdb586 + tmdb587 + tmdb588 + tmdb589 + tmdb590 + tmdb591 + tmdb592 + tmdb593 + tmdb594 + tmdb595 + tmdb596 + tmdb597 + tmdb598 + tmdb599 + tmdb600 + tmdb601 + tmdb602 + tmdb603 + tmdb604 + tmdb605 + tmdb606 + tmdb607 + tmdb608 + tmdb609 + tmdb610 + tmdb611 + tmdb612 + tmdb613 + tmdb614 + tmdb615 + tmdb616 + tmdb617 + tmdb618 + tmdb619 + tmdb620 + tmdb621 + tmdb622 + tmdb623 + tmdb624 + tmdb625 + tmdb626 + tmdb627 + tmdb628 + tmdb629 + tmdb630 + tmdb631 + tmdb632 + tmdb633 + tmdb634 + tmdb635 + tmdb636 + tmdb637 + tmdb638 + tmdb639 + tmdb640 + tmdb641 + tmdb642 + tmdb643 + tmdb644 + tmdb645 + tmdb646 + tmdb647 + tmdb648 + tmdb649 + tmdb650 + tmdb651 + tmdb652 + tmdb653 + tmdb654 + tmdb655 + tmdb656 + tmdb657 + tmdb658 + tmdb659 + tmdb660 + tmdb661 + tmdb662 + tmdb663 + tmdb664 + tmdb665 + tmdb666 + tmdb667 + tmdb668 + tmdb669 + tmdb670 + tmdb671 + tmdb672 + tmdb673 + tmdb674 + tmdb675 + tmdb676 + tmdb677 + tmdb678 + tmdb679 + tmdb680 + tmdb681 + tmdb682 + tmdb683 + tmdb684 + tmdb685 + tmdb686 + tmdb687 + tmdb688 + tmdb689 + tmdb690 + tmdb691 + tmdb692 + tmdb693 + tmdb694 + tmdb695 + tmdb696 + tmdb697 + tmdb698 + tmdb699 + tmdb700 + tmdb701 + tmdb702 + tmdb703 + tmdb704 + tmdb705 + tmdb706 + tmdb707 + tmdb708 + tmdb709 + tmdb710 + tmdb711 + tmdb712 + tmdb713 + tmdb714 + tmdb715 + tmdb716 + tmdb717 + tmdb718 + tmdb719 + tmdb720 + tmdb721 + tmdb722 + tmdb723 + tmdb724 + tmdb725 + tmdb726 + tmdb727 + tmdb728 + tmdb729 + tmdb730 + tmdb731 + tmdb732 + tmdb733 + tmdb734 + tmdb735 + tmdb736 + tmdb737 + tmdb738 + tmdb739 + tmdb740 + tmdb741 + tmdb742 + tmdb743 + tmdb744 + tmdb745 + tmdb746 + tmdb747 + tmdb748 + tmdb749 + tmdb750 + tmdb751 + tmdb752 + tmdb753 + tmdb754 + tmdb755 + tmdb756 + tmdb757 + tmdb758 + tmdb759 + tmdb760 + tmdb761 + tmdb762 + tmdb763 + tmdb764 + tmdb765 + tmdb766 + tmdb767 + tmdb768 + tmdb769 + tmdb770 + tmdb771 + tmdb772 + tmdb773 + tmdb774 + tmdb775 + tmdb776 + tmdb777 + tmdb778 + tmdb779 + tmdb780 + tmdb781 + tmdb782 + tmdb783 + tmdb784 + tmdb785 + tmdb786 + tmdb787 + tmdb788 + tmdb789 + tmdb790 + tmdb791 + tmdb792 + tmdb793 + tmdb794 + tmdb795 + tmdb796 + tmdb797 + tmdb798 + tmdb799 + tmdb800 + tmdb801 + tmdb802 + tmdb803 + tmdb804 + tmdb805 + tmdb806 + tmdb807 + tmdb808 + tmdb809 + tmdb810 + tmdb811 + tmdb812 + tmdb813 + tmdb814 + tmdb815 + tmdb816 + tmdb817 + tmdb818 + tmdb819 + tmdb820 + tmdb821 + tmdb822 + tmdb823 + tmdb824 + tmdb825 + tmdb826 + tmdb827 + tmdb828 + tmdb829 + tmdb830 + tmdb831 + tmdb832 + tmdb833 + tmdb834 + tmdb835 + tmdb836 + tmdb837 + tmdb838 + tmdb839 + tmdb840 + tmdb841 + tmdb842 + tmdb843 + tmdb844 + tmdb845 + tmdb846 + tmdb847 + tmdb848 + tmdb849 + tmdb850 + tmdb851 + tmdb852 + tmdb853 + tmdb854 + tmdb855 + tmdb856 + tmdb857 + tmdb858 + tmdb859 + tmdb860 + tmdb861 + tmdb862 + tmdb863 + tmdb864 + tmdb865 + tmdb866 + tmdb867 + tmdb868 + tmdb869 + tmdb870 + tmdb871 + tmdb872 + tmdb873 + tmdb874 + tmdb875 + tmdb876 + tmdb877 + tmdb878 + tmdb879 + tmdb880 + tmdb881 + tmdb882 + tmdb883 + tmdb884 + tmdb885 + tmdb886 + tmdb887 + tmdb888 + tmdb889 + tmdb890 + tmdb891 + tmdb892 + tmdb893 + tmdb894 + tmdb895 + tmdb896 + tmdb897 + tmdb898 + tmdb899 + tmdb900 + \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml new file mode 100644 index 0000000..5e87256 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml @@ -0,0 +1,31 @@ + + Enable or disable this module. + Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom) + Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom) + API Key from the TMDB site. Sharing the API key is forbidden. + Enable scraping movie certification. + Selected language for TMDB searches + If no record is available for selected language try English + Enable scraping movie other crew. (Scrape Full Crew must be enabled) + Enable scraping movie studio. + Enable scraping movie runtime. + Enable scraping movie plot. + Enable scraping movie outline. + Enable scraping movie genre. + Enable scraping movie tagline. + Enable scraping movie cast. + Enable scraping movie votes. + Enable scraping movie rating. + Enable scraping movie release date. + Enable scraping movie MPAA. + Enable scraping movie year. + Enable scraping movie title. + Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom) + Enable or disable this module. + Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom) + Enable scraping posters from this module. (Refer to global poster settings for more options) + Enable scraping fanart from this module. (Refer to global fanart settings for more options) + Enable trailer downloading from this module. (Refer to global trailer settings for more options) + Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.) + Select the sites from which you would like to retrieve trailer URLs and/or files. + diff --git a/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml new file mode 100644 index 0000000..cf68bc8 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml @@ -0,0 +1,126 @@ + + Ember Native TV Scrapers + Use OFDB Genre + Use OFDB Plot + Use OFDB Outline + Use OFDB Title + TMDB Mirror: + Scraper Fields - Scraper specific + Timeout: + Supported Sites: + Get Images From: + Search Results + Searching TMDB... + The ID you entered is not a valid IMDB ID. + You have manually entered an IMDB ID but have not verified it is correct. + Continue without verification? + Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again. + Verification Failed + + + + No Matches Found + View details of each result to find the proper movie. + Movie Search Results + Manual IMDB Entry: + Verify + Searching TMDB... + Downloading details... + Downloading {0} + No Fanart found for this movie. + No Fanart Found + No Posters found for this movie. + No Posters Found + Retrieving data from TheMovieDB.com... + TheMovieDB.com is not enabled + Retrieving data from IMPAwards.com... + IMPAwards.com is not enabled + Retrieving data from MoviePosterDB.com... + MoviePostersDB.com is not enabled + Preparing images... + Select Poster + Select Fanart + Check All Thumb + Check All Mid + Check All Original + Selected item will be set as fanart. All checked items will be saved to \extrathumbs. + Performing Preliminary Tasks... + Downloading Selected Image... + Original + Cover + Medium + Small + Original ({0}x{1}) + Cover ({0}x{1}) + Small ({0}x{1}) + Medium ({0}x{1}) + Multiple + Downloading selected trailer... + Copying specified file to trailer... + The trailer could not be played. This could be due to an invalid URL or you do not have the proper player to play the trailer type. + Error Playing Trailer + Move + Copy + Moving specified file to trailer... + Set To Nfo + Select Trailer + Select Trailer to Download + Manual Trailer Entry + Direct Link or YouTube URL: + Compiling trailer list... + Preview Trailer + Local Trailer: + The video format links could not be retrieved. + Error Retrieving Video Format Links + Select Format + Getting available formats... + Available Formats + A poster of your preferred size could not be found. Please choose another. + No Preferred Size + Fanart of your preferred size could not be found. Please choose another. + There are no known episodes for this show. Scrape the show, season, or episode and try again. + No Known Episodes + There is no poster available for this episode. + Guest Star + The ID you entered is not a valid TVDB ID. + Downloading show info... + TV Search Results + View details of each result to find the proper TV show. + Downloading Fullsize Fanart Image... + Loading Current Images... + (Down)Loading New Images... + Setting Defaults... + Show Poster + Episode Fanart + Show Fanart + All Seasons Poster + Season Posters + Season Fanart + Season {0} Posters + Season {0} Fanart + TV Image Selection + Current Image: + Get Posters + Get Fanart + These settings are specific to this module.{0}Please refer to the global settings for more options. + Ember TMDB Movie Scrapers + + IMDB + OFDB (German) + TMDB Extrathumbs Size: + Trailers + Youtube/TMDB Trailer: + XBMC Format + Preferred language + Save Fanart In: + Fall back on english + Preferred Language: + TMDBid: + Retrieving data from IMDB.com... + IMDB.com is not enabled + TheMovieDB API is missing or not valid + Retrieving data from Fanart.tv... + Fanart.tv is not enabled + Get your API Key from www.themoviedb.org + Get your API Key from fanart.tv + diff --git a/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml new file mode 100644 index 0000000..d2a3801 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml @@ -0,0 +1,31 @@ + + Aktiviert oder deaktiviert dieses Modul. + Verschiebt diesen Scraper in der Reihenfolge einen nach oben. (Scraper Module werden von oben nach unten abgearbeitet) + Verschiebt diesen Scraper in der Reihenfolge einen nach unten. (Scraper Module werden von oben nach unten abgearbeitet) + API-Key von der TMDB-Website. Gemeinsame Nutzung des API-Schlüssels ist verboten. + Das Scrapen von Altersbeschränkungen einschalten. + Wähle die Sprache in der auf TMDB gesucht werden soll + Wenn kein Datensatz für die gewählte Sprache verfügbar ist versuche englischen zu nehmen. + Das Scrapen von der restlichen Crew einschalten. ("Gesamte Crew Scrapen" muss eingeschaltet sein) + Das Scrapen von Studios einschalten. + Das Scrapen von Spielzeiten einschalten. + Das Scrapen von Inhaltsangaben einschalten. + Das Scrapen von Kurzbeschreibungen einschalten. + Das Scrapen von Genres einschalten. + Das Scrapen von Taglines einschalten. + Das Scrapen von Schauspielern einschalten. + Das Scrapen von Anzahl Bewertungen einschalten. + Das Scrapen von Bewertungen einschalten. + Das Scrapen von Premiere-Daten einschalten. + Das Scrapen von MPAA-Informationen einschalten. + Das Scrapen von Filmjahren einschalten. + Das Scrapen von Filmtiteln einschalten. + Verschiebt diesen Scraper in der Reihenfolge einen nach oben. (Scraper Module werden von oben nach unten abgearbeitet) + Aktiviert oder deaktiviert dieses Modul. + Verschiebt diesen Scraper in der Reihenfolge einen nach unten. (Scraper Module werden von oben nach unten abgearbeitet) + Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration) + Aktiviert das Laden von Fanarts mit diesem Modul. (Schau auch in die Globale Konfiguration) + Aktiviert das Laden von Trailern mit diesem Modul. (Schau auch in die Globale Konfiguration) + Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Seite in dieser Zeit nicht geantwortet hat wird sie übersprungen) + Wähle die Seite von der Trailer URLs/Dateien geladen werden sollen. + diff --git a/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml new file mode 100644 index 0000000..9b8e52e --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml @@ -0,0 +1,126 @@ + + Ember Nativer TV Scraper + OFDB Genre benutzen + OFDB Handlung benutzen + OFDB Kurzbeschr. benutzen + OFDB Titel benutzen + TMDB Mirror: + Scraper Felder - Scraper spezifisch + Timeout: + Unterstützte Seiten: + Bilder holen von: + Suchergebnis + Suche in der TMDB... + Die eingegebene ID ist keine gültige IMDB ID. + Die IMDB ID ist noch nicht geprüft. + Ohne Prüfung fortfahren? + Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben. + Prüfung fehlgeschlagen + + + + Keine Treffer + Schaue dir die Details an um den richtigen Film zu finden. + Film Suchergebnis + Man. IMDB ID: + Prüfen + Suche in der TMDB... + Lade Details... + Lade {0} herunter + Kein Fanart für diesen Film gefunden. + Kein Fanart gefunden + Kein Poster für diesen Film gefunden. + Kein Poster gefunden + Lade Daten von TheMovieDB.com... + TheMovieDB.com ist nicht aktiviert + Lade Daten von IMPAwards.com... + IMPAwards.com ist nicht aktiviert + Lade Daten von MoviePosterDB.com... + MoviePostersDB.com ist nicht aktiviert + Bereite Bilder vor... + Wähle Poster + Wähle Fanart + Wähle alle Thumb + Wähle alle Mittl. + Wähle alle Original + Markiertes Bild wird Fanart. Alle aktivierten werden Extrathumbs. + Vorarbeit läuft... + Lade gewähltes Bild... + Original + Cover + Medium + Klein + Original ({0}x{1}) + Cover ({0}x{1}) + Klein ({0}x{1}) + Mittel ({0}x{1}) + Mehrfach + Lade gewählten Trailer... + Kopiere gewählten Trailer... + Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URL liegen oder es ist kein Player für diesen Dateityp vorhanden. + Fehler beim Abspielen des Trailers + Verschieben + Kopieren + Verschiebe gewählten Treiler... + In NFO speichern + Trailer wählen + Trailer zum laden wählen + Manueller Trailer + Direkter Link oder YouTube URL: + Stelle Trailerliste zusammen... + Trailer Vorschau + Loakler trailer: + Fehler beim generieren der Videoformat Linkliste. + Fehler beim Generieren der Videoformat Links. + Wähle Format + Hole verfügbare Formate... + Verfügbare Formate + Es konnte kein Poster in der bevorzugten Größe gefunden werden. Wähle ein anderes. + Keine bevorzugte Größe + Es konnte kein Fanart in der gewünschten Größe gefunden werden. Wähle ein anderes. + Keine Episoden für diese TV-Serie verfügbar. Scrape diese Serie, Staffel oder Episode und versuche es erneut. + Keine Episoden verfügbar + Kein Poster für diese Episode vorhanden. + Gaststar + Die eingegebene ID ist keine gültige TMDB ID. + Lade Serien Informationen... + Serien Suchergebnis + Betrachte die Details um die richtige TV-Serie zu erkennen. + Lade Fanart in Originalgröße... + Lade aktuelle Bilder... + Lade neue Bilder... + Setze Standardwerte... + Serien Poster + Episoden Fanart + Serien Fanart + Alle-Staffeln Poster + Staffel Poster + Staffel Fanart + Staffel {0} Poster + Staffel {0} Fanart + Bilderwahl TV-Serien + Aktuelles Bild: + Poster laden + Fanart laden + Diese Einstellungen sind Modul-spezifisch. {0} Bitte werfen sie einen Blick in die Globalen Einstellungen für noch mehr Optionen. + Ember TMDB Movie Scrapers + + IMDB + OFDB (German) + TMDB Extrathumbs Grösse: + Trailer + Youtube/TMDB Trailer: + XBMC Format + Bevorzugte Sprache + Speichere Fanart in: + Verwende Englisch wenn nichts verfügbar + Bevorzugte Sprache: + TMDBid: + Lade Daten von IMDB.com... + IMDB.com ist nicht aktiviert. + Die TheMovieDB API ist nicht vorhanden oder ungültig + Lade Daten von Fanart.tv... + Fanart.tv ist nicht aktiviert + Get your API Key from www.themoviedb.org + Get your API Key from fanart.tv + diff --git a/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..54809c6 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,31 @@ + + Slå denne modulen på eller av. + Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.) + Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.) + API-nøkkel fra TMDB-siden. Deling av denne nøkkelen er forbudt. + Slå på detaljhenting av filmsertifisering. + Valgt språk for TMDB-søk. + Hvis valgt språk ikke blir funnet, prøv engelsk. + Slå på detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått) + Slå på detaljhenting av filmstudio. + Slå på detaljhenting av filmlengde. + Slå på detaljhenting av filmens historie. + Slå på detaljhenting av filmens beskrivelse. + Slå på detaljhenting av filmens sjanger. + Slå på detaljhetning av filmens undertittel. + Slå på detaljhetning av filmens skuespillerbeholdning. + Slå på detaljhetning av filmens poeng. + Slå på detaljhetning av filmens aldersgrense. + Slå på detaljhetning av filmens premieredato. + Slå på detaljhetning av filmens MPAA-markering. + Slå på detaljhetning av filmens år. + Slå på detaljhetning av filmens tittel. + Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.) + Slå denne modulen på eller av. + Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.) + Slå på detaljhetning av plakater i denne modulen. (Se globale plakatinnstillinger for flere valg) + Slå på detaljhetning av fankunst i denne modulen. (Se globale fankunstinnstillinger for flere valg) + Slå på automatisk henting av trailer fra denne modulen. (Se globale trailerinnstillinger for flere valg) + Før inn tiden (i sekunder) du vil bruke for timeout for trailersider. (Hvis siden ikke svarer innen timeoutfristen, så vil den bli hoppet over) + Velg sidene du vil bruke til trailer URL og/eller filer. + diff --git a/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml new file mode 100644 index 0000000..3ee8a25 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml @@ -0,0 +1,126 @@ + + EMM TV-detaljhentere + Bruk OFDB-sjangere + Bruk OFDB-filmhistorie + Bruk OFDB-beskrivelse + Bruk OFDB-tittel + TMDB-speilserver: + Detaljhenterområder - Detaljhenterspesifikk + Tidsavbrudd: + Støttede sider: + Hent bilder fra: + Søkeresultater + Søker TMDB... + IDen du førte inn er ikke en riktig IMDB-ID. + Du har ført inn en IMDB-ID, men har ikke verifisert om den er riktig. + Fortsette uten verifisering? + Kunne ikke hente filmdetaljer for den innførte IDen. Vennligst sjekk IDen og prøv igjen. + Verifisering feilet + + + + Ingen funnet + Se detaljer fra hvert treff for å finne riktig film. + Filmsøkresultater + Manuell IMDB innføring: + Verifiser + Søker TMDB... + Laster ned detaljer... + Laster ned {0} + Ingen fankunst funnet for denne filmen. + Ingen fankunst funnet + Ingen plakater funnet for denne filmen. + Ingen plakater funnet + Henter data fra TheMovieDB.com... + TheMovieDB.com er ikke påslått + Henter data fra IMPAwards.com... + IMPAwards.com er ikke påslått + Henter data fra MoviePosterDB.com... + MoviePostersDB.com er ikke påslått + Forbereder bilder... + Velg plakat + Velg fankunst + Huk av alle tommelbilder + Huk av alle Mid + Huk av alle originale + Valgte objekt vil bli satt som fankunst. Alle hukede objekter vil bli lagret i \extrathumbs. + Utfører forberedende oppgaver... + Laster ned valgte bilde... + Original + Cover + Medium + Liten + Original ({0}x{1}) + Cover ({0}x{1}) + Liten ({0}x{1}) + Medium ({0}x{1}) + Flere + Laster ned valgt trailer... + Kopierer valgt fil til trailer... + Traileren kunne ikke spilles av. Det kan være at URL ikke er gyldig, eller at du ikke har riktig avspiller for denne filtypen. + Kan ikke spille av trailer + Flytt + Kopiér + Flytter valgt fil til trailer... + Sett i nfo + Velg trailer + Velg trailer til å laste ned + Manuell trailerinnføring + Direkte link eller YouTube URL: + Kompilerer trailerliste... + Sniktitt på trailer + Lokal trailer: + Videoformatlenkene kunne ikke hentes + Kunne ikke hente videoformatlenker + Velg format + Henter tilgjengelige formater... + Tilgjengelige formater + En plakat i din valgte størrelse kunne ikke hentes. Vennligst velg en annen. + Ingen foretrukket størrelse + Fankunst i din foretrukkede størrelse kunne ikke bli funnet. Vennligst velg en annen. + Det er ingen kjente episoder for denne serien. Detaljhent serien, sesongen eller episoden og prøv på nytt. + Ingen kjente episoder + Det er ingen plakater for denne episoden. + Gjesteskuespiller + IDen du innførte er ikke en gyldig TVDB ID. + Laster ned serieinfo... + TVsøk-resultater + Se detaljer fra hvert resultat for å finne riktig serie. + Laster ned fankunst i full størrelse... + Laster inn nåværende bilder... + Laster (ned) nye bilder... + Setter standarder... + Serieplakat + Episode-fankunst + Seriefankunst + Alle sesonger-plakat + Sesongplakat + Sesongfankunst + Sesong {0}-plakater + Sesong {0}-fankunst + TV-bilde valg + Nåværende bilde: + Hent plakater + Hent fankunst + Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg. + EMM TMDB film-detaljhentere + + IMDB + OFDB (Tysk) + TMDB Ekstrakunst-størrelse: + Trailere + Youtube/TMDB Trailer: + XBMC-format + Foretrukket språk + Lagre fankunst i: + Fall tilbake til engelsk + Foretrukket språk: + TIMDB-ID: + Henter data fra IMDB.com... + IMDB.com er ikke påslått + TheMovieDB API mangler eller er ikke gyldig + Henter data fra Fanart.tv... + Fanart.tv er ikke påslått + Hent din API-nøkkel fra www.themoviedb.org + Hent din API-nøkkel fra fanart.tv + diff --git a/Addons/scraper.FanartTV.Poster/My Project/Application.Designer.vb b/Addons/scraper.FanartTV.Poster/My Project/Application.Designer.vb new file mode 100644 index 0000000..66fb81a --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Addons/scraper.FanartTV.Poster/My Project/Application.myapp b/Addons/scraper.FanartTV.Poster/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/Addons/scraper.FanartTV.Poster/My Project/AssemblyInfo.vb b/Addons/scraper.FanartTV.Poster/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..714e53f --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Addons/scraper.FanartTV.Poster/My Project/Resources.Designer.vb b/Addons/scraper.FanartTV.Poster/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bb85827 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EmberScraperModule.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Addons/scraper.FanartTV.Poster/My Project/Resources.resx b/Addons/scraper.FanartTV.Poster/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/My Project/Settings.Designer.vb b/Addons/scraper.FanartTV.Poster/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f020222 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.EmberScraperModule.My.MySettings + Get + Return Global.EmberScraperModule.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Addons/scraper.FanartTV.Poster/My Project/Settings.settings b/Addons/scraper.FanartTV.Poster/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Addons/scraper.FanartTV.Poster/Resources/Logo.png b/Addons/scraper.FanartTV.Poster/Resources/Logo.png new file mode 100644 index 0000000..a89dae1 Binary files /dev/null and b/Addons/scraper.FanartTV.Poster/Resources/Logo.png differ diff --git a/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeFANARTTV.vb b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeFANARTTV.vb new file mode 100644 index 0000000..13c1748 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeFANARTTV.vb @@ -0,0 +1,173 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ +' # HD Movie Logos -> logo.png (choose this first) +' # ClearLOGOs -> logo.png (use this as a backup if no HD Logo in the lanaguage specified) +' # ClearART -> clearart.png (use this as a backup if no HD ClearArt, in the language specified) +' # HDClearART -> clearart.png (choose this first) +' # cdART -> disc.png +' # Movie Backgrounds -> Fanart (this is the only fanart.tv artwork that might overlap with 'typical' artwork scraping from IMDB/TMDB) +' # Movie Banner -> Banner (not poster - Frodo supports both now, -poster.jpg/png and -banner.jpg/png or poster.jpg/png and banner.jpg/png) +' # Movie Thumbs -> landscape.png +' # Special note - the Logos and ClearArts are language-specific and should be tagged with the appropriate language. Will want to have a setting allowing users to specify a language so as not to get a bunch of foreign-language artwork. +' # 1) Logo.png - to be added at a later stage, today is not possible to save +' # 2) Clearart.png - to be added at a later stage, today is not possible to save +' # 3) Disc.png - to be added at a later stage, today is not possible to save +' # 4) Landscape.png - to be added at a later stage, today is not possible to save +' # language is in image properties + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports FanartTVAPI + +Namespace FANARTTVs + + Public Class Scraper + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _FanartTV As FanartTV.V1.FanartTV + Friend WithEvents bwFANARTTV As New System.ComponentModel.BackgroundWorker + Private _APIInvalid As Boolean = False +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _FanartTV = New FanartTV.V1.FanartTV(_MySettings.FANARTTVApiKey) + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest("1", "JSON", "all", 1, 1)) + If IsNothing(Result) Then + If Not IsNothing(_FanartTV.Error) Then + Master.eLog.WriteToErrorLog(_FanartTV.Error, "", "Error") + _APIInvalid = True + End If + End If + End Sub + + Public Sub Cancel() + If Me.bwFANARTTV.IsBusy Then Me.bwFANARTTV.CancelAsync() + + While Me.bwFANARTTV.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwFANARTTV.IsBusy Then + bwFANARTTV.WorkerSupportsCancellation = True + bwFANARTTV.WorkerReportsProgress = True + bwFANARTTV.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetFANARTTVImages(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + If _APIInvalid Then + Return Nothing + End If + Try + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest(imdbID, "JSON", "all", 1, 2)) + If bwFANARTTV.CancellationPending Then Return Nothing + If IsNothing(Result) Then Return alPoster + If IsNothing(Result.movieinfo.moviebackground) Then Return alPoster + For Each image In Result.movieinfo.moviebackground + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = image.url}) + alPoster.Add(New MediaContainers.Image With {.Description = "thumb", .URL = image.url & "/preview"}) + Next + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwFANARTTVA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTV.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetFANARTTVImages(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwFANARTTV_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTV.ProgressChanged + If Not bwFANARTTV.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwFANARTTV_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTV.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeIMDB.vb b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeIMDB.vb new file mode 100644 index 0000000..ec6d1be --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeIMDB.vb @@ -0,0 +1,174 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports System.Diagnostics +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMDBimg + + Public Class Scraper + +#Region "Fields" + + + + Friend WithEvents bwIMDBimg As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If Me.bwIMDBimg.IsBusy Then Me.bwIMDBimg.CancelAsync() + + While Me.bwIMDBimg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMDBimg.IsBusy Then + bwIMDBimg.WorkerSupportsCancellation = True + bwIMDBimg.WorkerReportsProgress = True + bwIMDBimg.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMDBimg.CancellationPending Then Return Nothing + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", imdbID, "")) + sHTTP = Nothing + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(1) + End If + + + ' check existence of a line like this + ' 0 Then + debug.print("GetIMDBPoster 1 - {0}", mcIMDB(0).Value) + 'Dim sUrl1 As String = sHTTP.DownloadData(mcIMDB(0).Value) + mcIMDB = Regex.Matches(HTML, "http://ia.media-imdb.com/images/.{3,80}?.jpg") + If mcIMDB.Count > 0 Then + 'just use the first one if more are found + Debug.Print("GetIMDBPoster 2 - {0}", mcIMDB(0).Value) + alPoster.Add(New MediaContainers.Image With {.Description = "cover", .URL = mcIMDB(0).Value}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(2) + End If + + Dim aSP As String() = Regex.Split(mcIMDB(0).Value, "._V\d+?_SY\d+?_CR\d+?,\d+?,\d+?,\d+?_") + Dim sUrl1 = aSP(0) + aSP(1) + Debug.Print("GetIMDBPoster 3 - {0}", sUrl1) + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = sUrl1}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMDBimg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBimg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMDBimg_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBimg.ProgressChanged + If Not bwIMDBimg.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMDBimg_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBimg.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeIMPA.vb b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeIMPA.vb new file mode 100644 index 0000000..cfe43a1 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeIMPA.vb @@ -0,0 +1,189 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMPA + + Public Class Scraper + + #Region "Fields" + + + + Friend WithEvents bwIMPA As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwIMPA.IsBusy Then Me.bwIMPA.CancelAsync() + + While Me.bwIMPA.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMPA.IsBusy Then + bwIMPA.WorkerSupportsCancellation = True + bwIMPA.WorkerReportsProgress = True + bwIMPA.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMPAPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMPA.CancellationPending Then Return Nothing + Dim sURL As String = GetLink(imdbID) + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(1) + End If + + If Not String.IsNullOrEmpty(sURL) Then + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If bwIMPA.CancellationPending Then Return Nothing + + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(2) + End If + + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + + Dim PosterURL As String + + For Each mPoster As Match In mcPoster + If bwIMPA.CancellationPending Then Return Nothing + PosterURL = Strings.Replace(String.Format("{0}/{1}", sURL.Substring(0, sURL.LastIndexOf("/")), mPoster.Value.ToString()).Replace("thumbs", "posters"), "imp_", String.Empty) + + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + + PosterURL = PosterURL.Insert(PosterURL.LastIndexOf("."), "_xlg") + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = PosterURL}) + Next + End If + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMPA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPA.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMPAPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMPA_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPA.ProgressChanged + If Not bwIMPA.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMPA_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPA.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + Private Function GetLink(ByVal IMDBID As String) As String + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) + sHTTP = Nothing + + Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") + If mcIMPA.Count > 0 Then + 'just use the first one if more are found + Return mcIMPA(0).Value.ToString + Else + Return String.Empty + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return String.Empty + End Try + End Function + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + Dim sType As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeImages.vb b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeImages.vb new file mode 100644 index 0000000..d335b62 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeImages.vb @@ -0,0 +1,1209 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Public Class ScrapeImages + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private TMDB As TMDB.Scraper + Private IMPA As New IMPA.Scraper + Private MPDB As New MPDB.Scraper + Private IMDB As New IMDBimg.Scraper + Private FANARTTVs As FANARTTVs.Scraper + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Function GetPreferredImage(ByRef Image As Images, ByVal IMDBID As String, ByVal TMDBID As String, ByVal iType As Enums.ImageType, ByRef imgResult As Containers.ImgResult, ByVal sPath As String, ByVal doETs As Boolean, Optional ByVal doAsk As Boolean = False) As Boolean + '// + ' Try to get the best match between what the user selected in settings and the actual posters downloaded + '\\ + + Dim hasImages As Boolean = False + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim tmpListIMPA As New List(Of MediaContainers.Image) + Dim tmpListIMDB As New List(Of MediaContainers.Image) + Dim tmpListMPDB As New List(Of MediaContainers.Image) + Dim tmpIMDBX As Images = Nothing + Dim tmpIMDBL As Images = Nothing + Dim tmpIMDBM As Images = Nothing + Dim tmpIMDBS As Images = Nothing + Dim tmpIMDBW As Images = Nothing + Dim tmpTMDBX As Images = Nothing + Dim tmpTMDBL As Images = Nothing + Dim tmpTMDBM As Images = Nothing + Dim tmpTMDBS As Images = Nothing + Dim tmpTMDBW As Images = Nothing + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) + + Try + + If iType = Enums.ImageType.Posters Then 'posters + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tImage.URL) + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + tmpListTMDB.AddRange(TMDB.GetTMDBImages(TMDBID, "poster")) + + If _MySettings.UseIMPA Then + tmpListTMDB.AddRange(IMPA.GetIMPAPosters(IMDBID)) + End If + + If _MySettings.UseMPDB Then + tmpListMPDB.AddRange(MPDB.GetMPDBPosters(IMDBID)) + End If + + If _MySettings.UseIMDB Then + tmpListTMDB.AddRange(IMDB.GetIMDBPosters(IMDBID)) + End If + + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) + If Not IsNothing(tmdbThumb.WebImage.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) + End If + Image.Clear() + Next + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + End If + Else + 'download all TMBD images + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "poster") + + 'check each one for it's size to see if it matched the preferred size + If tmpListTMDB.Count > 0 Then + hasImages = True + + If Not Master.eSettings.NoSaveImagesToNfo Then + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + imgResult.Posters.Add(tmdbThumb.URL) + Next + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Xlrg + If iMovie.Description.ToLower = "original" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Lrg + If iMovie.Description.ToLower = "mid" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Mid + If iMovie.Description.ToLower = "cover" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Small + If iMovie.Description.ToLower = "thumb" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + 'no "wide" for TMDB + End Select + Image.Clear() + Next + End If + + If _MySettings.UseIMDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB found... try IMPA + + tmpListIMDB = IMDB.GetIMDBPosters(IMDBID) + + If tmpListIMDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMDBX) Then + tmpIMDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMDBL) Then + tmpIMDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMDBM) Then + tmpIMDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMDBS) Then + tmpIMDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMDBW) Then + tmpIMDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseIMPA Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from IMDB found... try IMPA + + tmpListIMPA = IMPA.GetIMPAPosters(IMDBID) + + If tmpListIMPA.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMPA + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMPAX) Then + tmpIMPAX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMPAL) Then + tmpIMPAL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMPAM) Then + tmpIMPAM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMPAS) Then + tmpIMPAS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMPAW) Then + tmpIMPAW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseMPDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB or IMPA found... try MPDB + + tmpListMPDB = MPDB.GetMPDBPosters(IMDBID) + + If tmpListMPDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListMPDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpMPDBX) Then + tmpMPDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpMPDBL) Then + tmpMPDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpMPDBM) Then + tmpMPDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpMPDBS) Then + tmpMPDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpMPDBW) Then + tmpMPDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If IsNothing(Image.Image) AndAlso Not doAsk Then + 'STILL no image found, just get the first available image, starting with the largest + 'check TMDB first + If tmpListTMDB.Count > 0 Then + Dim x = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If x.Count > 0 Then + Image.FromWeb(x(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "cover" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + End If + + Image.Clear() + + If _MySettings.UseIMDB Then + If tmpListIMDB.Count > 0 Then + If Not IsNothing(tmpIMDBX) Then + Image = tmpIMDBX + GoTo foundIT + End If + If Not IsNothing(tmpIMDBL) Then + Image = tmpIMDBL + GoTo foundIT + End If + If Not IsNothing(tmpIMDBM) Then + Image = tmpIMDBM + GoTo foundIT + End If + If Not IsNothing(tmpIMDBS) Then + Image = tmpIMDBS + GoTo foundIT + End If + If Not IsNothing(tmpIMDBW) Then + Image = tmpIMDBW + GoTo foundIT + End If + End If + End If + + If _MySettings.UseIMPA Then + If tmpListIMPA.Count > 0 Then + If Not IsNothing(tmpIMPAX) Then + Image = tmpIMPAX + GoTo foundIT + End If + If Not IsNothing(tmpIMPAL) Then + Image = tmpIMPAL + GoTo foundIT + End If + If Not IsNothing(tmpIMPAM) Then + Image = tmpIMPAM + GoTo foundIT + End If + If Not IsNothing(tmpIMPAS) Then + Image = tmpIMPAS + GoTo foundIT + End If + If Not IsNothing(tmpIMPAW) Then + Image = tmpIMPAW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + If _MySettings.UseMPDB Then + If tmpListMPDB.Count > 0 Then + If Not IsNothing(tmpMPDBX) Then + Image = tmpMPDBX + GoTo foundIT + End If + If Not IsNothing(tmpMPDBL) Then + Image = tmpMPDBL + GoTo foundIT + End If + If Not IsNothing(tmpMPDBM) Then + Image = tmpMPDBM + GoTo foundIT + End If + If Not IsNothing(tmpMPDBS) Then + Image = tmpMPDBS + GoTo foundIT + End If + If Not IsNothing(tmpMPDBW) Then + Image = tmpMPDBW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + End If + + End If + + Else 'fanart + + Dim ETHashes As New List(Of String) + If Master.eSettings.AutoET AndAlso doETs Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + End If + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + Image.Clear() + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + + End If + End If + End If + + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + End If + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + +foundIT: + tmpListTMDB = Nothing + tmpListIMPA = Nothing + tmpListMPDB = Nothing + Return hasImages + End Function + + Public Sub GetPreferredFAasET(ByVal IMDBID As String, ByVal sPath As String) + Dim _Image As Image + + If AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim ETHashes As New List(Of String) + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, "fanart") + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + For Each sFile As FileInfo In lFi + Select Case True + Case sFile.Name.Contains("(original)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Master.eSettings.AutoET Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + End If + Next + End If + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + 'Me.Clear() + Next + + _Image = Nothing + FileUtils.Delete.DeleteDirectory(CachePath) + + End If + End If + End If + End Sub + + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ + AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ + (AdvancedSettings.GetBooleanSetting("tUseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + Public Shared Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + End If + + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) + End Sub + + + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0) + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub + Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo + Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() + + For i As Integer = 0 To UBound(Encoders) + If Encoders(i).FormatID = Format.Guid Then + Return Encoders(i) + End If + Next + + Return Nothing + End Function +#End Region 'Methods + + + +End Class \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeMPDB.vb b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeMPDB.vb new file mode 100644 index 0000000..cd949ec --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeMPDB.vb @@ -0,0 +1,167 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Namespace MPDB + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwMPDB As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwMPDB.IsBusy Then Me.bwMPDB.CancelAsync() + + While Me.bwMPDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String) + Try + If Not Me.bwMPDB.IsBusy Then + Me.bwMPDB.WorkerSupportsCancellation = True + Me.bwMPDB.WorkerReportsProgress = True + Me.bwMPDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetMPDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + + If Me.bwMPDB.CancellationPending Then Return Nothing + + Try + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.movieposterdb.com/movie/", imdbID)) + sHTTP = Nothing + + If Me.bwMPDB.CancellationPending Then Return Nothing + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(1) + End If + + If Regex.IsMatch(HTML, String.Concat("http://www.imdb.com/title/tt", imdbID), RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline) Then + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "http://www.movieposterdb.com/posters/[0-9_](.*?)/[0-9](.*?)/[0-9](.*?)/[a-z0-9_](.*?).jpg") + + Dim PosterURL As String = String.Empty + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(2) + End If + + For Each mPoster As Match In mcPoster + If Me.bwMPDB.CancellationPending Then Return Nothing + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "l") + alPosters.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "t") + alPosters.Add(New MediaContainers.Image With {.Description = "thumb", .URL = PosterURL}) + Next + End If + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Private Sub bwMPDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetMPDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwMPDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDB.ProgressChanged + If Not bwMPDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwMPDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeOFDB.vb b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeOFDB.vb new file mode 100644 index 0000000..2e94cca --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeOFDB.vb @@ -0,0 +1,242 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class OFDB + + #Region "Fields" + + Private imdbID As String + Private OFDBMovie As MediaContainers.Movie + Private _genre As String + Private _outline As String + Private _plot As String + Private _title As String + + #End Region 'Fields + + #Region "Constructors" + + Public Sub New(ByVal sID As String, ByRef mMovie As MediaContainers.Movie) + Clear() + imdbID = sID + OFDBMovie = mMovie + + GetOFDBDetails() + End Sub + + #End Region 'Constructors + + #Region "Properties" + + Public Property Genre() As String + Get + Return _genre + End Get + Set(ByVal value As String) + _genre = value + End Set + End Property + + Public Property Outline() As String + Get + Return _outline + End Get + Set(ByVal value As String) + _outline = value + End Set + End Property + + Public Property Plot() As String + Get + Return _plot + End Get + Set(ByVal value As String) + _plot = value + End Set + End Property + + Public Property Title() As String + Get + Return _title + End Get + Set(ByVal value As String) + _title = value + End Set + End Property + + #End Region 'Properties + + #Region "Methods" + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Sub Clear() + _title = String.Empty + _outline = String.Empty + _plot = String.Empty + _genre = String.Empty + End Sub + + Private Function GetFullPlot(ByVal sURL As String) As String + Dim FullPlot As String = String.Empty + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + Dim D, W, B As Integer + Dim tmpHTML As String + + D = Html.IndexOf("Eine Inhaltsangabe von") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim + W = tmpHTML.IndexOf("

") + If W > 0 Then + B = tmpHTML.IndexOf("

", W + 16) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("
", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return FullPlot + End Function + + Private Sub GetOFDBDetails() + Dim sURL As String = GetOFDBUrlFromIMDBID() + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(Html) Then + 'title + If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(Html, "

([^<]+)

").Groups(1).Value.ToString)) + _title = OFDBTitle + End If + + Dim D, W, B As Integer + Dim tmpHTML As String + + 'outline + If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then + D = Html.IndexOf("Inhalt:") + + If D > 0 Then + W = Html.IndexOf("
", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + + 'full plot + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then + D = Html.IndexOf("Inhalt:") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 14, L - (D + 14)).Trim + W = tmpHTML.IndexOf(" 0 Then + B = tmpHTML.IndexOf(""">[mehr]", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + End If + End If + + 'genre + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Genre) OrElse Not Master.eSettings.LockGenre Then + D = HTML.IndexOf("class=""Normal"">Genre(s):
") + If D > 0 Then + W = HTML.IndexOf("", D) + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), ".*?)[""'].*?>(?.*?)") + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetOFDBUrlFromIMDBID() As String + Dim ofdbURL As String = String.Empty + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.ofdb.de/view.php?SText=", imdbID, "&Kat=IMDb&page=suchergebnis&sourceid=mozilla-search")) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(HTML) Then + Dim mcOFDBURL As MatchCollection = Regex.Matches(HTML, " 0 Then + 'just use the first one if more are found + ofdbURL = String.Concat("http://www.ofdb.de/", Regex.Match(mcOFDBURL(0).Value.ToString, """(film/([^<]+))""").Groups(1).Value.ToString) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return ofdbURL + End Function + + #End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeTMDB.vb b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeTMDB.vb new file mode 100644 index 0000000..9db6818 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeTMDB.vb @@ -0,0 +1,282 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDB + + Public Class Scraper + +#Region "Fields" + + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Private backdrop_names(3) As v3Size + Private poster_names(5) As v3Size + + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + ' v3 does not have description anymore + poster_names(0).description = "thumb" + poster_names(0).size = "w92" + poster_names(0).width = 92 + poster_names(1).description = "w154" + poster_names(1).size = "w154" + poster_names(1).width = 154 + poster_names(2).description = "cover" + poster_names(2).size = "w185" + poster_names(2).width = 185 + poster_names(3).description = "w342" + poster_names(3).size = "w342" + poster_names(3).width = 342 + poster_names(4).description = "mid" + poster_names(4).size = "w500" + poster_names(4).width = 500 + poster_names(5).description = "original" + poster_names(5).size = "original" + poster_names(5).width = 0 + backdrop_names(0).description = "thumb" + backdrop_names(0).size = "w300" + backdrop_names(0).width = 300 + backdrop_names(1).description = "poster" + backdrop_names(1).size = "w780" + backdrop_names(1).width = 780 + backdrop_names(2).description = "w1280" + backdrop_names(2).size = "w1280" + backdrop_names(2).width = 1280 + backdrop_names(3).description = "original" + backdrop_names(3).size = "original" + backdrop_names(3).width = 0 + End Sub + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim images As V3.TmdbMovieImages + Dim aW, aH As Integer + + If bwTMDB.CancellationPending Then Return Nothing + Try + images = _TMDBApi.GetMovieImages(CInt(imdbID), _MySettings.TMDBLanguage) + If sType = "poster" Then + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + Return alPosters + End If + End If + Else + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + Return alPosters + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If sType = "poster" Then + For Each tmdbI As V3.Poster In images.posters + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In poster_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + ElseIf sType = "backdrop" Then + For Each tmdbI As V3.Backdrop In images.backdrops + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In backdrop_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As List(Of String) + Dim trailers As V3.TmdbMovieTrailers + Dim YT As New List(Of String) + + Try + If bwTMDB.CancellationPending Then Return Nothing + trailers = _TMDBApi.GetMovieTrailers(CInt(imdbID), _MySettings.TMDBLanguage) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + trailers = _TMDBApiE.GetMovieTrailers(CInt(imdbID)) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + Return Nothing + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + 'If bwTMDB.WorkerReportsProgress Then + ' bwTMDB.ReportProgress(2) + 'End If + + If trailers.youtube.Count > 0 Then + For Each trailer In trailers.youtube + YT.Add(String.Format("http://www.youtube.com/watch?v={0}{1})", trailer.source, CStr(IIf(trailer.size = "HD", "&hd=1", "")))) + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return YT + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure v3Size + +#Region "Fields" + + Dim size As String + Dim description As String + Dim width As Integer + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeTMDB_old.vb b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeTMDB_old.vb new file mode 100644 index 0000000..c5bca0a --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeTMDB_old.vb @@ -0,0 +1,244 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports EmberAPI + +Namespace TMDB_old + + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + + Private Const APIKey As String = "b1ecff8c76278262b27de1569f57f6bd" + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB.......Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB................Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB................Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + sHTTP = Nothing + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As String + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + Dim tLang As String + + tLang = AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en") + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/{0}/tt{1}", APIKey, imdbID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + Dim tmdbNode = From xNode In xmlTMDB.Elements + + If tmdbNode.Count > 0 Then + If Not tmdbNode(0).Value = "Your query didn't return any results." Then + Dim movieID As String = xmlTMDB.............Value + Dim i As Integer + + + For i = 0 To 1 Step 1 + sHTTP = New HTTP + ApiXML = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/{0}/xml/{1}/{2}", tLang, APIKey, movieID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + Dim Trailers = From tNode In xmlTMDB......... Select tNode. + If Trailers.Count > 0 AndAlso Not String.IsNullOrEmpty(Trailers(0).Value) Then + If Trailers(0).Value.ToLower.IndexOf("youtube.com") > 0 Then + Return Trailers(0).Value + i += 1 + End If + Else + tLang = "en" + End If + End If + Next + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return String.Empty + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeTMDBg.vb b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeTMDBg.vb new file mode 100644 index 0000000..86f6083 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeTMDBg.vb @@ -0,0 +1,723 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.Globalization +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDBg + + Public Class MovieSearchResults + +#Region "Fields" + + Private _Matches As New List(Of MediaContainers.Movie) + +#End Region 'Fields + +#Region "Properties" + + Public Property Matches() As List(Of MediaContainers.Movie) + Get + Return _Matches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _Matches = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class Scraper + +#Region "Fields" + + 'Public IMDBURL As String + 'Private _TMDBId As String + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Friend WithEvents bwTMDBg As New System.ComponentModel.BackgroundWorker + + Private _sPoster As String + +#End Region 'Fields + +#Region "Properties" + Public ReadOnly Property TMDBConf() As V3.TmdbConfiguration + Get + Return _TMDBConf + End Get + End Property +#End Region + +#Region "Enumerations" + + Private Enum SearchType + Movies = 0 + Details = 1 + SearchDetails = 2 + End Enum + +#End Region 'Enumerations + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + + Public Event SearchResultsDownloaded(ByVal mResults As TMDBg.MovieSearchResults) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + End Sub + + Public Sub CancelAsync() + If bwTMDBg.IsBusy Then bwTMDBg.CancelAsync() + + While bwTMDBg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetMovieID(ByRef DBMovie As Structures.DBMovie) + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + + If bwTMDBg.CancellationPending Then Return + + Movie = _TMDBApi.GetMovieByIMDB(DBMovie.Movie.ID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(DBMovie.Movie.ID) + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return + End If + + DBMovie.Movie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End Sub + + Public Function GetMovieInfo(ByVal strID As String, ByRef IMDBMovie As MediaContainers.Movie, ByVal FullCrew As Boolean, ByVal FullCast As Boolean, ByVal GetPoster As Boolean, ByVal Options As Structures.ScrapeOptions, ByVal IsSearch As Boolean) As Boolean + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + Dim tStr As String + + If bwTMDBg.CancellationPending Then Return Nothing + + If Strings.Left(strID.ToLower(), 2) = "tt" Then + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(strID) + Else + Movie = _TMDBApi.GetMovieInfo(CInt(strID), _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieInfo(CInt(strID)) + End If + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return False + End If + + IMDBMovie.ID = CStr(IIf(String.IsNullOrEmpty(Movie.imdb_id) AndAlso _MySettings.FallBackEng, MovieE.imdb_id, Movie.imdb_id)) + IMDBMovie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + If bwTMDBg.CancellationPending Or IsNothing(Movie) Then Return Nothing + + Dim Keywords As WatTmdb.V3.TmdbMovieKeywords + Keywords = _TMDBApi.GetMovieKeywords(Movie.id) + If Not IsNothing(Keywords) AndAlso Not IsNothing(Keywords.keywords) Then + If Keywords.keywords.Count <> 0 AndAlso _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + End If + + ' to be added the tags structure + '' + '' ... + '' Name of the tag + '' ... + '' + If Options.bTitle Then + IMDBMovie.OriginalTitle = CStr(IIf(String.IsNullOrEmpty(Movie.original_title) AndAlso _MySettings.FallBackEng, MovieE.original_title, Movie.original_title)) + If String.IsNullOrEmpty(IMDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + IMDBMovie.Title = CStr(IIf(String.IsNullOrEmpty(Movie.title) AndAlso _MySettings.FallBackEng, MovieE.title, Movie.title)) + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If GetPoster Then + ' I will add original always. to be updated if size, TMDBConf.images.poster_sizes(0) & + Dim Images As WatTmdb.V3.TmdbMovieImages + Images = _TMDBApi.GetMovieImages(Movie.id, _MySettings.TMDBLanguage) + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If (Images.posters.Count = 0) AndAlso _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + End If + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If Images.posters.Count > 0 Then + _sPoster = _TMDBConf.images.base_url & "w92" & Images.posters(0).file_path + Else + _sPoster = "" + End If + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bYear Then IMDBMovie.Year = Left(CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)), 4) + + Dim Releases As WatTmdb.V3.TmdbMovieReleases = Nothing + If Options.bMPAA Then + IMDBMovie.MPAA = "" + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each Country In Releases.countries + If Country.iso_3166_1.ToUpper = CStr(IIf(Master.eSettings.CertificationLang = "", "US", Master.eSettings.CertificationLang)) Then + IMDBMovie.MPAA = Country.certification + Exit For + End If + Next + End If + IMDBMovie.Certification = IMDBMovie.MPAA + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bRelease Then + IMDBMovie.ReleaseDate = CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)) + End If + + If Options.bRating AndAlso (String.IsNullOrEmpty(IMDBMovie.Rating) OrElse Not Master.eSettings.LockRating) Then + IMDBMovie.Rating = CStr(IIf(IsNothing(Movie.vote_average) AndAlso Movie.vote_average = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_average, Movie.vote_average)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'trailer + If Options.bTrailer AndAlso (String.IsNullOrEmpty(IMDBMovie.Trailer) OrElse Not Master.eSettings.LockTrailer) Then + Dim Trailers As WatTmdb.V3.TmdbMovieTrailers + Trailers = _TMDBApi.GetMovieTrailers(Movie.id) + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If (Trailers.youtube.Count = 0) AndAlso _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + End If + + IMDBMovie.Trailer = "" + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If Trailers.youtube.Count > 0 Then + IMDBMovie.Trailer = "http://www.youtube.com/watch?hd=1&v=" & Trailers.youtube(0).source + End If + End If + + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bVotes Then + IMDBMovie.Votes = CStr(IIf(IsNothing(Movie.vote_count) AndAlso Movie.vote_count = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_count.ToString(), Movie.vote_count.ToString())) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Dim aCast As WatTmdb.V3.TmdbMovieCast = Nothing + If Options.bCast Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.cast.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + + Dim Cast As New List(Of MediaContainers.Person) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + For Each aAc As WatTmdb.V3.Cast In aCast.cast + Dim aPer As New MediaContainers.Person + aPer.Name = aAc.name + aPer.Role = aAc.character + ' to be added / dialog to choose the size of the images + aPer.Thumb = _TMDBConf.images.base_url & "original" & aAc.profile_path + Cast.Add(aPer) + Next + End If + IMDBMovie.Actors = Cast + End If + + If Options.bTagline AndAlso (String.IsNullOrEmpty(IMDBMovie.Tagline) OrElse Not Master.eSettings.LockTagline) Then + IMDBMovie.Tagline = CStr(IIf(String.IsNullOrEmpty(IMDBMovie.Tagline) AndAlso _MySettings.FallBackEng, MovieE.tagline, Movie.tagline)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get countries of the movie + If Options.bCountry Then + If IsNothing(Releases) Then + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + End If + IMDBMovie.Countries.Clear() + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each aCo As WatTmdb.V3.ReleaseCountry In Releases.countries + IMDBMovie.Countries.Add(aCo.iso_3166_1) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get genres of the movie + If Options.bGenre AndAlso (String.IsNullOrEmpty(IMDBMovie.Genre) OrElse Not Master.eSettings.LockGenre) Then + IMDBMovie.Genres.Clear() + Dim tGen As System.Collections.Generic.List(Of WatTmdb.V3.MovieGenre) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tGen = CType(IIf(Movie.genres.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.genres, Movie.genres), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + Else + tGen = CType(IIf(_MySettings.FallBackEng, MovieE.genres, Nothing), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + End If + + + If Not IsNothing(tGen) Then + For Each aGen As WatTmdb.V3.MovieGenre In tGen + IMDBMovie.Genres.Add(aGen.name) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bOutline AndAlso (String.IsNullOrEmpty(IMDBMovie.Outline) OrElse Not Master.eSettings.LockOutline) Then + IMDBMovie.Outline = CStr(IIf(String.IsNullOrEmpty(Movie.overview) AndAlso _MySettings.FallBackEng, MovieE.overview, Movie.overview)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bPlot AndAlso (String.IsNullOrEmpty(IMDBMovie.Plot) OrElse Not Master.eSettings.LockPlot) Then + If Master.eSettings.OutlineForPlot AndAlso String.IsNullOrEmpty(IMDBMovie.Plot) AndAlso Not String.IsNullOrEmpty(IMDBMovie.Outline) Then + IMDBMovie.Plot = IMDBMovie.Outline + Else + IMDBMovie.Plot = "" + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get the movie duration + If Options.bRuntime Then + IMDBMovie.Runtime = CStr(IIf(IsNothing(Movie.runtime) AndAlso Movie.runtime = 0 AndAlso _MySettings.FallBackEng, MovieE.runtime.ToString(), Movie.runtime.ToString())) + End If + + 'Get Production Studio + If Options.bStudio AndAlso (String.IsNullOrEmpty(IMDBMovie.Studio) OrElse Not Master.eSettings.LockStudio) Then + tStr = "" + Dim tPC As System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tPC = CType(IIf(Movie.production_companies.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.production_companies, Movie.production_companies), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + Else + tPC = CType(IIf(_MySettings.FallBackEng, MovieE.production_companies, Nothing), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + End If + + If Not IsNothing(tPC) Then + For Each aPro As WatTmdb.V3.ProductionCompany In tPC + tStr = tStr & " / " & aPro.name + Next + End If + If Len(tStr) > 3 Then + tStr = Trim(Right(tStr, Len(tStr) - 3)) + End If + IMDBMovie.Studio = tStr + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get All Other Info + If FullCrew Or Options.bWriters Or Options.bDirector Then + If IsNothing(aCast) Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.crew.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + End If + IMDBMovie.Credits.Clear() + IMDBMovie.Directors.Clear() + If Not IsNothing(aCast.crew) Then + For Each aAc As WatTmdb.V3.Crew In aCast.crew + If FullCrew Then + IMDBMovie.Credits.Add(aAc.name) + ElseIf Options.bWriters Then + If aAc.department = "Writing" AndAlso aAc.job = "Writer" Then + IMDBMovie.Credits.Add(aAc.name) + End If + End If + If Options.bDirector Then + If aAc.job = "Director" Then + IMDBMovie.Directors.Add(aAc.name) + End If + End If + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Return True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Function GetMovieStudios(ByVal strID As String) As List(Of String) + Dim alStudio As New List(Of String) + Dim Movie As WatTmdb.V3.TmdbMovie + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + If Movie.production_companies.Count = 0 And _MySettings.FallBackEng Then + Movie = _TMDBApi.GetMovieByIMDB(strID, "en") + End If + For Each aComp In Movie.production_companies + alStudio.Add(aComp.name) + Next + + Return alStudio + + End Function + + Public Function GetSearchMovieInfo(ByVal sMovieName As String, ByRef dbMovie As Structures.DBMovie, ByVal iType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As MediaContainers.Movie + Dim r As MovieSearchResults = SearchMovie(sMovieName) + Dim b As Boolean = False + Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie + + Try + Select Case iType + Case Enums.ScrapeType.FullAsk, Enums.ScrapeType.UpdateAsk, Enums.ScrapeType.NewAsk, Enums.ScrapeType.MarkAsk, Enums.ScrapeType.FilterAsk + + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + Master.tmpMovie.Clear() + Using dIMDB As New dlgTMDBSearchResults(_MySettings, Me) + + If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + b = False + Else + b = GetMovieInfo(Master.tmpMovie.ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + Else + b = False + End If + End Using + End If + Case Enums.ScrapeType.FullAuto, Enums.ScrapeType.UpdateAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.SingleScrape, Enums.ScrapeType.FilterAuto + Dim exactHaveYear As Integer = FindYear(dbMovie.Filename, r.Matches) + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + b = GetMovieInfo(r.Matches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + End Select + + If b Then + Return imdbMovie + Else + Return New MediaContainers.Movie + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New MediaContainers.Movie + End Try + End Function + + Private Function FindYear(ByVal tmpname As String, ByVal lst As List(Of MediaContainers.Movie)) As Integer + Dim tmpyear As String = "" + Dim i As Integer + Dim ret As Integer = -1 + tmpname = Path.GetFileNameWithoutExtension(tmpname) + tmpname = tmpname.Replace(".", " ").Trim.Replace("(", " ").Replace(")", "").Trim + i = tmpname.LastIndexOf(" ") + If i >= 0 Then + tmpyear = tmpname.Substring(i + 1, tmpname.Length - i - 1) + If IsNumeric(tmpyear) AndAlso Convert.ToInt32(tmpyear) > 1950 Then 'let's assume there are no movies older then 1950 + For c = 0 To lst.Count - 1 + If lst(c).Year = tmpyear Then + ret = c + Exit For + End If + Next + End If + End If + Return ret + End Function + + Public Sub GetSearchMovieInfoAsync(ByVal imdbID As String, ByVal IMDBMovie As MediaContainers.Movie, ByVal Options As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.SearchDetails, _ + .Parameter = imdbID, .IMDBMovie = IMDBMovie, .Options = Options}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + + Public Sub SearchMovieAsync(ByVal sMovie As String, ByVal filterOptions As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.Movies, _ + .Parameter = sMovie, .Options = filterOptions}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + Select Case Args.Search + Case SearchType.Movies + Dim r As MovieSearchResults = SearchMovie(Args.Parameter) + e.Result = New Results With {.ResultType = SearchType.Movies, .Result = r} + Case SearchType.SearchDetails + Dim s As Boolean = GetMovieInfo(Args.Parameter, Args.IMDBMovie, False, False, True, Args.Options, True) + e.Result = New Results With {.ResultType = SearchType.SearchDetails, .Success = s} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub BW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBg.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.ResultType + Case SearchType.Movies + RaiseEvent SearchResultsDownloaded(DirectCast(Res.Result, MovieSearchResults)) + Case SearchType.SearchDetails + Dim movieInfo As MovieSearchResults = DirectCast(Res.Result, MovieSearchResults) + RaiseEvent SearchMovieInfoDownloaded(_sPoster, Res.Success) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + 'Private Function GetForcedTitle(ByVal strID As String, ByVal oTitle As String) As String + ' Dim fTitle As String = oTitle + ' Dim Movie As WatTmdb.V3.TmdbMovie + + ' Try + ' '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + ' If Left(strID.ToLower(), 4) = "tt" Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), _MySettings.TMDBLanguage) + ' If IsNothing(Movie) And _MySettings.FallBackEng Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), "en") + ' End If + ' Else + ' Movie = _TMDBApi.GetMovieByIMDB(strID) + ' End If + + ' fTitle = Movie.title + + ' Return fTitle + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' Return fTitle + ' End Try + 'End Function + + Private Function SearchMovie(ByVal sMovie As String) As MovieSearchResults + Try + Dim R As New MovieSearchResults + Dim Page As Integer = 1 + Dim Movies As WatTmdb.V3.TmdbMovieSearch + Dim TotP As Integer + Dim aE As Boolean + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + If Movies.total_results = 0 And _MySettings.FallBackEng Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + aE = True + End If + If Movies.total_results > 0 Then + Dim t1 As String + Dim t2 As String + Dim t3 As String + TotP = Movies.total_pages + While Page <= TotP And Page <= 3 + For Each aMovie In Movies.results + Dim aMI As WatTmdb.V3.TmdbMovie + aMI = _TMDBApi.GetMovieInfo(aMovie.id) + If IsNothing(aMI) Then + aMI = _TMDBApiE.GetMovieInfo(aMovie.id) + End If + If IsNothing(aMI.imdb_id) Then + t1 = "" + Else + t1 = aMI.imdb_id.ToString + End If + t2 = CStr(IIf(String.IsNullOrEmpty(aMovie.title), "", aMovie.title)) + t3 = Left(CStr(IIf(String.IsNullOrEmpty(aMovie.release_date), "", aMovie.release_date)), 4) + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(t1, t2, t3, 0) + lNewMovie.TMDBID = aMI.id.ToString + R.Matches.Add(lNewMovie) + Next + Page = Page + 1 + If aE Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + Else + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + End If + + End While + End If + + Return R + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Nothing + End Try + End Function + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim FullCast As Boolean + Dim FullCrew As Boolean + Dim IMDBMovie As MediaContainers.Movie + Dim Options As Structures.ScrapeOptions + Dim Parameter As String + Dim Search As SearchType + 'Dim TMDBConf As V3.TmdbConfiguration + 'Dim TMDBApi As V3.Tmdb + 'Dim FallBackEng As Boolean + 'Dim TMDBLang As String +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultType As SearchType + Dim Success As Boolean + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeTrailers.vb b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeTrailers.vb new file mode 100644 index 0000000..72ce5f8 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeTrailers.vb @@ -0,0 +1,265 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System +Imports System.IO +Imports System.Net +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI +Imports WatTmdb + +Public Class Trailers + +#Region "Fields" + + Private WebPage As New HTTP + Private _ImdbID As String = String.Empty + Private _ImdbTrailerPage As String = String.Empty + Private _TrailerList As New List(Of String) + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + Me.Clear() + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + AddHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + Me.WebPage.Cancel() + End Sub + + Public Sub Clear() + Me._TrailerList.Clear() + Me._ImdbID = String.Empty + Me._ImdbTrailerPage = String.Empty + End Sub + + Public Sub DeleteTrailers(ByVal sPath As String, ByVal NewTrailer As String) + Dim parPath As String = Directory.GetParent(sPath).FullName + Dim tmpName As String = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(sPath))) + Dim tmpNameNoStack As String = Path.Combine(parPath, Path.GetFileNameWithoutExtension(sPath)) + For Each t As String In Master.eSettings.ValidExts + If File.Exists(String.Concat(tmpName, "-trailer", t)) AndAlso Not String.Concat(tmpName, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpName, "[trailer]", t)) AndAlso Not String.Concat(tmpName, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "[trailer]", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "-trailer", t)) AndAlso Not String.Concat(tmpNameNoStack, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) + End If + Next + End Sub + + Public Sub DownloadProgressUpdated(ByVal iPercent As Integer) + RaiseEvent ProgressUpdated(iPercent) + End Sub + + Public Function DownloadSingleTrailer(ByVal sPath As String, ByVal ImdbID As String, ByVal isSingle As Boolean, ByVal currNfoTrailer As String) As String + Dim tURL As String = String.Empty + Try + Me._TrailerList.Clear() + + If Not Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, True) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + + Dim tLink As String = String.Empty + If Regex.IsMatch(Me._TrailerList.Item(0).ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Dim YT As New YouTube.Scraper + YT.GetVideoLinks(Me._TrailerList.Item(0).ToString) + If YT.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + tLink = YT.VideoLinks(Master.eSettings.PreferredTrailerQuality).URL + Else + Select Case Master.eSettings.PreferredTrailerQuality + Case Enums.TrailerQuality.HD1080p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720p) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720p).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD1080pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720pVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720pVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HD720p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD720pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HQFLV + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HQVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.SQMP4 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.SQFLV + tLink = String.Empty + Case Enums.TrailerQuality.SQVP8 + tLink = String.Empty + End Select + End If + Else + tLink = Me._TrailerList.Item(0).ToString + End If + + If Not String.IsNullOrEmpty(tLink) Then + tURL = WebPage.DownloadFile(tLink, sPath, False, "trailer") + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + End If + ElseIf Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, False) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + tURL = Me._TrailerList.Item(0).ToString + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return tURL + End Function + + Public Function DownloadTrailer(ByVal sPath As String, ByVal sURL As String) As String + Dim tURL As String = String.Empty + If Not String.IsNullOrEmpty(sURL) Then + tURL = WebPage.DownloadFile(sURL, sPath, True, "trailer") + + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + Return tURL + End Function + + Public Function GetTrailers(ByVal ImdbID As String, Optional ByVal BreakAfterFound As Boolean = True) As List(Of String) + Me._ImdbID = ImdbID + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", False) Then + Me.GetTMDBTrailer() + End If + + Return Me._TrailerList + End Function + + Public Function IsAllowedToDownload(ByVal sPath As String, ByVal isDL As Boolean, ByVal currNfoTrailer As String, Optional ByVal isSS As Boolean = False) As Boolean + Dim fScanner As New Scanner + + If isDL Then + If String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) OrElse Master.eSettings.OverwriteTrailer Then + Return True + Else + If isSS AndAlso String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) Then + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + Else + Return False + End If + End If + Else + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + End If + End Function + + Private Sub GetTMDBTrailer() + Dim TMDB As New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim YT As List(Of String) + + YT = TMDB.GetTrailers(_ImdbID) + + If Not YT.Count = 0 Then + For Each ast In YT + Me._TrailerList.Add(ast) + Next + End If + + TMDB = Nothing + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeYouTube.vb b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeYouTube.vb new file mode 100644 index 0000000..51ed7c4 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/clsScrapeYouTube.vb @@ -0,0 +1,336 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace YouTube + + Public Class Scraper + +#Region "Fields" + + Friend WithEvents bwYT As New System.ComponentModel.BackgroundWorker + + Private _VideoLinks As VideoLinkItemCollection + +#End Region 'Fields + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event VideoLinksRetrieved(ByVal bSuccess As Boolean) + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property VideoLinks() As VideoLinkItemCollection + Get + If _VideoLinks Is Nothing Then + _VideoLinks = New VideoLinkItemCollection + End If + Return _VideoLinks + End Get + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() + If bwYT.IsBusy Then bwYT.CancelAsync() + + While bwYT.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetVideoLinks(ByVal url As String) + Try + _VideoLinks = ParseYTFormats(url, False) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub GetVideoLinksAsync(ByVal url As String) + Try + If Not bwYT.IsBusy Then + _VideoLinks = Nothing + bwYT.WorkerSupportsCancellation = True + bwYT.RunWorkerAsync(url) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwYT.DoWork + Dim Url As String = DirectCast(e.Argument, String) + + Try + e.Result = ParseYTFormats(Url, True) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwYT.RunWorkerCompleted + Try + If e.Cancelled Then + 'user cancelled + RaiseEvent VideoLinksRetrieved(False) + ElseIf e.Error IsNot Nothing Then + 'exception occurred + RaiseEvent Exception(e.Error) + Else + 'all good + If e.Result IsNot Nothing Then + _VideoLinks = DirectCast(e.Result, VideoLinkItemCollection) + RaiseEvent VideoLinksRetrieved(True) + Else + RaiseEvent VideoLinksRetrieved(False) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetVideoTitle(ByVal HTML As String) As String + Dim result As String = "" + 'Dim KeyPattern As String = "'VIDEO_TITLE':\s*'([^']*?)'" + Dim KeyPattern As String = "meta name=\""title\"" content=\s*\""([^']*?)\""" + 'meta name="title" content= + If Regex.IsMatch(HTML, KeyPattern) Then + result = Regex.Match(HTML, KeyPattern).Groups(1).Value + End If + + Return result + End Function + + Private Function ParseYTFormats(ByVal url As String, ByVal doProgress As Boolean) As VideoLinkItemCollection + Dim DownloadLinks As New VideoLinkItemCollection + Dim sHTTP As New HTTP + + Try + If bwYT.CancellationPending Then Return DownloadLinks + + Dim Html As String = sHTTP.DownloadData(url) + If Html.ToLower.Contains("page not found") Then + Html = String.Empty + End If + + If String.IsNullOrEmpty(Html.Trim) Then Return DownloadLinks + If bwYT.CancellationPending Then Return DownloadLinks + + Dim VideoTitle As String = GetVideoTitle(Html) + VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") + + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) + If fmtMatch.Success Then + Dim FormatMap As String = fmtMatch.Groups(1).Value + Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") + + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) + Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) + + For i As Integer = 0 To FormatArray.Length - 1 + Dim yturl As String = rurl.Match(FormatArray(i)).Groups(1).Value + Dim ytitag As String = ritag.Match(FormatArray(i)).Groups(1).Value + Dim ytsig As String = rsig.Match(FormatArray(i)).Groups(1).Value + + 'Console.WriteLine("Trailer Itag: {0}", ytitag) + 'Console.WriteLine("Trailer Url: {0}", yturl) + 'Console.WriteLine("Trailer Sig: {0}", ytsig) + + Dim Link As New VideoLinkItem + Select Case ytitag + ' ********************************************************************** + ' see all itags http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs + ' ********************************************************************** + Case "5" + Link.Description = "240p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "6" + Link.Description = "270p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "13" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "17" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "18" + Link.Description = "360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQMP4 + Case "22" + Link.Description = "720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD720p + Case "34" + Link.Description = "360p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQFLV + Case "35" + Link.Description = "480p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HQFLV + Case "36" + Link.Description = "240p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "37" + Link.Description = "1080p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD1080p + Case "38" + Link.Description = "1536p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "43" + Link.Description = "360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.SQVP8 + Case "44" + Link.Description = "480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HQVP8 + Case "45" + Link.Description = "720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD720pVP8 + Case "46" + Link.Description = "1080p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD1080pVP8 + Case "82" + Link.Description = "3D 360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "83" + Link.Description = "3D 480p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "84" + Link.Description = "3D 720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "85" + Link.Description = "3D 520p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "100" + Link.Description = "3D 360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "101" + Link.Description = "3D 480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "102" + Link.Description = "3D 720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "120" + Link.Description = "720p LiveStream (FLV, AVC)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case Else + Link.Description = "Other" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + 'Continue For + End Select + + Link.URL = Web.HttpUtility.UrlDecode(Web.HttpUtility.UrlDecode(yturl)) & "&signature=" & ytsig & "&title=" & Web.HttpUtility.UrlEncode(VideoTitle) + Link.URL = Link.URL.Replace("sig=", "signature=") ' sig= returns HTTP 403 //oldstyle, keep it + 'Console.WriteLine("Trailer Url decoded: {0}", Link.URL) + + If bwYT.CancellationPending Then Return DownloadLinks + + If Not String.IsNullOrEmpty(Link.URL) AndAlso sHTTP.IsValidURL(Link.URL) Then + DownloadLinks.Add(Link) + End If + + If bwYT.CancellationPending Then Return DownloadLinks + + Next + + End If + Return DownloadLinks + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New VideoLinkItemCollection + Finally + sHTTP = Nothing + End Try + End Function + +#End Region 'Methods + + End Class + + Public Class VideoLinkItem + +#Region "Fields" + + Private _Description As String + Private _FormatQuality As Enums.TrailerQuality + Private _URL As String + +#End Region 'Fields + +#Region "Properties" + + Public Property Description() As String + Get + Return _Description + End Get + Set(ByVal value As String) + _Description = value + End Set + End Property + + Public Property URL() As String + Get + Return _URL + End Get + Set(ByVal value As String) + _URL = value + End Set + End Property + + Friend Property FormatQuality() As Enums.TrailerQuality + Get + Return _FormatQuality + End Get + Set(ByVal value As Enums.TrailerQuality) + _FormatQuality = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class VideoLinkItemCollection + Inherits Generic.SortedList(Of Enums.TrailerQuality, VideoLinkItem) + +#Region "Methods" + + Public Shadows Sub Add(ByVal Link As VideoLinkItem) + If Not MyBase.ContainsKey(Link.FormatQuality) Then MyBase.Add(Link.FormatQuality, Link) + End Sub + +#End Region 'Methods + + End Class + +End Namespace + diff --git a/Addons/scraper.FanartTV.Poster/Scraper/dlgImgSelect.Designer.vb b/Addons/scraper.FanartTV.Poster/Scraper/dlgImgSelect.Designer.vb new file mode 100644 index 0000000..3c9254c --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/dlgImgSelect.Designer.vb @@ -0,0 +1,569 @@ + _ +Partial Class dlgImgSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgImgSelect)) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.pnlSize = New System.Windows.Forms.Panel() + Me.btnPreview = New System.Windows.Forms.Button() + Me.rbSmall = New System.Windows.Forms.RadioButton() + Me.rbMedium = New System.Windows.Forms.RadioButton() + Me.rbLarge = New System.Windows.Forms.RadioButton() + Me.rbXLarge = New System.Windows.Forms.RadioButton() + Me.pnlFanart = New System.Windows.Forms.Panel() + Me.chkThumb = New System.Windows.Forms.CheckBox() + Me.chkMid = New System.Windows.Forms.CheckBox() + Me.chkOriginal = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlDLStatus = New System.Windows.Forms.Panel() + Me.pnlIMDB = New System.Windows.Forms.Panel() + Me.lblDL6Status = New System.Windows.Forms.Label() + Me.lblDL6 = New System.Windows.Forms.Label() + Me.pbDL6 = New System.Windows.Forms.ProgressBar() + Me.pnlSinglePic = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlFANARTTV = New System.Windows.Forms.Panel() + Me.lblDL3Status = New System.Windows.Forms.Label() + Me.lblDL3 = New System.Windows.Forms.Label() + Me.pbDL3 = New System.Windows.Forms.ProgressBar() + Me.pnlMDB = New System.Windows.Forms.Panel() + Me.lblDL5Status = New System.Windows.Forms.Label() + Me.lblDL5 = New System.Windows.Forms.Label() + Me.pbDL5 = New System.Windows.Forms.ProgressBar() + Me.pnlIMPA = New System.Windows.Forms.Panel() + Me.lblDL4Status = New System.Windows.Forms.Label() + Me.lblDL4 = New System.Windows.Forms.Label() + Me.pbDL4 = New System.Windows.Forms.ProgressBar() + Me.pnlTMDB = New System.Windows.Forms.Panel() + Me.lblDL2Status = New System.Windows.Forms.Label() + Me.lblDL2 = New System.Windows.Forms.Label() + Me.pbDL2 = New System.Windows.Forms.ProgressBar() + Me.TableLayoutPanel1.SuspendLayout() + Me.pnlBottomMain.SuspendLayout() + Me.pnlSize.SuspendLayout() + Me.pnlFanart.SuspendLayout() + Me.pnlDLStatus.SuspendLayout() + Me.pnlIMDB.SuspendLayout() + Me.pnlSinglePic.SuspendLayout() + Me.pnlFANARTTV.SuspendLayout() + Me.pnlMDB.SuspendLayout() + Me.pnlIMPA.SuspendLayout() + Me.pnlTMDB.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(687, 11) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(836, 495) + Me.pnlBG.TabIndex = 1 + Me.pnlBG.Visible = False + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.pnlSize) + Me.pnlBottomMain.Controls.Add(Me.pnlFanart) + Me.pnlBottomMain.Controls.Add(Me.lblInfo) + Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) + Me.pnlBottomMain.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 495) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(836, 50) + Me.pnlBottomMain.TabIndex = 0 + ' + 'pnlSize + ' + Me.pnlSize.BackColor = System.Drawing.Color.White + Me.pnlSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.pnlSize.Controls.Add(Me.btnPreview) + Me.pnlSize.Controls.Add(Me.rbSmall) + Me.pnlSize.Controls.Add(Me.rbMedium) + Me.pnlSize.Controls.Add(Me.rbLarge) + Me.pnlSize.Controls.Add(Me.rbXLarge) + Me.pnlSize.Location = New System.Drawing.Point(8, 8) + Me.pnlSize.Name = "pnlSize" + Me.pnlSize.Size = New System.Drawing.Size(673, 34) + Me.pnlSize.TabIndex = 4 + Me.pnlSize.Visible = False + ' + 'btnPreview + ' + Me.btnPreview.Enabled = False + Me.btnPreview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnPreview.Image = CType(resources.GetObject("btnPreview.Image"), System.Drawing.Image) + Me.btnPreview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPreview.Location = New System.Drawing.Point(593, 5) + Me.btnPreview.Name = "btnPreview" + Me.btnPreview.Size = New System.Drawing.Size(75, 23) + Me.btnPreview.TabIndex = 6 + Me.btnPreview.Text = "Preview" + Me.btnPreview.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPreview.UseVisualStyleBackColor = True + ' + 'rbSmall + ' + Me.rbSmall.AutoSize = True + Me.rbSmall.Enabled = False + Me.rbSmall.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbSmall.Location = New System.Drawing.Point(475, 8) + Me.rbSmall.Name = "rbSmall" + Me.rbSmall.Size = New System.Drawing.Size(53, 17) + Me.rbSmall.TabIndex = 5 + Me.rbSmall.TabStop = True + Me.rbSmall.Text = "Small" + Me.rbSmall.UseVisualStyleBackColor = True + ' + 'rbMedium + ' + Me.rbMedium.AutoSize = True + Me.rbMedium.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbMedium.Location = New System.Drawing.Point(201, 8) + Me.rbMedium.Name = "rbMedium" + Me.rbMedium.Size = New System.Drawing.Size(69, 17) + Me.rbMedium.TabIndex = 4 + Me.rbMedium.TabStop = True + Me.rbMedium.Text = "Medium" + Me.rbMedium.UseVisualStyleBackColor = True + ' + 'rbLarge + ' + Me.rbLarge.AutoSize = True + Me.rbLarge.Enabled = False + Me.rbLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbLarge.Location = New System.Drawing.Point(343, 8) + Me.rbLarge.Name = "rbLarge" + Me.rbLarge.Size = New System.Drawing.Size(55, 17) + Me.rbLarge.TabIndex = 3 + Me.rbLarge.TabStop = True + Me.rbLarge.Text = "Cover" + Me.rbLarge.UseVisualStyleBackColor = True + ' + 'rbXLarge + ' + Me.rbXLarge.AutoSize = True + Me.rbXLarge.Enabled = False + Me.rbXLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbXLarge.Location = New System.Drawing.Point(26, 8) + Me.rbXLarge.Name = "rbXLarge" + Me.rbXLarge.Size = New System.Drawing.Size(66, 17) + Me.rbXLarge.TabIndex = 2 + Me.rbXLarge.TabStop = True + Me.rbXLarge.Text = "Original" + Me.rbXLarge.UseVisualStyleBackColor = True + ' + 'pnlFanart + ' + Me.pnlFanart.BackColor = System.Drawing.Color.White + Me.pnlFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFanart.Controls.Add(Me.chkThumb) + Me.pnlFanart.Controls.Add(Me.chkMid) + Me.pnlFanart.Controls.Add(Me.chkOriginal) + Me.pnlFanart.Location = New System.Drawing.Point(8, 8) + Me.pnlFanart.Name = "pnlFanart" + Me.pnlFanart.Size = New System.Drawing.Size(339, 34) + Me.pnlFanart.TabIndex = 5 + Me.pnlFanart.Visible = False + ' + 'chkThumb + ' + Me.chkThumb.AutoSize = True + Me.chkThumb.Location = New System.Drawing.Point(231, 8) + Me.chkThumb.Name = "chkThumb" + Me.chkThumb.Size = New System.Drawing.Size(111, 17) + Me.chkThumb.TabIndex = 9 + Me.chkThumb.Text = "Check All Thumb" + Me.chkThumb.UseVisualStyleBackColor = True + ' + 'chkMid + ' + Me.chkMid.AutoSize = True + Me.chkMid.Location = New System.Drawing.Point(131, 8) + Me.chkMid.Name = "chkMid" + Me.chkMid.Size = New System.Drawing.Size(96, 17) + Me.chkMid.TabIndex = 7 + Me.chkMid.Text = "Check All Mid" + Me.chkMid.UseVisualStyleBackColor = True + ' + 'chkOriginal + ' + Me.chkOriginal.AutoSize = True + Me.chkOriginal.Location = New System.Drawing.Point(7, 8) + Me.chkOriginal.Name = "chkOriginal" + Me.chkOriginal.Size = New System.Drawing.Size(118, 17) + Me.chkOriginal.TabIndex = 8 + Me.chkOriginal.Text = "Check All Original" + Me.chkOriginal.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.Location = New System.Drawing.Point(402, 10) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(240, 31) + Me.lblInfo.TabIndex = 3 + Me.lblInfo.Text = "Selected item will be set as fanart. All checked items will be saved to \extrathu" & _ + "mbs." + Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblInfo.Visible = False + ' + 'pnlDLStatus + ' + Me.pnlDLStatus.BackColor = System.Drawing.Color.White + Me.pnlDLStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlDLStatus.Controls.Add(Me.pnlIMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlSinglePic) + Me.pnlDLStatus.Controls.Add(Me.pnlFANARTTV) + Me.pnlDLStatus.Controls.Add(Me.pnlMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlIMPA) + Me.pnlDLStatus.Controls.Add(Me.pnlTMDB) + Me.pnlDLStatus.Location = New System.Drawing.Point(253, 98) + Me.pnlDLStatus.Name = "pnlDLStatus" + Me.pnlDLStatus.Size = New System.Drawing.Size(331, 330) + Me.pnlDLStatus.TabIndex = 0 + Me.pnlDLStatus.Visible = False + ' + 'pnlIMDB + ' + Me.pnlIMDB.Controls.Add(Me.lblDL6Status) + Me.pnlIMDB.Controls.Add(Me.lblDL6) + Me.pnlIMDB.Controls.Add(Me.pbDL6) + Me.pnlIMDB.Location = New System.Drawing.Point(3, 84) + Me.pnlIMDB.Name = "pnlIMDB" + Me.pnlIMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlIMDB.TabIndex = 9 + ' + 'lblDL6Status + ' + Me.lblDL6Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL6Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL6Status.Name = "lblDL6Status" + Me.lblDL6Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL6Status.TabIndex = 8 + ' + 'lblDL6 + ' + Me.lblDL6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL6.Location = New System.Drawing.Point(5, 10) + Me.lblDL6.Name = "lblDL6" + Me.lblDL6.Size = New System.Drawing.Size(310, 13) + Me.lblDL6.TabIndex = 7 + Me.lblDL6.Text = "Performing Preliminary Tasks..." + ' + 'pbDL6 + ' + Me.pbDL6.Location = New System.Drawing.Point(6, 52) + Me.pbDL6.Name = "pbDL6" + Me.pbDL6.Size = New System.Drawing.Size(309, 19) + Me.pbDL6.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL6.TabIndex = 6 + ' + 'pnlSinglePic + ' + Me.pnlSinglePic.BackColor = System.Drawing.Color.White + Me.pnlSinglePic.Controls.Add(Me.Label2) + Me.pnlSinglePic.Controls.Add(Me.ProgressBar1) + Me.pnlSinglePic.Location = New System.Drawing.Point(3, 3) + Me.pnlSinglePic.Name = "pnlSinglePic" + Me.pnlSinglePic.Size = New System.Drawing.Size(321, 75) + Me.pnlSinglePic.TabIndex = 9 + Me.pnlSinglePic.Visible = False + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(5, 10) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(310, 13) + Me.Label2.TabIndex = 7 + Me.Label2.Text = "Downloading Selected Image..." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(6, 53) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(309, 19) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 6 + ' + 'pnlFANARTTV + ' + Me.pnlFANARTTV.Controls.Add(Me.lblDL3Status) + Me.pnlFANARTTV.Controls.Add(Me.lblDL3) + Me.pnlFANARTTV.Controls.Add(Me.pbDL3) + Me.pnlFANARTTV.Location = New System.Drawing.Point(3, 84) + Me.pnlFANARTTV.Name = "pnlFANARTTV" + Me.pnlFANARTTV.Size = New System.Drawing.Size(321, 75) + Me.pnlFANARTTV.TabIndex = 11 + ' + 'lblDL3Status + ' + Me.lblDL3Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL3Status.Name = "lblDL3Status" + Me.lblDL3Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL3Status.TabIndex = 8 + ' + 'lblDL3 + ' + Me.lblDL3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3.Location = New System.Drawing.Point(5, 10) + Me.lblDL3.Name = "lblDL3" + Me.lblDL3.Size = New System.Drawing.Size(310, 13) + Me.lblDL3.TabIndex = 7 + Me.lblDL3.Text = "Performing Preliminary Tasks..." + ' + 'pbDL3 + ' + Me.pbDL3.Location = New System.Drawing.Point(6, 53) + Me.pbDL3.Name = "pbDL3" + Me.pbDL3.Size = New System.Drawing.Size(309, 19) + Me.pbDL3.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL3.TabIndex = 6 + ' + 'pnlMDB + ' + Me.pnlMDB.Controls.Add(Me.lblDL5Status) + Me.pnlMDB.Controls.Add(Me.lblDL5) + Me.pnlMDB.Controls.Add(Me.pbDL5) + Me.pnlMDB.Location = New System.Drawing.Point(3, 246) + Me.pnlMDB.Name = "pnlMDB" + Me.pnlMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlMDB.TabIndex = 9 + ' + 'lblDL5Status + ' + Me.lblDL5Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL5Status.Name = "lblDL5Status" + Me.lblDL5Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL5Status.TabIndex = 8 + ' + 'lblDL5 + ' + Me.lblDL5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5.Location = New System.Drawing.Point(5, 10) + Me.lblDL5.Name = "lblDL5" + Me.lblDL5.Size = New System.Drawing.Size(310, 13) + Me.lblDL5.TabIndex = 7 + Me.lblDL5.Text = "Performing Preliminary Tasks..." + ' + 'pbDL5 + ' + Me.pbDL5.Location = New System.Drawing.Point(6, 53) + Me.pbDL5.Name = "pbDL5" + Me.pbDL5.Size = New System.Drawing.Size(309, 19) + Me.pbDL5.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL5.TabIndex = 6 + ' + 'pnlIMPA + ' + Me.pnlIMPA.Controls.Add(Me.lblDL4Status) + Me.pnlIMPA.Controls.Add(Me.lblDL4) + Me.pnlIMPA.Controls.Add(Me.pbDL4) + Me.pnlIMPA.Location = New System.Drawing.Point(3, 165) + Me.pnlIMPA.Name = "pnlIMPA" + Me.pnlIMPA.Size = New System.Drawing.Size(321, 75) + Me.pnlIMPA.TabIndex = 6 + ' + 'lblDL4Status + ' + Me.lblDL4Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL4Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL4Status.Name = "lblDL4Status" + Me.lblDL4Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL4Status.TabIndex = 8 + ' + 'lblDL4 + ' + Me.lblDL4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL4.Location = New System.Drawing.Point(5, 10) + Me.lblDL4.Name = "lblDL4" + Me.lblDL4.Size = New System.Drawing.Size(310, 13) + Me.lblDL4.TabIndex = 7 + Me.lblDL4.Text = "Performing Preliminary Tasks..." + ' + 'pbDL4 + ' + Me.pbDL4.Location = New System.Drawing.Point(6, 52) + Me.pbDL4.Name = "pbDL4" + Me.pbDL4.Size = New System.Drawing.Size(309, 19) + Me.pbDL4.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL4.TabIndex = 6 + ' + 'pnlTMDB + ' + Me.pnlTMDB.Controls.Add(Me.lblDL2Status) + Me.pnlTMDB.Controls.Add(Me.lblDL2) + Me.pnlTMDB.Controls.Add(Me.pbDL2) + Me.pnlTMDB.Location = New System.Drawing.Point(3, 3) + Me.pnlTMDB.Name = "pnlTMDB" + Me.pnlTMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlTMDB.TabIndex = 10 + ' + 'lblDL2Status + ' + Me.lblDL2Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL2Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL2Status.Name = "lblDL2Status" + Me.lblDL2Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL2Status.TabIndex = 8 + ' + 'lblDL2 + ' + Me.lblDL2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL2.Location = New System.Drawing.Point(5, 10) + Me.lblDL2.Name = "lblDL2" + Me.lblDL2.Size = New System.Drawing.Size(310, 13) + Me.lblDL2.TabIndex = 7 + Me.lblDL2.Text = "Performing Preliminary Tasks..." + ' + 'pbDL2 + ' + Me.pbDL2.Location = New System.Drawing.Point(6, 52) + Me.pbDL2.Name = "pbDL2" + Me.pbDL2.Size = New System.Drawing.Size(309, 19) + Me.pbDL2.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL2.TabIndex = 6 + ' + 'dlgImgSelect + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(836, 545) + Me.ControlBox = False + Me.Controls.Add(Me.pnlDLStatus) + Me.Controls.Add(Me.pnlBG) + Me.Controls.Add(Me.pnlBottomMain) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgImgSelect" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Poster" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlSize.ResumeLayout(False) + Me.pnlSize.PerformLayout() + Me.pnlFanart.ResumeLayout(False) + Me.pnlFanart.PerformLayout() + Me.pnlDLStatus.ResumeLayout(False) + Me.pnlIMDB.ResumeLayout(False) + Me.pnlSinglePic.ResumeLayout(False) + Me.pnlFANARTTV.ResumeLayout(False) + Me.pnlMDB.ResumeLayout(False) + Me.pnlIMPA.ResumeLayout(False) + Me.pnlTMDB.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlDLStatus As System.Windows.Forms.Panel + Friend WithEvents pnlIMPA As System.Windows.Forms.Panel + Friend WithEvents lblDL4Status As System.Windows.Forms.Label + Friend WithEvents lblDL4 As System.Windows.Forms.Label + Friend WithEvents pbDL4 As System.Windows.Forms.ProgressBar + Friend WithEvents lblInfo As System.Windows.Forms.Label + Friend WithEvents pnlSize As System.Windows.Forms.Panel + Friend WithEvents rbSmall As System.Windows.Forms.RadioButton + Friend WithEvents rbMedium As System.Windows.Forms.RadioButton + Friend WithEvents rbLarge As System.Windows.Forms.RadioButton + Friend WithEvents rbXLarge As System.Windows.Forms.RadioButton + Friend WithEvents pnlSinglePic As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL5Status As System.Windows.Forms.Label + Friend WithEvents lblDL5 As System.Windows.Forms.Label + Friend WithEvents pbDL5 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlFanart As System.Windows.Forms.Panel + Friend WithEvents chkThumb As System.Windows.Forms.CheckBox + Friend WithEvents chkMid As System.Windows.Forms.CheckBox + Friend WithEvents chkOriginal As System.Windows.Forms.CheckBox + Friend WithEvents btnPreview As System.Windows.Forms.Button + Friend WithEvents pnlFANARTTV As System.Windows.Forms.Panel + Friend WithEvents lblDL3Status As System.Windows.Forms.Label + Friend WithEvents lblDL3 As System.Windows.Forms.Label + Friend WithEvents pbDL3 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlTMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL2Status As System.Windows.Forms.Label + Friend WithEvents lblDL2 As System.Windows.Forms.Label + Friend WithEvents pbDL2 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlIMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL6Status As System.Windows.Forms.Label + Friend WithEvents lblDL6 As System.Windows.Forms.Label + Friend WithEvents pbDL6 As System.Windows.Forms.ProgressBar + +End Class diff --git a/Addons/scraper.FanartTV.Poster/Scraper/dlgImgSelect.resx b/Addons/scraper.FanartTV.Poster/Scraper/dlgImgSelect.resx new file mode 100644 index 0000000..3491405 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/dlgImgSelect.resx @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA + Cv8BNGKaggAAAuRJREFUOE+lkltsS3Ecx3+ILAsPFrfEyxJPXkh0bokg4UG78TQNI5FImPBAJKiNhBAy + MTwRMRJ1ibsZ29jc2t00Vrq1p3q6tqft6Tk9t87YeLCHff3/3Sp4dZJPvv/f5fs7///5HwJA/8Nv88jw + 8ApD1y+blnnNtKwGjmXl/qCQMxt+fB9xjI2NEYdGR0dp9OfP6Yph+gOKjpBmMcy8CoxwPi5gok81kDGt + BPOUci+xt1LO0Gy+ZAZuUcbtCe4NpHEtLKNBkHGfrQt5dySNrpSKIcvcbJkmka5pNKhrtrfxFE71RlD3 + UcT5gIjt7THMvhLHTEZlSwz1n0ScZTXe8yKextec6TRNY3zAF0O3tUYl7Ovqh+t9EHs8IRSdC4FO9+WZ + VBfEjlchHPEF8z2PRQnDg9b4AE3L0hA7wqNwDFWvP2Cn1w9Hox90zAc6McFRH9Y97MWuDn++56YwgJEc + G2CwAdmsSkPsCLf6I1jb3IUNL3sY3Zhxxgs67AG5PCg+4YW9uRsbWY33XAp8xrBlOHVdI1IVhb5oWdv1 + QBjLn3qwtqUDq5s6MOd0O2jfizwlx9uwqtGLdazGey76Q/hm6k4tmyXKyDLlVMV29aOApU0erHnWgWmH + noF2NYL2Ph2nuhFF+5uw8okXy1hP/YcghjTVqSgZoqQkkZZK2m58ErDouRfzLjSDKt2grbf+ZpMbJSeb + sPA520FvCINqxinLaaKoKHJsETGK1rCIh+8F3HnTh7vvgrjHbqMAjx/0CGiNDCAqJZGUEk45zQYk4nG+ + i7LPgoBkNIpsOglTzcDSFOQ0FTmdwdRiyvNqKolELAZZlre0t7URLSkro21VVSVdnZ1pSZKQSqXAPizY + /wHDMMCuKg+Ps6oKJZNBsL//6+7q6gWTaPzhWjx31qzF5Xb7Acf69S6mNRV2e22Fw1G7gcGVUcPyro3l + 5Qfnl5auYZ4Zk7l3ClsxuBQGTszNx/9SqHHDVG76BaMnpgu1OH2ZAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Scraper/dlgImgSelect.vb b/Addons/scraper.FanartTV.Poster/Scraper/dlgImgSelect.vb new file mode 100644 index 0000000..b2e44a9 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/dlgImgSelect.vb @@ -0,0 +1,1582 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports EmberScraperModule.EmberTMDBScraperModule +Imports RestSharp +Imports WatTmdb + +Public Class dlgImgSelect + +#Region "Fields" + + Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwIMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwFANARTTVDownload As New System.ComponentModel.BackgroundWorker + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Private TMDB As TMDB.Scraper + Private TMDBPosters As New List(Of MediaContainers.Image) + + Private MPDB As New MPDB.Scraper + Private MPDBPosters As New List(Of MediaContainers.Image) + + Private IMPA As New IMPA.Scraper + Private IMPAPosters As New List(Of MediaContainers.Image) + + Private IMDB As New IMDBimg.Scraper + Private IMDBPosters As New List(Of MediaContainers.Image) + + Private FANARTTVs As FANARTTVs.Scraper + Private FANARTTVPosters As New List(Of MediaContainers.Image) + + Private CachePath As String = String.Empty + Private chkImage() As CheckBox + Private DLType As Enums.ImageType + Private ETHashes As New List(Of String) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + + Private isEdit As Boolean = False + Private isShown As Boolean = False + Private iTop As Integer = 5 + Private lblImage() As Label + + Private noImages As Boolean = False + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private PreDL As Boolean = False + Private Results As New Containers.ImgResult + Private selIndex As Integer = -1 + + Private tMovie As New Structures.DBMovie + Private tmpImage As New MediaContainers.Image + Private _impaDone As Boolean = True + Private _imdbDone As Boolean = True + Private _fanarttvDone As Boolean = True + Private _mpdbDone As Boolean = True + Private _tmdbDone As Boolean = True + +#End Region 'Fields + +#Region "Events" + + Private Event IMPADone() + + Private Event MPDBDone() + + Private Event TMDBDone() + + Private Event IMDBDone() + + Private Event FANARTTVDone() +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.PreDL = True + Me.SetUp() + Me.StartDownload() + End Sub + + Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult + '// + ' Overload to pass data + '\\ + + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.isShown = True + + MyBase.ShowDialog() + Return Results + End Function + + Public Overloads Function ShowDialog() As Containers.ImgResult + Me.isShown = True + MyBase.ShowDialog() + + Return Results + End Function + + 'Rewrite to simplify + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal isChecked As Boolean, poster As MediaContainers.Image) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(256, 286) + Me.pbImage(iIndex).Size = New Size(250, 250) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.pnlImage(iIndex).Tag = poster + Me.pbImage(iIndex).Tag = poster + Me.pbImage(iIndex).Image = poster.WebImage.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.pnlBG.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If Me.DLType = Enums.ImageType.Fanart Then + ReDim Preserve Me.chkImage(iIndex) + Me.chkImage(iIndex) = New CheckBox() + Me.chkImage(iIndex).Name = iIndex.ToString + Me.chkImage(iIndex).Size = New Size(250, 30) + Me.chkImage(iIndex).AutoSize = False + Me.chkImage(iIndex).BackColor = Color.White + Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + 'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + Me.chkImage(iIndex).Left = 0 + Me.chkImage(iIndex).Top = 250 + Me.chkImage(iIndex).Checked = isChecked + Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve Me.lblImage(iIndex) + Me.lblImage(iIndex) = New Label() + Me.lblImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Size = New Size(250, 30) + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + If IsTMDBURL(poster.URL) Then + Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + Else + Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + End If + Me.lblImage(iIndex).Tag = poster + Me.lblImage(iIndex).Left = 0 + Me.lblImage(iIndex).Top = 250 + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 301 + Else + Me.iLeft += 271 + End If + End Sub + + Private Sub AllDoneDownloading() + If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone AndAlso Me._imdbDone AndAlso Me._fanarttvDone Then + Me.pnlDLStatus.Visible = False + Me.TMDBPosters.AddRange(Me.IMPAPosters) + Me.TMDBPosters.AddRange(Me.MPDBPosters) + Me.TMDBPosters.AddRange(Me.IMDBPosters) + Me.TMDBPosters.AddRange(Me.FANARTTVPosters) + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + End If + End Sub + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + PreviewImage() + End Sub + + Private Sub PreviewImage() + Try + Dim tImage As New Images + Me.pnlTMDB.Visible = False + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = True + Me.pnlDLStatus.Height = 85 + Me.pnlDLStatus.Top = 185 + + Application.DoEvents() + + Select Case True + Case rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + Case rbLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + Case rbMedium.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case rbSmall.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End Select + + Me.pnlSinglePic.Visible = False + + If Not IsNothing(tImage.Image) Then + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image) + + End If + + tImage.Dispose() + tImage = Nothing + + Catch ex As Exception + Me.pnlSinglePic.Visible = False + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.IMDBPosters.Count - 1 + Try + If Me.bwIMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMDBDownload.ReportProgress(i + 1, Me.IMDBPosters.Item(i).URL) + Try + Me.IMDBPosters.Item(i).WebImage.FromWeb(Me.IMDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMDBPosters.Item(i).URL = StringUtils.CleanURL(Me.IMDBPosters.Item(i).URL) + Me.IMDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMDBPosters.Item(i).Description, ")_(url=", Me.IMDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwIMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL6Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL6.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._imdbDone = True + RaiseEvent IMDBDone() + End If + End Sub + + Private Sub bwFANARTTVDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTVDownload.DoWork + '// + ' Thread to download FanartTV images from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.FANARTTVPosters.Count - 1 + Try + If Me.bwFANARTTVDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwFANARTTVDownload.ReportProgress(i + 1, Me.FANARTTVPosters.Item(i).URL) + Try + Me.FANARTTVPosters.Item(i).WebImage.FromWeb(Me.FANARTTVPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.FANARTTVPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.FANARTTVPosters.Item(i).URL = StringUtils.CleanURL(Me.FANARTTVPosters.Item(i).URL) + Me.FANARTTVPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.FANARTTVPosters.Item(i).Description, ")_(url=", Me.FANARTTVPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwFANARTTVDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTVDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL3.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwFANARTTVDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTVDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._fanarttvDone = True + RaiseEvent FANARTTVDone() + End If + End Sub + + Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork + '// + ' Thread to download impa posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + + For i As Integer = 0 To Me.IMPAPosters.Count - 1 + If bwIMPADownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL) + Try + Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL) + Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL4Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL4.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPABownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._impaDone = True + RaiseEvent IMPADone() + End If + End Sub + + Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.MPDBPosters.Count - 1 + Try + If Me.bwMPDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL) + Try + Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL) + Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL5Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL5.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._mpdbDone = True + RaiseEvent MPDBDone() + End If + End Sub + + Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork + '// + ' Thread to download tmdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + Dim thumbLink As String = String.Empty + Dim savePath As String = String.Empty + Dim extrathumbSize As String = String.Empty + + extrathumbSize = _MySettings.ManualETSize + + 'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all. + Dim posters As MediaContainers.Image() + If Me.DLType = Enums.ImageType.Fanart Then + posters = TMDBPosters.Where(Function(s) s.Description = extrathumbSize).ToArray() + Else + posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray() + End If + + For i As Integer = 0 To posters.Count - 1 + Try + If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then + If Me.bwTMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwTMDBDownload.ReportProgress((i + 1), posters(i).URL) + Try + posters(i).WebImage.FromWeb(posters(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then + If Me.DLType = Enums.ImageType.Fanart Then + + + If Not posters(i).URL.Contains("-thumb.") Then + Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org" + thumbLink = RemoveServerURL(posters(i).URL) + 'If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("-poster.", "-thumb.") + thumbLink = thumbLink.Replace("-original.", "-thumb.") + ''Else + 'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb") + 'End If + Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Else + Me.Results.Posters.Add(posters(i).URL) + End If + End If + If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then + Try + posters(i).URL = Me.CleanTMDBURL(posters(i).URL) + + savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg")) + posters(i).WebImage.Save(savePath, , , False) + + If Master.eSettings.AutoET Then + Dim tSize As New Enums.FanartSize + Select Case posters(i).Description.ToLower + Case "original" + tSize = Enums.FanartSize.Lrg + Case "mid" + tSize = Enums.FanartSize.Mid + Case "thumb" + tSize = Enums.FanartSize.Small + End Select + If Master.eSettings.AutoETSize = tSize Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + posters(i).isChecked = True + End If + End If + End If + + Catch + End Try + End If + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL2.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._tmdbDone = True + RaiseEvent TMDBDone() + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + IMPA.Cancel() + MPDB.Cancel() + TMDB.Cancel() + IMDB.Cancel() + FANARTTVs.Cancel() + + If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync() + If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync() + If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync() + If bwIMDBDownload.IsBusy Then bwIMDBDownload.CancelAsync() + If bwFANARTTVDownload.IsBusy Then bwFANARTTVDownload.CancelAsync() + + While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean) + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Text.ToLower.Contains(sType) Then + Me.chkImage(i).Checked = Checked + End If + Next + End Sub + + Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged + Me.CheckAll("(poster)", chkMid.Checked) + End Sub + + Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged + Me.CheckAll("(original)", chkOriginal.Checked) + End Sub + + Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged + Me.CheckAll("(thumb)", chkThumb.Checked) + End Sub + + Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'Me.tmpImage.Dispose() + + IMPA = Nothing + MPDB = Nothing + TMDB = Nothing + IMDB = Nothing + FANARTTVs = Nothing + + IMPAPosters = Nothing + MPDBPosters = Nothing + TMDBPosters = Nothing + IMDBPosters = Nothing + FANARTTVPosters = Nothing + + End Sub + + Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath) + End Sub + + Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not PreDL Then SetUp() + End Sub + + Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Try + Application.DoEvents() + If Not PreDL Then + StartDownload() + ElseIf noImages Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image) + Try + 'set all pnl colors to white first + 'remove all the current genres + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(i).BackColor = Color.White + Me.chkImage(i).ForeColor = Color.Black + Else + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + End If + Next + + 'set selected pnl color to blue + Me.pnlImage(iIndex).BackColor = Color.Blue + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(iIndex).BackColor = Color.Blue + Me.chkImage(iIndex).ForeColor = Color.White + Else + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + End If + + Me.selIndex = iIndex + + Me.pnlSize.Visible = False + + If IsTMDBURL(poster.URL) Then + Me.SetupSizes(poster.ParentID) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + Me.OK_Button.Enabled = False + Else + Me.OK_Button.Focus() + End If + Me.tmpImage.Clear() + Else + Me.rbXLarge.Checked = False + Me.rbLarge.Checked = False + Me.rbMedium.Checked = False + Me.rbSmall.Checked = False + Me.OK_Button.Enabled = True + Me.OK_Button.Focus() + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function IsTMDBURL(ByVal sURL As String) As Boolean + If sURL.ToLower.Contains(_TMDBConf.images.base_url.ToLower) Then + Return True + Else + Return False + End If + End Function + + Private Function CleanTMDBURL(ByVal sURL As String) As String + If IsTMDBURL(sURL) Then + Dim _sURL As New Uri(sURL) + sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped)) + Else + sURL = StringUtils.TruncateURL(sURL, 40, True) + End If + Return sURL.Replace(":", "$c$").Replace("/", "$s$") + End Function + + + Private Sub GetFanart() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim di As New DirectoryInfo(CachePath) + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + If Not IsNothing(tImage.WebImage.Image) Then + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + 'Case sFile.Name.Contains("(mid)") + ' tImage.Description = "mid" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + End If + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "backdrop") + + If _MySettings.UseFANARTTV Then + Me.lblDL3.Text = Master.eLang.GetString(120, "Retrieving data from Fanart.tv...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._fanarttvDone = False + + Me.FANARTTVs.GetImagesAsync(tMovie.Movie.ID) + Else + Me.lblDL3.Text = Master.eLang.GetString(121, "Fanart.tv is not enabled") + End If + + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub GetPosters() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim lFi As New List(Of FileInfo) + Dim di As New DirectoryInfo(CachePath) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 207 + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "poster") + + If _MySettings.UseIMDB Then + Me.lblDL6.Text = Master.eLang.GetString(117, "Retrieving data from IMDB.com...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._imdbDone = False + + Me.IMDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL6.Text = Master.eLang.GetString(118, "IMDB.com is not enabled") + End If + + If _MySettings.UseIMPA Then + Me.lblDL4.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._impaDone = False + + Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL4.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled") + End If + + If _MySettings.UseMPDB Then + Me.lblDL5.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._mpdbDone = False + + Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL5.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVDoneDownloading() + Try + Me._fanarttvDone = True + Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL3.Value = 0 + + 'Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = Posters.Count + + Me.FANARTTVPosters = Posters + + Me.bwFANARTTVDownload.WorkerSupportsCancellation = True + Me.bwFANARTTVDownload.WorkerReportsProgress = True + Me.bwFANARTTVDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVProgressUpdated(ByVal iPercent As Integer) + Me.pbDL3.Value = iPercent + End Sub + + Private Sub IMDBDoneDownloading() + Try + Me._imdbDone = True + Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL6.Value = 0 + + 'Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = Posters.Count + + Me.IMDBPosters = Posters + + Me.bwIMDBDownload.WorkerSupportsCancellation = True + Me.bwIMDBDownload.WorkerReportsProgress = True + Me.bwIMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL6.Value = iPercent + End Sub + + Private Sub IMPADoneDownloading() + Try + Me._impaDone = True + Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL4.Value = 0 + + 'Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = Posters.Count + + Me.IMPAPosters = Posters + + Me.bwIMPADownload.WorkerSupportsCancellation = True + Me.bwIMPADownload.WorkerReportsProgress = True + Me.bwIMPADownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAProgressUpdated(ByVal iPercent As Integer) + Me.pbDL4.Value = iPercent + End Sub + + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then + pnlBG.VerticalScroll.Value += 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum + End If + Else + If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then + pnlBG.VerticalScroll.Value -= 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub MPDBDoneDownloading() + Try + Me._mpdbDone = True + Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL5.Value = 0 + + 'Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = Posters.Count + + Me.MPDBPosters = Posters + + Me.bwMPDBDownload.WorkerSupportsCancellation = True + Me.bwMPDBDownload.WorkerReportsProgress = True + Me.bwMPDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL5.Value = iPercent + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + Dim tmpPathPlus As String = String.Empty + Dim extrathumbSize As String + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + If DLType = Enums.ImageType.Fanart Then + tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") + Else + tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") + End If + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If + + If Me.DLType = Enums.ImageType.Fanart Then + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + Dim isChecked As Boolean = False + + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + isChecked = True + Exit For + End If + Next + + If isChecked Then + Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs") + If isEdit Then + extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName) + Else + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName) + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName) + Else + extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName) + End If + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + End If + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + Dim fsET As FileStream + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) + Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg) + fsET.Close() + iVal += 1 + End If + Next + fsET = Nothing + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + Try + 'If Me.DLType = Enums.ImageType.Fanart OrElse Not IsTMDBURL(DirectCast(sender, PictureBox).Tag.ToString) Then + 'ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(DirectCast(sender, PictureBox).Image) + 'Else + PreviewImage() + 'End If + Catch + End Try + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Panel).Name), DirectCast(DirectCast(sender, Panel).Tag, MediaContainers.Image)) + End Sub + + Private Sub ProcessPics(ByVal posters As List(Of MediaContainers.Image)) + Try + Dim iIndex As Integer = 0 + + 'remove all entries with invalid images + If Master.eSettings.UseImgCache Then + For i As Integer = posters.Count - 1 To 0 Step -1 + If IsNothing(posters.Item(i).WebImage.Image) Then + posters.RemoveAt(i) + End If + Next + End If + + If posters.Count > 0 Then + For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) RemoveServerURL(p.URL)) + If Not IsNothing(xPoster.WebImage.Image) AndAlso (Me.DLType = Enums.ImageType.Fanart OrElse Not (IsTMDBURL(xPoster.URL) AndAlso Not xPoster.Description = "cover")) Then + Me.AddImage(xPoster.Description, iIndex, xPoster.isChecked, xPoster) + iIndex += 1 + End If + Next + Else + If Not Me.PreDL OrElse isShown Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Else + noImages = True + End If + End If + + Me.Activate() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub rbLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbMedium_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbMedium.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbSmall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSmall.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbXLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbXLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub SetUp() + Try + AddHandler TMDB.PostersDownloaded, AddressOf TMDBPostersDownloaded + AddHandler TMDB.ProgressUpdated, AddressOf TMDBProgressUpdated + AddHandler IMPA.PostersDownloaded, AddressOf IMPAPostersDownloaded + AddHandler IMPA.ProgressUpdated, AddressOf IMPAProgressUpdated + AddHandler MPDB.PostersDownloaded, AddressOf MPDBPostersDownloaded + AddHandler MPDB.ProgressUpdated, AddressOf MPDBProgressUpdated + AddHandler IMDB.PostersDownloaded, AddressOf IMDBPostersDownloaded + AddHandler IMDB.ProgressUpdated, AddressOf IMDBProgressUpdated + AddHandler FANARTTVs.PostersDownloaded, AddressOf FANARTTVPostersDownloaded + AddHandler FANARTTVs.ProgressUpdated, AddressOf FANARTTVProgressUpdated + AddHandler IMPADone, AddressOf IMPADoneDownloading + AddHandler TMDBDone, AddressOf TMDBDoneDownloading + AddHandler MPDBDone, AddressOf MPDBDoneDownloading + AddHandler IMDBDone, AddressOf IMDBDoneDownloading + AddHandler FANARTTVDone, AddressOf FANARTTVDoneDownloading + + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlBG.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlBG) + + If Me.DLType = Enums.ImageType.Posters Then + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = True + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = True + Me.pnlMDB.Visible = True + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 328 + Me.pnlDLStatus.Top = 82 + Else + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = True + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 129 + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(tMovie.Filename) + End If + End If + + CachePath = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, tMovie.Movie.IMDBID, Path.DirectorySeparatorChar, If(Me.DLType = Enums.ImageType.Posters, "posters", "fanart")) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview", True) + Me.chkThumb.Text = Master.eLang.GetString(41, "Check All Thumb") + Me.chkMid.Text = Master.eLang.GetString(42, "Check All Mid") + Me.chkOriginal.Text = Master.eLang.GetString(43, "Check All Original") + Me.lblInfo.Text = Master.eLang.GetString(44, "Selected item will be set as fanart. All checked items will be saved to \extrathumbs.") + Me.lblDL5.Text = Master.eLang.GetString(45, "Performing Preliminary Tasks...") + Me.lblDL4.Text = Me.lblDL5.Text + Me.lblDL3.Text = Me.lblDL5.Text + Me.lblDL2.Text = Me.lblDL5.Text + Me.Label2.Text = Master.eLang.GetString(46, "Downloading Selected Image...") + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(0, sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Function RemoveServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Sub SetupSizes(ByVal ParentID As String) + Try + rbXLarge.Checked = False + rbXLarge.Enabled = False + rbXLarge.Text = Master.eLang.GetString(47, "Original") + rbLarge.Checked = False + rbLarge.Enabled = False + rbMedium.Checked = False + rbSmall.Checked = False + rbSmall.Enabled = False + If Me.DLType = Enums.ImageType.Fanart Then + rbLarge.Text = "w1280" + rbMedium.Text = "poster" + rbSmall.Text = "thumb" + Else + rbLarge.Text = Master.eLang.GetString(48, "Cover") + rbMedium.Text = Master.eLang.GetString(49, "Medium") + rbSmall.Text = Master.eLang.GetString(50, "Small") + End If + + For Each TMDBPoster As MediaContainers.Image In TMDBPosters.Where(Function(f) f.ParentID = ParentID) + Select Case TMDBPoster.Description + Case "original" + ' xlarge + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbXLarge.Enabled = True + rbXLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "cover" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "w1280" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format("w1280 ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + End If + Case "thumb" + ' small + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbSmall.Enabled = True + rbSmall.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "mid" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + Case "poster" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format("Poster ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + End Select + Next + + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Small + rbSmall.Checked = rbSmall.Enabled + Case Enums.PosterSize.Mid + rbMedium.Checked = rbMedium.Enabled + Case Enums.PosterSize.Lrg + rbLarge.Checked = rbLarge.Enabled + Case Enums.PosterSize.Xlrg + rbXLarge.Checked = rbXLarge.Enabled + End Select + + pnlSize.Visible = True + + Invalidate() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub StartDownload() + Try + Select Case Me.DLType + Case Enums.ImageType.Posters + Me.GetPosters() + Case Enums.ImageType.Fanart + Me.GetFanart() + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBDoneDownloading() + Try + Me._tmdbDone = True + Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL2.Value = 0 + + 'Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = Posters.Count + + Me.TMDBPosters = Posters + + Me.bwTMDBDownload.WorkerSupportsCancellation = True + Me.bwTMDBDownload.WorkerReportsProgress = True + Me.bwTMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL2.Value = iPercent + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Scraper/dlgTMDBSearchResults.Designer.vb b/Addons/scraper.FanartTV.Poster/Scraper/dlgTMDBSearchResults.Designer.vb new file mode 100644 index 0000000..edf9f3b --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/dlgTMDBSearchResults.Designer.vb @@ -0,0 +1,460 @@ + _ +Partial Class dlgTMDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtTMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(497, 401) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(570, 401) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(4, 96) + Me.tvResults.Name = "tvResults" + Me.tvResults.ShowLines = False + Me.tvResults.ShowPlusMinus = False + Me.tvResults.ShowRootLines = False + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 4 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(294, 130) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(291, 70) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(291, 89) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(294, 295) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(472, 130) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(472, 156) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(472, 183) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtTMDBID + ' + Me.txtTMDBID.Enabled = False + Me.txtTMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBID.Location = New System.Drawing.Point(139, 399) + Me.txtTMDBID.Name = "txtTMDBID" + Me.txtTMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtTMDBID.TabIndex = 6 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(643, 64) + Me.pnlTop.TabIndex = 8 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(257, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(4, 403) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(130, 17) + Me.chkManual.TabIndex = 5 + Me.chkManual.Text = "Manual TMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(245, 399) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 7 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(472, 247) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(37, 13) + Me.lblIMDB.TabIndex = 20 + Me.lblIMDB.Text = "TMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(410, 130) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(33, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(410, 156) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(410, 183) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(410, 247) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(56, 13) + Me.lblIMDBHeader.TabIndex = 19 + Me.lblIMDBHeader.Text = "TMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(291, 279) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(262, 70) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 3 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(4, 71) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 2 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(364, 183) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 18 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(100, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching TMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(308, 155) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'dlgTMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(643, 454) + Me.ControlBox = False + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtTMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgTMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents tvResults As System.Windows.Forms.TreeView + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lblYear As System.Windows.Forms.Label + Friend WithEvents lblDirector As System.Windows.Forms.Label + Friend WithEvents lblGenre As System.Windows.Forms.Label + Friend WithEvents txtTMDBID As System.Windows.Forms.TextBox + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents lblIMDB As System.Windows.Forms.Label + Friend WithEvents lblYearHeader As System.Windows.Forms.Label + Friend WithEvents lblDirectorHeader As System.Windows.Forms.Label + Friend WithEvents lblGenreHeader As System.Windows.Forms.Label + Friend WithEvents lblIMDBHeader As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel + Friend WithEvents Label4 As System.Windows.Forms.Label + +End Class diff --git a/Addons/scraper.FanartTV.Poster/Scraper/dlgTMDBSearchResults.resx b/Addons/scraper.FanartTV.Poster/Scraper/dlgTMDBSearchResults.resx new file mode 100644 index 0000000..017a5ad --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/dlgTMDBSearchResults.resx @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + gg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA + CukB/XXO0wAAAepJREFUOE+lkktIG1EUhkeFaLQ+UGulgthNEUHRCrqyIHZTdSd0Iyq46cL3Sly50ppV + uywYi2uDiyKK1ioFk0lm7mSmSgymJuIqSkwwCTVpGs3fM0Pa+poWceBj4N5zvnvOuZcDwN2HeyWrB98Q + LFosuRJjz51O6cXmxsaj/1V3RSAx8fVXRQnIsgwVRZHjJHr7L8kfAROFPoWS3G43gicnCIVC8O7vQ11z + StKsnkQTrK6sGCSJBXddLpyfJ5FKpTTUz+f1gvbA22w1t0k0AW3WCYIAv9+PZPIn4vGYRiLxA+HwKRhj + EByOIV2BdWur3mG34/j4iJISiEYjRBSx2BkikQiYKOJQ4ft1BZ/X13NIEHalW1CrUEVACj6fF4yqe2W2 + TegK0m0MiBSoziEQCNAQg/B4PPi2I8Fk+QJucBnZI0vvrkuuXCPP8+PU63dC7RnbTvHi/cKnA2O3GYbu + OeT0ziOv58Na8djHgt+iGw+JHk+pzWrtpMF27cn2Ko7jMnLbTebCl1MoaH+D/I4ZFHbM7FZ0ThtvfYl6 + 913WMjFc2jyGkqZRlNC/om2yXBNk0RFEEfGEqCZqiXriGdGYpoHCHhdXtg6W1fQKD592mQwZ3N8KKCiL + yCaMRB7xgMi/zuXqMinnTi3otfYLj6yxrhdJtZ8AAAAASUVORK5CYII= + + + \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Scraper/dlgTMDBSearchResults.vb b/Addons/scraper.FanartTV.Poster/Scraper/dlgTMDBSearchResults.vb new file mode 100644 index 0000000..d05fd0b --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/dlgTMDBSearchResults.vb @@ -0,0 +1,462 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb + +Public Class dlgTMDBSearchResults + +#Region "Fields" + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + Friend WithEvents tmrLoad As New System.Windows.Forms.Timer + Friend WithEvents tmrWait As New System.Windows.Forms.Timer + + Private TMDBg As TMDBg.Scraper + Private sHTTP As New HTTP + Private _currnode As Integer = -1 + Private _prevnode As Integer = -2 + Private MySettings As EmberTMDBScraperModule.sMySettings + 'Private TMDBConf As V3.TmdbConfiguration + 'Private TMDBApi As V3.Tmdb + + Private _InfoCache As New Dictionary(Of String, MediaContainers.Movie) + Private _PosterCache As New Dictionary(Of String, System.Drawing.Image) + Private _filterOptions As Structures.ScrapeOptions + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(_MySettings As EmberTMDBScraperModule.sMySettings, _TMDBg As TMDBg.Scraper) + + ' This call is required by the designer. + InitializeComponent() + 'TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + 'TMDBConf = TMDBApi.GetConfiguration() + MySettings = _MySettings + TMDBg = _TMDBg + End Sub + + + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + _filterOptions = filterOptions + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + chkManual.Enabled = False + 'TMDBg.IMDBURL = TMDBId + TMDBg.SearchMovieAsync(sMovieTitle, _filterOptions) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal Res As TMDBg.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + SearchResultsDownloaded(Res) + + Return MyBase.ShowDialog() + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.OK_Button.Enabled = False + pnlPicStatus.Visible = False + _InfoCache.Clear() + _PosterCache.Clear() + Me.ClearInfo() + Me.Label3.Text = Master.eLang.GetString(11, "Searching TMDB...") + Me.pnlLoading.Visible = True + chkManual.Enabled = False + TMDBg.CancelAsync() + 'IMDB.IMDBURL = IMDBURL + TMDBg.SearchMovieAsync(Me.txtSearch.Text, _filterOptions) + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + TMDBg.GetSearchMovieInfoAsync(Me.txtTMDBID.Text, Master.tmpMovie, Master.DefaultOptions) + + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + sHTTP.StartDownloadImage(Args.pURL) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image, .IMDBId = Args.IMDBId} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + '// + ' Thread finished: display pic if it was able to get one + '\\ + + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbPoster.Image = Res.Result + If Not _PosterCache.ContainsKey(Res.IMDBId) Then + _PosterCache.Add(Res.IMDBId, Res.Result) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + pnlPicStatus.Visible = False + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Master.tmpMovie.Clear() + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtTMDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.tvResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtTMDBID.Text = String.Empty + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblTagline.Text = String.Empty + Me.lblYear.Text = String.Empty + Me.lblDirector.Text = String.Empty + Me.lblGenre.Text = String.Empty + Me.txtOutline.Text = String.Empty + Me.lblIMDB.Text = String.Empty + Me.pbPoster.Image = Nothing + + Master.tmpMovie.Clear() + + TMDBg.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.lblYearHeader.Visible = areVisible + Me.lblDirectorHeader.Visible = areVisible + Me.lblGenreHeader.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.lblIMDBHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + Me.lblYear.Visible = areVisible + Me.lblTagline.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblDirector.Visible = areVisible + Me.lblGenre.Visible = areVisible + Me.lblIMDB.Visible = areVisible + Me.pbPoster.Visible = areVisible + End Sub + + Private Sub dlgIMDBSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub dlgIMDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + pnlPicStatus.Visible = False + 'TMDBg.IMDBURL = IMDBURL + AddHandler TMDBg.SearchMovieInfoDownloaded, AddressOf SearchMovieInfoDownloaded + AddHandler TMDBg.SearchResultsDownloaded, AddressOf SearchResultsDownloaded + + Try + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgIMDBSearchResults_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + Me.tvResults.Focus() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + If Me.chkManual.Checked AndAlso Me.btnVerify.Enabled Then + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Master.tmpMovie.IMDBID = Me.txtTMDBID.Text + End If + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.Close() + End Sub + + Private Sub SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + '// + ' Info downloaded... fill form with data + '\\ + + Me.pnlLoading.Visible = False + Me.OK_Button.Enabled = True + + Try + If bSuccess Then + Me.ControlsVisible(True) + Me.lblTitle.Text = Master.tmpMovie.Title + Me.lblTagline.Text = Master.tmpMovie.Tagline + Me.lblYear.Text = Master.tmpMovie.Year + Me.lblDirector.Text = Master.tmpMovie.Director + Me.lblGenre.Text = Master.tmpMovie.Genre + Me.txtOutline.Text = Master.tmpMovie.Outline + Me.lblIMDB.Text = Master.tmpMovie.IMDBID + + If _PosterCache.ContainsKey(Master.tmpMovie.TMDBID) Then + 'just set it + Me.pbPoster.Image = _PosterCache(Master.tmpMovie.TMDBID) + Else + 'go download it, if available + If Not String.IsNullOrEmpty(sPoster) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + pnlPicStatus.Visible = True + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = sPoster, .IMDBId = Master.tmpMovie.TMDBID}) + End If + + End If + + 'store clone of tmpmovie + If Not _InfoCache.ContainsKey(Master.tmpMovie.TMDBID) Then + _InfoCache.Add(Master.tmpMovie.TMDBID, GetMovieClone(Master.tmpMovie)) + End If + + + Me.btnVerify.Enabled = False + Else + If Me.chkManual.Checked Then + MsgBox(Master.eLang.GetString(15, "Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again."), MsgBoxStyle.Exclamation, Master.eLang.GetString(16, "Verification Failed")) + Me.btnVerify.Enabled = True + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SearchResultsDownloaded(ByVal M As TMDBg.MovieSearchResults) + '// + ' Process the results that IMDB gave us + '\\ + 'Dim TnP As New TreeNode + 'Dim selNode As New TreeNode + + Try + Me.tvResults.Nodes.Clear() + Me.ClearInfo() + If Not IsNothing(M) AndAlso M.Matches.Count > 0 Then + + 'M.Matches.Sort() + For Each Movie As MediaContainers.Movie In M.Matches + 'TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Me.tvResults.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.TMDBID}) + Next + 'TnP.Expand() + 'Me.tvResults.Nodes.Add(TnP) + 'selNode = Me.tvResults.Nodes(0) + 'selNode = TnP.FirstNode + 'selNode = Me.tvResults.Nodes(0) + Me.tvResults.SelectedNode = Me.tvResults.Nodes(0) + + Me._prevnode = -2 + + Me.tvResults.Focus() + Else + Me.tvResults.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(20, "No Matches Found")}) + End If + Me.pnlLoading.Visible = False + chkManual.Enabled = True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.Label2.Text = Master.eLang.GetString(21, "View details of each result to find the proper movie.") + Me.Label1.Text = Master.eLang.GetString(22, "Movie Search Results") + Me.chkManual.Text = Master.eLang.GetString(23, "Manual TMDB Entry:") + Me.btnVerify.Text = Master.eLang.GetString(24, "Verify") + Me.lblYearHeader.Text = Master.eLang.GetString(49, "Year:", True) + Me.lblDirectorHeader.Text = Master.eLang.GetString(239, "Director:", True) + Me.lblGenreHeader.Text = Master.eLang.GetString(51, "Genre(s):", True) + Me.lblIMDBHeader.Text = Master.eLang.GetString(116, "TMDB ID:") + Me.lblPlotHeader.Text = Master.eLang.GetString(242, "Plot Outline:", True) + Me.Label3.Text = Master.eLang.GetString(25, "Searching TMDB...") + End Sub + + Private Sub tmrLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoad.Tick + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + Me.pnlLoading.Visible = True + Me.Label3.Text = Master.eLang.GetString(26, "Downloading details...") + + 'IMDB.IMDBURL = IMDBURL + TMDBg.GetSearchMovieInfoAsync(Me.tvResults.SelectedNode.Tag.ToString, Master.tmpMovie, Master.DefaultOptions) + End Sub + + Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrWait.Tick + If Not Me._prevnode = Me._currnode Then + Me._prevnode = Me._currnode + Me.tmrWait.Stop() + Me.tmrLoad.Start() + Else + Me.tmrLoad.Stop() + Me.tmrWait.Stop() + End If + End Sub + + Private Sub tvResults_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvResults.AfterSelect + Try + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + + Me.ClearInfo() + Me.OK_Button.Enabled = False + + If Not IsNothing(Me.tvResults.SelectedNode.Tag) AndAlso Not String.IsNullOrEmpty(Me.tvResults.SelectedNode.Tag.ToString) Then + Me._currnode = Me.tvResults.SelectedNode.Index + + 'check if this movie is in the cache already + If _InfoCache.ContainsKey(Me.tvResults.SelectedNode.Tag.ToString) Then + Master.tmpMovie = GetMovieClone(_InfoCache(Me.tvResults.SelectedNode.Tag.ToString)) + SearchMovieInfoDownloaded(String.Empty, True) + Return + End If + + Me.pnlLoading.Visible = True + Me.tmrWait.Start() + Else + Me.pnlLoading.Visible = False + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub tvResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub txtIMDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTMDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtIMDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBID.TextChanged + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Function GetMovieClone(ByVal original As MediaContainers.Movie) As MediaContainers.Movie + 'have to do this the old-fashioned way because it is not serializable + Dim result As New MediaContainers.Movie + With result + .IMDBID = original.IMDBID + .Genre = original.Genre + .Title = original.Title + .Tagline = original.Tagline + .Year = original.Year + .Director = original.Director + .Genre = original.Genre + .Outline = original.Outline + End With + Return result + 'Using mem As New IO.MemoryStream() + ' Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, New System.Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.Clone)) + ' bin.Serialize(mem, original) + ' mem.Seek(0, IO.SeekOrigin.Begin) + ' Return DirectCast(bin.Deserialize(mem), MediaContainers.Movie) + 'End Using + End Function + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim pURL As String + Dim IMDBId As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Image + Dim IMDBId As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailer.Designer.vb new file mode 100644 index 0000000..1865dbc --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailer.Designer.vb @@ -0,0 +1,279 @@ + _ +Partial Class dlgTrailer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(290, 339) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(74, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(369, 339) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(411, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(424, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(112, 82) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(120, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(411, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(376, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(365, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(72, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(392, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(153, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 339) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(106, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(207, 339) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(77, 23) + Me.btnSetNfo.TabIndex = 4 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(444, 331) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(450, 366) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lbTrailers As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnPlayTrailer As System.Windows.Forms.Button + Friend WithEvents btnSetNfo As System.Windows.Forms.Button + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtYouTube As System.Windows.Forms.TextBox + Friend WithEvents btnBrowse As System.Windows.Forms.Button + Friend WithEvents txtManual As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog + Friend WithEvents btnGetTrailers As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailer.resx b/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailer.resx new file mode 100644 index 0000000..2be3cac --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailer.resx @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAGHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3NPsx9OAAAB80lEQVQ4T6XTTWsTQRgH8EGr9GDFm19AseDBgzc9eba0FJqvIOTiRase + RAIKtRo9LbbxpYmtggXR2KRFqGLfDio9tDGbdUMrbvc1+57sioiVv7NDLE3MXnTgz8DsPr95dpglAMj/ + pKVY17QuyzLP2raVoBlybHvIc92EUKmcidukBTBrtasUAC0GLWYJggaWl5dw9056uBPSAtDi8aiYAY4N + 13HwLQyxuLiAW6OjyIyPXW5H2gFuZ/cm4HseNFVFsTCD2WIRHz+8P7cb6Qjs7iDqIkLCMEC97kedZWMB + egasA8s24TsBQm8bob8N3w3YZzUzFgsYus6ZZo0WhPisvMackGQR5Dm2xnDLjAdUVeF0XUPD/Yl31eu4 + sURY3orXaDe/EOGGoccDsrzFKYoMz/yON0IaqYVDLPPCTdTtH6D3BKqixANfNjc5SZJga3XMlm5jeP4w + S6E0AsdoQJFlbElSPMCXy/ekDQUTK1eQzB/B+cJxlmT+KB6sXID61UBVFDOxh7i+tjbCf+KxXl7FpZeD + SOR6WS6+6EepsgpREFHh+XRHYC8hB/r7+k7kshOZ/PSrZ7mn2cnTqd7qqdSxjUdPHk7NPC9OT00+vj84 + MHByDyEH/yA7F4kC+wgh3dGDaDTnHkK6etrWuum7+/8C/vWX/g1N2vpUAmZdeAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAACwwAAAsMAT9AIsgAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfZBBoSIQHX+6QX + AAACOElEQVQ4T7WSTWvaQRCHozlYNQSiVXwBNSSKKAhqKogo2hx8OeUQpPVY9OBFId+g0IufoQnegslF + EEG8qAgeiij4hohoDjkphJAIGg/udGepfyLV3rowLDu788zs/GZv73+st7e35NPT069KpfJaLpdnj4+P + nel0+p3mOvhnvoeHh0+j0WieTCbB6XSSYDAIoVAIXC4Xicfj0Ov1IJ/Pf9kKweBisQharZbY7XbweDxg + sVjg7OwM8Ix2enpK7u/v4e7u7ttfEJp5QZ3k8PAQ1Go1hMNhyGazIJFIQKVSMd/R0RHgm2azCQqFQsNB + FovFFZZLHZz5fD7AlU6nmY/H43F3NpsNWq3WLQeYz+d1JL8H4BfW6+bmZgOO77rd7isHqNfrM3Ty+XzY + 399n5vV6WfxqtWL79fX1RiWlUgnPHxlkDRAKhSASiUAsFoPf72eBhBAGeXl5AZlMBgKBgIGoxLirGOD5 + +blL/0iwSVKpFORyOVxcXHAV0HtUhzUUm4yATqezpPsHBphMJj8uLy9BqVSCRqOB4+NjiEQiDICZUU6d + TseUQLjb7YZqtVp6L+UBlREBxGg0soBoNArL5RJQDavVCmazGecAKyTtdhtOTk68G7OQy+W+1mo1MJlM + hE4hA2BV5+fnLKPD4QC9Xk8KhQKkUqmfW6cxk8nE6ERCIpFgkxgIBFgzERCLxWAwGOwOXhPpPzWNRuN2 + PB7P+v0+oA2HwyWVrWIwGD5vzbzDyaN++R+phLsCfwMUR2eb8uMbUAAAAABJRU5ErkJggg== + + + + 17, 17 + + + 40 + + \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailer.vb b/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailer.vb new file mode 100644 index 0000000..d63ea34 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailer.vb @@ -0,0 +1,465 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb +Imports EmberScraperModule.EmberTMDBScraperModule + +Public Class dlgTrailer + +#Region "Fields" + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Friend WithEvents bwCompileList As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwDownloadTrailer As New System.ComponentModel.BackgroundWorker + + Private cTrailer As Trailers + Private imdbID As String = String.Empty + Private prePath As String = String.Empty + Private sPath As String = String.Empty + Private tArray As New List(Of String) + Private tURL As String = String.Empty + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = TMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + cTrailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + End Sub + + Public Overloads Function ShowDialog(ByVal _imdbID As String, ByVal _sPath As String) As String + Me.imdbID = _imdbID + Me.sPath = _sPath + + If MyBase.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + Return Replace(Me.tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + Return Me.tURL + End If + Else + Return String.Empty + End If + End Function + + Protected Overrides Sub Finalize() + cTrailer = Nothing + MyBase.Finalize() + End Sub + + Private Sub BeginDownload(ByVal CloseDialog As Boolean) + Dim didCancel As Boolean = False + + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(56, "Downloading selected trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + If CloseDialog Then + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, Path.GetFileName(Me.prePath)) + FileUtils.Common.MoveFileWithStream(Me.prePath, Me.tURL) + + File.Delete(Me.prePath) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.prePath, """")) + didCancel = True + End If + ElseIf Me.txtManual.Text.Length > 0 Then + Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + If CloseDialog Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.txtManual.Text, """")) + didCancel = True + End If + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + didCancel = True + End If + ElseIf Regex.IsMatch(Me.txtYouTube.Text, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.txtYouTube.Text) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + ElseIf StringUtils.isValidURL(Me.txtYouTube.Text) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = Me.txtYouTube.Text, .bType = CloseDialog}) + Else + If Regex.IsMatch(Me.lbTrailers.SelectedItem.ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.lbTrailers.SelectedItem.ToString) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + Else + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = lbTrailers.SelectedItem.ToString, .bType = CloseDialog}) + End If + End If + + If didCancel Then + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + End Sub + + Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click + Try + With ofdTrailer + .InitialDirectory = Directory.GetParent(Master.currMovie.Filename).FullName + .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.ValidExts.ToArray(), ";*")) + .FilterIndex = 0 + End With + + If ofdTrailer.ShowDialog() = DialogResult.OK Then + txtManual.Text = ofdTrailer.FileName + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub btnGetTrailers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTrailers.Click + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.pnlStatus.Visible = True + + Me.bwCompileList = New System.ComponentModel.BackgroundWorker + Me.bwCompileList.WorkerSupportsCancellation = True + Me.bwCompileList.RunWorkerAsync() + End Sub + + Private Sub btnPlayTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayTrailer.Click + Try + Me.BeginDownload(False) + Catch + MsgBox(Master.eLang.GetString(58, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), MsgBoxStyle.Critical, Master.eLang.GetString(59, "Error Playing Trailer")) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Try + End Sub + + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click + + If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(62, "Moving specified file to trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + File.Move(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + Else + Dim didCancel As Boolean = False + + If StringUtils.isValidURL(Me.txtYouTube.Text) Then + tURL = Me.txtYouTube.Text + ElseIf Me.lbTrailers.SelectedItems.Count > 0 Then + tURL = lbTrailers.SelectedItem.ToString + Else + didCancel = True + End If + + If Not didCancel Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + + End Sub + + Private Sub bwCompileList_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwCompileList.DoWork + Try + tArray = cTrailer.GetTrailers(Me.imdbID, False) + + If Me.bwCompileList.CancellationPending Then + e.Cancel = True + End If + Catch + End Try + End Sub + + Private Sub bwCompileList_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwCompileList.RunWorkerCompleted + If Not e.Cancelled Then + If Me.tArray.Count > 0 Then + For Each tTrail As String In Me.tArray + Me.lbTrailers.Items.Add(tTrail) + Next + + Me.btnGetTrailers.Visible = False + Else + Me.btnGetTrailers.Enabled = False + End If + + End If + + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Sub + + Private Sub bwDownloadTrailer_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTrailer.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + + If Args.bType Then + Me.tURL = cTrailer.DownloadTrailer(Me.sPath, Args.Parameter) + Else + Me.prePath = cTrailer.DownloadTrailer(Path.Combine(Master.TempPath, Path.GetFileName(Me.sPath)), Args.Parameter) + End If + + Catch + End Try + + e.Result = Args.bType + + If Me.bwDownloadTrailer.CancellationPending Then + e.Cancel = True + End If + End Sub + + Private Sub bwDownloadTrailer_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwDownloadTrailer.ProgressChanged + pbStatus.Value = e.ProgressPercentage + End Sub + + Private Sub bwDownloadTrailer_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadTrailer.RunWorkerCompleted + If Not e.Cancelled Then + If Convert.ToBoolean(e.Result) Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + If Not String.IsNullOrEmpty(Me.prePath) Then System.Diagnostics.Process.Start(String.Concat("""", prePath, """")) + End If + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.cTrailer.Cancel() + + If Me.bwCompileList.IsBusy Then Me.bwCompileList.CancelAsync() + If Me.bwDownloadTrailer.IsBusy Then Me.bwDownloadTrailer.CancelAsync() + + While Me.bwCompileList.IsBusy OrElse Me.bwDownloadTrailer.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + AddHandler cTrailer.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + + Private Sub dlgTrailer_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub DownloadProgressUpdated(ByVal iProgress As Integer) + bwDownloadTrailer.ReportProgress(iProgress) + End Sub + + Private Sub lbTrailers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbTrailers.SelectedIndexChanged + Me.SetEnabled(True) + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.BeginDownload(True) + End Sub + + Private Sub SetEnabled(ByVal DeletePre As Boolean) + If DeletePre AndAlso Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + File.Delete(Me.prePath) + Me.prePath = String.Empty + End If + + If StringUtils.isValidURL(Me.txtYouTube.Text) OrElse Me.lbTrailers.SelectedItems.Count > 0 OrElse Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Enabled = True + Me.btnSetNfo.Enabled = True + Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") + Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") + Else + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + Else + Me.OK_Button.Enabled = False + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnPlayTrailer.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(64, "Select Trailer") + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.GroupBox1.Text = Master.eLang.GetString(65, "Select Trailer to Download") + Me.GroupBox2.Text = Master.eLang.GetString(66, "Manual Trailer Entry") + Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") + Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") + Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") + End Sub + + Private Sub txtManual_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtManual.TextChanged + Me.SetEnabled(True) + End Sub + + Private Sub txtYouTube_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtYouTube.TextChanged + Me.SetEnabled(True) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim bType As Boolean + Dim Parameter As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailerFormat.Designer.vb new file mode 100644 index 0000000..22f1374 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailerFormat.Designer.vb @@ -0,0 +1,155 @@ + _ +Partial Class dlgTrailerFormat + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(84, 117) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(154, 117) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(17, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(78, 69) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(53, 2) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(114, 100) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(10, 29) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.pnlStatus) + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(2, 4) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(220, 111) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 143) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lstFormats As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailerFormat.resx b/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailerFormat.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailerFormat.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailerFormat.vb b/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailerFormat.vb new file mode 100644 index 0000000..8f0ad6e --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/Scraper/dlgTrailerFormat.vb @@ -0,0 +1,114 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Public Class dlgTrailerFormat + +#Region "Fields" + + Private WithEvents YouTube As YouTube.Scraper + Private _selectedformaturl As String + Private _yturl As String + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal YTURL As String) As String + Me._yturl = YTURL + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return _selectedformaturl + Else + Return String.Empty + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailerFormat_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + Me.SetUp() + + lstFormats.DataSource = Nothing + + YouTube = New YouTube.Scraper + YouTube.GetVideoLinksAsync(Me._yturl) + + Catch ex As Exception + MsgBox(Master.eLang.GetString(71, "The video format links could not be retrieved."), MsgBoxStyle.Critical, Master.eLang.GetString(72, "Error Retrieving Video Format Links")) + End Try + End Sub + + Private Sub lstFormats_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFormats.SelectedIndexChanged + Try + Me._selectedformaturl = DirectCast(lstFormats.SelectedItem, YouTube.VideoLinkItem).URL + + If Me.lstFormats.SelectedItems.Count > 0 Then + Me.OK_Button.Enabled = True + Else + Me.OK_Button.Enabled = False + End If + Catch + End Try + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(73, "Select Format") + Me.lblStatus.Text = Master.eLang.GetString(74, "Getting available formats...") + Me.GroupBox1.Text = Master.eLang.GetString(75, "Available Formats") + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub YouTube_VideoLinksRetrieved(ByVal bSuccess As Boolean) Handles YouTube.VideoLinksRetrieved + Try + + If bSuccess Then + lstFormats.DataSource = YouTube.VideoLinks.Values.ToList + lstFormats.DisplayMember = "Description" + lstFormats.ValueMember = "URL" + + If YouTube.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + Me.lstFormats.SelectedIndex = YouTube.VideoLinks.IndexOfKey(Master.eSettings.PreferredTrailerQuality) + ElseIf Me.lstFormats.Items.Count = 1 Then + Me.lstFormats.SelectedIndex = 0 + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + Me.pnlStatus.Visible = False + Me.lstFormats.Enabled = True + End Try + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/frmTMDBInfoSettingsHolder.Designer.vb b/Addons/scraper.FanartTV.Poster/frmTMDBInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..f610c2c --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/frmTMDBInfoSettingsHolder.Designer.vb @@ -0,0 +1,545 @@ + _ +Partial Class frmTMDBInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.chkFallBackEng = New System.Windows.Forms.CheckBox() + Me.cbTMDBPrefLanguage = New System.Windows.Forms.ComboBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtTMDBApiKey = New System.Windows.Forms.TextBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.txtFANARTTVApiKey = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.pbTMDB = New System.Windows.Forms.PictureBox() + Me.pbFANARTTV = New System.Windows.Forms.PictureBox() + Me.GroupBox30.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + Me.GroupBox1.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.pbTMDB) + Me.GroupBox30.Controls.Add(Me.chkFallBackEng) + Me.GroupBox30.Controls.Add(Me.cbTMDBPrefLanguage) + Me.GroupBox30.Controls.Add(Me.Label3) + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtTMDBApiKey) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(309, 123) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "TMDB" + ' + 'chkFallBackEng + ' + Me.chkFallBackEng.AutoSize = True + Me.chkFallBackEng.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFallBackEng.Location = New System.Drawing.Point(8, 100) + Me.chkFallBackEng.Name = "chkFallBackEng" + Me.chkFallBackEng.Size = New System.Drawing.Size(129, 17) + Me.chkFallBackEng.TabIndex = 4 + Me.chkFallBackEng.Text = "Fall back on english" + Me.chkFallBackEng.UseVisualStyleBackColor = True + ' + 'cbTMDBPrefLanguage + ' + Me.cbTMDBPrefLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTMDBPrefLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTMDBPrefLanguage.FormattingEnabled = True + Me.cbTMDBPrefLanguage.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTMDBPrefLanguage.Location = New System.Drawing.Point(123, 65) + Me.cbTMDBPrefLanguage.Name = "cbTMDBPrefLanguage" + Me.cbTMDBPrefLanguage.Size = New System.Drawing.Size(45, 21) + Me.cbTMDBPrefLanguage.TabIndex = 3 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label3.Location = New System.Drawing.Point(6, 68) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(111, 13) + Me.Label3.TabIndex = 2 + Me.Label3.Text = "Preferred Language:" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(79, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "TMDB API Key:" + ' + 'txtTMDBApiKey + ' + Me.txtTMDBApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtTMDBApiKey.Name = "txtTMDBApiKey" + Me.txtTMDBApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtTMDBApiKey.TabIndex = 1 + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pbFANARTTV) + Me.GroupBox1.Controls.Add(Me.Label5) + Me.GroupBox1.Controls.Add(Me.txtFANARTTVApiKey) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(8, 169) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(309, 71) + Me.GroupBox1.TabIndex = 75 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Fanart.tv" + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.Location = New System.Drawing.Point(6, 18) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(94, 13) + Me.Label5.TabIndex = 0 + Me.Label5.Text = "Fanart.tv API Key:" + ' + 'txtFANARTTVApiKey + ' + Me.txtFANARTTVApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtFANARTTVApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtFANARTTVApiKey.Name = "txtFANARTTVApiKey" + Me.txtFANARTTVApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtFANARTTVApiKey.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(323, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(283, 150) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(225, 17) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(52, 17) + Me.chkCrew.TabIndex = 19 + Me.chkCrew.Text = "Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(131, 123) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 89) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 72) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 89) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 123) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(131, 106) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 106) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 72) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'pbTMDB + ' + Me.pbTMDB.Image = CType(resources.GetObject("pbTMDB.Image"), System.Drawing.Image) + Me.pbTMDB.Location = New System.Drawing.Point(287, 34) + Me.pbTMDB.Name = "pbTMDB" + Me.pbTMDB.Size = New System.Drawing.Size(16, 16) + Me.pbTMDB.TabIndex = 5 + Me.pbTMDB.TabStop = False + ' + 'pbFANARTTV + ' + Me.pbFANARTTV.Image = CType(resources.GetObject("pbFANARTTV.Image"), System.Drawing.Image) + Me.pbFANARTTV.Location = New System.Drawing.Point(287, 34) + Me.pbFANARTTV.Name = "pbFANARTTV" + Me.pbFANARTTV.Size = New System.Drawing.Size(16, 16) + Me.pbFANARTTV.TabIndex = 6 + Me.pbFANARTTV.TabStop = False + ' + 'frmTMDBInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox + Friend WithEvents Label18 As System.Windows.Forms.Label + Friend WithEvents txtTMDBApiKey As System.Windows.Forms.TextBox + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents gbOptions As System.Windows.Forms.GroupBox + Friend WithEvents chkCountry As System.Windows.Forms.CheckBox + Friend WithEvents chkStudio As System.Windows.Forms.CheckBox + Friend WithEvents chkRuntime As System.Windows.Forms.CheckBox + Friend WithEvents chkOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkTagline As System.Windows.Forms.CheckBox + Friend WithEvents chkCast As System.Windows.Forms.CheckBox + Friend WithEvents chkVotes As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailer As System.Windows.Forms.CheckBox + Friend WithEvents chkRating As System.Windows.Forms.CheckBox + Friend WithEvents chkRelease As System.Windows.Forms.CheckBox + Friend WithEvents chkMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkYear As System.Windows.Forms.CheckBox + Friend WithEvents chkTitle As System.Windows.Forms.CheckBox + Friend WithEvents chkFallBackEng As System.Windows.Forms.CheckBox + Friend WithEvents cbTMDBPrefLanguage As System.Windows.Forms.ComboBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents chkCrew As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label5 As System.Windows.Forms.Label + Friend WithEvents txtFANARTTVApiKey As System.Windows.Forms.TextBox + Friend WithEvents pbTMDB As System.Windows.Forms.PictureBox + Friend WithEvents pbFANARTTV As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.FanartTV.Poster/frmTMDBInfoSettingsHolder.resx b/Addons/scraper.FanartTV.Poster/frmTMDBInfoSettingsHolder.resx new file mode 100644 index 0000000..b1bac92 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/frmTMDBInfoSettingsHolder.resx @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== + + + + + 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 + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/frmTMDBInfoSettingsHolder.vb b/Addons/scraper.FanartTV.Poster/frmTMDBInfoSettingsHolder.vb new file mode 100644 index 0000000..d17768a --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/frmTMDBInfoSettingsHolder.vb @@ -0,0 +1,218 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports System.Diagnostics + +Public Class frmTMDBInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + Public Event SetupNeedsRestart() + +#End Region 'Events + +#Region "Fields" + + Private Api1 As String + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Private Sub chkCrew_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFallBackEng_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkFallBackEng.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTMDBPrefLanguage_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cbTMDBPrefLanguage.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtFANARTTVApiKey_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtFANARTTVApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Enter + Api1 = txtTMDBApiKey.Text + End Sub + + Private Sub txtTMDBApiKey_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextValidated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Validated + If Not (Api1 = txtTMDBApiKey.Text) Then + RaiseEvent SetupNeedsRestart() + End If + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label18.Text = Master.eLang.GetString(854, "TMDB API Key:") + Me.gbOptions.Text = Master.eLang.GetString(6, "Scraper Fields - Scraper specific") + Me.chkStudio.Text = Master.eLang.GetString(395, "Studio", True) + Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime", True) + Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline", True) + Me.chkGenre.Text = Master.eLang.GetString(20, "Genres", True) + Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline", True) + Me.chkCast.Text = Master.eLang.GetString(856, "Cast and Crew", True) + Me.chkVotes.Text = Master.eLang.GetString(399, "Votes", True) + Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer", True) + Me.chkRating.Text = Master.eLang.GetString(400, "Rating", True) + Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date", True) + Me.chkMPAA.Text = Master.eLang.GetString(859, "MPAA & Certification", True) + Me.chkYear.Text = Master.eLang.GetString(278, "Year", True) + Me.chkTitle.Text = Master.eLang.GetString(21, "Title", True) + 'Me.chkCertification.Text = Master.eLang.GetString(722, "Certification", True) + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkFallBackEng.Text = Master.eLang.GetString(114, "Fall back on english") + Me.Label3.Text = Master.eLang.GetString(115, "Preferred Language:") + + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + +#End Region 'Methods + + Private Sub PictureBox2_Click(sender As System.Object, e As System.EventArgs) Handles pbTMDB.Click + If Master.isWindows Then + Process.Start("http://docs.themoviedb.apiary.io/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://docs.themoviedb.apiary.io/" + Explorer.Start() + End Using + End If + + End Sub + + Private Sub pbFANARTTV_Click(sender As System.Object, e As System.EventArgs) Handles pbFANARTTV.Click + If Master.isWindows Then + Process.Start("http://fanart.tv/get-an-api-key/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://fanart.tv/get-an-api-key/" + Explorer.Start() + End Using + End If + + End Sub +End Class \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/frmTMDBMediaSettingsHolder.Designer.vb b/Addons/scraper.FanartTV.Poster/frmTMDBMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..68e3c03 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/frmTMDBMediaSettingsHolder.Designer.vb @@ -0,0 +1,525 @@ + _ +Partial Class frmTMDBMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBMediaSettingsHolder)) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.chkUseFANARTTV = New System.Windows.Forms.CheckBox() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkUseMPDB = New System.Windows.Forms.CheckBox() + Me.chkUseIMDBp = New System.Windows.Forms.CheckBox() + Me.chkUseIMPA = New System.Windows.Forms.CheckBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.cbManualETSize = New System.Windows.Forms.ComboBox() + Me.grpSaveFanart = New System.Windows.Forms.GroupBox() + Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() + Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() + Me.chkScrapePoster = New System.Windows.Forms.CheckBox() + Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.txtTimeout = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() + Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox9.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.grpSaveFanart.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.GroupBox3) + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Panel2) + Me.pnlSettings.Location = New System.Drawing.Point(12, 4) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 94 + Me.PictureBox1.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.GroupBox6) + Me.GroupBox3.Controls.Add(Me.GroupBox9) + Me.GroupBox3.Controls.Add(Me.GroupBox4) + Me.GroupBox3.Controls.Add(Me.grpSaveFanart) + Me.GroupBox3.Controls.Add(Me.chkScrapePoster) + Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(15, 31) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(505, 154) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Images" + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.chkUseFANARTTV) + Me.GroupBox6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox6.Location = New System.Drawing.Point(331, 21) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(160, 55) + Me.GroupBox6.TabIndex = 96 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Get Fanart From:" + ' + 'chkUseFANARTTV + ' + Me.chkUseFANARTTV.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseFANARTTV.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseFANARTTV.Location = New System.Drawing.Point(6, 21) + Me.chkUseFANARTTV.Name = "chkUseFANARTTV" + Me.chkUseFANARTTV.Size = New System.Drawing.Size(150, 22) + Me.chkUseFANARTTV.TabIndex = 2 + Me.chkUseFANARTTV.Text = "fanart.tv" + Me.chkUseFANARTTV.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseFANARTTV.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkUseMPDB) + Me.GroupBox9.Controls.Add(Me.chkUseIMDBp) + Me.GroupBox9.Controls.Add(Me.chkUseIMPA) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(165, 19) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(160, 78) + Me.GroupBox9.TabIndex = 5 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Get Poster From:" + ' + 'chkUseMPDB + ' + Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) + Me.chkUseMPDB.Name = "chkUseMPDB" + Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) + Me.chkUseMPDB.TabIndex = 2 + Me.chkUseMPDB.Text = "MoviePosterDB.com" + Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.UseVisualStyleBackColor = True + ' + 'chkUseIMDBp + ' + Me.chkUseIMDBp.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMDBp.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMDBp.Location = New System.Drawing.Point(6, 18) + Me.chkUseIMDBp.Name = "chkUseIMDBp" + Me.chkUseIMDBp.Size = New System.Drawing.Size(149, 19) + Me.chkUseIMDBp.TabIndex = 0 + Me.chkUseIMDBp.Text = "IMDB.com" + Me.chkUseIMDBp.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMDBp.UseVisualStyleBackColor = True + ' + 'chkUseIMPA + ' + Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) + Me.chkUseIMPA.Name = "chkUseIMPA" + Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) + Me.chkUseIMPA.TabIndex = 1 + Me.chkUseIMPA.Text = "IMPAwards.com" + Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.UseVisualStyleBackColor = True + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.cbManualETSize) + Me.GroupBox4.Location = New System.Drawing.Point(331, 94) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(160, 55) + Me.GroupBox4.TabIndex = 4 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "TMDB Extrathumbs Size:" + ' + 'cbManualETSize + ' + Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbManualETSize.FormattingEnabled = True + Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) + Me.cbManualETSize.Location = New System.Drawing.Point(12, 21) + Me.cbManualETSize.Name = "cbManualETSize" + Me.cbManualETSize.Size = New System.Drawing.Size(131, 21) + Me.cbManualETSize.TabIndex = 0 + ' + 'grpSaveFanart + ' + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) + Me.grpSaveFanart.Enabled = False + Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) + Me.grpSaveFanart.Name = "grpSaveFanart" + Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) + Me.grpSaveFanart.TabIndex = 2 + Me.grpSaveFanart.TabStop = False + Me.grpSaveFanart.Text = "Save Fanart In:" + ' + 'optFanartFolderExtraFanart + ' + Me.optFanartFolderExtraFanart.AutoSize = True + Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) + Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" + Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) + Me.optFanartFolderExtraFanart.TabIndex = 1 + Me.optFanartFolderExtraFanart.TabStop = True + Me.optFanartFolderExtraFanart.Text = "\extrafanart" + Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True + ' + 'optFanartFolderExtraThumbs + ' + Me.optFanartFolderExtraThumbs.AutoSize = True + Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) + Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" + Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) + Me.optFanartFolderExtraThumbs.TabIndex = 0 + Me.optFanartFolderExtraThumbs.TabStop = True + Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" + Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True + ' + 'chkScrapePoster + ' + Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) + Me.chkScrapePoster.Name = "chkScrapePoster" + Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) + Me.chkScrapePoster.TabIndex = 0 + Me.chkScrapePoster.Text = "Get Posters" + Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.UseVisualStyleBackColor = True + ' + 'chkScrapeFanart + ' + Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) + Me.chkScrapeFanart.Name = "chkScrapeFanart" + Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) + Me.chkScrapeFanart.TabIndex = 1 + Me.chkScrapeFanart.Text = "Get Fanart" + Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox1.Controls.Add(Me.Label23) + Me.GroupBox1.Controls.Add(Me.txtTimeout) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(15, 203) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(464, 126) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Trailers" + Me.GroupBox1.UseCompatibleTextRendering = True + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label23.Location = New System.Drawing.Point(21, 43) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(51, 13) + Me.Label23.TabIndex = 1 + Me.Label23.Text = "Timeout:" + ' + 'txtTimeout + ' + Me.txtTimeout.Enabled = False + Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTimeout.Location = New System.Drawing.Point(82, 39) + Me.txtTimeout.Name = "txtTimeout" + Me.txtTimeout.Size = New System.Drawing.Size(50, 22) + Me.txtTimeout.TabIndex = 2 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) + Me.GroupBox2.Controls.Add(Me.GroupBox5) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(165, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(291, 104) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Supported Sites:" + ' + 'chkTrailerIMDB + ' + Me.chkTrailerIMDB.AutoSize = True + Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) + Me.chkTrailerIMDB.Name = "chkTrailerIMDB" + Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) + Me.chkTrailerIMDB.TabIndex = 5 + Me.chkTrailerIMDB.Text = "IMDB" + Me.chkTrailerIMDB.UseVisualStyleBackColor = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) + Me.GroupBox5.Controls.Add(Me.Label2) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) + Me.GroupBox5.Location = New System.Drawing.Point(123, 12) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(161, 83) + Me.GroupBox5.TabIndex = 4 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Youtube/TMDB Trailer:" + ' + 'cbTrailerTMDBPref + ' + Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerTMDBPref.Enabled = False + Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTrailerTMDBPref.FormattingEnabled = True + Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) + Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" + Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) + Me.cbTrailerTMDBPref.TabIndex = 1 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label2.Location = New System.Drawing.Point(26, 26) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(111, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Preferred Language:" + ' + 'chkTrailerTMDBXBMC + ' + Me.chkTrailerTMDBXBMC.AutoSize = True + Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) + Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" + Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) + Me.chkTrailerTMDBXBMC.TabIndex = 1 + Me.chkTrailerTMDBXBMC.Text = "XBMC Format" + Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True + ' + 'chkTrailerTMDB + ' + Me.chkTrailerTMDB.AutoSize = True + Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) + Me.chkTrailerTMDB.Name = "chkTrailerTMDB" + Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) + Me.chkTrailerTMDB.TabIndex = 0 + Me.chkTrailerTMDB.Text = "Youtube/TMDB" + Me.chkTrailerTMDB.UseVisualStyleBackColor = True + ' + 'Panel2 + ' + Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Controls.Add(Me.btnDown) + Me.Panel2.Controls.Add(Me.btnUp) + Me.Panel2.Controls.Add(Me.cbEnabled) + Me.Panel2.Location = New System.Drawing.Point(0, 0) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(1125, 25) + Me.Panel2.TabIndex = 0 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(500, 7) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 12) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'frmTMDBMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.grpSaveFanart.ResumeLayout(False) + Me.grpSaveFanart.PerformLayout() + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents chkScrapeFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkScrapePoster As System.Windows.Forms.CheckBox + Friend WithEvents chkDownloadTrailer As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Panel2 As System.Windows.Forms.Panel + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Label23 As System.Windows.Forms.Label + Friend WithEvents txtTimeout As System.Windows.Forms.TextBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents grpSaveFanart As System.Windows.Forms.GroupBox + Friend WithEvents optFanartFolderExtraFanart As System.Windows.Forms.RadioButton + Friend WithEvents optFanartFolderExtraThumbs As System.Windows.Forms.RadioButton + Friend WithEvents chkTrailerTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDBXBMC As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents cbManualETSize As System.Windows.Forms.ComboBox + Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox + Friend WithEvents cbTrailerTMDBPref As System.Windows.Forms.ComboBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox9 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseMPDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMDBp As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMPA As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerIMDB As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseFANARTTV As System.Windows.Forms.CheckBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/frmTMDBMediaSettingsHolder.resx b/Addons/scraper.FanartTV.Poster/frmTMDBMediaSettingsHolder.resx new file mode 100644 index 0000000..3c46229 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/frmTMDBMediaSettingsHolder.resx @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/frmTMDBMediaSettingsHolder.vb b/Addons/scraper.FanartTV.Poster/frmTMDBMediaSettingsHolder.vb new file mode 100644 index 0000000..6ccca98 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/frmTMDBMediaSettingsHolder.vb @@ -0,0 +1,165 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTMDBMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order + 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order - 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Sub CheckTrailer() + Me.txtTimeout.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDBXBMC.Enabled = Me.chkDownloadTrailer.Checked + If Not Me.chkDownloadTrailer.Checked Then + Me.txtTimeout.Text = "2" + Me.chkTrailerTMDB.Checked = False + Me.chkTrailerTMDBXBMC.Checked = False + End If + End Sub + + Private Sub chkDownloadTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDownloadTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + CheckTrailer() + End Sub + + Private Sub chkTrailerTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDB.CheckedChanged + chkTrailerTMDBXBMC.Enabled = chkTrailerTMDB.Checked + cbTrailerTMDBPref.Enabled = chkTrailerTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerIMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerTMDBXBMC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDBXBMC.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkScrapeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapeFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + grpSaveFanart.Enabled = chkScrapeFanart.Checked + End Sub + + Private Sub chkScrapePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapePoster.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseFANARTTV_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkUseFANARTTV.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMDBp_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkUseIMDBp.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMDBf_CheckedChanged(sender As System.Object, e As System.EventArgs) + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMPA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseIMPA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseMPDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseMPDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Sub SetUp() + Me.txtTimeout.Text = Master.eSettings.TrailerTimeout.ToString + Me.Label23.Text = Master.eLang.GetString(7, "Timeout:") + Me.GroupBox2.Text = Master.eLang.GetString(8, "Supported Sites:") + Me.grpSaveFanart.Text = Master.eLang.GetString(8001, "Save Fanart In:") + Me.chkDownloadTrailer.Text = Master.eLang.GetString(529, "Enable Trailer Support", True) + Me.Label3.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkScrapePoster.Text = Master.eLang.GetString(101, "Get Posters") + Me.chkScrapeFanart.Text = Master.eLang.GetString(102, "Get Fanart") + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + Private Sub txtTimeout_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTimeout.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraThumbs_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraThumbs.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbManualETSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbManualETSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTrailerTMDBPref_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbTrailerTMDBPref.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/packages.config b/Addons/scraper.FanartTV.Poster/packages.config new file mode 100644 index 0000000..9d72b1b --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/scraper.FanartTV.Poster.vbproj b/Addons/scraper.FanartTV.Poster/scraper.FanartTV.Poster.vbproj new file mode 100644 index 0000000..1af3fa1 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/scraper.FanartTV.Poster.vbproj @@ -0,0 +1,287 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {A5277330-A443-46AB-A058-016A3B6AF8AC} + Library + EmberScraperModule + scraper.FanartTV.Poster + 512 + Windows + v3.5 + On + Binary + On + On + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + ..\..\ + true + + + + + + + + + + + true + true + true + ..\..\EmberMM-Dev\Modules\ + 42353,42354,42355 + full + x86 + 41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109 + ..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.vb + AllRules.ruleset + ;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets + ;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules + + + true + ..\..\EmberMM-Deploy\Modules\ + true + 42353,42354,42355 + pdbonly + x86 + 41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109 + ..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.vb + AllRules.ruleset + ;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets + ;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules + + + + ..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll + + + ..\..\packages\RestSharp.104.1\lib\net35\RestSharp.dll + + + + + + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + + + + + + + + + dlgTMDBSearchResults.vb + + + Form + + + dlgImgSelect.vb + + + Form + + + dlgTrailer.vb + + + Form + + + dlgTrailerFormat.vb + + + Form + + + frmTMDBMediaSettingsHolder.vb + + + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + frmTMDBInfoSettingsHolder.vb + + + Form + + + + + + dlgTMDBSearchResults.vb + Designer + + + dlgImgSelect.vb + Designer + + + dlgTrailer.vb + Designer + + + dlgTrailerFormat.vb + Designer + + + frmTMDBMediaSettingsHolder.vb + Designer + + + frmTMDBInfoSettingsHolder.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + {208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279} + EmberAPI + False + + + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6} + FanartTVAPI + + + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8} + WatTmdb + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + + + + + + \ No newline at end of file diff --git a/Addons/scraper.FanartTV.Poster/scraperMovieTMDBModule.vb b/Addons/scraper.FanartTV.Poster/scraperMovieTMDBModule.vb new file mode 100644 index 0000000..7ac1344 --- /dev/null +++ b/Addons/scraper.FanartTV.Poster/scraperMovieTMDBModule.vb @@ -0,0 +1,761 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports RestSharp +Imports WatTmdb +Imports EmberScraperModule.TMDBg + +''' +''' Native Scraper +''' +''' +Public Class EmberTMDBScraperModule + Implements Interfaces.EmberMovieScraperModule + + +#Region "Fields" + + Public Shared ConfigOptions As New Structures.ScrapeOptions + Public Shared ConfigScrapeModifier As New Structures.ScrapeModifier + Public Shared _AssemblyName As String + + Private dFImgSelect As dlgImgSelect = Nothing + + Private TMDBId As String + 'Private IMDBid As String + + ''' + ''' Scraping Here + ''' + ''' + Private _MySettings As New sMySettings + Private _TMDBg As TMDBg.Scraper + Private _Name As String = "Ember TMDB Movie Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmTMDBInfoSettingsHolder + Private _setupPost As frmTMDBMediaSettingsHolder + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberMovieScraperModule.ModuleSettingsChanged + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsScraper + Get + Return True + End Get + End Property + + ReadOnly Property ModuleName() As String Implements Interfaces.EmberMovieScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberMovieScraperModule.ModuleVersion + Get + Return System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Property PostScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Property ScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean Implements Interfaces.EmberMovieScraperModule.QueryPostScraperCapabilities + Select Case cap + Case Enums.PostScraperCapabilities.Fanart + Return True + Case Enums.PostScraperCapabilities.Poster + Return True + Case Enums.PostScraperCapabilities.Trailer + If _MySettings.DownloadTrailers Then Return True + End Select + Return False + End Function + + Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.DownloadTrailer + Using dTrailer As New dlgTrailer(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + sURL = dTrailer.ShowDialog(DBMovie.Movie.TMDBID, DBMovie.Filename) + End Using + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef studio As List(Of String)) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.GetMovieStudio + '' perche' lo crea? + + ''Dim TMDBg As New TMDBg.Scraper + ''TMDBg.IMDBURL = MySettings.IMDBURL + studio = _TMDBg.GetMovieStudios(DBMovie.Movie.ID) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupNeedsRestart() + RaiseEvent SetupNeedsRestart() + End Sub + + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + + Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberMovieScraperModule.Init + _AssemblyName = sAssemblyName + LoadSettings() + 'Must be after Load settings to retrieve the correct API key + _TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Info") + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + End If + End If + _TMDBConf = _TMDBApi.GetConfiguration() + _TMDBApiE = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey) + _TMDBConfE = _TMDBApiE.GetConfiguration() + _TMDBg = New TMDBg.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + End Sub + + Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupPostScraper + Dim Spanel As New Containers.SettingsPanel + _setupPost = New frmTMDBMediaSettingsHolder + LoadSettings() + _setupPost.cbEnabled.Checked = _PostScraperEnabled + _setupPost.chkTrailerIMDB.Checked = _MySettings.UseIMDBTrailer + _setupPost.chkTrailerTMDB.Checked = _MySettings.UseTMDBTrailer + _setupPost.cbTrailerTMDBPref.Text = _MySettings.UseTMDBTrailerPref + _setupPost.chkTrailerTMDBXBMC.Checked = _MySettings.UseTMDBTrailerXBMC + _setupPost.chkScrapePoster.Checked = ConfigScrapeModifier.Poster + _setupPost.chkScrapeFanart.Checked = ConfigScrapeModifier.Fanart + _setupPost.chkUseIMDBp.Checked = _MySettings.UseIMDB + _setupPost.chkUseIMPA.Checked = _MySettings.UseIMPA + _setupPost.chkUseMPDB.Checked = _MySettings.UseMPDB + _setupPost.chkUseFANARTTV.Checked = _MySettings.UseFANARTTV + + ' ad size from TMDB + '_setupPost.cbManualETSize.Items.Clear() + 'If Not IsNothing(_TMDBg.TMDBConf.images) Then + ' For Each aSi In _TMDBg.TMDBConf.images.poster_sizes + ' _setupPost.cbManualETSize.Items.Add(aSi) + ' Next + ' + 'End If + _setupPost.cbManualETSize.Text = _MySettings.ManualETSize + + _setupPost.txtTimeout.Text = _MySettings.TrailerTimeout.ToString + _setupPost.chkDownloadTrailer.Checked = _MySettings.DownloadTrailers + _setupPost.CheckTrailer() + _setupPost.orderChanged() + Spanel.Name = String.Concat(Me._Name, "PostScraper") + Spanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + Spanel.Prefix = "TMDBMovieMedia_" + Spanel.Order = 110 + Spanel.Parent = "pnlMovieMedia" + Spanel.Type = Master.eLang.GetString(36, "Movies", True) + Spanel.ImageIndex = If(Me._PostScraperEnabled, 9, 10) + Spanel.Panel = Me._setupPost.pnlSettings + + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return Spanel + End Function + + Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmTMDBInfoSettingsHolder + LoadSettings() + _setup.cbEnabled.Checked = _ScraperEnabled + _setup.chkTitle.Checked = ConfigOptions.bTitle + _setup.chkYear.Checked = ConfigOptions.bYear + _setup.chkMPAA.Checked = ConfigOptions.bMPAA + _setup.chkRelease.Checked = ConfigOptions.bRelease + _setup.chkRuntime.Checked = ConfigOptions.bRuntime + _setup.chkRating.Checked = ConfigOptions.bRating + _setup.chkVotes.Checked = ConfigOptions.bVotes + _setup.chkStudio.Checked = ConfigOptions.bStudio + _setup.chkTagline.Checked = ConfigOptions.bTagline + _setup.chkOutline.Checked = ConfigOptions.bOutline + _setup.chkCast.Checked = ConfigOptions.bFullCast + _setup.chkGenre.Checked = ConfigOptions.bGenre + _setup.chkTrailer.Checked = ConfigOptions.bTrailer + _setup.chkCountry.Checked = ConfigOptions.bCountry + _setup.chkCrew.Checked = ConfigOptions.bFullCrew + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + + '_setup.chkCertification.Checked = ConfigOptions.bCert + + If String.IsNullOrEmpty(_MySettings.TMDBAPIKey) Then + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + _setup.txtTMDBApiKey.Text = _MySettings.TMDBAPIKey + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.orderChanged() + If String.IsNullOrEmpty(_MySettings.FANARTTVApiKey) Then + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _setup.txtFANARTTVApiKey.Text = _MySettings.FANARTTVApiKey + + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + SPanel.Prefix = "TMDBMovieInfo_" + SPanel.Order = 110 + SPanel.Parent = "pnlMovieData" + SPanel.Type = Master.eLang.GetString(36, "Movies", True) + SPanel.ImageIndex = If(_ScraperEnabled, 9, 10) + SPanel.Panel = _setup.pnlSettings + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return SPanel + End Function + + Sub LoadSettings() + ConfigOptions.bTitle = AdvancedSettings.GetBooleanSetting("DoTitle", True) + ConfigOptions.bYear = AdvancedSettings.GetBooleanSetting("DoYear", True) + ConfigOptions.bMPAA = AdvancedSettings.GetBooleanSetting("DoMPAA", True) + ConfigOptions.bRelease = AdvancedSettings.GetBooleanSetting("DoRelease", True) + ConfigOptions.bRuntime = AdvancedSettings.GetBooleanSetting("DoRuntime", True) + ConfigOptions.bRating = AdvancedSettings.GetBooleanSetting("DoRating", True) + ConfigOptions.bVotes = AdvancedSettings.GetBooleanSetting("DoVotes", True) + ConfigOptions.bStudio = AdvancedSettings.GetBooleanSetting("DoStudio", True) + ConfigOptions.bTagline = AdvancedSettings.GetBooleanSetting("DoTagline", True) + ConfigOptions.bOutline = AdvancedSettings.GetBooleanSetting("DoOutline", True) + ConfigOptions.bPlot = AdvancedSettings.GetBooleanSetting("DoPlot", True) + ConfigOptions.bCast = AdvancedSettings.GetBooleanSetting("DoCast", True) + ConfigOptions.bDirector = AdvancedSettings.GetBooleanSetting("DoDirector", True) + ConfigOptions.bWriters = AdvancedSettings.GetBooleanSetting("DoWriters", True) + ConfigOptions.bProducers = AdvancedSettings.GetBooleanSetting("DoProducers", True) + ConfigOptions.bGenre = AdvancedSettings.GetBooleanSetting("DoGenres", True) + ConfigOptions.bTrailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + ConfigOptions.bMusicBy = AdvancedSettings.GetBooleanSetting("DoMusic", True) + ConfigOptions.bOtherCrew = AdvancedSettings.GetBooleanSetting("DoOtherCrews", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("DoFullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("DoFullCrews", True) + ConfigOptions.bTop250 = AdvancedSettings.GetBooleanSetting("DoTop250", True) + ConfigOptions.bCountry = AdvancedSettings.GetBooleanSetting("DoCountry", True) + ConfigOptions.bCert = AdvancedSettings.GetBooleanSetting("DoCert", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("FullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("FullCrew", True) + + _MySettings.TMDBAPIKey = AdvancedSettings.GetSetting("TMDBAPIKey", "Get your API Key from http://www.themoviedb.org") + _MySettings.FANARTTVApiKey = AdvancedSettings.GetSetting("FANARTTVApiKey", "Get your API Key from http://fanart.tv") + _MySettings.FallBackEng = AdvancedSettings.GetBooleanSetting("FallBackEn", False) + _MySettings.TMDBLanguage = AdvancedSettings.GetSetting("TMDBLanguage", "en") + _MySettings.DownloadTrailers = AdvancedSettings.GetBooleanSetting("DownloadTraliers", False) + + _MySettings.TrailerTimeout = Convert.ToInt32(AdvancedSettings.GetSetting("TrailerTimeout", "10")) + _MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) + _MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) + _MySettings.UseIMPA = AdvancedSettings.GetBooleanSetting("UseIMPA", False) + _MySettings.UseMPDB = AdvancedSettings.GetBooleanSetting("UseMPDB", False) + _MySettings.UseIMDB = AdvancedSettings.GetBooleanSetting("UseIMDB", False) + _MySettings.UseFANARTTV = AdvancedSettings.GetBooleanSetting("UseFANARTTV", False) + _MySettings.UseIMDBTrailer = AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", True) + _MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + _MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) + + ConfigScrapeModifier.DoSearch = True + ConfigScrapeModifier.Meta = True + ConfigScrapeModifier.NFO = True + ConfigScrapeModifier.Extra = True + ConfigScrapeModifier.Actors = True + + ConfigScrapeModifier.Poster = AdvancedSettings.GetBooleanSetting("DoPoster", True) + ConfigScrapeModifier.Fanart = AdvancedSettings.GetBooleanSetting("DoFanart", True) + ConfigScrapeModifier.Trailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + End Sub + + Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.PostScraper + 'LoadSettings() + Dim Poster As New Images + Dim Fanart As New Images + Dim pResults As Containers.ImgResult + Dim fResults As Containers.ImgResult + Dim tURL As String = String.Empty + Dim Trailer As Trailers + Dim aScrapeImages As ScrapeImages + + LoadSettings() + If String.IsNullOrEmpty(DBMovie.Movie.TMDBID) Then + _TMDBg.GetMovieID(DBMovie) + End If + Trailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim saveModifier As Structures.ScrapeModifier = Master.GlobalScrapeMod + Master.GlobalScrapeMod = Functions.ScrapeModifierAndAlso(Master.GlobalScrapeMod, ConfigScrapeModifier) + + Dim doSave As Boolean = False + + aScrapeImages = New ScrapeImages(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + If Master.GlobalScrapeMod.Poster Then + Poster.Clear() + If Poster.IsAllowedToDownload(DBMovie, Enums.ImageType.Posters) Then + pResults = New Containers.ImgResult + If aScrapeImages.GetPreferredImage(Poster, DBMovie.Movie.ID, DBMovie.Movie.TMDBID, Enums.ImageType.Posters, pResults, DBMovie.Filename, False, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Poster.Image) Then + pResults.ImagePath = Poster.SaveAsPoster(DBMovie) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(76, "A poster of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size")) + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApi, _MySettings) + pResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Posters) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + End Using + End If + End If + End If + End If + Dim didEts As Boolean + If Master.GlobalScrapeMod.Fanart Then + Fanart.Clear() + If Fanart.IsAllowedToDownload(DBMovie, Enums.ImageType.Fanart) Then + fResults = New Containers.ImgResult + didEts = True + If aScrapeImages.GetPreferredImage(Fanart, DBMovie.Movie.IMDBID, DBMovie.Movie.TMDBID, Enums.ImageType.Fanart, fResults, DBMovie.Filename, Master.GlobalScrapeMod.Extra, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Fanart.Image) Then + fResults.ImagePath = Fanart.SaveAsFanart(DBMovie) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) ' + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(78, "Fanart of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size:")) + + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApi, _MySettings) + fResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Fanart) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + End Using + End If + End If + End If + End If + If Master.GlobalScrapeMod.Trailer AndAlso _MySettings.DownloadTrailers Then + tURL = Trailer.DownloadSingleTrailer(DBMovie.Filename, DBMovie.Movie.TMDBID, DBMovie.isSingle, DBMovie.Movie.Trailer) + If Not String.IsNullOrEmpty(tURL) Then + If tURL.Substring(0, 22) = "http://www.youtube.com" Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + DBMovie.Movie.Trailer = Replace(tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + DBMovie.Movie.Trailer = tURL + End If + ElseIf tURL.Substring(0, 7) = "http://" Then + DBMovie.Movie.Trailer = tURL + Else + DBMovie.TrailerPath = tURL + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.TrailerItem, True) + End If + End If + End If + If Master.GlobalScrapeMod.Extra Then + If Master.eSettings.AutoET AndAlso DBMovie.isSingle Then + Try + aScrapeImages.GetPreferredFAasET(DBMovie.Movie.TMDBID, DBMovie.Filename) + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.ThumbsItem, True) + Catch ex As Exception + End Try + End If + End If + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then + For Each act As MediaContainers.Person In DBMovie.Movie.Actors + Dim img As New Images + img.FromWeb(act.Thumb) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If + Next + End If + Master.GlobalScrapeMod = saveModifier + Return New Interfaces.ModuleResult With {.breakChain = False, .BoolProperty = didEts} + End Function + + Sub SaveSettings() + AdvancedSettings.SetBooleanSetting("DoFullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("DoFullCrews", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DoTitle", ConfigOptions.bTitle) + AdvancedSettings.SetBooleanSetting("DoYear", ConfigOptions.bYear) + AdvancedSettings.SetBooleanSetting("DoMPAA", ConfigOptions.bMPAA) + AdvancedSettings.SetBooleanSetting("DoRelease", ConfigOptions.bRelease) + AdvancedSettings.SetBooleanSetting("DoRuntime", ConfigOptions.bRuntime) + AdvancedSettings.SetBooleanSetting("DoRating", ConfigOptions.bRating) + AdvancedSettings.SetBooleanSetting("DoVotes", ConfigOptions.bVotes) + AdvancedSettings.SetBooleanSetting("DoStudio", ConfigOptions.bStudio) + AdvancedSettings.SetBooleanSetting("DoTagline", ConfigOptions.bTagline) + AdvancedSettings.SetBooleanSetting("DoOutline", ConfigOptions.bOutline) + AdvancedSettings.SetBooleanSetting("DoPlot", ConfigOptions.bPlot) + AdvancedSettings.SetBooleanSetting("DoCast", ConfigOptions.bCast) + AdvancedSettings.SetBooleanSetting("DoDirector", ConfigOptions.bDirector) + AdvancedSettings.SetBooleanSetting("DoWriters", ConfigOptions.bWriters) + AdvancedSettings.SetBooleanSetting("DoProducers", ConfigOptions.bProducers) + AdvancedSettings.SetBooleanSetting("DoGenres", ConfigOptions.bGenre) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigOptions.bTrailer) + AdvancedSettings.SetBooleanSetting("DoMusic", ConfigOptions.bMusicBy) + AdvancedSettings.SetBooleanSetting("DoOtherCrews", ConfigOptions.bOtherCrew) + AdvancedSettings.SetBooleanSetting("DoCountry", ConfigOptions.bCountry) + AdvancedSettings.SetBooleanSetting("DoTop250", ConfigOptions.bTop250) + AdvancedSettings.SetBooleanSetting("DoCert", ConfigOptions.bCert) + + AdvancedSettings.SetBooleanSetting("FullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("FullCrew", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DownloadTraliers", _MySettings.DownloadTrailers) + + AdvancedSettings.SetSetting("TrailerTimeout", _MySettings.TrailerTimeout.ToString) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailer", _MySettings.UseTMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", _MySettings.UseTMDBTrailerXBMC) + AdvancedSettings.SetBooleanSetting("UseIMDBTrailer", _MySettings.UseIMDBTrailer) + + AdvancedSettings.SetSetting("ManualETSize", _MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("UseTMDBTrailerPref", _MySettings.UseTMDBTrailerPref.ToString) + + AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) + AdvancedSettings.SetBooleanSetting("DoFanart", ConfigScrapeModifier.Fanart) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigScrapeModifier.Trailer) + + AdvancedSettings.SetSetting("TMDBAPIKey", _MySettings.TMDBAPIKey) + AdvancedSettings.SetSetting("FANARTTVApiKey", _MySettings.FANARTTVApiKey) + AdvancedSettings.SetBooleanSetting("FallBackEn", _MySettings.FallBackEng) + AdvancedSettings.SetSetting("TMDBLanguage", _MySettings.TMDBLanguage) + AdvancedSettings.SetBooleanSetting("UseIMPA", _MySettings.UseIMPA) + AdvancedSettings.SetBooleanSetting("UseMPDB", _MySettings.UseMPDB) + AdvancedSettings.SetBooleanSetting("UseIMDB", _MySettings.UseIMDB) + AdvancedSettings.SetBooleanSetting("UseFANARTTV", _MySettings.UseFANARTTV) + End Sub + + Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupPostScraper + _MySettings.DownloadTrailers = _setupPost.chkDownloadTrailer.Checked + _MySettings.UseIMDBTrailer = _setupPost.chkTrailerIMDB.Checked + _MySettings.UseTMDBTrailer = _setupPost.chkTrailerTMDB.Checked + _MySettings.UseTMDBTrailerXBMC = _setupPost.chkTrailerTMDBXBMC.Checked + _MySettings.TrailerTimeout = Convert.ToInt32(_setupPost.txtTimeout.Text) + _MySettings.ManualETSize = _setupPost.cbManualETSize.Text + _MySettings.UseTMDBTrailerPref = _setupPost.cbTrailerTMDBPref.Text + _MySettings.UseIMDB = _setupPost.chkUseIMDBp.Checked + _MySettings.UseIMPA = _setupPost.chkUseIMPA.Checked + _MySettings.UseMPDB = _setupPost.chkUseMPDB.Checked + _MySettings.UseFANARTTV = _setupPost.chkUseFANARTTV.Checked + ConfigScrapeModifier.Poster = _setupPost.chkScrapePoster.Checked + ConfigScrapeModifier.Fanart = _setupPost.chkScrapeFanart.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + RemoveHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + _setupPost.Dispose() + End If + End Sub + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupScraper + If Not String.IsNullOrEmpty(_setup.txtTMDBApiKey.Text) Then + _MySettings.TMDBAPIKey = _setup.txtTMDBApiKey.Text + Else + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + If Not String.IsNullOrEmpty(_setup.txtFANARTTVApiKey.Text) Then + _MySettings.FANARTTVApiKey = _setup.txtFANARTTVApiKey.Text + Else + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + ConfigOptions.bTitle = _setup.chkTitle.Checked + ConfigOptions.bYear = _setup.chkYear.Checked + ConfigOptions.bMPAA = _setup.chkMPAA.Checked + ConfigOptions.bRelease = _setup.chkRelease.Checked + ConfigOptions.bRuntime = _setup.chkRuntime.Checked + ConfigOptions.bRating = _setup.chkRating.Checked + ConfigOptions.bVotes = _setup.chkVotes.Checked + ConfigOptions.bStudio = _setup.chkStudio.Checked + ConfigOptions.bTagline = _setup.chkTagline.Checked + ConfigOptions.bOutline = _setup.chkOutline.Checked + ConfigOptions.bPlot = False + ConfigOptions.bCast = _setup.chkCast.Checked + ConfigOptions.bDirector = _setup.chkCrew.Checked + ConfigOptions.bWriters = _setup.chkCrew.Checked + ConfigOptions.bProducers = _setup.chkCrew.Checked + ConfigOptions.bGenre = _setup.chkGenre.Checked + ConfigOptions.bTrailer = _setup.chkTrailer.Checked + ConfigOptions.bMusicBy = _setup.chkCrew.Checked + ConfigOptions.bOtherCrew = _setup.chkCrew.Checked + ConfigOptions.bCountry = _setup.chkCountry.Checked + ConfigOptions.bTop250 = False + ConfigOptions.bFullCrew = _setup.chkCrew.Checked + ConfigOptions.bFullCast = _setup.chkCast.Checked + ConfigOptions.bCert = ConfigOptions.bMPAA + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + RemoveHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + _setup.Dispose() + End If + End Sub + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.Scraper + 'LoadSettings() + ''TMDBg.IMDBURL = MySettings.IMDBURL + ''TMDBg.UseOFDBTitle = MySettings.UseOFDBTitle + ''TMDBg.UseOFDBOutline = MySettings.UseOFDBOutline + ''TMDBg.UseOFDBPlot = MySettings.UseOFDBPlot + ''TMDBg.UseOFDBGenre = MySettings.UseOFDBGenre + Dim tTitle As String = String.Empty + Dim OldTitle As String = DBMovie.Movie.Title + + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + + If Master.GlobalScrapeMod.NFO AndAlso Not Master.GlobalScrapeMod.DoSearch Then + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, Options.bFullCrew, Options.bFullCast, False, Options, False) + ElseIf Not ScrapeType = Enums.ScrapeType.SingleScrape Then + DBMovie.Movie = _TMDBg.GetSearchMovieInfo(DBMovie.Movie.Title, DBMovie, ScrapeType, Options) + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + If ScrapeType = Enums.ScrapeType.SingleScrape AndAlso Master.GlobalScrapeMod.DoSearch _ + AndAlso ModulesManager.Instance.externalScrapersModules.OrderBy(Function(y) y.ScraperOrder).FirstOrDefault(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled).AssemblyName = _AssemblyName Then + DBMovie.Movie.IMDBID = String.Empty + DBMovie.ClearExtras = True + DBMovie.PosterPath = String.Empty + DBMovie.FanartPath = String.Empty + DBMovie.TrailerPath = String.Empty + DBMovie.ExtraPath = String.Empty + DBMovie.SubPath = String.Empty + DBMovie.NfoPath = String.Empty + DBMovie.Movie.Clear() + End If + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + Select Case ScrapeType + Case Enums.ScrapeType.FilterAuto, Enums.ScrapeType.FullAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.UpdateAuto + Return New Interfaces.ModuleResult With {.breakChain = False} + End Select + If ScrapeType = Enums.ScrapeType.SingleScrape Then + Using dSearch As New dlgTMDBSearchResults(_MySettings, Me._TMDBg) + '' dSearch.IMDBURL = MySettings.IMDBURL + Dim tmpTitle As String = DBMovie.Movie.Title + If String.IsNullOrEmpty(tmpTitle) Then + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name, False) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name, False) + Else + tmpTitle = StringUtils.FilterName(If(DBMovie.isSingle, Directory.GetParent(DBMovie.Filename).Name, Path.GetFileNameWithoutExtension(DBMovie.Filename))) + End If + End If + Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) + If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID + End If + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + + Master.currMovie.ClearExtras = True + Master.currMovie.PosterPath = String.Empty + Master.currMovie.FanartPath = String.Empty + Master.currMovie.TrailerPath = String.Empty + Master.currMovie.ExtraPath = String.Empty + Master.currMovie.SubPath = String.Empty + Master.currMovie.NfoPath = String.Empty + + + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, filterOptions.bFullCrew, filterOptions.bFullCast, False, filterOptions, False) + End If + Else + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End Using + End If + End If + + If Not String.IsNullOrEmpty(DBMovie.Movie.Title) Then + tTitle = StringUtils.FilterTokens(DBMovie.Movie.Title) + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = tTitle + If Master.eSettings.DisplayYear AndAlso Not String.IsNullOrEmpty(DBMovie.Movie.Year) Then + DBMovie.ListTitle = String.Format("{0} ({1})", tTitle, DBMovie.Movie.Year) + Else + DBMovie.ListTitle = tTitle + End If + Else + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name) + Else + If DBMovie.UseFolder AndAlso DBMovie.isSingle Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(DBMovie.Filename).Name) + Else + DBMovie.ListTitle = StringUtils.FilterName(Path.GetFileNameWithoutExtension(DBMovie.Filename)) + End If + End If + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = DBMovie.ListTitle + End If + + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function SelectImageOfType(ByRef mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.SelectImageOfType + If String.IsNullOrEmpty(mMovie.Movie.TMDBID) Then + _TMDBg.GetMovieID(mMovie) + End If + If preload AndAlso _DLType = Enums.ImageType.Fanart AndAlso Not IsNothing(dFImgSelect) Then + pResults = dFImgSelect.ShowDialog() + dFImgSelect = Nothing + Else + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + If preload Then + dFImgSelect = New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + dFImgSelect.PreLoad(mMovie, Enums.ImageType.Fanart, _isEdit) + End If + '' dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(mMovie, _DLType, _isEdit) + End Using + End If + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + Public Sub PostScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.PostScraperOrderChanged + _setup.orderChanged() + End Sub + + Public Sub ScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.ScraperOrderChanged + _setupPost.orderChanged() + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Structure sMySettings + +#Region "Fields" + Dim DownloadTrailers As Boolean + Dim TrailerTimeout As Integer + Dim UseTMDBTrailer As Boolean + Dim UseTMDBTrailerXBMC As Boolean + Dim ManualETSize As String + Dim UseTMDBTrailerPref As String + Dim TMDBAPIKey As String + Dim FANARTTVApiKey As String + Dim TMDBLanguage As String + Dim FallBackEng As Boolean + Dim UseIMDB As Boolean + Dim UseIMPA As Boolean + Dim UseMPDB As Boolean + Dim UseFANARTTV As Boolean + Dim UseIMDBTrailer As Boolean +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/AssemblyInfo.vb b/Addons/scraper.IMDB.Data/AssemblyInfo.vb new file mode 100644 index 0000000..1b59a44 --- /dev/null +++ b/Addons/scraper.IMDB.Data/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.Debug_(db_DB).xml b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.Debug_(db_DB).xml new file mode 100644 index 0000000..0fba5b0 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.Debug_(db_DB).xml @@ -0,0 +1,902 @@ + + native1 + native2 + native3 + native4 + native5 + native6 + native7 + native8 + native9 + native10 + native11 + native12 + native13 + native14 + native15 + native16 + native17 + native18 + native19 + native20 + native21 + native22 + native23 + native24 + native25 + native26 + native27 + native28 + native29 + native30 + native31 + native32 + native33 + native34 + native35 + native36 + native37 + native38 + native39 + native40 + native41 + native42 + native43 + native44 + native45 + native46 + native47 + native48 + native49 + native50 + native51 + native52 + native53 + native54 + native55 + native56 + native57 + native58 + native59 + native60 + native61 + native62 + native63 + native64 + native65 + native66 + native67 + native68 + native69 + native70 + native71 + native72 + native73 + native74 + native75 + native76 + native77 + native78 + native79 + native80 + native81 + native82 + native83 + native84 + native85 + native86 + native87 + native88 + native89 + native90 + native91 + native92 + native93 + native94 + native95 + native96 + native97 + native98 + native99 + native100 + native101 + native102 + native103 + native104 + native105 + native106 + native107 + native108 + native109 + native110 + native111 + native112 + native113 + native114 + native115 + native116 + native117 + native118 + native119 + native120 + native121 + native122 + native123 + native124 + native125 + native126 + native127 + native128 + native129 + native130 + native131 + native132 + native133 + native134 + native135 + native136 + native137 + native138 + native139 + native140 + native141 + native142 + native143 + native144 + native145 + native146 + native147 + native148 + native149 + native150 + native151 + native152 + native153 + native154 + native155 + native156 + native157 + native158 + native159 + native160 + native161 + native162 + native163 + native164 + native165 + native166 + native167 + native168 + native169 + native170 + native171 + native172 + native173 + native174 + native175 + native176 + native177 + native178 + native179 + native180 + native181 + native182 + native183 + native184 + native185 + native186 + native187 + native188 + native189 + native190 + native191 + native192 + native193 + native194 + native195 + native196 + native197 + native198 + native199 + native200 + native201 + native202 + native203 + native204 + native205 + native206 + native207 + native208 + native209 + native210 + native211 + native212 + native213 + native214 + native215 + native216 + native217 + native218 + native219 + native220 + native221 + native222 + native223 + native224 + native225 + native226 + native227 + native228 + native229 + native230 + native231 + native232 + native233 + native234 + native235 + native236 + native237 + native238 + native239 + native240 + native241 + native242 + native243 + native244 + native245 + native246 + native247 + native248 + native249 + native250 + native251 + native252 + native253 + native254 + native255 + native256 + native257 + native258 + native259 + native260 + native261 + native262 + native263 + native264 + native265 + native266 + native267 + native268 + native269 + native270 + native271 + native272 + native273 + native274 + native275 + native276 + native277 + native278 + native279 + native280 + native281 + native282 + native283 + native284 + native285 + native286 + native287 + native288 + native289 + native290 + native291 + native292 + native293 + native294 + native295 + native296 + native297 + native298 + native299 + native300 + native301 + native302 + native303 + native304 + native305 + native306 + native307 + native308 + native309 + native310 + native311 + native312 + native313 + native314 + native315 + native316 + native317 + native318 + native319 + native320 + native321 + native322 + native323 + native324 + native325 + native326 + native327 + native328 + native329 + native330 + native331 + native332 + native333 + native334 + native335 + native336 + native337 + native338 + native339 + native340 + native341 + native342 + native343 + native344 + native345 + native346 + native347 + native348 + native349 + native350 + native351 + native352 + native353 + native354 + native355 + native356 + native357 + native358 + native359 + native360 + native361 + native362 + native363 + native364 + native365 + native366 + native367 + native368 + native369 + native370 + native371 + native372 + native373 + native374 + native375 + native376 + native377 + native378 + native379 + native380 + native381 + native382 + native383 + native384 + native385 + native386 + native387 + native388 + native389 + native390 + native391 + native392 + native393 + native394 + native395 + native396 + native397 + native398 + native399 + native400 + native401 + native402 + native403 + native404 + native405 + native406 + native407 + native408 + native409 + native410 + native411 + native412 + native413 + native414 + native415 + native416 + native417 + native418 + native419 + native420 + native421 + native422 + native423 + native424 + native425 + native426 + native427 + native428 + native429 + native430 + native431 + native432 + native433 + native434 + native435 + native436 + native437 + native438 + native439 + native440 + native441 + native442 + native443 + native444 + native445 + native446 + native447 + native448 + native449 + native450 + native451 + native452 + native453 + native454 + native455 + native456 + native457 + native458 + native459 + native460 + native461 + native462 + native463 + native464 + native465 + native466 + native467 + native468 + native469 + native470 + native471 + native472 + native473 + native474 + native475 + native476 + native477 + native478 + native479 + native480 + native481 + native482 + native483 + native484 + native485 + native486 + native487 + native488 + native489 + native490 + native491 + native492 + native493 + native494 + native495 + native496 + native497 + native498 + native499 + native500 + native501 + native502 + native503 + native504 + native505 + native506 + native507 + native508 + native509 + native510 + native511 + native512 + native513 + native514 + native515 + native516 + native517 + native518 + native519 + native520 + native521 + native522 + native523 + native524 + native525 + native526 + native527 + native528 + native529 + native530 + native531 + native532 + native533 + native534 + native535 + native536 + native537 + native538 + native539 + native540 + native541 + native542 + native543 + native544 + native545 + native546 + native547 + native548 + native549 + native550 + native551 + native552 + native553 + native554 + native555 + native556 + native557 + native558 + native559 + native560 + native561 + native562 + native563 + native564 + native565 + native566 + native567 + native568 + native569 + native570 + native571 + native572 + native573 + native574 + native575 + native576 + native577 + native578 + native579 + native580 + native581 + native582 + native583 + native584 + native585 + native586 + native587 + native588 + native589 + native590 + native591 + native592 + native593 + native594 + native595 + native596 + native597 + native598 + native599 + native600 + native601 + native602 + native603 + native604 + native605 + native606 + native607 + native608 + native609 + native610 + native611 + native612 + native613 + native614 + native615 + native616 + native617 + native618 + native619 + native620 + native621 + native622 + native623 + native624 + native625 + native626 + native627 + native628 + native629 + native630 + native631 + native632 + native633 + native634 + native635 + native636 + native637 + native638 + native639 + native640 + native641 + native642 + native643 + native644 + native645 + native646 + native647 + native648 + native649 + native650 + native651 + native652 + native653 + native654 + native655 + native656 + native657 + native658 + native659 + native660 + native661 + native662 + native663 + native664 + native665 + native666 + native667 + native668 + native669 + native670 + native671 + native672 + native673 + native674 + native675 + native676 + native677 + native678 + native679 + native680 + native681 + native682 + native683 + native684 + native685 + native686 + native687 + native688 + native689 + native690 + native691 + native692 + native693 + native694 + native695 + native696 + native697 + native698 + native699 + native700 + native701 + native702 + native703 + native704 + native705 + native706 + native707 + native708 + native709 + native710 + native711 + native712 + native713 + native714 + native715 + native716 + native717 + native718 + native719 + native720 + native721 + native722 + native723 + native724 + native725 + native726 + native727 + native728 + native729 + native730 + native731 + native732 + native733 + native734 + native735 + native736 + native737 + native738 + native739 + native740 + native741 + native742 + native743 + native744 + native745 + native746 + native747 + native748 + native749 + native750 + native751 + native752 + native753 + native754 + native755 + native756 + native757 + native758 + native759 + native760 + native761 + native762 + native763 + native764 + native765 + native766 + native767 + native768 + native769 + native770 + native771 + native772 + native773 + native774 + native775 + native776 + native777 + native778 + native779 + native780 + native781 + native782 + native783 + native784 + native785 + native786 + native787 + native788 + native789 + native790 + native791 + native792 + native793 + native794 + native795 + native796 + native797 + native798 + native799 + native800 + native801 + native802 + native803 + native804 + native805 + native806 + native807 + native808 + native809 + native810 + native811 + native812 + native813 + native814 + native815 + native816 + native817 + native818 + native819 + native820 + native821 + native822 + native823 + native824 + native825 + native826 + native827 + native828 + native829 + native830 + native831 + native832 + native833 + native834 + native835 + native836 + native837 + native838 + native839 + native840 + native841 + native842 + native843 + native844 + native845 + native846 + native847 + native848 + native849 + native850 + native851 + native852 + native853 + native854 + native855 + native856 + native857 + native858 + native859 + native860 + native861 + native862 + native863 + native864 + native865 + native866 + native867 + native868 + native869 + native870 + native871 + native872 + native873 + native874 + native875 + native876 + native877 + native878 + native879 + native880 + native881 + native882 + native883 + native884 + native885 + native886 + native887 + native888 + native889 + native890 + native891 + native892 + native893 + native894 + native895 + native896 + native897 + native898 + native899 + native900 + \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.English_(en_US)-Help.xml b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.English_(en_US)-Help.xml new file mode 100644 index 0000000..1705beb --- /dev/null +++ b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.English_(en_US)-Help.xml @@ -0,0 +1,45 @@ + + Enable or disable this module. + Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom) + Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom) + Enter the mirror to use when retrieving information from IMDB. + If enabled, Ember will attempt to retreive the movie title from OFDB (a German language site) when scraping. + If enabled, Ember will attempt to retreive the movie outline from OFDB (a German language site) when scraping. + If enabled, Ember will attempt to retreive the movie plot from OFDB (a German language site) when scraping. + If enabled, Ember will attempt to retreive the movie genre from OFDB (a German language site) when scraping. + Enable scraping movie certification. + Enable scraping movie Top 250 ranking. + Limit the number of scraped genres to the entered value. + Limit the number of scraped actors to the entered value. + Enable scraping movie other crew. (Scrape Full Crew must be enabled) + Enable scraping movie musicians. (Scrape Full Crew must be enabled) + Enable scraping movie producers. (Scrape Full Crew must be enabled) + Enable scraping movie writers. + Enable scraping movie studio. + Enable scraping movie runtime. + Enable scraping movie plot. + Enable scraping movie outline. + Enable scraping movie genre. + Enable scraping movie director. + Enable scraping movie tagline. + Enable scraping movie cast. + Enable scraping movie votes. + Enable scraping movie trailer url. + Enable scraping movie rating. + Enable scraping movie release date. + Enable scraping movie MPAA. + Enable scraping movie year. + Enable scraping movie title. + Enable or disable this module. + Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom) + Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom) + Enable scraping posters from this module. (Refer to global poster settings for more options) + Enable scraping fanart from this module. (Refer to global fanart settings for more options) + Enable retrieving images from theMovieDB.org. + Enable retrieving images from + Enable retrieving images from MoviePosterDB.com. + Enable automatic extraction of extrathumbs from this module. (Refer to global extrathumb settings for more options) + Enable trailer downloading from this module. (Refer to global trailer settings for more options) + Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.) + Select the sites from which you would like to retrieve trailer URLs and/or files. + diff --git a/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.English_(en_US).xml b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.English_(en_US).xml new file mode 100644 index 0000000..87a19b5 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.English_(en_US).xml @@ -0,0 +1,117 @@ + + Ember Native TV Scrapers + Use OFDB Genre + Use OFDB Plot + Use OFDB Outline + Use OFDB Title + IMDB Mirror: + Scraper Fields - Scraper specific + Timeout: + Supported Sites: + Get Images From: + Search Results + Searching IMDB... + The ID you entered is not a valid IMDB ID. + You have manually entered an IMDB ID but have not verified it is correct. + Continue without verification? + Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again. + Verification Failed + Partial Matches ({0}) + Exact Matches ({0}) + Popular Titles ({0}) + No Matches Found + View details of each result to find the proper movie. + Movie Search Results + Manual IMDB Entry: + Verify + Searching IMDB... + Downloading details... + Downloading {0} + No Fanart found for this movie. + No Fanart Found + No Posters found for this movie. + No Posters Found + Retrieving data from TheMovieDB.com... + TheMovieDB.com is not enabled + Retrieving data from IMPAwards.com... + IMPAwards.com is not enabled + Retrieving data from MoviePosterDB.com... + MoviePostersDB.com is not enabled + Preparing images... + Select Poster + Select Fanart + Check All Thumb + Check All Mid + Check All Original + Selected item will be set as fanart. All checked items will be saved to \extrathumbs. + Performing Preliminary Tasks... + Downloading Selected Image... + Original + Cover + Medium + Small + Original ({0}x{1}) + Cover ({0}x{1}) + Small ({0}x{1}) + Medium ({0}x{1}) + Multiple + Downloading selected trailer... + Copying specified file to trailer... + The trailer could not be played. This could be due to an invalid URL or you do not have the proper player to play the trailer type. + Error Playing Trailer + Move + Copy + Moving specified file to trailer... + Set To Nfo + Select Trailer + Select Trailer to Download + Manual Trailer Entry + Direct Link or YouTube URL: + Compiling trailer list... + Preview Trailer + Local Trailer: + The video format links could not be retrieved. + Error Retrieving Video Format Links + Select Format + Getting available formats... + Available Formats + A poster of your preferred size could not be found. Please choose another. + No Preferred Size + Fanart of your preferred size could not be found. Please choose another. + There are no known episodes for this show. Scrape the show, season, or episode and try again. + No Known Episodes + There is no poster available for this episode. + Guest Star + The ID you entered is not a valid TVDB ID. + Downloading show info... + TV Search Results + View details of each result to find the proper TV show. + Downloading Fullsize Fanart Image... + Loading Current Images... + (Down)Loading New Images... + Setting Defaults... + Show Poster + Episode Fanart + Show Fanart + All Seasons Poster + Season Posters + Season Fanart + Season {0} Posters + Season {0} Fanart + TV Image Selection + Current Image: + Get Posters + Get Fanart + These settings are specific to this module.{0}Please refer to the global settings for more options. + Ember Native Movie Scrapers + + IMDB + OFDB (German) + TMDB Extrathumbs Size: + Trailers + Youtube/TMDB Trailer: + XBMC Format + Preferred language + Save Fanart In: + Open In Browser + diff --git a/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.German_(de_DE)-Help.xml b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.German_(de_DE)-Help.xml new file mode 100644 index 0000000..f4c930d --- /dev/null +++ b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.German_(de_DE)-Help.xml @@ -0,0 +1,45 @@ + + Aktiviert dieses Modul. + Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.) + Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.) + Gib den Mirror ein über den Ember mit der IMDB kommunizieren soll. + Wenn aktiviert versucht Ember den Titel von der deutschen Seite OFDB.DE zu scrapen. + Wenn aktiviert versucht Ember die Kurzebschreibung von der deutschen Seite OFDB.DE zu scrapen. + Wenn aktiviert versucht Ember die Inhaltsangabe von der deutschen Seite OFDB.DE zu scrapen. + Wenn aktiviert versucht Ember die Genres von der deutschen Seite OFDB.DE zu scrapen. + Aktiviert das Scrapen der Altersbeschränkung mit diesem Modul. + Aktiviert das Scrapen der IMDB Top250 mit diesem Modul. + Die Anzahl der gescrapten Genres limitieren. + Die Anzahl der gescrapten Schauspieler limitieren. + Aktiviert das Scrapen der Sonstigen Crew mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!) + Aktiviert das Scrapen der Musiker mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!) + Aktiviert das Scrapen der Produzenten mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!) + Aktiviert das Scrapen der Autoren mit diesem Modul. + Aktiviert das Scrapen des Studios mit diesem Modul. + Aktiviert das Scrapen der Spielzeit mit diesem Modul. + Aktiviert das Scrapen des Inhalts mit diesem Modul. + Aktiviert das Scrapen der Kurzbeschreibung mit diesem Modul. + Aktiviert das Scrapen von Genre mit diesem Modul. + Aktiviert das Scrapen des Regisseurs mit diesem Modul. + Aktiviert das Scrapen der Tagline mit diesem Modul. + Aktiviert das Scrapen der Schauspieler mit diesem Modul. + Aktiviert das Scrapen der Anzahl Bewertungen mit diesem Modul. + Aktiviert das Scrapen von Trailern mit diesem Modul. + Aktiviert das Scrapen der Bewertung mit diesem Modul. + Aktiviert das Scrapen des Premiere Datums mit diesem Modul. + Aktiviert das Scrapen der MPAA Bewertung mit diesem Modul. + Aktiviert das Scrapen des Jahres mit diesem Modul. + Aktiviert das Scrapen des Titels mit diesem Modul. + Aktiviert dieses Modul. + Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.) + Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.) + Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration!) + Aktiviert das Laden von Fanart mit diesem Modul. (Schau auch in die Globale Konfiguration!) + Aktiviert das Laden von Bildern von TheMovieDB.org. + Aktiviert das Laden von Bildern von IMPA + Aktiviert das Laden von Bildern von MoviePosterDB.com. + Automatische Frame extraktion mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!) + Trailer laden mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!) + Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Zeite in dieser Zeit nicht geantwortet hat wird sie übersprungen) + Wähle die Seite von der Trailer URLs/Dateien geladen werden sollen. + diff --git a/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.German_(de_DE).xml b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.German_(de_DE).xml new file mode 100644 index 0000000..0349557 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.German_(de_DE).xml @@ -0,0 +1,117 @@ + + Ember Nativer TV Scraper + OFDB Genre benutzen + OFDB Handlung benutzen + OFDB Kurzbeschr. benutzen + OFDB Titel benutzen + IMDB Mirror: + Scraper Felder - Scraper spezifisch + Timeout: + Unterstützte Seiten: + Bilder holen von: + Suchergebnis + Suche in der IMDB... + Die eingegebene ID ist keine gültige IMDB ID. + Die IMDB ID ist noch nicht geprüft. + Ohne Prüfung fortfahren? + Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben. + Prüfung fehlgeschlagen + Teil Treffer ({0}) + Exakte Treffer({0}) + Populäre Titel ({0}) + Keine Treffer + Schaue dir die Details an um den richtigen Film zu finden. + Film Suchergebnis + Man. IMDB ID: + Prüfen + Suche in der IMDB... + Lade Details... + Lade {0} herunter + Kein Fanart für diesen Film gefunden + Kein Fanart gefunden + Kein Poster für diesen Film gefunden + Kein Poster gefunden + Lade Daten von TheMovieDB.com... + TheMovieDB.com ist nicht aktiviert. + Lade Daten von IMPAwards.com... + IMPAwards.com ist nicht aktiviert. + Lade Daten von MoviePosterDB.com... + MoviePostersDB.com ist nicht aktiviert. + Bereite Bilder vor... + Wähle Poster + Wähle Fanart + Alle Thumbs + Alle Mittl. + Alle Original + Markiertes Bild wird Fanart. Alle aktivierten werden Extrathumbs. + Vorarbeit läuft... + Lade gewähltes Bild... + Original + Cover + mittel + klein + Original ({0}x{1}) + Cover ({0}x{1}) + klein ({0}x{1}) + mittel ({0}x{1}) + Mehrfach + Lade gewählten Trailer... + Kopiere gewählten Trailer... + Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URL liegen oder es ist kein Player für diesen Dateityp vorhanden. + Fehler beim Abspielen des Trailers + Verschieben + Kopieren + Verschiebe gewählten Trailer... + In NFO speichern + Trailer wählen + Trailer zum laden wählen + Man. Trailer + Direktlink oder YouTube URL: + Stelle Trailerliste zusammen... + Trailer Vorschau + Lokaler Trailer: + Die Videoformat Linkliste konnte nicht generiert werden. + Fehler beim generieren der Videoformat Linkliste + Format wählen + Hole verfügbare Formate... + Verfügbare Formate + Es konnte kein Poster in der gewünschten Größe gefunden werden. Wähle ein anderes. + Keine gewünschte Größe + Es konnte kein Fanart in der gewünschten Größe gefunden werden. Wähle ein anderes. + Keine Episoden für diese TV-Serie verfügbar. Scrape diese Serie, Staffel oder Episode und versuche es erneut. + Keine Episoden verfügbar + Kein Poster für diese Episode vorhanden. + Gast Star + Die eingegebene ID ist keine gültige TVDB ID. + Lade Serien Informationen... + Serien Suchergebnis + Betrachte die Details um die richtige TV-Serie zu erkennen. + Lade Fanart in Originalgröße... + Lade aktuelle Bilder... + Lade neue Bilder... + Setze Standardwerte... + Serien Poster + Episoden Fanart + Serien Fanart + Alle-Staffeln Poster + Staffel Posters + Staffel Fanart + Staffel {0} Poster + Staffel {0} Fanart + Bilderwahl TV-Serien + Aktuelles Bild: + Poster laden + Fanart laden + Diese Einstellungen sind Modul-spezifisch. {0} Bitte werfen sie einen blick in die Globalen Einstellungen für noch mehr Optionen. + Ember Nativer Film Scraper + + IMDB + OFDB (German) + TMDB Extrathumbs Grösse: + Trailer + Youtube/TMDB Trailer: + XBMC Format + Bevorzugte Sprache + Speichere Fanart in: + Im Browser öffnen + diff --git a/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..79a98bf --- /dev/null +++ b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,45 @@ + + Slå modulen av eller på. + Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.) + Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.) + Før inn speilserver til IMDB. + Hvis påslått, EMM vil å prøve å finne filmtittel fra OFDB (en tyskspråklig side) under detaljhenting. + Hvis påslått, EMM vil prøve å finne beskrivelse av filmen på OFDB (en tyskspråklig side) under detaljhenting. + Hvis påslått, EMM vil hente filmhistorien fra OFDB (en tyskspråklig side) under detaljhenting. + Hvis påslått, EMM vil hente filmsjanger fra OFDB (en tyskspråklig side) under detaljhenting. + Slå på detaljhenting av filmsertifisering. + Slå på detaljhenting av IMDB Top 250-plassering. + Begrens antall detaljhentede sjangre. + Begrens antall skuespillere. + Slå på detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått) + Slå på detaljhenting av musikere. (Detaljhenting av fullt crew må være påslått) + Slå på detaljhenting av filmprodusenter. (Detaljhenting av full crew må være påslått) + Slå på detaljhenting av manusforfattere. + Slå på detaljhenting av studio. + Slå på detaljhenting av filmlengde. + Slå på detaljhenting av filmens historie. + Slå på detaljhenting av filmens beskrivelse. + Slå på detaljhenting av filmens sjanger. + Slå på detaljhetning av filmens regissør. + Slå på detaljhetning av filmens undertittel. + Slå på detaljhetning av filmens skuespillerbeholdning. + Slå på detaljhetning av filmens poeng. + Slå på detaljhetning av filmens trailer URL. + Slå på detaljhetning av filmens aldersgrense. + Slå på detaljhetning av filmens premieredato. + Slå på detaljhetning av filmens MPAA-markering. + Slå på detaljhetning av filmens år. + Slå på detaljhetning av filmens tittel. + Slå modulen av eller på. + Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.) + Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.) + Slå på detaljhetning av plakater i denne modulen. (Se globale plakatinnstillinger for flere valg) + Slå på detaljhetning av fankunst i denne modulen. (Se globale fankunstinnstillinger for flere valg) + Slå på bildehenting fra theMovieDB.org. + Slå på bildehenting fra + Slå på bildehenting fra MoviePosterDB.com + Slå på automatisk henting av ekstrakunst fra denne modulen. (Se globale ekstrakunstinnstillinger for flere valg) + Slå på automatisk henting av trailer fra denne modulen. (Se globale trailerinnstillinger for flere valg) + Før inn tiden (i sekunder) du vil bruke for timeout for trailersider. (Hvis siden ikke svarer innen timeoutfristen, så vil den bli hoppet over) + Velg sidene du vil bruke til trailer URL og/eller filer. + diff --git a/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO).xml b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO).xml new file mode 100644 index 0000000..52370c3 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO).xml @@ -0,0 +1,117 @@ + + EMM TV-detaljhentere + Bruk OFDB-sjangere + Bruk OFDB-filmhistorie + Bruk OFDB-beskrivelse + Bruk OFDB-tittel + IMDB-speilserver: + Detaljhenterområder - Detaljhenterspesifikk + Tidsavbrudd: + Støttede sider: + Hent bilder fra: + Søkeresultater + Søker TMDB... + IDen du førte inn er ikke en riktig IMDB-ID. + Du har ført inn en IMDB-ID, men har ikke verifisert om den er riktig. + Fortsette uten verifisering? + Kunne ikke hente filmdetaljer for den innførte IDen. Vennligst sjekk IDen og prøv igjen. + Verifisering feilet + Delvise treff ({0}) + Eksakte treff ({0}) + Populære titler ({0}) + Ingen funnet + Se detaljer fra hvert treff for å finne riktig film. + Filmsøkresultater + Manuell IMDB innføring: + Verifiser + Søker TMDB... + Laster ned detaljer... + Laster ned {0} + Ingen fankunst funnet for denne filmen. + Ingen fankunst funnet + Ingen plakater funnet for denne filmen. + Ingen plakater funnet + Henter data fra TheMovieDB.com... + TheMovieDB.com er ikke påslått + Henter data fra IMPAwards.com... + IMPAwards.com er ikke påslått + Henter data fra MoviePosterDB.com... + MoviePostersDB.com er ikke påslått + Forbereder bilder... + Velg plakat + Velg fankunst + Huk av alle tommelbilder + Huk av alle Mid + Huk av alle originale + Valgte objekt vil bli satt som fankunst. Alle hukede objekter vil bli lagret i \extrathumbs. + Utfører forberedende oppgaver... + Laster ned valgte bilde... + Original + Cover + Medium + Liten + Original ({0}x{1}) + Cover {0}x{1} + Liten ({0}x{1}) + Medium ({0}x{1}) + Flere + Laster ned valgt trailer... + Kopierer valgt fil til trailer... + Traileren kunne ikke spilles av. Det kan være at URL ikke er gyldig, eller at du ikke har riktig avspiller for denne filtypen. + Kunne spille av trailer. + Flytt + Kopiér + Flytter valgt fil til trailer... + Sett i nfo + Velg trailer + Velg trailer til å laste ned + Manuell trailerinnføring + Direkte link eller YouTube URL: + Kompilerer trailerliste... + Sniktitt på trailer + Lokal trailer: + Videoformatlenkene kunne ikke hentes + Kunne ikke hente videoformatlenker + Velg format + Henter tilgjengelige formater... + Tilgjengelige formater + En plakat i din valgte størrelse kunne ikke hentes. Vennligst velg en annen. + Ingen foretrukket størrelse + Fankunst i din foretrukkede størrelse kunne ikke bli funnet. Vennligst velg en annen. + Det er ingen kjente episoder for denne serien. Detaljhent serien, sesongen eller episoden og prøv på nytt. + Ingen kjente episoder + Det er ingen plakater for denne episoden. + Gjesteskuespiller + IDen du innførte er ikke en gyldig TVDB ID. + Laster ned serieinfo... + TVsøk-resultater + Se detaljer fra hvert resultat for å finne riktig serie. + Laster ned fankunst i full størrelse... + Laster inn nåværende bilder... + Laster (ned) nye bilder... + Setter standarder... + Serieplakat + Episodefankunst + Vis fankunst + Alle sesonger-plakat + Sesongplakater + Sesongfankunst + Sesong {0}-plakater + Sesong {0}-fankunst + TV-bilde valg + Nåværende bilde: + Hent plakater + Hent fankunst + Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg. + EMM film-detaljhentere + + IMDB + OFDB (Tysk) + TMDB Ekstrakunst-størrelse: + Trailere + Youtube/TMDB Trailer: + XBMC-format + Foretrukket språk + Lagre fankunst i: + Åpne i nettleser + diff --git a/Addons/scraper.IMDB.Data/My Project/Application.Designer.vb b/Addons/scraper.IMDB.Data/My Project/Application.Designer.vb new file mode 100644 index 0000000..66fb81a --- /dev/null +++ b/Addons/scraper.IMDB.Data/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Addons/scraper.IMDB.Data/My Project/Application.myapp b/Addons/scraper.IMDB.Data/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Addons/scraper.IMDB.Data/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/Addons/scraper.IMDB.Data/My Project/AssemblyInfo.vb b/Addons/scraper.IMDB.Data/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..5d57487 --- /dev/null +++ b/Addons/scraper.IMDB.Data/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Addons/scraper.IMDB.Data/My Project/Resources.Designer.vb b/Addons/scraper.IMDB.Data/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bb85827 --- /dev/null +++ b/Addons/scraper.IMDB.Data/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EmberScraperModule.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Addons/scraper.IMDB.Data/My Project/Resources.resx b/Addons/scraper.IMDB.Data/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Addons/scraper.IMDB.Data/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/My Project/Settings.Designer.vb b/Addons/scraper.IMDB.Data/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f020222 --- /dev/null +++ b/Addons/scraper.IMDB.Data/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.EmberScraperModule.My.MySettings + Get + Return Global.EmberScraperModule.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Addons/scraper.IMDB.Data/My Project/Settings.settings b/Addons/scraper.IMDB.Data/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Addons/scraper.IMDB.Data/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Addons/scraper.IMDB.Data/Resources/Logo.png b/Addons/scraper.IMDB.Data/Resources/Logo.png new file mode 100644 index 0000000..a89dae1 Binary files /dev/null and b/Addons/scraper.IMDB.Data/Resources/Logo.png differ diff --git a/Addons/scraper.IMDB.Data/Scraper/clsScrapeIMDB.vb b/Addons/scraper.IMDB.Data/Scraper/clsScrapeIMDB.vb new file mode 100644 index 0000000..06e23c6 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/clsScrapeIMDB.vb @@ -0,0 +1,1126 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.Globalization +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMDB + + Public Class MovieSearchResults + +#Region "Fields" + + Private _ExactMatches As New List(Of MediaContainers.Movie) + Private _PartialMatches As New List(Of MediaContainers.Movie) + Private _PopularTitles As New List(Of MediaContainers.Movie) + +#End Region 'Fields + +#Region "Properties" + + Public Property ExactMatches() As List(Of MediaContainers.Movie) + Get + Return _ExactMatches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _ExactMatches = value + End Set + End Property + + Public Property PartialMatches() As List(Of MediaContainers.Movie) + Get + Return _PartialMatches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _PartialMatches = value + End Set + End Property + + Public Property PopularTitles() As List(Of MediaContainers.Movie) + Get + Return _PopularTitles + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _PopularTitles = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + Public UseOFDBGenre As Boolean + Public UseOFDBOutline As Boolean + Public UseOFDBPlot As Boolean + Public UseOFDBTitle As Boolean + + Friend WithEvents bwIMDB As New System.ComponentModel.BackgroundWorker + + Private Const LINK_PATTERN As String = "]*?href[\s]?=[\s\""\']*(?.*?)[\""\']*.*?>(?[^<]+|.*?)?<\/a>" + + Private Const ACTORTABLE_PATTERN As String = "(.*?)
" + Private Const HREF_PATTERN As String = ".*?)[""'].*?>(?.*?)
" + Private Const HREF_PATTERN_2 As String = ".*?)[""""'].*?>(?.*?)" + Private Const HREF_PATTERN_3 As String = "([^<]*):([^<]*)[^<]*(([^<]*))?" + Private Const HREF_PATTERN_4 As String = "(?.*?)" + Private Const IMDB_ID_REGEX As String = "tt\d\d\d\d\d\d\d" + Private Const IMG_PATTERN As String = ".*?)"" width=""\d{1,3}"" height=""\d{1,3}"" border="".{1,3}"">" + Private Const MOVIE_TITLE_PATTERN As String = "(?<=<(title)>).*(?=<\/\1>)" + Private Const TABLE_PATTERN As String = "\n?(.*?)" + Private Const TD_PATTERN_1 As String = "(.*?)" + Private Const TD_PATTERN_2 As String = "(?<=)(.*?)(?=)(\s\(.*?\))?" + Private Const TD_PATTERN_3 As String = "(.*?)" + Private Const TD_PATTERN_4 As String = "(?.*?)</td>" + Private Const TITLE_PATTERN As String = "<a\shref=[""""'](?<url>.*?)[""""'].*?>(?<name>.*?)</a>((\s)+?(\((?<year>\d{4})(\/.*?)?\)))?((\s)+?(\((?<type>.*?)\)))?" + Private Const TR_PATTERN As String = "<tr\sclass="".*?"">(.*?)</tr>" + + Private sPoster As String + +#End Region 'Fields + +#Region "Enumerations" + + Private Enum SearchType + Movies = 0 + Details = 1 + SearchDetails = 2 + End Enum + +#End Region 'Enumerations + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + + Public Event SearchResultsDownloaded(ByVal mResults As IMDB.MovieSearchResults) + +#End Region 'Events + +#Region "Methods" + + Public Sub CancelAsync() + If bwIMDB.IsBusy Then bwIMDB.CancelAsync() + + While bwIMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Function GetMovieInfo(ByVal strID As String, ByRef IMDBMovie As MediaContainers.Movie, ByVal FullCrew As Boolean, ByVal FullCast As Boolean, ByVal GetPoster As Boolean, ByVal Options As Structures.ScrapeOptions, ByVal IsSearch As Boolean) As Boolean + Try + Dim ofdbTitle As String = String.Empty + Dim ofdbOutline As String = String.Empty + Dim ofdbPlot As String = String.Empty + Dim ofdbGenre As String = String.Empty + + If bwIMDB.CancellationPending Then Return Nothing + + If (UseOFDBTitle AndAlso Options.bTitle) OrElse (UseOFDBOutline AndAlso Options.bOutline) OrElse _ + (UseOFDBPlot AndAlso Options.bPlot) OrElse (UseOFDBGenre AndAlso Options.bGenre) Then + Dim OFDBScrape As New OFDB(strID, IMDBMovie) + If UseOFDBTitle AndAlso Options.bTitle Then ofdbTitle = OFDBScrape.Title + If UseOFDBOutline AndAlso Options.bOutline Then ofdbOutline = OFDBScrape.Outline + If UseOFDBPlot AndAlso Options.bPlot Then ofdbPlot = OFDBScrape.Plot + If UseOFDBGenre AndAlso Options.bGenre Then ofdbGenre = OFDBScrape.Genre + End If + + If bwIMDB.CancellationPending Then Return Nothing + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/combined")) + sHTTP = Nothing + + If bwIMDB.CancellationPending Then Return Nothing + + Dim sPlot As New HTTP + Dim PlotHtml As String = sPlot.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/plotsummary")) + sPlot = Nothing + + IMDBMovie.IMDBID = strID + + If bwIMDB.CancellationPending Then Return Nothing + + Dim OriginalTitle As String = Regex.Match(HTML, MOVIE_TITLE_PATTERN).ToString + If Options.bTitle Then + Dim oldOTitle As String = IMDBMovie.OriginalTitle + IMDBMovie.OriginalTitle = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(OriginalTitle, ".*(?=\s\(\d+.*?\))").ToString)).Trim + If String.IsNullOrEmpty(IMDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + If Not String.IsNullOrEmpty(ofdbTitle) Then + IMDBMovie.Title = ofdbTitle.Trim + Else + If Not String.IsNullOrEmpty(Master.eSettings.ForceTitle) Then + IMDBMovie.Title = GetForcedTitle(strID, IMDBMovie.OriginalTitle) + Else + IMDBMovie.Title = IMDBMovie.OriginalTitle.Trim + End If + End If + If String.IsNullOrEmpty(oldOTitle) OrElse Not oldOTitle = IMDBMovie.OriginalTitle Then + IMDBMovie.SortTitle = String.Empty + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If GetPoster Then + sPoster = Regex.Match(Regex.Match(HTML, "(?<=\b(name=""poster"")).*\b[</a>]\b").ToString, "(?<=\b(src=)).*\b(?=[</a>])").ToString.Replace("""", String.Empty).Replace("/></", String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bYear Then IMDBMovie.Year = Regex.Match(OriginalTitle, "(?<=\()\d+(?=.*\))", RegexOptions.RightToLeft).ToString + + Dim D, W, tempD As Integer + + If Options.bMPAA AndAlso (String.IsNullOrEmpty(IMDBMovie.MPAA) OrElse Not Master.eSettings.LockMPAA) Then + tempD = If(HTML.IndexOf("<h5><a href=""/mpaa"">MPAA</a>:</h5>") > 0, HTML.IndexOf("<h5><a href=""/mpaa"">MPAA</a>:</h5>"), 0) + + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + + W = If(D > 0, HTML.IndexOf("</div", D), 0) + + IMDBMovie.MPAA = If(D > 0 AndAlso W > 0, Web.HttpUtility.HtmlDecode(HTML.Substring(D, W - D).Remove(0, 26)).Trim(), String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bCert AndAlso (String.IsNullOrEmpty(IMDBMovie.Certification) OrElse Not Master.eSettings.LockMPAA) Then + 'get certifications + D = HTML.IndexOf("<h5>Certification:</h5>") + + If D > 0 Then + W = HTML.IndexOf("</div>", D) + Dim rCert As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN_3) + + If rCert.Count > 0 Then + Dim Cert = From M In rCert Select N = String.Format("{0}:{1}", DirectCast(M, Match).Groups(1).ToString.Trim, DirectCast(M, Match).Groups(2).ToString.Trim) Order By N Descending Where N.Contains(Master.eSettings.CertificationLang) + + If Not String.IsNullOrEmpty(Master.eSettings.CertificationLang) Then + If Cert.Count > 0 Then + IMDBMovie.Certification = Cert(0).ToString.Replace("West", String.Empty).Trim + If Options.bMPAA AndAlso Master.eSettings.UseCertForMPAA AndAlso (Not Master.eSettings.CertificationLang = "USA" OrElse (Master.eSettings.CertificationLang = "USA" AndAlso String.IsNullOrEmpty(IMDBMovie.MPAA))) Then + IMDBMovie.MPAA = If(Master.eSettings.CertificationLang = "USA", StringUtils.USACertToMPAA(IMDBMovie.Certification), If(Master.eSettings.OnlyValueForCert, IMDBMovie.Certification.Split(Convert.ToChar(":"))(1), IMDBMovie.Certification)) + End If + + + Else + 'No FSK Rating was found -> Alternative: Set USA Rating instead as fallback, MPAA will be converted to FSK, Certification from USA will be used, so people can see that US info was used! + If Master.eSettings.UseMPAAForFSK Then + Try + If Master.eSettings.CertificationLang = "Germany" AndAlso (IMDBMovie.MPAA.ToLower.Contains("usa") Or IMDBMovie.MPAA.ToLower.Contains("rated")) Then + Dim LANGRATING As String = "USA" + Dim Cert2 = From M In rCert Select N = String.Format("{0}:{1}", DirectCast(M, Match).Groups(1).ToString.Trim, DirectCast(M, Match).Groups(2).ToString.Trim) Order By N Descending Where N.Contains(LANGRATING) + If Cert2.Count > 0 Then + IMDBMovie.Certification = Cert2(0).ToString.Replace("West", String.Empty).Trim + If Options.bMPAA AndAlso Master.eSettings.UseCertForMPAA Then + If IMDBMovie.MPAA.ToLower.Contains("usa:g") Or IMDBMovie.MPAA.ToLower.Contains("rated g") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:0" + Else + IMDBMovie.MPAA = "0" + End If + + ElseIf IMDBMovie.MPAA.ToLower.Contains("usa:pg-13") Or IMDBMovie.MPAA.ToLower.Contains("rated pg-13") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:16" + Else + IMDBMovie.MPAA = "16" + End If + + ElseIf IMDBMovie.MPAA.ToLower.Contains("usa:pg") Or IMDBMovie.MPAA.ToLower.Contains("rated pg") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:12" + Else + IMDBMovie.MPAA = "12" + End If + + ElseIf IMDBMovie.Certification.ToLower.Contains("usa:r") Or IMDBMovie.Certification.ToLower.Contains("rated r") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:18" + Else + IMDBMovie.MPAA = "18" + End If + + ElseIf IMDBMovie.Certification.ToLower.Contains("usa:nc-17") Or IMDBMovie.Certification.ToLower.Contains("rated nc") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:18" + Else + IMDBMovie.MPAA = "18" + End If + + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End If + End If + + + Else + + IMDBMovie.Certification = Strings.Join(Cert.ToArray, " / ").Trim + + + End If + End If + End If + + If String.IsNullOrEmpty(IMDBMovie.Certification) AndAlso Not String.IsNullOrEmpty(IMDBMovie.MPAA) Then + IMDBMovie.Certification = IMDBMovie.MPAA + End If + + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bRelease Then + Dim RelDate As Date + Dim sRelDate As String = Regex.Match(HTML, "\d+\s\w+\s\d\d\d\d\s").ToString.Trim + If Not sRelDate = String.Empty Then + If Date.TryParse(sRelDate, RelDate) Then + IMDBMovie.ReleaseDate = Strings.FormatDateTime(RelDate, DateFormat.ShortDate).ToString + End If + Else + IMDBMovie.ReleaseDate = Nothing + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bRating AndAlso (String.IsNullOrEmpty(IMDBMovie.Rating) OrElse Not Master.eSettings.LockRating) Then + Dim RegexRating As String = Regex.Match(HTML, "\b\d\W\d/\d\d").ToString + If String.IsNullOrEmpty(RegexRating) Then + IMDBMovie.Rating = String.Empty + Else + IMDBMovie.Rating = RegexRating.Split(Convert.ToChar("/")).First.Trim + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'trailer + If Options.bTrailer AndAlso (String.IsNullOrEmpty(IMDBMovie.Trailer) OrElse Not Master.eSettings.LockTrailer) Then + 'Get first IMDB trailer if possible + Dim trailers As List(Of String) = GetTrailers(IMDBMovie.IMDBID) + 'Dim TMDB As New TMDB.Scraper + 'Dim YT As String = TMDB.GetTrailers(IMDBMovie.IMDBID) + + 'Dim sTrailerUrl As String = Regex.Match(HTML, "href=""(.*?/video/imdb/vi.*?)""").Groups(1).Value.Trim + 'If Not sTrailerUrl = String.Empty Then + 'Dim sTrailerURL2 As String = String.Empty + 'sTrailerUrl = String.Concat("http://", IMDBURL, sTrailerUrl, "player") + 'Dim HTTPTrailer As New HTTP + 'Dim HtmlTrailer As String = HTTPTrailer.DownloadData(sTrailerUrl) + 'HTTPTrailer = Nothing + + 'sTrailerUrl = Regex.Match(HtmlTrailer, "so.addVariable\(""id"", ""(.*?)""\);").Groups(1).Value.Trim + 'If sTrailerUrl = String.Empty Then + 'sTrailerURL2 = Regex.Match(HtmlTrailer, "so.addVariable\(""file"", ""(.*?)""\);").Groups(1).Value.Trim + 'Else + 'sTrailerURL2 = String.Concat(Regex.Match(HtmlTrailer, "so.addVariable\(""file"", ""(.*?)""\);").Groups(1).Value.Trim, sTrailerUrl) + 'End If + 'IMDBMovie.Trailer = Web.HttpUtility.UrlDecode(sTrailerURL2) + 'End If + IMDBMovie.Trailer = trailers.FirstOrDefault() + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bVotes Then IMDBMovie.Votes = Regex.Match(HTML, "class=""tn15more"">([0-9,]+) votes</a>").Groups(1).Value.Trim + + 'Top250 + 'ie: <a href="/chart/top?tt0167260">Top 250: #13</a> + If Options.bTop250 Then IMDBMovie.Top250 = Regex.Match(HTML, String.Concat("/chart/top\?tt", IMDBMovie.IMDBID, """>Top 250: #([0-9]+)</a>")).Groups(1).Value.Trim + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bCast Then + 'Find all cast of the movie + 'Match the table only 1 time + Dim ActorsTable As String = Regex.Match(HTML, ACTORTABLE_PATTERN).ToString + Dim ThumbsSize = AdvancedSettings.GetSetting("ActorThumbsSize", "SY275_SX400") + + Dim rCast As MatchCollection = Regex.Matches(ActorsTable, TR_PATTERN) + + Dim Cast1 = From M In rCast _ + Let m1 = Regex.Match(Regex.Match(M.ToString, TD_PATTERN_1).ToString, HREF_PATTERN) _ + Let m2 = Regex.Match(M.ToString, TD_PATTERN_2).ToString _ + Let m3 = Regex.Match(Regex.Match(M.ToString, TD_PATTERN_3).ToString, IMG_PATTERN) _ + Select New MediaContainers.Person(Web.HttpUtility.HtmlDecode(m1.Groups("name").ToString.Trim), _ + Web.HttpUtility.HtmlDecode(m2.ToString.Trim), _ + If(m3.Groups("thumb").ToString.IndexOf("addtiny") > 0 OrElse m3.Groups("thumb").ToString.IndexOf("no_photo") > 0, String.Empty, Strings.Replace(Web.HttpUtility.HtmlDecode(m3.Groups("thumb").ToString.Trim), _ + "._SX23_SY30_.jpg", String.Concat("._", ThumbsSize, "_.jpg")))) Take If(Master.eSettings.ActorLimit > 0, Master.eSettings.ActorLimit, 999999) + + If Master.eSettings.CastImagesOnly Then + Cast1 = Cast1.Where(Function(p As MediaContainers.Person) (Not String.IsNullOrEmpty(p.Thumb))) + End If + + Dim Cast As List(Of MediaContainers.Person) = Cast1.ToList + + 'Clean up the actors list + For Each Ps As MediaContainers.Person In Cast + For Each sMatch As Match In Regex.Matches(Ps.Role, HREF_PATTERN) + Ps.Role = Ps.Role.Replace(sMatch.Value, sMatch.Groups("name").Value.ToString.Trim) + Next + ' Dim a_patterRegex = Regex.Match(Ps.Role, HREF_PATTERN) + ' If a_patterRegex.Success Then Ps.Role = a_patterRegex.Groups("name").ToString.Trim + Next + + IMDBMovie.Actors = Cast + End If + + If bwIMDB.CancellationPending Then Return Nothing + + D = 0 : W = 0 + + If Options.bTagline AndAlso (String.IsNullOrEmpty(IMDBMovie.Tagline) OrElse Not Master.eSettings.LockTagline) Then + + tempD = If(HTML.IndexOf("<h5>Tagline:</h5>") > 0, HTML.IndexOf("<h5>Tagline:</h5>"), 0) + + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + + Dim lHtmlIndexOf As Integer = If(D > 0, HTML.IndexOf("<a class=""tn15more inline""", D), 0) + Dim TagLineEnd As Integer = If(lHtmlIndexOf > 0, lHtmlIndexOf, 0) + If D > 0 Then W = If(TagLineEnd > 0, TagLineEnd, HTML.IndexOf("</div>", D)) + + IMDBMovie.Tagline = If(D > 0 AndAlso W > 0, Web.HttpUtility.HtmlDecode(HTML.Substring(D, W - D).Replace("<h5>Tagline:</h5>", String.Empty).Split(vbCrLf.ToCharArray)(1)).Trim, String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bDirector Then + 'Get the directors + D = If(HTML.IndexOf("<h5>Director:</h5>") > 0, HTML.IndexOf("<h5>Director:</h5>"), HTML.IndexOf("<h5>Directors:</h5>")) + W = If(D > 0, HTML.IndexOf("</div>", D), 0) + 'got any director(s) ? + If D > 0 AndAlso Not W <= 0 Then + 'get only the first director's name + Dim rDir As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + Dim Dir = From M In rDir Where Not DirectCast(M, Match).Groups("name").ToString.Contains("more") _ + Select Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + + If Dir.Count > 0 Then + IMDBMovie.Director = Strings.Join(Dir.ToArray, " / ").Trim + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get countries of the movie + If Options.bCountry Then + 'Get the countries + D = If(HTML.IndexOf("<h5>Country:</h5>") > 0, HTML.IndexOf("<h5>Country:</h5>"), HTML.IndexOf("<h5>Countries:</h5>")) + W = If(D > 0, HTML.IndexOf("</div>", D), 0) + 'got any country ? + If D > 0 AndAlso Not W <= 0 Then + 'get only the first country's name + Dim rCou As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + Dim Cou = From M In rCou Where Not DirectCast(M, Match).Groups("name").ToString.Contains("more") _ + Select Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + + If Cou.Count > 0 Then + + 'fix for display country flag in XBMC! + If Strings.Join(Cou.ToArray, " / ").Trim.ToUpper.Contains("USA") Then + IMDBMovie.Country = "United States of America" + ElseIf Strings.Join(Cou.ToArray, " / ").Trim.ToUpper.Contains("UK") Then + IMDBMovie.Country = "United Kingdom" + Else + IMDBMovie.Country = Strings.Join(Cou.ToArray, " / ").Trim() + End If + + End If + End If + + + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get genres of the movie + If Options.bGenre AndAlso (String.IsNullOrEmpty(IMDBMovie.Genre) OrElse Not Master.eSettings.LockGenre) Then + If Not String.IsNullOrEmpty(ofdbGenre) Then + IMDBMovie.Genre = ofdbGenre + Else + D = 0 : W = 0 + D = HTML.IndexOf("<h5>Genre:</h5>") + 'Check if doesnt find genres + If D > 0 Then + W = HTML.IndexOf("</div>", D) + + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) Where Not N.Contains("more") Take If(Master.eSettings.GenreLimit > 0, Master.eSettings.GenreLimit, 999999) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + tGenre = StringUtils.GenreFilter(tGenre) + If Not String.IsNullOrEmpty(tGenre) Then + IMDBMovie.Genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bOutline AndAlso (String.IsNullOrEmpty(IMDBMovie.Outline) OrElse Not Master.eSettings.LockOutline) Then + + If Not String.IsNullOrEmpty(ofdbOutline) Then + IMDBMovie.Outline = ofdbOutline + Else + 'Get the Plot Outline + D = 0 : W = 0 + + Try + If IMDBMovie.Title.Contains("(VG)") Then + D = If(HTML.IndexOf("<h5>Plot Summary:</h5>") > 0, HTML.IndexOf("<h5>Plot Summary:</h5>"), HTML.IndexOf("<h5>Tagline:</h5>")) + If D > 0 Then W = HTML.IndexOf("</div>", D) + Else + tempD = If(HTML.IndexOf("<h5>Plot:</h5>") > 0, HTML.IndexOf("<h5>Plot:</h5>"), HTML.IndexOf("<h5>Plot Summary:</h5>")) + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + If D <= 0 Then D = HTML.IndexOf("<h5>Plot Synopsis:</h5>") + If D > 0 Then + W = HTML.IndexOf("<a class=", D) + If W > 0 Then + W = HTML.IndexOf("</div>", D) + Else + IMDBMovie.Outline = String.Empty + GoTo mplot + End If + Else + IMDBMovie.Outline = String.Empty + GoTo mPlot 'This plot synopsis is empty + End If + End If + Dim PlotOutline As String = HTML.Substring(D, W - D).Remove(0, 26) + + PlotOutline = Web.HttpUtility.HtmlDecode(If(PlotOutline.Contains("is empty") OrElse PlotOutline.Contains("View full synopsis") _ + , String.Empty, PlotOutline.Replace("|", String.Empty).Replace("»", String.Empty)).Trim) + 'check if outline has links to other IMDB entry + If Not String.IsNullOrEmpty(PlotOutline) Then + For Each rMatch As Match In Regex.Matches(PlotOutline, HREF_PATTERN_4) + PlotOutline = PlotOutline.Replace(rMatch.Value, rMatch.Groups("text").Value.Trim) + Next + IMDBMovie.Outline = Regex.Replace(PlotOutline, HREF_PATTERN, String.Empty).Trim + Else + IMDBMovie.Outline = String.Empty + End If + + Catch ex As Exception + IMDBMovie.Outline = String.Empty + End Try + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + +mPlot: + 'Get the full Plot + If Options.bPlot AndAlso (String.IsNullOrEmpty(IMDBMovie.Plot) OrElse Not Master.eSettings.LockPlot) Then + If Not String.IsNullOrEmpty(ofdbPlot) Then + IMDBMovie.Plot = ofdbPlot + Else + Dim FullPlotP As String = Regex.Match(PlotHtml, "<p class=.plotpar.>(.*?)</p>", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline).Groups(1).Value.ToString.Trim + Dim FullPlotI As String = Regex.Match(PlotHtml, "<p class=.plotpar.>(.*?)<i>", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline).Groups(1).Value.ToString.Trim + Dim FullPlot As String = If(FullPlotI.Length < FullPlotP.Length, FullPlotI, FullPlotP) + If Not String.IsNullOrEmpty(FullPlot) Then + For Each rMatch As Match In Regex.Matches(FullPlot, HREF_PATTERN_4) + FullPlot = FullPlot.Replace(rMatch.Value, rMatch.Groups("text").Value.Trim) + Next + IMDBMovie.Plot = Web.HttpUtility.HtmlDecode(FullPlot.Replace("|", String.Empty)).Trim + End If + + End If + + If Master.eSettings.OutlineForPlot AndAlso String.IsNullOrEmpty(IMDBMovie.Plot) AndAlso Not String.IsNullOrEmpty(IMDBMovie.Outline) Then + IMDBMovie.Plot = IMDBMovie.Outline + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get the movie duration + If Options.bRuntime Then IMDBMovie.Runtime = Web.HttpUtility.HtmlDecode(Regex.Match(HTML, "<h5>Runtime:</h5>[^0-9]*([^<]*)").Groups(1).Value.Trim) + + 'Get Production Studio + If Options.bStudio AndAlso (String.IsNullOrEmpty(IMDBMovie.Studio) OrElse Not Master.eSettings.LockStudio) Then + D = 0 : W = 0 + If FullCrew Then + D = HTML.IndexOf("<b class=""blackcatheader"">Production Companies</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + 'only get the first one + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(P1, Match).Groups("name").ToString = String.Empty _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) Take 1 + IMDBMovie.Studio = Ps(0).ToString.Trim + End If + Else + D = HTML.IndexOf("<h5>Company:</h5>") + If D > 0 Then W = HTML.IndexOf("</div>", D) + If D > 0 AndAlso W > 0 Then + IMDBMovie.Studio = Web.HttpUtility.HtmlDecode(Regex.Match(HTML.Substring(D, W - D), HREF_PATTERN).Groups("name").ToString.Trim) + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get Writers + If Options.bWriters Then + D = 0 : W = 0 + D = HTML.IndexOf("<h5>Writer") + If D > 0 Then W = HTML.IndexOf("</div>", D) + If D > 0 AndAlso W > 0 Then + Dim q = From M In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(M, Match).Groups("name").ToString.Trim = "more" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim = "(more)" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim = "WGA" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim.Contains("see more") _ + Select Writer = Web.HttpUtility.HtmlDecode(String.Concat(DirectCast(M, Match).Groups("name").ToString, If(FullCrew, " (writer)", String.Empty))) + + If q.Count > 0 Then + IMDBMovie.OldCredits = Strings.Join(q.ToArray, " / ").Trim + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get All Other Info + If FullCrew Then + + D = 0 : W = 0 + D = HTML.IndexOf("Directed by</a></h5>") + If D > 0 Then W = HTML.IndexOf("</body>", D) + If D > 0 AndAlso W > 0 Then + Dim qTables As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), TABLE_PATTERN) + + For Each M As Match In qTables + + If bwIMDB.CancellationPending Then Return Nothing + + 'Producers + If Options.bProducers AndAlso M.ToString.Contains("Produced by</a></h5>") Then + Dim Pr = From Po In Regex.Matches(M.ToString, "<td\svalign=""top"">(.*?)</td>") _ + Where Not Po.ToString.Contains(String.Concat("http://", IMDBURL, "/Glossary/")) _ + Let P1 = Regex.Match(Po.ToString, HREF_PATTERN_2) _ + Where Not String.IsNullOrEmpty(P1.Groups("name").ToString) _ + Select Producer = Web.HttpUtility.HtmlDecode(String.Concat(P1.Groups("name").ToString, " (producer)")) + + If Pr.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Pr.ToArray, " / ").Trim) + End If + End If + + 'Music by + If Options.bMusicBy AndAlso M.ToString.Contains("Original Music by</a></h5>") Then + Dim Mu = From Mo In Regex.Matches(M.ToString, "<td\svalign=""top"">(.*?)</td>") _ + Let M1 = Regex.Match(Mo.ToString, HREF_PATTERN) _ + Where Not String.IsNullOrEmpty(M1.Groups("name").ToString) _ + Select Musician = Web.HttpUtility.HtmlDecode(String.Concat(M1.Groups("name").ToString, " (music by)")) + + If Mu.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Mu.ToArray, " / ").Trim) + End If + End If + + Next + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Special Effects + If Options.bOtherCrew Then + D = HTML.IndexOf("<b class=""blackcatheader"">Special Effects</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not String.IsNullOrEmpty(DirectCast(P1, Match).Groups("name").ToString) _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) + If Ps.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Ps.ToArray, " / ").Trim) + End If + End If + End If + End If + + Return True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Function GetMovieStudios(ByVal strID As String) As List(Of String) + Dim alStudio As New List(Of String) + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/combined")) + sHTTP = Nothing + + Dim D, W As Integer + + D = HTML.IndexOf("<b class=""blackcatheader"">Production Companies</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(P1, Match).Groups("name").ToString = String.Empty _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) + alStudio.AddRange(Ps.ToArray) + End If + + Return alStudio + End Function + + Public Function GetSearchMovieInfo(ByVal sMovieName As String, ByRef dbMovie As Structures.DBMovie, ByVal iType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As MediaContainers.Movie + Dim r As MovieSearchResults = SearchMovie(sMovieName) + Dim b As Boolean = False + Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie + + 'r.PopularTitles.Sort() + 'r.ExactMatches.Sort() + 'r.PartialMatches.Sort() + + Try + Select Case iType + Case Enums.ScrapeType.FullAsk, Enums.ScrapeType.UpdateAsk, Enums.ScrapeType.NewAsk, Enums.ScrapeType.MarkAsk, Enums.ScrapeType.FilterAsk + + If r.ExactMatches.Count = 1 Then 'AndAlso r.PopularTitles.Count = 0 AndAlso r.PartialMatches.Count = 0 Then 'redirected to imdb info page + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count = 1 AndAlso r.PopularTitles(0).Lev <= 5 Then + b = GetMovieInfo(r.PopularTitles.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.ExactMatches.Count = 1 AndAlso r.ExactMatches(0).Lev <= 5 Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + Master.tmpMovie.Clear() + Using dIMDB As New dlgIMDBSearchResults + dIMDB.IMDBURL = IMDBURL + If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + b = False + Else + b = GetMovieInfo(Master.tmpMovie.IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + Else + b = False + End If + End Using + End If + Case Enums.ScrapeType.FullAuto, Enums.ScrapeType.UpdateAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.SingleScrape, Enums.ScrapeType.FilterAuto + + 'check if ALL results are over lev value + Dim useAnyway As Boolean = False + If ((r.PopularTitles.Count > 0 AndAlso r.PopularTitles(0).Lev > 5) OrElse r.PopularTitles.Count = 0) AndAlso _ + ((r.ExactMatches.Count > 0 AndAlso r.ExactMatches(0).Lev > 5) OrElse r.ExactMatches.Count = 0) AndAlso _ + ((r.PartialMatches.Count > 0 AndAlso r.PartialMatches(0).Lev > 5) OrElse r.PartialMatches.Count = 0) Then + useAnyway = True + End If + Dim exactHaveYear As Integer = FindYear(dbMovie.Filename, r.ExactMatches) + Dim popularHaveYear As Integer = FindYear(dbMovie.Filename, r.PopularTitles) + 'it seems "popular matches" is a better result than "exact matches" ..... nope + 'If r.ExactMatches.Count = 1 AndAlso r.PopularTitles.Count = 0 AndAlso r.PartialMatches.Count = 0 Then 'redirected to imdb info page + ' b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf (popularHaveYear >= 0 OrElse exactHaveYear = -1) AndAlso r.PopularTitles.Count > 0 AndAlso (r.PopularTitles(If(popularHaveYear >= 0, popularHaveYear, 0)).Lev <= 5 OrElse useAnyway) Then + ' b = GetMovieInfo(r.PopularTitles.Item(If(popularHaveYear >= 0, popularHaveYear, 0)).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf r.ExactMatches.Count > 0 AndAlso (r.ExactMatches(If(exactHaveYear >= 0, exactHaveYear, 0)).Lev <= 5 OrElse useAnyway) Then + ' b = GetMovieInfo(r.ExactMatches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf r.PartialMatches.Count > 0 Then + ' b = GetMovieInfo(r.PartialMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'End If + If r.ExactMatches.Count = 1 Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.ExactMatches.Count > 1 AndAlso exactHaveYear >= 0 Then + b = GetMovieInfo(r.ExactMatches.Item(exactHaveYear).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count > 0 AndAlso popularHaveYear >= 0 Then + b = GetMovieInfo(r.PopularTitles.Item(popularHaveYear).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCrew, False, Options, True) + ElseIf r.ExactMatches.Count > 0 AndAlso (r.ExactMatches(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count > 0 AndAlso (r.PopularTitles(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.PopularTitles.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PartialMatches.Count > 0 AndAlso (r.PartialMatches(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.PartialMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + End Select + + If b Then + Return imdbMovie + Else + Return New MediaContainers.Movie + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New MediaContainers.Movie + End Try + End Function + + Private Function FindYear(ByVal tmpname As String, ByVal lst As List(Of MediaContainers.Movie)) As Integer + Dim tmpyear As String = "" + Dim i As Integer + Dim ret As Integer = -1 + tmpname = Path.GetFileNameWithoutExtension(tmpname) + tmpname = tmpname.Replace(".", " ").Trim.Replace("(", " ").Replace(")", "").Trim + i = tmpname.LastIndexOf(" ") + If i >= 0 Then + tmpyear = tmpname.Substring(i + 1, tmpname.Length - i - 1) + If IsNumeric(tmpyear) AndAlso Convert.ToInt32(tmpyear) > 1950 Then 'let's assume there are no movies older then 1950 + For c = 0 To lst.Count - 1 + If lst(c).Year = tmpyear Then + ret = c + Exit For + End If + Next + End If + End If + Return ret + End Function + + Public Sub GetSearchMovieInfoAsync(ByVal imdbID As String, ByVal IMDBMovie As MediaContainers.Movie, ByVal Options As Structures.ScrapeOptions) + Try + If Not bwIMDB.IsBusy Then + bwIMDB.WorkerReportsProgress = False + bwIMDB.WorkerSupportsCancellation = True + bwIMDB.RunWorkerAsync(New Arguments With {.Search = SearchType.SearchDetails, _ + .Parameter = imdbID, .IMDBMovie = IMDBMovie, .Options = Options}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + + Public Sub SearchMovieAsync(ByVal sMovie As String, ByVal filterOptions As Structures.ScrapeOptions) + Try + If Not bwIMDB.IsBusy Then + bwIMDB.WorkerReportsProgress = False + bwIMDB.WorkerSupportsCancellation = True + bwIMDB.RunWorkerAsync(New Arguments With {.Search = SearchType.Movies, .Parameter = sMovie, .Options = filterOptions}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + Try + Select Case Args.Search + Case SearchType.Movies + Dim r As MovieSearchResults = SearchMovie(Args.Parameter) + e.Result = New Results With {.ResultType = SearchType.Movies, .Result = r} + Case SearchType.SearchDetails + Dim s As Boolean = GetMovieInfo(Args.Parameter, Args.IMDBMovie, False, False, True, Args.Options, True) + e.Result = New Results With {.ResultType = SearchType.SearchDetails, .Success = s} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub BW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDB.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.ResultType + Case SearchType.Movies + RaiseEvent SearchResultsDownloaded(DirectCast(Res.Result, MovieSearchResults)) + Case SearchType.SearchDetails + Dim movieInfo As MovieSearchResults = DirectCast(Res.Result, MovieSearchResults) + RaiseEvent SearchMovieInfoDownloaded(sPoster, Res.Success) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Function GetForcedTitle(ByVal strID As String, ByVal oTitle As String) As String + Dim fTitle As String = oTitle + + Try + If bwIMDB.CancellationPending Then Return Nothing + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/releaseinfo#akas")) + sHTTP = Nothing + + Dim D, W As Integer + + D = HTML.IndexOf("<h5><a name=""akas"">Also Known As (AKA)</a></h5>") + + If D > 0 Then + W = HTML.IndexOf("</table>", D) + Dim rTitles As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), TD_PATTERN_4, RegexOptions.Multiline Or RegexOptions.IgnorePatternWhitespace) + + If rTitles.Count > 0 Then + For i As Integer = 1 To rTitles.Count - 1 Step 2 + If rTitles(i).Value.ToString.Contains(Master.eSettings.ForceTitle) AndAlso Not rTitles(i).Value.ToString.Contains(String.Concat(Master.eSettings.ForceTitle, " (working title)")) AndAlso Not rTitles(i).Value.ToString.Contains(String.Concat(Master.eSettings.ForceTitle, " (fake working title)")) Then + fTitle = CleanTitle(Web.HttpUtility.HtmlDecode(rTitles(i - 1).Groups("title").Value.ToString.Trim)) + Exit For + End If + Next + End If + + End If + + Return fTitle + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return fTitle + End Try + End Function + + Private Function GetMovieID(ByVal strObj As String) As String + Return Regex.Match(strObj, IMDB_ID_REGEX).ToString.Replace("tt", String.Empty) + End Function + + Private Function SearchMovie(ByVal sMovie As String) As MovieSearchResults + Try + + Dim D, W As Integer + Dim R As New MovieSearchResults + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft")) + Dim HTMLp As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&ref_=fn_tt_pop")) + Dim HTMLm As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&ref_=fn_ft")) + Dim HTMLe As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&exact=true&ref_=fn_tt_ex")) + Dim rUri As String = sHTTP.ResponseUri + sHTTP = Nothing + + 'Check if we've been redirected straight to the movie page + If Regex.IsMatch(rUri, IMDB_ID_REGEX) Then + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(Regex.Match(rUri, IMDB_ID_REGEX).ToString, _ + StringUtils.ProperCase(sMovie), Regex.Match(Regex.Match(HTML, MOVIE_TITLE_PATTERN).ToString, "(?<=\()\d+(?=.*\))").ToString, 0) + R.ExactMatches.Add(lNewMovie) + Return R + End If + + 'popular titles + D = HTMLp.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mPartial + W = HTMLp.IndexOf("</table>", D) + 8 + + Dim Table As String = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString + + Dim qPopular = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.PopularTitles = qPopular.ToList +mPartial: + + D = HTMLm.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mExact + W = HTMLm.IndexOf("</table>", D) + 8 + + Table = Regex.Match(HTMLm.Substring(D, W - D), TABLE_PATTERN).ToString + Dim qpartial = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.PartialMatches = qpartial.ToList + 'mApprox: + + ' 'Now process "Approx Matches" and merge both Partial and Approx matches + ' D = HTML.IndexOf("Titles (Approx Matches)") + ' If D <= 0 Then GoTo mExact + ' W = HTML.IndexOf("</table>", D) + 8 + + ' Table = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString + + ' Dim qApprox = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + ' Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + ' Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + ' Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + ' If Not IsNothing(R.PartialMatches) Then + ' R.PartialMatches = R.PartialMatches.Union(qApprox.ToList).ToList + ' Else + ' R.PartialMatches = qApprox.ToList + ' End If + +mExact: + + D = HTMLe.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mResult + W = HTMLe.IndexOf("</table>", D) + 8 + + Table = String.Empty + Table = Regex.Match(HTMLe.Substring(D, W - D), TABLE_PATTERN).ToString + + Dim qExact = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString.ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.ExactMatches = qExact.ToList + +mResult: + Return R + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Nothing + End Try + End Function + + Public Function GetTrailers(imdbID As String) As List(Of String) + Dim TrailerList As New List(Of String) + Dim TrailerNumber As Integer = 0 + Dim Links As MatchCollection + Dim trailerPage As String + Dim trailerUrl As String + Dim Link As Match + Dim currPage As Integer = 0 + + Dim WebPage As New HTTP + Dim _ImdbTrailerPage As String = String.Empty + + _ImdbTrailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", imdbID, "/videogallery/content_type-Trailer")) + If _ImdbTrailerPage.ToLower.Contains("page not found") Then + _ImdbTrailerPage = String.Empty + End If + + If Not String.IsNullOrEmpty(_ImdbTrailerPage) Then + Link = Regex.Match(_ImdbTrailerPage, "of [0-9]{1,3}") + + If Link.Success Then + TrailerNumber = Convert.ToInt32(Link.Value.Substring(3)) + + If TrailerNumber > 0 Then + currPage = Convert.ToInt32(Math.Ceiling(TrailerNumber / 10)) + + For i As Integer = 1 To currPage + If Not i = 1 Then + _ImdbTrailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", imdbID, "/videogallery/content_type-Trailer?page=", i)) + End If + + Links = Regex.Matches(_ImdbTrailerPage, "screenplay/(vi[0-9]+)/") + Dim linksCollection As String() = From m As Object In Links Select CType(m, Match).Value Distinct.ToArray() + + Links = Regex.Matches(_ImdbTrailerPage, "imdb/(vi[0-9]+)/") + linksCollection = linksCollection.Concat(From m As Object In Links Select CType(m, Match).Value Distinct.ToArray()).ToArray + + For Each value As String In linksCollection + If value.Contains("screenplay") Then + trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player")) + trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + TrailerList.Add(trailerUrl) + End If + Else + ''480p Trailer + 'trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player?uff=2")) + 'trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + 'If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + ' Me._TrailerList.Add(trailerUrl) + 'End If + + ''720p Trailer + 'trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player?uff=3")) + 'trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + 'If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + ' Me._TrailerList.Add(trailerUrl) + 'End If + End If + Next + Next + End If + End If + End If + Return TrailerList + End Function + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim FullCast As Boolean + Dim FullCrew As Boolean + Dim IMDBMovie As MediaContainers.Movie + Dim Options As Structures.ScrapeOptions + Dim Parameter As String + Dim Search As SearchType + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultType As SearchType + Dim Success As Boolean + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMDB.Data/Scraper/clsScrapeIMPA.vb b/Addons/scraper.IMDB.Data/Scraper/clsScrapeIMPA.vb new file mode 100644 index 0000000..5f052ed --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/clsScrapeIMPA.vb @@ -0,0 +1,179 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMPA + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwIMPA As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwIMPA.IsBusy Then Me.bwIMPA.CancelAsync() + + While Me.bwIMPA.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMPA.IsBusy Then + bwIMPA.WorkerSupportsCancellation = True + bwIMPA.WorkerReportsProgress = True + bwIMPA.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMPAPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMPA.CancellationPending Then Return Nothing + Dim sURL As String = GetLink(imdbID) + + If Not String.IsNullOrEmpty(sURL) Then + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If bwIMPA.CancellationPending Then Return Nothing + + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + + Dim PosterURL As String + + For Each mPoster As Match In mcPoster + If bwIMPA.CancellationPending Then Return Nothing + PosterURL = Strings.Replace(String.Format("{0}/{1}", sURL.Substring(0, sURL.LastIndexOf("/")), mPoster.Value.ToString()).Replace("thumbs", "posters"), "imp_", String.Empty) + + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + + PosterURL = PosterURL.Insert(PosterURL.LastIndexOf("."), "_xlg") + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = PosterURL}) + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMPA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPA.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMPAPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMPA_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPA.ProgressChanged + If Not bwIMPA.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMPA_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPA.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + Private Function GetLink(ByVal IMDBID As String) As String + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) + sHTTP = Nothing + + Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") + If mcIMPA.Count > 0 Then + 'just use the first one if more are found + Return mcIMPA(0).Value.ToString + Else + Return String.Empty + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return String.Empty + End Try + End Function + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + Dim sType As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMDB.Data/Scraper/clsScrapeImages.vb b/Addons/scraper.IMDB.Data/Scraper/clsScrapeImages.vb new file mode 100644 index 0000000..7bdb821 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/clsScrapeImages.vb @@ -0,0 +1,940 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class ScrapeImages + +#Region "Methods" + + Public Shared Function GetPreferredImage(ByRef Image As Images, ByVal IMDBID As String, ByVal iType As Enums.ImageType, ByRef imgResult As Containers.ImgResult, ByVal sPath As String, ByVal doETs As Boolean, Optional ByVal doAsk As Boolean = False) As Boolean + '// + ' Try to get the best match between what the user selected in settings and the actual posters downloaded + '\\ + + Dim hasImages As Boolean = False + Dim TMDB As New TMDB.Scraper + Dim IMPA As New IMPA.Scraper + Dim MPDB As New MPDB.Scraper + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim tmpListIMPA As New List(Of MediaContainers.Image) + Dim tmpListMPDB As New List(Of MediaContainers.Image) + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) + + Try + + If iType = Enums.ImageType.Posters Then 'posters + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tImage.URL) + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + tmpListTMDB.AddRange(TMDB.GetTMDBImages(IMDBID, "poster")) + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + tmpListTMDB.AddRange(IMPA.GetIMPAPosters(IMDBID)) + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + tmpListTMDB.AddRange(MPDB.GetMPDBPosters(IMDBID)) + End If + + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) + If Not IsNothing(tmdbThumb.WebImage.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) + End If + Image.Clear() + Next + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + End If + Else + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + 'download all TMBD images + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "poster") + + 'check each one for it's size to see if it matched the preferred size + If tmpListTMDB.Count > 0 Then + hasImages = True + + If Not Master.eSettings.NoSaveImagesToNfo Then + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + imgResult.Posters.Add(tmdbThumb.URL) + Next + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Xlrg + If iMovie.Description.ToLower = "original" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Lrg + If iMovie.Description.ToLower = "mid" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Mid + If iMovie.Description.ToLower = "cover" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Small + If iMovie.Description.ToLower = "thumb" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + 'no "wide" for TMDB + End Select + Image.Clear() + Next + End If + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB found... try IMPA + + tmpListIMPA = IMPA.GetIMPAPosters(IMDBID) + + If tmpListIMPA.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMPA + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMPAX) Then + tmpIMPAX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMPAL) Then + tmpIMPAL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMPAM) Then + tmpIMPAM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMPAS) Then + tmpIMPAS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMPAW) Then + tmpIMPAW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB or IMPA found... try MPDB + + tmpListMPDB = MPDB.GetMPDBPosters(IMDBID) + + If tmpListMPDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListMPDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpMPDBX) Then + tmpMPDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpMPDBL) Then + tmpMPDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpMPDBM) Then + tmpMPDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpMPDBS) Then + tmpMPDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpMPDBW) Then + tmpMPDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If IsNothing(Image.Image) AndAlso Not doAsk Then + 'STILL no image found, just get the first available image, starting with the largest + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + 'check TMDB first + If tmpListTMDB.Count > 0 Then + Dim x = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If x.Count > 0 Then + Image.FromWeb(x(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "cover" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + End If + End If + + Image.Clear() + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + If tmpListIMPA.Count > 0 Then + If Not IsNothing(tmpIMPAX) Then + Image = tmpIMPAX + GoTo foundIT + End If + If Not IsNothing(tmpIMPAL) Then + Image = tmpIMPAL + GoTo foundIT + End If + If Not IsNothing(tmpIMPAM) Then + Image = tmpIMPAM + GoTo foundIT + End If + If Not IsNothing(tmpIMPAS) Then + Image = tmpIMPAS + GoTo foundIT + End If + If Not IsNothing(tmpIMPAW) Then + Image = tmpIMPAW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + If tmpListMPDB.Count > 0 Then + If Not IsNothing(tmpMPDBX) Then + Image = tmpMPDBX + GoTo foundIT + End If + If Not IsNothing(tmpMPDBL) Then + Image = tmpMPDBL + GoTo foundIT + End If + If Not IsNothing(tmpMPDBM) Then + Image = tmpMPDBM + GoTo foundIT + End If + If Not IsNothing(tmpMPDBS) Then + Image = tmpMPDBS + GoTo foundIT + End If + If Not IsNothing(tmpMPDBW) Then + Image = tmpMPDBW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + End If + + End If + + Else 'fanart + + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + + Dim ETHashes As New List(Of String) + If Master.eSettings.AutoET AndAlso doETs Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + End If + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + Image.Clear() + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + +foundIT: + TMDB = Nothing + IMPA = Nothing + MPDB = Nothing + tmpListTMDB = Nothing + tmpListIMPA = Nothing + tmpListMPDB = Nothing + Return hasImages + End Function + + Public Shared Sub GetPreferredFAasET(ByVal IMDBID As String, ByVal sPath As String) + Dim _Image As Image + Dim TMDB As New TMDB.Scraper + Dim IMPA As New IMPA.Scraper + Dim MPDB As New MPDB.Scraper + + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim ETHashes As New List(Of String) + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, "fanart") + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + For Each sFile As FileInfo In lFi + Select Case True + Case sFile.Name.Contains("(original)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Master.eSettings.AutoET Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + End If + Next + End If + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + 'Me.Clear() + Next + + _Image = Nothing + FileUtils.Delete.DeleteDirectory(CachePath) + + End If + End If + End If + End Sub + + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ + AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ + (AdvancedSettings.GetBooleanSetting("UseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Shared Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + End If + + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) + End Sub + + ' Duplicate of clsImage + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0, Optional ByVal sUrl As String = "") + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' If Not sUrl = "" Then + ' Dim stroriginalurl As String = sUrl + + ' 'Image Download from tmdb is special, need original size + ' If Not sUrl.Contains("impawards") AndAlso Not sUrl.Contains("movieposterdb") Then + ' 'Always get original image... + ' 'links to images (tmdb) have following structure: 'example: http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w92/x65b4vsFKYuA878pLN1mJiAsgIP.jpg + ' Dim stringArray() As String = Split(stroriginalurl, "/") + ' If stringArray.Length > 4 Then + ' ' stringArray(5) contains values like "w185","original", "w154"...-->size -> we want original! + ' stringArray(5) = "original" + ' stroriginalurl = Join(stringArray, "/") + ' End If + ' End If + ' Dim webclient As New Net.WebClient + ' webclient.DownloadFile(stroriginalurl, sPath) + ' Else + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + ' End If + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub + + Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo + Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() + + For i As Integer = 0 To UBound(Encoders) + If Encoders(i).FormatID = Format.Guid Then + Return Encoders(i) + End If + Next + + Return Nothing + End Function +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/Scraper/clsScrapeMPDB.vb b/Addons/scraper.IMDB.Data/Scraper/clsScrapeMPDB.vb new file mode 100644 index 0000000..7a7e13b --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/clsScrapeMPDB.vb @@ -0,0 +1,160 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Namespace MPDB + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwMPDB As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwMPDB.IsBusy Then Me.bwMPDB.CancelAsync() + + While Me.bwMPDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String) + Try + If Not Me.bwMPDB.IsBusy Then + Me.bwMPDB.WorkerSupportsCancellation = True + Me.bwMPDB.WorkerReportsProgress = True + Me.bwMPDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetMPDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + + If Me.bwMPDB.CancellationPending Then Return Nothing + + Try + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.movieposterdb.com/movie/", imdbID)) + sHTTP = Nothing + + If Me.bwMPDB.CancellationPending Then Return Nothing + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(1) + End If + + If Regex.IsMatch(HTML, String.Concat("http://www.imdb.com/title/tt", imdbID), RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline) Then + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "http://www.movieposterdb.com/posters/[0-9_](.*?)/[0-9](.*?)/[0-9](.*?)/[a-z0-9_](.*?).jpg") + + Dim PosterURL As String = String.Empty + + For Each mPoster As Match In mcPoster + If Me.bwMPDB.CancellationPending Then Return Nothing + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "l") + alPosters.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + Next + End If + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Private Sub bwMPDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetMPDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwMPDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDB.ProgressChanged + If Not bwMPDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwMPDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMDB.Data/Scraper/clsScrapeOFDB.vb b/Addons/scraper.IMDB.Data/Scraper/clsScrapeOFDB.vb new file mode 100644 index 0000000..a220a06 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/clsScrapeOFDB.vb @@ -0,0 +1,280 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class OFDB + + #Region "Fields" + + Private imdbID As String + Private OFDBMovie As MediaContainers.Movie + Private _genre As String + Private _outline As String + Private _plot As String + Private _title As String + + #End Region 'Fields + + #Region "Constructors" + + Public Sub New(ByVal sID As String, ByRef mMovie As MediaContainers.Movie) + Clear() + imdbID = sID + OFDBMovie = mMovie + + GetOFDBDetails() + End Sub + + #End Region 'Constructors + + #Region "Properties" + + Public Property Genre() As String + Get + Return _genre + End Get + Set(ByVal value As String) + _genre = value + End Set + End Property + + Public Property Outline() As String + Get + Return _outline + End Get + Set(ByVal value As String) + _outline = value + End Set + End Property + + Public Property Plot() As String + Get + Return _plot + End Get + Set(ByVal value As String) + _plot = value + End Set + End Property + + Public Property Title() As String + Get + Return _title + End Get + Set(ByVal value As String) + _title = value + End Set + End Property + + #End Region 'Properties + + #Region "Methods" + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Sub Clear() + _title = String.Empty + _outline = String.Empty + _plot = String.Empty + _genre = String.Empty + End Sub + + Private Function GetFullPlot(ByVal sURL As String) As String + Dim FullPlot As String = String.Empty + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + Dim D, W, Wq, Wqq, B As Integer + Dim tmpHTML As String + + D = HTML.IndexOf("Eine Inhaltsangabe von") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim + W = tmpHTML.IndexOf("</b></b><br><br>") + Wq = tmpHTML.IndexOf("<b>Quelle:</b>") + If Wq > 0 Then + Wqq = tmpHTML.IndexOf("<br><br>", Wq) + B = tmpHTML.IndexOf("</font></p>", Wqq + 8) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(Wqq + 8, B - (Wqq + 8)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + ElseIf W > 0 Then + B = tmpHTML.IndexOf("</font></p>", W + 16) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return FullPlot + End Function + + Private Sub GetOFDBDetails() + Dim sURL As String = GetOFDBUrlFromIMDBID() + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(Html) Then + 'title + If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(HTML, "<td width=""99\%""><h1 itemprop=""name""><font face=""Arial,Helvetica,sans-serif"" size=""3""><b>([^<]+)</b></font></h1></td>").Groups(1).Value.ToString)) + If OFDBTitle.EndsWith(", Der") Then + _title = String.Concat("Der ", OFDBTitle.Replace(", Der", " ")).Trim + ElseIf OFDBTitle.EndsWith(", Die") Then + _title = String.Concat("Die ", OFDBTitle.Replace(", Die", " ")).Trim + ElseIf OFDBTitle.EndsWith(", Das") Then + _title = String.Concat("Das ", OFDBTitle.Replace(", Das", " ")).Trim + ElseIf OFDBTitle.EndsWith(", The") Then + _title = String.Concat("The ", OFDBTitle.Replace(", The", " ")).Trim + Else + _title = OFDBTitle + End If + End If + + Dim D, Dq, W, Wq, B As Integer + Dim tmpHTML As String + + 'outline + If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then + D = HTML.IndexOf("<b>Inhalt:</b>") + Dq = HTML.IndexOf("<b>Inhalt:</b> <font style=") + + If Dq > 0 Then + Wq = HTML.IndexOf("<span itemprop=""description"">", Dq) + W = HTML.IndexOf("<a href=""plot", Wq + 29) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(Wq + 29, W - (Wq + 29)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + ElseIf D > 0 Then + W = HTML.IndexOf("<a href=""", D + 44) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(D + 44, W - (D + 44)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + + 'full plot + D = 0 : Dq = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then + D = HTML.IndexOf("<b>Inhalt:</b>") + Dq = HTML.IndexOf("<b>Inhalt:</b> <font style=") + + If Dq > 0 Then + Dim L As Integer = HTML.Length + tmpHTML = HTML.Substring(D + 197, L - (D + 197)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + ElseIf D > 0 Then + Dim L As Integer = HTML.Length + tmpHTML = HTML.Substring(D + 44, L - (D + 44)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + End If + End If + + 'genre + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Genre) OrElse Not Master.eSettings.LockGenre Then + D = HTML.IndexOf("class=""Normal"">Genre(s):</font></td>") + If D > 0 Then + W = HTML.IndexOf("</table>", D) + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), "<a.*?href=[""'](?<url>.*?)[""'].*?><span itemprop=""genre"">(?<name>.*?)</span></a>") + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + tGenre = StringUtils.GenreFilter(tGenre) + If Not String.IsNullOrEmpty(tGenre) Then + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + End If + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetOFDBUrlFromIMDBID() As String + Dim ofdbURL As String = String.Empty + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.ofdb.de/view.php?SText=", imdbID, "&Kat=IMDb&page=suchergebnis&sourceid=mozilla-search")) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(HTML) Then + Dim mcOFDBURL As MatchCollection = Regex.Matches(HTML, "<a href=""film/([^<]+)"" onmouseover") + If mcOFDBURL.Count > 0 Then + 'just use the first one if more are found + ofdbURL = String.Concat("http://www.ofdb.de/", Regex.Match(mcOFDBURL(0).Value.ToString, """(film/([^<]+))""").Groups(1).Value.ToString) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return ofdbURL + End Function + + #End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/Scraper/clsScrapeTMDB.vb b/Addons/scraper.IMDB.Data/Scraper/clsScrapeTMDB.vb new file mode 100644 index 0000000..d40e628 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/clsScrapeTMDB.vb @@ -0,0 +1,243 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI + +Namespace TMDB + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + + Private Const APIKey As String = "b1ecff8c76278262b27de1569f57f6bd" + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB...<OpenSearchDescription>...<movies>.Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<poster>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<backdrop>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Debug.Print("{0}/t{1}", tmdbI.@size, tmdbI.@url) + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + sHTTP = Nothing + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As String + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + Dim tLang As String + + tLang = AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en") + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/{0}/tt{1}", APIKey, imdbID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + Dim tmdbNode = From xNode In xmlTMDB.Elements + + If tmdbNode.Count > 0 Then + If Not tmdbNode(0).Value = "Your query didn't return any results." Then + Dim movieID As String = xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<id>.Value + Dim i As Integer + + + For i = 0 To 1 Step 1 + sHTTP = New HTTP + ApiXML = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/{0}/xml/{1}/{2}", tLang, APIKey, movieID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + Dim Trailers = From tNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie> Select tNode.<trailer> + If Trailers.Count > 0 AndAlso Not String.IsNullOrEmpty(Trailers(0).Value) Then + If Trailers(0).Value.ToLower.IndexOf("youtube.com") > 0 Then + Return Trailers(0).Value + i += 1 + End If + Else + tLang = "en" + End If + End If + Next + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return String.Empty + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/Scraper/clsScrapeTrailers.vb b/Addons/scraper.IMDB.Data/Scraper/clsScrapeTrailers.vb new file mode 100644 index 0000000..19327b4 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/clsScrapeTrailers.vb @@ -0,0 +1,265 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System +Imports System.IO +Imports System.Net +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Public Class Trailers + +#Region "Fields" + + Public IMDBURL As String + + Private WebPage As New HTTP + Private _ImdbID As String = String.Empty + Private _ImdbTrailerPage As String = String.Empty + Private _TrailerList As New List(Of String) + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + AddHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + Me.WebPage.Cancel() + End Sub + + Public Sub Clear() + Me._TrailerList.Clear() + Me._ImdbID = String.Empty + Me._ImdbTrailerPage = String.Empty + End Sub + + Public Sub DeleteTrailers(ByVal sPath As String, ByVal NewTrailer As String) + Dim parPath As String = Directory.GetParent(sPath).FullName + Dim tmpName As String = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(sPath))) + Dim tmpNameNoStack As String = Path.Combine(parPath, Path.GetFileNameWithoutExtension(sPath)) + For Each t As String In Master.eSettings.ValidExts + If File.Exists(String.Concat(tmpName, "-trailer", t)) AndAlso Not String.Concat(tmpName, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpName, "[trailer]", t)) AndAlso Not String.Concat(tmpName, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "[trailer]", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "-trailer", t)) AndAlso Not String.Concat(tmpNameNoStack, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) + End If + Next + End Sub + + Public Sub DownloadProgressUpdated(ByVal iPercent As Integer) + RaiseEvent ProgressUpdated(iPercent) + End Sub + + Public Function DownloadSingleTrailer(ByVal sPath As String, ByVal ImdbID As String, ByVal isSingle As Boolean, ByVal currNfoTrailer As String) As String + Dim tURL As String = String.Empty + Try + Me._TrailerList.Clear() + + If Not Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, True) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + + Dim tLink As String = String.Empty + If Regex.IsMatch(Me._TrailerList.Item(0).ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Dim YT As New YouTube.Scraper + YT.GetVideoLinks(Me._TrailerList.Item(0).ToString) + If YT.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + tLink = YT.VideoLinks(Master.eSettings.PreferredTrailerQuality).URL + Else + Select Case Master.eSettings.PreferredTrailerQuality + Case Enums.TrailerQuality.HD1080p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720p) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720p).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD1080pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720pVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720pVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HD720p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD720pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HQFLV + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HQVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.SQMP4 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.SQFLV + tLink = String.Empty + Case Enums.TrailerQuality.SQVP8 + tLink = String.Empty + End Select + End If + Else + tLink = Me._TrailerList.Item(0).ToString + End If + + If Not String.IsNullOrEmpty(tLink) Then + tURL = WebPage.DownloadFile(tLink, sPath, False, "trailer") + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + End If + ElseIf Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, False) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + tURL = Me._TrailerList.Item(0).ToString + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return tURL + End Function + + Public Function DownloadTrailer(ByVal sPath As String, ByVal sURL As String) As String + Dim tURL As String = String.Empty + If Not String.IsNullOrEmpty(sURL) Then + tURL = WebPage.DownloadFile(sURL, sPath, True, "trailer") + + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + Return tURL + End Function + + Public Function GetTrailers(ByVal ImdbID As String, Optional ByVal BreakAfterFound As Boolean = True) As List(Of String) + Me._ImdbID = ImdbID + If AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", False) Then + Me.GetImdbTrailer() + End If + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", False) Then + Me.GetTMDBTrailer() + End If + + Return Me._TrailerList + End Function + + Public Function IsAllowedToDownload(ByVal sPath As String, ByVal isDL As Boolean, ByVal currNfoTrailer As String, Optional ByVal isSS As Boolean = False) As Boolean + Dim fScanner As New Scanner + + If isDL Then + If String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) OrElse Master.eSettings.OverwriteTrailer Then + Return True + Else + If isSS AndAlso String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) Then + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + Else + Return False + End If + End If + Else + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + End If + End Function + + Private Sub GetIMDBTrailer() + Dim IMDB As New IMDB.Scraper + IMDB.IMDBURL = AdvancedSettings.GetSetting("IMDBURL", "akas.imdb.com") + Dim results As List(Of String) = IMDB.GetTrailers(_ImdbID) + + Me._TrailerList.AddRange(results) + + IMDB = Nothing + End Sub + + Private Sub GetTMDBTrailer() + Dim TMDB As New TMDB.Scraper + Dim YT As String = TMDB.GetTrailers(_ImdbID) + + If Not String.IsNullOrEmpty(YT) Then + Me._TrailerList.Add(YT) + End If + + TMDB = Nothing + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/Scraper/clsScrapeYouTube.vb b/Addons/scraper.IMDB.Data/Scraper/clsScrapeYouTube.vb new file mode 100644 index 0000000..b4603fd --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/clsScrapeYouTube.vb @@ -0,0 +1,335 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace YouTube + + Public Class Scraper + +#Region "Fields" + + Friend WithEvents bwYT As New System.ComponentModel.BackgroundWorker + + Private _VideoLinks As VideoLinkItemCollection + +#End Region 'Fields + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event VideoLinksRetrieved(ByVal bSuccess As Boolean) + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property VideoLinks() As VideoLinkItemCollection + Get + If _VideoLinks Is Nothing Then + _VideoLinks = New VideoLinkItemCollection + End If + Return _VideoLinks + End Get + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() + If bwYT.IsBusy Then bwYT.CancelAsync() + + While bwYT.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetVideoLinks(ByVal url As String) + Try + _VideoLinks = ParseYTFormats(url, False) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub GetVideoLinksAsync(ByVal url As String) + Try + If Not bwYT.IsBusy Then + _VideoLinks = Nothing + bwYT.WorkerSupportsCancellation = True + bwYT.RunWorkerAsync(url) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwYT.DoWork + Dim Url As String = DirectCast(e.Argument, String) + + Try + e.Result = ParseYTFormats(Url, True) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwYT.RunWorkerCompleted + Try + If e.Cancelled Then + 'user cancelled + RaiseEvent VideoLinksRetrieved(False) + ElseIf e.Error IsNot Nothing Then + 'exception occurred + RaiseEvent Exception(e.Error) + Else + 'all good + If e.Result IsNot Nothing Then + _VideoLinks = DirectCast(e.Result, VideoLinkItemCollection) + RaiseEvent VideoLinksRetrieved(True) + Else + RaiseEvent VideoLinksRetrieved(False) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetVideoTitle(ByVal HTML As String) As String + Dim result As String = "" + 'Dim KeyPattern As String = "'VIDEO_TITLE':\s*'([^']*?)'" + Dim KeyPattern As String = "meta name=\""title\"" content=\s*\""([^']*?)\""" + 'meta name="title" content= + If Regex.IsMatch(HTML, KeyPattern) Then + result = Regex.Match(HTML, KeyPattern).Groups(1).Value + End If + + Return result + End Function + + Private Function ParseYTFormats(ByVal url As String, ByVal doProgress As Boolean) As VideoLinkItemCollection + Dim DownloadLinks As New VideoLinkItemCollection + Dim sHTTP As New HTTP + + Try + If bwYT.CancellationPending Then Return DownloadLinks + + Dim Html As String = sHTTP.DownloadData(url) + If Html.ToLower.Contains("page not found") Then + Html = String.Empty + End If + + If String.IsNullOrEmpty(Html.Trim) Then Return DownloadLinks + If bwYT.CancellationPending Then Return DownloadLinks + + Dim VideoTitle As String = GetVideoTitle(Html) + VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") + + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) + If fmtMatch.Success Then + Dim FormatMap As String = fmtMatch.Groups(1).Value + Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") + + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) + Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) + + For i As Integer = 0 To FormatArray.Length - 1 + Dim yturl As String = rurl.Match(FormatArray(i)).Groups(1).Value + Dim ytitag As String = ritag.Match(FormatArray(i)).Groups(1).Value + Dim ytsig As String = rsig.Match(FormatArray(i)).Groups(1).Value + + 'Console.WriteLine("Trailer Itag: {0}", ytitag) + 'Console.WriteLine("Trailer Url: {0}", yturl) + 'Console.WriteLine("Trailer Sig: {0}", ytsig) + + Dim Link As New VideoLinkItem + Select Case ytitag + ' ********************************************************************** + ' see all itags http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs + ' ********************************************************************** + Case "5" + Link.Description = "240p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "6" + Link.Description = "270p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "13" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "17" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "18" + Link.Description = "360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQMP4 + Case "22" + Link.Description = "720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD720p + Case "34" + Link.Description = "360p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQFLV + Case "35" + Link.Description = "480p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HQFLV + Case "36" + Link.Description = "240p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "37" + Link.Description = "1080p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD1080p + Case "38" + Link.Description = "1536p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "43" + Link.Description = "360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.SQVP8 + Case "44" + Link.Description = "480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HQVP8 + Case "45" + Link.Description = "720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD720pVP8 + Case "46" + Link.Description = "1080p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD1080pVP8 + Case "82" + Link.Description = "3D 360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "83" + Link.Description = "3D 480p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "84" + Link.Description = "3D 720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "85" + Link.Description = "3D 520p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "100" + Link.Description = "3D 360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "101" + Link.Description = "3D 480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "102" + Link.Description = "3D 720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "120" + Link.Description = "720p LiveStream (FLV, AVC)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case Else + Link.Description = "Other" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + 'Continue For + End Select + + Link.URL = Web.HttpUtility.UrlDecode(Web.HttpUtility.UrlDecode(yturl)) & "&signature=" & ytsig & "&title=" & Web.HttpUtility.UrlEncode(VideoTitle) + Link.URL = Link.URL.Replace("sig=", "signature=") ' sig= returns HTTP 403 //oldstyle, keep it + 'Console.WriteLine("Trailer Url decoded: {0}", Link.URL) + + If bwYT.CancellationPending Then Return DownloadLinks + + If Not String.IsNullOrEmpty(Link.URL) AndAlso sHTTP.IsValidURL(Link.URL) Then + DownloadLinks.Add(Link) + End If + + If bwYT.CancellationPending Then Return DownloadLinks + + Next + + End If + Return DownloadLinks + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New VideoLinkItemCollection + Finally + sHTTP = Nothing + End Try + End Function + +#End Region 'Methods + + End Class + + Public Class VideoLinkItem + +#Region "Fields" + + Private _Description As String + Private _FormatQuality As Enums.TrailerQuality + Private _URL As String + +#End Region 'Fields + +#Region "Properties" + + Public Property Description() As String + Get + Return _Description + End Get + Set(ByVal value As String) + _Description = value + End Set + End Property + + Public Property URL() As String + Get + Return _URL + End Get + Set(ByVal value As String) + _URL = value + End Set + End Property + + Friend Property FormatQuality() As Enums.TrailerQuality + Get + Return _FormatQuality + End Get + Set(ByVal value As Enums.TrailerQuality) + _FormatQuality = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class VideoLinkItemCollection + Inherits Generic.SortedList(Of Enums.TrailerQuality, VideoLinkItem) + +#Region "Methods" + + Public Shadows Sub Add(ByVal Link As VideoLinkItem) + If Not MyBase.ContainsKey(Link.FormatQuality) Then MyBase.Add(Link.FormatQuality, Link) + End Sub + +#End Region 'Methods + + End Class + +End Namespace diff --git a/Addons/scraper.IMDB.Data/Scraper/dlgIMDBSearchResults.Designer.vb b/Addons/scraper.IMDB.Data/Scraper/dlgIMDBSearchResults.Designer.vb new file mode 100644 index 0000000..6d0924e --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/dlgIMDBSearchResults.Designer.vb @@ -0,0 +1,480 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgIMDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgIMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtIMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + Me.txtFileName = New System.Windows.Forms.TextBox() + Me.btnOpenFolder = New System.Windows.Forms.Button() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(501, 431) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(574, 431) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(8, 126) + Me.tvResults.Name = "tvResults" + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 5 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(298, 160) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(295, 100) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(295, 119) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(298, 325) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(476, 160) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(476, 186) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(476, 213) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtIMDBID + ' + Me.txtIMDBID.Enabled = False + Me.txtIMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtIMDBID.Location = New System.Drawing.Point(143, 429) + Me.txtIMDBID.Name = "txtIMDBID" + Me.txtIMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtIMDBID.TabIndex = 7 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(647, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(256, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(8, 433) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(128, 17) + Me.chkManual.TabIndex = 6 + Me.chkManual.Text = "Manual IMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(249, 429) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 8 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(476, 277) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(35, 13) + Me.lblIMDB.TabIndex = 19 + Me.lblIMDB.Text = "IMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(414, 160) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(32, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(414, 186) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(414, 213) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(414, 277) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(53, 13) + Me.lblIMDBHeader.TabIndex = 18 + Me.lblIMDBHeader.Text = "IMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(295, 309) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(266, 100) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 4 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(8, 101) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 3 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(368, 213) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 20 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(98, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching IMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(312, 185) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'txtFileName + ' + Me.txtFileName.Enabled = False + Me.txtFileName.Location = New System.Drawing.Point(8, 73) + Me.txtFileName.Name = "txtFileName" + Me.txtFileName.Size = New System.Drawing.Size(598, 22) + Me.txtFileName.TabIndex = 3 + ' + 'btnOpenFolder + ' + Me.btnOpenFolder.Location = New System.Drawing.Point(612, 73) + Me.btnOpenFolder.Name = "btnOpenFolder" + Me.btnOpenFolder.Size = New System.Drawing.Size(29, 23) + Me.btnOpenFolder.TabIndex = 23 + Me.btnOpenFolder.Text = "..." + Me.btnOpenFolder.UseVisualStyleBackColor = True + ' + 'dlgIMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(647, 492) + Me.ControlBox = False + Me.Controls.Add(Me.btnOpenFolder) + Me.Controls.Add(Me.txtFileName) + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtIMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgIMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents tvResults As System.Windows.Forms.TreeView + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lblYear As System.Windows.Forms.Label + Friend WithEvents lblDirector As System.Windows.Forms.Label + Friend WithEvents lblGenre As System.Windows.Forms.Label + Friend WithEvents txtIMDBID As System.Windows.Forms.TextBox + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents lblIMDB As System.Windows.Forms.Label + Friend WithEvents lblYearHeader As System.Windows.Forms.Label + Friend WithEvents lblDirectorHeader As System.Windows.Forms.Label + Friend WithEvents lblGenreHeader As System.Windows.Forms.Label + Friend WithEvents lblIMDBHeader As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel + Friend WithEvents Label4 As System.Windows.Forms.Label + Friend WithEvents txtFileName As System.Windows.Forms.TextBox + Friend WithEvents btnOpenFolder As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.IMDB.Data/Scraper/dlgIMDBSearchResults.resx b/Addons/scraper.IMDB.Data/Scraper/dlgIMDBSearchResults.resx new file mode 100644 index 0000000..fc0d614 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/dlgIMDBSearchResults.resx @@ -0,0 +1,190 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB9ElE + QVQ4T6XSTWgTQRQH8E0LaZPaD9oaxULRi0igJSroqYLoxaa3gpfSFrx4sGp7Kj31pDYnPQpG8dzgQcSg + 1orQZJPd2exWSYOxiXhKQz5oEjQxpubvm6WN2zUe1IXf7OzMe2/fLCsA+C9NF//GbwtPfD67wti5SES5 + +GZ19ZB532zfg8Lkq+uallFVFZymqRUqdNcYY9aYMFma1igpFoshl80in88jsbkJvhZRlAfGJCN9eOH3 + WxWF5TaiUezs1FCv13X8SiYSoD2IwaCTx5rpA20OS5KEVCqFWu07KpWyrlr9hkJhG4wxSOHwdXMypw+B + tTVXOBRCOr1FSVWUSkVSQrn8FcViEUyW8VkTr5iTOX14vbLSTgUK0d0j8C54IaCOZDIBRt1d9gYXjIl7 + GhM6xjWZAvl3yGQy9BFziMfj+Phegcf3FsLMc7TdfHbPmMztexBFcZ7O+oXwM+NdRP5xf/nVJ9uEF9aJ + h2ifeoyOyUcve+eedjUtwNHP0x8MBMaoo/EPauioIAgW+6jH233pFrpG76DTvYRu99LGwNhtW9MCf+IY + WbjRf3YOfWdm0Uf3gQuLh/m60EqvID3kGDlBhoiLnCKnd52ksCO9g+dnHM4p6eDxcY/VIvzqgAJaSRux + kQ5ygHSa7XXDtVBOo8C/g/ATj6yxruTRIKcAAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/Scraper/dlgIMDBSearchResults.vb b/Addons/scraper.IMDB.Data/Scraper/dlgIMDBSearchResults.vb new file mode 100644 index 0000000..6fde061 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/dlgIMDBSearchResults.vb @@ -0,0 +1,520 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports System.IO +Imports EmberAPI + +Public Class dlgIMDBSearchResults + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + Friend WithEvents tmrLoad As New System.Windows.Forms.Timer + Friend WithEvents tmrWait As New System.Windows.Forms.Timer + + Private IMDB As New IMDB.Scraper + Private sHTTP As New HTTP + Dim UseOFDBGenre As Boolean + Dim UseOFDBOutline As Boolean + Dim UseOFDBPlot As Boolean + Dim UseOFDBTitle As Boolean + Private _currnode As Integer = -1 + Private _prevnode As Integer = -2 + + Private _InfoCache As New Dictionary(Of String, MediaContainers.Movie) + Private _PosterCache As New Dictionary(Of String, System.Drawing.Image) + Private _filterOptions As Structures.ScrapeOptions + +#End Region 'Fields + + #Region "Methods" + + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + _filterOptions = filterOptions + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + chkManual.Enabled = False + IMDB.IMDBURL = IMDBURL + IMDB.SearchMovieAsync(sMovieTitle, _filterOptions) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal Res As IMDB.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + SearchResultsDownloaded(Res) + + Return MyBase.ShowDialog() + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.OK_Button.Enabled = False + pnlPicStatus.Visible = False + _InfoCache.Clear() + _PosterCache.Clear() + Me.ClearInfo() + Me.Label3.Text = Master.eLang.GetString(11, "Searching IMDB...") + Me.pnlLoading.Visible = True + chkManual.Enabled = False + IMDB.CancelAsync() + IMDB.IMDBURL = IMDBURL + IMDB.SearchMovieAsync(Me.txtSearch.Text, _filterOptions) + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + If Regex.IsMatch(Me.txtIMDBID.Text.Replace("tt", String.Empty), "\d\d\d\d\d\d\d") Then + IMDB.IMDBURL = IMDBURL + IMDB.GetSearchMovieInfoAsync(Me.txtIMDBID.Text.Replace("tt", String.Empty), Master.tmpMovie, Master.DefaultOptions) + Else + MsgBox(Master.eLang.GetString(12, "The ID you entered is not a valid IMDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + End If + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + sHTTP.StartDownloadImage(Args.pURL) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image, .IMDBId = Args.IMDBId} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + '// + ' Thread finished: display pic if it was able to get one + '\\ + + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbPoster.Image = Res.Result + If Not _PosterCache.ContainsKey(Res.IMDBId) Then + _PosterCache.Add(Res.IMDBId, Res.Result) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + pnlPicStatus.Visible = False + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Master.tmpMovie.Clear() + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub btnOpenFolder_Click(sender As Object, e As EventArgs) Handles btnOpenFolder.Click + Dim fPath As String = Directory.GetParent(Master.currMovie.Filename).FullName + + If Not String.IsNullOrEmpty(fPath) Then + Shell("Explorer.exe " & fPath, vbNormalFocus) + End If + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtIMDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.tvResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtIMDBID.Text = String.Empty + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblTagline.Text = String.Empty + Me.lblYear.Text = String.Empty + Me.lblDirector.Text = String.Empty + Me.lblGenre.Text = String.Empty + Me.txtOutline.Text = String.Empty + Me.lblIMDB.Text = String.Empty + Me.pbPoster.Image = Nothing + + Master.tmpMovie.Clear() + + IMDB.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.lblYearHeader.Visible = areVisible + Me.lblDirectorHeader.Visible = areVisible + Me.lblGenreHeader.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.lblIMDBHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + Me.lblYear.Visible = areVisible + Me.lblTagline.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblDirector.Visible = areVisible + Me.lblGenre.Visible = areVisible + Me.lblIMDB.Visible = areVisible + Me.pbPoster.Visible = areVisible + End Sub + + Private Sub dlgIMDBSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub dlgIMDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + pnlPicStatus.Visible = False + IMDB.IMDBURL = IMDBURL + IMDB.UseOFDBTitle = UseOFDBTitle + IMDB.UseOFDBOutline = UseOFDBOutline + IMDB.UseOFDBPlot = UseOFDBPlot + IMDB.UseOFDBGenre = UseOFDBGenre + AddHandler IMDB.SearchMovieInfoDownloaded, AddressOf SearchMovieInfoDownloaded + AddHandler IMDB.SearchResultsDownloaded, AddressOf SearchResultsDownloaded + + Try + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgIMDBSearchResults_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + Me.tvResults.Focus() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + If Me.chkManual.Checked AndAlso Me.btnVerify.Enabled Then + If Not Regex.IsMatch(Me.txtIMDBID.Text.Replace("tt", String.Empty), "\d\d\d\d\d\d\d") Then + MsgBox(Master.eLang.GetString(12, "The ID you entered is not a valid IMDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + Exit Sub + Else + If MsgBox(String.Concat(Master.eLang.GetString(13, "You have manually entered an IMDB ID but have not verified it is correct."), vbNewLine, vbNewLine, Master.eLang.GetString(101, "Are you sure you want to continue?", True)), MsgBoxStyle.YesNo, Master.eLang.GetString(14, "Continue without verification?")) = MsgBoxResult.No Then + Exit Sub + Else + Master.tmpMovie.IMDBID = Me.txtIMDBID.Text.Replace("tt", String.Empty) + End If + End If + End If + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.Close() + End Sub + + Private Sub SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + '// + ' Info downloaded... fill form with data + '\\ + + Me.pnlLoading.Visible = False + Me.OK_Button.Enabled = True + + Try + If bSuccess Then + Me.ControlsVisible(True) + Me.lblTitle.Text = Master.tmpMovie.Title + Me.lblTagline.Text = Master.tmpMovie.Tagline + Me.lblYear.Text = Master.tmpMovie.Year + Me.lblDirector.Text = Master.tmpMovie.Director + Me.lblGenre.Text = Master.tmpMovie.Genre + Me.txtOutline.Text = Master.tmpMovie.Outline + Me.lblIMDB.Text = Master.tmpMovie.IMDBID + + If _PosterCache.ContainsKey(Master.tmpMovie.IMDBID) Then + 'just set it + Me.pbPoster.Image = _PosterCache(Master.tmpMovie.IMDBID) + Else + 'go download it, if available + If Not String.IsNullOrEmpty(sPoster) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + pnlPicStatus.Visible = True + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = sPoster, .IMDBId = Master.tmpMovie.IMDBID}) + End If + + End If + + 'store clone of tmpmovie + If Not _InfoCache.ContainsKey(Master.tmpMovie.IMDBID) Then + _InfoCache.Add(Master.tmpMovie.IMDBID, GetMovieClone(Master.tmpMovie)) + End If + + + Me.btnVerify.Enabled = False + Else + If Me.chkManual.Checked Then + MsgBox(Master.eLang.GetString(15, "Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again."), MsgBoxStyle.Exclamation, Master.eLang.GetString(16, "Verification Failed")) + Me.btnVerify.Enabled = True + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SearchResultsDownloaded(ByVal M As IMDB.MovieSearchResults) + '// + ' Process the results that IMDB gave us + '\\ + + Try + Me.tvResults.Nodes.Clear() + Me.ClearInfo() + If Not IsNothing(M) Then + If M.PartialMatches.Count > 0 OrElse M.PopularTitles.Count > 0 OrElse M.ExactMatches.Count > 0 Then + Dim TnP As New TreeNode(String.Format(Master.eLang.GetString(17, "Partial Matches ({0})"), M.PartialMatches.Count)) + Dim selNode As New TreeNode + + If M.PartialMatches.Count > 0 Then + M.PartialMatches.Sort() + For Each Movie As MediaContainers.Movie In M.PartialMatches + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + selNode = TnP.FirstNode + End If + + If M.PopularTitles.Count > 0 Then + M.PopularTitles.Sort() + If M.PartialMatches.Count > 0 OrElse M.ExactMatches.Count > 0 Then + Me.tvResults.Nodes(TnP.Index).Collapse() + End If + + TnP = New TreeNode(String.Format(Master.eLang.GetString(19, "Popular Titles ({0})"), M.PopularTitles.Count)) + + For Each Movie As MediaContainers.Movie In M.PopularTitles + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + + selNode = TnP.FirstNode + End If + + If M.ExactMatches.Count > 0 Then + M.ExactMatches.Sort() + If M.PartialMatches.Count > 0 Then + Me.tvResults.Nodes(TnP.Index).Collapse() + End If + TnP = New TreeNode(String.Format(Master.eLang.GetString(18, "Exact Matches ({0})"), M.ExactMatches.Count)) + For Each Movie As MediaContainers.Movie In M.ExactMatches + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + + selNode = TnP.FirstNode + + End If + Me._prevnode = -2 + + 'determine if we automatically start downloading info for selected node + If M.ExactMatches.Count > 0 Then + Me.tvResults.SelectedNode = selNode + ElseIf M.PopularTitles.Count > 0 Then + Me.tvResults.SelectedNode = selNode + ElseIf M.PartialMatches.Count > 0 Then + Me.tvResults.SelectedNode = selNode + Else + Me.tvResults.SelectedNode = Nothing + End If + Me.tvResults.Focus() + Else + Me.tvResults.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(20, "No Matches Found")}) + End If + End If + Me.pnlLoading.Visible = False + chkManual.Enabled = True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.Label2.Text = Master.eLang.GetString(21, "View details of each result to find the proper movie.") + Me.Label1.Text = Master.eLang.GetString(22, "Movie Search Results") + Me.chkManual.Text = Master.eLang.GetString(23, "Manual IMDB Entry:") + Me.btnVerify.Text = Master.eLang.GetString(24, "Verify") + Me.lblYearHeader.Text = Master.eLang.GetString(49, "Year:", True) + Me.lblDirectorHeader.Text = Master.eLang.GetString(239, "Director:", True) + Me.lblGenreHeader.Text = Master.eLang.GetString(51, "Genre(s):", True) + Me.lblIMDBHeader.Text = Master.eLang.GetString(289, "IMDB ID:", True) + Me.lblPlotHeader.Text = Master.eLang.GetString(242, "Plot Outline:", True) + Me.Label3.Text = Master.eLang.GetString(25, "Searching IMDB...") + Me.txtFileName.Text = Master.currMovie.Filename + End Sub + + Private Sub tmrLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoad.Tick + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + Me.pnlLoading.Visible = True + Me.Label3.Text = Master.eLang.GetString(26, "Downloading details...") + + IMDB.IMDBURL = IMDBURL + IMDB.GetSearchMovieInfoAsync(Me.tvResults.SelectedNode.Tag.ToString, Master.tmpMovie, Master.DefaultOptions) + End Sub + + Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrWait.Tick + If Not Me._prevnode = Me._currnode Then + Me._prevnode = Me._currnode + Me.tmrWait.Stop() + Me.tmrLoad.Start() + Else + Me.tmrLoad.Stop() + Me.tmrWait.Stop() + End If + End Sub + Private Sub tvResults_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvResults.AfterSelect + Try + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + + Me.ClearInfo() + Me.OK_Button.Enabled = False + + If Not IsNothing(Me.tvResults.SelectedNode.Tag) AndAlso Not String.IsNullOrEmpty(Me.tvResults.SelectedNode.Tag.ToString) Then + Me._currnode = Me.tvResults.SelectedNode.Index + + 'check if this movie is in the cache already + If _InfoCache.ContainsKey(Me.tvResults.SelectedNode.Tag.ToString) Then + Master.tmpMovie = GetMovieClone(_InfoCache(Me.tvResults.SelectedNode.Tag.ToString)) + SearchMovieInfoDownloaded(String.Empty, True) + Return + End If + + Me.pnlLoading.Visible = True + Me.tmrWait.Start() + Else + Me.pnlLoading.Visible = False + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub tvResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub txtIMDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtIMDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtIMDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtIMDBID.TextChanged + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Function GetMovieClone(ByVal original As MediaContainers.Movie) As MediaContainers.Movie + 'have to do this the old-fashioned way because it is not serializable + Dim result As New MediaContainers.Movie + With result + .IMDBID = original.IMDBID + .Genre = original.Genre + .Title = original.Title + .Tagline = original.Tagline + .Year = original.Year + .Director = original.Director + .Genre = original.Genre + .Outline = original.Outline + End With + Return result + 'Using mem As New IO.MemoryStream() + ' Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, New System.Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.Clone)) + ' bin.Serialize(mem, original) + ' mem.Seek(0, IO.SeekOrigin.Begin) + ' Return DirectCast(bin.Deserialize(mem), MediaContainers.Movie) + 'End Using + End Function + + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim pURL As String + Dim IMDBId As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Image + Dim IMDBId As String + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/Scraper/dlgImgSelect.Designer.vb b/Addons/scraper.IMDB.Data/Scraper/dlgImgSelect.Designer.vb new file mode 100644 index 0000000..213f00e --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/dlgImgSelect.Designer.vb @@ -0,0 +1,466 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgImgSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgImgSelect)) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.pnlSize = New System.Windows.Forms.Panel() + Me.btnPreview = New System.Windows.Forms.Button() + Me.rbSmall = New System.Windows.Forms.RadioButton() + Me.rbMedium = New System.Windows.Forms.RadioButton() + Me.rbLarge = New System.Windows.Forms.RadioButton() + Me.rbXLarge = New System.Windows.Forms.RadioButton() + Me.pnlFanart = New System.Windows.Forms.Panel() + Me.chkThumb = New System.Windows.Forms.CheckBox() + Me.chkMid = New System.Windows.Forms.CheckBox() + Me.chkOriginal = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlDLStatus = New System.Windows.Forms.Panel() + Me.pnlMPDB = New System.Windows.Forms.Panel() + Me.lblDL3Status = New System.Windows.Forms.Label() + Me.lblDL3 = New System.Windows.Forms.Label() + Me.pbDL3 = New System.Windows.Forms.ProgressBar() + Me.pnlIMPA = New System.Windows.Forms.Panel() + Me.lblDL2Status = New System.Windows.Forms.Label() + Me.lblDL2 = New System.Windows.Forms.Label() + Me.pbDL2 = New System.Windows.Forms.ProgressBar() + Me.lblDL1Status = New System.Windows.Forms.Label() + Me.lblDL1 = New System.Windows.Forms.Label() + Me.pbDL1 = New System.Windows.Forms.ProgressBar() + Me.pnlSinglePic = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.TableLayoutPanel1.SuspendLayout() + Me.pnlBottomMain.SuspendLayout() + Me.pnlSize.SuspendLayout() + Me.pnlFanart.SuspendLayout() + Me.pnlDLStatus.SuspendLayout() + Me.pnlMPDB.SuspendLayout() + Me.pnlIMPA.SuspendLayout() + Me.pnlSinglePic.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(687, 11) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(836, 495) + Me.pnlBG.TabIndex = 1 + Me.pnlBG.Visible = False + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.pnlSize) + Me.pnlBottomMain.Controls.Add(Me.pnlFanart) + Me.pnlBottomMain.Controls.Add(Me.lblInfo) + Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) + Me.pnlBottomMain.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 495) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(836, 50) + Me.pnlBottomMain.TabIndex = 0 + ' + 'pnlSize + ' + Me.pnlSize.BackColor = System.Drawing.Color.White + Me.pnlSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.pnlSize.Controls.Add(Me.btnPreview) + Me.pnlSize.Controls.Add(Me.rbSmall) + Me.pnlSize.Controls.Add(Me.rbMedium) + Me.pnlSize.Controls.Add(Me.rbLarge) + Me.pnlSize.Controls.Add(Me.rbXLarge) + Me.pnlSize.Location = New System.Drawing.Point(8, 8) + Me.pnlSize.Name = "pnlSize" + Me.pnlSize.Size = New System.Drawing.Size(673, 34) + Me.pnlSize.TabIndex = 1 + Me.pnlSize.Visible = False + ' + 'btnPreview + ' + Me.btnPreview.Enabled = False + Me.btnPreview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnPreview.Image = CType(resources.GetObject("btnPreview.Image"), System.Drawing.Image) + Me.btnPreview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPreview.Location = New System.Drawing.Point(593, 5) + Me.btnPreview.Name = "btnPreview" + Me.btnPreview.Size = New System.Drawing.Size(75, 23) + Me.btnPreview.TabIndex = 4 + Me.btnPreview.Text = "Preview" + Me.btnPreview.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPreview.UseVisualStyleBackColor = True + ' + 'rbSmall + ' + Me.rbSmall.AutoSize = True + Me.rbSmall.Enabled = False + Me.rbSmall.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbSmall.Location = New System.Drawing.Point(475, 8) + Me.rbSmall.Name = "rbSmall" + Me.rbSmall.Size = New System.Drawing.Size(53, 17) + Me.rbSmall.TabIndex = 3 + Me.rbSmall.TabStop = True + Me.rbSmall.Text = "Small" + Me.rbSmall.UseVisualStyleBackColor = True + ' + 'rbMedium + ' + Me.rbMedium.AutoSize = True + Me.rbMedium.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbMedium.Location = New System.Drawing.Point(201, 8) + Me.rbMedium.Name = "rbMedium" + Me.rbMedium.Size = New System.Drawing.Size(69, 17) + Me.rbMedium.TabIndex = 1 + Me.rbMedium.TabStop = True + Me.rbMedium.Text = "Medium" + Me.rbMedium.UseVisualStyleBackColor = True + ' + 'rbLarge + ' + Me.rbLarge.AutoSize = True + Me.rbLarge.Enabled = False + Me.rbLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbLarge.Location = New System.Drawing.Point(343, 8) + Me.rbLarge.Name = "rbLarge" + Me.rbLarge.Size = New System.Drawing.Size(55, 17) + Me.rbLarge.TabIndex = 2 + Me.rbLarge.TabStop = True + Me.rbLarge.Text = "Cover" + Me.rbLarge.UseVisualStyleBackColor = True + ' + 'rbXLarge + ' + Me.rbXLarge.AutoSize = True + Me.rbXLarge.Enabled = False + Me.rbXLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbXLarge.Location = New System.Drawing.Point(26, 8) + Me.rbXLarge.Name = "rbXLarge" + Me.rbXLarge.Size = New System.Drawing.Size(66, 17) + Me.rbXLarge.TabIndex = 0 + Me.rbXLarge.TabStop = True + Me.rbXLarge.Text = "Original" + Me.rbXLarge.UseVisualStyleBackColor = True + ' + 'pnlFanart + ' + Me.pnlFanart.BackColor = System.Drawing.Color.White + Me.pnlFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFanart.Controls.Add(Me.chkThumb) + Me.pnlFanart.Controls.Add(Me.chkMid) + Me.pnlFanart.Controls.Add(Me.chkOriginal) + Me.pnlFanart.Location = New System.Drawing.Point(8, 8) + Me.pnlFanart.Name = "pnlFanart" + Me.pnlFanart.Size = New System.Drawing.Size(339, 34) + Me.pnlFanart.TabIndex = 5 + Me.pnlFanart.Visible = False + ' + 'chkThumb + ' + Me.chkThumb.AutoSize = True + Me.chkThumb.Location = New System.Drawing.Point(231, 8) + Me.chkThumb.Name = "chkThumb" + Me.chkThumb.Size = New System.Drawing.Size(111, 17) + Me.chkThumb.TabIndex = 2 + Me.chkThumb.Text = "Check All Thumb" + Me.chkThumb.UseVisualStyleBackColor = True + ' + 'chkMid + ' + Me.chkMid.AutoSize = True + Me.chkMid.Location = New System.Drawing.Point(131, 8) + Me.chkMid.Name = "chkMid" + Me.chkMid.Size = New System.Drawing.Size(96, 17) + Me.chkMid.TabIndex = 1 + Me.chkMid.Text = "Check All Mid" + Me.chkMid.UseVisualStyleBackColor = True + ' + 'chkOriginal + ' + Me.chkOriginal.AutoSize = True + Me.chkOriginal.Location = New System.Drawing.Point(7, 8) + Me.chkOriginal.Name = "chkOriginal" + Me.chkOriginal.Size = New System.Drawing.Size(118, 17) + Me.chkOriginal.TabIndex = 0 + Me.chkOriginal.Text = "Check All Original" + Me.chkOriginal.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.Location = New System.Drawing.Point(402, 10) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(240, 31) + Me.lblInfo.TabIndex = 1 + Me.lblInfo.Text = "Selected item will be set as fanart. All checked items will be saved to \extrathu" & _ + "mbs." + Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblInfo.Visible = False + ' + 'pnlDLStatus + ' + Me.pnlDLStatus.BackColor = System.Drawing.Color.White + Me.pnlDLStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlDLStatus.Controls.Add(Me.pnlMPDB) + Me.pnlDLStatus.Controls.Add(Me.pnlIMPA) + Me.pnlDLStatus.Controls.Add(Me.lblDL1Status) + Me.pnlDLStatus.Controls.Add(Me.lblDL1) + Me.pnlDLStatus.Controls.Add(Me.pbDL1) + Me.pnlDLStatus.Location = New System.Drawing.Point(257, 132) + Me.pnlDLStatus.Name = "pnlDLStatus" + Me.pnlDLStatus.Size = New System.Drawing.Size(321, 223) + Me.pnlDLStatus.TabIndex = 2 + Me.pnlDLStatus.Visible = False + ' + 'pnlMPDB + ' + Me.pnlMPDB.Controls.Add(Me.lblDL3Status) + Me.pnlMPDB.Controls.Add(Me.lblDL3) + Me.pnlMPDB.Controls.Add(Me.pbDL3) + Me.pnlMPDB.Location = New System.Drawing.Point(0, 147) + Me.pnlMPDB.Name = "pnlMPDB" + Me.pnlMPDB.Size = New System.Drawing.Size(321, 75) + Me.pnlMPDB.TabIndex = 4 + ' + 'lblDL3Status + ' + Me.lblDL3Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL3Status.Name = "lblDL3Status" + Me.lblDL3Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL3Status.TabIndex = 1 + ' + 'lblDL3 + ' + Me.lblDL3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3.Location = New System.Drawing.Point(5, 10) + Me.lblDL3.Name = "lblDL3" + Me.lblDL3.Size = New System.Drawing.Size(310, 13) + Me.lblDL3.TabIndex = 0 + Me.lblDL3.Text = "Performing Preliminary Tasks..." + ' + 'pbDL3 + ' + Me.pbDL3.Location = New System.Drawing.Point(6, 53) + Me.pbDL3.Name = "pbDL3" + Me.pbDL3.Size = New System.Drawing.Size(309, 19) + Me.pbDL3.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL3.TabIndex = 2 + ' + 'pnlIMPA + ' + Me.pnlIMPA.Controls.Add(Me.pnlSinglePic) + Me.pnlIMPA.Controls.Add(Me.lblDL2Status) + Me.pnlIMPA.Controls.Add(Me.lblDL2) + Me.pnlIMPA.Controls.Add(Me.pbDL2) + Me.pnlIMPA.Location = New System.Drawing.Point(0, 73) + Me.pnlIMPA.Name = "pnlIMPA" + Me.pnlIMPA.Size = New System.Drawing.Size(321, 75) + Me.pnlIMPA.TabIndex = 3 + ' + 'lblDL2Status + ' + Me.lblDL2Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL2Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL2Status.Name = "lblDL2Status" + Me.lblDL2Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL2Status.TabIndex = 1 + ' + 'lblDL2 + ' + Me.lblDL2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL2.Location = New System.Drawing.Point(5, 10) + Me.lblDL2.Name = "lblDL2" + Me.lblDL2.Size = New System.Drawing.Size(310, 13) + Me.lblDL2.TabIndex = 0 + Me.lblDL2.Text = "Performing Preliminary Tasks..." + ' + 'pbDL2 + ' + Me.pbDL2.Location = New System.Drawing.Point(6, 52) + Me.pbDL2.Name = "pbDL2" + Me.pbDL2.Size = New System.Drawing.Size(309, 19) + Me.pbDL2.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL2.TabIndex = 2 + ' + 'lblDL1Status + ' + Me.lblDL1Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL1Status.Location = New System.Drawing.Point(5, 29) + Me.lblDL1Status.Name = "lblDL1Status" + Me.lblDL1Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL1Status.TabIndex = 1 + ' + 'lblDL1 + ' + Me.lblDL1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL1.Location = New System.Drawing.Point(5, 6) + Me.lblDL1.Name = "lblDL1" + Me.lblDL1.Size = New System.Drawing.Size(310, 13) + Me.lblDL1.TabIndex = 0 + Me.lblDL1.Text = "Performing Preliminary Tasks..." + ' + 'pbDL1 + ' + Me.pbDL1.Location = New System.Drawing.Point(6, 49) + Me.pbDL1.Name = "pbDL1" + Me.pbDL1.Size = New System.Drawing.Size(309, 19) + Me.pbDL1.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL1.TabIndex = 2 + ' + 'pnlSinglePic + ' + Me.pnlSinglePic.BackColor = System.Drawing.Color.White + Me.pnlSinglePic.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlSinglePic.Controls.Add(Me.Label2) + Me.pnlSinglePic.Controls.Add(Me.ProgressBar1) + Me.pnlSinglePic.Location = New System.Drawing.Point(0, 1) + Me.pnlSinglePic.Name = "pnlSinglePic" + Me.pnlSinglePic.Size = New System.Drawing.Size(321, 75) + Me.pnlSinglePic.TabIndex = 1 + Me.pnlSinglePic.Visible = False + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(5, 10) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(310, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Downloading Selected Image..." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(6, 53) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(309, 19) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'dlgImgSelect + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(836, 545) + Me.ControlBox = False + Me.Controls.Add(Me.pnlDLStatus) + Me.Controls.Add(Me.pnlBG) + Me.Controls.Add(Me.pnlBottomMain) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgImgSelect" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Poster" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlSize.ResumeLayout(False) + Me.pnlSize.PerformLayout() + Me.pnlFanart.ResumeLayout(False) + Me.pnlFanart.PerformLayout() + Me.pnlDLStatus.ResumeLayout(False) + Me.pnlMPDB.ResumeLayout(False) + Me.pnlIMPA.ResumeLayout(False) + Me.pnlSinglePic.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlDLStatus As System.Windows.Forms.Panel + Friend WithEvents lblDL1Status As System.Windows.Forms.Label + Friend WithEvents lblDL1 As System.Windows.Forms.Label + Friend WithEvents pbDL1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlIMPA As System.Windows.Forms.Panel + Friend WithEvents lblDL2Status As System.Windows.Forms.Label + Friend WithEvents lblDL2 As System.Windows.Forms.Label + Friend WithEvents pbDL2 As System.Windows.Forms.ProgressBar + Friend WithEvents lblInfo As System.Windows.Forms.Label + Friend WithEvents pnlSize As System.Windows.Forms.Panel + Friend WithEvents rbSmall As System.Windows.Forms.RadioButton + Friend WithEvents rbMedium As System.Windows.Forms.RadioButton + Friend WithEvents rbLarge As System.Windows.Forms.RadioButton + Friend WithEvents rbXLarge As System.Windows.Forms.RadioButton + Friend WithEvents pnlSinglePic As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlMPDB As System.Windows.Forms.Panel + Friend WithEvents lblDL3Status As System.Windows.Forms.Label + Friend WithEvents lblDL3 As System.Windows.Forms.Label + Friend WithEvents pbDL3 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlFanart As System.Windows.Forms.Panel + Friend WithEvents chkThumb As System.Windows.Forms.CheckBox + Friend WithEvents chkMid As System.Windows.Forms.CheckBox + Friend WithEvents chkOriginal As System.Windows.Forms.CheckBox + Friend WithEvents btnPreview As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.IMDB.Data/Scraper/dlgImgSelect.resx b/Addons/scraper.IMDB.Data/Scraper/dlgImgSelect.resx new file mode 100644 index 0000000..e4a4f58 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/dlgImgSelect.resx @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnPreview.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA + CwAB5DetvwAAAuRJREFUOE+lkltsS3Ecx3+ILAsPFrfEyxJPXkh0bokg4UG78TQNI5FImPBAJKiNhBAy + MTwRMRJ1ibsZ29jc2t00Vrq1p3q6tqft6Tk9t87YeLCHff3/3Sp4dZJPvv/f5fs7///5HwJA/8Nv88jw + 8ApD1y+blnnNtKwGjmXl/qCQMxt+fB9xjI2NEYdGR0dp9OfP6Yph+gOKjpBmMcy8CoxwPi5gok81kDGt + BPOUci+xt1LO0Gy+ZAZuUcbtCe4NpHEtLKNBkHGfrQt5dySNrpSKIcvcbJkmka5pNKhrtrfxFE71RlD3 + UcT5gIjt7THMvhLHTEZlSwz1n0ScZTXe8yKextec6TRNY3zAF0O3tUYl7Ovqh+t9EHs8IRSdC4FO9+WZ + VBfEjlchHPEF8z2PRQnDg9b4AE3L0hA7wqNwDFWvP2Cn1w9Hox90zAc6McFRH9Y97MWuDn++56YwgJEc + G2CwAdmsSkPsCLf6I1jb3IUNL3sY3Zhxxgs67AG5PCg+4YW9uRsbWY33XAp8xrBlOHVdI1IVhb5oWdv1 + QBjLn3qwtqUDq5s6MOd0O2jfizwlx9uwqtGLdazGey76Q/hm6k4tmyXKyDLlVMV29aOApU0erHnWgWmH + noF2NYL2Ph2nuhFF+5uw8okXy1hP/YcghjTVqSgZoqQkkZZK2m58ErDouRfzLjSDKt2grbf+ZpMbJSeb + sPA520FvCINqxinLaaKoKHJsETGK1rCIh+8F3HnTh7vvgrjHbqMAjx/0CGiNDCAqJZGUEk45zQYk4nG+ + i7LPgoBkNIpsOglTzcDSFOQ0FTmdwdRiyvNqKolELAZZlre0t7URLSkro21VVSVdnZ1pSZKQSqXAPizY + /wHDMMCuKg+Ps6oKJZNBsL//6+7q6gWTaPzhWjx31qzF5Xb7Acf69S6mNRV2e22Fw1G7gcGVUcPyro3l + 5Qfnl5auYZ4Zk7l3ClsxuBQGTszNx/9SqHHDVG76BaMnpgu1OH2ZAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/Scraper/dlgImgSelect.vb b/Addons/scraper.IMDB.Data/Scraper/dlgImgSelect.vb new file mode 100644 index 0000000..7e37076 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/dlgImgSelect.vb @@ -0,0 +1,1309 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgImgSelect + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker + + Private CachePath As String = String.Empty + Private chkImage() As CheckBox + Private DLType As Enums.ImageType + Private ETHashes As New List(Of String) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + Private IMPA As New IMPA.Scraper + Private IMPAPosters As New List(Of MediaContainers.Image) + Private isEdit As Boolean = False + Private isShown As Boolean = False + Private iTop As Integer = 5 + Private lblImage() As Label + Private MPDB As New MPDB.Scraper + Private MPDBPosters As New List(Of MediaContainers.Image) + Private noImages As Boolean = False + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private PreDL As Boolean = False + Private Results As New Containers.ImgResult + Private selIndex As Integer = -1 + Private TMDB As New TMDB.Scraper + Private TMDBPosters As New List(Of MediaContainers.Image) + Private tMovie As New Structures.DBMovie + Private tmpImage As New MediaContainers.Image + Private _impaDone As Boolean = True + Private _mpdbDone As Boolean = True + Private _tmdbDone As Boolean = True + Private selURL As String = "" + +#End Region 'Fields + +#Region "Events" + + Private Event IMPADone() + + Private Event MPDBDone() + + Private Event TMDBDone() + +#End Region 'Events + +#Region "Methods" + + Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.PreDL = True + Me.SetUp() + Me.StartDownload() + End Sub + + Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult + '// + ' Overload to pass data + '\\ + + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.isShown = True + + MyBase.ShowDialog() + Return Results + End Function + + Public Overloads Function ShowDialog() As Containers.ImgResult + Me.isShown = True + MyBase.ShowDialog() + + Return Results + End Function + + 'Rewrite to simplify + Private Sub AddImage(ByVal iImage As Image, ByVal sDescription As String, ByVal iIndex As Integer, ByVal sURL As String, ByVal isChecked As Boolean, poster As MediaContainers.Image) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(256, 286) + Me.pbImage(iIndex).Size = New Size(250, 250) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.pnlImage(iIndex).Tag = poster + Me.pbImage(iIndex).Tag = poster + Me.pbImage(iIndex).Image = iImage + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.pnlBG.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If Me.DLType = Enums.ImageType.Fanart Then + ReDim Preserve Me.chkImage(iIndex) + Me.chkImage(iIndex) = New CheckBox() + Me.chkImage(iIndex).Name = iIndex.ToString + Me.chkImage(iIndex).Size = New Size(250, 30) + Me.chkImage(iIndex).AutoSize = False + Me.chkImage(iIndex).BackColor = Color.White + Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + 'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + Me.chkImage(iIndex).Left = 0 + Me.chkImage(iIndex).Top = 250 + Me.chkImage(iIndex).Checked = isChecked + Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve Me.lblImage(iIndex) + Me.lblImage(iIndex) = New Label() + Me.lblImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Size = New Size(250, 30) + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + If IsTMDBURL(sURL) Then + Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + Else + Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + End If + Me.lblImage(iIndex).Tag = poster + Me.lblImage(iIndex).Left = 0 + Me.lblImage(iIndex).Top = 250 + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 301 + Else + Me.iLeft += 271 + End If + End Sub + + Private Sub AllDoneDownloading() + If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone Then + Me.pnlDLStatus.Visible = False + Me.TMDBPosters.AddRange(Me.IMPAPosters) + Me.TMDBPosters.AddRange(Me.MPDBPosters) + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + End If + End Sub + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + PreviewImage() + End Sub + Private Sub PreviewImage() + Try + Dim tImage As New Images + + Me.pnlSinglePic.Visible = True + Application.DoEvents() + + Select Case True + Case rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + Case rbLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + Case rbMedium.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case rbSmall.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End Select + + Me.pnlSinglePic.Visible = False + + If Not IsNothing(tImage.Image) Then + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image) + + End If + + tImage.Dispose() + tImage = Nothing + + Catch ex As Exception + Me.pnlSinglePic.Visible = False + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork + '// + ' Thread to download impa posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + + For i As Integer = 0 To Me.IMPAPosters.Count - 1 + If bwIMPADownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL) + Try + Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL) + Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg"))) + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL2.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPADownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._impaDone = True + RaiseEvent IMPADone() + End If + End Sub + + Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.MPDBPosters.Count - 1 + Try + If Me.bwMPDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL) + Try + Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL) + Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg"))) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL3.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._mpdbDone = True + RaiseEvent MPDBDone() + End If + End Sub + + Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork + '// + ' Thread to download tmdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + Dim thumbLink As String = String.Empty + Dim savePath As String = String.Empty + Dim extrathumbSize As String = String.Empty + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + 'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all. + Dim posters As MediaContainers.Image() + If Me.DLType = Enums.ImageType.Fanart Then + posters = TMDBPosters.Where(Function(s) s.Description = extrathumbSize).ToArray() + Else + posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray() + End If + + Dim percent = 100 / posters.Count + For i As Integer = 0 To posters.Count - 1 + Try + If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then + If Me.bwTMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwTMDBDownload.ReportProgress(Convert.ToInt32((i + 1) * percent), posters(i).URL) + Try + posters(i).WebImage.FromWeb(posters(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then + If Me.DLType = Enums.ImageType.Fanart Then + + + If Not posters(i).URL.Contains("-thumb.") Then + Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org" + thumbLink = RemoveServerURL(posters(i).URL) + 'If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("-poster.", "-thumb.") + thumbLink = thumbLink.Replace("-original.", "-thumb.") + ''Else + 'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb") + 'End If + Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Else + Me.Results.Posters.Add(posters(i).URL) + End If + End If + If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then + Try + posters(i).URL = Me.CleanTMDBURL(posters(i).URL) + + savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg")) + posters(i).WebImage.Save(savePath) + + If Master.eSettings.AutoET Then + Dim tSize As New Enums.FanartSize + Select Case posters(i).Description.ToLower + Case "original" + tSize = Enums.FanartSize.Lrg + Case "mid" + tSize = Enums.FanartSize.Mid + Case "thumb" + tSize = Enums.FanartSize.Small + End Select + If Master.eSettings.AutoETSize = tSize Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + posters(i).isChecked = True + End If + End If + End If + + Catch + End Try + End If + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL1Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL1.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._tmdbDone = True + RaiseEvent TMDBDone() + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + IMPA.Cancel() + MPDB.Cancel() + TMDB.Cancel() + + If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync() + If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync() + If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync() + + While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean) + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Text.ToLower.Contains(sType) Then + Me.chkImage(i).Checked = Checked + End If + Next + End Sub + + Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged + Me.CheckAll("(poster)", chkMid.Checked) + End Sub + + Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged + Me.CheckAll("(original)", chkOriginal.Checked) + End Sub + + Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged + Me.CheckAll("(thumb)", chkThumb.Checked) + End Sub + + Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'Me.tmpImage.Dispose() + + IMPA = Nothing + MPDB = Nothing + TMDB = Nothing + + IMPAPosters = Nothing + MPDBPosters = Nothing + TMDBPosters = Nothing + End Sub + + Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath) + End Sub + + Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not PreDL Then SetUp() + End Sub + + Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Try + Application.DoEvents() + If Not PreDL Then + StartDownload() + ElseIf noImages Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image) + Try + 'set all pnl colors to white first + 'remove all the current genres + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(i).BackColor = Color.White + Me.chkImage(i).ForeColor = Color.Black + Else + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + End If + Next + + 'set selected pnl color to blue + Me.pnlImage(iIndex).BackColor = Color.Blue + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(iIndex).BackColor = Color.Blue + Me.chkImage(iIndex).ForeColor = Color.White + Else + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + End If + + Me.selIndex = iIndex + Me.selURL = poster.URL + + Me.pnlSize.Visible = False + + If IsTMDBURL(poster.URL) Then + Me.SetupSizes(poster.ParentID) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + Me.OK_Button.Enabled = False + Else + Me.OK_Button.Focus() + End If + Me.tmpImage.Clear() + Else + Me.rbXLarge.Checked = False + Me.rbLarge.Checked = False + Me.rbMedium.Checked = False + Me.rbSmall.Checked = False + Me.OK_Button.Enabled = True + Me.OK_Button.Focus() + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function IsTMDBURL(ByVal sURL As String) As Boolean + If sURL.ToLower.Contains("themoviedb.org") OrElse sURL.ToLower.Contains("d3gtl9l2a4fn1j.cloudfront.net") OrElse sURL.ToLower.Contains("cf1.imgobject.com") OrElse sURL.ToLower.Contains("cf2.imgobject.com") Then + Return True + Else + Return False + End If + End Function + + Private Function CleanTMDBURL(ByVal sURL As String) As String + If IsTMDBURL(sURL) Then + Dim _sURL As New Uri(sURL) + sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped)) + Else + sURL = StringUtils.TruncateURL(sURL, 40, True) + End If + Return sURL.Replace(":", "$c$").Replace("/", "$s$") + End Function + + + Private Sub GetFanart() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim di As New DirectoryInfo(CachePath) + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + If Not IsNothing(tImage.WebImage.Image) Then + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + 'Case sFile.Name.Contains("(mid)") + ' tImage.Description = "mid" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + End If + Next + ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Me.lblDL1.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL1Status.Text = String.Empty + Me.pbDL1.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me.TMDB.GetImagesAsync(tMovie.Movie.IMDBID, "backdrop") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub GetPosters() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim lFi As New List(Of FileInfo) + Dim di As New DirectoryInfo(CachePath) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Height = 75 + Me.pnlDLStatus.Top = 207 + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + Next + ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + Me.lblDL1.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL1Status.Text = String.Empty + Me.pbDL1.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.IMDBID, "poster") + Else + Me.lblDL1.Text = Master.eLang.GetString(33, "TheMovieDB.com is not enabled") + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + Me.lblDL2.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._impaDone = False + + Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL2.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled") + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + Me.lblDL3.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._mpdbDone = False + + Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL3.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPADoneDownloading() + Try + Me._impaDone = True + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL2.Value = 0 + + Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = Posters.Count + + Me.IMPAPosters = Posters + + Me.bwIMPADownload.WorkerSupportsCancellation = True + Me.bwIMPADownload.WorkerReportsProgress = True + Me.bwIMPADownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAProgressUpdated(ByVal iPercent As Integer) + Me.pbDL2.Value = iPercent + End Sub + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then + pnlBG.VerticalScroll.Value += 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum + End If + Else + If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then + pnlBG.VerticalScroll.Value -= 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub MPDBDoneDownloading() + Try + Me._mpdbDone = True + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL3.Value = 0 + + Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = Posters.Count + + Me.MPDBPosters = Posters + + Me.bwMPDBDownload.WorkerSupportsCancellation = True + Me.bwMPDBDownload.WorkerReportsProgress = True + Me.bwMPDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL3.Value = iPercent + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + Dim tmpPathPlus As String = String.Empty + Dim extrathumbSize As String + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + If DLType = Enums.ImageType.Fanart Then + tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") + Else + tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") + End If + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + 'Me.tmpImage.Save(tmpPathPlus, 100, selURL) + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + 'Me.tmpImage.Save(tmpPathPlus, 100, selURL) + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If + + If Me.DLType = Enums.ImageType.Fanart Then + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + Dim isChecked As Boolean = False + + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + isChecked = True + Exit For + End If + Next + + If isChecked Then + Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs") + If isEdit Then + extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName) + Else + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName) + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName) + Else + extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName) + End If + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + End If + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + Dim fsET As FileStream + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) + Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg) + fsET.Close() + iVal += 1 + End If + Next + fsET = Nothing + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + Try + 'If Me.DLType = Enums.ImageType.Fanart OrElse Not IsTMDBURL(DirectCast(sender, PictureBox).Tag.ToString) Then + 'ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(DirectCast(sender, PictureBox).Image) + 'Else + PreviewImage() + 'End If + Catch + End Try + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Panel).Name), DirectCast(DirectCast(sender, Panel).Tag, MediaContainers.Image)) + End Sub + + Private Sub ProcessPics(ByVal posters As List(Of MediaContainers.Image)) + Try + Dim iIndex As Integer = 0 + + 'remove all entries with invalid images + If Master.eSettings.UseImgCache Then + For i As Integer = posters.Count - 1 To 0 Step -1 + If IsNothing(posters.Item(i).WebImage.Image) Then + posters.RemoveAt(i) + End If + Next + End If + + If posters.Count > 0 Then + For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) RemoveServerURL(p.URL)) + If Not IsNothing(xPoster.WebImage.Image) AndAlso (Me.DLType = Enums.ImageType.Fanart OrElse Not (IsTMDBURL(xPoster.URL) AndAlso Not xPoster.Description = "cover")) Then + Me.AddImage(xPoster.WebImage.Image, xPoster.Description, iIndex, xPoster.URL, xPoster.isChecked, xPoster) + iIndex += 1 + End If + Next + Else + If Not Me.PreDL OrElse isShown Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Else + noImages = True + End If + End If + + Me.Activate() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub rbLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbMedium_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbMedium.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbSmall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSmall.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbXLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbXLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub SetUp() + Try + IMPA.IMDBURL = IMDBURL + TMDB.IMDBURL = IMDBURL + MPDB.IMDBURL = IMDBURL + AddHandler TMDB.PostersDownloaded, AddressOf TMDBPostersDownloaded + AddHandler TMDB.ProgressUpdated, AddressOf TMDBProgressUpdated + AddHandler IMPA.PostersDownloaded, AddressOf IMPAPostersDownloaded + AddHandler IMPA.ProgressUpdated, AddressOf IMPAProgressUpdated + AddHandler MPDB.PostersDownloaded, AddressOf MPDBPostersDownloaded + AddHandler MPDB.ProgressUpdated, AddressOf MPDBProgressUpdated + AddHandler IMPADone, AddressOf IMPADoneDownloading + AddHandler TMDBDone, AddressOf TMDBDoneDownloading + AddHandler MPDBDone, AddressOf MPDBDoneDownloading + + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlBG.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlBG) + + If Me.DLType = Enums.ImageType.Posters Then + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Else + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlDLStatus.Height = 75 + Me.pnlDLStatus.Top = 207 + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(tMovie.Filename) + End If + End If + + CachePath = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, tMovie.Movie.IMDBID, Path.DirectorySeparatorChar, If(Me.DLType = Enums.ImageType.Posters, "posters", "fanart")) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview", True) + Me.chkThumb.Text = Master.eLang.GetString(41, "Check All Thumb") + Me.chkMid.Text = Master.eLang.GetString(42, "Check All Mid") + Me.chkOriginal.Text = Master.eLang.GetString(43, "Check All Original") + Me.lblInfo.Text = Master.eLang.GetString(44, "Selected item will be set as fanart. All checked items will be saved to \extrathumbs.") + Me.lblDL3.Text = Master.eLang.GetString(45, "Performing Preliminary Tasks...") + Me.lblDL2.Text = Me.lblDL3.Text + Me.lblDL1.Text = Me.lblDL3.Text + Me.Label2.Text = Master.eLang.GetString(46, "Downloading Selected Image...") + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(0, sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Function RemoveServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Sub SetupSizes(ByVal ParentID As String) + Try + rbXLarge.Checked = False + rbXLarge.Enabled = False + rbXLarge.Text = Master.eLang.GetString(47, "Original") + rbLarge.Checked = False + rbLarge.Enabled = False + rbMedium.Checked = False + rbSmall.Checked = False + rbSmall.Enabled = False + If Me.DLType = Enums.ImageType.Fanart Then + rbLarge.Text = "w1280" + rbMedium.Text = "poster" + rbSmall.Text = "thumb" + Else + rbLarge.Text = Master.eLang.GetString(48, "Cover") + rbMedium.Text = Master.eLang.GetString(49, "Medium") + rbSmall.Text = Master.eLang.GetString(50, "Small") + End If + + For Each TMDBPoster As MediaContainers.Image In TMDBPosters.Where(Function(f) f.ParentID = ParentID) + Select Case TMDBPoster.Description + Case "original" + ' xlarge + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbXLarge.Enabled = True + rbXLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "cover" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "w1280" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format("w1280 ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + End If + Case "thumb" + ' small + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbSmall.Enabled = True + rbSmall.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "mid" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + Case "poster" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format("Poster ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + End Select + Next + + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Small + rbSmall.Checked = rbSmall.Enabled + Case Enums.PosterSize.Mid + rbMedium.Checked = rbMedium.Enabled + Case Enums.PosterSize.Lrg + rbLarge.Checked = rbLarge.Enabled + Case Enums.PosterSize.Xlrg + rbXLarge.Checked = rbXLarge.Enabled + End Select + + pnlSize.Visible = True + + Invalidate() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub StartDownload() + Try + Select Case Me.DLType + Case Enums.ImageType.Posters + Me.GetPosters() + Case Enums.ImageType.Fanart + Me.GetFanart() + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBDoneDownloading() + Try + If Me.DLType = Enums.ImageType.Posters Then + Me._tmdbDone = True + Me.AllDoneDownloading() + Else + Me.pnlDLStatus.Visible = False + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL1.Value = 0 + + Me.lblDL1.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL1Status.Text = String.Empty + + TMDBPosters = Posters + Me.pbDL1.Maximum = 100 + + Me.bwTMDBDownload.WorkerSupportsCancellation = True + Me.bwTMDBDownload.WorkerReportsProgress = True + Me.bwTMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL1.Value = iPercent + End Sub + +#End Region 'Methods +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.IMDB.Data/Scraper/dlgTrailer.Designer.vb new file mode 100644 index 0000000..2871b29 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/dlgTrailer.Designer.vb @@ -0,0 +1,292 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.btnPlayBrowser = New System.Windows.Forms.Button() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(350, 340) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(120, 23) + Me.OK_Button.TabIndex = 6 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(350, 369) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(120, 23) + Me.Cancel_Button.TabIndex = 7 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(445, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(458, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(122, 60) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(130, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(445, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(410, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(395, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(71, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(426, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(151, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 369) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(120, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(224, 340) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(120, 23) + Me.btnSetNfo.TabIndex = 5 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(478, 331) + Me.Panel1.TabIndex = 2 + ' + 'btnPlayBrowser + ' + Me.btnPlayBrowser.Enabled = False + Me.btnPlayBrowser.Location = New System.Drawing.Point(12, 340) + Me.btnPlayBrowser.Name = "btnPlayBrowser" + Me.btnPlayBrowser.Size = New System.Drawing.Size(120, 23) + Me.btnPlayBrowser.TabIndex = 4 + Me.btnPlayBrowser.Text = "Open In Browser" + Me.btnPlayBrowser.UseVisualStyleBackColor = True + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(484, 398) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Controls.Add(Me.btnPlayBrowser) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lbTrailers As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnPlayTrailer As System.Windows.Forms.Button + Friend WithEvents btnSetNfo As System.Windows.Forms.Button + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtYouTube As System.Windows.Forms.TextBox + Friend WithEvents btnBrowse As System.Windows.Forms.Button + Friend WithEvents txtManual As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog + Friend WithEvents btnGetTrailers As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents btnPlayBrowser As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.IMDB.Data/Scraper/dlgTrailer.resx b/Addons/scraper.IMDB.Data/Scraper/dlgTrailer.resx new file mode 100644 index 0000000..f08e020 --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/dlgTrailer.resx @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnGetTrailers.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAK + 6QAACukB/XXO0wAAABh0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzT7MfTgAAAfdJREFUOE+lkk1r + E1EUhi9apQsr7vwDigUXLtzpyrWlpdD8BSEbN1p1IRJQqNXoarCNH03aKlgQjU1ahCr2a6HSRRszGSe0 + 4nQ+M9/JjIhYeb25JGVGmo0OPMw5h/M+9zIMAfBfxBpd07osyzxv21aCMuTY9pDnugmhUjkX3YsSa8xa + 7ToVgIZBw4wgaGBlZRn376WHo7ttYg0NjzfDTODYcB0H38MQS0uLuDM6isz42NXofpNYQwXc7uktge95 + 0FQVxcIs5opFfPr44UI0s6cgeoO2JAwD1Ot+c56NZmIC+g2YwLJN+E6A0NtB6O/AdwMmbTEWzcQEhq5z + plmjgRBflDeYF5IMQZ5nMya3zM4CVVU4XdfQcH/hffUmbi0TxjvxBr3NbzTlhqF3FsjyNqcoMjzzB94K + aaQWjzAWhNuo2z9B/xOoitJZ8HVri5MkCbZWx1zpLoYXjjIKpRE4RgOKLGNbkjoL+HL5gbSpYGL1GpL5 + Y7hYOMlI5o/j0eolqN8MVEUxE83EBBvr6yP8Zx4b5TVceTWIRK6XcfllP0qVNYiCiArPp6OZ3WI/IYf6 + +/pO5bITmfzM6+e5Z9mps6ne6pnUic0nTx9Pz74ozkxPTT4cHBg4vY+Qw3sJDhBCutmQPq13DyFdPX/N + uunuwWbN+nbxb4D8AU3a+lQSEAyqAAAAAElFTkSuQmCC +</value> + </data> + <data name="btnPlayTrailer.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9kEGhIhAdf7pBcAAAJDSURBVDhPtVJLa5pBFPWxsGoQNI2oAY1ogigI + GitIULQufKxcBGmzLLpwo9B/UOgmv6GKuxDdCCKIGyOBLIpE8IWIaBauFEQSwcfCuZ07PkIogW564HDn + m7nnzHxzhvNfsFwuE5PJ5HelUnm5u7ubDYfD5ng8/kGXDjYd7+Dp6elTv9+fJxIJcDgcJBAIQDAYhIuL + CxKLxaDdbkOhUPiybX8LFJdKJdBoNOT8/BxcLheYzWaw2WyA30i9Xk+y2SxkMplvW9kr6M4LWohEIoHj + 42MIh8OQy+VAJpOBSqVic1KpFLCnVquBQqFQMyFisVh8x+PS4Z4ejwcQ6XSafXO53P2a1WqFer1+Q8cb + zOfzKi2Ect+Ev7BDKpXaz+/YarVeaN2gWq3OaAEejwd8Pp/R7XYz8Xq9ZjWZTDLh7iTlchnrR8pXA6FQ + CCKRCMRiMfh8PiYkhDCT5+dnODo6AoFAwAxoxFhVqOdMp9MWdSZ4SYeHhyCXyyEUCjEDFNN1TIddKF4y + GjSbzRWtH5jBaDT6eXl5CUqlEtRqNWi1Wri6umIGuDPGeXJywpJAc6fTCff392Um3uKAxogGxGAwMEEk + EoHVasXSsFgsYDKZ8B3gCUmj0QCdTufeajfI5/NfHx4ewGg0EvoKmQGeyuv1sh3tdjucnp6SYrEI19fX + v7ayt7i9vY3SFwnxeJzF6Pf72WWiQTQahW63+754B/qf6sfHx5vBYDDrdDqA7PV6Kxpb5ezs7PO27Z/A + pZRTYlRCnPgbHM4fFEdnm0hssg4AAAAASUVORK5CYII= +</value> + </data> + <metadata name="ofdTrailer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>40</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/Scraper/dlgTrailer.vb b/Addons/scraper.IMDB.Data/Scraper/dlgTrailer.vb new file mode 100644 index 0000000..67c25ca --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/dlgTrailer.vb @@ -0,0 +1,480 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgTrailer + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwCompileList As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwDownloadTrailer As New System.ComponentModel.BackgroundWorker + + Private cTrailer As New Trailers + Private imdbID As String = String.Empty + Private prePath As String = String.Empty + Private sPath As String = String.Empty + Private tArray As New List(Of String) + Private tURL As String = String.Empty + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal _imdbID As String, ByVal _sPath As String) As String + Me.imdbID = _imdbID + Me.sPath = _sPath + + If MyBase.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + Return Replace(Me.tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + Return Me.tURL + End If + Else + Return String.Empty + End If + End Function + + Protected Overrides Sub Finalize() + cTrailer = Nothing + MyBase.Finalize() + End Sub + + Private Sub BeginDownload(ByVal CloseDialog As Boolean) + Dim didCancel As Boolean = False + + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(56, "Downloading selected trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + If CloseDialog Then + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, Path.GetFileName(Me.prePath)) + FileUtils.Common.MoveFileWithStream(Me.prePath, Me.tURL) + + File.Delete(Me.prePath) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.prePath, """")) + didCancel = True + End If + ElseIf Me.txtManual.Text.Length > 0 Then + Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + If CloseDialog Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.txtManual.Text, """")) + didCancel = True + End If + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + didCancel = True + End If + ElseIf Regex.IsMatch(Me.txtYouTube.Text, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.txtYouTube.Text) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + ElseIf StringUtils.isValidURL(Me.txtYouTube.Text) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = Me.txtYouTube.Text, .bType = CloseDialog}) + Else + If Regex.IsMatch(Me.lbTrailers.SelectedItem.ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.lbTrailers.SelectedItem.ToString) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + Else + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = lbTrailers.SelectedItem.ToString, .bType = CloseDialog}) + End If + End If + + If didCancel Then + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + End Sub + + Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click + Try + With ofdTrailer + .InitialDirectory = Directory.GetParent(Master.currMovie.Filename).FullName + .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.ValidExts.ToArray(), ";*")) + .FilterIndex = 0 + End With + + If ofdTrailer.ShowDialog() = DialogResult.OK Then + txtManual.Text = ofdTrailer.FileName + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub btnGetTrailers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTrailers.Click + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.pnlStatus.Visible = True + + Me.bwCompileList = New System.ComponentModel.BackgroundWorker + Me.bwCompileList.WorkerSupportsCancellation = True + Me.bwCompileList.RunWorkerAsync() + End Sub + + Private Sub btnPlayTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayTrailer.Click + Try + Me.BeginDownload(False) + Catch + MsgBox(Master.eLang.GetString(58, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), MsgBoxStyle.Critical, Master.eLang.GetString(59, "Error Playing Trailer")) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Try + End Sub + + Private Sub btnPlayBrowser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayBrowser.Click + If Not String.IsNullOrEmpty(Me.txtYouTube.Text) Then + If Master.isWindows Then + Process.Start(Me.txtYouTube.Text) + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = Me.txtYouTube.Text + Explorer.Start() + End Using + End If + Else + If Master.isWindows Then + Process.Start(Me.lbTrailers.SelectedItem.ToString) + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = Me.lbTrailers.SelectedItem.ToString + Explorer.Start() + End Using + End If + End If + End Sub + + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click + + If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(62, "Moving specified file to trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + File.Move(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + Else + Dim didCancel As Boolean = False + + If StringUtils.isValidURL(Me.txtYouTube.Text) Then + tURL = Me.txtYouTube.Text + ElseIf Me.lbTrailers.SelectedItems.Count > 0 Then + tURL = lbTrailers.SelectedItem.ToString + Else + didCancel = True + End If + + If Not didCancel Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + + End Sub + + Private Sub bwCompileList_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwCompileList.DoWork + Try + tArray = cTrailer.GetTrailers(Me.imdbID, False) + + If Me.bwCompileList.CancellationPending Then + e.Cancel = True + End If + Catch + End Try + End Sub + + Private Sub bwCompileList_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwCompileList.RunWorkerCompleted + If Not e.Cancelled Then + If Me.tArray.Count > 0 Then + For Each tTrail As String In Me.tArray + Me.lbTrailers.Items.Add(tTrail) + Next + + Me.btnGetTrailers.Visible = False + Else + Me.btnGetTrailers.Enabled = False + End If + + End If + + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Sub + + Private Sub bwDownloadTrailer_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTrailer.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + + If Args.bType Then + Me.tURL = cTrailer.DownloadTrailer(Me.sPath, Args.Parameter) + Else + Me.prePath = cTrailer.DownloadTrailer(Path.Combine(Master.TempPath, Path.GetFileName(Me.sPath)), Args.Parameter) + End If + + Catch + End Try + + e.Result = Args.bType + + If Me.bwDownloadTrailer.CancellationPending Then + e.Cancel = True + End If + End Sub + + Private Sub bwDownloadTrailer_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwDownloadTrailer.ProgressChanged + pbStatus.Value = e.ProgressPercentage + End Sub + + Private Sub bwDownloadTrailer_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadTrailer.RunWorkerCompleted + If Not e.Cancelled Then + If Convert.ToBoolean(e.Result) Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + If Not String.IsNullOrEmpty(Me.prePath) Then System.Diagnostics.Process.Start(String.Concat("""", prePath, """")) + End If + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.cTrailer.Cancel() + + If Me.bwCompileList.IsBusy Then Me.bwCompileList.CancelAsync() + If Me.bwDownloadTrailer.IsBusy Then Me.bwDownloadTrailer.CancelAsync() + + While Me.bwCompileList.IsBusy OrElse Me.bwDownloadTrailer.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + cTrailer.IMDBURL = IMDBURL + AddHandler cTrailer.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + + Private Sub dlgTrailer_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub DownloadProgressUpdated(ByVal iProgress As Integer) + bwDownloadTrailer.ReportProgress(iProgress) + End Sub + + Private Sub lbTrailers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbTrailers.SelectedIndexChanged + Me.SetEnabled(True) + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.BeginDownload(True) + End Sub + + Private Sub SetEnabled(ByVal DeletePre As Boolean) + If DeletePre AndAlso Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + File.Delete(Me.prePath) + Me.prePath = String.Empty + End If + + If StringUtils.isValidURL(Me.txtYouTube.Text) OrElse Me.lbTrailers.SelectedItems.Count > 0 OrElse Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Enabled = True + Me.btnSetNfo.Enabled = True + Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.btnPlayBrowser.Enabled = False + Else + Me.btnPlayBrowser.Enabled = True + End If + If Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") + Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") + Else + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + Else + Me.OK_Button.Enabled = False + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(64, "Select Trailer") + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.GroupBox1.Text = Master.eLang.GetString(65, "Select Trailer to Download") + Me.GroupBox2.Text = Master.eLang.GetString(66, "Manual Trailer Entry") + Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") + Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") + Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnPlayBrowser.Text = Master.eLang.GetString(114, "Open In Browser") + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") + End Sub + + Private Sub txtManual_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtManual.TextChanged + Me.SetEnabled(True) + End Sub + + Private Sub txtYouTube_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtYouTube.TextChanged + Me.SetEnabled(True) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim bType As Boolean + Dim Parameter As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.IMDB.Data/Scraper/dlgTrailerFormat.Designer.vb new file mode 100644 index 0000000..8d135fa --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/dlgTrailerFormat.Designer.vb @@ -0,0 +1,155 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailerFormat + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(72, 187) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(145, 187) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(4, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(170, 121) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(10, 8) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(180, 151) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(12, 75) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(12, 12) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(200, 169) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 217) + Me.Controls.Add(Me.pnlStatus) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lstFormats As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.IMDB.Data/Scraper/dlgTrailerFormat.resx b/Addons/scraper.IMDB.Data/Scraper/dlgTrailerFormat.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/dlgTrailerFormat.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/Scraper/dlgTrailerFormat.vb b/Addons/scraper.IMDB.Data/Scraper/dlgTrailerFormat.vb new file mode 100644 index 0000000..8f0ad6e --- /dev/null +++ b/Addons/scraper.IMDB.Data/Scraper/dlgTrailerFormat.vb @@ -0,0 +1,114 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTrailerFormat + +#Region "Fields" + + Private WithEvents YouTube As YouTube.Scraper + Private _selectedformaturl As String + Private _yturl As String + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal YTURL As String) As String + Me._yturl = YTURL + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return _selectedformaturl + Else + Return String.Empty + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailerFormat_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + Me.SetUp() + + lstFormats.DataSource = Nothing + + YouTube = New YouTube.Scraper + YouTube.GetVideoLinksAsync(Me._yturl) + + Catch ex As Exception + MsgBox(Master.eLang.GetString(71, "The video format links could not be retrieved."), MsgBoxStyle.Critical, Master.eLang.GetString(72, "Error Retrieving Video Format Links")) + End Try + End Sub + + Private Sub lstFormats_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFormats.SelectedIndexChanged + Try + Me._selectedformaturl = DirectCast(lstFormats.SelectedItem, YouTube.VideoLinkItem).URL + + If Me.lstFormats.SelectedItems.Count > 0 Then + Me.OK_Button.Enabled = True + Else + Me.OK_Button.Enabled = False + End If + Catch + End Try + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(73, "Select Format") + Me.lblStatus.Text = Master.eLang.GetString(74, "Getting available formats...") + Me.GroupBox1.Text = Master.eLang.GetString(75, "Available Formats") + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub YouTube_VideoLinksRetrieved(ByVal bSuccess As Boolean) Handles YouTube.VideoLinksRetrieved + Try + + If bSuccess Then + lstFormats.DataSource = YouTube.VideoLinks.Values.ToList + lstFormats.DisplayMember = "Description" + lstFormats.ValueMember = "URL" + + If YouTube.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + Me.lstFormats.SelectedIndex = YouTube.VideoLinks.IndexOfKey(Master.eSettings.PreferredTrailerQuality) + ElseIf Me.lstFormats.Items.Count = 1 Then + Me.lstFormats.SelectedIndex = 0 + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + Me.pnlStatus.Visible = False + Me.lstFormats.Enabled = True + End Try + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/TVScraper/clsScrapeTVDB.vb b/Addons/scraper.IMDB.Data/TVScraper/clsScrapeTVDB.vb new file mode 100644 index 0000000..b0f8531 --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/clsScrapeTVDB.vb @@ -0,0 +1,1911 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Data +Imports System.IO +Imports System.Text + +Imports ICSharpCode.SharpZipLib.Zip +Imports EmberAPI + +Public Class Scraper + +#Region "Fields" + + Public Const APIKey As String = "7B090234F418D074" + + Public Shared WithEvents sObject As New ScraperObject + Public Shared tEpisodes As New List(Of MediaContainers.EpisodeDetails) + Public Shared tmpTVDBShow As New TVDBShow + Public Shared TVDBImages As New TVImages + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + AddHandler sObject.ScraperEvent, AddressOf InnerEvent + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + +#End Region 'Events + +#Region "Methods" + + Public Sub CancelAsync() + sObject.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String) As MediaContainers.EpisodeDetails + Return sObject.ChangeEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .TVDBID = TVDBID, .SelectedLang = Lang, .iSeason = -999}) + End Function + + Public Function GetLangs(ByVal sMirror As String) As List(Of Containers.TVLanguage) + Dim tvdbLangs As New List(Of Containers.TVLanguage) + Dim cLang As Containers.TVLanguage + Dim xmlTVDB As XDocument + Dim sHTTP As New HTTP + + Dim apiXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/languages.xml", sMirror, APIKey)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(apiXML) Then + Try + xmlTVDB = XDocument.Parse(apiXML) + Catch + Return tvdbLangs + End Try + + Dim xLangs = From xLanguages In xmlTVDB.Descendants("Language") + + For Each xL As XElement In xLangs + cLang = New Containers.TVLanguage + cLang.LongLang = xL.Element("name").Value + cLang.ShortLang = xL.Element("abbreviation").Value + tvdbLangs.Add(cLang) + Next + End If + Return tvdbLangs + End Function + + Public Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As MediaContainers.EpisodeDetails + Return sObject.GetSingleEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .TVDBID = TVDBID, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Function + + Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images) As Images + Return sObject.GetSingleImage(New Structures.ScrapeInfo With {.ShowTitle = Title, .ShowID = ShowID, .TVDBID = TVDBID, .ImageType = Type, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .CurrentImage = CurrentImage}) + End Function + + Public Sub InnerEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent ScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Function IsBusy() As Boolean + Return sObject.IsBusy + End Function + + Public Sub SaveImages() + sObject.SaveImages() + End Sub + + Public Sub ScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) + sObject.ScrapeEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .iEpisode = iEpisode, .iSeason = iSeason, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Sub + + Public Sub ScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) + sObject.ScrapeSeason(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .iSeason = iSeason, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Sub + + Public Sub SingleScrape(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) + sObject.SingleScrape(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options, .ScrapeType = ScrapeType, .WithCurrent = WithCurrent, .iSeason = -999}) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + <Serializable()> _ + Public Structure TVImages + +#Region "Fields" + + Dim AllSeasonPoster As TVDBShowPoster + Dim SeasonImageList As List(Of TVDBSeasonImage) + Dim ShowFanart As TVDBFanart + Dim ShowPoster As TVDBShowPoster + +#End Region 'Fields + +#Region "Methods" + + Public Function Clone() As TVImages + Dim newTVI As New TVImages + Try + Using ms As New IO.MemoryStream() + Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter() + bf.Serialize(ms, Me) + ms.Position = 0 + newTVI = DirectCast(bf.Deserialize(ms), TVImages) + ms.Close() + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return newTVI + End Function + +#End Region 'Methods + + End Structure + + Public Class ScraperObject + +#Region "Fields" + + Friend WithEvents bwTVDB As New System.ComponentModel.BackgroundWorker + + Private aXML As String = String.Empty + Private bXML As String = String.Empty + Private sXML As String = String.Empty + +#End Region 'Fields + +#Region "Events" + + Public Event ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + +#End Region 'Events + +#Region "Methods" + + Public Shared Sub LoadAllEpisodes(ByVal _ID As Integer, ByVal OnlySeason As Integer) + Try + + tmpTVDBShow = New TVDBShow + + tmpTVDBShow.Show = Master.DB.LoadTVFullShowFromDB(_ID) + tmpTVDBShow.AllSeason = Master.DB.LoadTVAllSeasonFromDB(_ID) + + Using SQLCount As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + If OnlySeason = 999 Then + SQLCount.CommandText = String.Concat("SELECT COUNT(ID) AS eCount FROM TVEps WHERE TVShowID = ", _ID, " AND Missing = 0;") + Else + SQLCount.CommandText = String.Concat("SELECT COUNT(ID) AS eCount FROM TVEps WHERE TVShowID = ", _ID, " AND Season = ", OnlySeason, " AND Missing = 0;") + End If + Using SQLRCount As SQLite.SQLiteDataReader = SQLCount.ExecuteReader + If Convert.ToInt32(SQLRCount("eCount")) > 0 Then + Using SQLCommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + If OnlySeason = 999 Then + SQLCommand.CommandText = String.Concat("SELECT ID, Lock FROM TVEps WHERE TVShowID = ", _ID, " AND Missing = 0;") + Else + SQLCommand.CommandText = String.Concat("SELECT ID, Lock FROM TVEps WHERE TVShowID = ", _ID, " AND Season = ", OnlySeason, " AND Missing = 0;") + End If + Using SQLReader As SQLite.SQLiteDataReader = SQLCommand.ExecuteReader + While SQLReader.Read + tmpTVDBShow.Episodes.Add(Master.DB.LoadTVEpFromDB(Convert.ToInt64(SQLReader("ID")), True)) + End While + End Using + End Using + End If + End Using + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub CancelAsync() + If bwTVDB.IsBusy Then bwTVDB.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal sInfo As Structures.ScrapeInfo) As MediaContainers.EpisodeDetails + Try + Dim tEpisodes As List(Of MediaContainers.EpisodeDetails) = Me.GetListOfKnownEpisodes(sInfo) + If tEpisodes.Count > 0 Then + Using dChangeEp As New dlgTVChangeEp + Return dChangeEp.ShowDialog(tEpisodes) + End Using + Else + MsgBox(Master.eLang.GetString(79, "There are no known episodes for this show. Scrape the show, season, or episode and try again."), MsgBoxStyle.OkOnly, Master.eLang.GetString(80, "No Known Episodes")) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return Nothing + End Function + + Public Sub DownloadSeries(ByVal sInfo As Structures.ScrapeInfo, Optional ByVal ImagesOnly As Boolean = False) + Try + Dim fPath As String = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, sInfo.SelectedLang, ".zip")) + Dim fExists As Boolean = File.Exists(fPath) + Dim doDownload As Boolean = False + + Select Case Master.eSettings.TVUpdateTime + Case Enums.TVUpdateTime.Always + doDownload = True + Case Enums.TVUpdateTime.Never + doDownload = False + Case Enums.TVUpdateTime.Week + If fExists AndAlso File.GetCreationTime(fPath).AddDays(7) < Now Then doDownload = True + Case Enums.TVUpdateTime.BiWeekly + If fExists AndAlso File.GetCreationTime(fPath).AddDays(14) < Now Then doDownload = True + Case Enums.TVUpdateTime.Month + If fExists AndAlso File.GetCreationTime(fPath).AddMonths(1) < Now Then doDownload = True + End Select + + If doDownload OrElse Not fExists Then + Dim sHTTP As New HTTP + Dim xZip As Byte() = sHTTP.DownloadZip(String.Format("http://{0}/api/{1}/series/{2}/all/{3}.zip", Master.eSettings.TVDBMirror, APIKey, sInfo.TVDBID, sInfo.SelectedLang)) + sHTTP = Nothing + + If Not IsNothing(xZip) AndAlso xZip.Length > 0 Then + 'save it to the temp dir + Directory.CreateDirectory(Directory.GetParent(fPath).FullName) + Using fStream As FileStream = New FileStream(fPath, FileMode.Create, FileAccess.Write) + fStream.Write(xZip, 0, xZip.Length) + End Using + + Me.ProcessTVDBZip(xZip, sInfo) + Me.ShowFromXML(sInfo, ImagesOnly) + End If + Else + Using fStream As FileStream = New FileStream(fPath, FileMode.Open, FileAccess.Read) + Dim fZip As Byte() = Functions.ReadStreamToEnd(fStream) + + Me.ProcessTVDBZip(fZip, sInfo) + Me.ShowFromXML(sInfo, ImagesOnly) + End Using + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub DownloadSeriesAsync(ByVal sInfo As Structures.ScrapeInfo) + Try + If Not bwTVDB.IsBusy Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.StartingDownload, 0, Nothing) + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 1, .Parameter = sInfo}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetListOfKnownEpisodes(ByVal sInfo As Structures.ScrapeInfo) As List(Of MediaContainers.EpisodeDetails) + Dim Actors As New List(Of MediaContainers.Person) + Dim tEpisodes As New List(Of MediaContainers.EpisodeDetails) + Dim tEpisode As New MediaContainers.EpisodeDetails + Dim fPath As String = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, sInfo.SelectedLang, ".zip")) + Dim tSeas As Integer = -1 + Dim tOrdering As Enums.Ordering = Enums.Ordering.Standard + + Try + If File.Exists(fPath) Then + Using fStream As FileStream = New FileStream(fPath, FileMode.Open, FileAccess.Read) + Dim fZip As Byte() = Functions.ReadStreamToEnd(fStream) + Me.ProcessTVDBZip(fZip, sInfo) + + 'get the actors first + Try + If Not String.IsNullOrEmpty(aXML) Then + Dim xdActors As XDocument = XDocument.Parse(aXML) + For Each Actor As XElement In xdActors.Descendants("Actor") + If Not IsNothing(Actor.Element("Name")) AndAlso Not String.IsNullOrEmpty(Actor.Element("Name").Value) Then + Actors.Add(New MediaContainers.Person With {.Name = Actor.Element("Name").Value, .Role = If(IsNothing(Actor.Element("Role")), String.Empty, Actor.Element("Role").Value), .Thumb = If(IsNothing(Actor.Element("Image")) OrElse String.IsNullOrEmpty(Actor.Element("Image").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Actor.Element("Image").Value))}) + End If + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + If Not String.IsNullOrEmpty(sXML) Then + Dim xdEps As XDocument = XDocument.Parse(sXML) + + For Each Episode As XElement In xdEps.Descendants("Episode") + If Not IsNothing(Episode.Element("EpisodeName").Value) AndAlso Not String.IsNullOrEmpty(Episode.Element("EpisodeName").Value) Then + tEpisode = New MediaContainers.EpisodeDetails + + tOrdering = Enums.Ordering.Standard + + If sInfo.Ordering = Enums.Ordering.DVD Then + If Not IsNothing(Episode.Element("SeasonNumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("SeasonNumber").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_season").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_episodenumber").Value.ToString) Then + tSeas = Convert.ToInt32(Episode.Element("SeasonNumber").Value) + If sInfo.iSeason >= 0 AndAlso Not tSeas = sInfo.iSeason Then Continue For + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) = tSeas AndAlso (IsNothing(e.Element("DVD_season")) OrElse String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) OrElse IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + ElseIf Not IsNothing(Episode.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_season").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_episodenumber").Value.ToString) Then + tSeas = Convert.ToInt32(Episode.Element("DVD_season").Value) + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("DVD_season").Value) = tSeas AndAlso (IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + End If + ElseIf sInfo.Ordering = Enums.Ordering.Absolute Then + If Not IsNothing(Episode.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(Episode.Element("absolute_number").Value.ToString) Then + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) > 0 AndAlso (IsNothing(e.Element("absolute_number")) OrElse String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.Absolute + End If + End If + Else + If sInfo.iSeason >= 0 AndAlso Not Convert.ToInt32(Episode.Element("SeasonNumber").Value) = sInfo.iSeason Then Continue For + End If + + With tEpisode + .Title = Episode.Element("EpisodeName").Value + If tOrdering = Enums.Ordering.DVD Then + .Season = Convert.ToInt32(Episode.Element("DVD_season").Value) + .Episode = Convert.ToInt32(CLng(Episode.Element("DVD_episodenumber").Value)) + ElseIf tOrdering = Enums.Ordering.Absolute Then + .Season = 1 + .Episode = Convert.ToInt32(Episode.Element("absolute_number").Value) + Else + .Season = If(IsNothing(Episode.Element("SeasonNumber")) OrElse String.IsNullOrEmpty(Episode.Element("SeasonNumber").Value), 0, Convert.ToInt32(Episode.Element("SeasonNumber").Value)) + .Episode = If(IsNothing(Episode.Element("EpisodeNumber")) OrElse String.IsNullOrEmpty(Episode.Element("EpisodeNumber").Value), 0, Convert.ToInt32(Episode.Element("EpisodeNumber").Value)) + End If + .Aired = If(IsNothing(Episode.Element("FirstAired")), String.Empty, Episode.Element("FirstAired").Value) + .Rating = If(IsNothing(Episode.Element("Rating")), String.Empty, Episode.Element("Rating").Value) + .Plot = If(IsNothing(Episode.Element("Overview")), String.Empty, Episode.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + .Director = If(IsNothing(Episode.Element("Director")), String.Empty, Strings.Join(Episode.Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + .Credits = CreditsString(If(IsNothing(Episode.Element("GuestStars")), String.Empty, Episode.Element("GuestStars").Value), If(IsNothing(Episode.Element("Writer")), String.Empty, Episode.Element("Writer").Value)) + .Actors = Actors + .PosterURL = If(IsNothing(Episode.Element("filename")), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Episode.Element("filename").Value)) + .LocalFile = If(IsNothing(Episode.Element("filename")), String.Empty, Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, "episodeposters", Path.DirectorySeparatorChar, Episode.Element("filename").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar)))) + End With + + tEpisodes.Add(tEpisode) + End If + Next + + End If + End Using + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return tEpisodes + End Function + + Public Sub GetSearchResultsAsync(ByVal sInfo As Structures.ScrapeInfo) + Try + If Not bwTVDB.IsBusy Then + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 0, .Parameter = sInfo}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetSingleEpisode(ByVal sInfo As Structures.ScrapeInfo) As MediaContainers.EpisodeDetails + Dim tEp As New MediaContainers.EpisodeDetails + Try + + tEp = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Season = sInfo.iSeason AndAlso e.Episode = sInfo.iEpisode) + + If Not IsNothing(tEp) Then + Return tEp + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return New MediaContainers.EpisodeDetails + End Function + + Public Function GetSingleImage(ByVal sInfo As Structures.ScrapeInfo) As Images + tmpTVDBShow = New TVDBShow + + If sInfo.ImageType = Enums.TVImageType.EpisodePoster Then + + If String.IsNullOrEmpty(sInfo.TVDBID) Then + Using dTVDBSearch As New dlgTVDBSearchResults + sInfo = dTVDBSearch.ShowDialog(sInfo, True) + If Not String.IsNullOrEmpty(sInfo.TVDBID) Then + Master.currShow.TVShow.ID = sInfo.TVDBID + + Using tImage As New Images + Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) + If Not IsNothing(tmpEp) Then + + If File.Exists(tmpEp.LocalFile) Then + tImage.FromFile(tmpEp.LocalFile) + Else + tImage.FromWeb(tmpEp.PosterURL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) + tImage.Save(tmpEp.LocalFile, , , False) + End If + End If + + If Not IsNothing(tImage.Image) Then + Using dPosterConfirm As New dlgTVEpisodePoster + If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Using + Else + MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) + Return Nothing + End If + Else + Return Nothing + End If + End Using + Else + Return Nothing + End If + End Using + Else + Using tImage As New Images + Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) + If Not IsNothing(tmpEp) Then + + If File.Exists(tmpEp.LocalFile) Then + tImage.FromFile(tmpEp.LocalFile) + Else + tImage.FromWeb(tmpEp.PosterURL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) + tImage.Save(tmpEp.LocalFile, , , False) + End If + End If + + If Not IsNothing(tImage.Image) Then + Using dPosterConfirm As New dlgTVEpisodePoster + If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Using + Else + MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) + Return Nothing + End If + Else + Return Nothing + End If + End Using + End If + Else + If String.IsNullOrEmpty(sInfo.TVDBID) Then + Using dTVDBSearch As New dlgTVDBSearchResults + sInfo = dTVDBSearch.ShowDialog(sInfo, True) + If Not String.IsNullOrEmpty(sInfo.TVDBID) Then + Master.currShow.TVShow.ID = sInfo.TVDBID + Me.DownloadSeries(sInfo, True) + Using dImageSelect As New dlgTVImageSelect + Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) + End Using + Else + Return Nothing + End If + End Using + Else + Me.DownloadSeries(sInfo, True) + Using dImageSelect As New dlgTVImageSelect + Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) + End Using + End If + End If + End Function + + Public Function IsBusy() As Boolean + Return bwTVDB.IsBusy + End Function + + Public Sub PassEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent ScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Sub ProcessTVDBZip(ByVal tvZip As Byte(), ByVal sInfo As Structures.ScrapeInfo) + sXML = String.Empty + bXML = String.Empty + aXML = String.Empty + + Try + Using zStream As ZipInputStream = New ZipInputStream(New MemoryStream(tvZip)) + Dim zEntry As ZipEntry = zStream.GetNextEntry + + While Not IsNothing(zEntry) + Dim zBuffer As Byte() = Functions.ReadStreamToEnd(zStream) + + Select Case True + Case zEntry.Name.Equals(String.Concat(sInfo.SelectedLang, ".xml")) + sXML = System.Text.Encoding.UTF8.GetString(zBuffer) + Case zEntry.Name.Equals("banners.xml") + bXML = System.Text.Encoding.UTF8.GetString(zBuffer) + Case zEntry.Name.Equals("actors.xml") + aXML = System.Text.Encoding.UTF8.GetString(zBuffer) + End Select + + zEntry = zStream.GetNextEntry + End While + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub SaveImages() + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SavingStarted, 0, Nothing) + Me.bwTVDB = New System.ComponentModel.BackgroundWorker + Me.bwTVDB.WorkerReportsProgress = True + Me.bwTVDB.WorkerSupportsCancellation = True + Me.bwTVDB.RunWorkerAsync(New Arguments With {.Type = 3}) + End Sub + + Public Sub ScrapeEpisode(ByVal sInfo As Structures.ScrapeInfo) + Try + tmpTVDBShow = New TVDBShow + tmpTVDBShow.Episodes.Add(Master.currShow) + + If String.IsNullOrEmpty(sInfo.TVDBID) Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + DownloadSeries(sInfo) + If tmpTVDBShow.Episodes(0).TVShow.ID.Length > 0 Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso Not File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso Not File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub ScrapeSeason(ByVal sInfo As Structures.ScrapeInfo) + RaiseEvent ScraperEvent(Enums.TVScraperEventType.LoadingEpisodes, 0, Nothing) + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 4, .Parameter = sInfo}) + End Sub + + Public Sub SingleScrape(ByVal sInfo As Structures.ScrapeInfo) + RaiseEvent ScraperEvent(Enums.TVScraperEventType.LoadingEpisodes, 0, Nothing) + bwTVDB.WorkerReportsProgress = False + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 2, .Parameter = sInfo}) + While bwTVDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub StartSingleScraper(ByVal sInfo As Structures.ScrapeInfo) + Try + If String.IsNullOrEmpty(sInfo.TVDBID) AndAlso sInfo.ScrapeType = Enums.ScrapeType.FullAsk Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + DownloadSeries(sInfo) + If tmpTVDBShow.Show.TVShow.ID.Length > 0 Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + If sInfo.ScrapeType = Enums.ScrapeType.FullAuto Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SaveAuto, 0, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + ElseIf sInfo.ScrapeType = Enums.ScrapeType.FullAsk Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + 'Ignore Show scrape if ScrapeAuto and show don't have ID + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwtvDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTVDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + Try + Select Case Args.Type + Case 0 'search + e.Result = New Results With {.Type = 0, .Result = SearchSeries(DirectCast(Args.Parameter, Structures.ScrapeInfo))} + Case 1 'show download + Me.DownloadSeries(DirectCast(Args.Parameter, Structures.ScrapeInfo)) + e.Result = New Results With {.Type = 1} + Case 2 'load episodes + LoadAllEpisodes(DirectCast(Args.Parameter, Structures.ScrapeInfo).ShowID, 999) + e.Result = New Results With {.Type = 2, .Result = Args.Parameter} + Case 3 'save + Me.SaveAllTVInfo() + e.Result = New Results With {.Type = 3} + Case 4 + Dim sInfo As Structures.ScrapeInfo = DirectCast(Args.Parameter, Structures.ScrapeInfo) + LoadAllEpisodes(sInfo.ShowID, sInfo.iSeason) + e.Result = New Results With {.Type = 2, .Result = Args.Parameter} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTVDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTVDB.ProgressChanged + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Progress, e.ProgressPercentage, e.UserState.ToString) + End Sub + + Private Sub bwTVDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTVDB.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.Type + Case 0 'search + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SearchResultsDownloaded, 0, DirectCast(Res.Result, List(Of TVSearchResults))) + Case 1 'show download + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ShowDownloaded, 0, Nothing) + Case 2 'load episodes + If Not e.Cancelled Then + StartSingleScraper(DirectCast(Res.Result, Structures.ScrapeInfo)) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ScraperDone, 0, Nothing) + End If + Case 3 'save + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ScraperDone, 0, Nothing) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CreditsString(ByVal sGStars As String, ByVal sWriters As String) As String + Dim cString As New List(Of String) + Dim gString As String = Master.eLang.GetString(82, "Guest Star") + Dim wString As String = Master.eLang.GetString(777, "Writer", True) + + If Not String.IsNullOrEmpty(sGStars) Then + For Each gStar In sGStars.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")) + If Not String.IsNullOrEmpty(gStar) Then cString.Add(String.Concat(gStar, String.Format(" ({0})", gString))) + Next + End If + + If Not String.IsNullOrEmpty(sWriters) Then + For Each Writer In sWriters.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")) + If Not String.IsNullOrEmpty(Writer) Then cString.Add(String.Concat(Writer, String.Format(" ({0})", wString))) + Next + End If + + Return Strings.Join(cString.ToArray, " / ") + End Function + + Private Sub SaveAllTVInfo() + Dim iEp As Integer = -1 + Dim iSea As Integer = -1 + Dim iProgress As Integer = 1 + + Dim tShow As New Structures.DBTV + Dim tEpisode As New MediaContainers.EpisodeDetails + + Me.bwTVDB.ReportProgress(tmpTVDBShow.Episodes.Count, "max") + + Using SQLTrans As SQLite.SQLiteTransaction = Master.DB.MediaDBConn.BeginTransaction() + If Master.eSettings.DisplayMissingEpisodes Then + 'clear old missing episode from db + Using SQLCommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + SQLCommand.CommandText = String.Concat("DELETE FROM TVEps WHERE Missing = 1 AND TVShowID = ", Master.currShow.ShowID, ";") + SQLCommand.ExecuteNonQuery() + End Using + End If + + Try + For Each Episode As Structures.DBTV In tmpTVDBShow.Episodes + + Try + If Me.bwTVDB.CancellationPending Then Return + + Episode.ShowID = Master.currShow.ShowID + + iEp = Episode.TVEp.Episode + iSea = Episode.TVEp.Season + + 'remove it from tepisodes since it's a real episode + If Master.eSettings.DisplayMissingEpisodes Then + tEpisode = tEpisodes.FirstOrDefault(Function(e) e.Episode = iEp AndAlso e.Season = iSea) + If Not IsNothing(tEpisode) Then tEpisodes.Remove(tEpisode) + tShow = Episode + End If + + If Me.bwTVDB.CancellationPending Then Return + + If Episode.TVEp.Season > -1 AndAlso Episode.TVEp.Episode > -1 AndAlso Not Episode.IsLockEp Then + If Not IsNothing(Episode.TVEp.Poster.Image) Then Episode.EpPosterPath = Episode.TVEp.Poster.SaveAsEpPoster(Episode, Episode.TVEp.PosterURL) + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.EpisodeFanartEnabled AndAlso Not IsNothing(Episode.TVEp.Fanart.Image) Then Episode.EpFanartPath = Episode.TVEp.Fanart.SaveAsEpFanart(Episode, ) + + If Me.bwTVDB.CancellationPending Then Return + + Dim cSea = From cSeason As TVDBSeasonImage In TVDBImages.SeasonImageList Where cSeason.Season = iSea Take 1 + If cSea.Count > 0 Then + If Not IsNothing(cSea(0).Poster.Image) Then Episode.SeasonPosterPath = cSea(0).Poster.SaveAsSeasonPoster(Episode) + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.SeasonFanartEnabled Then + If Not String.IsNullOrEmpty(cSea(0).Fanart.LocalFile) AndAlso File.Exists(cSea(0).Fanart.LocalFile) Then + cSea(0).Fanart.Image.FromFile(cSea(0).Fanart.LocalFile) + Episode.SeasonFanartPath = cSea(0).Fanart.Image.SaveAsSeasonFanart(Episode) + ElseIf Not String.IsNullOrEmpty(cSea(0).Fanart.URL) AndAlso Not String.IsNullOrEmpty(cSea(0).Fanart.LocalFile) Then + cSea(0).Fanart.Image.Clear() + cSea(0).Fanart.Image.FromWeb(cSea(0).Fanart.URL) + If Not IsNothing(cSea(0).Fanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(cSea(0).Fanart.LocalFile).FullName) + cSea(0).Fanart.Image.Save(cSea(0).Fanart.LocalFile, , , False) + Episode.SeasonFanartPath = cSea(0).Fanart.Image.SaveAsSeasonFanart(Episode) + End If + End If + End If + End If + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Episode) + + Master.DB.SaveTVEpToDB(Episode, False, True, True, True) + + If Me.bwTVDB.CancellationPending Then Return + End If + Me.bwTVDB.ReportProgress(iProgress, "progress") + + 'If AdvancedSettings.GetBooleanSetting("ScrapeActorsThumbs", False) Then + 'For Each act As MediaContainers.Person In Episode.TVEp.Actors + 'Dim img As New Images + 'img.FromWeb(act.Thumb) + 'img.SaveAsActorThumb(act, Directory.GetParent(Episode.Filename).FullName) + 'Next + 'End If + + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + + 'now save all missing episodes + If Master.eSettings.DisplayMissingEpisodes Then + tShow.Filename = String.Empty + tShow.EpFanartPath = String.Empty + tShow.EpPosterPath = String.Empty + tShow.EpNfoPath = String.Empty + tShow.SeasonFanartPath = String.Empty + tShow.SeasonPosterPath = String.Empty + tShow.ShowFanartPath = String.Empty + tShow.IsLockEp = False + tShow.IsMarkEp = False + tShow.EpID = -1 + If tEpisodes.Count > 0 Then + For Each Episode As MediaContainers.EpisodeDetails In tEpisodes + tShow.TVEp = Episode + Master.DB.SaveTVEpToDB(tShow, True, True, True) + Next + End If + End If + + If Me.bwTVDB.CancellationPending Then Return + + SQLTrans.Commit() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End Using + End Sub + + Private Sub SaveToCache(ByVal sID As String, ByVal sURL As String, ByVal sPath As String) + Dim sImage As New Images + + sImage.FromWeb(sURL) + + If Not IsNothing(sImage.Image) Then + sImage.Save(Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, sPath.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), , , True) + End If + sImage = Nothing + End Sub + + Private Function SearchSeries(ByVal sInfo As Structures.ScrapeInfo) As List(Of TVSearchResults) + Dim tvdbResults As New List(Of TVSearchResults) + Dim cResult As New TVSearchResults + Dim xmlTVDB As XDocument + Dim tmpXML As XDocument + Dim sHTTP As New HTTP + Dim sLang As String = String.Empty + Dim tmpID As String = String.Empty + + Try + Dim apiXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/GetSeries.php?seriesname={1}&language={2}", Master.eSettings.TVDBMirror, sInfo.ShowTitle, Master.eSettings.TVDBLanguage)) + + If Not String.IsNullOrEmpty(apiXML) Then + Try + xmlTVDB = XDocument.Parse(apiXML) + Catch + Return tvdbResults + End Try + + Dim xSer = From xSeries In xmlTVDB.Descendants("Series") Where xSeries.HasElements + + 'check each unique showid to see if we have an entry for the preferred languages. If not, try to force download it + For Each tID As String In xSer.GroupBy(Function(s) s.Element("seriesid").Value.ToString).Select(Function(group) group.Key) + tmpID = tID + If xSer.Where(Function(s) s.Element("seriesid").Value.ToString = tmpID AndAlso s.Element("language").Value.ToString = Master.eSettings.TVDBLanguage).Count = 0 Then + 'no preferred language in this series, force it + Dim forceXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/series/{2}/{3}.xml", Master.eSettings.TVDBMirror, APIKey, tmpID, Master.eSettings.TVDBLanguage)) + If Not String.IsNullOrEmpty(forceXML) Then + Try + tmpXML = XDocument.Parse(forceXML) + Catch + Continue For + End Try + + For Each tSer As XElement In tmpXML.Descendants("Series").Where(Function(s) s.HasElements) + sLang = String.Empty + cResult = New TVSearchResults + cResult.ID = Convert.ToInt32(tSer.Element("id").Value) + cResult.Name = If(Not IsNothing(tSer.Element("SeriesName")), tSer.Element("SeriesName").Value, String.Empty) + If Not IsNothing(tSer.Element("Language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = tSer.Element("Language").Value + cResult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(tSer.Element("Language")) Then + sLang = tSer.Element("Language").Value + cResult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + Else + 'no language info available... don't bother adding it + Continue For + End If + cResult.Aired = If(Not IsNothing(tSer.Element("FirstAired")), tSer.Element("FirstAired").Value, String.Empty) + cResult.Overview = If(Not IsNothing(tSer.Element("Overview")), tSer.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf), String.Empty) + cResult.Banner = If(Not IsNothing(tSer.Element("banner")), tSer.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(cResult.Name) AndAlso Not String.IsNullOrEmpty(sLang) AndAlso xSer.Where(Function(s) s.Element("seriesid").Value.ToString = cResult.ID.ToString AndAlso s.Element("language").Value.ToString = sLang).Count = 0 Then + cResult.Lev = StringUtils.ComputeLevenshtein(sInfo.ShowTitle, cResult.Name) + tvdbResults.Add(cResult) + End If + Next + End If + End If + Next + sHTTP = Nothing + + For Each xS As XElement In xSer + sLang = String.Empty + cResult = New TVSearchResults + cResult.ID = Convert.ToInt32(xS.Element("seriesid").Value) + cResult.Name = If(Not IsNothing(xS.Element("SeriesName")), xS.Element("SeriesName").Value, String.Empty) + If Not IsNothing(xS.Element("language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = xS.Element("language").Value + cResult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(xS.Element("language")) Then + sLang = xS.Element("language").Value + cResult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + Else + 'no language info available... don't bother adding it + Continue For + End If + cResult.Aired = If(Not IsNothing(xS.Element("FirstAired")), xS.Element("FirstAired").Value, String.Empty) + cResult.Overview = If(Not IsNothing(xS.Element("Overview")), xS.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf), String.Empty) + cResult.Banner = If(Not IsNothing(xS.Element("banner")), xS.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(cResult.Name) AndAlso Not String.IsNullOrEmpty(sLang) Then + cResult.Lev = StringUtils.ComputeLevenshtein(sInfo.ShowTitle, cResult.Name) + tvdbResults.Add(cResult) + End If + Next + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return tvdbResults + End Function + + Private Sub ShowFromXML(ByVal sInfo As Structures.ScrapeInfo, ByVal ImagesOnly As Boolean) + Dim Actors As New List(Of MediaContainers.Person) + Dim sID As String = String.Empty + Dim iEp As Integer = -1 + Dim iSeas As Integer = -1 + Dim sTitle As String = String.Empty + Dim byTitle As Boolean = False + Dim xE As XElement = Nothing + Dim tShow As Structures.DBTV = tmpTVDBShow.Show + Dim tOrdering As Enums.Ordering = Enums.Ordering.Standard + + If Not ImagesOnly Then + If Master.eSettings.DisplayMissingEpisodes Then tEpisodes = Me.GetListOfKnownEpisodes(sInfo) + + 'get the actors first + Try + If sInfo.Options.bShowActors OrElse sInfo.Options.bEpActors Then + If Not String.IsNullOrEmpty(aXML) Then + Dim xdActors As XDocument = XDocument.Parse(aXML) + For Each Actor As XElement In xdActors.Descendants("Actor") + If Not IsNothing(Actor.Element("Name")) AndAlso Not String.IsNullOrEmpty(Actor.Element("Name").Value) Then + Actors.Add(New MediaContainers.Person With {.Name = Actor.Element("Name").Value, .Role = Actor.Element("Role").Value, .Thumb = If(IsNothing(Actor.Element("Image")) OrElse String.IsNullOrEmpty(Actor.Element("Image").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Actor.Element("Image").Value))}) + End If + Next + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + 'now let's get the show info and all the episodes + Try + If Not String.IsNullOrEmpty(sXML) Then + Dim xdShow As XDocument = XDocument.Parse(sXML) + Dim xS = From xShow In xdShow.Descendants("Series") + If xS.Count > 0 Then + tShow.ShowLanguage = sInfo.SelectedLang + If Not IsNothing(tShow.TVShow) Then + With tShow.TVShow + sID = xS(0).Element("id").Value + .ID = sID + If sInfo.Options.bShowTitle AndAlso (String.IsNullOrEmpty(.Title) OrElse Not Master.eSettings.ShowLockTitle) Then .Title = If(IsNothing(xS(0).Element("SeriesName")), .Title, xS(0).Element("SeriesName").Value) + If sInfo.Options.bShowEpisodeGuide Then .EpisodeGuideURL = If(Not String.IsNullOrEmpty(Master.eSettings.ExternalTVDBAPIKey), String.Format("http://{0}/api/{1}/series/{2}/all/{3}.zip", Master.eSettings.TVDBMirror, Master.eSettings.ExternalTVDBAPIKey, sID, Master.eSettings.TVDBLanguage), String.Empty) + If sInfo.Options.bShowGenre AndAlso (String.IsNullOrEmpty(.Genre) OrElse Not Master.eSettings.ShowLockGenre) Then .Genre = If(IsNothing(xS(0).Element("Genre")), .Genre, Strings.Join(xS(0).Element("Genre").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bShowMPAA Then .MPAA = If(IsNothing(xS(0).Element("ContentRating")), .MPAA, xS(0).Element("ContentRating").Value) + If sInfo.Options.bShowPlot AndAlso (String.IsNullOrEmpty(.Plot) OrElse Not Master.eSettings.ShowLockPlot) Then .Plot = If(IsNothing(xS(0).Element("Overview")), .Plot, xS(0).Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + If sInfo.Options.bShowPremiered Then .Premiered = If(IsNothing(xS(0).Element("FirstAired")), .Premiered, xS(0).Element("FirstAired").Value) + If sInfo.Options.bShowRating AndAlso (String.IsNullOrEmpty(.Rating) OrElse Not Master.eSettings.ShowLockRating) Then .Rating = If(IsNothing(xS(0).Element("Rating")), .Rating, xS(0).Element("Rating").Value) + If sInfo.Options.bShowStudio AndAlso (String.IsNullOrEmpty(.Studio) OrElse Not Master.eSettings.ShowLockStudio) Then .Studio = If(IsNothing(xS(0).Element("Network")), .Studio, xS(0).Element("Network").Value) + If sInfo.Options.bShowActors Then .Actors = Actors + End With + End If + + 'set it back + tmpTVDBShow.Show = tShow + + For Each Episode As Structures.DBTV In tmpTVDBShow.Episodes + + Episode.ShowLanguage = sInfo.SelectedLang + + iEp = Episode.TVEp.Episode + iSeas = Episode.TVEp.Season + sTitle = Episode.TVEp.Title + byTitle = False + tOrdering = Enums.Ordering.Standard + + If Not IsNothing(tShow.TVShow) Then Episode.TVShow = tShow.TVShow + + If sInfo.Ordering = Enums.Ordering.DVD Then + 'first we need to check if dvd order is specified for every episode in the season + 'we'll use the regular season number as an indicator even though there are some cases + 'where this will not work (season 1 episode 1 = dvd_season 2 dvd_episode 1) but it + 'should work in most cases and is the best solution I could come up with + + If xdShow.Descendants("Episode").Where(Function(e) Not IsNothing(e.Element("SeasonNumber")) AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas AndAlso (IsNothing(e.Element("DVD_season")) OrElse String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) OrElse IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + ElseIf sInfo.Ordering = Enums.Ordering.Absolute Then + If xdShow.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) > 0 AndAlso (IsNothing(e.Element("absolute_number")) OrElse String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.Absolute + End If + End If + + If tOrdering = Enums.Ordering.DVD Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString) AndAlso Convert.ToInt32(CLng(e.Element("DVD_episodenumber").Value.ToString)) = iEp AndAlso Not IsNothing(e.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) AndAlso Convert.ToInt32(e.Element("DVD_season").Value) = iSeas) + ElseIf tOrdering = Enums.Ordering.Absolute Then + If iSeas = 1 Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString) AndAlso Convert.ToInt32(e.Element("absolute_number").Value.ToString) = iEp) + Else + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString) AndAlso Convert.ToInt32(e.Element("EpisodeNumber").Value.ToString) = iEp AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas) + End If + Else + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Convert.ToInt32(e.Element("EpisodeNumber").Value) = iEp AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas) + End If + + If IsNothing(xE) Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) StringUtils.ComputeLevenshtein(e.Element("EpisodeName").Value, sTitle) < 5) + byTitle = True + End If + + If Not IsNothing(xE) Then + With Episode.TVEp + If sInfo.Options.bEpTitle AndAlso (String.IsNullOrEmpty(.Title) OrElse Not Master.eSettings.EpLockTitle) AndAlso Not String.IsNullOrEmpty(xE.Element("EpisodeName").Value) Then .Title = xE.Element("EpisodeName").Value + If byTitle Then + If tOrdering = Enums.Ordering.DVD Then + If sInfo.Options.bEpSeason Then .Season = If(IsNothing(xE.Element("DVD_season")) OrElse String.IsNullOrEmpty(xE.Element("DVD_season").Value), 0, Convert.ToInt32(xE.Element("DVD_season").Value)) + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(xE.Element("DVD_episodenumber").Value), 0, Convert.ToInt32(xE.Element("DVD_episodenumber").Value)) + ElseIf tOrdering = Enums.Ordering.Absolute Then + If sInfo.Options.bEpSeason Then .Season = 1 + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("absolute_number")) OrElse String.IsNullOrEmpty(xE.Element("absolute_number").Value), 0, Convert.ToInt32(xE.Element("absolute_number").Value)) + Else + If sInfo.Options.bEpSeason Then .Season = If(IsNothing(xE.Element("SeasonNumber")) OrElse String.IsNullOrEmpty(xE.Element("SeasonNumber").Value), 0, Convert.ToInt32(xE.Element("SeasonNumber").Value)) + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("EpisodeNumber")) OrElse String.IsNullOrEmpty(xE.Element("EpisodeNumber").Value), 0, Convert.ToInt32(xE.Element("EpisodeNumber").Value)) + End If + End If + If sInfo.Options.bEpAired Then .Aired = If(IsNothing(xE.Element("FirstAired")), .Aired, xE.Element("FirstAired").Value) + If sInfo.Options.bEpRating AndAlso (String.IsNullOrEmpty(.Rating) OrElse Not Master.eSettings.EpLockRating) Then .Rating = If(IsNothing(xE.Element("Rating")), .Rating, xE.Element("Rating").Value) + If sInfo.Options.bEpPlot AndAlso (String.IsNullOrEmpty(.Plot) OrElse Not Master.eSettings.EpLockPlot) Then .Plot = If(IsNothing(xE.Element("Overview")), .Plot, xE.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + 'If sInfo.Options.bEpDirector Then .Director = If(IsNothing(xS(0).Element("Director")), .Director, Strings.Join(xS(0).Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bEpDirector Then .Director = If(IsNothing(xE.Element("Director")), .Director, Strings.Join(xE.Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bEpCredits Then .Credits = CreditsString(If(IsNothing(xE.Element("GuestStars")), String.Empty, xE.Element("GuestStars").Value), If(IsNothing(xE.Element("Writer")), String.Empty, xE.Element("Writer").Value)) + If sInfo.Options.bEpActors Then .Actors = Actors + .PosterURL = If(IsNothing(xE.Element("filename")) OrElse String.IsNullOrEmpty(xE.Element("filename").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, xE.Element("filename").Value)) + .LocalFile = If(IsNothing(xE.Element("filename")) OrElse String.IsNullOrEmpty(xE.Element("filename").Value), String.Empty, Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "episodeposters", Path.DirectorySeparatorChar, xE.Element("filename").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar)))) + End With + End If + Next + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Else + sID = sInfo.TVDBID + End If + 'and finally the images + Try + If ImagesOnly OrElse Not IsNothing(tShow.TVShow) Then + If Not String.IsNullOrEmpty(bXML) Then + Dim xdImage As XDocument = XDocument.Parse(bXML) + For Each tImage As XElement In xdImage.Descendants("Banner") + If (Not IsNothing(tImage.Element("BannerPath")) AndAlso Not String.IsNullOrEmpty(tImage.Element("BannerPath").Value)) AndAlso _ + (Not Master.eSettings.OnlyGetTVImagesForSelectedLanguage OrElse ((Not IsNothing(tImage.Element("Language")) AndAlso tImage.Element("Language").Value = Master.eSettings.TVDBLanguage) OrElse _ + ((IsNothing(tImage.Element("Language")) OrElse tImage.Element("Language").Value = "en") AndAlso Master.eSettings.AlwaysGetEnglishTVImages))) Then + Select Case tImage.Element("BannerType").Value + Case "fanart" + tmpTVDBShow.Fanart.Add(New TVDBFanart With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .ThumbnailURL = If(IsNothing(tImage.Element("ThumbnailPath")) OrElse String.IsNullOrEmpty(tImage.Element("ThumbnailPath").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("ThumbnailPath").Value)), _ + .Size = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), New Size With {.Width = 0, .Height = 0}, StringUtils.StringToSize(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "fanart", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .LocalThumb = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "fanart", Path.DirectorySeparatorChar, tImage.Element("ThumbnailPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "poster" + tmpTVDBShow.Posters.Add(New TVDBPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Size = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), New Size With {.Width = 0, .Height = 0}, StringUtils.StringToSize(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "posters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "season" + tmpTVDBShow.SeasonPosters.Add(New TVDBSeasonPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Season = If(IsNothing(tImage.Element("Season")) OrElse String.IsNullOrEmpty(tImage.Element("Season").Value), 0, Convert.ToInt32(tImage.Element("Season").Value)), _ + .Type = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), Enums.SeasonPosterType.None, StringToSeasonPosterType(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "seasonposters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "series" + tmpTVDBShow.ShowPosters.Add(New TVDBShowPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Type = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), Enums.ShowBannerType.None, StringToShowPosterType(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "seriesposters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + End Select + End If + Next + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function StringToSeasonPosterType(ByVal sType As String) As Enums.SeasonPosterType + Select Case sType.ToLower + Case "season" + Return Enums.SeasonPosterType.Poster + Case "seasonwide" + Return Enums.SeasonPosterType.Wide + Case Else + Return Enums.SeasonPosterType.None + End Select + End Function + + Private Function StringToShowPosterType(ByVal sType As String) As Enums.ShowBannerType + Select Case sType.ToLower + Case "blank" + Return Enums.ShowBannerType.Blank + Case "graphical" + Return Enums.ShowBannerType.Graphical + Case "text" + Return Enums.ShowBannerType.Text + Case Else + Return Enums.ShowBannerType.None + End Select + End Function + +#End Region 'Methods + +#Region "Other" + + Private Structure Arguments + + Dim Parameter As Object + Dim Type As Integer + + End Structure + + Private Structure Results + + Dim Result As Object + Dim Type As Integer '0 = search, 1 = show download, 2 = load eps, 3 = save + + End Structure + +#End Region 'Other + + End Class + + <Serializable()> _ + Public Class TVDBFanart + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _localthumb As String + Private _size As Size + Private _thumbnailurl As String + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property LocalThumb() As String + Get + Return Me._localthumb + End Get + Set(ByVal value As String) + Me._localthumb = value + End Set + End Property + + Public Property Size() As Size + Get + Return Me._size + End Get + Set(ByVal value As Size) + Me._size = value + End Set + End Property + + Public Property ThumbnailURL() As String + Get + Return Me._thumbnailurl + End Get + Set(ByVal value As String) + Me._thumbnailurl = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._thumbnailurl = String.Empty + Me._size = New Size + Me._localfile = String.Empty + Me._localthumb = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _size As Size + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Size() As Size + Get + Return Me._size + End Get + Set(ByVal value As Size) + Me._size = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._size = New Size + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + <Serializable()> _ + Public Class TVDBSeasonImage + +#Region "Fields" + + Private _fanart As TVDBFanart + Private _poster As Images + Private _season As Integer + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Fanart() As TVDBFanart + Get + Return Me._fanart + End Get + Set(ByVal value As TVDBFanart) + Me._fanart = value + End Set + End Property + + Public Property Poster() As Images + Get + Return Me._poster + End Get + Set(ByVal value As Images) + Me._poster = value + End Set + End Property + + Public Property Season() As Integer + Get + Return Me._season + End Get + Set(ByVal value As Integer) + Me._season = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._season = -1 + Me._poster = New Images + Me._fanart = New TVDBFanart + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBSeasonPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _season As Integer + Private _type As Enums.SeasonPosterType + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Season() As Integer + Get + Return Me._season + End Get + Set(ByVal value As Integer) + Me._season = value + End Set + End Property + + Public Property Type() As Enums.SeasonPosterType + Get + Return Me._type + End Get + Set(ByVal value As Enums.SeasonPosterType) + Me._type = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._season = 0 + Me._type = Enums.SeasonPosterType.None + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBShow + +#Region "Fields" + + Private _allseason As Structures.DBTV + Private _episodes As New List(Of Structures.DBTV) + Private _fanart As New List(Of TVDBFanart) + Private _posters As New List(Of TVDBPoster) + Private _seasonposters As New List(Of TVDBSeasonPoster) + Private _show As Structures.DBTV + Private _showposters As New List(Of TVDBShowPoster) + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property AllSeason() As Structures.DBTV + Get + Return Me._allseason + End Get + Set(ByVal value As Structures.DBTV) + Me._allseason = value + End Set + End Property + + Public Property Episodes() As List(Of Structures.DBTV) + Get + Return Me._episodes + End Get + Set(ByVal value As List(Of Structures.DBTV)) + Me._episodes = value + End Set + End Property + + Public Property Fanart() As List(Of TVDBFanart) + Get + Return Me._fanart + End Get + Set(ByVal value As List(Of TVDBFanart)) + Me._fanart = value + End Set + End Property + + Public Property Posters() As List(Of TVDBPoster) + Get + Return Me._posters + End Get + Set(ByVal value As List(Of TVDBPoster)) + Me._posters = value + End Set + End Property + + Public Property SeasonPosters() As List(Of TVDBSeasonPoster) + Get + Return Me._seasonposters + End Get + Set(ByVal value As List(Of TVDBSeasonPoster)) + Me._seasonposters = value + End Set + End Property + + Public Property Show() As Structures.DBTV + Get + Return Me._show + End Get + Set(ByVal value As Structures.DBTV) + Me._show = value + End Set + End Property + + Public Property ShowPosters() As List(Of TVDBShowPoster) + Get + Return Me._showposters + End Get + Set(ByVal value As List(Of TVDBShowPoster)) + Me._showposters = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._show = New Structures.DBTV + Me._allseason = New Structures.DBTV + Me._episodes = New List(Of Structures.DBTV) + Me._fanart = New List(Of TVDBFanart) + Me._showposters = New List(Of TVDBShowPoster) + Me._seasonposters = New List(Of TVDBSeasonPoster) + Me._posters = New List(Of TVDBPoster) + End Sub + +#End Region 'Methods + + End Class + + <Serializable()> _ + Public Class TVDBShowPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _type As Enums.ShowBannerType + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Type() As Enums.ShowBannerType + Get + Return Me._type + End Get + Set(ByVal value As Enums.ShowBannerType) + Me._type = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._type = Enums.ShowBannerType.None + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVSearchResults + +#Region "Fields" + + Private _aired As String + Private _banner As String + Private _id As Integer + Private _language As Containers.TVLanguage + Private _lev As Integer + Private _name As String + Private _overview As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Aired() As String + Get + Return Me._aired + End Get + Set(ByVal value As String) + Me._aired = value + End Set + End Property + + Public Property Banner() As String + Get + Return Me._banner + End Get + Set(ByVal value As String) + Me._banner = value + End Set + End Property + + Public Property ID() As Integer + Get + Return Me._id + End Get + Set(ByVal value As Integer) + Me._id = value + End Set + End Property + + Public Property Language() As Containers.TVLanguage + Get + Return Me._language + End Get + Set(ByVal value As Containers.TVLanguage) + Me._language = value + End Set + End Property + + Public Property Lev() As Integer + Get + Return Me._lev + End Get + Set(ByVal value As Integer) + Me._lev = value + End Set + End Property + + Public Property Name() As String + Get + Return Me._name + End Get + Set(ByVal value As String) + Me._name = value + End Set + End Property + + Public Property Overview() As String + Get + Return Me._overview + End Get + Set(ByVal value As String) + Me._overview = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._id = 0 + Me._name = String.Empty + Me._aired = String.Empty + Me._language = New Containers.TVLanguage + Me._overview = String.Empty + Me._banner = String.Empty + Me._lev = 0 + End Sub + +#End Region 'Methods + + End Class + +#End Region 'Nested Types + +End Class diff --git a/Addons/scraper.IMDB.Data/TVScraper/dlgTVChangeEp.Designer.vb b/Addons/scraper.IMDB.Data/TVScraper/dlgTVChangeEp.Designer.vb new file mode 100644 index 0000000..dd38c94 --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/dlgTVChangeEp.Designer.vb @@ -0,0 +1,139 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVChangeEp + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lvEpisodes = New System.Windows.Forms.ListView() + Me.colEpisode = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colTitle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.pbPreview = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.txtPlot = New System.Windows.Forms.TextBox() + CType(Me.pbPreview, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Location = New System.Drawing.Point(505, 286) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(575, 286) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lvEpisodes + ' + Me.lvEpisodes.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colEpisode, Me.colTitle}) + Me.lvEpisodes.FullRowSelect = True + Me.lvEpisodes.HideSelection = False + Me.lvEpisodes.Location = New System.Drawing.Point(3, 3) + Me.lvEpisodes.MultiSelect = False + Me.lvEpisodes.Name = "lvEpisodes" + Me.lvEpisodes.Size = New System.Drawing.Size(358, 278) + Me.lvEpisodes.TabIndex = 2 + Me.lvEpisodes.UseCompatibleStateImageBehavior = False + Me.lvEpisodes.View = System.Windows.Forms.View.Details + ' + 'colEpisode + ' + Me.colEpisode.Text = "Episode" + ' + 'colTitle + ' + Me.colTitle.Text = "Title" + Me.colTitle.Width = 276 + ' + 'pbPreview + ' + Me.pbPreview.Location = New System.Drawing.Point(417, 12) + Me.pbPreview.Name = "pbPreview" + Me.pbPreview.Size = New System.Drawing.Size(174, 117) + Me.pbPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPreview.TabIndex = 3 + Me.pbPreview.TabStop = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(367, 140) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(275, 21) + Me.lblTitle.TabIndex = 3 + ' + 'txtPlot + ' + Me.txtPlot.BackColor = System.Drawing.SystemColors.Control + Me.txtPlot.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.txtPlot.Location = New System.Drawing.Point(366, 169) + Me.txtPlot.Multiline = True + Me.txtPlot.Name = "txtPlot" + Me.txtPlot.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtPlot.Size = New System.Drawing.Size(276, 111) + Me.txtPlot.TabIndex = 4 + ' + 'dlgTVChangeEp + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(646, 315) + Me.ControlBox = False + Me.Controls.Add(Me.txtPlot) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPreview) + Me.Controls.Add(Me.lvEpisodes) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTVChangeEp" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Change Episode" + CType(Me.pbPreview, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lvEpisodes As System.Windows.Forms.ListView + Friend WithEvents colEpisode As System.Windows.Forms.ColumnHeader + Friend WithEvents colTitle As System.Windows.Forms.ColumnHeader + Friend WithEvents pbPreview As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents txtPlot As System.Windows.Forms.TextBox + +End Class diff --git a/Addons/scraper.IMDB.Data/TVScraper/dlgTVChangeEp.resx b/Addons/scraper.IMDB.Data/TVScraper/dlgTVChangeEp.resx new file mode 100644 index 0000000..717c885 --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/dlgTVChangeEp.resx @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="txtPlot.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>True</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/TVScraper/dlgTVChangeEp.vb b/Addons/scraper.IMDB.Data/TVScraper/dlgTVChangeEp.vb new file mode 100644 index 0000000..954f58a --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/dlgTVChangeEp.vb @@ -0,0 +1,120 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class dlgTVChangeEp + +#Region "Fields" + + Private _episode As MediaContainers.EpisodeDetails = Nothing + Private _tepisodes As New List(Of MediaContainers.EpisodeDetails) + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal tEpisodes As List(Of MediaContainers.EpisodeDetails)) As MediaContainers.EpisodeDetails + Me._tepisodes = tEpisodes + + If MyBase.ShowDialog = Windows.Forms.DialogResult.OK Then + Return _episode + Else + Return Nothing + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub ClearInfo() + Me.pbPreview.Image = Nothing + Me.lblTitle.Text = String.Empty + Me.txtPlot.Text = String.Empty + End Sub + + Private Sub dlgTVChangeEp_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + + Dim lGroup As New ListViewGroup + Dim lItem As New ListViewItem + Dim tSeason As Integer = Nothing + + For Each Season As Integer In _tepisodes.GroupBy(Function(s) s.Season).Select(Function(group) group.Key) + tSeason = Season + lGroup = New ListViewGroup + lGroup.Header = String.Format(Master.eLang.GetString(726, "Season {0}", True), tSeason) + lvEpisodes.Groups.Add(lGroup) + For Each Episode As MediaContainers.EpisodeDetails In _tepisodes.Where(Function(s) s.Season = tSeason).OrderBy(Function(s) s.Episode) + lItem = lvEpisodes.Items.Add(Episode.Episode.ToString) + lItem.Tag = Episode + lItem.SubItems.Add(Episode.Title) + lGroup.Items.Add(lItem) + Next + Next + End Sub + + Private Sub lvEpisodes_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvEpisodes.SelectedIndexChanged + Me.ClearInfo() + If lvEpisodes.SelectedItems.Count > 0 AndAlso Not IsNothing(lvEpisodes.SelectedItems(0).Tag) Then + Me._episode = DirectCast(lvEpisodes.SelectedItems(0).Tag, MediaContainers.EpisodeDetails) + + If Not IsNothing(Me._episode.Poster.Image) Then + Me.pbPreview.Image = Me._episode.Poster.Image + ElseIf Not String.IsNullOrEmpty(Me._episode.LocalFile) AndAlso File.Exists(Me._episode.LocalFile) Then + Me._episode.Poster.FromFile(Me._episode.LocalFile) + If Not IsNothing(Me._episode.Poster.Image) Then + Me.pbPreview.Image = Me._episode.Poster.Image + End If + ElseIf Not String.IsNullOrEmpty(Me._episode.PosterURL) Then + Me._episode.Poster.FromWeb(Me._episode.PosterURL) + If Not IsNothing(Me._episode.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Me._episode.LocalFile).FullName) + Me._episode.Poster.Save(Me._episode.LocalFile) + Me.pbPreview.Image = Me._episode.Poster.Image + End If + End If + + Me.lblTitle.Text = Me._episode.Title + Me.txtPlot.Text = Me._episode.Plot + End If + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(772, "Change Episode", True) + + Me.lvEpisodes.Columns(0).Text = Master.eLang.GetString(727, "Episode", True) + Me.lvEpisodes.Columns(1).Text = Master.eLang.GetString(21, "Title", True) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/TVScraper/dlgTVDBSearchResults.Designer.vb b/Addons/scraper.IMDB.Data/TVScraper/dlgTVDBSearchResults.Designer.vb new file mode 100644 index 0000000..b05c597 --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/dlgTVDBSearchResults.Designer.vb @@ -0,0 +1,368 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTVDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pbBanner = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblAiredHeader = New System.Windows.Forms.Label() + Me.lblAired = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lvSearchResults = New System.Windows.Forms.ListView() + Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colLang = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colLev = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colSLang = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.txtTVDBID = New System.Windows.Forms.TextBox() + CType(Me.pbBanner, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(485, 335) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(558, 335) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pbBanner + ' + Me.pbBanner.Location = New System.Drawing.Point(325, 69) + Me.pbBanner.Name = "pbBanner" + Me.pbBanner.Size = New System.Drawing.Size(300, 55) + Me.pbBanner.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbBanner.TabIndex = 3 + Me.pbBanner.TabStop = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(325, 132) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(300, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Visible = False + ' + 'lblAiredHeader + ' + Me.lblAiredHeader.AutoSize = True + Me.lblAiredHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblAiredHeader.Location = New System.Drawing.Point(325, 161) + Me.lblAiredHeader.Name = "lblAiredHeader" + Me.lblAiredHeader.Size = New System.Drawing.Size(38, 13) + Me.lblAiredHeader.TabIndex = 10 + Me.lblAiredHeader.Text = "Aired:" + Me.lblAiredHeader.Visible = False + ' + 'lblAired + ' + Me.lblAired.AutoSize = True + Me.lblAired.Location = New System.Drawing.Point(387, 161) + Me.lblAired.Name = "lblAired" + Me.lblAired.Size = New System.Drawing.Size(63, 13) + Me.lblAired.TabIndex = 12 + Me.lblAired.Text = "00/00/0000" + Me.lblAired.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(325, 189) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 13 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtOutline.Location = New System.Drawing.Point(325, 205) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(300, 127) + Me.txtOutline.TabIndex = 14 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lvSearchResults + ' + Me.lvSearchResults.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colName, Me.colLang, Me.colLev, Me.colID, Me.colSLang}) + Me.lvSearchResults.FullRowSelect = True + Me.lvSearchResults.HideSelection = False + Me.lvSearchResults.Location = New System.Drawing.Point(3, 96) + Me.lvSearchResults.MultiSelect = False + Me.lvSearchResults.Name = "lvSearchResults" + Me.lvSearchResults.Size = New System.Drawing.Size(316, 236) + Me.lvSearchResults.TabIndex = 5 + Me.lvSearchResults.UseCompatibleStateImageBehavior = False + Me.lvSearchResults.View = System.Windows.Forms.View.Details + ' + 'colName + ' + Me.colName.Text = "Title" + Me.colName.Width = 223 + ' + 'colLang + ' + Me.colLang.Text = "Language" + Me.colLang.Width = 89 + ' + 'colLev + ' + Me.colLev.Width = 0 + ' + 'colID + ' + Me.colID.Width = 0 + ' + 'colSLang + ' + Me.colSLang.Width = 0 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(380, 154) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 11 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(98, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching TVDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(643, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(287, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper TV show." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(216, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "TV Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(296, 67) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 4 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(3, 68) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(287, 22) + Me.txtSearch.TabIndex = 3 + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(244, 337) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 8 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Enabled = False + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(3, 341) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(127, 17) + Me.chkManual.TabIndex = 6 + Me.chkManual.Text = "Manual TVDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'txtTVDBID + ' + Me.txtTVDBID.Enabled = False + Me.txtTVDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTVDBID.Location = New System.Drawing.Point(138, 337) + Me.txtTVDBID.Name = "txtTVDBID" + Me.txtTVDBID.Size = New System.Drawing.Size(100, 22) + Me.txtTVDBID.TabIndex = 7 + ' + 'dlgTVDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(643, 378) + Me.ControlBox = False + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.txtTVDBID) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.lvSearchResults) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblAiredHeader) + Me.Controls.Add(Me.lblAired) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbBanner) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 406) + Me.Name = "dlgTVDBSearchResults" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "TV Search Results" + CType(Me.pbBanner, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pbBanner As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblAiredHeader As System.Windows.Forms.Label + Friend WithEvents lblAired As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lvSearchResults As System.Windows.Forms.ListView + Friend WithEvents colName As System.Windows.Forms.ColumnHeader + Friend WithEvents colLang As System.Windows.Forms.ColumnHeader + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents colLev As System.Windows.Forms.ColumnHeader + Friend WithEvents colID As System.Windows.Forms.ColumnHeader + Friend WithEvents colSLang As System.Windows.Forms.ColumnHeader + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents txtTVDBID As System.Windows.Forms.TextBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/TVScraper/dlgTVDBSearchResults.resx b/Addons/scraper.IMDB.Data/TVScraper/dlgTVDBSearchResults.resx new file mode 100644 index 0000000..7a332a8 --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/dlgTVDBSearchResults.resx @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + gg== +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA + CukB/XXO0wAAAepJREFUOE+lkktIG1EUhkeFaLQ+UGulgthNEUHRCrqyIHZTdSd0Iyq46cL3Sly50ppV + uywYi2uDiyKK1ioFk0lm7mSmSgymJuIqSkwwCTVpGs3fM0Pa+poWceBj4N5zvnvOuZcDwN2HeyWrB98Q + LFosuRJjz51O6cXmxsaj/1V3RSAx8fVXRQnIsgwVRZHjJHr7L8kfAROFPoWS3G43gicnCIVC8O7vQ11z + StKsnkQTrK6sGCSJBXddLpyfJ5FKpTTUz+f1gvbA22w1t0k0AW3WCYIAv9+PZPIn4vGYRiLxA+HwKRhj + EByOIV2BdWur3mG34/j4iJISiEYjRBSx2BkikQiYKOJQ4ft1BZ/X13NIEHalW1CrUEVACj6fF4yqe2W2 + TegK0m0MiBSoziEQCNAQg/B4PPi2I8Fk+QJucBnZI0vvrkuuXCPP8+PU63dC7RnbTvHi/cKnA2O3GYbu + OeT0ziOv58Na8djHgt+iGw+JHk+pzWrtpMF27cn2Ko7jMnLbTebCl1MoaH+D/I4ZFHbM7FZ0ThtvfYl6 + 913WMjFc2jyGkqZRlNC/om2yXBNk0RFEEfGEqCZqiXriGdGYpoHCHhdXtg6W1fQKD592mQwZ3N8KKCiL + yCaMRB7xgMi/zuXqMinnTi3otfYLj6yxrhdJtZ8AAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/TVScraper/dlgTVDBSearchResults.vb b/Addons/scraper.IMDB.Data/TVScraper/dlgTVDBSearchResults.vb new file mode 100644 index 0000000..cce33d3 --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/dlgTVDBSearchResults.vb @@ -0,0 +1,437 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTVDBSearchResults + +#Region "Fields" + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + + Private lvResultsSorter As New ListViewColumnSorter + Private sHTTP As New HTTP + Private sInfo As Structures.ScrapeInfo + Private _manualresult As Scraper.TVSearchResults = Nothing + Private _skipdownload As Boolean = False + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal _sInfo As Structures.ScrapeInfo) As Windows.Forms.DialogResult + Me.sInfo = _sInfo + Me.Text = String.Concat(Master.eLang.GetString(85, "TV Search Results"), " - ", sInfo.ShowTitle) + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal _sinfo As Structures.ScrapeInfo, ByVal SkipDownload As Boolean) As Structures.ScrapeInfo + Me.sInfo = _sinfo + Me._skipdownload = SkipDownload + + Me.Text = String.Concat(Master.eLang.GetString(85, "TV Search Results"), " - ", sInfo.ShowTitle) + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return Me.sInfo + Else + Return _sinfo + End If + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.lvSearchResults.Enabled = False + Me.sInfo.ShowTitle = Me.txtSearch.Text + Me.ClearInfo() + Me.chkManual.Enabled = False + Me.chkManual.Checked = False + Me.txtSearch.Text = String.Empty + Me.btnVerify.Enabled = False + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + Me.pnlLoading.Visible = True + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + If IsNumeric(Me.txtTVDBID.Text) AndAlso Me.txtTVDBID.Text.Length >= 5 Then + Dim tmpXML As XDocument = Nothing + Dim sLang As String = String.Empty + + Me.ClearInfo() + Me.pnlLoading.Visible = True + Application.DoEvents() + + Dim forceXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/series/{2}/{3}.xml", Master.eSettings.TVDBMirror, Scraper.APIKey, Me.txtTVDBID.Text, Master.eSettings.TVDBLanguage)) + + If Not String.IsNullOrEmpty(forceXML) Then + Try + tmpXML = XDocument.Parse(forceXML) + Catch + End Try + + If Not IsNothing(tmpXML) Then + Dim tSer As XElement = tmpXML.Descendants("Series").FirstOrDefault(Function(s) s.HasElements) + + If Not IsNothing(tSer) Then + Me._manualresult = New Scraper.TVSearchResults + Me._manualresult.ID = Convert.ToInt32(tSer.Element("id").Value) + Me._manualresult.Name = If(Not IsNothing(tSer.Element("SeriesName")), tSer.Element("SeriesName").Value, String.Empty) + If Not IsNothing(tSer.Element("Language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = tSer.Element("Language").Value + Me._manualresult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(tSer.Element("Language")) Then + sLang = tSer.Element("Language").Value + Me._manualresult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + End If + Me._manualresult.Aired = If(Not IsNothing(tSer.Element("FirstAired")), tSer.Element("FirstAired").Value, String.Empty) + Me._manualresult.Overview = If(Not IsNothing(tSer.Element("Overview")), tSer.Element("Overview").Value, String.Empty) + Me._manualresult.Banner = If(Not IsNothing(tSer.Element("banner")), tSer.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(Me._manualresult.Name) AndAlso Not String.IsNullOrEmpty(sLang) Then + If Not String.IsNullOrEmpty(Me._manualresult.Banner) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = Me._manualresult.Banner}) + End If + + Me.OK_Button.Tag = Me._manualresult.ID + Me.lblTitle.Text = Me._manualresult.Name + Me.txtOutline.Text = Me._manualresult.Overview + Me.lblAired.Text = Me._manualresult.Aired + Me.OK_Button.Enabled = True + Me.pnlLoading.Visible = False + Me.ControlsVisible(True) + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + + Else + MsgBox(Master.eLang.GetString(83, "The ID you entered is not a valid TVDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + End If + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + sHTTP.StartDownloadImage(String.Format("http://{0}/banners/_cache/{1}", Master.eSettings.TVDBMirror, Args.pURL)) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image()} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbBanner.Image = Res.Result + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtTVDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.lvSearchResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtTVDBID.Text = String.Empty + Else + If Me.lvSearchResults.SelectedItems.Count > 0 Then Me.lvSearchResults.SelectedItems(0).Selected = False + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblAired.Text = String.Empty + Me.pbBanner.Image = Nothing + Scraper.sObject.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.pbBanner.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblAiredHeader.Visible = areVisible + Me.lblAired.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + End Sub + + Private Sub dlgTVDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + AddHandler ModulesManager.Instance.TVScraperEvent, AddressOf TVScraperEvent + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + + Me.lvSearchResults.ListViewItemSorter = Me.lvResultsSorter + + Me.SetUp() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub lvSearchResults_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lvSearchResults.ColumnClick + ' Determine if the clicked column is already the column that is + ' being sorted. + Try + If (e.Column = Me.lvResultsSorter.SortColumn) Then + ' Reverse the current sort direction for this column. + If (Me.lvResultsSorter.Order = SortOrder.Ascending) Then + Me.lvResultsSorter.Order = SortOrder.Descending + Else + Me.lvResultsSorter.Order = SortOrder.Ascending + End If + Else + ' Set the column number that is to be sorted; default to ascending. + Me.lvResultsSorter.SortColumn = e.Column + Me.lvResultsSorter.Order = SortOrder.Ascending + End If + + ' Perform the sort with these new sort options. + Me.lvSearchResults.Sort() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub lvSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvSearchResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub lvSearchResults_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvSearchResults.SelectedIndexChanged + Me.ClearInfo() + If Me.lvSearchResults.SelectedItems.Count > 0 AndAlso Not Me.chkManual.Checked Then + Dim SelectedShow As Scraper.TVSearchResults = DirectCast(Me.lvSearchResults.SelectedItems(0).Tag, Scraper.TVSearchResults) + If Not String.IsNullOrEmpty(SelectedShow.Banner) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = SelectedShow.Banner}) + End If + + Me.OK_Button.Tag = SelectedShow.ID + Me.lblTitle.Text = SelectedShow.Name + Me.txtOutline.Text = SelectedShow.Overview + Me.lblAired.Text = SelectedShow.Aired + Me.OK_Button.Enabled = True + Me.ControlsVisible(True) + End If + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + If Me.lvSearchResults.SelectedItems.Count > 0 Then + Dim sResults As Scraper.TVSearchResults = DirectCast(Me.lvSearchResults.SelectedItems(0).Tag, Scraper.TVSearchResults) + Me.sInfo.TVDBID = sResults.ID.ToString + Me.sInfo.SelectedLang = sResults.Language.ShortLang + + If Not _skipdownload Then + Me.Label3.Text = Master.eLang.GetString(84, "Downloading show info...") + Me.pnlLoading.Visible = True + Scraper.sObject.DownloadSeriesAsync(sInfo) + Else + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + ElseIf Me.chkManual.Checked AndAlso Not IsNothing(Me._manualresult) Then + Me.sInfo.TVDBID = Me._manualresult.ID.ToString + Me.sInfo.SelectedLang = Me._manualresult.Language.ShortLang + + If Not _skipdownload Then + Me.Label3.Text = Master.eLang.GetString(84, "Downloading show info...") + Me.pnlLoading.Visible = True + Scraper.sObject.DownloadSeriesAsync(sInfo) + Else + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + End Sub + + Private Sub SetUp() + Me.Label1.Text = Master.eLang.GetString(85, "TV Search Results") + Me.Label2.Text = Master.eLang.GetString(86, "View details of each result to find the proper TV show.") + Me.lblAiredHeader.Text = Master.eLang.GetString(658, "Aired:", True) + Me.lblPlotHeader.Text = Master.eLang.GetString(783, "Plot Summary:", True) + + Me.lvSearchResults.Columns(0).Text = Master.eLang.GetString(21, "Title", True) + Me.lvSearchResults.Columns(1).Text = Master.eLang.GetString(610, "Language", True) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + Select Case eType + Case Enums.TVScraperEventType.SearchResultsDownloaded + Dim lItem As ListViewItem + Dim sResults As List(Of Scraper.TVSearchResults) = DirectCast(Parameter, List(Of Scraper.TVSearchResults)) + + Me.lvSearchResults.Items.Clear() + + If Not IsNothing(sResults) AndAlso sResults.Count > 0 Then + For Each sRes As Scraper.TVSearchResults In sResults.OrderBy(Function(r) r.Lev) + lItem = New ListViewItem(sRes.Name) + lItem.SubItems.Add(sRes.Language.LongLang) + lItem.SubItems.Add(sRes.Lev.ToString) + lItem.SubItems.Add(sRes.ID.ToString) + lItem.SubItems.Add(sRes.Language.ShortLang) + lItem.Tag = sRes + Me.lvSearchResults.Items.Add(lItem) + Next + End If + + Me.pnlLoading.Visible = False + + If Me.lvSearchResults.Items.Count > 0 Then + If sResults.Select(Function(s) s.ID).Distinct.Count = 1 Then + 'they're all for the same show... try to find one with the preferred language + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + Else + 'we've got a bunch of different shows... try to find a "best match" title with the preferred language + If sResults.Where(Function(s) s.Lev <= 5).Count > 0 Then + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If Convert.ToInt32(fItem.SubItems(2).Text) <= 5 AndAlso fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + + If Me.lvSearchResults.SelectedItems.Count = 0 Then + 'get the id for the best english match and see if we have one for the preferred language with same id + Dim tID As Integer = sResults.OrderBy(Function(s) s.Lev).FirstOrDefault(Function(s) s.Language.ShortLang = "en").ID + If tID > 0 Then + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If Convert.ToInt32(fItem.SubItems(3).Text) = tID AndAlso fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + End If + End If + End If + End If + + If Me.lvSearchResults.SelectedItems.Count = 0 Then + Me.lvSearchResults.Items(0).Selected = True + End If + Me.lvSearchResults.Select() + End If + + Me.chkManual.Enabled = True + If Not Me.chkManual.Checked Then Me.lvSearchResults.Enabled = True + + Case Enums.TVScraperEventType.ShowDownloaded + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Select + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Sub txtTVDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTVDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtTVDBID_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTVDBID.KeyPress + e.Handled = StringUtils.NumericOnly(e.KeyChar, True) + End Sub + + Private Sub txtTVDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTVDBID.TextChanged + If String.IsNullOrEmpty(Me.txtTVDBID.Text) Then + Me.btnVerify.Enabled = False + Me.OK_Button.Enabled = False + Else + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim pURL As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Image + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class diff --git a/Addons/scraper.IMDB.Data/TVScraper/dlgTVEpisodePoster.Designer.vb b/Addons/scraper.IMDB.Data/TVScraper/dlgTVEpisodePoster.Designer.vb new file mode 100644 index 0000000..a3ebbd8 --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/dlgTVEpisodePoster.Designer.vb @@ -0,0 +1,86 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTVEpisodePoster + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pbPoster = New System.Windows.Forms.PictureBox() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Location = New System.Drawing.Point(292, 287) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(362, 287) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pbPoster + ' + Me.pbPoster.BackColor = System.Drawing.Color.DimGray + Me.pbPoster.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pbPoster.Location = New System.Drawing.Point(6, 6) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(423, 276) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + ' + 'dlgTVEpisodePoster + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(435, 315) + Me.ControlBox = False + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTVEpisodePoster" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Confirm Episode Poster" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.IMDB.Data/TVScraper/dlgTVEpisodePoster.resx b/Addons/scraper.IMDB.Data/TVScraper/dlgTVEpisodePoster.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/dlgTVEpisodePoster.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/TVScraper/dlgTVEpisodePoster.vb b/Addons/scraper.IMDB.Data/TVScraper/dlgTVEpisodePoster.vb new file mode 100644 index 0000000..60ed929 --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/dlgTVEpisodePoster.vb @@ -0,0 +1,48 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTVEpisodePoster + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal Poster As Image) As System.Windows.Forms.DialogResult + Me.pbPoster.Image = Poster + Return MyBase.ShowDialog + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbPoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbPoster.Click + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(Me.pbPoster.Image) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/TVScraper/dlgTVImageSelect.Designer.vb b/Addons/scraper.IMDB.Data/TVScraper/dlgTVImageSelect.Designer.vb new file mode 100644 index 0000000..cf05d15 --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/dlgTVImageSelect.Designer.vb @@ -0,0 +1,213 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVImageSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTVImageSelect)) + Me.tvList = New System.Windows.Forms.TreeView() + Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components) + Me.pnlImages = New System.Windows.Forms.Panel() + Me.pbCurrent = New System.Windows.Forms.PictureBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnOK = New System.Windows.Forms.Button() + Me.btnCancel = New System.Windows.Forms.Button() + Me.pbDelete = New System.Windows.Forms.PictureBox() + Me.pbUndo = New System.Windows.Forms.PictureBox() + Me.lblCurrentImage = New System.Windows.Forms.Label() + CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlStatus.SuspendLayout() + CType(Me.pbDelete, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbUndo, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'tvList + ' + Me.tvList.Enabled = False + Me.tvList.ImageIndex = 0 + Me.tvList.ImageList = Me.ImageList1 + Me.tvList.Location = New System.Drawing.Point(3, 4) + Me.tvList.Name = "tvList" + Me.tvList.SelectedImageIndex = 0 + Me.tvList.Size = New System.Drawing.Size(214, 262) + Me.tvList.TabIndex = 2 + Me.tvList.Visible = False + ' + 'ImageList1 + ' + Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent + Me.ImageList1.Images.SetKeyName(0, "new_page.png") + Me.ImageList1.Images.SetKeyName(1, "image.png") + Me.ImageList1.Images.SetKeyName(2, "artwork.png") + Me.ImageList1.Images.SetKeyName(3, "star_full.png") + ' + 'pnlImages + ' + Me.pnlImages.AutoScroll = True + Me.pnlImages.BackColor = System.Drawing.SystemColors.Control + Me.pnlImages.Location = New System.Drawing.Point(222, 4) + Me.pnlImages.Name = "pnlImages" + Me.pnlImages.Size = New System.Drawing.Size(622, 421) + Me.pnlImages.TabIndex = 3 + ' + 'pbCurrent + ' + Me.pbCurrent.BackColor = System.Drawing.SystemColors.Control + Me.pbCurrent.Location = New System.Drawing.Point(3, 293) + Me.pbCurrent.Name = "pbCurrent" + Me.pbCurrent.Size = New System.Drawing.Size(214, 157) + Me.pbCurrent.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbCurrent.TabIndex = 2 + Me.pbCurrent.TabStop = False + Me.pbCurrent.Visible = False + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(264, 192) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(321, 75) + Me.pnlStatus.TabIndex = 5 + ' + 'lblStatus + ' + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(5, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(310, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Gathering Data..." + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(6, 52) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(309, 19) + Me.pbStatus.Step = 1 + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbStatus.TabIndex = 1 + ' + 'btnOK + ' + Me.btnOK.Enabled = False + Me.btnOK.Location = New System.Drawing.Point(708, 431) + Me.btnOK.Name = "btnOK" + Me.btnOK.Size = New System.Drawing.Size(65, 22) + Me.btnOK.TabIndex = 0 + Me.btnOK.Text = "OK" + Me.btnOK.UseVisualStyleBackColor = True + ' + 'btnCancel + ' + Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.btnCancel.Location = New System.Drawing.Point(779, 431) + Me.btnCancel.Name = "btnCancel" + Me.btnCancel.Size = New System.Drawing.Size(65, 22) + Me.btnCancel.TabIndex = 1 + Me.btnCancel.Text = "Cancel" + Me.btnCancel.UseVisualStyleBackColor = True + ' + 'pbDelete + ' + Me.pbDelete.Image = CType(resources.GetObject("pbDelete.Image"), System.Drawing.Image) + Me.pbDelete.Location = New System.Drawing.Point(3, 293) + Me.pbDelete.Name = "pbDelete" + Me.pbDelete.Size = New System.Drawing.Size(16, 16) + Me.pbDelete.TabIndex = 13 + Me.pbDelete.TabStop = False + Me.pbDelete.Visible = False + ' + 'pbUndo + ' + Me.pbUndo.Image = CType(resources.GetObject("pbUndo.Image"), System.Drawing.Image) + Me.pbUndo.Location = New System.Drawing.Point(201, 293) + Me.pbUndo.Name = "pbUndo" + Me.pbUndo.Size = New System.Drawing.Size(16, 16) + Me.pbUndo.TabIndex = 14 + Me.pbUndo.TabStop = False + Me.pbUndo.Visible = False + ' + 'lblCurrentImage + ' + Me.lblCurrentImage.AutoSize = True + Me.lblCurrentImage.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblCurrentImage.Location = New System.Drawing.Point(0, 274) + Me.lblCurrentImage.Name = "lblCurrentImage" + Me.lblCurrentImage.Size = New System.Drawing.Size(100, 17) + Me.lblCurrentImage.TabIndex = 4 + Me.lblCurrentImage.Text = "Current Image:" + Me.lblCurrentImage.Visible = False + ' + 'dlgTVImageSelect + ' + Me.AcceptButton = Me.btnOK + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.btnCancel + Me.ClientSize = New System.Drawing.Size(849, 481) + Me.ControlBox = False + Me.Controls.Add(Me.lblCurrentImage) + Me.Controls.Add(Me.pbUndo) + Me.Controls.Add(Me.pbDelete) + Me.Controls.Add(Me.btnCancel) + Me.Controls.Add(Me.btnOK) + Me.Controls.Add(Me.pnlStatus) + Me.Controls.Add(Me.pbCurrent) + Me.Controls.Add(Me.pnlImages) + Me.Controls.Add(Me.tvList) + Me.DoubleBuffered = True + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(855, 491) + Me.Name = "dlgTVImageSelect" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "TV Image Selection" + CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlStatus.ResumeLayout(False) + CType(Me.pbDelete, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbUndo, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents tvList As System.Windows.Forms.TreeView + Friend WithEvents pnlImages As System.Windows.Forms.Panel + Friend WithEvents pbCurrent As System.Windows.Forms.PictureBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnOK As System.Windows.Forms.Button + Friend WithEvents btnCancel As System.Windows.Forms.Button + Friend WithEvents pbDelete As System.Windows.Forms.PictureBox + Friend WithEvents pbUndo As System.Windows.Forms.PictureBox + Friend WithEvents ImageList1 As System.Windows.Forms.ImageList + Friend WithEvents lblCurrentImage As System.Windows.Forms.Label +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/TVScraper/dlgTVImageSelect.resx b/Addons/scraper.IMDB.Data/TVScraper/dlgTVImageSelect.resx new file mode 100644 index 0000000..db85c76 --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/dlgTVImageSelect.resx @@ -0,0 +1,210 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="ImageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <data name="ImageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64"> + <value> + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAO + CwAAAk1TRnQBSQFMAgEBBAEAATABAAEwAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8AFgAC/wMA + Bf8DAAH/BAAL/wMAA/8BAAb/AQAD/wMABf8C9AX/AgAC/wHzAfAJvAHzAv8CAAL/AfQB8QH0AfIB8QH0 + AfEB8wL/AwAD/wH0Af8E9AH/AvQC/wMAAf8B8QEHB7wB8gH/AwAB/wG8AfEC8gXzAvIB8AH0AwAD/wGT + AfQB8AGTAQABkwH0Av8DAAL/AfQBUwGZBP8B8AFTAfAC/wQAAfEB8AfxAfIEAAH0AfAB8QHyB/MB8gHx + AfQGAAEaAvMBmQH/AZMIAAH/AXUBMgF1AfQB/wGaAjIB9AYAAvEI8gQAAfQB8AEJCLsBCQHxAfQFAAH/ + AZMBdAGZAXQBmQF0AfQIAAEaAjICUwIyAXUB/wYACfIB8wQAAfQBuwG5AbMGigGyAbkBuwH0BAAB8wGZ + BnQBkwHxAf8GAAH0BjIBGgcAAvIG8wHyAfMEAAH0AbsCuQGsAYoCrAGKAawBswG5AbsB9AQAAvEB8AG7 + AbUBBwEaAfIB8wHwAf8GAAH2AVMFMgEbBwAK8wQAAf8BuwO5AbIDrAGzArkBuwH0BAAB8gG8Aa4BbAFL + AUwBUgGZAfMB8QH/BQAB8wFTBzIBGgYACvMEAAH/AbsDuQGyAqwBsgO5AbsB9AQAAfEB/wEHAW4BUgIy + AY4B9AHyAf8DAAH/ARoKMgF6Af8EAArzBAAB/wEJAroBswGsArIBrAGzAroBuwH0BAAB8gH2AbsCggNM + AvMB/wMAAfQBMgFTAlkBUwMyA1kBMgEaBAAG8wP0AfMEAAH/AQkDugSyA7oBCQH0BAABGwH0AbsB9AGO + AbABkwF1AfQB8wH/BAAE/wEaAjIBegX/BAAF8wH0AfIC7wHyBAAB9AHwA7sBugKyAboDuwEJAfQEAAEb + Af8B8wH/Ab0B8gH0AbcB8wH0Af8IAAH0AjgBGgkABfMB9AEHAewB8AUAAfQB8AoJAfAB9AQAAfMC9AEb + AZkBkwEaAvQBGwH/CAAB/wF6ATgB/wkABfMB9AEHAbwGAAH/AfMBGQnyAfMB/wQABP8BmQF0AfQD/woA + ARoBWQH/CQAB/wX0AfMIAAH0CvMB9AkAAfMBGg4AAf8B9EcAAUIBTQE+BwABPgMAASgDAAFAAwABIAMA + AQEBAAEBBgABARYAA/+BAAL/AZwBHQHgAQMBiAERAcABAwIAAcABAwGAAQEBwAEDAYABAQHAAUMBgAEB + AeABBwGAAQEB+AEfAeABBwHgAQcBgAEBAfABDwHwAQcB4AEHAYABAQHgAQMB8AEPAeABBwGAAQEB4AED + AfABDwHgAQcBgAEBAeABAwHgAQcB4AEHAYABAQHgAQMBgAEBAeABBwGAAQEB4AEDAYABAQHgAQcBgAEB + AeABAwHAAQEB4AEHAYABAQHgAQMB/AE/AeABDwGAAQEB4AEDAfwBPwHgAR8BgAEBAeABBwH+AT8B4AE/ + AcABAwH+AX8B/gF/CP8L +</value> + </data> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="pbDelete.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAGHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3NPsx9OAAAB60lEQVQ4T2P4//8/AyUYRfN9B2Pfu3YGzbgMvGdnkHnP3qgQWR5uwC1X + s4grBqr/L2kp/L9upbsF3ZAbdgaNl3WV/1/WUfp/w96w9//BmYwgNWADrnpYcZ3WUf5/XFEajE+py/2/ + aIkw5LKtQeNpbSWgnBQYn9JU/H/eTNsUbsBOTi7GA4rSPQeUZf6DMVDRITW5/2csdVecszesOaqt+H8/ + UAwuryS9/4CsBDfcAJhzdyrL9O5Qkv6/E4h3KEj93wN0yT4txf/bFSQhYhC5/Us0FVlgejBiYCPQkA1A + hWAMtHU90CAYf6OS9N752iqsWAMRWXCFkvTxFcCwQMPvNpkawG3G6YIFitINCxWk/gDxf3S8QFFqI3rs + oHhhhqJ040ygRhieAWSDMKqY9Jb/T7/D9YEZE1TlGSYqSDVMlJf6D8MTQGwF6c2TFKS7wGxkrCC1ZZKK + HAc8FnrVFLg65SX/o+H9tfqqTCBFXQpSvR1o8l2K0mYo0dihJJvYBLSlSU7yP5De9y3AG6wZhpvlpbrB + ckDcoigz/bGzFViegZkBjAWAFG+cpGh9trTYFm4WZgMgXwcobgzCQDaIr5AiKTo3U1p8IZAtAsR8cBcA + FTEDMdhPYEEGBk4gnxcZA8V4kOTZQHowUiI52RoAvKofAJdcVi8AAAAASUVORK5CYII= +</value> + </data> + <data name="pbUndo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAHHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3MgQ1M0BrLToAAAAihJREFUOE9j+P//PwMlmCLNIIupZwATAwMjOxs7Q8XKkwzFG2+y + GnYd8XOZdprZedopBr9FVxiSNt5jqD3wjGHC6TcMvadegzGKCxgYGFhVdE0Y0ldcYVFt3LeYIWfrO9aS + XZzmU84weC+6ypBMhAEsPoU9nBJV+w4xpG/4z5C//SN/zf4ou1kXDIAGsKRvvsdQfxCPC7jFFIVFc9fu + ZEhb+58hZ9N/hoLt/xlL9/xnqT78X6Ln3D3bRbfaSvc+FZ927g3DpDMQjOIF1ohptxlSgJrTEQYwlOz+ + z1C+/z9D1eH/jM2n/6vOuf06dtsT64ydTxjSdjxBNYApdf1/huSVmAZUHPjPUHPkP0P9if8MLWf/K8y7 + 98lw0T1do0V3UQ0QsoqIZc/e/AXZCwyFuyAuABtw8j9D05n/LF2X/2ssfnTEeOkDVAPYmRgZtLJn2bFk + b/7BkLURFAa/NbuOdUi1HY8QbjsZKtN3Pkl20uUpHD2Xn/FNuf3fYNljF4xotPGLYohacsWOIXPDW4a8 + bW/lmw9yKXedYJDuOs2gO/0Sg/vyOwxZu56yGCy+Xy086/58dAMYxSRlGJq3XWOIWnhBS6hy93rB6r0c + YnX7GWQ6TzJoT7vE4Lz0NkPW7ucMkdufM1mufOJP3aQMMo2ZgYEZiEWBWBaYtKVYOPkNWMRUvYFscSCW + BYqLAzErcu5FyUxASUaQAiDmAGIuIAbLA2l2qBgbSA2yAQAKojORM6Lv5AAAAABJRU5ErkJggg== +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/TVScraper/dlgTVImageSelect.vb b/Addons/scraper.IMDB.Data/TVScraper/dlgTVImageSelect.vb new file mode 100644 index 0000000..288414e --- /dev/null +++ b/Addons/scraper.IMDB.Data/TVScraper/dlgTVImageSelect.vb @@ -0,0 +1,1224 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +'TODO: 1.5 - TV Show renaming (including "dump folder") +'TODO: 1.5 - Support VIDEO_TS/BDMV folders for TV Shows + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgTVImageSelect + +#Region "Fields" + + Friend WithEvents bwDownloadFanart As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwLoadData As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwLoadImages As New System.ComponentModel.BackgroundWorker + + Private DefaultImages As New Scraper.TVImages + Private FanartList As New List(Of Scraper.TVDBFanart) + Private GenericPosterList As New List(Of Scraper.TVDBPoster) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + Private iTop As Integer = 5 + Private lblImage() As Label + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private SeasonList As New List(Of Scraper.TVDBSeasonPoster) + Private SelIsPoster As Boolean = True + Private SelSeason As Integer = -999 + Private ShowPosterList As New List(Of Scraper.TVDBShowPoster) + Private _fanartchanged As Boolean = False + Private _id As Integer = -1 + Private _season As Integer = -999 + Private _type As Enums.TVImageType = Enums.TVImageType.All + Private _withcurrent As Boolean = True + Private _ScrapeType As Enums.ScrapeType + +#End Region 'Fields + +#Region "Methods" + + Public Function SetDefaults() As Boolean + Dim iSeason As Integer = -1 + Dim iEpisode As Integer = -1 + Dim iProgress As Integer = 3 + + Dim tSea As Scraper.TVDBSeasonPoster + + Try + Me.bwLoadImages.ReportProgress(Scraper.TVDBImages.SeasonImageList.Count + Scraper.tmpTVDBShow.Episodes.Count + 3, "defaults") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster) AndAlso IsNothing(Scraper.TVDBImages.ShowPoster.Image.Image) Then + If Master.eSettings.IsShowBanner Then + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredShowBannerType AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If Master.eSettings.OnlyGetTVImagesForSelectedLanguage Then + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + End If + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredShowBannerType) + + 'no preferred size, just get any one of them + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.ShowPoster.Image = tSP.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSP.URL + Else + 'still nothing? try to get from generic posters + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) p.Language = Master.eSettings.TVDBLanguage AndAlso Not IsNothing(p.Image.Image)) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.ShowPoster.Image = tSPg.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSPg.URL + End If + End If + Else + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredShowPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If Master.eSettings.OnlyGetTVImagesForSelectedLanguage Then + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + End If + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredShowPosterSize) + + 'no preferred size, just get any one of them + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.ShowPoster.Image = tSPg.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSPg.URL + Else + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.ShowPoster.Image = tSP.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSP.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(1, "progress") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart) AndAlso IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Dim tSF As Scraper.TVDBFanart = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image) AndAlso Me.GetFanartDims(f.Size) = Master.eSettings.PreferredShowFanartSize AndAlso f.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSF) Then tSF = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image) AndAlso Me.GetFanartDims(f.Size) = Master.eSettings.PreferredShowFanartSize) + + 'no fanart of the preferred size, just get the first available + If IsNothing(tSF) Then tSF = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image)) + + If Not IsNothing(tSF) Then + If Not String.IsNullOrEmpty(tSF.LocalFile) AndAlso File.Exists(tSF.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(tSF.LocalFile) + Scraper.TVDBImages.ShowFanart.LocalFile = tSF.LocalFile + Scraper.TVDBImages.ShowFanart.URL = tSF.URL + ElseIf Not String.IsNullOrEmpty(tSF.LocalFile) AndAlso Not String.IsNullOrEmpty(tSF.URL) Then + Scraper.TVDBImages.ShowFanart.Image.FromWeb(tSF.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(tSF.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(tSF.LocalFile, , , False) + Scraper.TVDBImages.ShowFanart.LocalFile = tSF.LocalFile + Scraper.TVDBImages.ShowFanart.URL = tSF.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(2, "progress") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.AllSeasonPoster) AndAlso Master.eSettings.AllSeasonPosterEnabled AndAlso IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + If Master.eSettings.IsAllSBanner Then + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredAllSBannerType AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredAllSBannerType) + + 'no preferred size, just get any one of them + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSP.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSP.URL + Else + 'still nothing? try to get from generic posters + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSPg.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSPg.URL + End If + End If + Else + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredAllSPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredAllSPosterSize) + + 'no preferred size, just get any one of them + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSPg.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSPg.URL + Else + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSP.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSP.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(3, "progress") + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.SeasonFanart Then + For Each cSeason As Scraper.TVDBSeasonImage In Scraper.TVDBImages.SeasonImageList + Try + iSeason = cSeason.Season + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster) AndAlso IsNothing(cSeason.Poster.Image) Then + tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason AndAlso p.Type = Master.eSettings.PreferredSeasonPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + If IsNothing(tSea) Then tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason AndAlso p.Type = Master.eSettings.PreferredSeasonPosterSize) + If IsNothing(tSea) Then tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason) + If Not IsNothing(tSea) Then cSeason.Poster = tSea.Image + End If + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonFanart) AndAlso Master.eSettings.SeasonFanartEnabled AndAlso IsNothing(cSeason.Fanart.Image.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then cSeason.Fanart.Image = Scraper.TVDBImages.ShowFanart.Image + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All Then + For Each Episode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + If Not String.IsNullOrEmpty(Episode.TVEp.LocalFile) Then + Episode.TVEp.Poster.FromFile(Episode.TVEp.LocalFile) + ElseIf Not String.IsNullOrEmpty(Episode.EpPosterPath) Then + Episode.TVEp.Poster.FromFile(Episode.EpPosterPath) + End If + + If Master.eSettings.EpisodeFanartEnabled Then + If Not String.IsNullOrEmpty(Episode.EpFanartPath) Then + Episode.TVEp.Fanart.FromFile(Episode.EpFanartPath) + ElseIf Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Episode.TVEp.Fanart = Scraper.TVDBImages.ShowFanart.Image + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + DefaultImages = Scraper.TVDBImages.Clone + + Return False + End Function + + Public Overloads Function ShowDialog(ByVal ShowID As Integer, ByVal Type As Enums.TVImageType, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As System.Windows.Forms.DialogResult + Me._id = ShowID + Me._type = Type + Me._withcurrent = WithCurrent + Me._ScrapeType = ScrapeType + Return MyBase.ShowDialog + End Function + + Public Overloads Function ShowDialog(ByVal ShowID As Integer, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal CurrentImage As Images) As Images + Me._id = ShowID + Me._type = Type + Me._season = Season + Me.pbCurrent.Image = CurrentImage.Image + Me.pbCurrent.Tag = CurrentImage + + If MyBase.ShowDialog = Windows.Forms.DialogResult.OK Then + Return CType(Me.pbCurrent.Tag, Images) + Else + Return Nothing + End If + End Function + + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal fTag As ImageTag) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + ReDim Preserve Me.lblImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.lblImage(iIndex) = New Label() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(187, 187) + Me.pbImage(iIndex).Size = New Size(181, 151) + Me.lblImage(iIndex).Size = New Size(181, 30) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblImage(iIndex).Text = sDescription + Me.pbImage(iIndex).Image = fTag.ImageObj.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.lblImage(iIndex).Left = 0 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.lblImage(iIndex).Top = 151 + Me.pnlImage(iIndex).Tag = fTag + Me.pbImage(iIndex).Tag = fTag + Me.lblImage(iIndex).Tag = fTag + Me.pnlImages.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 192 + Else + Me.iLeft += 192 + End If + End Sub + + Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click + If Me.bwLoadData.IsBusy Then Me.bwLoadData.CancelAsync() + If Me.bwLoadImages.IsBusy Then Me.bwLoadImages.CancelAsync() + + While Me.bwLoadData.IsBusy OrElse Me.bwLoadImages.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click + DoneAndClose() + End Sub + + Private Sub DoneAndClose() + If Me._type = Enums.TVImageType.All Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + Master.currShow.ShowPosterPath = Scraper.TVDBImages.ShowPoster.LocalFile + If Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.TVDBImages.ShowFanart.LocalFile) + Master.currShow.ShowFanartPath = Scraper.TVDBImages.ShowFanart.LocalFile + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.Clear() + Scraper.TVDBImages.ShowFanart.Image.FromWeb(Scraper.TVDBImages.ShowFanart.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.ShowFanart.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile, , , False) + Master.currShow.ShowFanartPath = Scraper.TVDBImages.ShowFanart.LocalFile + End If + End If + If Master.eSettings.AllSeasonPosterEnabled AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + Master.currShow.SeasonPosterPath = Scraper.TVDBImages.AllSeasonPoster.LocalFile + End If + ElseIf Me._type = Enums.TVImageType.SeasonFanart AndAlso Me._fanartchanged Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + If Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromFile(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) + Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Clear() + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromWeb(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) + If Not IsNothing(Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile).FullName) + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Save(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile, , , False) + Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image + End If + End If + ElseIf (Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart) AndAlso Me._fanartchanged Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + If Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.TVDBImages.ShowFanart.LocalFile) + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.Clear() + Scraper.TVDBImages.ShowFanart.Image.FromWeb(Scraper.TVDBImages.ShowFanart.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.ShowFanart.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile, , , False) + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + End If + End If + End If + + Me.DialogResult = Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + + Private Sub bwLoadData_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwLoadData.DoWork + Dim cSI As Scraper.TVDBSeasonImage + Dim iProgress As Integer = 1 + Dim iSeason As Integer = -1 + + Me.bwLoadData.ReportProgress(Scraper.tmpTVDBShow.Episodes.Count, "current") + + 'initialize the struct + Scraper.TVDBImages.ShowPoster = New Scraper.TVDBShowPoster + Scraper.TVDBImages.ShowFanart = New Scraper.TVDBFanart + Scraper.TVDBImages.AllSeasonPoster = New Scraper.TVDBShowPoster + Scraper.TVDBImages.SeasonImageList = New List(Of Scraper.TVDBSeasonImage) + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + Select Case Me._type + Case Enums.TVImageType.AllSeasonPoster + Scraper.TVDBImages.AllSeasonPoster.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.SeasonFanart + cSI = New Scraper.TVDBSeasonImage + cSI.Season = Me._season + cSI.Fanart.Image = CType(Me.pbCurrent.Tag, Images) + Scraper.TVDBImages.SeasonImageList.Add(cSI) + Case Enums.TVImageType.SeasonPoster + cSI = New Scraper.TVDBSeasonImage + cSI.Season = Me._season + cSI.Poster = CType(Me.pbCurrent.Tag, Images) + Scraper.TVDBImages.SeasonImageList.Add(cSI) + Case Enums.TVImageType.ShowFanart, Enums.TVImageType.EpisodeFanart + Scraper.TVDBImages.ShowFanart.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.ShowPoster + Scraper.TVDBImages.ShowPoster.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.All + + If _withcurrent Then + If Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.Show.ShowPosterPath) Then + Scraper.TVDBImages.ShowPoster.Image.FromFile(Scraper.tmpTVDBShow.Show.ShowPosterPath) + Scraper.TVDBImages.ShowPoster.LocalFile = Scraper.tmpTVDBShow.Show.ShowPosterPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.Show.ShowFanartPath) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.tmpTVDBShow.Show.ShowFanartPath) + Scraper.TVDBImages.ShowFanart.LocalFile = Scraper.tmpTVDBShow.Show.ShowFanartPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Master.eSettings.AllSeasonPosterEnabled AndAlso Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath) Then + Scraper.TVDBImages.AllSeasonPoster.Image.FromFile(Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath) + Scraper.TVDBImages.AllSeasonPoster.LocalFile = Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + For Each sEpisode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + iSeason = sEpisode.TVEp.Season + If iSeason > -1 Then + If IsNothing(Scraper.TVDBImages.ShowPoster.Image) AndAlso Not String.IsNullOrEmpty(sEpisode.ShowPosterPath) Then + Scraper.TVDBImages.ShowPoster.Image.FromFile(sEpisode.ShowPosterPath) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Master.eSettings.EpisodeFanartEnabled AndAlso IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) AndAlso Not String.IsNullOrEmpty(sEpisode.ShowFanartPath) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(sEpisode.ShowFanartPath) + Scraper.TVDBImages.ShowFanart.LocalFile = sEpisode.ShowFanartPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Scraper.TVDBImages.SeasonImageList.Where(Function(s) s.Season = iSeason).Count = 0 Then + cSI = New Scraper.TVDBSeasonImage + cSI.Season = iSeason + If Not String.IsNullOrEmpty(sEpisode.SeasonPosterPath) Then + cSI.Poster.FromFile(sEpisode.SeasonPosterPath) + End If + If Master.eSettings.SeasonFanartEnabled AndAlso Not String.IsNullOrEmpty(sEpisode.SeasonFanartPath) Then + cSI.Fanart.Image.FromFile(sEpisode.SeasonFanartPath) + cSI.Fanart.LocalFile = sEpisode.SeasonFanartPath + End If + Scraper.TVDBImages.SeasonImageList.Add(cSI) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + End If + Me.bwLoadData.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + Else + For Each sEpisode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + iSeason = sEpisode.TVEp.Season + + If Scraper.TVDBImages.SeasonImageList.Where(Function(s) s.Season = iSeason).Count = 0 Then + cSI = New Scraper.TVDBSeasonImage + cSI.Season = iSeason + Scraper.TVDBImages.SeasonImageList.Add(cSI) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + Me.bwLoadData.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + End Select + End Sub + + Private Sub bwLoadData_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwLoadData.ProgressChanged + Try + If e.UserState.ToString = "progress" Then + Me.pbStatus.Value = e.ProgressPercentage + ElseIf e.UserState.ToString = "current" Then + Me.lblStatus.Text = Master.eLang.GetString(88, "Loading Current Images...") + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + Else + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwLoadData_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwLoadData.RunWorkerCompleted + If Not e.Cancelled Then + Me.GenerateList() + + Me.lblStatus.Text = Master.eLang.GetString(89, "(Down)Loading New Images...") + Me.bwLoadImages.WorkerReportsProgress = True + Me.bwLoadImages.WorkerSupportsCancellation = True + Me.bwLoadImages.RunWorkerAsync() + End If + End Sub + + Private Sub bwLoadImages_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwLoadImages.DoWork + e.Cancel = Me.DownloadAllImages() + End Sub + + Private Sub bwLoadImages_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwLoadImages.ProgressChanged + Try + If e.UserState.ToString = "progress" Then + Me.pbStatus.Value = e.ProgressPercentage + ElseIf e.UserState.ToString = "defaults" Then + Me.lblStatus.Text = Master.eLang.GetString(90, "Setting Defaults...") + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + Else + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwLoadImages_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwLoadImages.RunWorkerCompleted + Me.pnlStatus.Visible = False + If _ScrapeType = Enums.ScrapeType.FullAuto Then + DoneAndClose() + Else + If Not e.Cancelled Then + Me.tvList.Enabled = True + Me.tvList.Visible = True + Me.tvList.SelectedNode = Me.tvList.Nodes(0) + Me.tvList.Focus() + + Me.btnOK.Enabled = True + End If + + Me.pbCurrent.Visible = True + Me.lblCurrentImage.Visible = True + End If + End Sub + + Private Sub CheckCurrentImage() + Me.pbDelete.Visible = Not IsNothing(Me.pbCurrent.Image) AndAlso Me.pbCurrent.Visible + Me.pbUndo.Visible = Me.pbCurrent.Visible + End Sub + + Private Sub ClearImages() + Try + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop = 5 + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Tag = Nothing + + If Me.pnlImages.Controls.Count > 0 Then + For i As Integer = UBound(Me.pnlImage) To 0 Step -1 + If Not IsNothing(Me.pnlImage(i)) Then + If Not IsNothing(Me.lblImage(i)) AndAlso Me.pnlImage(i).Contains(Me.lblImage(i)) Then Me.pnlImage(i).Controls.Remove(Me.lblImage(i)) + If Not IsNothing(Me.pbImage(i)) AndAlso Me.pnlImage(i).Contains(Me.pbImage(i)) Then Me.pnlImage(i).Controls.Remove(Me.pbImage(i)) + If Me.pnlImages.Contains(Me.pnlImage(i)) Then Me.pnlImages.Controls.Remove(Me.pnlImage(i)) + End If + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgTVImageSelect_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + AddHandler pnlImages.MouseWheel, AddressOf MouseWheelEvent + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler tvList.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlImages) + + Me.SetUp() + End Sub + + Private Sub dlgTVImageSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.bwLoadData.WorkerReportsProgress = True + Me.bwLoadData.WorkerSupportsCancellation = True + Me.bwLoadData.RunWorkerAsync() + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, ByVal SelTag As ImageTag) + Try + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + Next + + Me.pnlImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + + SetImage(SelTag) + + Me.CheckCurrentImage() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function DownloadAllImages() As Boolean + Dim iProgress As Integer = 1 + + Try + Me.bwLoadImages.ReportProgress(Scraper.tmpTVDBShow.Episodes.Count + Scraper.tmpTVDBShow.SeasonPosters.Count + Scraper.tmpTVDBShow.ShowPosters.Count + Scraper.tmpTVDBShow.Fanart.Count + Scraper.tmpTVDBShow.Posters.Count, "max") + + If Me._type = Enums.TVImageType.All Then + For Each Epi As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + If Not File.Exists(Epi.TVEp.LocalFile) Then + If Not String.IsNullOrEmpty(Epi.TVEp.PosterURL) Then + Epi.TVEp.Poster.FromWeb(Epi.TVEp.PosterURL) + If Not IsNothing(Epi.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Epi.TVEp.LocalFile).FullName) + Epi.TVEp.Poster.Save(Epi.TVEp.LocalFile) + End If + End If + Else + Epi.TVEp.Poster.FromFile(Epi.TVEp.LocalFile) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each Seas As Scraper.TVDBSeasonPoster In Scraper.tmpTVDBShow.SeasonPosters + Try + If Not File.Exists(Seas.LocalFile) Then + If Not String.IsNullOrEmpty(Seas.URL) Then + Seas.Image.FromWeb(Seas.URL) + If Not IsNothing(Seas.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Seas.LocalFile).FullName) + Seas.Image.Save(Seas.LocalFile, , , False) + SeasonList.Add(Seas) + End If + End If + Else + Seas.Image.FromFile(Seas.LocalFile) + SeasonList.Add(Seas) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each SPost As Scraper.TVDBShowPoster In Scraper.tmpTVDBShow.ShowPosters + Try + If Not File.Exists(SPost.LocalFile) Then + If Not String.IsNullOrEmpty(SPost.URL) Then + SPost.Image.FromWeb(SPost.URL) + If Not IsNothing(SPost.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(SPost.LocalFile).FullName) + SPost.Image.Save(SPost.LocalFile, , , False) + ShowPosterList.Add(SPost) + End If + End If + Else + SPost.Image.FromFile(SPost.LocalFile) + ShowPosterList.Add(SPost) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.SeasonFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart Then + For Each SFan As Scraper.TVDBFanart In Scraper.tmpTVDBShow.Fanart + Try + If Not File.Exists(SFan.LocalThumb) Then + If Not String.IsNullOrEmpty(SFan.ThumbnailURL) Then + SFan.Image.FromWeb(SFan.ThumbnailURL) + If Not IsNothing(SFan.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(SFan.LocalThumb).FullName) + SFan.Image.Save(SFan.LocalThumb, , , False) + FanartList.Add(SFan) + End If + End If + Else + SFan.Image.FromFile(SFan.LocalThumb) + FanartList.Add(SFan) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster OrElse _ + Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each Post As Scraper.TVDBPoster In Scraper.tmpTVDBShow.Posters + Try + If Not File.Exists(Post.LocalFile) Then + If Not String.IsNullOrEmpty(Post.URL) Then + Post.Image.FromWeb(Post.URL) + If Not IsNothing(Post.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Post.LocalFile).FullName) + Post.Image.Save(Post.LocalFile, , , False) + GenericPosterList.Add(Post) + End If + End If + Else + Post.Image.FromFile(Post.LocalFile) + GenericPosterList.Add(Post) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return Me.SetDefaults() + End Function + + Private Function DownloadFanart(ByVal iTag As ImageTag) As Image + Dim sHTTP As New HTTP + + Using tImage As New Images + If Not String.IsNullOrEmpty(iTag.Path) AndAlso File.Exists(iTag.Path) Then + tImage.FromFile(iTag.Path) + ElseIf Not String.IsNullOrEmpty(iTag.Path) AndAlso Not String.IsNullOrEmpty(iTag.URL) Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + + Application.DoEvents() + + tImage.FromWeb(iTag.URL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(iTag.Path).FullName) + tImage.Save(iTag.Path, , , False) + End If + + sHTTP = Nothing + + Me.pnlStatus.Visible = False + End If + + Return tImage.Image + End Using + End Function + + Private Sub GenerateList() + Try + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster Then Me.tvList.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(91, "Show Poster"), .Tag = "showp", .ImageIndex = 0, .SelectedImageIndex = 0}) + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart Then Me.tvList.Nodes.Add(New TreeNode With {.Text = If(Me._type = Enums.TVImageType.EpisodeFanart, Master.eLang.GetString(92, "Episode Fanart"), Master.eLang.GetString(93, "Show Fanart")), .Tag = "showf", .ImageIndex = 1, .SelectedImageIndex = 1}) + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.AllSeasonPoster) AndAlso Master.eSettings.AllSeasonPosterEnabled Then Me.tvList.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(94, "All Seasons Poster"), .Tag = "allp", .ImageIndex = 2, .SelectedImageIndex = 2}) + + Dim TnS As TreeNode + If Me._type = Enums.TVImageType.All Then + For Each cSeason As Scraper.TVDBSeasonImage In Scraper.TVDBImages.SeasonImageList.OrderBy(Function(s) s.Season) + Try + TnS = New TreeNode(String.Format(Master.eLang.GetString(726, "Season {0}", True), cSeason.Season), 3, 3) + TnS.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(95, "Season Posters"), .Tag = String.Concat("p", cSeason.Season.ToString), .ImageIndex = 0, .SelectedImageIndex = 0}) + If Master.eSettings.SeasonFanartEnabled Then TnS.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(96, "Season Fanart"), .Tag = String.Concat("f", cSeason.Season.ToString), .ImageIndex = 1, .SelectedImageIndex = 1}) + Me.tvList.Nodes.Add(TnS) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + ElseIf Me._type = Enums.TVImageType.SeasonPoster Then + Me.tvList.Nodes.Add(New TreeNode With {.Text = String.Format(Master.eLang.GetString(97, "Season {0} Posters"), Me._season), .Tag = String.Concat("p", Me._season)}) + ElseIf Me._type = Enums.TVImageType.SeasonFanart Then + If Master.eSettings.SeasonFanartEnabled Then Me.tvList.Nodes.Add(New TreeNode With {.Text = String.Format(Master.eLang.GetString(99, "Season {0} Fanart"), Me._season), .Tag = String.Concat("f", Me._season)}) + End If + + Me.tvList.ExpandAll() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetFanartDims(ByVal fSize As Size) As Enums.FanartSize + Try + If (fSize.Width > 1000 AndAlso fSize.Height > 750) OrElse (fSize.Height > 1000 AndAlso fSize.Width > 750) Then + Return Enums.FanartSize.Lrg + ElseIf (fSize.Width > 700 AndAlso fSize.Height > 400) OrElse (fSize.Height > 700 AndAlso fSize.Width > 400) Then + Return Enums.FanartSize.Mid + Else + Return Enums.FanartSize.Small + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Function + + Private Function GetPosterDims(ByVal pSize As Size) As Enums.PosterSize + Try + If (pSize.Width > pSize.Height) AndAlso (pSize.Width > (pSize.Height * 2)) AndAlso (pSize.Width > 300) Then + 'at least twice as wide than tall... consider it wide (also make sure it's big enough) + Return Enums.PosterSize.Wide + ElseIf (pSize.Height > 1000 AndAlso pSize.Width > 750) OrElse (pSize.Width > 1000 AndAlso pSize.Height > 750) Then + Return Enums.PosterSize.Xlrg + ElseIf (pSize.Height > 700 AndAlso pSize.Width > 500) OrElse (pSize.Width > 700 AndAlso pSize.Height > 500) Then + Return Enums.PosterSize.Lrg + ElseIf (pSize.Height > 250 AndAlso pSize.Width > 150) OrElse (pSize.Width > 250 AndAlso pSize.Height > 150) Then + Return Enums.PosterSize.Mid + Else + Return Enums.PosterSize.Small + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Function + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Dim iindex As Integer = Convert.ToInt32(DirectCast(sender, Label).Name) + Me.DoSelect(iindex, DirectCast(DirectCast(sender, Label).Tag, ImageTag)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlImages.VerticalScroll.Value + 50) <= pnlImages.VerticalScroll.Maximum Then + pnlImages.VerticalScroll.Value += 50 + Else + pnlImages.VerticalScroll.Value = pnlImages.VerticalScroll.Maximum + End If + Else + If (pnlImages.VerticalScroll.Value - 50) >= pnlImages.VerticalScroll.Minimum Then + pnlImages.VerticalScroll.Value -= 50 + Else + pnlImages.VerticalScroll.Value = pnlImages.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub pbDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbDelete.Click + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Tag = Nothing + Me.SetImage(New ImageTag) + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, ImageTag)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) + Dim tImage As Image = Nothing + Dim iTag As ImageTag = DirectCast(DirectCast(sender, PictureBox).Tag, ImageTag) + If Not IsNothing(iTag) OrElse Not iTag.isFanart Then + tImage = DownloadFanart(iTag) + Else + tImage = DirectCast(sender, PictureBox).Image + End If + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage) + End Sub + + Private Sub pbUndo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbUndo.Click + If Me.SelSeason = -999 Then + If Me.SelIsPoster Then + Scraper.TVDBImages.ShowPoster.Image = DefaultImages.ShowPoster.Image + Scraper.TVDBImages.ShowPoster.LocalFile = DefaultImages.ShowPoster.LocalFile + Scraper.TVDBImages.ShowPoster.URL = DefaultImages.ShowPoster.URL + Me.pbCurrent.Image = Scraper.TVDBImages.ShowPoster.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowPoster.Image + Else + Scraper.TVDBImages.ShowFanart.Image = DefaultImages.ShowFanart.Image + Scraper.TVDBImages.ShowFanart.LocalFile = DefaultImages.ShowFanart.LocalFile + Scraper.TVDBImages.ShowFanart.URL = DefaultImages.ShowFanart.URL + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + End If + ElseIf Me.SelSeason = 999 Then + Scraper.TVDBImages.AllSeasonPoster.Image = DefaultImages.AllSeasonPoster.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = DefaultImages.AllSeasonPoster.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = DefaultImages.AllSeasonPoster.URL + Me.pbCurrent.Image = Scraper.TVDBImages.AllSeasonPoster.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.AllSeasonPoster.Image + Else + If Me.SelIsPoster Then + Dim dSPost As Images = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster + Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster = dSPost + Me.pbCurrent.Image = dSPost.Image + Me.pbCurrent.Tag = dSPost + Else + Dim dSFan As Scraper.TVDBFanart = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + Dim tSFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + tSFan.Image = dSFan.Image + tSFan.LocalFile = dSFan.LocalFile + tSFan.URL = dSFan.URL + Me.pbCurrent.Image = dSFan.Image.Image + Me.pbCurrent.Tag = dSFan.Image + End If + End If + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Dim iIndex As Integer = Convert.ToInt32(DirectCast(sender, Panel).Name) + Me.DoSelect(iIndex, DirectCast(DirectCast(sender, Panel).Tag, ImageTag)) + End Sub + + Private Sub SetImage(ByVal SelTag As ImageTag) + Me.pbCurrent.Image = SelTag.ImageObj.Image + Me.pbCurrent.Tag = SelTag.ImageObj + + Me._fanartchanged = True + + If Me.SelSeason = -999 Then + If Me.SelIsPoster Then + Scraper.TVDBImages.ShowPoster.Image = SelTag.ImageObj + Scraper.TVDBImages.ShowPoster.LocalFile = SelTag.Path + Scraper.TVDBImages.ShowPoster.URL = SelTag.URL + Else + Scraper.TVDBImages.ShowFanart.Image = SelTag.ImageObj + Scraper.TVDBImages.ShowFanart.LocalFile = SelTag.Path + Scraper.TVDBImages.ShowFanart.URL = SelTag.URL + End If + ElseIf Me.SelSeason = 999 Then + Scraper.TVDBImages.AllSeasonPoster.Image = SelTag.ImageObj + Scraper.TVDBImages.AllSeasonPoster.LocalFile = SelTag.Path + Scraper.TVDBImages.AllSeasonPoster.URL = SelTag.URL + Else + If Me.SelIsPoster Then + Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster = SelTag.ImageObj + Else + Dim tFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + If Not IsNothing(tFan) Then + tFan.Image = SelTag.ImageObj + tFan.LocalFile = SelTag.Path + tFan.URL = SelTag.URL + End If + End If + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(99, "TV Image Selection") + Me.btnOK.Text = Master.eLang.GetString(179, "OK", True) + Me.btnCancel.Text = Master.eLang.GetString(167, "Cancel", True) + Me.lblCurrentImage.Text = Master.eLang.GetString(100, "Current Image:") + End Sub + + Private Sub tvList_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvList.AfterSelect + Dim iCount As Integer = 0 + + Try + ClearImages() + If Not IsNothing(e.Node.Tag) AndAlso Not String.IsNullOrEmpty(e.Node.Tag.ToString) Then + Me.pbCurrent.Visible = True + Me.lblCurrentImage.Visible = True + If e.Node.Tag.ToString = "showp" Then + Me.SelSeason = -999 + Me.SelIsPoster = True + If Not IsNothing(Scraper.TVDBImages.ShowPoster) AndAlso Not IsNothing(Scraper.TVDBImages.ShowPoster.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowPoster.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.ShowPoster.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + iCount = ShowPosterList.Count + For i = 0 To iCount - 1 + If Not IsNothing(ShowPosterList(i)) AndAlso Not IsNothing(ShowPosterList(i).Image) AndAlso Not IsNothing(ShowPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False, .ImageObj = ShowPosterList(i).Image}) + End If + Next + + For i = 0 To GenericPosterList.Count - 1 + If Not IsNothing(GenericPosterList(i)) AndAlso Not IsNothing(GenericPosterList(i).Image) AndAlso Not IsNothing(GenericPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False, .ImageObj = GenericPosterList(i).Image}) + End If + Next + + ElseIf e.Node.Tag.ToString = "showf" Then + + Me.SelSeason = -999 + Me.SelIsPoster = False + If Not IsNothing(Scraper.TVDBImages.ShowFanart) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + For i = 0 To FanartList.Count - 1 + If Not IsNothing(FanartList(i)) AndAlso Not IsNothing(FanartList(i).Image) AndAlso Not IsNothing(FanartList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True, .ImageObj = FanartList(i).Image}) + End If + Next + + ElseIf e.Node.Tag.ToString = "allp" Then + Me.SelSeason = 999 + Me.SelIsPoster = True + If Not IsNothing(Scraper.TVDBImages.AllSeasonPoster) AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image) AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.AllSeasonPoster.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + iCount = GenericPosterList.Count + For i = 0 To iCount - 1 + If Not IsNothing(GenericPosterList(i)) AndAlso Not IsNothing(GenericPosterList(i).Image) AndAlso Not IsNothing(GenericPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False, .ImageObj = GenericPosterList(i).Image}) + End If + Next + + For i = 0 To ShowPosterList.Count - 1 + If Not IsNothing(ShowPosterList(i)) AndAlso Not IsNothing(ShowPosterList(i).Image) AndAlso Not IsNothing(ShowPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False, .ImageObj = ShowPosterList(i).Image}) + End If + Next + Else + Dim tMatch As Match = Regex.Match(e.Node.Tag.ToString, "(?<type>f|p)(?<num>[0-9]+)") + If tMatch.Success Then + If tMatch.Groups("type").Value = "f" Then + Me.SelSeason = Convert.ToInt32(tMatch.Groups("num").Value) + Me.SelIsPoster = False + Dim tFanart As Scraper.TVDBSeasonImage = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(f) f.Season = Convert.ToInt32(tMatch.Groups("num").Value)) + If Not IsNothing(tFanart) AndAlso Not IsNothing(tFanart.Fanart) AndAlso Not IsNothing(tFanart.Fanart.Image) AndAlso Not IsNothing(tFanart.Fanart.Image.Image) Then + Me.pbCurrent.Image = tFanart.Fanart.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + For i = 0 To FanartList.Count - 1 + If Not IsNothing(FanartList(i)) AndAlso Not IsNothing(FanartList(i).Image) AndAlso Not IsNothing(FanartList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True, .ImageObj = FanartList(i).Image}) + End If + Next + ElseIf tMatch.Groups("type").Value = "p" Then + Me.SelSeason = Convert.ToInt32(tMatch.Groups("num").Value) + Me.SelIsPoster = True + Dim tPoster As Scraper.TVDBSeasonImage = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(f) f.Season = Me.SelSeason) + If Not IsNothing(tPoster) AndAlso Not IsNothing(tPoster.Poster) AndAlso Not IsNothing(tPoster.Poster.Image) Then + Me.pbCurrent.Image = tPoster.Poster.Image + Else + Me.pbCurrent.Image = Nothing + End If + iCount = 0 + For Each SImage As Scraper.TVDBSeasonPoster In SeasonList.Where(Function(s) s.Season = Convert.ToInt32(tMatch.Groups("num").Value)) + If Not IsNothing(SImage.Image) AndAlso Not IsNothing(SImage.Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", SImage.Image.Image.Width, SImage.Image.Image.Height), iCount, New ImageTag With {.URL = SImage.URL, .Path = SImage.LocalFile, .isFanart = False, .ImageObj = SImage.Image}) + End If + iCount += 1 + Next + End If + End If + End If + Else + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Visible = False + Me.lblCurrentImage.Visible = False + End If + + Me.CheckCurrentImage() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure ImageTag + +#Region "Fields" + + Dim isFanart As Boolean + Dim Path As String + Dim URL As String + Dim ImageObj As Images + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/frmInfoSettingsHolder.Designer.vb b/Addons/scraper.IMDB.Data/frmInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..c3675d6 --- /dev/null +++ b/Addons/scraper.IMDB.Data/frmInfoSettingsHolder.Designer.vb @@ -0,0 +1,632 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtIMDBURL = New System.Windows.Forms.TextBox() + Me.GroupBox15 = New System.Windows.Forms.GroupBox() + Me.chkOFDBGenre = New System.Windows.Forms.CheckBox() + Me.chkOFDBPlot = New System.Windows.Forms.CheckBox() + Me.chkOFDBOutline = New System.Windows.Forms.CheckBox() + Me.chkOFDBTitle = New System.Windows.Forms.CheckBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCertification = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkTop250 = New System.Windows.Forms.CheckBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkMusicBy = New System.Windows.Forms.CheckBox() + Me.chkProducers = New System.Windows.Forms.CheckBox() + Me.chkFullCast = New System.Windows.Forms.CheckBox() + Me.chkWriters = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkFullCrew = New System.Windows.Forms.CheckBox() + Me.chkPlot = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkDirector = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.GroupBox30.SuspendLayout() + Me.GroupBox15.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtIMDBURL) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(213, 69) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "IMDB" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(73, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "IMDB Mirror:" + ' + 'txtIMDBURL + ' + Me.txtIMDBURL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtIMDBURL.Location = New System.Drawing.Point(8, 32) + Me.txtIMDBURL.Name = "txtIMDBURL" + Me.txtIMDBURL.Size = New System.Drawing.Size(192, 22) + Me.txtIMDBURL.TabIndex = 1 + ' + 'GroupBox15 + ' + Me.GroupBox15.Controls.Add(Me.chkOFDBGenre) + Me.GroupBox15.Controls.Add(Me.chkOFDBPlot) + Me.GroupBox15.Controls.Add(Me.chkOFDBOutline) + Me.GroupBox15.Controls.Add(Me.chkOFDBTitle) + Me.GroupBox15.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox15.Location = New System.Drawing.Point(8, 114) + Me.GroupBox15.Name = "GroupBox15" + Me.GroupBox15.Size = New System.Drawing.Size(213, 87) + Me.GroupBox15.TabIndex = 2 + Me.GroupBox15.TabStop = False + Me.GroupBox15.Text = "OFDB (German)" + ' + 'chkOFDBGenre + ' + Me.chkOFDBGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBGenre.Location = New System.Drawing.Point(6, 65) + Me.chkOFDBGenre.Name = "chkOFDBGenre" + Me.chkOFDBGenre.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBGenre.TabIndex = 3 + Me.chkOFDBGenre.Text = "Use OFDB Genre" + Me.chkOFDBGenre.UseVisualStyleBackColor = True + ' + 'chkOFDBPlot + ' + Me.chkOFDBPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBPlot.Location = New System.Drawing.Point(6, 49) + Me.chkOFDBPlot.Name = "chkOFDBPlot" + Me.chkOFDBPlot.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBPlot.TabIndex = 2 + Me.chkOFDBPlot.Text = "Use OFDB Plot" + Me.chkOFDBPlot.UseVisualStyleBackColor = True + ' + 'chkOFDBOutline + ' + Me.chkOFDBOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBOutline.Location = New System.Drawing.Point(6, 33) + Me.chkOFDBOutline.Name = "chkOFDBOutline" + Me.chkOFDBOutline.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBOutline.TabIndex = 1 + Me.chkOFDBOutline.Text = "Use OFDB Outline" + Me.chkOFDBOutline.UseVisualStyleBackColor = True + ' + 'chkOFDBTitle + ' + Me.chkOFDBTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBTitle.Location = New System.Drawing.Point(6, 17) + Me.chkOFDBTitle.Name = "chkOFDBTitle" + Me.chkOFDBTitle.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBTitle.TabIndex = 0 + Me.chkOFDBTitle.Text = "Use OFDB Title" + Me.chkOFDBTitle.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.GroupBox15) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCertification) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkTop250) + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkMusicBy) + Me.gbOptions.Controls.Add(Me.chkProducers) + Me.gbOptions.Controls.Add(Me.chkFullCast) + Me.gbOptions.Controls.Add(Me.chkWriters) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkFullCrew) + Me.gbOptions.Controls.Add(Me.chkPlot) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkDirector) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(227, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(387, 161) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCertification + ' + Me.chkCertification.AutoSize = True + Me.chkCertification.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCertification.Location = New System.Drawing.Point(6, 70) + Me.chkCertification.Name = "chkCertification" + Me.chkCertification.Size = New System.Drawing.Size(89, 17) + Me.chkCertification.TabIndex = 3 + Me.chkCertification.Text = "Certification" + Me.chkCertification.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(237, 53) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkTop250 + ' + Me.chkTop250.AutoSize = True + Me.chkTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTop250.Location = New System.Drawing.Point(237, 19) + Me.chkTop250.Name = "chkTop250" + Me.chkTop250.Size = New System.Drawing.Size(66, 17) + Me.chkTop250.TabIndex = 16 + Me.chkTop250.Text = "Top 250" + Me.chkTop250.UseVisualStyleBackColor = True + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Enabled = False + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(246, 104) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(85, 17) + Me.chkCrew.TabIndex = 21 + Me.chkCrew.Text = "Other Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkMusicBy + ' + Me.chkMusicBy.AutoSize = True + Me.chkMusicBy.Enabled = False + Me.chkMusicBy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMusicBy.Location = New System.Drawing.Point(246, 121) + Me.chkMusicBy.Name = "chkMusicBy" + Me.chkMusicBy.Size = New System.Drawing.Size(71, 17) + Me.chkMusicBy.TabIndex = 22 + Me.chkMusicBy.Text = "Music By" + Me.chkMusicBy.UseVisualStyleBackColor = True + ' + 'chkProducers + ' + Me.chkProducers.AutoSize = True + Me.chkProducers.Enabled = False + Me.chkProducers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkProducers.Location = New System.Drawing.Point(246, 138) + Me.chkProducers.Name = "chkProducers" + Me.chkProducers.Size = New System.Drawing.Size(77, 17) + Me.chkProducers.TabIndex = 23 + Me.chkProducers.Text = "Producers" + Me.chkProducers.UseVisualStyleBackColor = True + ' + 'chkFullCast + ' + Me.chkFullCast.AutoSize = True + Me.chkFullCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCast.Location = New System.Drawing.Point(237, 70) + Me.chkFullCast.Name = "chkFullCast" + Me.chkFullCast.Size = New System.Drawing.Size(107, 17) + Me.chkFullCast.TabIndex = 19 + Me.chkFullCast.Text = "Scrape Full Cast" + Me.chkFullCast.UseVisualStyleBackColor = True + ' + 'chkWriters + ' + Me.chkWriters.AutoSize = True + Me.chkWriters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkWriters.Location = New System.Drawing.Point(131, 121) + Me.chkWriters.Name = "chkWriters" + Me.chkWriters.Size = New System.Drawing.Size(63, 17) + Me.chkWriters.TabIndex = 14 + Me.chkWriters.Text = "Writers" + Me.chkWriters.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 104) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkFullCrew + ' + Me.chkFullCrew.AutoSize = True + Me.chkFullCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCrew.Location = New System.Drawing.Point(237, 87) + Me.chkFullCrew.Name = "chkFullCrew" + Me.chkFullCrew.Size = New System.Drawing.Size(111, 17) + Me.chkFullCrew.TabIndex = 20 + Me.chkFullCrew.Text = "Scrape Full Crew" + Me.chkFullCrew.UseVisualStyleBackColor = True + ' + 'chkPlot + ' + Me.chkPlot.AutoSize = True + Me.chkPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkPlot.Location = New System.Drawing.Point(131, 70) + Me.chkPlot.Name = "chkPlot" + Me.chkPlot.Size = New System.Drawing.Size(46, 17) + Me.chkPlot.TabIndex = 11 + Me.chkPlot.Text = "Plot" + Me.chkPlot.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 138) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkDirector + ' + Me.chkDirector.AutoSize = True + Me.chkDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDirector.Location = New System.Drawing.Point(131, 104) + Me.chkDirector.Name = "chkDirector" + Me.chkDirector.Size = New System.Drawing.Size(67, 17) + Me.chkDirector.TabIndex = 13 + Me.chkDirector.Text = "Director" + Me.chkDirector.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 87) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 138) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(237, 36) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 121) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 87) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'frmInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.GroupBox15.ResumeLayout(False) + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox + Friend WithEvents Label18 As System.Windows.Forms.Label + Friend WithEvents txtIMDBURL As System.Windows.Forms.TextBox + Friend WithEvents GroupBox15 As System.Windows.Forms.GroupBox + Friend WithEvents chkOFDBGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBPlot As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBTitle As System.Windows.Forms.CheckBox + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents gbOptions As System.Windows.Forms.GroupBox + Friend WithEvents chkCertification As System.Windows.Forms.CheckBox + Friend WithEvents chkCountry As System.Windows.Forms.CheckBox + Friend WithEvents chkTop250 As System.Windows.Forms.CheckBox + Friend WithEvents chkCrew As System.Windows.Forms.CheckBox + Friend WithEvents chkMusicBy As System.Windows.Forms.CheckBox + Friend WithEvents chkFullCrew As System.Windows.Forms.CheckBox + Friend WithEvents chkFullCast As System.Windows.Forms.CheckBox + Friend WithEvents chkProducers As System.Windows.Forms.CheckBox + Friend WithEvents chkWriters As System.Windows.Forms.CheckBox + Friend WithEvents chkStudio As System.Windows.Forms.CheckBox + Friend WithEvents chkRuntime As System.Windows.Forms.CheckBox + Friend WithEvents chkPlot As System.Windows.Forms.CheckBox + Friend WithEvents chkOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkDirector As System.Windows.Forms.CheckBox + Friend WithEvents chkTagline As System.Windows.Forms.CheckBox + Friend WithEvents chkCast As System.Windows.Forms.CheckBox + Friend WithEvents chkVotes As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailer As System.Windows.Forms.CheckBox + Friend WithEvents chkRating As System.Windows.Forms.CheckBox + Friend WithEvents chkRelease As System.Windows.Forms.CheckBox + Friend WithEvents chkMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkYear As System.Windows.Forms.CheckBox + Friend WithEvents chkTitle As System.Windows.Forms.CheckBox + +End Class diff --git a/Addons/scraper.IMDB.Data/frmInfoSettingsHolder.resx b/Addons/scraper.IMDB.Data/frmInfoSettingsHolder.resx new file mode 100644 index 0000000..1a3b6b2 --- /dev/null +++ b/Addons/scraper.IMDB.Data/frmInfoSettingsHolder.resx @@ -0,0 +1,193 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/frmInfoSettingsHolder.vb b/Addons/scraper.IMDB.Data/frmInfoSettingsHolder.vb new file mode 100644 index 0000000..21a3d0b --- /dev/null +++ b/Addons/scraper.IMDB.Data/frmInfoSettingsHolder.vb @@ -0,0 +1,237 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCertification_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCertification.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCrew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkDirector_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDirector.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFullCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFullCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFullCrew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFullCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + + Me.chkProducers.Enabled = Me.chkFullCrew.Checked + Me.chkMusicBy.Enabled = Me.chkFullCrew.Checked + Me.chkCrew.Enabled = Me.chkFullCrew.Checked + + If Not Me.chkFullCrew.Checked Then + Me.chkProducers.Checked = False + Me.chkMusicBy.Checked = False + Me.chkCrew.Checked = False + End If + End Sub + + Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMusicBy_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMusicBy.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBPlot.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPlot.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkProducers_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkProducers.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTop250_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTop250.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkWriters_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkWriters.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.chkOFDBGenre.Text = Master.eLang.GetString(1, "Use OFDB Genre") + Me.chkOFDBPlot.Text = Master.eLang.GetString(2, "Use OFDB Plot") + Me.chkOFDBOutline.Text = Master.eLang.GetString(3, "Use OFDB Outline") + Me.chkOFDBTitle.Text = Master.eLang.GetString(4, "Use OFDB Title") + Me.Label18.Text = Master.eLang.GetString(5, "IMDB Mirror:") + Me.gbOptions.Text = Master.eLang.GetString(6, "Scraper Fields - Scraper specific") + Me.chkCrew.Text = Master.eLang.GetString(391, "Other Crew", True) + Me.chkMusicBy.Text = Master.eLang.GetString(392, "Music By", True) + Me.chkProducers.Text = Master.eLang.GetString(393, "Producers", True) + Me.chkWriters.Text = Master.eLang.GetString(394, "Writers", True) + Me.chkStudio.Text = Master.eLang.GetString(395, "Studio", True) + Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime", True) + Me.chkPlot.Text = Master.eLang.GetString(65, "Plot", True) + Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline", True) + Me.chkGenre.Text = Master.eLang.GetString(20, "Genres", True) + Me.chkDirector.Text = Master.eLang.GetString(62, "Director", True) + Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline", True) + Me.chkCast.Text = Master.eLang.GetString(398, "Cast", True) + Me.chkVotes.Text = Master.eLang.GetString(399, "Votes", True) + Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer", True) + Me.chkRating.Text = Master.eLang.GetString(400, "Rating", True) + Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date", True) + Me.chkMPAA.Text = Master.eLang.GetString(401, "MPAA", True) + Me.chkYear.Text = Master.eLang.GetString(278, "Year", True) + Me.chkTitle.Text = Master.eLang.GetString(21, "Title", True) + Me.chkCertification.Text = Master.eLang.GetString(722, "Certification", True) + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + Me.chkCountry.Text = Master.eLang.GetString(301, "Country", True) + Me.chkFullCast.Text = Master.eLang.GetString(512, "Scrape Full Cast", True) + Me.chkFullCrew.Text = Master.eLang.GetString(513, "Scrape Full Crew", True) + Me.chkTop250.Text = Master.eLang.GetString(868, "Top250", True) + Me.GroupBox30.Text = Master.eLang.GetString(106, "IMDB") + Me.GroupBox15.Text = Master.eLang.GetString(107, "OFDB (German)") + End Sub + + Private Sub txtIMDBURL_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtIMDBURL.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/frmMediaSettingsHolder.Designer.vb b/Addons/scraper.IMDB.Data/frmMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..2c09e78 --- /dev/null +++ b/Addons/scraper.IMDB.Data/frmMediaSettingsHolder.Designer.vb @@ -0,0 +1,524 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMediaSettingsHolder)) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.cbActorThumbsSize = New System.Windows.Forms.ComboBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.cbManualETSize = New System.Windows.Forms.ComboBox() + Me.grpSaveFanart = New System.Windows.Forms.GroupBox() + Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() + Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkUseMPDB = New System.Windows.Forms.CheckBox() + Me.chkUseTMDB = New System.Windows.Forms.CheckBox() + Me.chkUseIMPA = New System.Windows.Forms.CheckBox() + Me.chkScrapePoster = New System.Windows.Forms.CheckBox() + Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.txtTimeout = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() + Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() + Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.grpSaveFanart.SuspendLayout() + Me.GroupBox9.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.GroupBox3) + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Panel2) + Me.pnlSettings.Location = New System.Drawing.Point(12, 4) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 94 + Me.PictureBox1.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.GroupBox6) + Me.GroupBox3.Controls.Add(Me.GroupBox4) + Me.GroupBox3.Controls.Add(Me.grpSaveFanart) + Me.GroupBox3.Controls.Add(Me.GroupBox9) + Me.GroupBox3.Controls.Add(Me.chkScrapePoster) + Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(15, 31) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(587, 177) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Images" + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.cbActorThumbsSize) + Me.GroupBox6.Location = New System.Drawing.Point(374, 98) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(160, 73) + Me.GroupBox6.TabIndex = 5 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Actor Thumbs Size:" + ' + 'cbActorThumbsSize + ' + Me.cbActorThumbsSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbActorThumbsSize.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbActorThumbsSize.FormattingEnabled = True + Me.cbActorThumbsSize.Items.AddRange(New Object() {"SY275_SX400", "SY720_SX1080", "SY1080_SX1920"}) + Me.cbActorThumbsSize.Location = New System.Drawing.Point(21, 35) + Me.cbActorThumbsSize.Name = "cbActorThumbsSize" + Me.cbActorThumbsSize.Size = New System.Drawing.Size(121, 21) + Me.cbActorThumbsSize.TabIndex = 0 + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.cbManualETSize) + Me.GroupBox4.Location = New System.Drawing.Point(374, 11) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(160, 80) + Me.GroupBox4.TabIndex = 4 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "TMDB Extrathumbs Size:" + ' + 'cbManualETSize + ' + Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbManualETSize.Enabled = False + Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbManualETSize.FormattingEnabled = True + Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) + Me.cbManualETSize.Location = New System.Drawing.Point(21, 35) + Me.cbManualETSize.Name = "cbManualETSize" + Me.cbManualETSize.Size = New System.Drawing.Size(121, 21) + Me.cbManualETSize.TabIndex = 0 + ' + 'grpSaveFanart + ' + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) + Me.grpSaveFanart.Enabled = False + Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) + Me.grpSaveFanart.Name = "grpSaveFanart" + Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) + Me.grpSaveFanart.TabIndex = 2 + Me.grpSaveFanart.TabStop = False + Me.grpSaveFanart.Text = "Save Fanart In:" + ' + 'optFanartFolderExtraFanart + ' + Me.optFanartFolderExtraFanart.AutoSize = True + Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) + Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" + Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) + Me.optFanartFolderExtraFanart.TabIndex = 1 + Me.optFanartFolderExtraFanart.TabStop = True + Me.optFanartFolderExtraFanart.Text = "\extrafanart" + Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True + ' + 'optFanartFolderExtraThumbs + ' + Me.optFanartFolderExtraThumbs.AutoSize = True + Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) + Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" + Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) + Me.optFanartFolderExtraThumbs.TabIndex = 0 + Me.optFanartFolderExtraThumbs.TabStop = True + Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" + Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkUseMPDB) + Me.GroupBox9.Controls.Add(Me.chkUseTMDB) + Me.GroupBox9.Controls.Add(Me.chkUseIMPA) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(165, 11) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(160, 80) + Me.GroupBox9.TabIndex = 3 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Get Images From:" + ' + 'chkUseMPDB + ' + Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) + Me.chkUseMPDB.Name = "chkUseMPDB" + Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) + Me.chkUseMPDB.TabIndex = 2 + Me.chkUseMPDB.Text = "MoviePosterDB.com" + Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.UseVisualStyleBackColor = True + ' + 'chkUseTMDB + ' + Me.chkUseTMDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseTMDB.Location = New System.Drawing.Point(6, 18) + Me.chkUseTMDB.Name = "chkUseTMDB" + Me.chkUseTMDB.Size = New System.Drawing.Size(149, 19) + Me.chkUseTMDB.TabIndex = 0 + Me.chkUseTMDB.Text = "themoviedb.org" + Me.chkUseTMDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseTMDB.UseVisualStyleBackColor = True + ' + 'chkUseIMPA + ' + Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) + Me.chkUseIMPA.Name = "chkUseIMPA" + Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) + Me.chkUseIMPA.TabIndex = 1 + Me.chkUseIMPA.Text = "IMPAwards.com" + Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.UseVisualStyleBackColor = True + ' + 'chkScrapePoster + ' + Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) + Me.chkScrapePoster.Name = "chkScrapePoster" + Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) + Me.chkScrapePoster.TabIndex = 0 + Me.chkScrapePoster.Text = "Get Posters" + Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.UseVisualStyleBackColor = True + ' + 'chkScrapeFanart + ' + Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) + Me.chkScrapeFanart.Name = "chkScrapeFanart" + Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) + Me.chkScrapeFanart.TabIndex = 1 + Me.chkScrapeFanart.Text = "Get Fanart" + Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.GroupBox5) + Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox1.Controls.Add(Me.Label23) + Me.GroupBox1.Controls.Add(Me.txtTimeout) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(15, 214) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(587, 112) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Trailers" + Me.GroupBox1.UseCompatibleTextRendering = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) + Me.GroupBox5.Controls.Add(Me.Label2) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) + Me.GroupBox5.Location = New System.Drawing.Point(374, 12) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(161, 94) + Me.GroupBox5.TabIndex = 4 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Youtube/TMDB Trailer:" + ' + 'cbTrailerTMDBPref + ' + Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerTMDBPref.Enabled = False + Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTrailerTMDBPref.FormattingEnabled = True + Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) + Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" + Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) + Me.cbTrailerTMDBPref.TabIndex = 1 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label2.Location = New System.Drawing.Point(26, 26) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(111, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Preferred Language:" + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label23.Location = New System.Drawing.Point(21, 43) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(51, 13) + Me.Label23.TabIndex = 1 + Me.Label23.Text = "Timeout:" + ' + 'txtTimeout + ' + Me.txtTimeout.Enabled = False + Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTimeout.Location = New System.Drawing.Point(82, 39) + Me.txtTimeout.Name = "txtTimeout" + Me.txtTimeout.Size = New System.Drawing.Size(50, 22) + Me.txtTimeout.TabIndex = 2 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) + Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(165, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(161, 94) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Supported Sites:" + ' + 'chkTrailerTMDBXBMC + ' + Me.chkTrailerTMDBXBMC.AutoSize = True + Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) + Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" + Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) + Me.chkTrailerTMDBXBMC.TabIndex = 1 + Me.chkTrailerTMDBXBMC.Text = "XBMC Format" + Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True + ' + 'chkTrailerIMDB + ' + Me.chkTrailerIMDB.AutoSize = True + Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) + Me.chkTrailerIMDB.Name = "chkTrailerIMDB" + Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) + Me.chkTrailerIMDB.TabIndex = 2 + Me.chkTrailerIMDB.Text = "IMDB" + Me.chkTrailerIMDB.UseVisualStyleBackColor = True + ' + 'chkTrailerTMDB + ' + Me.chkTrailerTMDB.AutoSize = True + Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) + Me.chkTrailerTMDB.Name = "chkTrailerTMDB" + Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) + Me.chkTrailerTMDB.TabIndex = 0 + Me.chkTrailerTMDB.Text = "Youtube/TMDB" + Me.chkTrailerTMDB.UseVisualStyleBackColor = True + ' + 'Panel2 + ' + Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Controls.Add(Me.btnDown) + Me.Panel2.Controls.Add(Me.btnUp) + Me.Panel2.Controls.Add(Me.cbEnabled) + Me.Panel2.Location = New System.Drawing.Point(0, 0) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(1125, 25) + Me.Panel2.TabIndex = 0 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(500, 7) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 12) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'frmMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.grpSaveFanart.ResumeLayout(False) + Me.grpSaveFanart.PerformLayout() + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents chkScrapeFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkScrapePoster As System.Windows.Forms.CheckBox + Friend WithEvents chkDownloadTrailer As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox9 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseMPDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMPA As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Panel2 As System.Windows.Forms.Panel + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Label23 As System.Windows.Forms.Label + Friend WithEvents txtTimeout As System.Windows.Forms.TextBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents grpSaveFanart As System.Windows.Forms.GroupBox + Friend WithEvents optFanartFolderExtraFanart As System.Windows.Forms.RadioButton + Friend WithEvents optFanartFolderExtraThumbs As System.Windows.Forms.RadioButton + Friend WithEvents chkTrailerIMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDBXBMC As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents cbManualETSize As System.Windows.Forms.ComboBox + Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox + Friend WithEvents cbTrailerTMDBPref As System.Windows.Forms.ComboBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents cbActorThumbsSize As System.Windows.Forms.ComboBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/frmMediaSettingsHolder.resx b/Addons/scraper.IMDB.Data/frmMediaSettingsHolder.resx new file mode 100644 index 0000000..023cf14 --- /dev/null +++ b/Addons/scraper.IMDB.Data/frmMediaSettingsHolder.resx @@ -0,0 +1,237 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + 6bKz54D4Hdc/dStsxIkAAAAAAElFTkSuQmCC +</value> + </data> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/frmMediaSettingsHolder.vb b/Addons/scraper.IMDB.Data/frmMediaSettingsHolder.vb new file mode 100644 index 0000000..401240a --- /dev/null +++ b/Addons/scraper.IMDB.Data/frmMediaSettingsHolder.vb @@ -0,0 +1,172 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order + 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order - 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Sub CheckTrailer() + Me.txtTimeout.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerIMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDBXBMC.Enabled = Me.chkDownloadTrailer.Checked + If Not Me.chkDownloadTrailer.Checked Then + Me.txtTimeout.Text = "2" + Me.chkTrailerTMDB.Checked = False + Me.chkTrailerIMDB.Checked = False + Me.chkTrailerTMDBXBMC.Checked = False + End If + End Sub + + Private Sub chkDownloadTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDownloadTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + CheckTrailer() + End Sub + + Private Sub chkTrailerTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDB.CheckedChanged + chkTrailerTMDBXBMC.Enabled = chkTrailerTMDB.Checked + cbTrailerTMDBPref.Enabled = chkTrailerTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerIMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerIMDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerTMDBXBMC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDBXBMC.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkScrapeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapeFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + grpSaveFanart.Enabled = chkScrapeFanart.Checked + End Sub + + Private Sub chkScrapePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapePoster.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMPA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseIMPA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseMPDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseMPDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseTMDB.CheckedChanged + cbManualETSize.Enabled = chkUseTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Sub SetUp() + Me.txtTimeout.Text = Master.eSettings.TrailerTimeout.ToString + Me.Label23.Text = Master.eLang.GetString(7, "Timeout:") + Me.GroupBox2.Text = Master.eLang.GetString(8, "Supported Sites:") + Me.GroupBox9.Text = Master.eLang.GetString(9, "Get Images From:") + Me.grpSaveFanart.Text = Master.eLang.GetString(8001, "Save Fanart In:") + Me.chkDownloadTrailer.Text = Master.eLang.GetString(529, "Enable Trailer Support", True) + Me.Label3.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkScrapePoster.Text = Master.eLang.GetString(101, "Get Posters") + Me.chkScrapeFanart.Text = Master.eLang.GetString(102, "Get Fanart") + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + Me.GroupBox3.Text = Master.eLang.GetString(497, "Images", True) + Me.GroupBox4.Text = Master.eLang.GetString(108, "TMDB Extrathumbs Size:") + Me.GroupBox1.Text = Master.eLang.GetString(109, "Trailers") + Me.GroupBox5.Text = Master.eLang.GetString(110, "Youtube/TMDB Trailer:") + Me.chkTrailerTMDBXBMC.Text = Master.eLang.GetString(111, "XBMC Format") + Me.Label2.Text = Master.eLang.GetString(112, "Preferred language") + Me.grpSaveFanart.Text = Master.eLang.GetString(113, "Save Fanart In:") + End Sub + + Private Sub txtTimeout_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTimeout.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraThumbs_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraThumbs.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbManualETSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbManualETSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbActorThumbsSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbActorThumbsSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTrailerTMDBPref_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbTrailerTMDBPref.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/frmTVInfoSettingsHolder.Designer.vb b/Addons/scraper.IMDB.Data/frmTVInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..4a8cc4e --- /dev/null +++ b/Addons/scraper.IMDB.Data/frmTVInfoSettingsHolder.Designer.vb @@ -0,0 +1,169 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTVInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTVInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'frmTVInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTVInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.IMDB.Data/frmTVInfoSettingsHolder.resx b/Addons/scraper.IMDB.Data/frmTVInfoSettingsHolder.resx new file mode 100644 index 0000000..0950d0f --- /dev/null +++ b/Addons/scraper.IMDB.Data/frmTVInfoSettingsHolder.resx @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/frmTVInfoSettingsHolder.vb b/Addons/scraper.IMDB.Data/frmTVInfoSettingsHolder.vb new file mode 100644 index 0000000..98761ce --- /dev/null +++ b/Addons/scraper.IMDB.Data/frmTVInfoSettingsHolder.vb @@ -0,0 +1,80 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTVInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + orderChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + 'Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/frmTVMediaSettingsHolder.Designer.vb b/Addons/scraper.IMDB.Data/frmTVMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..f5cb735 --- /dev/null +++ b/Addons/scraper.IMDB.Data/frmTVMediaSettingsHolder.Designer.vb @@ -0,0 +1,170 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTVMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTVMediaSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.InitialImage = CType(resources.GetObject("PictureBox1.InitialImage"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'frmTVMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTVMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.IMDB.Data/frmTVMediaSettingsHolder.resx b/Addons/scraper.IMDB.Data/frmTVMediaSettingsHolder.resx new file mode 100644 index 0000000..d47391f --- /dev/null +++ b/Addons/scraper.IMDB.Data/frmTVMediaSettingsHolder.resx @@ -0,0 +1,197 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.InitialImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEAAA + CxABrSO9dQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/frmTVMediaSettingsHolder.vb b/Addons/scraper.IMDB.Data/frmTVMediaSettingsHolder.vb new file mode 100644 index 0000000..06928ef --- /dev/null +++ b/Addons/scraper.IMDB.Data/frmTVMediaSettingsHolder.vb @@ -0,0 +1,80 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTVMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + orderChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + 'Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/packages.config b/Addons/scraper.IMDB.Data/packages.config new file mode 100644 index 0000000..053d0bc6 --- /dev/null +++ b/Addons/scraper.IMDB.Data/packages.config @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="SharpZipLib" version="0.86.0" /> + <package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net35" /> +</packages> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/scraper.IMDB.Data.vbproj b/Addons/scraper.IMDB.Data/scraper.IMDB.Data.vbproj new file mode 100644 index 0000000..41972b8 --- /dev/null +++ b/Addons/scraper.IMDB.Data/scraper.IMDB.Data.vbproj @@ -0,0 +1,342 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{D3C1A3C4-A060-40DF-ACE4-143F7F102A24}</ProjectGuid> + <OutputType>Library</OutputType> + <RootNamespace>EmberScraperModule</RootNamespace> + <AssemblyName>scraper.IMDB.Data</AssemblyName> + <FileAlignment>512</FileAlignment> + <MyType>Windows</MyType> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <OptionExplicit>On</OptionExplicit> + <OptionCompare>Binary</OptionCompare> + <OptionStrict>On</OptionStrict> + <OptionInfer>On</OptionInfer> + <FileUpgradeFlags> + </FileUpgradeFlags> + <OldToolsVersion>3.5</OldToolsVersion> + <UpgradeBackupLocation /> + <PublishUrl>publish\</PublishUrl> + <Install>true</Install> + <InstallFrom>Disk</InstallFrom> + <UpdateEnabled>false</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>false</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> + <RestorePackages>true</RestorePackages> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> + <DebugSymbols>true</DebugSymbols> + <DefineDebug>true</DefineDebug> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Dev\Modules\</OutputPath> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Deploy\Modules\</OutputPath> + <Optimize>true</Optimize> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <ItemGroup> + <Reference Include="ICSharpCode.SharpZipLib"> + <HintPath>..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Data.SQLite"> + <HintPath>..\..\packages\System.Data.SQLite.1.0.84.0\lib\net20\System.Data.SQLite.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="System.Data.SQLite.Linq"> + <HintPath>..\..\packages\System.Data.SQLite.1.0.84.0\lib\net20\System.Data.SQLite.Linq.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Import Include="Microsoft.VisualBasic" /> + <Import Include="System" /> + <Import Include="System.Collections" /> + <Import Include="System.Collections.Generic" /> + <Import Include="System.Diagnostics" /> + <Import Include="System.Drawing" /> + <Import Include="System.Linq" /> + <Import Include="System.Web" /> + <Import Include="System.Windows.Forms" /> + <Import Include="System.Xml.Linq" /> + </ItemGroup> + <ItemGroup> + <Compile Include="frmTVMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmTVMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTVMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmTVInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmTVInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTVInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperTVNativeModule.vb" /> + <Compile Include="Scraper\clsScrapeTrailers.vb" /> + <Compile Include="Scraper\clsScrapeImages.vb" /> + <Compile Include="Scraper\clsScrapeIMDB.vb" /> + <Compile Include="Scraper\clsScrapeIMPA.vb" /> + <Compile Include="Scraper\clsScrapeMPDB.vb" /> + <Compile Include="Scraper\clsScrapeOFDB.vb" /> + <Compile Include="Scraper\clsScrapeTMDB.vb" /> + <Compile Include="Scraper\clsScrapeYouTube.vb" /> + <Compile Include="Scraper\dlgIMDBSearchResults.Designer.vb"> + <DependentUpon>dlgIMDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgIMDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgImgSelect.Designer.vb"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgImgSelect.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailer.Designer.vb"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailer.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.Designer.vb"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="My Project\AssemblyInfo.vb" /> + <Compile Include="My Project\Application.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Application.myapp</DependentUpon> + </Compile> + <Compile Include="My Project\Resources.Designer.vb"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> + <Compile Include="My Project\Settings.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Settings.settings</DependentUpon> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + </Compile> + <Compile Include="frmInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperMovieNativeModule.vb" /> + <Compile Include="TVScraper\clsScrapeTVDB.vb" /> + <Compile Include="TVScraper\dlgTVChangeEp.Designer.vb"> + <DependentUpon>dlgTVChangeEp.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVChangeEp.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVDBSearchResults.Designer.vb"> + <DependentUpon>dlgTVDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVEpisodePoster.Designer.vb"> + <DependentUpon>dlgTVEpisodePoster.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVEpisodePoster.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVImageSelect.Designer.vb"> + <DependentUpon>dlgTVImageSelect.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVImageSelect.vb"> + <SubType>Form</SubType> + </Compile> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="frmTVMediaSettingsHolder.resx"> + <DependentUpon>frmTVMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTVInfoSettingsHolder.resx"> + <DependentUpon>frmTVInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgIMDBSearchResults.resx"> + <DependentUpon>dlgIMDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgImgSelect.resx"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailer.resx"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailerFormat.resx"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmMediaSettingsHolder.resx"> + <DependentUpon>frmMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmInfoSettingsHolder.resx"> + <DependentUpon>frmInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="My Project\Resources.resx"> + <Generator>VbMyResourcesResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.vb</LastGenOutput> + <CustomToolNamespace>My.Resources</CustomToolNamespace> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVChangeEp.resx"> + <DependentUpon>dlgTVChangeEp.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVDBSearchResults.resx"> + <DependentUpon>dlgTVDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVEpisodePoster.resx"> + <DependentUpon>dlgTVEpisodePoster.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVImageSelect.resx"> + <DependentUpon>dlgTVImageSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <None Include="My Project\Application.myapp"> + <Generator>MyApplicationCodeGenerator</Generator> + <LastGenOutput>Application.Designer.vb</LastGenOutput> + </None> + <None Include="My Project\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <CustomToolNamespace>My</CustomToolNamespace> + <LastGenOutput>Settings.Designer.vb</LastGenOutput> + </None> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\EmberAPI\EmberAPI.vbproj"> + <Project>{208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}</Project> + <Name>EmberAPI</Name> + <Private>False</Private> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="Langs\scraper.EmberCore.Debug_%28db_DB%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.English_%28en_US%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.English_%28en_US%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.German_%28de_DE%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.German_%28de_DE%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.Norwegian_%28no_NO%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.Norwegian_%28no_NO%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="x64\SQLite.Interop.dll"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + <Content Include="x86\SQLite.Interop.dll"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <PropertyGroup> + <PreBuildEvent> + </PreBuildEvent> + </PropertyGroup> + <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> +</Project> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/scraperMovieNativeModule.vb b/Addons/scraper.IMDB.Data/scraperMovieNativeModule.vb new file mode 100644 index 0000000..6889071 --- /dev/null +++ b/Addons/scraper.IMDB.Data/scraperMovieNativeModule.vb @@ -0,0 +1,702 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO + +Imports EmberAPI + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberNativeScraperModule + Implements Interfaces.EmberMovieScraperModule + + +#Region "Fields" + + Public Shared ConfigOptions As New Structures.ScrapeOptions + Public Shared ConfigScrapeModifier As New Structures.ScrapeModifier + Public Shared _AssemblyName As String + + Private dFImgSelect As dlgImgSelect = Nothing + + ''' <summary> + ''' Scraping Here + ''' </summary> + ''' <remarks></remarks> + Private IMDB As New IMDB.Scraper + Private MySettings As New _MySettings + Private _Name As String = "Ember Native Movie Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmInfoSettingsHolder + Private _setupPost As frmMediaSettingsHolder + +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberMovieScraperModule.ModuleSettingsChanged + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsScraper + Get + Return True + End Get + End Property + + ReadOnly Property ModuleName() As String Implements Interfaces.EmberMovieScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberMovieScraperModule.ModuleVersion + Get + Return FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Property PostScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Property ScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean Implements Interfaces.EmberMovieScraperModule.QueryPostScraperCapabilities + Select Case cap + Case Enums.PostScraperCapabilities.Fanart + If MySettings.UseTMDB Then Return True + Case Enums.PostScraperCapabilities.Poster + If MySettings.UseIMPA OrElse MySettings.UseMPDB OrElse MySettings.UseTMDB Then Return True + Case Enums.PostScraperCapabilities.Trailer + If MySettings.DownloadTrailers Then Return True + End Select + Return False + End Function + + Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.DownloadTrailer + Using dTrailer As New dlgTrailer + dTrailer.IMDBURL = MySettings.IMDBURL + sURL = dTrailer.ShowDialog(DBMovie.Movie.IMDBID, DBMovie.Filename) + End Using + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef studio As List(Of String)) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.GetMovieStudio + Dim IMDB As New IMDB.Scraper + IMDB.UseOFDBTitle = MySettings.UseOFDBTitle + IMDB.UseOFDBOutline = MySettings.UseOFDBOutline + IMDB.UseOFDBPlot = MySettings.UseOFDBPlot + IMDB.UseOFDBGenre = MySettings.UseOFDBGenre + IMDB.IMDBURL = MySettings.IMDBURL + studio = IMDB.GetMovieStudios(DBMovie.Movie.IMDBID) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + + Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberMovieScraperModule.Init + _AssemblyName = sAssemblyName + LoadSettings() + End Sub + + Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupPostScraper + Dim Spanel As New Containers.SettingsPanel + _setupPost = New frmMediaSettingsHolder + LoadSettings() + _setupPost.cbEnabled.Checked = _PostScraperEnabled + _setupPost.chkTrailerIMDB.Checked = MySettings.UseIMDBTrailer + _setupPost.chkTrailerTMDB.Checked = MySettings.UseTMDBTrailer + _setupPost.cbTrailerTMDBPref.Text = MySettings.UseTMDBTrailerPref + _setupPost.chkTrailerTMDBXBMC.Checked = MySettings.UseTMDBTrailerXBMC + _setupPost.chkScrapePoster.Checked = ConfigScrapeModifier.Poster + _setupPost.chkScrapeFanart.Checked = ConfigScrapeModifier.Fanart + _setupPost.chkUseTMDB.Checked = MySettings.UseTMDB + _setupPost.chkUseIMPA.Checked = MySettings.UseIMPA + _setupPost.chkUseMPDB.Checked = MySettings.UseMPDB + _setupPost.cbManualETSize.Text = MySettings.ManualETSize + _setupPost.cbActorThumbsSize.Text = MySettings.ActorThumbsSize + _setupPost.txtTimeout.Text = MySettings.TrailerTimeout.ToString + _setupPost.chkDownloadTrailer.Checked = MySettings.DownloadTrailers + _setupPost.CheckTrailer() + _setupPost.orderChanged() + Spanel.Name = String.Concat(Me._Name, "PostScraper") + Spanel.Text = Master.eLang.GetString(104, "Ember Native Movie Scrapers") + Spanel.Prefix = "NativeMovieMedia_" + Spanel.Order = 110 + Spanel.Parent = "pnlMovieMedia" + Spanel.Type = Master.eLang.GetString(36, "Movies", True) + Spanel.ImageIndex = If(Me._PostScraperEnabled, 9, 10) + Spanel.Panel = Me._setupPost.pnlSettings + + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + Return Spanel + End Function + Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmInfoSettingsHolder + LoadSettings() + _setup.cbEnabled.Checked = _ScraperEnabled + _setup.chkTitle.Checked = ConfigOptions.bTitle + _setup.chkYear.Checked = ConfigOptions.bYear + _setup.chkMPAA.Checked = ConfigOptions.bMPAA + _setup.chkRelease.Checked = ConfigOptions.bRelease + _setup.chkRuntime.Checked = ConfigOptions.bRuntime + _setup.chkRating.Checked = ConfigOptions.bRating + _setup.chkVotes.Checked = ConfigOptions.bVotes + _setup.chkStudio.Checked = ConfigOptions.bStudio + _setup.chkTagline.Checked = ConfigOptions.bTagline + _setup.chkOutline.Checked = ConfigOptions.bOutline + _setup.chkPlot.Checked = ConfigOptions.bPlot + _setup.chkCast.Checked = ConfigOptions.bCast + _setup.chkDirector.Checked = ConfigOptions.bDirector + _setup.chkWriters.Checked = ConfigOptions.bWriters + _setup.chkProducers.Checked = ConfigOptions.bProducers + _setup.chkGenre.Checked = ConfigOptions.bGenre + _setup.chkTrailer.Checked = ConfigOptions.bTrailer + _setup.chkMusicBy.Checked = ConfigOptions.bMusicBy + _setup.chkCrew.Checked = ConfigOptions.bOtherCrew + _setup.chkCountry.Checked = ConfigOptions.bCountry + _setup.chkTop250.Checked = ConfigOptions.bTop250 + _setup.chkCertification.Checked = ConfigOptions.bCert + _setup.chkOFDBTitle.Checked = MySettings.UseOFDBTitle + _setup.chkOFDBOutline.Checked = MySettings.UseOFDBOutline + _setup.chkOFDBPlot.Checked = MySettings.UseOFDBPlot + _setup.chkOFDBGenre.Checked = MySettings.UseOFDBGenre + _setup.chkFullCast.Checked = ConfigOptions.bFullCast + _setup.chkFullCrew.Checked = ConfigOptions.bFullCrew + + If String.IsNullOrEmpty(MySettings.IMDBURL) Then + MySettings.IMDBURL = "akas.imdb.com" + End If + _setup.txtIMDBURL.Text = MySettings.IMDBURL + _setup.orderChanged() + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(104, "Ember Native Movie Scrapers") + SPanel.Prefix = "NativeMovieInfo_" + SPanel.Order = 110 + SPanel.Parent = "pnlMovieData" + SPanel.Type = Master.eLang.GetString(36, "Movies", True) + SPanel.ImageIndex = If(_ScraperEnabled, 9, 10) + SPanel.Panel = _setup.pnlSettings + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + Return SPanel + End Function + Sub LoadSettings() + ConfigOptions.bTitle = AdvancedSettings.GetBooleanSetting("DoTitle", True) + ConfigOptions.bYear = AdvancedSettings.GetBooleanSetting("DoYear", True) + ConfigOptions.bMPAA = AdvancedSettings.GetBooleanSetting("DoMPAA", True) + ConfigOptions.bRelease = AdvancedSettings.GetBooleanSetting("DoRelease", True) + ConfigOptions.bRuntime = AdvancedSettings.GetBooleanSetting("DoRuntime", True) + ConfigOptions.bRating = AdvancedSettings.GetBooleanSetting("DoRating", True) + ConfigOptions.bVotes = AdvancedSettings.GetBooleanSetting("DoVotes", True) + ConfigOptions.bStudio = AdvancedSettings.GetBooleanSetting("DoStudio", True) + ConfigOptions.bTagline = AdvancedSettings.GetBooleanSetting("DoTagline", True) + ConfigOptions.bOutline = AdvancedSettings.GetBooleanSetting("DoOutline", True) + ConfigOptions.bPlot = AdvancedSettings.GetBooleanSetting("DoPlot", True) + ConfigOptions.bCast = AdvancedSettings.GetBooleanSetting("DoCast", True) + ConfigOptions.bDirector = AdvancedSettings.GetBooleanSetting("DoDirector", True) + ConfigOptions.bWriters = AdvancedSettings.GetBooleanSetting("DoWriters", True) + ConfigOptions.bProducers = AdvancedSettings.GetBooleanSetting("DoProducers", True) + ConfigOptions.bGenre = AdvancedSettings.GetBooleanSetting("DoGenres", True) + ConfigOptions.bTrailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + ConfigOptions.bMusicBy = AdvancedSettings.GetBooleanSetting("DoMusic", True) + ConfigOptions.bOtherCrew = AdvancedSettings.GetBooleanSetting("DoOtherCrews", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("DoFullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("DoFullCrews", True) + ConfigOptions.bTop250 = AdvancedSettings.GetBooleanSetting("DoTop250", True) + ConfigOptions.bCountry = AdvancedSettings.GetBooleanSetting("DoCountry", True) + ConfigOptions.bCert = AdvancedSettings.GetBooleanSetting("DoCert", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("FullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("FullCrew", True) + + MySettings.IMDBURL = AdvancedSettings.GetSetting("IMDBURL", "akas.imdb.com") + MySettings.UseOFDBTitle = AdvancedSettings.GetBooleanSetting("UseOFDBTitle", False) + MySettings.UseOFDBOutline = AdvancedSettings.GetBooleanSetting("UseOFDBOutline", False) + MySettings.UseOFDBPlot = AdvancedSettings.GetBooleanSetting("UseOFDBPlot", False) + MySettings.UseOFDBGenre = AdvancedSettings.GetBooleanSetting("UseOFDBGenre", False) + MySettings.DownloadTrailers = AdvancedSettings.GetBooleanSetting("DownloadTraliers", False) + + MySettings.TrailerTimeout = Convert.ToInt32(AdvancedSettings.GetSetting("TrailerTimeout", "10")) + MySettings.UseIMPA = AdvancedSettings.GetBooleanSetting("UseIMPA", False) + MySettings.UseMPDB = AdvancedSettings.GetBooleanSetting("UseMPDB", False) + MySettings.UseTMDB = AdvancedSettings.GetBooleanSetting("UseTMDB", True) + MySettings.UseIMDBTrailer = AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", True) + MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) + MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) + MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + MySettings.ActorThumbsSize = Convert.ToString(AdvancedSettings.GetSetting("ActorThumbsSize", "SY275_SX400")) + MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) + + ConfigScrapeModifier.DoSearch = True + ConfigScrapeModifier.Meta = True + ConfigScrapeModifier.NFO = True + ConfigScrapeModifier.Extra = True + ConfigScrapeModifier.Actors = True + + ConfigScrapeModifier.Poster = AdvancedSettings.GetBooleanSetting("DoPoster", True) + ConfigScrapeModifier.Fanart = AdvancedSettings.GetBooleanSetting("DoFanart", True) + ConfigScrapeModifier.Trailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + End Sub + + Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.PostScraper + 'LoadSettings() + Dim Poster As New Images + Dim Fanart As New Images + Dim pResults As Containers.ImgResult + Dim fResults As Containers.ImgResult + Dim tURL As String = String.Empty + Dim Trailer As New Trailers + LoadSettings() + Dim saveModifier As Structures.ScrapeModifier = Master.GlobalScrapeMod + Master.GlobalScrapeMod = Functions.ScrapeModifierAndAlso(Master.GlobalScrapeMod, ConfigScrapeModifier) + + Trailer.IMDBURL = MySettings.IMDBURL + Dim doSave As Boolean = False + If Master.GlobalScrapeMod.Poster AndAlso (MySettings.UseIMPA OrElse MySettings.UseMPDB OrElse MySettings.UseTMDB) Then + Poster.Clear() + If Poster.IsAllowedToDownload(DBMovie, Enums.ImageType.Posters) Then + pResults = New Containers.ImgResult + If ScrapeImages.GetPreferredImage(Poster, DBMovie.Movie.IMDBID, Enums.ImageType.Posters, pResults, DBMovie.Filename, False, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Poster.Image) Then + pResults.ImagePath = Poster.SaveAsPoster(DBMovie) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(76, "A poster of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size")) + Using dImgSelect As New dlgImgSelect + dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Posters) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + End Using + End If + End If + End If + End If + Dim didEts As Boolean + If Master.GlobalScrapeMod.Fanart AndAlso MySettings.UseTMDB Then + Fanart.Clear() + If Fanart.IsAllowedToDownload(DBMovie, Enums.ImageType.Fanart) Then + fResults = New Containers.ImgResult + didEts = True + If ScrapeImages.GetPreferredImage(Fanart, DBMovie.Movie.IMDBID, Enums.ImageType.Fanart, fResults, DBMovie.Filename, Master.GlobalScrapeMod.Extra, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Fanart.Image) Then + fResults.ImagePath = Fanart.SaveAsFanart(DBMovie) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) ' + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(78, "Fanart of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size:")) + + Using dImgSelect As New dlgImgSelect + dImgSelect.IMDBURL = MySettings.IMDBURL + fResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Fanart) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + End Using + End If + End If + End If + End If + If Master.GlobalScrapeMod.Trailer AndAlso MySettings.DownloadTrailers Then + tURL = Trailer.DownloadSingleTrailer(DBMovie.Filename, DBMovie.Movie.IMDBID, DBMovie.isSingle, DBMovie.Movie.Trailer) + If Not String.IsNullOrEmpty(tURL) Then + If tURL.Substring(0, 22) = "http://www.youtube.com" Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + DBMovie.Movie.Trailer = Replace(tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + DBMovie.Movie.Trailer = tURL + End If + ElseIf tURL.Substring(0, 7) = "http://" Then + DBMovie.Movie.Trailer = tURL + Else + DBMovie.TrailerPath = tURL + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.TrailerItem, True) + End If + End If + End If + If Master.GlobalScrapeMod.Extra Then + If Master.eSettings.AutoET AndAlso DBMovie.isSingle Then + Try + ScrapeImages.GetPreferredFAasET(DBMovie.Movie.IMDBID, DBMovie.Filename) + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.ThumbsItem, True) + Catch ex As Exception + End Try + End If + End If + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then + For Each act As MediaContainers.Person In DBMovie.Movie.Actors + Dim img As New Images + img.FromWeb(act.Thumb) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If + Next + End If + Master.GlobalScrapeMod = saveModifier + Return New Interfaces.ModuleResult With {.breakChain = False, .BoolProperty = didEts} + End Function + + Sub SaveSettings() + AdvancedSettings.SetBooleanSetting("DoFullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("DoFullCrews", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DoTitle", ConfigOptions.bTitle) + AdvancedSettings.SetBooleanSetting("DoYear", ConfigOptions.bYear) + AdvancedSettings.SetBooleanSetting("DoMPAA", ConfigOptions.bMPAA) + AdvancedSettings.SetBooleanSetting("DoRelease", ConfigOptions.bRelease) + AdvancedSettings.SetBooleanSetting("DoRuntime", ConfigOptions.bRuntime) + AdvancedSettings.SetBooleanSetting("DoRating", ConfigOptions.bRating) + AdvancedSettings.SetBooleanSetting("DoVotes", ConfigOptions.bVotes) + AdvancedSettings.SetBooleanSetting("DoStudio", ConfigOptions.bStudio) + AdvancedSettings.SetBooleanSetting("DoTagline", ConfigOptions.bTagline) + AdvancedSettings.SetBooleanSetting("DoOutline", ConfigOptions.bOutline) + AdvancedSettings.SetBooleanSetting("DoPlot", ConfigOptions.bPlot) + AdvancedSettings.SetBooleanSetting("DoCast", ConfigOptions.bCast) + AdvancedSettings.SetBooleanSetting("DoDirector", ConfigOptions.bDirector) + AdvancedSettings.SetBooleanSetting("DoWriters", ConfigOptions.bWriters) + AdvancedSettings.SetBooleanSetting("DoProducers", ConfigOptions.bProducers) + AdvancedSettings.SetBooleanSetting("DoGenres", ConfigOptions.bGenre) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigOptions.bTrailer) + AdvancedSettings.SetBooleanSetting("DoMusic", ConfigOptions.bMusicBy) + AdvancedSettings.SetBooleanSetting("DoOtherCrews", ConfigOptions.bOtherCrew) + AdvancedSettings.SetBooleanSetting("DoCountry", ConfigOptions.bCountry) + AdvancedSettings.SetBooleanSetting("DoTop250", ConfigOptions.bTop250) + AdvancedSettings.SetBooleanSetting("DoCert", ConfigOptions.bCert) + AdvancedSettings.SetSetting("IMDBURL", MySettings.IMDBURL) + + AdvancedSettings.SetBooleanSetting("FullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("FullCrew", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("UseOFDBTitle", MySettings.UseOFDBTitle) + AdvancedSettings.SetBooleanSetting("UseOFDBOutline", MySettings.UseOFDBOutline) + AdvancedSettings.SetBooleanSetting("UseOFDBPlot", MySettings.UseOFDBPlot) + AdvancedSettings.SetBooleanSetting("UseOFDBGenre", MySettings.UseOFDBGenre) + AdvancedSettings.SetBooleanSetting("DownloadTraliers", MySettings.DownloadTrailers) + + AdvancedSettings.SetSetting("TrailerTimeout", MySettings.TrailerTimeout.ToString) + AdvancedSettings.SetBooleanSetting("UseIMPA", MySettings.UseIMPA) + AdvancedSettings.SetBooleanSetting("UseMPDB", MySettings.UseMPDB) + AdvancedSettings.SetBooleanSetting("UseTMDB", MySettings.UseTMDB) + AdvancedSettings.SetBooleanSetting("UseIMDBTrailer", MySettings.UseIMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailer", MySettings.UseTMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", MySettings.UseTMDBTrailerXBMC) + + AdvancedSettings.SetSetting("ManualETSize", MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("ActorThumbsSize", MySettings.ActorThumbsSize.ToString) + AdvancedSettings.SetSetting("UseTMDBTrailerPref", MySettings.UseTMDBTrailerPref.ToString) + + AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) + AdvancedSettings.SetBooleanSetting("DoFanart", ConfigScrapeModifier.Fanart) + 'AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigScrapeModifier.Trailer) + End Sub + + Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupPostScraper + MySettings.DownloadTrailers = _setupPost.chkDownloadTrailer.Checked + MySettings.UseIMDBTrailer = _setupPost.chkTrailerIMDB.Checked + MySettings.UseTMDBTrailer = _setupPost.chkTrailerTMDB.Checked + MySettings.UseTMDBTrailerXBMC = _setupPost.chkTrailerTMDBXBMC.Checked + MySettings.TrailerTimeout = Convert.ToInt32(_setupPost.txtTimeout.Text) + MySettings.UseTMDB = _setupPost.chkUseTMDB.Checked + MySettings.UseIMPA = _setupPost.chkUseIMPA.Checked + MySettings.UseMPDB = _setupPost.chkUseMPDB.Checked + MySettings.ManualETSize = _setupPost.cbManualETSize.Text + MySettings.ActorThumbsSize = _setupPost.cbActorThumbsSize.Text + MySettings.UseTMDBTrailerPref = _setupPost.cbTrailerTMDBPref.Text + ConfigScrapeModifier.Poster = _setupPost.chkScrapePoster.Checked + ConfigScrapeModifier.Fanart = _setupPost.chkScrapeFanart.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + RemoveHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + _setupPost.Dispose() + End If + End Sub + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupScraper + If Not String.IsNullOrEmpty(_setup.txtIMDBURL.Text) Then + MySettings.IMDBURL = Strings.Replace(_setup.txtIMDBURL.Text, "http://", String.Empty) + Else + MySettings.IMDBURL = "akas.imdb.com" + End If + MySettings.UseOFDBTitle = _setup.chkOFDBTitle.Checked + MySettings.UseOFDBOutline = _setup.chkOFDBOutline.Checked + MySettings.UseOFDBPlot = _setup.chkOFDBPlot.Checked + MySettings.UseOFDBGenre = _setup.chkOFDBGenre.Checked + ConfigOptions.bTitle = _setup.chkTitle.Checked + ConfigOptions.bYear = _setup.chkYear.Checked + ConfigOptions.bMPAA = _setup.chkMPAA.Checked + ConfigOptions.bRelease = _setup.chkRelease.Checked + ConfigOptions.bRuntime = _setup.chkRuntime.Checked + ConfigOptions.bRating = _setup.chkRating.Checked + ConfigOptions.bVotes = _setup.chkVotes.Checked + ConfigOptions.bStudio = _setup.chkStudio.Checked + ConfigOptions.bTagline = _setup.chkTagline.Checked + ConfigOptions.bOutline = _setup.chkOutline.Checked + ConfigOptions.bPlot = _setup.chkPlot.Checked + ConfigOptions.bCast = _setup.chkCast.Checked + ConfigOptions.bDirector = _setup.chkDirector.Checked + ConfigOptions.bWriters = _setup.chkWriters.Checked + ConfigOptions.bProducers = _setup.chkProducers.Checked + ConfigOptions.bGenre = _setup.chkGenre.Checked + ConfigOptions.bTrailer = _setup.chkTrailer.Checked + ConfigOptions.bMusicBy = _setup.chkMusicBy.Checked + ConfigOptions.bOtherCrew = _setup.chkCrew.Checked + ConfigOptions.bCountry = _setup.chkCountry.Checked + ConfigOptions.bTop250 = _setup.chkTop250.Checked + ConfigOptions.bCert = _setup.chkCertification.Checked + ConfigOptions.bFullCrew = _setup.chkFullCrew.Checked + ConfigOptions.bFullCast = _setup.chkFullCast.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + RemoveHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + _setup.Dispose() + End If + End Sub + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.Scraper + 'LoadSettings() + IMDB.IMDBURL = MySettings.IMDBURL + IMDB.UseOFDBTitle = MySettings.UseOFDBTitle + IMDB.UseOFDBOutline = MySettings.UseOFDBOutline + IMDB.UseOFDBPlot = MySettings.UseOFDBPlot + IMDB.UseOFDBGenre = MySettings.UseOFDBGenre + Dim tTitle As String = String.Empty + Dim OldTitle As String = DBMovie.Movie.Title + + If Master.GlobalScrapeMod.NFO AndAlso Not Master.GlobalScrapeMod.DoSearch Then + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + IMDB.GetMovieInfo(DBMovie.Movie.IMDBID, DBMovie.Movie, Options.bFullCrew, Options.bFullCast, False, Options, False) + ElseIf Not ScrapeType = Enums.ScrapeType.SingleScrape Then + DBMovie.Movie = IMDB.GetSearchMovieInfo(DBMovie.Movie.Title, DBMovie, ScrapeType, Options) + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + If ScrapeType = Enums.ScrapeType.SingleScrape AndAlso Master.GlobalScrapeMod.DoSearch _ + AndAlso ModulesManager.Instance.externalScrapersModules.OrderBy(Function(y) y.ScraperOrder).FirstOrDefault(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled).AssemblyName = _AssemblyName Then + DBMovie.Movie.IMDBID = String.Empty + DBMovie.ClearExtras = True + DBMovie.PosterPath = String.Empty + DBMovie.FanartPath = String.Empty + DBMovie.TrailerPath = String.Empty + DBMovie.ExtraPath = String.Empty + DBMovie.SubPath = String.Empty + DBMovie.NfoPath = String.Empty + DBMovie.Movie.Clear() + End If + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + Select Case ScrapeType + Case Enums.ScrapeType.FilterAuto, Enums.ScrapeType.FullAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.UpdateAuto + Return New Interfaces.ModuleResult With {.breakChain = False} + End Select + If ScrapeType = Enums.ScrapeType.SingleScrape Then + Using dSearch As New dlgIMDBSearchResults + dSearch.IMDBURL = MySettings.IMDBURL + Dim tmpTitle As String = DBMovie.Movie.Title + If String.IsNullOrEmpty(tmpTitle) Then + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name, False) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name, False) + Else + tmpTitle = StringUtils.FilterName(If(DBMovie.isSingle, Directory.GetParent(DBMovie.Filename).Name, Path.GetFileNameWithoutExtension(DBMovie.Filename))) + End If + End If + Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) + If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID + End If + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + + Master.currMovie.ClearExtras = True + Master.currMovie.PosterPath = String.Empty + Master.currMovie.FanartPath = String.Empty + Master.currMovie.TrailerPath = String.Empty + Master.currMovie.ExtraPath = String.Empty + Master.currMovie.SubPath = String.Empty + Master.currMovie.NfoPath = String.Empty + + + IMDB.GetMovieInfo(DBMovie.Movie.IMDBID, DBMovie.Movie, filterOptions.bFullCrew, filterOptions.bFullCast, False, filterOptions, False) + End If + Else + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End Using + End If + End If + + If Not String.IsNullOrEmpty(DBMovie.Movie.Title) Then + tTitle = StringUtils.FilterTokens(DBMovie.Movie.Title) + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = tTitle + If Master.eSettings.DisplayYear AndAlso Not String.IsNullOrEmpty(DBMovie.Movie.Year) Then + DBMovie.ListTitle = String.Format("{0} ({1})", tTitle, DBMovie.Movie.Year) + Else + DBMovie.ListTitle = tTitle + End If + Else + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name) + Else + If DBMovie.UseFolder AndAlso DBMovie.isSingle Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(DBMovie.Filename).Name) + Else + DBMovie.ListTitle = StringUtils.FilterName(Path.GetFileNameWithoutExtension(DBMovie.Filename)) + End If + End If + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = DBMovie.ListTitle + End If + + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function SelectImageOfType(ByRef mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.SelectImageOfType + If preload AndAlso _DLType = Enums.ImageType.Fanart AndAlso Not IsNothing(dFImgSelect) Then + pResults = dFImgSelect.ShowDialog() + dFImgSelect = Nothing + Else + Using dImgSelect As New dlgImgSelect + If preload Then + dFImgSelect = New dlgImgSelect + dFImgSelect.PreLoad(mMovie, Enums.ImageType.Fanart, _isEdit) + End If + dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(mMovie, _DLType, _isEdit) + End Using + End If + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + Public Sub PostScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.PostScraperOrderChanged + _setup.orderChanged() + End Sub + + Public Sub ScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.ScraperOrderChanged + _setupPost.orderChanged() + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Structure _MySettings + +#Region "Fields" + + Dim DownloadTrailers As Boolean + Dim IMDBURL As String + Dim UseOFDBGenre As Boolean + Dim UseOFDBOutline As Boolean + Dim UseOFDBPlot As Boolean + Dim UseOFDBTitle As Boolean + Dim TrailerTimeout As Integer + Dim UseTMDB As Boolean + Dim UseIMPA As Boolean + Dim UseMPDB As Boolean + Dim UseTMDBTrailer As Boolean + Dim UseIMDBTrailer As Boolean + Dim UseTMDBTrailerXBMC As Boolean + Dim ManualETSize As String + Dim ActorThumbsSize As String + Dim UseTMDBTrailerPref As String +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/scraperTVNativeModule.vb b/Addons/scraper.IMDB.Data/scraperTVNativeModule.vb new file mode 100644 index 0000000..450e6d6 --- /dev/null +++ b/Addons/scraper.IMDB.Data/scraperTVNativeModule.vb @@ -0,0 +1,221 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberNativeTVScraperModule + Implements Interfaces.EmberTVScraperModule + +#Region "Fields" + + Public Shared TVScraper As New Scraper + + Private _Name As String = "Ember Native TV Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmTVInfoSettingsHolder + Private _setupPost As frmTVMediaSettingsHolder +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberTVScraperModule.ModuleSettingsChanged + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberTVScraperModule.SetupPostScraperChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberTVScraperModule.SetupScraperChanged + + Public Event TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) Implements Interfaces.EmberTVScraperModule.TVScraperEvent + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property IsBusy() As Boolean Implements Interfaces.EmberTVScraperModule.IsBusy + Get + Return TVScraper.IsBusy + End Get + End Property + + Public ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberTVScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + Public ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberTVScraperModule.IsScraper + Get + Return True + End Get + End Property + + Public ReadOnly Property ModuleName() As String Implements Interfaces.EmberTVScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + Public ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberTVScraperModule.ModuleVersion + Get + Return FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Public Property PostScraperEnabled() As Boolean Implements Interfaces.EmberTVScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Public Property ScraperEnabled() As Boolean Implements Interfaces.EmberTVScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() Implements Interfaces.EmberTVScraperModule.CancelAsync + TVScraper.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String, ByRef epDet As MediaContainers.EpisodeDetails) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ChangeEpisode + epDet = TVScraper.ChangeEpisode(ShowID, TVDBID, Lang) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function GetLangs(ByVal sMirror As String, ByRef Langs As List(Of Containers.TVLanguage)) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetLangs + Langs = TVScraper.GetLangs(sMirror) + Return New Interfaces.ModuleResult With {.breakChain = True} + End Function + + Public Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByRef epDetails As MediaContainers.EpisodeDetails) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetSingleEpisode + epDetails = TVScraper.GetSingleEpisode(ShowID, TVDBID, Season, Episode, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images, ByRef Image As Images) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetSingleImage + Image = TVScraper.GetSingleImage(Title, ShowID, TVDBID, Type, Season, Episode, Lang, Ordering, CurrentImage) + Return New Interfaces.ModuleResult With {.breakChain = True} + End Function + + Public Sub Handler_ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent TVScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberTVScraperModule.Init + AddHandler TVScraper.ScraperEvent, AddressOf Handler_ScraperEvent + End Sub + + Public Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberTVScraperModule.InjectSetupPostScraper + Dim SPanel As New Containers.SettingsPanel + _setupPost = New frmTVMediaSettingsHolder + _setupPost.cbEnabled.Checked = _PostScraperEnabled + SPanel.Name = String.Concat(Me._Name, "PostScraper") + SPanel.Text = Master.eLang.GetString(0, "Ember Native TV Scrapers") + SPanel.Type = Master.eLang.GetString(698, "TV Shows", True) + SPanel.ImageIndex = If(Me._ScraperEnabled, 9, 10) + SPanel.Order = 100 + SPanel.Panel = Me._setupPost.pnlSettings + SPanel.Parent = "pnlTVMedia" + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + Return SPanel + End Function + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberTVScraperModule.ScraperUpdateMediaList + Public Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberTVScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmTVInfoSettingsHolder + _setup.cbEnabled.Checked = _ScraperEnabled + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(0, "Ember Native TV Scrapers") + SPanel.Prefix = "NativeTV_" + SPanel.Type = Master.eLang.GetString(698, "TV Shows", True) + SPanel.ImageIndex = If(Me._ScraperEnabled, 9, 10) + SPanel.Order = 100 + SPanel.Panel = Me._setup.pnlSettings + SPanel.Parent = "pnlTVData" + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + Return SPanel + End Function + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + Public Function PostScraper(ByRef DBTV As Structures.DBTV, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.PostScraper + End Function + + Public Function SaveImages() As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.SaveImages + TVScraper.SaveImages() + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberTVScraperModule.SaveSetupPostScraper + End Sub + + Public Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberTVScraperModule.SaveSetupScraper + End Sub + + Public Function ScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ScrapeEpisode + TVScraper.ScrapeEpisode(ShowID, ShowTitle, TVDBID, iEpisode, iSeason, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function Scraper(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.Scraper + TVScraper.SingleScrape(ShowID, ShowTitle, TVDBID, Lang, Ordering, Options, ScrapeType, WithCurrent) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function ScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ScrapeSeason + TVScraper.ScrapeSeason(ShowID, ShowTitle, TVDBID, iSeason, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Data/x64/SQLite.Interop.dll b/Addons/scraper.IMDB.Data/x64/SQLite.Interop.dll new file mode 100644 index 0000000..860c0e5 Binary files /dev/null and b/Addons/scraper.IMDB.Data/x64/SQLite.Interop.dll differ diff --git a/Addons/scraper.IMDB.Data/x86/SQLite.Interop.dll b/Addons/scraper.IMDB.Data/x86/SQLite.Interop.dll new file mode 100644 index 0000000..6f6fd4f Binary files /dev/null and b/Addons/scraper.IMDB.Data/x86/SQLite.Interop.dll differ diff --git a/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml new file mode 100644 index 0000000..cb66cd5 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml @@ -0,0 +1,902 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="1">tmdb1</string> + <string id="2">tmdb2</string> + <string id="3">tmdb3</string> + <string id="4">tmdb4</string> + <string id="5">tmdb5</string> + <string id="6">tmdb6</string> + <string id="7">tmdb7</string> + <string id="8">tmdb8</string> + <string id="9">tmdb9</string> + <string id="10">tmdb10</string> + <string id="11">tmdb11</string> + <string id="12">tmdb12</string> + <string id="13">tmdb13</string> + <string id="14">tmdb14</string> + <string id="15">tmdb15</string> + <string id="16">tmdb16</string> + <string id="17">tmdb17</string> + <string id="18">tmdb18</string> + <string id="19">tmdb19</string> + <string id="20">tmdb20</string> + <string id="21">tmdb21</string> + <string id="22">tmdb22</string> + <string id="23">tmdb23</string> + <string id="24">tmdb24</string> + <string id="25">tmdb25</string> + <string id="26">tmdb26</string> + <string id="27">tmdb27</string> + <string id="28">tmdb28</string> + <string id="29">tmdb29</string> + <string id="30">tmdb30</string> + <string id="31">tmdb31</string> + <string id="32">tmdb32</string> + <string id="33">tmdb33</string> + <string id="34">tmdb34</string> + <string id="35">tmdb35</string> + <string id="36">tmdb36</string> + <string id="37">tmdb37</string> + <string id="38">tmdb38</string> + <string id="39">tmdb39</string> + <string id="40">tmdb40</string> + <string id="41">tmdb41</string> + <string id="42">tmdb42</string> + <string id="43">tmdb43</string> + <string id="44">tmdb44</string> + <string id="45">tmdb45</string> + <string id="46">tmdb46</string> + <string id="47">tmdb47</string> + <string id="48">tmdb48</string> + <string id="49">tmdb49</string> + <string id="50">tmdb50</string> + <string id="51">tmdb51</string> + <string id="52">tmdb52</string> + <string id="53">tmdb53</string> + <string id="54">tmdb54</string> + <string id="55">tmdb55</string> + <string id="56">tmdb56</string> + <string id="57">tmdb57</string> + <string id="58">tmdb58</string> + <string id="59">tmdb59</string> + <string id="60">tmdb60</string> + <string id="61">tmdb61</string> + <string id="62">tmdb62</string> + <string id="63">tmdb63</string> + <string id="64">tmdb64</string> + <string id="65">tmdb65</string> + <string id="66">tmdb66</string> + <string id="67">tmdb67</string> + <string id="68">tmdb68</string> + <string id="69">tmdb69</string> + <string id="70">tmdb70</string> + <string id="71">tmdb71</string> + <string id="72">tmdb72</string> + <string id="73">tmdb73</string> + <string id="74">tmdb74</string> + <string id="75">tmdb75</string> + <string id="76">tmdb76</string> + <string id="77">tmdb77</string> + <string id="78">tmdb78</string> + <string id="79">tmdb79</string> + <string id="80">tmdb80</string> + <string id="81">tmdb81</string> + <string id="82">tmdb82</string> + <string id="83">tmdb83</string> + <string id="84">tmdb84</string> + <string id="85">tmdb85</string> + <string id="86">tmdb86</string> + <string id="87">tmdb87</string> + <string id="88">tmdb88</string> + <string id="89">tmdb89</string> + <string id="90">tmdb90</string> + <string id="91">tmdb91</string> + <string id="92">tmdb92</string> + <string id="93">tmdb93</string> + <string id="94">tmdb94</string> + <string id="95">tmdb95</string> + <string id="96">tmdb96</string> + <string id="97">tmdb97</string> + <string id="98">tmdb98</string> + <string id="99">tmdb99</string> + <string id="100">tmdb100</string> + <string id="101">tmdb101</string> + <string id="102">tmdb102</string> + <string id="103">tmdb103</string> + <string id="104">tmdb104</string> + <string id="105">tmdb105</string> + <string id="106">tmdb106</string> + <string id="107">tmdb107</string> + <string id="108">tmdb108</string> + <string id="109">tmdb109</string> + <string id="110">tmdb110</string> + <string id="111">tmdb111</string> + <string id="112">tmdb112</string> + <string id="113">tmdb113</string> + <string id="114">tmdb114</string> + <string id="115">tmdb115</string> + <string id="116">tmdb116</string> + <string id="117">tmdb117</string> + <string id="118">tmdb118</string> + <string id="119">tmdb119</string> + <string id="120">tmdb120</string> + <string id="121">tmdb121</string> + <string id="122">tmdb122</string> + <string id="123">tmdb123</string> + <string id="124">tmdb124</string> + <string id="125">tmdb125</string> + <string id="126">tmdb126</string> + <string id="127">tmdb127</string> + <string id="128">tmdb128</string> + <string id="129">tmdb129</string> + <string id="130">tmdb130</string> + <string id="131">tmdb131</string> + <string id="132">tmdb132</string> + <string id="133">tmdb133</string> + <string id="134">tmdb134</string> + <string id="135">tmdb135</string> + <string id="136">tmdb136</string> + <string id="137">tmdb137</string> + <string id="138">tmdb138</string> + <string id="139">tmdb139</string> + <string id="140">tmdb140</string> + <string id="141">tmdb141</string> + <string id="142">tmdb142</string> + <string id="143">tmdb143</string> + <string id="144">tmdb144</string> + <string id="145">tmdb145</string> + <string id="146">tmdb146</string> + <string id="147">tmdb147</string> + <string id="148">tmdb148</string> + <string id="149">tmdb149</string> + <string id="150">tmdb150</string> + <string id="151">tmdb151</string> + <string id="152">tmdb152</string> + <string id="153">tmdb153</string> + <string id="154">tmdb154</string> + <string id="155">tmdb155</string> + <string id="156">tmdb156</string> + <string id="157">tmdb157</string> + <string id="158">tmdb158</string> + <string id="159">tmdb159</string> + <string id="160">tmdb160</string> + <string id="161">tmdb161</string> + <string id="162">tmdb162</string> + <string id="163">tmdb163</string> + <string id="164">tmdb164</string> + <string id="165">tmdb165</string> + <string id="166">tmdb166</string> + <string id="167">tmdb167</string> + <string id="168">tmdb168</string> + <string id="169">tmdb169</string> + <string id="170">tmdb170</string> + <string id="171">tmdb171</string> + <string id="172">tmdb172</string> + <string id="173">tmdb173</string> + <string id="174">tmdb174</string> + <string id="175">tmdb175</string> + <string id="176">tmdb176</string> + <string id="177">tmdb177</string> + <string id="178">tmdb178</string> + <string id="179">tmdb179</string> + <string id="180">tmdb180</string> + <string id="181">tmdb181</string> + <string id="182">tmdb182</string> + <string id="183">tmdb183</string> + <string id="184">tmdb184</string> + <string id="185">tmdb185</string> + <string id="186">tmdb186</string> + <string id="187">tmdb187</string> + <string id="188">tmdb188</string> + <string id="189">tmdb189</string> + <string id="190">tmdb190</string> + <string id="191">tmdb191</string> + <string id="192">tmdb192</string> + <string id="193">tmdb193</string> + <string id="194">tmdb194</string> + <string id="195">tmdb195</string> + <string id="196">tmdb196</string> + <string id="197">tmdb197</string> + <string id="198">tmdb198</string> + <string id="199">tmdb199</string> + <string id="200">tmdb200</string> + <string id="201">tmdb201</string> + <string id="202">tmdb202</string> + <string id="203">tmdb203</string> + <string id="204">tmdb204</string> + <string id="205">tmdb205</string> + <string id="206">tmdb206</string> + <string id="207">tmdb207</string> + <string id="208">tmdb208</string> + <string id="209">tmdb209</string> + <string id="210">tmdb210</string> + <string id="211">tmdb211</string> + <string id="212">tmdb212</string> + <string id="213">tmdb213</string> + <string id="214">tmdb214</string> + <string id="215">tmdb215</string> + <string id="216">tmdb216</string> + <string id="217">tmdb217</string> + <string id="218">tmdb218</string> + <string id="219">tmdb219</string> + <string id="220">tmdb220</string> + <string id="221">tmdb221</string> + <string id="222">tmdb222</string> + <string id="223">tmdb223</string> + <string id="224">tmdb224</string> + <string id="225">tmdb225</string> + <string id="226">tmdb226</string> + <string id="227">tmdb227</string> + <string id="228">tmdb228</string> + <string id="229">tmdb229</string> + <string id="230">tmdb230</string> + <string id="231">tmdb231</string> + <string id="232">tmdb232</string> + <string id="233">tmdb233</string> + <string id="234">tmdb234</string> + <string id="235">tmdb235</string> + <string id="236">tmdb236</string> + <string id="237">tmdb237</string> + <string id="238">tmdb238</string> + <string id="239">tmdb239</string> + <string id="240">tmdb240</string> + <string id="241">tmdb241</string> + <string id="242">tmdb242</string> + <string id="243">tmdb243</string> + <string id="244">tmdb244</string> + <string id="245">tmdb245</string> + <string id="246">tmdb246</string> + <string id="247">tmdb247</string> + <string id="248">tmdb248</string> + <string id="249">tmdb249</string> + <string id="250">tmdb250</string> + <string id="251">tmdb251</string> + <string id="252">tmdb252</string> + <string id="253">tmdb253</string> + <string id="254">tmdb254</string> + <string id="255">tmdb255</string> + <string id="256">tmdb256</string> + <string id="257">tmdb257</string> + <string id="258">tmdb258</string> + <string id="259">tmdb259</string> + <string id="260">tmdb260</string> + <string id="261">tmdb261</string> + <string id="262">tmdb262</string> + <string id="263">tmdb263</string> + <string id="264">tmdb264</string> + <string id="265">tmdb265</string> + <string id="266">tmdb266</string> + <string id="267">tmdb267</string> + <string id="268">tmdb268</string> + <string id="269">tmdb269</string> + <string id="270">tmdb270</string> + <string id="271">tmdb271</string> + <string id="272">tmdb272</string> + <string id="273">tmdb273</string> + <string id="274">tmdb274</string> + <string id="275">tmdb275</string> + <string id="276">tmdb276</string> + <string id="277">tmdb277</string> + <string id="278">tmdb278</string> + <string id="279">tmdb279</string> + <string id="280">tmdb280</string> + <string id="281">tmdb281</string> + <string id="282">tmdb282</string> + <string id="283">tmdb283</string> + <string id="284">tmdb284</string> + <string id="285">tmdb285</string> + <string id="286">tmdb286</string> + <string id="287">tmdb287</string> + <string id="288">tmdb288</string> + <string id="289">tmdb289</string> + <string id="290">tmdb290</string> + <string id="291">tmdb291</string> + <string id="292">tmdb292</string> + <string id="293">tmdb293</string> + <string id="294">tmdb294</string> + <string id="295">tmdb295</string> + <string id="296">tmdb296</string> + <string id="297">tmdb297</string> + <string id="298">tmdb298</string> + <string id="299">tmdb299</string> + <string id="300">tmdb300</string> + <string id="301">tmdb301</string> + <string id="302">tmdb302</string> + <string id="303">tmdb303</string> + <string id="304">tmdb304</string> + <string id="305">tmdb305</string> + <string id="306">tmdb306</string> + <string id="307">tmdb307</string> + <string id="308">tmdb308</string> + <string id="309">tmdb309</string> + <string id="310">tmdb310</string> + <string id="311">tmdb311</string> + <string id="312">tmdb312</string> + <string id="313">tmdb313</string> + <string id="314">tmdb314</string> + <string id="315">tmdb315</string> + <string id="316">tmdb316</string> + <string id="317">tmdb317</string> + <string id="318">tmdb318</string> + <string id="319">tmdb319</string> + <string id="320">tmdb320</string> + <string id="321">tmdb321</string> + <string id="322">tmdb322</string> + <string id="323">tmdb323</string> + <string id="324">tmdb324</string> + <string id="325">tmdb325</string> + <string id="326">tmdb326</string> + <string id="327">tmdb327</string> + <string id="328">tmdb328</string> + <string id="329">tmdb329</string> + <string id="330">tmdb330</string> + <string id="331">tmdb331</string> + <string id="332">tmdb332</string> + <string id="333">tmdb333</string> + <string id="334">tmdb334</string> + <string id="335">tmdb335</string> + <string id="336">tmdb336</string> + <string id="337">tmdb337</string> + <string id="338">tmdb338</string> + <string id="339">tmdb339</string> + <string id="340">tmdb340</string> + <string id="341">tmdb341</string> + <string id="342">tmdb342</string> + <string id="343">tmdb343</string> + <string id="344">tmdb344</string> + <string id="345">tmdb345</string> + <string id="346">tmdb346</string> + <string id="347">tmdb347</string> + <string id="348">tmdb348</string> + <string id="349">tmdb349</string> + <string id="350">tmdb350</string> + <string id="351">tmdb351</string> + <string id="352">tmdb352</string> + <string id="353">tmdb353</string> + <string id="354">tmdb354</string> + <string id="355">tmdb355</string> + <string id="356">tmdb356</string> + <string id="357">tmdb357</string> + <string id="358">tmdb358</string> + <string id="359">tmdb359</string> + <string id="360">tmdb360</string> + <string id="361">tmdb361</string> + <string id="362">tmdb362</string> + <string id="363">tmdb363</string> + <string id="364">tmdb364</string> + <string id="365">tmdb365</string> + <string id="366">tmdb366</string> + <string id="367">tmdb367</string> + <string id="368">tmdb368</string> + <string id="369">tmdb369</string> + <string id="370">tmdb370</string> + <string id="371">tmdb371</string> + <string id="372">tmdb372</string> + <string id="373">tmdb373</string> + <string id="374">tmdb374</string> + <string id="375">tmdb375</string> + <string id="376">tmdb376</string> + <string id="377">tmdb377</string> + <string id="378">tmdb378</string> + <string id="379">tmdb379</string> + <string id="380">tmdb380</string> + <string id="381">tmdb381</string> + <string id="382">tmdb382</string> + <string id="383">tmdb383</string> + <string id="384">tmdb384</string> + <string id="385">tmdb385</string> + <string id="386">tmdb386</string> + <string id="387">tmdb387</string> + <string id="388">tmdb388</string> + <string id="389">tmdb389</string> + <string id="390">tmdb390</string> + <string id="391">tmdb391</string> + <string id="392">tmdb392</string> + <string id="393">tmdb393</string> + <string id="394">tmdb394</string> + <string id="395">tmdb395</string> + <string id="396">tmdb396</string> + <string id="397">tmdb397</string> + <string id="398">tmdb398</string> + <string id="399">tmdb399</string> + <string id="400">tmdb400</string> + <string id="401">tmdb401</string> + <string id="402">tmdb402</string> + <string id="403">tmdb403</string> + <string id="404">tmdb404</string> + <string id="405">tmdb405</string> + <string id="406">tmdb406</string> + <string id="407">tmdb407</string> + <string id="408">tmdb408</string> + <string id="409">tmdb409</string> + <string id="410">tmdb410</string> + <string id="411">tmdb411</string> + <string id="412">tmdb412</string> + <string id="413">tmdb413</string> + <string id="414">tmdb414</string> + <string id="415">tmdb415</string> + <string id="416">tmdb416</string> + <string id="417">tmdb417</string> + <string id="418">tmdb418</string> + <string id="419">tmdb419</string> + <string id="420">tmdb420</string> + <string id="421">tmdb421</string> + <string id="422">tmdb422</string> + <string id="423">tmdb423</string> + <string id="424">tmdb424</string> + <string id="425">tmdb425</string> + <string id="426">tmdb426</string> + <string id="427">tmdb427</string> + <string id="428">tmdb428</string> + <string id="429">tmdb429</string> + <string id="430">tmdb430</string> + <string id="431">tmdb431</string> + <string id="432">tmdb432</string> + <string id="433">tmdb433</string> + <string id="434">tmdb434</string> + <string id="435">tmdb435</string> + <string id="436">tmdb436</string> + <string id="437">tmdb437</string> + <string id="438">tmdb438</string> + <string id="439">tmdb439</string> + <string id="440">tmdb440</string> + <string id="441">tmdb441</string> + <string id="442">tmdb442</string> + <string id="443">tmdb443</string> + <string id="444">tmdb444</string> + <string id="445">tmdb445</string> + <string id="446">tmdb446</string> + <string id="447">tmdb447</string> + <string id="448">tmdb448</string> + <string id="449">tmdb449</string> + <string id="450">tmdb450</string> + <string id="451">tmdb451</string> + <string id="452">tmdb452</string> + <string id="453">tmdb453</string> + <string id="454">tmdb454</string> + <string id="455">tmdb455</string> + <string id="456">tmdb456</string> + <string id="457">tmdb457</string> + <string id="458">tmdb458</string> + <string id="459">tmdb459</string> + <string id="460">tmdb460</string> + <string id="461">tmdb461</string> + <string id="462">tmdb462</string> + <string id="463">tmdb463</string> + <string id="464">tmdb464</string> + <string id="465">tmdb465</string> + <string id="466">tmdb466</string> + <string id="467">tmdb467</string> + <string id="468">tmdb468</string> + <string id="469">tmdb469</string> + <string id="470">tmdb470</string> + <string id="471">tmdb471</string> + <string id="472">tmdb472</string> + <string id="473">tmdb473</string> + <string id="474">tmdb474</string> + <string id="475">tmdb475</string> + <string id="476">tmdb476</string> + <string id="477">tmdb477</string> + <string id="478">tmdb478</string> + <string id="479">tmdb479</string> + <string id="480">tmdb480</string> + <string id="481">tmdb481</string> + <string id="482">tmdb482</string> + <string id="483">tmdb483</string> + <string id="484">tmdb484</string> + <string id="485">tmdb485</string> + <string id="486">tmdb486</string> + <string id="487">tmdb487</string> + <string id="488">tmdb488</string> + <string id="489">tmdb489</string> + <string id="490">tmdb490</string> + <string id="491">tmdb491</string> + <string id="492">tmdb492</string> + <string id="493">tmdb493</string> + <string id="494">tmdb494</string> + <string id="495">tmdb495</string> + <string id="496">tmdb496</string> + <string id="497">tmdb497</string> + <string id="498">tmdb498</string> + <string id="499">tmdb499</string> + <string id="500">tmdb500</string> + <string id="501">tmdb501</string> + <string id="502">tmdb502</string> + <string id="503">tmdb503</string> + <string id="504">tmdb504</string> + <string id="505">tmdb505</string> + <string id="506">tmdb506</string> + <string id="507">tmdb507</string> + <string id="508">tmdb508</string> + <string id="509">tmdb509</string> + <string id="510">tmdb510</string> + <string id="511">tmdb511</string> + <string id="512">tmdb512</string> + <string id="513">tmdb513</string> + <string id="514">tmdb514</string> + <string id="515">tmdb515</string> + <string id="516">tmdb516</string> + <string id="517">tmdb517</string> + <string id="518">tmdb518</string> + <string id="519">tmdb519</string> + <string id="520">tmdb520</string> + <string id="521">tmdb521</string> + <string id="522">tmdb522</string> + <string id="523">tmdb523</string> + <string id="524">tmdb524</string> + <string id="525">tmdb525</string> + <string id="526">tmdb526</string> + <string id="527">tmdb527</string> + <string id="528">tmdb528</string> + <string id="529">tmdb529</string> + <string id="530">tmdb530</string> + <string id="531">tmdb531</string> + <string id="532">tmdb532</string> + <string id="533">tmdb533</string> + <string id="534">tmdb534</string> + <string id="535">tmdb535</string> + <string id="536">tmdb536</string> + <string id="537">tmdb537</string> + <string id="538">tmdb538</string> + <string id="539">tmdb539</string> + <string id="540">tmdb540</string> + <string id="541">tmdb541</string> + <string id="542">tmdb542</string> + <string id="543">tmdb543</string> + <string id="544">tmdb544</string> + <string id="545">tmdb545</string> + <string id="546">tmdb546</string> + <string id="547">tmdb547</string> + <string id="548">tmdb548</string> + <string id="549">tmdb549</string> + <string id="550">tmdb550</string> + <string id="551">tmdb551</string> + <string id="552">tmdb552</string> + <string id="553">tmdb553</string> + <string id="554">tmdb554</string> + <string id="555">tmdb555</string> + <string id="556">tmdb556</string> + <string id="557">tmdb557</string> + <string id="558">tmdb558</string> + <string id="559">tmdb559</string> + <string id="560">tmdb560</string> + <string id="561">tmdb561</string> + <string id="562">tmdb562</string> + <string id="563">tmdb563</string> + <string id="564">tmdb564</string> + <string id="565">tmdb565</string> + <string id="566">tmdb566</string> + <string id="567">tmdb567</string> + <string id="568">tmdb568</string> + <string id="569">tmdb569</string> + <string id="570">tmdb570</string> + <string id="571">tmdb571</string> + <string id="572">tmdb572</string> + <string id="573">tmdb573</string> + <string id="574">tmdb574</string> + <string id="575">tmdb575</string> + <string id="576">tmdb576</string> + <string id="577">tmdb577</string> + <string id="578">tmdb578</string> + <string id="579">tmdb579</string> + <string id="580">tmdb580</string> + <string id="581">tmdb581</string> + <string id="582">tmdb582</string> + <string id="583">tmdb583</string> + <string id="584">tmdb584</string> + <string id="585">tmdb585</string> + <string id="586">tmdb586</string> + <string id="587">tmdb587</string> + <string id="588">tmdb588</string> + <string id="589">tmdb589</string> + <string id="590">tmdb590</string> + <string id="591">tmdb591</string> + <string id="592">tmdb592</string> + <string id="593">tmdb593</string> + <string id="594">tmdb594</string> + <string id="595">tmdb595</string> + <string id="596">tmdb596</string> + <string id="597">tmdb597</string> + <string id="598">tmdb598</string> + <string id="599">tmdb599</string> + <string id="600">tmdb600</string> + <string id="601">tmdb601</string> + <string id="602">tmdb602</string> + <string id="603">tmdb603</string> + <string id="604">tmdb604</string> + <string id="605">tmdb605</string> + <string id="606">tmdb606</string> + <string id="607">tmdb607</string> + <string id="608">tmdb608</string> + <string id="609">tmdb609</string> + <string id="610">tmdb610</string> + <string id="611">tmdb611</string> + <string id="612">tmdb612</string> + <string id="613">tmdb613</string> + <string id="614">tmdb614</string> + <string id="615">tmdb615</string> + <string id="616">tmdb616</string> + <string id="617">tmdb617</string> + <string id="618">tmdb618</string> + <string id="619">tmdb619</string> + <string id="620">tmdb620</string> + <string id="621">tmdb621</string> + <string id="622">tmdb622</string> + <string id="623">tmdb623</string> + <string id="624">tmdb624</string> + <string id="625">tmdb625</string> + <string id="626">tmdb626</string> + <string id="627">tmdb627</string> + <string id="628">tmdb628</string> + <string id="629">tmdb629</string> + <string id="630">tmdb630</string> + <string id="631">tmdb631</string> + <string id="632">tmdb632</string> + <string id="633">tmdb633</string> + <string id="634">tmdb634</string> + <string id="635">tmdb635</string> + <string id="636">tmdb636</string> + <string id="637">tmdb637</string> + <string id="638">tmdb638</string> + <string id="639">tmdb639</string> + <string id="640">tmdb640</string> + <string id="641">tmdb641</string> + <string id="642">tmdb642</string> + <string id="643">tmdb643</string> + <string id="644">tmdb644</string> + <string id="645">tmdb645</string> + <string id="646">tmdb646</string> + <string id="647">tmdb647</string> + <string id="648">tmdb648</string> + <string id="649">tmdb649</string> + <string id="650">tmdb650</string> + <string id="651">tmdb651</string> + <string id="652">tmdb652</string> + <string id="653">tmdb653</string> + <string id="654">tmdb654</string> + <string id="655">tmdb655</string> + <string id="656">tmdb656</string> + <string id="657">tmdb657</string> + <string id="658">tmdb658</string> + <string id="659">tmdb659</string> + <string id="660">tmdb660</string> + <string id="661">tmdb661</string> + <string id="662">tmdb662</string> + <string id="663">tmdb663</string> + <string id="664">tmdb664</string> + <string id="665">tmdb665</string> + <string id="666">tmdb666</string> + <string id="667">tmdb667</string> + <string id="668">tmdb668</string> + <string id="669">tmdb669</string> + <string id="670">tmdb670</string> + <string id="671">tmdb671</string> + <string id="672">tmdb672</string> + <string id="673">tmdb673</string> + <string id="674">tmdb674</string> + <string id="675">tmdb675</string> + <string id="676">tmdb676</string> + <string id="677">tmdb677</string> + <string id="678">tmdb678</string> + <string id="679">tmdb679</string> + <string id="680">tmdb680</string> + <string id="681">tmdb681</string> + <string id="682">tmdb682</string> + <string id="683">tmdb683</string> + <string id="684">tmdb684</string> + <string id="685">tmdb685</string> + <string id="686">tmdb686</string> + <string id="687">tmdb687</string> + <string id="688">tmdb688</string> + <string id="689">tmdb689</string> + <string id="690">tmdb690</string> + <string id="691">tmdb691</string> + <string id="692">tmdb692</string> + <string id="693">tmdb693</string> + <string id="694">tmdb694</string> + <string id="695">tmdb695</string> + <string id="696">tmdb696</string> + <string id="697">tmdb697</string> + <string id="698">tmdb698</string> + <string id="699">tmdb699</string> + <string id="700">tmdb700</string> + <string id="701">tmdb701</string> + <string id="702">tmdb702</string> + <string id="703">tmdb703</string> + <string id="704">tmdb704</string> + <string id="705">tmdb705</string> + <string id="706">tmdb706</string> + <string id="707">tmdb707</string> + <string id="708">tmdb708</string> + <string id="709">tmdb709</string> + <string id="710">tmdb710</string> + <string id="711">tmdb711</string> + <string id="712">tmdb712</string> + <string id="713">tmdb713</string> + <string id="714">tmdb714</string> + <string id="715">tmdb715</string> + <string id="716">tmdb716</string> + <string id="717">tmdb717</string> + <string id="718">tmdb718</string> + <string id="719">tmdb719</string> + <string id="720">tmdb720</string> + <string id="721">tmdb721</string> + <string id="722">tmdb722</string> + <string id="723">tmdb723</string> + <string id="724">tmdb724</string> + <string id="725">tmdb725</string> + <string id="726">tmdb726</string> + <string id="727">tmdb727</string> + <string id="728">tmdb728</string> + <string id="729">tmdb729</string> + <string id="730">tmdb730</string> + <string id="731">tmdb731</string> + <string id="732">tmdb732</string> + <string id="733">tmdb733</string> + <string id="734">tmdb734</string> + <string id="735">tmdb735</string> + <string id="736">tmdb736</string> + <string id="737">tmdb737</string> + <string id="738">tmdb738</string> + <string id="739">tmdb739</string> + <string id="740">tmdb740</string> + <string id="741">tmdb741</string> + <string id="742">tmdb742</string> + <string id="743">tmdb743</string> + <string id="744">tmdb744</string> + <string id="745">tmdb745</string> + <string id="746">tmdb746</string> + <string id="747">tmdb747</string> + <string id="748">tmdb748</string> + <string id="749">tmdb749</string> + <string id="750">tmdb750</string> + <string id="751">tmdb751</string> + <string id="752">tmdb752</string> + <string id="753">tmdb753</string> + <string id="754">tmdb754</string> + <string id="755">tmdb755</string> + <string id="756">tmdb756</string> + <string id="757">tmdb757</string> + <string id="758">tmdb758</string> + <string id="759">tmdb759</string> + <string id="760">tmdb760</string> + <string id="761">tmdb761</string> + <string id="762">tmdb762</string> + <string id="763">tmdb763</string> + <string id="764">tmdb764</string> + <string id="765">tmdb765</string> + <string id="766">tmdb766</string> + <string id="767">tmdb767</string> + <string id="768">tmdb768</string> + <string id="769">tmdb769</string> + <string id="770">tmdb770</string> + <string id="771">tmdb771</string> + <string id="772">tmdb772</string> + <string id="773">tmdb773</string> + <string id="774">tmdb774</string> + <string id="775">tmdb775</string> + <string id="776">tmdb776</string> + <string id="777">tmdb777</string> + <string id="778">tmdb778</string> + <string id="779">tmdb779</string> + <string id="780">tmdb780</string> + <string id="781">tmdb781</string> + <string id="782">tmdb782</string> + <string id="783">tmdb783</string> + <string id="784">tmdb784</string> + <string id="785">tmdb785</string> + <string id="786">tmdb786</string> + <string id="787">tmdb787</string> + <string id="788">tmdb788</string> + <string id="789">tmdb789</string> + <string id="790">tmdb790</string> + <string id="791">tmdb791</string> + <string id="792">tmdb792</string> + <string id="793">tmdb793</string> + <string id="794">tmdb794</string> + <string id="795">tmdb795</string> + <string id="796">tmdb796</string> + <string id="797">tmdb797</string> + <string id="798">tmdb798</string> + <string id="799">tmdb799</string> + <string id="800">tmdb800</string> + <string id="801">tmdb801</string> + <string id="802">tmdb802</string> + <string id="803">tmdb803</string> + <string id="804">tmdb804</string> + <string id="805">tmdb805</string> + <string id="806">tmdb806</string> + <string id="807">tmdb807</string> + <string id="808">tmdb808</string> + <string id="809">tmdb809</string> + <string id="810">tmdb810</string> + <string id="811">tmdb811</string> + <string id="812">tmdb812</string> + <string id="813">tmdb813</string> + <string id="814">tmdb814</string> + <string id="815">tmdb815</string> + <string id="816">tmdb816</string> + <string id="817">tmdb817</string> + <string id="818">tmdb818</string> + <string id="819">tmdb819</string> + <string id="820">tmdb820</string> + <string id="821">tmdb821</string> + <string id="822">tmdb822</string> + <string id="823">tmdb823</string> + <string id="824">tmdb824</string> + <string id="825">tmdb825</string> + <string id="826">tmdb826</string> + <string id="827">tmdb827</string> + <string id="828">tmdb828</string> + <string id="829">tmdb829</string> + <string id="830">tmdb830</string> + <string id="831">tmdb831</string> + <string id="832">tmdb832</string> + <string id="833">tmdb833</string> + <string id="834">tmdb834</string> + <string id="835">tmdb835</string> + <string id="836">tmdb836</string> + <string id="837">tmdb837</string> + <string id="838">tmdb838</string> + <string id="839">tmdb839</string> + <string id="840">tmdb840</string> + <string id="841">tmdb841</string> + <string id="842">tmdb842</string> + <string id="843">tmdb843</string> + <string id="844">tmdb844</string> + <string id="845">tmdb845</string> + <string id="846">tmdb846</string> + <string id="847">tmdb847</string> + <string id="848">tmdb848</string> + <string id="849">tmdb849</string> + <string id="850">tmdb850</string> + <string id="851">tmdb851</string> + <string id="852">tmdb852</string> + <string id="853">tmdb853</string> + <string id="854">tmdb854</string> + <string id="855">tmdb855</string> + <string id="856">tmdb856</string> + <string id="857">tmdb857</string> + <string id="858">tmdb858</string> + <string id="859">tmdb859</string> + <string id="860">tmdb860</string> + <string id="861">tmdb861</string> + <string id="862">tmdb862</string> + <string id="863">tmdb863</string> + <string id="864">tmdb864</string> + <string id="865">tmdb865</string> + <string id="866">tmdb866</string> + <string id="867">tmdb867</string> + <string id="868">tmdb868</string> + <string id="869">tmdb869</string> + <string id="870">tmdb870</string> + <string id="871">tmdb871</string> + <string id="872">tmdb872</string> + <string id="873">tmdb873</string> + <string id="874">tmdb874</string> + <string id="875">tmdb875</string> + <string id="876">tmdb876</string> + <string id="877">tmdb877</string> + <string id="878">tmdb878</string> + <string id="879">tmdb879</string> + <string id="880">tmdb880</string> + <string id="881">tmdb881</string> + <string id="882">tmdb882</string> + <string id="883">tmdb883</string> + <string id="884">tmdb884</string> + <string id="885">tmdb885</string> + <string id="886">tmdb886</string> + <string id="887">tmdb887</string> + <string id="888">tmdb888</string> + <string id="889">tmdb889</string> + <string id="890">tmdb890</string> + <string id="891">tmdb891</string> + <string id="892">tmdb892</string> + <string id="893">tmdb893</string> + <string id="894">tmdb894</string> + <string id="895">tmdb895</string> + <string id="896">tmdb896</string> + <string id="897">tmdb897</string> + <string id="898">tmdb898</string> + <string id="899">tmdb899</string> + <string id="900">tmdb900</string> +</strings> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml new file mode 100644 index 0000000..5e87256 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Enable or disable this module.</string> + <string control="TMDBMovieInfo_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieInfo_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API Key from the TMDB site. Sharing the API key is forbidden.</string> + <string control="TMDBMovieInfo_chkCertification">Enable scraping movie certification.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Selected language for TMDB searches</string> + <string control="TMDBMovieInfo_chkFallBackEng">If no record is available for selected language try English</string> + <string control="TMDBMovieInfo_chkCrew">Enable scraping movie other crew. (Scrape Full Crew must be enabled)</string> + <string control="TMDBMovieInfo_chkStudio">Enable scraping movie studio.</string> + <string control="TMDBMovieInfo_chkRuntime">Enable scraping movie runtime.</string> + <string control="TMDBMovieInfo_chkPlot">Enable scraping movie plot.</string> + <string control="TMDBMovieInfo_chkOutline">Enable scraping movie outline.</string> + <string control="TMDBMovieInfo_chkGenre">Enable scraping movie genre.</string> + <string control="TMDBMovieInfo_chkTagline">Enable scraping movie tagline.</string> + <string control="TMDBMovieInfo_chkCast">Enable scraping movie cast.</string> + <string control="TMDBMovieInfo_chkVotes">Enable scraping movie votes.</string> + <string control="TMDBMovieInfo_chkRating">Enable scraping movie rating.</string> + <string control="TMDBMovieInfo_chkRelease">Enable scraping movie release date.</string> + <string control="TMDBMovieInfo_chkMPAA">Enable scraping movie MPAA.</string> + <string control="TMDBMovieInfo_chkYear">Enable scraping movie year.</string> + <string control="TMDBMovieInfo_chkTitle">Enable scraping movie title.</string> + <string control="TMDBMovieMedia_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieMedia_cbEnabled">Enable or disable this module.</string> + <string control="TMDBMovieMedia_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Enable scraping posters from this module. (Refer to global poster settings for more options)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Enable scraping fanart from this module. (Refer to global fanart settings for more options)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Enable trailer downloading from this module. (Refer to global trailer settings for more options)</string> + <string control="TMDBMovieMedia_txtTimeout">Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Select the sites from which you would like to retrieve trailer URLs and/or files.</string> +</strings> diff --git a/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml new file mode 100644 index 0000000..cf68bc8 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Native TV Scrapers</string> + <string id="1">Use OFDB Genre</string> + <string id="2">Use OFDB Plot</string> + <string id="3">Use OFDB Outline</string> + <string id="4">Use OFDB Title</string> + <string id="5">TMDB Mirror:</string> + <string id="6">Scraper Fields - Scraper specific</string> + <string id="7">Timeout:</string> + <string id="8">Supported Sites:</string> + <string id="9">Get Images From:</string> + <string id="10">Search Results</string> + <string id="11">Searching TMDB...</string> + <string id="12">The ID you entered is not a valid IMDB ID.</string> + <string id="13">You have manually entered an IMDB ID but have not verified it is correct.</string> + <string id="14">Continue without verification?</string> + <string id="15">Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again.</string> + <string id="16">Verification Failed</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">No Matches Found</string> + <string id="21">View details of each result to find the proper movie.</string> + <string id="22">Movie Search Results</string> + <string id="23">Manual IMDB Entry:</string> + <string id="24">Verify</string> + <string id="25">Searching TMDB...</string> + <string id="26">Downloading details...</string> + <string id="27">Downloading {0}</string> + <string id="28">No Fanart found for this movie.</string> + <string id="29">No Fanart Found</string> + <string id="30">No Posters found for this movie.</string> + <string id="31">No Posters Found</string> + <string id="32">Retrieving data from TheMovieDB.com...</string> + <string id="33">TheMovieDB.com is not enabled</string> + <string id="34">Retrieving data from IMPAwards.com...</string> + <string id="35">IMPAwards.com is not enabled</string> + <string id="36">Retrieving data from MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com is not enabled</string> + <string id="38">Preparing images...</string> + <string id="39">Select Poster</string> + <string id="40">Select Fanart</string> + <string id="41">Check All Thumb</string> + <string id="42">Check All Mid</string> + <string id="43">Check All Original</string> + <string id="44">Selected item will be set as fanart. All checked items will be saved to \extrathumbs.</string> + <string id="45">Performing Preliminary Tasks...</string> + <string id="46">Downloading Selected Image...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Small</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Small ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Multiple</string> + <string id="56">Downloading selected trailer...</string> + <string id="57">Copying specified file to trailer...</string> + <string id="58">The trailer could not be played. This could be due to an invalid URL or you do not have the proper player to play the trailer type.</string> + <string id="59">Error Playing Trailer</string> + <string id="60">Move</string> + <string id="61">Copy</string> + <string id="62">Moving specified file to trailer...</string> + <string id="63">Set To Nfo</string> + <string id="64">Select Trailer</string> + <string id="65">Select Trailer to Download</string> + <string id="66">Manual Trailer Entry</string> + <string id="67">Direct Link or YouTube URL:</string> + <string id="68">Compiling trailer list...</string> + <string id="69">Preview Trailer</string> + <string id="70">Local Trailer:</string> + <string id="71">The video format links could not be retrieved.</string> + <string id="72">Error Retrieving Video Format Links</string> + <string id="73">Select Format</string> + <string id="74">Getting available formats...</string> + <string id="75">Available Formats</string> + <string id="76">A poster of your preferred size could not be found. Please choose another.</string> + <string id="77">No Preferred Size</string> + <string id="78">Fanart of your preferred size could not be found. Please choose another.</string> + <string id="79">There are no known episodes for this show. Scrape the show, season, or episode and try again.</string> + <string id="80">No Known Episodes</string> + <string id="81">There is no poster available for this episode.</string> + <string id="82">Guest Star</string> + <string id="83">The ID you entered is not a valid TVDB ID.</string> + <string id="84">Downloading show info...</string> + <string id="85">TV Search Results</string> + <string id="86">View details of each result to find the proper TV show.</string> + <string id="87">Downloading Fullsize Fanart Image...</string> + <string id="88">Loading Current Images...</string> + <string id="89">(Down)Loading New Images...</string> + <string id="90">Setting Defaults...</string> + <string id="91">Show Poster</string> + <string id="92">Episode Fanart</string> + <string id="93">Show Fanart</string> + <string id="94">All Seasons Poster</string> + <string id="95">Season Posters</string> + <string id="96">Season Fanart</string> + <string id="97">Season {0} Posters</string> + <string id="98">Season {0} Fanart</string> + <string id="99">TV Image Selection</string> + <string id="100">Current Image:</string> + <string id="101">Get Posters</string> + <string id="102">Get Fanart</string> + <string id="103">These settings are specific to this module.{0}Please refer to the global settings for more options.</string> + <string id="104">Ember TMDB Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Size:</string> + <string id="109">Trailers</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Preferred language</string> + <string id="113">Save Fanart In:</string> + <string id="114">Fall back on english</string> + <string id="115">Preferred Language:</string> + <string id="116">TMDBid:</string> + <string id="117">Retrieving data from IMDB.com...</string> + <string id="118">IMDB.com is not enabled</string> + <string id="119">TheMovieDB API is missing or not valid</string> + <string id="120">Retrieving data from Fanart.tv...</string> + <string id="121">Fanart.tv is not enabled</string> + <string id="122">Get your API Key from www.themoviedb.org</string> + <string id="123">Get your API Key from fanart.tv</string> +</strings> diff --git a/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml new file mode 100644 index 0000000..d2a3801 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Aktiviert oder deaktiviert dieses Modul.</string> + <string control="TMDBMovieInfo_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieInfo_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API-Key von der TMDB-Website. Gemeinsame Nutzung des API-Schlüssels ist verboten.</string> + <string control="TMDBMovieInfo_chkCertification">Das Scrapen von Altersbeschränkungen einschalten.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Wähle die Sprache in der auf TMDB gesucht werden soll</string> + <string control="TMDBMovieInfo_chkFallBackEng">Wenn kein Datensatz für die gewählte Sprache verfügbar ist versuche englischen zu nehmen.</string> + <string control="TMDBMovieInfo_chkCrew">Das Scrapen von der restlichen Crew einschalten. ("Gesamte Crew Scrapen" muss eingeschaltet sein)</string> + <string control="TMDBMovieInfo_chkStudio">Das Scrapen von Studios einschalten.</string> + <string control="TMDBMovieInfo_chkRuntime">Das Scrapen von Spielzeiten einschalten.</string> + <string control="TMDBMovieInfo_chkPlot">Das Scrapen von Inhaltsangaben einschalten.</string> + <string control="TMDBMovieInfo_chkOutline">Das Scrapen von Kurzbeschreibungen einschalten.</string> + <string control="TMDBMovieInfo_chkGenre">Das Scrapen von Genres einschalten.</string> + <string control="TMDBMovieInfo_chkTagline">Das Scrapen von Taglines einschalten.</string> + <string control="TMDBMovieInfo_chkCast">Das Scrapen von Schauspielern einschalten.</string> + <string control="TMDBMovieInfo_chkVotes">Das Scrapen von Anzahl Bewertungen einschalten.</string> + <string control="TMDBMovieInfo_chkRating">Das Scrapen von Bewertungen einschalten.</string> + <string control="TMDBMovieInfo_chkRelease">Das Scrapen von Premiere-Daten einschalten.</string> + <string control="TMDBMovieInfo_chkMPAA">Das Scrapen von MPAA-Informationen einschalten.</string> + <string control="TMDBMovieInfo_chkYear">Das Scrapen von Filmjahren einschalten.</string> + <string control="TMDBMovieInfo_chkTitle">Das Scrapen von Filmtiteln einschalten.</string> + <string control="TMDBMovieMedia_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieMedia_cbEnabled">Aktiviert oder deaktiviert dieses Modul.</string> + <string control="TMDBMovieMedia_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Aktiviert das Laden von Fanarts mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Aktiviert das Laden von Trailern mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_txtTimeout">Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Seite in dieser Zeit nicht geantwortet hat wird sie übersprungen)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Wähle die Seite von der Trailer URLs/Dateien geladen werden sollen.</string> +</strings> diff --git a/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml new file mode 100644 index 0000000..9b8e52e --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Nativer TV Scraper</string> + <string id="1">OFDB Genre benutzen</string> + <string id="2">OFDB Handlung benutzen</string> + <string id="3">OFDB Kurzbeschr. benutzen</string> + <string id="4">OFDB Titel benutzen</string> + <string id="5">TMDB Mirror:</string> + <string id="6">Scraper Felder - Scraper spezifisch</string> + <string id="7">Timeout:</string> + <string id="8">Unterstützte Seiten:</string> + <string id="9">Bilder holen von:</string> + <string id="10">Suchergebnis</string> + <string id="11">Suche in der TMDB...</string> + <string id="12">Die eingegebene ID ist keine gültige IMDB ID.</string> + <string id="13">Die IMDB ID ist noch nicht geprüft.</string> + <string id="14">Ohne Prüfung fortfahren?</string> + <string id="15">Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben.</string> + <string id="16">Prüfung fehlgeschlagen</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">Keine Treffer</string> + <string id="21">Schaue dir die Details an um den richtigen Film zu finden.</string> + <string id="22">Film Suchergebnis</string> + <string id="23">Man. IMDB ID:</string> + <string id="24">Prüfen</string> + <string id="25">Suche in der TMDB...</string> + <string id="26">Lade Details...</string> + <string id="27">Lade {0} herunter</string> + <string id="28">Kein Fanart für diesen Film gefunden.</string> + <string id="29">Kein Fanart gefunden</string> + <string id="30">Kein Poster für diesen Film gefunden.</string> + <string id="31">Kein Poster gefunden</string> + <string id="32">Lade Daten von TheMovieDB.com...</string> + <string id="33">TheMovieDB.com ist nicht aktiviert</string> + <string id="34">Lade Daten von IMPAwards.com...</string> + <string id="35">IMPAwards.com ist nicht aktiviert</string> + <string id="36">Lade Daten von MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com ist nicht aktiviert</string> + <string id="38">Bereite Bilder vor...</string> + <string id="39">Wähle Poster</string> + <string id="40">Wähle Fanart</string> + <string id="41">Wähle alle Thumb</string> + <string id="42">Wähle alle Mittl.</string> + <string id="43">Wähle alle Original</string> + <string id="44">Markiertes Bild wird Fanart. Alle aktivierten werden Extrathumbs.</string> + <string id="45">Vorarbeit läuft...</string> + <string id="46">Lade gewähltes Bild...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Klein</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Klein ({0}x{1})</string> + <string id="54">Mittel ({0}x{1})</string> + <string id="55">Mehrfach</string> + <string id="56">Lade gewählten Trailer...</string> + <string id="57">Kopiere gewählten Trailer...</string> + <string id="58">Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URL liegen oder es ist kein Player für diesen Dateityp vorhanden.</string> + <string id="59">Fehler beim Abspielen des Trailers</string> + <string id="60">Verschieben</string> + <string id="61">Kopieren</string> + <string id="62">Verschiebe gewählten Treiler...</string> + <string id="63">In NFO speichern</string> + <string id="64">Trailer wählen</string> + <string id="65">Trailer zum laden wählen</string> + <string id="66">Manueller Trailer</string> + <string id="67">Direkter Link oder YouTube URL:</string> + <string id="68">Stelle Trailerliste zusammen...</string> + <string id="69">Trailer Vorschau</string> + <string id="70">Loakler trailer:</string> + <string id="71">Fehler beim generieren der Videoformat Linkliste.</string> + <string id="72">Fehler beim Generieren der Videoformat Links.</string> + <string id="73">Wähle Format</string> + <string id="74">Hole verfügbare Formate...</string> + <string id="75">Verfügbare Formate</string> + <string id="76">Es konnte kein Poster in der bevorzugten Größe gefunden werden. Wähle ein anderes.</string> + <string id="77">Keine bevorzugte Größe</string> + <string id="78">Es konnte kein Fanart in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="79">Keine Episoden für diese TV-Serie verfügbar. Scrape diese Serie, Staffel oder Episode und versuche es erneut.</string> + <string id="80">Keine Episoden verfügbar</string> + <string id="81">Kein Poster für diese Episode vorhanden.</string> + <string id="82">Gaststar</string> + <string id="83">Die eingegebene ID ist keine gültige TMDB ID.</string> + <string id="84">Lade Serien Informationen...</string> + <string id="85">Serien Suchergebnis</string> + <string id="86">Betrachte die Details um die richtige TV-Serie zu erkennen.</string> + <string id="87">Lade Fanart in Originalgröße...</string> + <string id="88">Lade aktuelle Bilder...</string> + <string id="89">Lade neue Bilder...</string> + <string id="90">Setze Standardwerte...</string> + <string id="91">Serien Poster</string> + <string id="92">Episoden Fanart</string> + <string id="93">Serien Fanart</string> + <string id="94">Alle-Staffeln Poster</string> + <string id="95">Staffel Poster</string> + <string id="96">Staffel Fanart</string> + <string id="97">Staffel {0} Poster</string> + <string id="98">Staffel {0} Fanart</string> + <string id="99">Bilderwahl TV-Serien</string> + <string id="100">Aktuelles Bild:</string> + <string id="101">Poster laden</string> + <string id="102">Fanart laden</string> + <string id="103">Diese Einstellungen sind Modul-spezifisch. {0} Bitte werfen sie einen Blick in die Globalen Einstellungen für noch mehr Optionen.</string> + <string id="104">Ember TMDB Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Grösse:</string> + <string id="109">Trailer</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Bevorzugte Sprache</string> + <string id="113">Speichere Fanart in:</string> + <string id="114">Verwende Englisch wenn nichts verfügbar</string> + <string id="115">Bevorzugte Sprache:</string> + <string id="116">TMDBid:</string> + <string id="117">Lade Daten von IMDB.com...</string> + <string id="118">IMDB.com ist nicht aktiviert.</string> + <string id="119">Die TheMovieDB API ist nicht vorhanden oder ungültig</string> + <string id="120">Lade Daten von Fanart.tv...</string> + <string id="121">Fanart.tv ist nicht aktiviert</string> + <string id="122">Get your API Key from www.themoviedb.org</string> + <string id="123">Get your API Key from fanart.tv</string> +</strings> diff --git a/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..54809c6 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Slå denne modulen på eller av.</string> + <string control="TMDBMovieInfo_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieInfo_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API-nøkkel fra TMDB-siden. Deling av denne nøkkelen er forbudt.</string> + <string control="TMDBMovieInfo_chkCertification">Slå på detaljhenting av filmsertifisering.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Valgt språk for TMDB-søk.</string> + <string control="TMDBMovieInfo_chkFallBackEng">Hvis valgt språk ikke blir funnet, prøv engelsk.</string> + <string control="TMDBMovieInfo_chkCrew">Slå på detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått)</string> + <string control="TMDBMovieInfo_chkStudio">Slå på detaljhenting av filmstudio.</string> + <string control="TMDBMovieInfo_chkRuntime">Slå på detaljhenting av filmlengde.</string> + <string control="TMDBMovieInfo_chkPlot">Slå på detaljhenting av filmens historie.</string> + <string control="TMDBMovieInfo_chkOutline">Slå på detaljhenting av filmens beskrivelse.</string> + <string control="TMDBMovieInfo_chkGenre">Slå på detaljhenting av filmens sjanger.</string> + <string control="TMDBMovieInfo_chkTagline">Slå på detaljhetning av filmens undertittel.</string> + <string control="TMDBMovieInfo_chkCast">Slå på detaljhetning av filmens skuespillerbeholdning.</string> + <string control="TMDBMovieInfo_chkVotes">Slå på detaljhetning av filmens poeng.</string> + <string control="TMDBMovieInfo_chkRating">Slå på detaljhetning av filmens aldersgrense.</string> + <string control="TMDBMovieInfo_chkRelease">Slå på detaljhetning av filmens premieredato.</string> + <string control="TMDBMovieInfo_chkMPAA">Slå på detaljhetning av filmens MPAA-markering.</string> + <string control="TMDBMovieInfo_chkYear">Slå på detaljhetning av filmens år.</string> + <string control="TMDBMovieInfo_chkTitle">Slå på detaljhetning av filmens tittel.</string> + <string control="TMDBMovieMedia_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieMedia_cbEnabled">Slå denne modulen på eller av.</string> + <string control="TMDBMovieMedia_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Slå på detaljhetning av plakater i denne modulen. (Se globale plakatinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Slå på detaljhetning av fankunst i denne modulen. (Se globale fankunstinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Slå på automatisk henting av trailer fra denne modulen. (Se globale trailerinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_txtTimeout">Før inn tiden (i sekunder) du vil bruke for timeout for trailersider. (Hvis siden ikke svarer innen timeoutfristen, så vil den bli hoppet over)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Velg sidene du vil bruke til trailer URL og/eller filer.</string> +</strings> diff --git a/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml new file mode 100644 index 0000000..3ee8a25 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">EMM TV-detaljhentere</string> + <string id="1">Bruk OFDB-sjangere</string> + <string id="2">Bruk OFDB-filmhistorie</string> + <string id="3">Bruk OFDB-beskrivelse</string> + <string id="4">Bruk OFDB-tittel</string> + <string id="5">TMDB-speilserver:</string> + <string id="6">Detaljhenterområder - Detaljhenterspesifikk</string> + <string id="7">Tidsavbrudd:</string> + <string id="8">Støttede sider:</string> + <string id="9">Hent bilder fra:</string> + <string id="10">Søkeresultater</string> + <string id="11">Søker TMDB...</string> + <string id="12">IDen du førte inn er ikke en riktig IMDB-ID.</string> + <string id="13">Du har ført inn en IMDB-ID, men har ikke verifisert om den er riktig.</string> + <string id="14">Fortsette uten verifisering?</string> + <string id="15">Kunne ikke hente filmdetaljer for den innførte IDen. Vennligst sjekk IDen og prøv igjen.</string> + <string id="16">Verifisering feilet</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">Ingen funnet</string> + <string id="21">Se detaljer fra hvert treff for å finne riktig film.</string> + <string id="22">Filmsøkresultater</string> + <string id="23">Manuell IMDB innføring:</string> + <string id="24">Verifiser</string> + <string id="25">Søker TMDB...</string> + <string id="26">Laster ned detaljer...</string> + <string id="27">Laster ned {0}</string> + <string id="28">Ingen fankunst funnet for denne filmen.</string> + <string id="29">Ingen fankunst funnet</string> + <string id="30">Ingen plakater funnet for denne filmen.</string> + <string id="31">Ingen plakater funnet</string> + <string id="32">Henter data fra TheMovieDB.com...</string> + <string id="33">TheMovieDB.com er ikke påslått</string> + <string id="34">Henter data fra IMPAwards.com...</string> + <string id="35">IMPAwards.com er ikke påslått</string> + <string id="36">Henter data fra MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com er ikke påslått</string> + <string id="38">Forbereder bilder...</string> + <string id="39">Velg plakat</string> + <string id="40">Velg fankunst</string> + <string id="41">Huk av alle tommelbilder</string> + <string id="42">Huk av alle Mid</string> + <string id="43">Huk av alle originale</string> + <string id="44">Valgte objekt vil bli satt som fankunst. Alle hukede objekter vil bli lagret i \extrathumbs.</string> + <string id="45">Utfører forberedende oppgaver...</string> + <string id="46">Laster ned valgte bilde...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Liten</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Liten ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Flere</string> + <string id="56">Laster ned valgt trailer...</string> + <string id="57">Kopierer valgt fil til trailer...</string> + <string id="58">Traileren kunne ikke spilles av. Det kan være at URL ikke er gyldig, eller at du ikke har riktig avspiller for denne filtypen.</string> + <string id="59">Kan ikke spille av trailer</string> + <string id="60">Flytt</string> + <string id="61">Kopiér</string> + <string id="62">Flytter valgt fil til trailer...</string> + <string id="63">Sett i nfo</string> + <string id="64">Velg trailer</string> + <string id="65">Velg trailer til å laste ned</string> + <string id="66">Manuell trailerinnføring</string> + <string id="67">Direkte link eller YouTube URL:</string> + <string id="68">Kompilerer trailerliste...</string> + <string id="69">Sniktitt på trailer</string> + <string id="70">Lokal trailer:</string> + <string id="71">Videoformatlenkene kunne ikke hentes</string> + <string id="72">Kunne ikke hente videoformatlenker</string> + <string id="73">Velg format</string> + <string id="74">Henter tilgjengelige formater...</string> + <string id="75">Tilgjengelige formater</string> + <string id="76">En plakat i din valgte størrelse kunne ikke hentes. Vennligst velg en annen.</string> + <string id="77">Ingen foretrukket størrelse</string> + <string id="78">Fankunst i din foretrukkede størrelse kunne ikke bli funnet. Vennligst velg en annen.</string> + <string id="79">Det er ingen kjente episoder for denne serien. Detaljhent serien, sesongen eller episoden og prøv på nytt.</string> + <string id="80">Ingen kjente episoder</string> + <string id="81">Det er ingen plakater for denne episoden.</string> + <string id="82">Gjesteskuespiller</string> + <string id="83">IDen du innførte er ikke en gyldig TVDB ID.</string> + <string id="84">Laster ned serieinfo...</string> + <string id="85">TVsøk-resultater</string> + <string id="86">Se detaljer fra hvert resultat for å finne riktig serie.</string> + <string id="87">Laster ned fankunst i full størrelse...</string> + <string id="88">Laster inn nåværende bilder...</string> + <string id="89">Laster (ned) nye bilder...</string> + <string id="90">Setter standarder...</string> + <string id="91">Serieplakat</string> + <string id="92">Episode-fankunst</string> + <string id="93">Seriefankunst</string> + <string id="94">Alle sesonger-plakat</string> + <string id="95">Sesongplakat</string> + <string id="96">Sesongfankunst</string> + <string id="97">Sesong {0}-plakater</string> + <string id="98">Sesong {0}-fankunst</string> + <string id="99">TV-bilde valg</string> + <string id="100">Nåværende bilde:</string> + <string id="101">Hent plakater</string> + <string id="102">Hent fankunst</string> + <string id="103">Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg.</string> + <string id="104">EMM TMDB film-detaljhentere</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (Tysk)</string> + <string id="108">TMDB Ekstrakunst-størrelse:</string> + <string id="109">Trailere</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC-format</string> + <string id="112">Foretrukket språk</string> + <string id="113">Lagre fankunst i:</string> + <string id="114">Fall tilbake til engelsk</string> + <string id="115">Foretrukket språk:</string> + <string id="116">TIMDB-ID:</string> + <string id="117">Henter data fra IMDB.com...</string> + <string id="118">IMDB.com er ikke påslått</string> + <string id="119">TheMovieDB API mangler eller er ikke gyldig</string> + <string id="120">Henter data fra Fanart.tv...</string> + <string id="121">Fanart.tv er ikke påslått</string> + <string id="122">Hent din API-nøkkel fra www.themoviedb.org</string> + <string id="123">Hent din API-nøkkel fra fanart.tv</string> +</strings> diff --git a/Addons/scraper.IMDB.Poster/My Project/Application.Designer.vb b/Addons/scraper.IMDB.Poster/My Project/Application.Designer.vb new file mode 100644 index 0000000..66fb81a --- /dev/null +++ b/Addons/scraper.IMDB.Poster/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Addons/scraper.IMDB.Poster/My Project/Application.myapp b/Addons/scraper.IMDB.Poster/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Addons/scraper.IMDB.Poster/My Project/Application.myapp @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <MySubMain>false</MySubMain> + <SingleInstance>false</SingleInstance> + <ShutdownMode>0</ShutdownMode> + <EnableVisualStyles>true</EnableVisualStyles> + <AuthenticationMode>0</AuthenticationMode> + <ApplicationType>1</ApplicationType> + <SaveMySettingsOnExit>true</SaveMySettingsOnExit> +</MyApplicationData> diff --git a/Addons/scraper.IMDB.Poster/My Project/AssemblyInfo.vb b/Addons/scraper.IMDB.Poster/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..65f281b --- /dev/null +++ b/Addons/scraper.IMDB.Poster/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.IMDB.Data")> +<Assembly: AssemblyDescription("http://forum.xbmc.org/showthread.php?tid=116941")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.IMDB.Data")> +<Assembly: AssemblyCopyright("Copyright © 2013")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("BBC33869-C704-4202-B725-7107619E3683")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.11")> +<Assembly: AssemblyFileVersion("1.3.0.11")> diff --git a/Addons/scraper.IMDB.Poster/My Project/Resources.Designer.vb b/Addons/scraper.IMDB.Poster/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bb85827 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''<summary> + ''' A strongly-typed resource class, for looking up localized strings, etc. + '''</summary> + <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + '''<summary> + ''' Returns the cached ResourceManager instance used by this class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EmberScraperModule.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + '''<summary> + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Addons/scraper.IMDB.Poster/My Project/Resources.resx b/Addons/scraper.IMDB.Poster/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Addons/scraper.IMDB.Poster/My Project/Resources.resx @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/My Project/Settings.Designer.vb b/Addons/scraper.IMDB.Poster/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f020222 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _ + Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + <Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _ + Friend Module MySettingsProperty + + <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _ + Friend ReadOnly Property Settings() As Global.EmberScraperModule.My.MySettings + Get + Return Global.EmberScraperModule.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Addons/scraper.IMDB.Poster/My Project/Settings.settings b/Addons/scraper.IMDB.Poster/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Addons/scraper.IMDB.Poster/My Project/Settings.settings @@ -0,0 +1,7 @@ +<?xml version='1.0' encoding='utf-8'?> +<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true"> + <Profiles> + <Profile Name="(Default)" /> + </Profiles> + <Settings /> +</SettingsFile> diff --git a/Addons/scraper.IMDB.Poster/Resources/Logo.png b/Addons/scraper.IMDB.Poster/Resources/Logo.png new file mode 100644 index 0000000..a89dae1 Binary files /dev/null and b/Addons/scraper.IMDB.Poster/Resources/Logo.png differ diff --git a/Addons/scraper.IMDB.Poster/Scraper/clsScrapeFANARTTV.vb b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeFANARTTV.vb new file mode 100644 index 0000000..13c1748 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeFANARTTV.vb @@ -0,0 +1,173 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ +' # HD Movie Logos -> logo.png (choose this first) +' # ClearLOGOs -> logo.png (use this as a backup if no HD Logo in the lanaguage specified) +' # ClearART -> clearart.png (use this as a backup if no HD ClearArt, in the language specified) +' # HDClearART -> clearart.png (choose this first) +' # cdART -> disc.png +' # Movie Backgrounds -> Fanart (this is the only fanart.tv artwork that might overlap with 'typical' artwork scraping from IMDB/TMDB) +' # Movie Banner -> Banner (not poster - Frodo supports both now, <moviename>-poster.jpg/png and <moviename>-banner.jpg/png or poster.jpg/png and banner.jpg/png) +' # Movie Thumbs -> landscape.png +' # Special note - the Logos and ClearArts are language-specific and should be tagged with the appropriate language. Will want to have a setting allowing users to specify a language so as not to get a bunch of foreign-language artwork. +' # 1) Logo.png - to be added at a later stage, today is not possible to save +' # 2) Clearart.png - to be added at a later stage, today is not possible to save +' # 3) Disc.png - to be added at a later stage, today is not possible to save +' # 4) Landscape.png - to be added at a later stage, today is not possible to save +' # language is in image properties + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports FanartTVAPI + +Namespace FANARTTVs + + Public Class Scraper + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _FanartTV As FanartTV.V1.FanartTV + Friend WithEvents bwFANARTTV As New System.ComponentModel.BackgroundWorker + Private _APIInvalid As Boolean = False +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _FanartTV = New FanartTV.V1.FanartTV(_MySettings.FANARTTVApiKey) + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest("1", "JSON", "all", 1, 1)) + If IsNothing(Result) Then + If Not IsNothing(_FanartTV.Error) Then + Master.eLog.WriteToErrorLog(_FanartTV.Error, "", "Error") + _APIInvalid = True + End If + End If + End Sub + + Public Sub Cancel() + If Me.bwFANARTTV.IsBusy Then Me.bwFANARTTV.CancelAsync() + + While Me.bwFANARTTV.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwFANARTTV.IsBusy Then + bwFANARTTV.WorkerSupportsCancellation = True + bwFANARTTV.WorkerReportsProgress = True + bwFANARTTV.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetFANARTTVImages(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + If _APIInvalid Then + Return Nothing + End If + Try + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest(imdbID, "JSON", "all", 1, 2)) + If bwFANARTTV.CancellationPending Then Return Nothing + If IsNothing(Result) Then Return alPoster + If IsNothing(Result.movieinfo.moviebackground) Then Return alPoster + For Each image In Result.movieinfo.moviebackground + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = image.url}) + alPoster.Add(New MediaContainers.Image With {.Description = "thumb", .URL = image.url & "/preview"}) + Next + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwFANARTTVA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTV.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetFANARTTVImages(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwFANARTTV_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTV.ProgressChanged + If Not bwFANARTTV.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwFANARTTV_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTV.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMDB.Poster/Scraper/clsScrapeIMDB.vb b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeIMDB.vb new file mode 100644 index 0000000..ec6d1be --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeIMDB.vb @@ -0,0 +1,174 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Diagnostics +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMDBimg + + Public Class Scraper + +#Region "Fields" + + + + Friend WithEvents bwIMDBimg As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If Me.bwIMDBimg.IsBusy Then Me.bwIMDBimg.CancelAsync() + + While Me.bwIMDBimg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMDBimg.IsBusy Then + bwIMDBimg.WorkerSupportsCancellation = True + bwIMDBimg.WorkerReportsProgress = True + bwIMDBimg.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMDBimg.CancellationPending Then Return Nothing + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", imdbID, "")) + sHTTP = Nothing + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(1) + End If + + + ' check existence of a line like this + ' <a href="/media/rm2995297536/tt0089218?ref_=tt_ov_i" > <img height="317" + ' and then return this one + ' src = "http://ia.media-imdb.com/images/M/MV5BMTY1Mzk3MTg0M15BMl5BanBnXkFtZTcwOTQzODYyMQ@@._V1_SY317_CR3,0,214,317_.jpg" + Dim mcIMDB As MatchCollection = Regex.Matches(HTML, String.Concat("/media/[a-zA-Z0-9]{3,12}/tt", imdbID, "\?ref_=tt_ov_i"), RegexOptions.IgnoreCase) + If mcIMDB.Count > 0 Then + debug.print("GetIMDBPoster 1 - {0}", mcIMDB(0).Value) + 'Dim sUrl1 As String = sHTTP.DownloadData(mcIMDB(0).Value) + mcIMDB = Regex.Matches(HTML, "http://ia.media-imdb.com/images/.{3,80}?.jpg") + If mcIMDB.Count > 0 Then + 'just use the first one if more are found + Debug.Print("GetIMDBPoster 2 - {0}", mcIMDB(0).Value) + alPoster.Add(New MediaContainers.Image With {.Description = "cover", .URL = mcIMDB(0).Value}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(2) + End If + + Dim aSP As String() = Regex.Split(mcIMDB(0).Value, "._V\d+?_SY\d+?_CR\d+?,\d+?,\d+?,\d+?_") + Dim sUrl1 = aSP(0) + aSP(1) + Debug.Print("GetIMDBPoster 3 - {0}", sUrl1) + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = sUrl1}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMDBimg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBimg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMDBimg_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBimg.ProgressChanged + If Not bwIMDBimg.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMDBimg_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBimg.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMDB.Poster/Scraper/clsScrapeIMPA.vb b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeIMPA.vb new file mode 100644 index 0000000..cfe43a1 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeIMPA.vb @@ -0,0 +1,189 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMPA + + Public Class Scraper + + #Region "Fields" + + + + Friend WithEvents bwIMPA As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwIMPA.IsBusy Then Me.bwIMPA.CancelAsync() + + While Me.bwIMPA.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMPA.IsBusy Then + bwIMPA.WorkerSupportsCancellation = True + bwIMPA.WorkerReportsProgress = True + bwIMPA.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMPAPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMPA.CancellationPending Then Return Nothing + Dim sURL As String = GetLink(imdbID) + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(1) + End If + + If Not String.IsNullOrEmpty(sURL) Then + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If bwIMPA.CancellationPending Then Return Nothing + + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(2) + End If + + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + + Dim PosterURL As String + + For Each mPoster As Match In mcPoster + If bwIMPA.CancellationPending Then Return Nothing + PosterURL = Strings.Replace(String.Format("{0}/{1}", sURL.Substring(0, sURL.LastIndexOf("/")), mPoster.Value.ToString()).Replace("thumbs", "posters"), "imp_", String.Empty) + + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + + PosterURL = PosterURL.Insert(PosterURL.LastIndexOf("."), "_xlg") + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = PosterURL}) + Next + End If + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMPA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPA.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMPAPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMPA_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPA.ProgressChanged + If Not bwIMPA.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMPA_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPA.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + Private Function GetLink(ByVal IMDBID As String) As String + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) + sHTTP = Nothing + + Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") + If mcIMPA.Count > 0 Then + 'just use the first one if more are found + Return mcIMPA(0).Value.ToString + Else + Return String.Empty + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return String.Empty + End Try + End Function + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + Dim sType As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMDB.Poster/Scraper/clsScrapeImages.vb b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeImages.vb new file mode 100644 index 0000000..d335b62 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeImages.vb @@ -0,0 +1,1209 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Public Class ScrapeImages + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private TMDB As TMDB.Scraper + Private IMPA As New IMPA.Scraper + Private MPDB As New MPDB.Scraper + Private IMDB As New IMDBimg.Scraper + Private FANARTTVs As FANARTTVs.Scraper + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Function GetPreferredImage(ByRef Image As Images, ByVal IMDBID As String, ByVal TMDBID As String, ByVal iType As Enums.ImageType, ByRef imgResult As Containers.ImgResult, ByVal sPath As String, ByVal doETs As Boolean, Optional ByVal doAsk As Boolean = False) As Boolean + '// + ' Try to get the best match between what the user selected in settings and the actual posters downloaded + '\\ + + Dim hasImages As Boolean = False + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim tmpListIMPA As New List(Of MediaContainers.Image) + Dim tmpListIMDB As New List(Of MediaContainers.Image) + Dim tmpListMPDB As New List(Of MediaContainers.Image) + Dim tmpIMDBX As Images = Nothing + Dim tmpIMDBL As Images = Nothing + Dim tmpIMDBM As Images = Nothing + Dim tmpIMDBS As Images = Nothing + Dim tmpIMDBW As Images = Nothing + Dim tmpTMDBX As Images = Nothing + Dim tmpTMDBL As Images = Nothing + Dim tmpTMDBM As Images = Nothing + Dim tmpTMDBS As Images = Nothing + Dim tmpTMDBW As Images = Nothing + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) + + Try + + If iType = Enums.ImageType.Posters Then 'posters + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tImage.URL) + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + tmpListTMDB.AddRange(TMDB.GetTMDBImages(TMDBID, "poster")) + + If _MySettings.UseIMPA Then + tmpListTMDB.AddRange(IMPA.GetIMPAPosters(IMDBID)) + End If + + If _MySettings.UseMPDB Then + tmpListMPDB.AddRange(MPDB.GetMPDBPosters(IMDBID)) + End If + + If _MySettings.UseIMDB Then + tmpListTMDB.AddRange(IMDB.GetIMDBPosters(IMDBID)) + End If + + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) + If Not IsNothing(tmdbThumb.WebImage.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) + End If + Image.Clear() + Next + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + End If + Else + 'download all TMBD images + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "poster") + + 'check each one for it's size to see if it matched the preferred size + If tmpListTMDB.Count > 0 Then + hasImages = True + + If Not Master.eSettings.NoSaveImagesToNfo Then + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + imgResult.Posters.Add(tmdbThumb.URL) + Next + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Xlrg + If iMovie.Description.ToLower = "original" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Lrg + If iMovie.Description.ToLower = "mid" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Mid + If iMovie.Description.ToLower = "cover" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Small + If iMovie.Description.ToLower = "thumb" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + 'no "wide" for TMDB + End Select + Image.Clear() + Next + End If + + If _MySettings.UseIMDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB found... try IMPA + + tmpListIMDB = IMDB.GetIMDBPosters(IMDBID) + + If tmpListIMDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMDBX) Then + tmpIMDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMDBL) Then + tmpIMDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMDBM) Then + tmpIMDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMDBS) Then + tmpIMDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMDBW) Then + tmpIMDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseIMPA Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from IMDB found... try IMPA + + tmpListIMPA = IMPA.GetIMPAPosters(IMDBID) + + If tmpListIMPA.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMPA + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMPAX) Then + tmpIMPAX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMPAL) Then + tmpIMPAL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMPAM) Then + tmpIMPAM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMPAS) Then + tmpIMPAS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMPAW) Then + tmpIMPAW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseMPDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB or IMPA found... try MPDB + + tmpListMPDB = MPDB.GetMPDBPosters(IMDBID) + + If tmpListMPDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListMPDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpMPDBX) Then + tmpMPDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpMPDBL) Then + tmpMPDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpMPDBM) Then + tmpMPDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpMPDBS) Then + tmpMPDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpMPDBW) Then + tmpMPDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If IsNothing(Image.Image) AndAlso Not doAsk Then + 'STILL no image found, just get the first available image, starting with the largest + 'check TMDB first + If tmpListTMDB.Count > 0 Then + Dim x = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If x.Count > 0 Then + Image.FromWeb(x(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "cover" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + End If + + Image.Clear() + + If _MySettings.UseIMDB Then + If tmpListIMDB.Count > 0 Then + If Not IsNothing(tmpIMDBX) Then + Image = tmpIMDBX + GoTo foundIT + End If + If Not IsNothing(tmpIMDBL) Then + Image = tmpIMDBL + GoTo foundIT + End If + If Not IsNothing(tmpIMDBM) Then + Image = tmpIMDBM + GoTo foundIT + End If + If Not IsNothing(tmpIMDBS) Then + Image = tmpIMDBS + GoTo foundIT + End If + If Not IsNothing(tmpIMDBW) Then + Image = tmpIMDBW + GoTo foundIT + End If + End If + End If + + If _MySettings.UseIMPA Then + If tmpListIMPA.Count > 0 Then + If Not IsNothing(tmpIMPAX) Then + Image = tmpIMPAX + GoTo foundIT + End If + If Not IsNothing(tmpIMPAL) Then + Image = tmpIMPAL + GoTo foundIT + End If + If Not IsNothing(tmpIMPAM) Then + Image = tmpIMPAM + GoTo foundIT + End If + If Not IsNothing(tmpIMPAS) Then + Image = tmpIMPAS + GoTo foundIT + End If + If Not IsNothing(tmpIMPAW) Then + Image = tmpIMPAW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + If _MySettings.UseMPDB Then + If tmpListMPDB.Count > 0 Then + If Not IsNothing(tmpMPDBX) Then + Image = tmpMPDBX + GoTo foundIT + End If + If Not IsNothing(tmpMPDBL) Then + Image = tmpMPDBL + GoTo foundIT + End If + If Not IsNothing(tmpMPDBM) Then + Image = tmpMPDBM + GoTo foundIT + End If + If Not IsNothing(tmpMPDBS) Then + Image = tmpMPDBS + GoTo foundIT + End If + If Not IsNothing(tmpMPDBW) Then + Image = tmpMPDBW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + End If + + End If + + Else 'fanart + + Dim ETHashes As New List(Of String) + If Master.eSettings.AutoET AndAlso doETs Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + End If + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + Image.Clear() + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + + End If + End If + End If + + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + End If + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + +foundIT: + tmpListTMDB = Nothing + tmpListIMPA = Nothing + tmpListMPDB = Nothing + Return hasImages + End Function + + Public Sub GetPreferredFAasET(ByVal IMDBID As String, ByVal sPath As String) + Dim _Image As Image + + If AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim ETHashes As New List(Of String) + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, "fanart") + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + For Each sFile As FileInfo In lFi + Select Case True + Case sFile.Name.Contains("(original)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Master.eSettings.AutoET Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + End If + Next + End If + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + 'Me.Clear() + Next + + _Image = Nothing + FileUtils.Delete.DeleteDirectory(CachePath) + + End If + End If + End If + End Sub + + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ + AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ + (AdvancedSettings.GetBooleanSetting("tUseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + Public Shared Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + End If + + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) + End Sub + + + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0) + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub + Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo + Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() + + For i As Integer = 0 To UBound(Encoders) + If Encoders(i).FormatID = Format.Guid Then + Return Encoders(i) + End If + Next + + Return Nothing + End Function +#End Region 'Methods + + + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Scraper/clsScrapeMPDB.vb b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeMPDB.vb new file mode 100644 index 0000000..cd949ec --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeMPDB.vb @@ -0,0 +1,167 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Namespace MPDB + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwMPDB As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwMPDB.IsBusy Then Me.bwMPDB.CancelAsync() + + While Me.bwMPDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String) + Try + If Not Me.bwMPDB.IsBusy Then + Me.bwMPDB.WorkerSupportsCancellation = True + Me.bwMPDB.WorkerReportsProgress = True + Me.bwMPDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetMPDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + + If Me.bwMPDB.CancellationPending Then Return Nothing + + Try + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.movieposterdb.com/movie/", imdbID)) + sHTTP = Nothing + + If Me.bwMPDB.CancellationPending Then Return Nothing + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(1) + End If + + If Regex.IsMatch(HTML, String.Concat("http://www.imdb.com/title/tt", imdbID), RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline) Then + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "http://www.movieposterdb.com/posters/[0-9_](.*?)/[0-9](.*?)/[0-9](.*?)/[a-z0-9_](.*?).jpg") + + Dim PosterURL As String = String.Empty + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(2) + End If + + For Each mPoster As Match In mcPoster + If Me.bwMPDB.CancellationPending Then Return Nothing + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "l") + alPosters.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "t") + alPosters.Add(New MediaContainers.Image With {.Description = "thumb", .URL = PosterURL}) + Next + End If + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Private Sub bwMPDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetMPDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwMPDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDB.ProgressChanged + If Not bwMPDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwMPDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMDB.Poster/Scraper/clsScrapeOFDB.vb b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeOFDB.vb new file mode 100644 index 0000000..2e94cca --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeOFDB.vb @@ -0,0 +1,242 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class OFDB + + #Region "Fields" + + Private imdbID As String + Private OFDBMovie As MediaContainers.Movie + Private _genre As String + Private _outline As String + Private _plot As String + Private _title As String + + #End Region 'Fields + + #Region "Constructors" + + Public Sub New(ByVal sID As String, ByRef mMovie As MediaContainers.Movie) + Clear() + imdbID = sID + OFDBMovie = mMovie + + GetOFDBDetails() + End Sub + + #End Region 'Constructors + + #Region "Properties" + + Public Property Genre() As String + Get + Return _genre + End Get + Set(ByVal value As String) + _genre = value + End Set + End Property + + Public Property Outline() As String + Get + Return _outline + End Get + Set(ByVal value As String) + _outline = value + End Set + End Property + + Public Property Plot() As String + Get + Return _plot + End Get + Set(ByVal value As String) + _plot = value + End Set + End Property + + Public Property Title() As String + Get + Return _title + End Get + Set(ByVal value As String) + _title = value + End Set + End Property + + #End Region 'Properties + + #Region "Methods" + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Sub Clear() + _title = String.Empty + _outline = String.Empty + _plot = String.Empty + _genre = String.Empty + End Sub + + Private Function GetFullPlot(ByVal sURL As String) As String + Dim FullPlot As String = String.Empty + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + Dim D, W, B As Integer + Dim tmpHTML As String + + D = Html.IndexOf("Eine Inhaltsangabe von") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim + W = tmpHTML.IndexOf("</b></b><br><br>") + If W > 0 Then + B = tmpHTML.IndexOf("</font></p>", W + 16) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return FullPlot + End Function + + Private Sub GetOFDBDetails() + Dim sURL As String = GetOFDBUrlFromIMDBID() + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(Html) Then + 'title + If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(Html, "<td width=""99\%""><h2><font face=""Arial,Helvetica,sans-serif"" size=""3""><b>([^<]+)</b></font></h2></td>").Groups(1).Value.ToString)) + _title = OFDBTitle + End If + + Dim D, W, B As Integer + Dim tmpHTML As String + + 'outline + If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then + D = Html.IndexOf("<b>Inhalt:</b>") + + If D > 0 Then + W = Html.IndexOf("<a href=""", D + 14) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(D + 14, W - (D + 14)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + + 'full plot + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then + D = Html.IndexOf("<b>Inhalt:</b>") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 14, L - (D + 14)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + End If + End If + + 'genre + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Genre) OrElse Not Master.eSettings.LockGenre Then + D = HTML.IndexOf("class=""Normal"">Genre(s):</font></td>") + If D > 0 Then + W = HTML.IndexOf("</table>", D) + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), "<a.*?href=[""'](?<url>.*?)[""'].*?>(?<name>.*?)</a>") + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetOFDBUrlFromIMDBID() As String + Dim ofdbURL As String = String.Empty + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.ofdb.de/view.php?SText=", imdbID, "&Kat=IMDb&page=suchergebnis&sourceid=mozilla-search")) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(HTML) Then + Dim mcOFDBURL As MatchCollection = Regex.Matches(HTML, "<a href=""film/([^<]+)"" onmouseover") + If mcOFDBURL.Count > 0 Then + 'just use the first one if more are found + ofdbURL = String.Concat("http://www.ofdb.de/", Regex.Match(mcOFDBURL(0).Value.ToString, """(film/([^<]+))""").Groups(1).Value.ToString) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return ofdbURL + End Function + + #End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Scraper/clsScrapeTMDB.vb b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeTMDB.vb new file mode 100644 index 0000000..9db6818 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeTMDB.vb @@ -0,0 +1,282 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDB + + Public Class Scraper + +#Region "Fields" + + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Private backdrop_names(3) As v3Size + Private poster_names(5) As v3Size + + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + ' v3 does not have description anymore + poster_names(0).description = "thumb" + poster_names(0).size = "w92" + poster_names(0).width = 92 + poster_names(1).description = "w154" + poster_names(1).size = "w154" + poster_names(1).width = 154 + poster_names(2).description = "cover" + poster_names(2).size = "w185" + poster_names(2).width = 185 + poster_names(3).description = "w342" + poster_names(3).size = "w342" + poster_names(3).width = 342 + poster_names(4).description = "mid" + poster_names(4).size = "w500" + poster_names(4).width = 500 + poster_names(5).description = "original" + poster_names(5).size = "original" + poster_names(5).width = 0 + backdrop_names(0).description = "thumb" + backdrop_names(0).size = "w300" + backdrop_names(0).width = 300 + backdrop_names(1).description = "poster" + backdrop_names(1).size = "w780" + backdrop_names(1).width = 780 + backdrop_names(2).description = "w1280" + backdrop_names(2).size = "w1280" + backdrop_names(2).width = 1280 + backdrop_names(3).description = "original" + backdrop_names(3).size = "original" + backdrop_names(3).width = 0 + End Sub + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim images As V3.TmdbMovieImages + Dim aW, aH As Integer + + If bwTMDB.CancellationPending Then Return Nothing + Try + images = _TMDBApi.GetMovieImages(CInt(imdbID), _MySettings.TMDBLanguage) + If sType = "poster" Then + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + Return alPosters + End If + End If + Else + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + Return alPosters + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If sType = "poster" Then + For Each tmdbI As V3.Poster In images.posters + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In poster_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + ElseIf sType = "backdrop" Then + For Each tmdbI As V3.Backdrop In images.backdrops + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In backdrop_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As List(Of String) + Dim trailers As V3.TmdbMovieTrailers + Dim YT As New List(Of String) + + Try + If bwTMDB.CancellationPending Then Return Nothing + trailers = _TMDBApi.GetMovieTrailers(CInt(imdbID), _MySettings.TMDBLanguage) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + trailers = _TMDBApiE.GetMovieTrailers(CInt(imdbID)) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + Return Nothing + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + 'If bwTMDB.WorkerReportsProgress Then + ' bwTMDB.ReportProgress(2) + 'End If + + If trailers.youtube.Count > 0 Then + For Each trailer In trailers.youtube + YT.Add(String.Format("http://www.youtube.com/watch?v={0}{1})", trailer.source, CStr(IIf(trailer.size = "HD", "&hd=1", "")))) + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return YT + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure v3Size + +#Region "Fields" + + Dim size As String + Dim description As String + Dim width As Integer + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Scraper/clsScrapeTMDB_old.vb b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeTMDB_old.vb new file mode 100644 index 0000000..c5bca0a --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeTMDB_old.vb @@ -0,0 +1,244 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI + +Namespace TMDB_old + + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + + Private Const APIKey As String = "b1ecff8c76278262b27de1569f57f6bd" + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB...<OpenSearchDescription>...<movies>.Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<poster>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<backdrop>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + sHTTP = Nothing + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As String + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + Dim tLang As String + + tLang = AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en") + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/{0}/tt{1}", APIKey, imdbID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + Dim tmdbNode = From xNode In xmlTMDB.Elements + + If tmdbNode.Count > 0 Then + If Not tmdbNode(0).Value = "Your query didn't return any results." Then + Dim movieID As String = xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<id>.Value + Dim i As Integer + + + For i = 0 To 1 Step 1 + sHTTP = New HTTP + ApiXML = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/{0}/xml/{1}/{2}", tLang, APIKey, movieID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + Dim Trailers = From tNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie> Select tNode.<trailer> + If Trailers.Count > 0 AndAlso Not String.IsNullOrEmpty(Trailers(0).Value) Then + If Trailers(0).Value.ToLower.IndexOf("youtube.com") > 0 Then + Return Trailers(0).Value + i += 1 + End If + Else + tLang = "en" + End If + End If + Next + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return String.Empty + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Scraper/clsScrapeTMDBg.vb b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeTMDBg.vb new file mode 100644 index 0000000..86f6083 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeTMDBg.vb @@ -0,0 +1,723 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Globalization +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDBg + + Public Class MovieSearchResults + +#Region "Fields" + + Private _Matches As New List(Of MediaContainers.Movie) + +#End Region 'Fields + +#Region "Properties" + + Public Property Matches() As List(Of MediaContainers.Movie) + Get + Return _Matches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _Matches = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class Scraper + +#Region "Fields" + + 'Public IMDBURL As String + 'Private _TMDBId As String + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Friend WithEvents bwTMDBg As New System.ComponentModel.BackgroundWorker + + Private _sPoster As String + +#End Region 'Fields + +#Region "Properties" + Public ReadOnly Property TMDBConf() As V3.TmdbConfiguration + Get + Return _TMDBConf + End Get + End Property +#End Region + +#Region "Enumerations" + + Private Enum SearchType + Movies = 0 + Details = 1 + SearchDetails = 2 + End Enum + +#End Region 'Enumerations + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + + Public Event SearchResultsDownloaded(ByVal mResults As TMDBg.MovieSearchResults) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + End Sub + + Public Sub CancelAsync() + If bwTMDBg.IsBusy Then bwTMDBg.CancelAsync() + + While bwTMDBg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetMovieID(ByRef DBMovie As Structures.DBMovie) + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + + If bwTMDBg.CancellationPending Then Return + + Movie = _TMDBApi.GetMovieByIMDB(DBMovie.Movie.ID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(DBMovie.Movie.ID) + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return + End If + + DBMovie.Movie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End Sub + + Public Function GetMovieInfo(ByVal strID As String, ByRef IMDBMovie As MediaContainers.Movie, ByVal FullCrew As Boolean, ByVal FullCast As Boolean, ByVal GetPoster As Boolean, ByVal Options As Structures.ScrapeOptions, ByVal IsSearch As Boolean) As Boolean + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + Dim tStr As String + + If bwTMDBg.CancellationPending Then Return Nothing + + If Strings.Left(strID.ToLower(), 2) = "tt" Then + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(strID) + Else + Movie = _TMDBApi.GetMovieInfo(CInt(strID), _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieInfo(CInt(strID)) + End If + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return False + End If + + IMDBMovie.ID = CStr(IIf(String.IsNullOrEmpty(Movie.imdb_id) AndAlso _MySettings.FallBackEng, MovieE.imdb_id, Movie.imdb_id)) + IMDBMovie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + If bwTMDBg.CancellationPending Or IsNothing(Movie) Then Return Nothing + + Dim Keywords As WatTmdb.V3.TmdbMovieKeywords + Keywords = _TMDBApi.GetMovieKeywords(Movie.id) + If Not IsNothing(Keywords) AndAlso Not IsNothing(Keywords.keywords) Then + If Keywords.keywords.Count <> 0 AndAlso _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + End If + + ' to be added the tags structure + '' <movie> + '' ... + '' <tag>Name of the tag</tag> + '' ... + '' </movie> + If Options.bTitle Then + IMDBMovie.OriginalTitle = CStr(IIf(String.IsNullOrEmpty(Movie.original_title) AndAlso _MySettings.FallBackEng, MovieE.original_title, Movie.original_title)) + If String.IsNullOrEmpty(IMDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + IMDBMovie.Title = CStr(IIf(String.IsNullOrEmpty(Movie.title) AndAlso _MySettings.FallBackEng, MovieE.title, Movie.title)) + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If GetPoster Then + ' I will add original always. to be updated if size, TMDBConf.images.poster_sizes(0) & + Dim Images As WatTmdb.V3.TmdbMovieImages + Images = _TMDBApi.GetMovieImages(Movie.id, _MySettings.TMDBLanguage) + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If (Images.posters.Count = 0) AndAlso _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + End If + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If Images.posters.Count > 0 Then + _sPoster = _TMDBConf.images.base_url & "w92" & Images.posters(0).file_path + Else + _sPoster = "" + End If + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bYear Then IMDBMovie.Year = Left(CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)), 4) + + Dim Releases As WatTmdb.V3.TmdbMovieReleases = Nothing + If Options.bMPAA Then + IMDBMovie.MPAA = "" + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each Country In Releases.countries + If Country.iso_3166_1.ToUpper = CStr(IIf(Master.eSettings.CertificationLang = "", "US", Master.eSettings.CertificationLang)) Then + IMDBMovie.MPAA = Country.certification + Exit For + End If + Next + End If + IMDBMovie.Certification = IMDBMovie.MPAA + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bRelease Then + IMDBMovie.ReleaseDate = CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)) + End If + + If Options.bRating AndAlso (String.IsNullOrEmpty(IMDBMovie.Rating) OrElse Not Master.eSettings.LockRating) Then + IMDBMovie.Rating = CStr(IIf(IsNothing(Movie.vote_average) AndAlso Movie.vote_average = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_average, Movie.vote_average)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'trailer + If Options.bTrailer AndAlso (String.IsNullOrEmpty(IMDBMovie.Trailer) OrElse Not Master.eSettings.LockTrailer) Then + Dim Trailers As WatTmdb.V3.TmdbMovieTrailers + Trailers = _TMDBApi.GetMovieTrailers(Movie.id) + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If (Trailers.youtube.Count = 0) AndAlso _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + End If + + IMDBMovie.Trailer = "" + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If Trailers.youtube.Count > 0 Then + IMDBMovie.Trailer = "http://www.youtube.com/watch?hd=1&v=" & Trailers.youtube(0).source + End If + End If + + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bVotes Then + IMDBMovie.Votes = CStr(IIf(IsNothing(Movie.vote_count) AndAlso Movie.vote_count = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_count.ToString(), Movie.vote_count.ToString())) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Dim aCast As WatTmdb.V3.TmdbMovieCast = Nothing + If Options.bCast Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.cast.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + + Dim Cast As New List(Of MediaContainers.Person) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + For Each aAc As WatTmdb.V3.Cast In aCast.cast + Dim aPer As New MediaContainers.Person + aPer.Name = aAc.name + aPer.Role = aAc.character + ' to be added / dialog to choose the size of the images + aPer.Thumb = _TMDBConf.images.base_url & "original" & aAc.profile_path + Cast.Add(aPer) + Next + End If + IMDBMovie.Actors = Cast + End If + + If Options.bTagline AndAlso (String.IsNullOrEmpty(IMDBMovie.Tagline) OrElse Not Master.eSettings.LockTagline) Then + IMDBMovie.Tagline = CStr(IIf(String.IsNullOrEmpty(IMDBMovie.Tagline) AndAlso _MySettings.FallBackEng, MovieE.tagline, Movie.tagline)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get countries of the movie + If Options.bCountry Then + If IsNothing(Releases) Then + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + End If + IMDBMovie.Countries.Clear() + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each aCo As WatTmdb.V3.ReleaseCountry In Releases.countries + IMDBMovie.Countries.Add(aCo.iso_3166_1) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get genres of the movie + If Options.bGenre AndAlso (String.IsNullOrEmpty(IMDBMovie.Genre) OrElse Not Master.eSettings.LockGenre) Then + IMDBMovie.Genres.Clear() + Dim tGen As System.Collections.Generic.List(Of WatTmdb.V3.MovieGenre) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tGen = CType(IIf(Movie.genres.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.genres, Movie.genres), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + Else + tGen = CType(IIf(_MySettings.FallBackEng, MovieE.genres, Nothing), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + End If + + + If Not IsNothing(tGen) Then + For Each aGen As WatTmdb.V3.MovieGenre In tGen + IMDBMovie.Genres.Add(aGen.name) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bOutline AndAlso (String.IsNullOrEmpty(IMDBMovie.Outline) OrElse Not Master.eSettings.LockOutline) Then + IMDBMovie.Outline = CStr(IIf(String.IsNullOrEmpty(Movie.overview) AndAlso _MySettings.FallBackEng, MovieE.overview, Movie.overview)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bPlot AndAlso (String.IsNullOrEmpty(IMDBMovie.Plot) OrElse Not Master.eSettings.LockPlot) Then + If Master.eSettings.OutlineForPlot AndAlso String.IsNullOrEmpty(IMDBMovie.Plot) AndAlso Not String.IsNullOrEmpty(IMDBMovie.Outline) Then + IMDBMovie.Plot = IMDBMovie.Outline + Else + IMDBMovie.Plot = "" + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get the movie duration + If Options.bRuntime Then + IMDBMovie.Runtime = CStr(IIf(IsNothing(Movie.runtime) AndAlso Movie.runtime = 0 AndAlso _MySettings.FallBackEng, MovieE.runtime.ToString(), Movie.runtime.ToString())) + End If + + 'Get Production Studio + If Options.bStudio AndAlso (String.IsNullOrEmpty(IMDBMovie.Studio) OrElse Not Master.eSettings.LockStudio) Then + tStr = "" + Dim tPC As System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tPC = CType(IIf(Movie.production_companies.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.production_companies, Movie.production_companies), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + Else + tPC = CType(IIf(_MySettings.FallBackEng, MovieE.production_companies, Nothing), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + End If + + If Not IsNothing(tPC) Then + For Each aPro As WatTmdb.V3.ProductionCompany In tPC + tStr = tStr & " / " & aPro.name + Next + End If + If Len(tStr) > 3 Then + tStr = Trim(Right(tStr, Len(tStr) - 3)) + End If + IMDBMovie.Studio = tStr + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get All Other Info + If FullCrew Or Options.bWriters Or Options.bDirector Then + If IsNothing(aCast) Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.crew.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + End If + IMDBMovie.Credits.Clear() + IMDBMovie.Directors.Clear() + If Not IsNothing(aCast.crew) Then + For Each aAc As WatTmdb.V3.Crew In aCast.crew + If FullCrew Then + IMDBMovie.Credits.Add(aAc.name) + ElseIf Options.bWriters Then + If aAc.department = "Writing" AndAlso aAc.job = "Writer" Then + IMDBMovie.Credits.Add(aAc.name) + End If + End If + If Options.bDirector Then + If aAc.job = "Director" Then + IMDBMovie.Directors.Add(aAc.name) + End If + End If + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Return True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Function GetMovieStudios(ByVal strID As String) As List(Of String) + Dim alStudio As New List(Of String) + Dim Movie As WatTmdb.V3.TmdbMovie + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + If Movie.production_companies.Count = 0 And _MySettings.FallBackEng Then + Movie = _TMDBApi.GetMovieByIMDB(strID, "en") + End If + For Each aComp In Movie.production_companies + alStudio.Add(aComp.name) + Next + + Return alStudio + + End Function + + Public Function GetSearchMovieInfo(ByVal sMovieName As String, ByRef dbMovie As Structures.DBMovie, ByVal iType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As MediaContainers.Movie + Dim r As MovieSearchResults = SearchMovie(sMovieName) + Dim b As Boolean = False + Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie + + Try + Select Case iType + Case Enums.ScrapeType.FullAsk, Enums.ScrapeType.UpdateAsk, Enums.ScrapeType.NewAsk, Enums.ScrapeType.MarkAsk, Enums.ScrapeType.FilterAsk + + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + Master.tmpMovie.Clear() + Using dIMDB As New dlgTMDBSearchResults(_MySettings, Me) + + If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + b = False + Else + b = GetMovieInfo(Master.tmpMovie.ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + Else + b = False + End If + End Using + End If + Case Enums.ScrapeType.FullAuto, Enums.ScrapeType.UpdateAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.SingleScrape, Enums.ScrapeType.FilterAuto + Dim exactHaveYear As Integer = FindYear(dbMovie.Filename, r.Matches) + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + b = GetMovieInfo(r.Matches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + End Select + + If b Then + Return imdbMovie + Else + Return New MediaContainers.Movie + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New MediaContainers.Movie + End Try + End Function + + Private Function FindYear(ByVal tmpname As String, ByVal lst As List(Of MediaContainers.Movie)) As Integer + Dim tmpyear As String = "" + Dim i As Integer + Dim ret As Integer = -1 + tmpname = Path.GetFileNameWithoutExtension(tmpname) + tmpname = tmpname.Replace(".", " ").Trim.Replace("(", " ").Replace(")", "").Trim + i = tmpname.LastIndexOf(" ") + If i >= 0 Then + tmpyear = tmpname.Substring(i + 1, tmpname.Length - i - 1) + If IsNumeric(tmpyear) AndAlso Convert.ToInt32(tmpyear) > 1950 Then 'let's assume there are no movies older then 1950 + For c = 0 To lst.Count - 1 + If lst(c).Year = tmpyear Then + ret = c + Exit For + End If + Next + End If + End If + Return ret + End Function + + Public Sub GetSearchMovieInfoAsync(ByVal imdbID As String, ByVal IMDBMovie As MediaContainers.Movie, ByVal Options As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.SearchDetails, _ + .Parameter = imdbID, .IMDBMovie = IMDBMovie, .Options = Options}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + + Public Sub SearchMovieAsync(ByVal sMovie As String, ByVal filterOptions As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.Movies, _ + .Parameter = sMovie, .Options = filterOptions}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + Select Case Args.Search + Case SearchType.Movies + Dim r As MovieSearchResults = SearchMovie(Args.Parameter) + e.Result = New Results With {.ResultType = SearchType.Movies, .Result = r} + Case SearchType.SearchDetails + Dim s As Boolean = GetMovieInfo(Args.Parameter, Args.IMDBMovie, False, False, True, Args.Options, True) + e.Result = New Results With {.ResultType = SearchType.SearchDetails, .Success = s} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub BW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBg.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.ResultType + Case SearchType.Movies + RaiseEvent SearchResultsDownloaded(DirectCast(Res.Result, MovieSearchResults)) + Case SearchType.SearchDetails + Dim movieInfo As MovieSearchResults = DirectCast(Res.Result, MovieSearchResults) + RaiseEvent SearchMovieInfoDownloaded(_sPoster, Res.Success) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + 'Private Function GetForcedTitle(ByVal strID As String, ByVal oTitle As String) As String + ' Dim fTitle As String = oTitle + ' Dim Movie As WatTmdb.V3.TmdbMovie + + ' Try + ' '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + ' If Left(strID.ToLower(), 4) = "tt" Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), _MySettings.TMDBLanguage) + ' If IsNothing(Movie) And _MySettings.FallBackEng Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), "en") + ' End If + ' Else + ' Movie = _TMDBApi.GetMovieByIMDB(strID) + ' End If + + ' fTitle = Movie.title + + ' Return fTitle + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' Return fTitle + ' End Try + 'End Function + + Private Function SearchMovie(ByVal sMovie As String) As MovieSearchResults + Try + Dim R As New MovieSearchResults + Dim Page As Integer = 1 + Dim Movies As WatTmdb.V3.TmdbMovieSearch + Dim TotP As Integer + Dim aE As Boolean + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + If Movies.total_results = 0 And _MySettings.FallBackEng Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + aE = True + End If + If Movies.total_results > 0 Then + Dim t1 As String + Dim t2 As String + Dim t3 As String + TotP = Movies.total_pages + While Page <= TotP And Page <= 3 + For Each aMovie In Movies.results + Dim aMI As WatTmdb.V3.TmdbMovie + aMI = _TMDBApi.GetMovieInfo(aMovie.id) + If IsNothing(aMI) Then + aMI = _TMDBApiE.GetMovieInfo(aMovie.id) + End If + If IsNothing(aMI.imdb_id) Then + t1 = "" + Else + t1 = aMI.imdb_id.ToString + End If + t2 = CStr(IIf(String.IsNullOrEmpty(aMovie.title), "", aMovie.title)) + t3 = Left(CStr(IIf(String.IsNullOrEmpty(aMovie.release_date), "", aMovie.release_date)), 4) + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(t1, t2, t3, 0) + lNewMovie.TMDBID = aMI.id.ToString + R.Matches.Add(lNewMovie) + Next + Page = Page + 1 + If aE Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + Else + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + End If + + End While + End If + + Return R + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Nothing + End Try + End Function + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim FullCast As Boolean + Dim FullCrew As Boolean + Dim IMDBMovie As MediaContainers.Movie + Dim Options As Structures.ScrapeOptions + Dim Parameter As String + Dim Search As SearchType + 'Dim TMDBConf As V3.TmdbConfiguration + 'Dim TMDBApi As V3.Tmdb + 'Dim FallBackEng As Boolean + 'Dim TMDBLang As String +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultType As SearchType + Dim Success As Boolean + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMDB.Poster/Scraper/clsScrapeTrailers.vb b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeTrailers.vb new file mode 100644 index 0000000..72ce5f8 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeTrailers.vb @@ -0,0 +1,265 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System +Imports System.IO +Imports System.Net +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI +Imports WatTmdb + +Public Class Trailers + +#Region "Fields" + + Private WebPage As New HTTP + Private _ImdbID As String = String.Empty + Private _ImdbTrailerPage As String = String.Empty + Private _TrailerList As New List(Of String) + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + Me.Clear() + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + AddHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + Me.WebPage.Cancel() + End Sub + + Public Sub Clear() + Me._TrailerList.Clear() + Me._ImdbID = String.Empty + Me._ImdbTrailerPage = String.Empty + End Sub + + Public Sub DeleteTrailers(ByVal sPath As String, ByVal NewTrailer As String) + Dim parPath As String = Directory.GetParent(sPath).FullName + Dim tmpName As String = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(sPath))) + Dim tmpNameNoStack As String = Path.Combine(parPath, Path.GetFileNameWithoutExtension(sPath)) + For Each t As String In Master.eSettings.ValidExts + If File.Exists(String.Concat(tmpName, "-trailer", t)) AndAlso Not String.Concat(tmpName, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpName, "[trailer]", t)) AndAlso Not String.Concat(tmpName, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "[trailer]", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "-trailer", t)) AndAlso Not String.Concat(tmpNameNoStack, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) + End If + Next + End Sub + + Public Sub DownloadProgressUpdated(ByVal iPercent As Integer) + RaiseEvent ProgressUpdated(iPercent) + End Sub + + Public Function DownloadSingleTrailer(ByVal sPath As String, ByVal ImdbID As String, ByVal isSingle As Boolean, ByVal currNfoTrailer As String) As String + Dim tURL As String = String.Empty + Try + Me._TrailerList.Clear() + + If Not Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, True) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + + Dim tLink As String = String.Empty + If Regex.IsMatch(Me._TrailerList.Item(0).ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Dim YT As New YouTube.Scraper + YT.GetVideoLinks(Me._TrailerList.Item(0).ToString) + If YT.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + tLink = YT.VideoLinks(Master.eSettings.PreferredTrailerQuality).URL + Else + Select Case Master.eSettings.PreferredTrailerQuality + Case Enums.TrailerQuality.HD1080p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720p) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720p).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD1080pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720pVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720pVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HD720p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD720pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HQFLV + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HQVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.SQMP4 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.SQFLV + tLink = String.Empty + Case Enums.TrailerQuality.SQVP8 + tLink = String.Empty + End Select + End If + Else + tLink = Me._TrailerList.Item(0).ToString + End If + + If Not String.IsNullOrEmpty(tLink) Then + tURL = WebPage.DownloadFile(tLink, sPath, False, "trailer") + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + End If + ElseIf Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, False) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + tURL = Me._TrailerList.Item(0).ToString + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return tURL + End Function + + Public Function DownloadTrailer(ByVal sPath As String, ByVal sURL As String) As String + Dim tURL As String = String.Empty + If Not String.IsNullOrEmpty(sURL) Then + tURL = WebPage.DownloadFile(sURL, sPath, True, "trailer") + + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + Return tURL + End Function + + Public Function GetTrailers(ByVal ImdbID As String, Optional ByVal BreakAfterFound As Boolean = True) As List(Of String) + Me._ImdbID = ImdbID + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", False) Then + Me.GetTMDBTrailer() + End If + + Return Me._TrailerList + End Function + + Public Function IsAllowedToDownload(ByVal sPath As String, ByVal isDL As Boolean, ByVal currNfoTrailer As String, Optional ByVal isSS As Boolean = False) As Boolean + Dim fScanner As New Scanner + + If isDL Then + If String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) OrElse Master.eSettings.OverwriteTrailer Then + Return True + Else + If isSS AndAlso String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) Then + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + Else + Return False + End If + End If + Else + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + End If + End Function + + Private Sub GetTMDBTrailer() + Dim TMDB As New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim YT As List(Of String) + + YT = TMDB.GetTrailers(_ImdbID) + + If Not YT.Count = 0 Then + For Each ast In YT + Me._TrailerList.Add(ast) + Next + End If + + TMDB = Nothing + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Scraper/clsScrapeYouTube.vb b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeYouTube.vb new file mode 100644 index 0000000..51ed7c4 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/clsScrapeYouTube.vb @@ -0,0 +1,336 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace YouTube + + Public Class Scraper + +#Region "Fields" + + Friend WithEvents bwYT As New System.ComponentModel.BackgroundWorker + + Private _VideoLinks As VideoLinkItemCollection + +#End Region 'Fields + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event VideoLinksRetrieved(ByVal bSuccess As Boolean) + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property VideoLinks() As VideoLinkItemCollection + Get + If _VideoLinks Is Nothing Then + _VideoLinks = New VideoLinkItemCollection + End If + Return _VideoLinks + End Get + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() + If bwYT.IsBusy Then bwYT.CancelAsync() + + While bwYT.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetVideoLinks(ByVal url As String) + Try + _VideoLinks = ParseYTFormats(url, False) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub GetVideoLinksAsync(ByVal url As String) + Try + If Not bwYT.IsBusy Then + _VideoLinks = Nothing + bwYT.WorkerSupportsCancellation = True + bwYT.RunWorkerAsync(url) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwYT.DoWork + Dim Url As String = DirectCast(e.Argument, String) + + Try + e.Result = ParseYTFormats(Url, True) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwYT.RunWorkerCompleted + Try + If e.Cancelled Then + 'user cancelled + RaiseEvent VideoLinksRetrieved(False) + ElseIf e.Error IsNot Nothing Then + 'exception occurred + RaiseEvent Exception(e.Error) + Else + 'all good + If e.Result IsNot Nothing Then + _VideoLinks = DirectCast(e.Result, VideoLinkItemCollection) + RaiseEvent VideoLinksRetrieved(True) + Else + RaiseEvent VideoLinksRetrieved(False) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetVideoTitle(ByVal HTML As String) As String + Dim result As String = "" + 'Dim KeyPattern As String = "'VIDEO_TITLE':\s*'([^']*?)'" + Dim KeyPattern As String = "meta name=\""title\"" content=\s*\""([^']*?)\""" + 'meta name="title" content= + If Regex.IsMatch(HTML, KeyPattern) Then + result = Regex.Match(HTML, KeyPattern).Groups(1).Value + End If + + Return result + End Function + + Private Function ParseYTFormats(ByVal url As String, ByVal doProgress As Boolean) As VideoLinkItemCollection + Dim DownloadLinks As New VideoLinkItemCollection + Dim sHTTP As New HTTP + + Try + If bwYT.CancellationPending Then Return DownloadLinks + + Dim Html As String = sHTTP.DownloadData(url) + If Html.ToLower.Contains("page not found") Then + Html = String.Empty + End If + + If String.IsNullOrEmpty(Html.Trim) Then Return DownloadLinks + If bwYT.CancellationPending Then Return DownloadLinks + + Dim VideoTitle As String = GetVideoTitle(Html) + VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") + + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) + If fmtMatch.Success Then + Dim FormatMap As String = fmtMatch.Groups(1).Value + Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") + + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) + Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) + + For i As Integer = 0 To FormatArray.Length - 1 + Dim yturl As String = rurl.Match(FormatArray(i)).Groups(1).Value + Dim ytitag As String = ritag.Match(FormatArray(i)).Groups(1).Value + Dim ytsig As String = rsig.Match(FormatArray(i)).Groups(1).Value + + 'Console.WriteLine("Trailer Itag: {0}", ytitag) + 'Console.WriteLine("Trailer Url: {0}", yturl) + 'Console.WriteLine("Trailer Sig: {0}", ytsig) + + Dim Link As New VideoLinkItem + Select Case ytitag + ' ********************************************************************** + ' see all itags http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs + ' ********************************************************************** + Case "5" + Link.Description = "240p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "6" + Link.Description = "270p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "13" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "17" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "18" + Link.Description = "360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQMP4 + Case "22" + Link.Description = "720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD720p + Case "34" + Link.Description = "360p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQFLV + Case "35" + Link.Description = "480p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HQFLV + Case "36" + Link.Description = "240p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "37" + Link.Description = "1080p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD1080p + Case "38" + Link.Description = "1536p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "43" + Link.Description = "360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.SQVP8 + Case "44" + Link.Description = "480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HQVP8 + Case "45" + Link.Description = "720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD720pVP8 + Case "46" + Link.Description = "1080p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD1080pVP8 + Case "82" + Link.Description = "3D 360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "83" + Link.Description = "3D 480p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "84" + Link.Description = "3D 720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "85" + Link.Description = "3D 520p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "100" + Link.Description = "3D 360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "101" + Link.Description = "3D 480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "102" + Link.Description = "3D 720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "120" + Link.Description = "720p LiveStream (FLV, AVC)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case Else + Link.Description = "Other" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + 'Continue For + End Select + + Link.URL = Web.HttpUtility.UrlDecode(Web.HttpUtility.UrlDecode(yturl)) & "&signature=" & ytsig & "&title=" & Web.HttpUtility.UrlEncode(VideoTitle) + Link.URL = Link.URL.Replace("sig=", "signature=") ' sig= returns HTTP 403 //oldstyle, keep it + 'Console.WriteLine("Trailer Url decoded: {0}", Link.URL) + + If bwYT.CancellationPending Then Return DownloadLinks + + If Not String.IsNullOrEmpty(Link.URL) AndAlso sHTTP.IsValidURL(Link.URL) Then + DownloadLinks.Add(Link) + End If + + If bwYT.CancellationPending Then Return DownloadLinks + + Next + + End If + Return DownloadLinks + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New VideoLinkItemCollection + Finally + sHTTP = Nothing + End Try + End Function + +#End Region 'Methods + + End Class + + Public Class VideoLinkItem + +#Region "Fields" + + Private _Description As String + Private _FormatQuality As Enums.TrailerQuality + Private _URL As String + +#End Region 'Fields + +#Region "Properties" + + Public Property Description() As String + Get + Return _Description + End Get + Set(ByVal value As String) + _Description = value + End Set + End Property + + Public Property URL() As String + Get + Return _URL + End Get + Set(ByVal value As String) + _URL = value + End Set + End Property + + Friend Property FormatQuality() As Enums.TrailerQuality + Get + Return _FormatQuality + End Get + Set(ByVal value As Enums.TrailerQuality) + _FormatQuality = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class VideoLinkItemCollection + Inherits Generic.SortedList(Of Enums.TrailerQuality, VideoLinkItem) + +#Region "Methods" + + Public Shadows Sub Add(ByVal Link As VideoLinkItem) + If Not MyBase.ContainsKey(Link.FormatQuality) Then MyBase.Add(Link.FormatQuality, Link) + End Sub + +#End Region 'Methods + + End Class + +End Namespace + diff --git a/Addons/scraper.IMDB.Poster/Scraper/dlgImgSelect.Designer.vb b/Addons/scraper.IMDB.Poster/Scraper/dlgImgSelect.Designer.vb new file mode 100644 index 0000000..3c9254c --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/dlgImgSelect.Designer.vb @@ -0,0 +1,569 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgImgSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgImgSelect)) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.pnlSize = New System.Windows.Forms.Panel() + Me.btnPreview = New System.Windows.Forms.Button() + Me.rbSmall = New System.Windows.Forms.RadioButton() + Me.rbMedium = New System.Windows.Forms.RadioButton() + Me.rbLarge = New System.Windows.Forms.RadioButton() + Me.rbXLarge = New System.Windows.Forms.RadioButton() + Me.pnlFanart = New System.Windows.Forms.Panel() + Me.chkThumb = New System.Windows.Forms.CheckBox() + Me.chkMid = New System.Windows.Forms.CheckBox() + Me.chkOriginal = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlDLStatus = New System.Windows.Forms.Panel() + Me.pnlIMDB = New System.Windows.Forms.Panel() + Me.lblDL6Status = New System.Windows.Forms.Label() + Me.lblDL6 = New System.Windows.Forms.Label() + Me.pbDL6 = New System.Windows.Forms.ProgressBar() + Me.pnlSinglePic = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlFANARTTV = New System.Windows.Forms.Panel() + Me.lblDL3Status = New System.Windows.Forms.Label() + Me.lblDL3 = New System.Windows.Forms.Label() + Me.pbDL3 = New System.Windows.Forms.ProgressBar() + Me.pnlMDB = New System.Windows.Forms.Panel() + Me.lblDL5Status = New System.Windows.Forms.Label() + Me.lblDL5 = New System.Windows.Forms.Label() + Me.pbDL5 = New System.Windows.Forms.ProgressBar() + Me.pnlIMPA = New System.Windows.Forms.Panel() + Me.lblDL4Status = New System.Windows.Forms.Label() + Me.lblDL4 = New System.Windows.Forms.Label() + Me.pbDL4 = New System.Windows.Forms.ProgressBar() + Me.pnlTMDB = New System.Windows.Forms.Panel() + Me.lblDL2Status = New System.Windows.Forms.Label() + Me.lblDL2 = New System.Windows.Forms.Label() + Me.pbDL2 = New System.Windows.Forms.ProgressBar() + Me.TableLayoutPanel1.SuspendLayout() + Me.pnlBottomMain.SuspendLayout() + Me.pnlSize.SuspendLayout() + Me.pnlFanart.SuspendLayout() + Me.pnlDLStatus.SuspendLayout() + Me.pnlIMDB.SuspendLayout() + Me.pnlSinglePic.SuspendLayout() + Me.pnlFANARTTV.SuspendLayout() + Me.pnlMDB.SuspendLayout() + Me.pnlIMPA.SuspendLayout() + Me.pnlTMDB.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(687, 11) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(836, 495) + Me.pnlBG.TabIndex = 1 + Me.pnlBG.Visible = False + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.pnlSize) + Me.pnlBottomMain.Controls.Add(Me.pnlFanart) + Me.pnlBottomMain.Controls.Add(Me.lblInfo) + Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) + Me.pnlBottomMain.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 495) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(836, 50) + Me.pnlBottomMain.TabIndex = 0 + ' + 'pnlSize + ' + Me.pnlSize.BackColor = System.Drawing.Color.White + Me.pnlSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.pnlSize.Controls.Add(Me.btnPreview) + Me.pnlSize.Controls.Add(Me.rbSmall) + Me.pnlSize.Controls.Add(Me.rbMedium) + Me.pnlSize.Controls.Add(Me.rbLarge) + Me.pnlSize.Controls.Add(Me.rbXLarge) + Me.pnlSize.Location = New System.Drawing.Point(8, 8) + Me.pnlSize.Name = "pnlSize" + Me.pnlSize.Size = New System.Drawing.Size(673, 34) + Me.pnlSize.TabIndex = 4 + Me.pnlSize.Visible = False + ' + 'btnPreview + ' + Me.btnPreview.Enabled = False + Me.btnPreview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnPreview.Image = CType(resources.GetObject("btnPreview.Image"), System.Drawing.Image) + Me.btnPreview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPreview.Location = New System.Drawing.Point(593, 5) + Me.btnPreview.Name = "btnPreview" + Me.btnPreview.Size = New System.Drawing.Size(75, 23) + Me.btnPreview.TabIndex = 6 + Me.btnPreview.Text = "Preview" + Me.btnPreview.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPreview.UseVisualStyleBackColor = True + ' + 'rbSmall + ' + Me.rbSmall.AutoSize = True + Me.rbSmall.Enabled = False + Me.rbSmall.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbSmall.Location = New System.Drawing.Point(475, 8) + Me.rbSmall.Name = "rbSmall" + Me.rbSmall.Size = New System.Drawing.Size(53, 17) + Me.rbSmall.TabIndex = 5 + Me.rbSmall.TabStop = True + Me.rbSmall.Text = "Small" + Me.rbSmall.UseVisualStyleBackColor = True + ' + 'rbMedium + ' + Me.rbMedium.AutoSize = True + Me.rbMedium.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbMedium.Location = New System.Drawing.Point(201, 8) + Me.rbMedium.Name = "rbMedium" + Me.rbMedium.Size = New System.Drawing.Size(69, 17) + Me.rbMedium.TabIndex = 4 + Me.rbMedium.TabStop = True + Me.rbMedium.Text = "Medium" + Me.rbMedium.UseVisualStyleBackColor = True + ' + 'rbLarge + ' + Me.rbLarge.AutoSize = True + Me.rbLarge.Enabled = False + Me.rbLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbLarge.Location = New System.Drawing.Point(343, 8) + Me.rbLarge.Name = "rbLarge" + Me.rbLarge.Size = New System.Drawing.Size(55, 17) + Me.rbLarge.TabIndex = 3 + Me.rbLarge.TabStop = True + Me.rbLarge.Text = "Cover" + Me.rbLarge.UseVisualStyleBackColor = True + ' + 'rbXLarge + ' + Me.rbXLarge.AutoSize = True + Me.rbXLarge.Enabled = False + Me.rbXLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbXLarge.Location = New System.Drawing.Point(26, 8) + Me.rbXLarge.Name = "rbXLarge" + Me.rbXLarge.Size = New System.Drawing.Size(66, 17) + Me.rbXLarge.TabIndex = 2 + Me.rbXLarge.TabStop = True + Me.rbXLarge.Text = "Original" + Me.rbXLarge.UseVisualStyleBackColor = True + ' + 'pnlFanart + ' + Me.pnlFanart.BackColor = System.Drawing.Color.White + Me.pnlFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFanart.Controls.Add(Me.chkThumb) + Me.pnlFanart.Controls.Add(Me.chkMid) + Me.pnlFanart.Controls.Add(Me.chkOriginal) + Me.pnlFanart.Location = New System.Drawing.Point(8, 8) + Me.pnlFanart.Name = "pnlFanart" + Me.pnlFanart.Size = New System.Drawing.Size(339, 34) + Me.pnlFanart.TabIndex = 5 + Me.pnlFanart.Visible = False + ' + 'chkThumb + ' + Me.chkThumb.AutoSize = True + Me.chkThumb.Location = New System.Drawing.Point(231, 8) + Me.chkThumb.Name = "chkThumb" + Me.chkThumb.Size = New System.Drawing.Size(111, 17) + Me.chkThumb.TabIndex = 9 + Me.chkThumb.Text = "Check All Thumb" + Me.chkThumb.UseVisualStyleBackColor = True + ' + 'chkMid + ' + Me.chkMid.AutoSize = True + Me.chkMid.Location = New System.Drawing.Point(131, 8) + Me.chkMid.Name = "chkMid" + Me.chkMid.Size = New System.Drawing.Size(96, 17) + Me.chkMid.TabIndex = 7 + Me.chkMid.Text = "Check All Mid" + Me.chkMid.UseVisualStyleBackColor = True + ' + 'chkOriginal + ' + Me.chkOriginal.AutoSize = True + Me.chkOriginal.Location = New System.Drawing.Point(7, 8) + Me.chkOriginal.Name = "chkOriginal" + Me.chkOriginal.Size = New System.Drawing.Size(118, 17) + Me.chkOriginal.TabIndex = 8 + Me.chkOriginal.Text = "Check All Original" + Me.chkOriginal.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.Location = New System.Drawing.Point(402, 10) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(240, 31) + Me.lblInfo.TabIndex = 3 + Me.lblInfo.Text = "Selected item will be set as fanart. All checked items will be saved to \extrathu" & _ + "mbs." + Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblInfo.Visible = False + ' + 'pnlDLStatus + ' + Me.pnlDLStatus.BackColor = System.Drawing.Color.White + Me.pnlDLStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlDLStatus.Controls.Add(Me.pnlIMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlSinglePic) + Me.pnlDLStatus.Controls.Add(Me.pnlFANARTTV) + Me.pnlDLStatus.Controls.Add(Me.pnlMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlIMPA) + Me.pnlDLStatus.Controls.Add(Me.pnlTMDB) + Me.pnlDLStatus.Location = New System.Drawing.Point(253, 98) + Me.pnlDLStatus.Name = "pnlDLStatus" + Me.pnlDLStatus.Size = New System.Drawing.Size(331, 330) + Me.pnlDLStatus.TabIndex = 0 + Me.pnlDLStatus.Visible = False + ' + 'pnlIMDB + ' + Me.pnlIMDB.Controls.Add(Me.lblDL6Status) + Me.pnlIMDB.Controls.Add(Me.lblDL6) + Me.pnlIMDB.Controls.Add(Me.pbDL6) + Me.pnlIMDB.Location = New System.Drawing.Point(3, 84) + Me.pnlIMDB.Name = "pnlIMDB" + Me.pnlIMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlIMDB.TabIndex = 9 + ' + 'lblDL6Status + ' + Me.lblDL6Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL6Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL6Status.Name = "lblDL6Status" + Me.lblDL6Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL6Status.TabIndex = 8 + ' + 'lblDL6 + ' + Me.lblDL6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL6.Location = New System.Drawing.Point(5, 10) + Me.lblDL6.Name = "lblDL6" + Me.lblDL6.Size = New System.Drawing.Size(310, 13) + Me.lblDL6.TabIndex = 7 + Me.lblDL6.Text = "Performing Preliminary Tasks..." + ' + 'pbDL6 + ' + Me.pbDL6.Location = New System.Drawing.Point(6, 52) + Me.pbDL6.Name = "pbDL6" + Me.pbDL6.Size = New System.Drawing.Size(309, 19) + Me.pbDL6.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL6.TabIndex = 6 + ' + 'pnlSinglePic + ' + Me.pnlSinglePic.BackColor = System.Drawing.Color.White + Me.pnlSinglePic.Controls.Add(Me.Label2) + Me.pnlSinglePic.Controls.Add(Me.ProgressBar1) + Me.pnlSinglePic.Location = New System.Drawing.Point(3, 3) + Me.pnlSinglePic.Name = "pnlSinglePic" + Me.pnlSinglePic.Size = New System.Drawing.Size(321, 75) + Me.pnlSinglePic.TabIndex = 9 + Me.pnlSinglePic.Visible = False + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(5, 10) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(310, 13) + Me.Label2.TabIndex = 7 + Me.Label2.Text = "Downloading Selected Image..." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(6, 53) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(309, 19) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 6 + ' + 'pnlFANARTTV + ' + Me.pnlFANARTTV.Controls.Add(Me.lblDL3Status) + Me.pnlFANARTTV.Controls.Add(Me.lblDL3) + Me.pnlFANARTTV.Controls.Add(Me.pbDL3) + Me.pnlFANARTTV.Location = New System.Drawing.Point(3, 84) + Me.pnlFANARTTV.Name = "pnlFANARTTV" + Me.pnlFANARTTV.Size = New System.Drawing.Size(321, 75) + Me.pnlFANARTTV.TabIndex = 11 + ' + 'lblDL3Status + ' + Me.lblDL3Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL3Status.Name = "lblDL3Status" + Me.lblDL3Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL3Status.TabIndex = 8 + ' + 'lblDL3 + ' + Me.lblDL3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3.Location = New System.Drawing.Point(5, 10) + Me.lblDL3.Name = "lblDL3" + Me.lblDL3.Size = New System.Drawing.Size(310, 13) + Me.lblDL3.TabIndex = 7 + Me.lblDL3.Text = "Performing Preliminary Tasks..." + ' + 'pbDL3 + ' + Me.pbDL3.Location = New System.Drawing.Point(6, 53) + Me.pbDL3.Name = "pbDL3" + Me.pbDL3.Size = New System.Drawing.Size(309, 19) + Me.pbDL3.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL3.TabIndex = 6 + ' + 'pnlMDB + ' + Me.pnlMDB.Controls.Add(Me.lblDL5Status) + Me.pnlMDB.Controls.Add(Me.lblDL5) + Me.pnlMDB.Controls.Add(Me.pbDL5) + Me.pnlMDB.Location = New System.Drawing.Point(3, 246) + Me.pnlMDB.Name = "pnlMDB" + Me.pnlMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlMDB.TabIndex = 9 + ' + 'lblDL5Status + ' + Me.lblDL5Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL5Status.Name = "lblDL5Status" + Me.lblDL5Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL5Status.TabIndex = 8 + ' + 'lblDL5 + ' + Me.lblDL5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5.Location = New System.Drawing.Point(5, 10) + Me.lblDL5.Name = "lblDL5" + Me.lblDL5.Size = New System.Drawing.Size(310, 13) + Me.lblDL5.TabIndex = 7 + Me.lblDL5.Text = "Performing Preliminary Tasks..." + ' + 'pbDL5 + ' + Me.pbDL5.Location = New System.Drawing.Point(6, 53) + Me.pbDL5.Name = "pbDL5" + Me.pbDL5.Size = New System.Drawing.Size(309, 19) + Me.pbDL5.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL5.TabIndex = 6 + ' + 'pnlIMPA + ' + Me.pnlIMPA.Controls.Add(Me.lblDL4Status) + Me.pnlIMPA.Controls.Add(Me.lblDL4) + Me.pnlIMPA.Controls.Add(Me.pbDL4) + Me.pnlIMPA.Location = New System.Drawing.Point(3, 165) + Me.pnlIMPA.Name = "pnlIMPA" + Me.pnlIMPA.Size = New System.Drawing.Size(321, 75) + Me.pnlIMPA.TabIndex = 6 + ' + 'lblDL4Status + ' + Me.lblDL4Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL4Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL4Status.Name = "lblDL4Status" + Me.lblDL4Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL4Status.TabIndex = 8 + ' + 'lblDL4 + ' + Me.lblDL4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL4.Location = New System.Drawing.Point(5, 10) + Me.lblDL4.Name = "lblDL4" + Me.lblDL4.Size = New System.Drawing.Size(310, 13) + Me.lblDL4.TabIndex = 7 + Me.lblDL4.Text = "Performing Preliminary Tasks..." + ' + 'pbDL4 + ' + Me.pbDL4.Location = New System.Drawing.Point(6, 52) + Me.pbDL4.Name = "pbDL4" + Me.pbDL4.Size = New System.Drawing.Size(309, 19) + Me.pbDL4.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL4.TabIndex = 6 + ' + 'pnlTMDB + ' + Me.pnlTMDB.Controls.Add(Me.lblDL2Status) + Me.pnlTMDB.Controls.Add(Me.lblDL2) + Me.pnlTMDB.Controls.Add(Me.pbDL2) + Me.pnlTMDB.Location = New System.Drawing.Point(3, 3) + Me.pnlTMDB.Name = "pnlTMDB" + Me.pnlTMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlTMDB.TabIndex = 10 + ' + 'lblDL2Status + ' + Me.lblDL2Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL2Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL2Status.Name = "lblDL2Status" + Me.lblDL2Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL2Status.TabIndex = 8 + ' + 'lblDL2 + ' + Me.lblDL2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL2.Location = New System.Drawing.Point(5, 10) + Me.lblDL2.Name = "lblDL2" + Me.lblDL2.Size = New System.Drawing.Size(310, 13) + Me.lblDL2.TabIndex = 7 + Me.lblDL2.Text = "Performing Preliminary Tasks..." + ' + 'pbDL2 + ' + Me.pbDL2.Location = New System.Drawing.Point(6, 52) + Me.pbDL2.Name = "pbDL2" + Me.pbDL2.Size = New System.Drawing.Size(309, 19) + Me.pbDL2.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL2.TabIndex = 6 + ' + 'dlgImgSelect + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(836, 545) + Me.ControlBox = False + Me.Controls.Add(Me.pnlDLStatus) + Me.Controls.Add(Me.pnlBG) + Me.Controls.Add(Me.pnlBottomMain) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgImgSelect" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Poster" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlSize.ResumeLayout(False) + Me.pnlSize.PerformLayout() + Me.pnlFanart.ResumeLayout(False) + Me.pnlFanart.PerformLayout() + Me.pnlDLStatus.ResumeLayout(False) + Me.pnlIMDB.ResumeLayout(False) + Me.pnlSinglePic.ResumeLayout(False) + Me.pnlFANARTTV.ResumeLayout(False) + Me.pnlMDB.ResumeLayout(False) + Me.pnlIMPA.ResumeLayout(False) + Me.pnlTMDB.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlDLStatus As System.Windows.Forms.Panel + Friend WithEvents pnlIMPA As System.Windows.Forms.Panel + Friend WithEvents lblDL4Status As System.Windows.Forms.Label + Friend WithEvents lblDL4 As System.Windows.Forms.Label + Friend WithEvents pbDL4 As System.Windows.Forms.ProgressBar + Friend WithEvents lblInfo As System.Windows.Forms.Label + Friend WithEvents pnlSize As System.Windows.Forms.Panel + Friend WithEvents rbSmall As System.Windows.Forms.RadioButton + Friend WithEvents rbMedium As System.Windows.Forms.RadioButton + Friend WithEvents rbLarge As System.Windows.Forms.RadioButton + Friend WithEvents rbXLarge As System.Windows.Forms.RadioButton + Friend WithEvents pnlSinglePic As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL5Status As System.Windows.Forms.Label + Friend WithEvents lblDL5 As System.Windows.Forms.Label + Friend WithEvents pbDL5 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlFanart As System.Windows.Forms.Panel + Friend WithEvents chkThumb As System.Windows.Forms.CheckBox + Friend WithEvents chkMid As System.Windows.Forms.CheckBox + Friend WithEvents chkOriginal As System.Windows.Forms.CheckBox + Friend WithEvents btnPreview As System.Windows.Forms.Button + Friend WithEvents pnlFANARTTV As System.Windows.Forms.Panel + Friend WithEvents lblDL3Status As System.Windows.Forms.Label + Friend WithEvents lblDL3 As System.Windows.Forms.Label + Friend WithEvents pbDL3 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlTMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL2Status As System.Windows.Forms.Label + Friend WithEvents lblDL2 As System.Windows.Forms.Label + Friend WithEvents pbDL2 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlIMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL6Status As System.Windows.Forms.Label + Friend WithEvents lblDL6 As System.Windows.Forms.Label + Friend WithEvents pbDL6 As System.Windows.Forms.ProgressBar + +End Class diff --git a/Addons/scraper.IMDB.Poster/Scraper/dlgImgSelect.resx b/Addons/scraper.IMDB.Poster/Scraper/dlgImgSelect.resx new file mode 100644 index 0000000..3491405 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/dlgImgSelect.resx @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnPreview.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA + Cv8BNGKaggAAAuRJREFUOE+lkltsS3Ecx3+ILAsPFrfEyxJPXkh0bokg4UG78TQNI5FImPBAJKiNhBAy + MTwRMRJ1ibsZ29jc2t00Vrq1p3q6tqft6Tk9t87YeLCHff3/3Sp4dZJPvv/f5fs7///5HwJA/8Nv88jw + 8ApD1y+blnnNtKwGjmXl/qCQMxt+fB9xjI2NEYdGR0dp9OfP6Yph+gOKjpBmMcy8CoxwPi5gok81kDGt + BPOUci+xt1LO0Gy+ZAZuUcbtCe4NpHEtLKNBkHGfrQt5dySNrpSKIcvcbJkmka5pNKhrtrfxFE71RlD3 + UcT5gIjt7THMvhLHTEZlSwz1n0ScZTXe8yKextec6TRNY3zAF0O3tUYl7Ovqh+t9EHs8IRSdC4FO9+WZ + VBfEjlchHPEF8z2PRQnDg9b4AE3L0hA7wqNwDFWvP2Cn1w9Hox90zAc6McFRH9Y97MWuDn++56YwgJEc + G2CwAdmsSkPsCLf6I1jb3IUNL3sY3Zhxxgs67AG5PCg+4YW9uRsbWY33XAp8xrBlOHVdI1IVhb5oWdv1 + QBjLn3qwtqUDq5s6MOd0O2jfizwlx9uwqtGLdazGey76Q/hm6k4tmyXKyDLlVMV29aOApU0erHnWgWmH + noF2NYL2Ph2nuhFF+5uw8okXy1hP/YcghjTVqSgZoqQkkZZK2m58ErDouRfzLjSDKt2grbf+ZpMbJSeb + sPA520FvCINqxinLaaKoKHJsETGK1rCIh+8F3HnTh7vvgrjHbqMAjx/0CGiNDCAqJZGUEk45zQYk4nG+ + i7LPgoBkNIpsOglTzcDSFOQ0FTmdwdRiyvNqKolELAZZlre0t7URLSkro21VVSVdnZ1pSZKQSqXAPizY + /wHDMMCuKg+Ps6oKJZNBsL//6+7q6gWTaPzhWjx31qzF5Xb7Acf69S6mNRV2e22Fw1G7gcGVUcPyro3l + 5Qfnl5auYZ4Zk7l3ClsxuBQGTszNx/9SqHHDVG76BaMnpgu1OH2ZAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Scraper/dlgImgSelect.vb b/Addons/scraper.IMDB.Poster/Scraper/dlgImgSelect.vb new file mode 100644 index 0000000..b2e44a9 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/dlgImgSelect.vb @@ -0,0 +1,1582 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports EmberScraperModule.EmberTMDBScraperModule +Imports RestSharp +Imports WatTmdb + +Public Class dlgImgSelect + +#Region "Fields" + + Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwIMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwFANARTTVDownload As New System.ComponentModel.BackgroundWorker + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Private TMDB As TMDB.Scraper + Private TMDBPosters As New List(Of MediaContainers.Image) + + Private MPDB As New MPDB.Scraper + Private MPDBPosters As New List(Of MediaContainers.Image) + + Private IMPA As New IMPA.Scraper + Private IMPAPosters As New List(Of MediaContainers.Image) + + Private IMDB As New IMDBimg.Scraper + Private IMDBPosters As New List(Of MediaContainers.Image) + + Private FANARTTVs As FANARTTVs.Scraper + Private FANARTTVPosters As New List(Of MediaContainers.Image) + + Private CachePath As String = String.Empty + Private chkImage() As CheckBox + Private DLType As Enums.ImageType + Private ETHashes As New List(Of String) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + + Private isEdit As Boolean = False + Private isShown As Boolean = False + Private iTop As Integer = 5 + Private lblImage() As Label + + Private noImages As Boolean = False + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private PreDL As Boolean = False + Private Results As New Containers.ImgResult + Private selIndex As Integer = -1 + + Private tMovie As New Structures.DBMovie + Private tmpImage As New MediaContainers.Image + Private _impaDone As Boolean = True + Private _imdbDone As Boolean = True + Private _fanarttvDone As Boolean = True + Private _mpdbDone As Boolean = True + Private _tmdbDone As Boolean = True + +#End Region 'Fields + +#Region "Events" + + Private Event IMPADone() + + Private Event MPDBDone() + + Private Event TMDBDone() + + Private Event IMDBDone() + + Private Event FANARTTVDone() +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.PreDL = True + Me.SetUp() + Me.StartDownload() + End Sub + + Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult + '// + ' Overload to pass data + '\\ + + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.isShown = True + + MyBase.ShowDialog() + Return Results + End Function + + Public Overloads Function ShowDialog() As Containers.ImgResult + Me.isShown = True + MyBase.ShowDialog() + + Return Results + End Function + + 'Rewrite to simplify + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal isChecked As Boolean, poster As MediaContainers.Image) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(256, 286) + Me.pbImage(iIndex).Size = New Size(250, 250) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.pnlImage(iIndex).Tag = poster + Me.pbImage(iIndex).Tag = poster + Me.pbImage(iIndex).Image = poster.WebImage.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.pnlBG.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If Me.DLType = Enums.ImageType.Fanart Then + ReDim Preserve Me.chkImage(iIndex) + Me.chkImage(iIndex) = New CheckBox() + Me.chkImage(iIndex).Name = iIndex.ToString + Me.chkImage(iIndex).Size = New Size(250, 30) + Me.chkImage(iIndex).AutoSize = False + Me.chkImage(iIndex).BackColor = Color.White + Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + 'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + Me.chkImage(iIndex).Left = 0 + Me.chkImage(iIndex).Top = 250 + Me.chkImage(iIndex).Checked = isChecked + Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve Me.lblImage(iIndex) + Me.lblImage(iIndex) = New Label() + Me.lblImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Size = New Size(250, 30) + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + If IsTMDBURL(poster.URL) Then + Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + Else + Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + End If + Me.lblImage(iIndex).Tag = poster + Me.lblImage(iIndex).Left = 0 + Me.lblImage(iIndex).Top = 250 + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 301 + Else + Me.iLeft += 271 + End If + End Sub + + Private Sub AllDoneDownloading() + If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone AndAlso Me._imdbDone AndAlso Me._fanarttvDone Then + Me.pnlDLStatus.Visible = False + Me.TMDBPosters.AddRange(Me.IMPAPosters) + Me.TMDBPosters.AddRange(Me.MPDBPosters) + Me.TMDBPosters.AddRange(Me.IMDBPosters) + Me.TMDBPosters.AddRange(Me.FANARTTVPosters) + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + End If + End Sub + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + PreviewImage() + End Sub + + Private Sub PreviewImage() + Try + Dim tImage As New Images + Me.pnlTMDB.Visible = False + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = True + Me.pnlDLStatus.Height = 85 + Me.pnlDLStatus.Top = 185 + + Application.DoEvents() + + Select Case True + Case rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + Case rbLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + Case rbMedium.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case rbSmall.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End Select + + Me.pnlSinglePic.Visible = False + + If Not IsNothing(tImage.Image) Then + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image) + + End If + + tImage.Dispose() + tImage = Nothing + + Catch ex As Exception + Me.pnlSinglePic.Visible = False + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.IMDBPosters.Count - 1 + Try + If Me.bwIMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMDBDownload.ReportProgress(i + 1, Me.IMDBPosters.Item(i).URL) + Try + Me.IMDBPosters.Item(i).WebImage.FromWeb(Me.IMDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMDBPosters.Item(i).URL = StringUtils.CleanURL(Me.IMDBPosters.Item(i).URL) + Me.IMDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMDBPosters.Item(i).Description, ")_(url=", Me.IMDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwIMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL6Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL6.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._imdbDone = True + RaiseEvent IMDBDone() + End If + End Sub + + Private Sub bwFANARTTVDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTVDownload.DoWork + '// + ' Thread to download FanartTV images from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.FANARTTVPosters.Count - 1 + Try + If Me.bwFANARTTVDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwFANARTTVDownload.ReportProgress(i + 1, Me.FANARTTVPosters.Item(i).URL) + Try + Me.FANARTTVPosters.Item(i).WebImage.FromWeb(Me.FANARTTVPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.FANARTTVPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.FANARTTVPosters.Item(i).URL = StringUtils.CleanURL(Me.FANARTTVPosters.Item(i).URL) + Me.FANARTTVPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.FANARTTVPosters.Item(i).Description, ")_(url=", Me.FANARTTVPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwFANARTTVDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTVDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL3.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwFANARTTVDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTVDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._fanarttvDone = True + RaiseEvent FANARTTVDone() + End If + End Sub + + Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork + '// + ' Thread to download impa posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + + For i As Integer = 0 To Me.IMPAPosters.Count - 1 + If bwIMPADownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL) + Try + Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL) + Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL4Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL4.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPABownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._impaDone = True + RaiseEvent IMPADone() + End If + End Sub + + Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.MPDBPosters.Count - 1 + Try + If Me.bwMPDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL) + Try + Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL) + Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL5Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL5.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._mpdbDone = True + RaiseEvent MPDBDone() + End If + End Sub + + Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork + '// + ' Thread to download tmdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + Dim thumbLink As String = String.Empty + Dim savePath As String = String.Empty + Dim extrathumbSize As String = String.Empty + + extrathumbSize = _MySettings.ManualETSize + + 'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all. + Dim posters As MediaContainers.Image() + If Me.DLType = Enums.ImageType.Fanart Then + posters = TMDBPosters.Where(Function(s) s.Description = extrathumbSize).ToArray() + Else + posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray() + End If + + For i As Integer = 0 To posters.Count - 1 + Try + If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then + If Me.bwTMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwTMDBDownload.ReportProgress((i + 1), posters(i).URL) + Try + posters(i).WebImage.FromWeb(posters(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then + If Me.DLType = Enums.ImageType.Fanart Then + + + If Not posters(i).URL.Contains("-thumb.") Then + Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org" + thumbLink = RemoveServerURL(posters(i).URL) + 'If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("-poster.", "-thumb.") + thumbLink = thumbLink.Replace("-original.", "-thumb.") + ''Else + 'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb") + 'End If + Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Else + Me.Results.Posters.Add(posters(i).URL) + End If + End If + If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then + Try + posters(i).URL = Me.CleanTMDBURL(posters(i).URL) + + savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg")) + posters(i).WebImage.Save(savePath, , , False) + + If Master.eSettings.AutoET Then + Dim tSize As New Enums.FanartSize + Select Case posters(i).Description.ToLower + Case "original" + tSize = Enums.FanartSize.Lrg + Case "mid" + tSize = Enums.FanartSize.Mid + Case "thumb" + tSize = Enums.FanartSize.Small + End Select + If Master.eSettings.AutoETSize = tSize Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + posters(i).isChecked = True + End If + End If + End If + + Catch + End Try + End If + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL2.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._tmdbDone = True + RaiseEvent TMDBDone() + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + IMPA.Cancel() + MPDB.Cancel() + TMDB.Cancel() + IMDB.Cancel() + FANARTTVs.Cancel() + + If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync() + If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync() + If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync() + If bwIMDBDownload.IsBusy Then bwIMDBDownload.CancelAsync() + If bwFANARTTVDownload.IsBusy Then bwFANARTTVDownload.CancelAsync() + + While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean) + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Text.ToLower.Contains(sType) Then + Me.chkImage(i).Checked = Checked + End If + Next + End Sub + + Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged + Me.CheckAll("(poster)", chkMid.Checked) + End Sub + + Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged + Me.CheckAll("(original)", chkOriginal.Checked) + End Sub + + Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged + Me.CheckAll("(thumb)", chkThumb.Checked) + End Sub + + Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'Me.tmpImage.Dispose() + + IMPA = Nothing + MPDB = Nothing + TMDB = Nothing + IMDB = Nothing + FANARTTVs = Nothing + + IMPAPosters = Nothing + MPDBPosters = Nothing + TMDBPosters = Nothing + IMDBPosters = Nothing + FANARTTVPosters = Nothing + + End Sub + + Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath) + End Sub + + Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not PreDL Then SetUp() + End Sub + + Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Try + Application.DoEvents() + If Not PreDL Then + StartDownload() + ElseIf noImages Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image) + Try + 'set all pnl colors to white first + 'remove all the current genres + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(i).BackColor = Color.White + Me.chkImage(i).ForeColor = Color.Black + Else + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + End If + Next + + 'set selected pnl color to blue + Me.pnlImage(iIndex).BackColor = Color.Blue + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(iIndex).BackColor = Color.Blue + Me.chkImage(iIndex).ForeColor = Color.White + Else + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + End If + + Me.selIndex = iIndex + + Me.pnlSize.Visible = False + + If IsTMDBURL(poster.URL) Then + Me.SetupSizes(poster.ParentID) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + Me.OK_Button.Enabled = False + Else + Me.OK_Button.Focus() + End If + Me.tmpImage.Clear() + Else + Me.rbXLarge.Checked = False + Me.rbLarge.Checked = False + Me.rbMedium.Checked = False + Me.rbSmall.Checked = False + Me.OK_Button.Enabled = True + Me.OK_Button.Focus() + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function IsTMDBURL(ByVal sURL As String) As Boolean + If sURL.ToLower.Contains(_TMDBConf.images.base_url.ToLower) Then + Return True + Else + Return False + End If + End Function + + Private Function CleanTMDBURL(ByVal sURL As String) As String + If IsTMDBURL(sURL) Then + Dim _sURL As New Uri(sURL) + sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped)) + Else + sURL = StringUtils.TruncateURL(sURL, 40, True) + End If + Return sURL.Replace(":", "$c$").Replace("/", "$s$") + End Function + + + Private Sub GetFanart() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim di As New DirectoryInfo(CachePath) + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + If Not IsNothing(tImage.WebImage.Image) Then + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + 'Case sFile.Name.Contains("(mid)") + ' tImage.Description = "mid" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + End If + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "backdrop") + + If _MySettings.UseFANARTTV Then + Me.lblDL3.Text = Master.eLang.GetString(120, "Retrieving data from Fanart.tv...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._fanarttvDone = False + + Me.FANARTTVs.GetImagesAsync(tMovie.Movie.ID) + Else + Me.lblDL3.Text = Master.eLang.GetString(121, "Fanart.tv is not enabled") + End If + + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub GetPosters() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim lFi As New List(Of FileInfo) + Dim di As New DirectoryInfo(CachePath) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 207 + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "poster") + + If _MySettings.UseIMDB Then + Me.lblDL6.Text = Master.eLang.GetString(117, "Retrieving data from IMDB.com...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._imdbDone = False + + Me.IMDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL6.Text = Master.eLang.GetString(118, "IMDB.com is not enabled") + End If + + If _MySettings.UseIMPA Then + Me.lblDL4.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._impaDone = False + + Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL4.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled") + End If + + If _MySettings.UseMPDB Then + Me.lblDL5.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._mpdbDone = False + + Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL5.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVDoneDownloading() + Try + Me._fanarttvDone = True + Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL3.Value = 0 + + 'Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = Posters.Count + + Me.FANARTTVPosters = Posters + + Me.bwFANARTTVDownload.WorkerSupportsCancellation = True + Me.bwFANARTTVDownload.WorkerReportsProgress = True + Me.bwFANARTTVDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVProgressUpdated(ByVal iPercent As Integer) + Me.pbDL3.Value = iPercent + End Sub + + Private Sub IMDBDoneDownloading() + Try + Me._imdbDone = True + Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL6.Value = 0 + + 'Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = Posters.Count + + Me.IMDBPosters = Posters + + Me.bwIMDBDownload.WorkerSupportsCancellation = True + Me.bwIMDBDownload.WorkerReportsProgress = True + Me.bwIMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL6.Value = iPercent + End Sub + + Private Sub IMPADoneDownloading() + Try + Me._impaDone = True + Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL4.Value = 0 + + 'Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = Posters.Count + + Me.IMPAPosters = Posters + + Me.bwIMPADownload.WorkerSupportsCancellation = True + Me.bwIMPADownload.WorkerReportsProgress = True + Me.bwIMPADownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAProgressUpdated(ByVal iPercent As Integer) + Me.pbDL4.Value = iPercent + End Sub + + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then + pnlBG.VerticalScroll.Value += 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum + End If + Else + If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then + pnlBG.VerticalScroll.Value -= 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub MPDBDoneDownloading() + Try + Me._mpdbDone = True + Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL5.Value = 0 + + 'Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = Posters.Count + + Me.MPDBPosters = Posters + + Me.bwMPDBDownload.WorkerSupportsCancellation = True + Me.bwMPDBDownload.WorkerReportsProgress = True + Me.bwMPDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL5.Value = iPercent + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + Dim tmpPathPlus As String = String.Empty + Dim extrathumbSize As String + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + If DLType = Enums.ImageType.Fanart Then + tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") + Else + tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") + End If + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If + + If Me.DLType = Enums.ImageType.Fanart Then + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + Dim isChecked As Boolean = False + + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + isChecked = True + Exit For + End If + Next + + If isChecked Then + Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs") + If isEdit Then + extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName) + Else + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName) + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName) + Else + extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName) + End If + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + End If + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + Dim fsET As FileStream + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) + Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg) + fsET.Close() + iVal += 1 + End If + Next + fsET = Nothing + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + Try + 'If Me.DLType = Enums.ImageType.Fanart OrElse Not IsTMDBURL(DirectCast(sender, PictureBox).Tag.ToString) Then + 'ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(DirectCast(sender, PictureBox).Image) + 'Else + PreviewImage() + 'End If + Catch + End Try + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Panel).Name), DirectCast(DirectCast(sender, Panel).Tag, MediaContainers.Image)) + End Sub + + Private Sub ProcessPics(ByVal posters As List(Of MediaContainers.Image)) + Try + Dim iIndex As Integer = 0 + + 'remove all entries with invalid images + If Master.eSettings.UseImgCache Then + For i As Integer = posters.Count - 1 To 0 Step -1 + If IsNothing(posters.Item(i).WebImage.Image) Then + posters.RemoveAt(i) + End If + Next + End If + + If posters.Count > 0 Then + For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) RemoveServerURL(p.URL)) + If Not IsNothing(xPoster.WebImage.Image) AndAlso (Me.DLType = Enums.ImageType.Fanart OrElse Not (IsTMDBURL(xPoster.URL) AndAlso Not xPoster.Description = "cover")) Then + Me.AddImage(xPoster.Description, iIndex, xPoster.isChecked, xPoster) + iIndex += 1 + End If + Next + Else + If Not Me.PreDL OrElse isShown Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Else + noImages = True + End If + End If + + Me.Activate() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub rbLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbMedium_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbMedium.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbSmall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSmall.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbXLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbXLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub SetUp() + Try + AddHandler TMDB.PostersDownloaded, AddressOf TMDBPostersDownloaded + AddHandler TMDB.ProgressUpdated, AddressOf TMDBProgressUpdated + AddHandler IMPA.PostersDownloaded, AddressOf IMPAPostersDownloaded + AddHandler IMPA.ProgressUpdated, AddressOf IMPAProgressUpdated + AddHandler MPDB.PostersDownloaded, AddressOf MPDBPostersDownloaded + AddHandler MPDB.ProgressUpdated, AddressOf MPDBProgressUpdated + AddHandler IMDB.PostersDownloaded, AddressOf IMDBPostersDownloaded + AddHandler IMDB.ProgressUpdated, AddressOf IMDBProgressUpdated + AddHandler FANARTTVs.PostersDownloaded, AddressOf FANARTTVPostersDownloaded + AddHandler FANARTTVs.ProgressUpdated, AddressOf FANARTTVProgressUpdated + AddHandler IMPADone, AddressOf IMPADoneDownloading + AddHandler TMDBDone, AddressOf TMDBDoneDownloading + AddHandler MPDBDone, AddressOf MPDBDoneDownloading + AddHandler IMDBDone, AddressOf IMDBDoneDownloading + AddHandler FANARTTVDone, AddressOf FANARTTVDoneDownloading + + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlBG.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlBG) + + If Me.DLType = Enums.ImageType.Posters Then + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = True + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = True + Me.pnlMDB.Visible = True + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 328 + Me.pnlDLStatus.Top = 82 + Else + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = True + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 129 + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(tMovie.Filename) + End If + End If + + CachePath = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, tMovie.Movie.IMDBID, Path.DirectorySeparatorChar, If(Me.DLType = Enums.ImageType.Posters, "posters", "fanart")) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview", True) + Me.chkThumb.Text = Master.eLang.GetString(41, "Check All Thumb") + Me.chkMid.Text = Master.eLang.GetString(42, "Check All Mid") + Me.chkOriginal.Text = Master.eLang.GetString(43, "Check All Original") + Me.lblInfo.Text = Master.eLang.GetString(44, "Selected item will be set as fanart. All checked items will be saved to \extrathumbs.") + Me.lblDL5.Text = Master.eLang.GetString(45, "Performing Preliminary Tasks...") + Me.lblDL4.Text = Me.lblDL5.Text + Me.lblDL3.Text = Me.lblDL5.Text + Me.lblDL2.Text = Me.lblDL5.Text + Me.Label2.Text = Master.eLang.GetString(46, "Downloading Selected Image...") + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(0, sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Function RemoveServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Sub SetupSizes(ByVal ParentID As String) + Try + rbXLarge.Checked = False + rbXLarge.Enabled = False + rbXLarge.Text = Master.eLang.GetString(47, "Original") + rbLarge.Checked = False + rbLarge.Enabled = False + rbMedium.Checked = False + rbSmall.Checked = False + rbSmall.Enabled = False + If Me.DLType = Enums.ImageType.Fanart Then + rbLarge.Text = "w1280" + rbMedium.Text = "poster" + rbSmall.Text = "thumb" + Else + rbLarge.Text = Master.eLang.GetString(48, "Cover") + rbMedium.Text = Master.eLang.GetString(49, "Medium") + rbSmall.Text = Master.eLang.GetString(50, "Small") + End If + + For Each TMDBPoster As MediaContainers.Image In TMDBPosters.Where(Function(f) f.ParentID = ParentID) + Select Case TMDBPoster.Description + Case "original" + ' xlarge + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbXLarge.Enabled = True + rbXLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "cover" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "w1280" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format("w1280 ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + End If + Case "thumb" + ' small + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbSmall.Enabled = True + rbSmall.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "mid" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + Case "poster" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format("Poster ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + End Select + Next + + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Small + rbSmall.Checked = rbSmall.Enabled + Case Enums.PosterSize.Mid + rbMedium.Checked = rbMedium.Enabled + Case Enums.PosterSize.Lrg + rbLarge.Checked = rbLarge.Enabled + Case Enums.PosterSize.Xlrg + rbXLarge.Checked = rbXLarge.Enabled + End Select + + pnlSize.Visible = True + + Invalidate() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub StartDownload() + Try + Select Case Me.DLType + Case Enums.ImageType.Posters + Me.GetPosters() + Case Enums.ImageType.Fanart + Me.GetFanart() + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBDoneDownloading() + Try + Me._tmdbDone = True + Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL2.Value = 0 + + 'Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = Posters.Count + + Me.TMDBPosters = Posters + + Me.bwTMDBDownload.WorkerSupportsCancellation = True + Me.bwTMDBDownload.WorkerReportsProgress = True + Me.bwTMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL2.Value = iPercent + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Scraper/dlgTMDBSearchResults.Designer.vb b/Addons/scraper.IMDB.Poster/Scraper/dlgTMDBSearchResults.Designer.vb new file mode 100644 index 0000000..edf9f3b --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/dlgTMDBSearchResults.Designer.vb @@ -0,0 +1,460 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTMDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtTMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(497, 401) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(570, 401) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(4, 96) + Me.tvResults.Name = "tvResults" + Me.tvResults.ShowLines = False + Me.tvResults.ShowPlusMinus = False + Me.tvResults.ShowRootLines = False + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 4 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(294, 130) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(291, 70) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(291, 89) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(294, 295) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(472, 130) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(472, 156) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(472, 183) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtTMDBID + ' + Me.txtTMDBID.Enabled = False + Me.txtTMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBID.Location = New System.Drawing.Point(139, 399) + Me.txtTMDBID.Name = "txtTMDBID" + Me.txtTMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtTMDBID.TabIndex = 6 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(643, 64) + Me.pnlTop.TabIndex = 8 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(257, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(4, 403) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(130, 17) + Me.chkManual.TabIndex = 5 + Me.chkManual.Text = "Manual TMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(245, 399) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 7 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(472, 247) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(37, 13) + Me.lblIMDB.TabIndex = 20 + Me.lblIMDB.Text = "TMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(410, 130) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(33, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(410, 156) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(410, 183) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(410, 247) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(56, 13) + Me.lblIMDBHeader.TabIndex = 19 + Me.lblIMDBHeader.Text = "TMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(291, 279) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(262, 70) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 3 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(4, 71) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 2 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(364, 183) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 18 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(100, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching TMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(308, 155) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'dlgTMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(643, 454) + Me.ControlBox = False + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtTMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgTMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents tvResults As System.Windows.Forms.TreeView + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lblYear As System.Windows.Forms.Label + Friend WithEvents lblDirector As System.Windows.Forms.Label + Friend WithEvents lblGenre As System.Windows.Forms.Label + Friend WithEvents txtTMDBID As System.Windows.Forms.TextBox + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents lblIMDB As System.Windows.Forms.Label + Friend WithEvents lblYearHeader As System.Windows.Forms.Label + Friend WithEvents lblDirectorHeader As System.Windows.Forms.Label + Friend WithEvents lblGenreHeader As System.Windows.Forms.Label + Friend WithEvents lblIMDBHeader As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel + Friend WithEvents Label4 As System.Windows.Forms.Label + +End Class diff --git a/Addons/scraper.IMDB.Poster/Scraper/dlgTMDBSearchResults.resx b/Addons/scraper.IMDB.Poster/Scraper/dlgTMDBSearchResults.resx new file mode 100644 index 0000000..017a5ad --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/dlgTMDBSearchResults.resx @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + gg== +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA + CukB/XXO0wAAAepJREFUOE+lkktIG1EUhkeFaLQ+UGulgthNEUHRCrqyIHZTdSd0Iyq46cL3Sly50ppV + uywYi2uDiyKK1ioFk0lm7mSmSgymJuIqSkwwCTVpGs3fM0Pa+poWceBj4N5zvnvOuZcDwN2HeyWrB98Q + LFosuRJjz51O6cXmxsaj/1V3RSAx8fVXRQnIsgwVRZHjJHr7L8kfAROFPoWS3G43gicnCIVC8O7vQ11z + StKsnkQTrK6sGCSJBXddLpyfJ5FKpTTUz+f1gvbA22w1t0k0AW3WCYIAv9+PZPIn4vGYRiLxA+HwKRhj + EByOIV2BdWur3mG34/j4iJISiEYjRBSx2BkikQiYKOJQ4ft1BZ/X13NIEHalW1CrUEVACj6fF4yqe2W2 + TegK0m0MiBSoziEQCNAQg/B4PPi2I8Fk+QJucBnZI0vvrkuuXCPP8+PU63dC7RnbTvHi/cKnA2O3GYbu + OeT0ziOv58Na8djHgt+iGw+JHk+pzWrtpMF27cn2Ko7jMnLbTebCl1MoaH+D/I4ZFHbM7FZ0ThtvfYl6 + 913WMjFc2jyGkqZRlNC/om2yXBNk0RFEEfGEqCZqiXriGdGYpoHCHhdXtg6W1fQKD592mQwZ3N8KKCiL + yCaMRB7xgMi/zuXqMinnTi3otfYLj6yxrhdJtZ8AAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Scraper/dlgTMDBSearchResults.vb b/Addons/scraper.IMDB.Poster/Scraper/dlgTMDBSearchResults.vb new file mode 100644 index 0000000..d05fd0b --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/dlgTMDBSearchResults.vb @@ -0,0 +1,462 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb + +Public Class dlgTMDBSearchResults + +#Region "Fields" + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + Friend WithEvents tmrLoad As New System.Windows.Forms.Timer + Friend WithEvents tmrWait As New System.Windows.Forms.Timer + + Private TMDBg As TMDBg.Scraper + Private sHTTP As New HTTP + Private _currnode As Integer = -1 + Private _prevnode As Integer = -2 + Private MySettings As EmberTMDBScraperModule.sMySettings + 'Private TMDBConf As V3.TmdbConfiguration + 'Private TMDBApi As V3.Tmdb + + Private _InfoCache As New Dictionary(Of String, MediaContainers.Movie) + Private _PosterCache As New Dictionary(Of String, System.Drawing.Image) + Private _filterOptions As Structures.ScrapeOptions + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(_MySettings As EmberTMDBScraperModule.sMySettings, _TMDBg As TMDBg.Scraper) + + ' This call is required by the designer. + InitializeComponent() + 'TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + 'TMDBConf = TMDBApi.GetConfiguration() + MySettings = _MySettings + TMDBg = _TMDBg + End Sub + + + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + _filterOptions = filterOptions + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + chkManual.Enabled = False + 'TMDBg.IMDBURL = TMDBId + TMDBg.SearchMovieAsync(sMovieTitle, _filterOptions) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal Res As TMDBg.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + SearchResultsDownloaded(Res) + + Return MyBase.ShowDialog() + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.OK_Button.Enabled = False + pnlPicStatus.Visible = False + _InfoCache.Clear() + _PosterCache.Clear() + Me.ClearInfo() + Me.Label3.Text = Master.eLang.GetString(11, "Searching TMDB...") + Me.pnlLoading.Visible = True + chkManual.Enabled = False + TMDBg.CancelAsync() + 'IMDB.IMDBURL = IMDBURL + TMDBg.SearchMovieAsync(Me.txtSearch.Text, _filterOptions) + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + TMDBg.GetSearchMovieInfoAsync(Me.txtTMDBID.Text, Master.tmpMovie, Master.DefaultOptions) + + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + sHTTP.StartDownloadImage(Args.pURL) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image, .IMDBId = Args.IMDBId} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + '// + ' Thread finished: display pic if it was able to get one + '\\ + + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbPoster.Image = Res.Result + If Not _PosterCache.ContainsKey(Res.IMDBId) Then + _PosterCache.Add(Res.IMDBId, Res.Result) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + pnlPicStatus.Visible = False + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Master.tmpMovie.Clear() + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtTMDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.tvResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtTMDBID.Text = String.Empty + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblTagline.Text = String.Empty + Me.lblYear.Text = String.Empty + Me.lblDirector.Text = String.Empty + Me.lblGenre.Text = String.Empty + Me.txtOutline.Text = String.Empty + Me.lblIMDB.Text = String.Empty + Me.pbPoster.Image = Nothing + + Master.tmpMovie.Clear() + + TMDBg.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.lblYearHeader.Visible = areVisible + Me.lblDirectorHeader.Visible = areVisible + Me.lblGenreHeader.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.lblIMDBHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + Me.lblYear.Visible = areVisible + Me.lblTagline.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblDirector.Visible = areVisible + Me.lblGenre.Visible = areVisible + Me.lblIMDB.Visible = areVisible + Me.pbPoster.Visible = areVisible + End Sub + + Private Sub dlgIMDBSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub dlgIMDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + pnlPicStatus.Visible = False + 'TMDBg.IMDBURL = IMDBURL + AddHandler TMDBg.SearchMovieInfoDownloaded, AddressOf SearchMovieInfoDownloaded + AddHandler TMDBg.SearchResultsDownloaded, AddressOf SearchResultsDownloaded + + Try + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgIMDBSearchResults_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + Me.tvResults.Focus() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + If Me.chkManual.Checked AndAlso Me.btnVerify.Enabled Then + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Master.tmpMovie.IMDBID = Me.txtTMDBID.Text + End If + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.Close() + End Sub + + Private Sub SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + '// + ' Info downloaded... fill form with data + '\\ + + Me.pnlLoading.Visible = False + Me.OK_Button.Enabled = True + + Try + If bSuccess Then + Me.ControlsVisible(True) + Me.lblTitle.Text = Master.tmpMovie.Title + Me.lblTagline.Text = Master.tmpMovie.Tagline + Me.lblYear.Text = Master.tmpMovie.Year + Me.lblDirector.Text = Master.tmpMovie.Director + Me.lblGenre.Text = Master.tmpMovie.Genre + Me.txtOutline.Text = Master.tmpMovie.Outline + Me.lblIMDB.Text = Master.tmpMovie.IMDBID + + If _PosterCache.ContainsKey(Master.tmpMovie.TMDBID) Then + 'just set it + Me.pbPoster.Image = _PosterCache(Master.tmpMovie.TMDBID) + Else + 'go download it, if available + If Not String.IsNullOrEmpty(sPoster) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + pnlPicStatus.Visible = True + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = sPoster, .IMDBId = Master.tmpMovie.TMDBID}) + End If + + End If + + 'store clone of tmpmovie + If Not _InfoCache.ContainsKey(Master.tmpMovie.TMDBID) Then + _InfoCache.Add(Master.tmpMovie.TMDBID, GetMovieClone(Master.tmpMovie)) + End If + + + Me.btnVerify.Enabled = False + Else + If Me.chkManual.Checked Then + MsgBox(Master.eLang.GetString(15, "Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again."), MsgBoxStyle.Exclamation, Master.eLang.GetString(16, "Verification Failed")) + Me.btnVerify.Enabled = True + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SearchResultsDownloaded(ByVal M As TMDBg.MovieSearchResults) + '// + ' Process the results that IMDB gave us + '\\ + 'Dim TnP As New TreeNode + 'Dim selNode As New TreeNode + + Try + Me.tvResults.Nodes.Clear() + Me.ClearInfo() + If Not IsNothing(M) AndAlso M.Matches.Count > 0 Then + + 'M.Matches.Sort() + For Each Movie As MediaContainers.Movie In M.Matches + 'TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Me.tvResults.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.TMDBID}) + Next + 'TnP.Expand() + 'Me.tvResults.Nodes.Add(TnP) + 'selNode = Me.tvResults.Nodes(0) + 'selNode = TnP.FirstNode + 'selNode = Me.tvResults.Nodes(0) + Me.tvResults.SelectedNode = Me.tvResults.Nodes(0) + + Me._prevnode = -2 + + Me.tvResults.Focus() + Else + Me.tvResults.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(20, "No Matches Found")}) + End If + Me.pnlLoading.Visible = False + chkManual.Enabled = True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.Label2.Text = Master.eLang.GetString(21, "View details of each result to find the proper movie.") + Me.Label1.Text = Master.eLang.GetString(22, "Movie Search Results") + Me.chkManual.Text = Master.eLang.GetString(23, "Manual TMDB Entry:") + Me.btnVerify.Text = Master.eLang.GetString(24, "Verify") + Me.lblYearHeader.Text = Master.eLang.GetString(49, "Year:", True) + Me.lblDirectorHeader.Text = Master.eLang.GetString(239, "Director:", True) + Me.lblGenreHeader.Text = Master.eLang.GetString(51, "Genre(s):", True) + Me.lblIMDBHeader.Text = Master.eLang.GetString(116, "TMDB ID:") + Me.lblPlotHeader.Text = Master.eLang.GetString(242, "Plot Outline:", True) + Me.Label3.Text = Master.eLang.GetString(25, "Searching TMDB...") + End Sub + + Private Sub tmrLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoad.Tick + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + Me.pnlLoading.Visible = True + Me.Label3.Text = Master.eLang.GetString(26, "Downloading details...") + + 'IMDB.IMDBURL = IMDBURL + TMDBg.GetSearchMovieInfoAsync(Me.tvResults.SelectedNode.Tag.ToString, Master.tmpMovie, Master.DefaultOptions) + End Sub + + Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrWait.Tick + If Not Me._prevnode = Me._currnode Then + Me._prevnode = Me._currnode + Me.tmrWait.Stop() + Me.tmrLoad.Start() + Else + Me.tmrLoad.Stop() + Me.tmrWait.Stop() + End If + End Sub + + Private Sub tvResults_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvResults.AfterSelect + Try + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + + Me.ClearInfo() + Me.OK_Button.Enabled = False + + If Not IsNothing(Me.tvResults.SelectedNode.Tag) AndAlso Not String.IsNullOrEmpty(Me.tvResults.SelectedNode.Tag.ToString) Then + Me._currnode = Me.tvResults.SelectedNode.Index + + 'check if this movie is in the cache already + If _InfoCache.ContainsKey(Me.tvResults.SelectedNode.Tag.ToString) Then + Master.tmpMovie = GetMovieClone(_InfoCache(Me.tvResults.SelectedNode.Tag.ToString)) + SearchMovieInfoDownloaded(String.Empty, True) + Return + End If + + Me.pnlLoading.Visible = True + Me.tmrWait.Start() + Else + Me.pnlLoading.Visible = False + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub tvResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub txtIMDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTMDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtIMDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBID.TextChanged + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Function GetMovieClone(ByVal original As MediaContainers.Movie) As MediaContainers.Movie + 'have to do this the old-fashioned way because it is not serializable + Dim result As New MediaContainers.Movie + With result + .IMDBID = original.IMDBID + .Genre = original.Genre + .Title = original.Title + .Tagline = original.Tagline + .Year = original.Year + .Director = original.Director + .Genre = original.Genre + .Outline = original.Outline + End With + Return result + 'Using mem As New IO.MemoryStream() + ' Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, New System.Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.Clone)) + ' bin.Serialize(mem, original) + ' mem.Seek(0, IO.SeekOrigin.Begin) + ' Return DirectCast(bin.Deserialize(mem), MediaContainers.Movie) + 'End Using + End Function + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim pURL As String + Dim IMDBId As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Image + Dim IMDBId As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.IMDB.Poster/Scraper/dlgTrailer.Designer.vb new file mode 100644 index 0000000..1865dbc --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/dlgTrailer.Designer.vb @@ -0,0 +1,279 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(290, 339) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(74, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(369, 339) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(411, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(424, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(112, 82) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(120, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(411, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(376, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(365, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(72, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(392, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(153, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 339) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(106, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(207, 339) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(77, 23) + Me.btnSetNfo.TabIndex = 4 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(444, 331) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(450, 366) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lbTrailers As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnPlayTrailer As System.Windows.Forms.Button + Friend WithEvents btnSetNfo As System.Windows.Forms.Button + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtYouTube As System.Windows.Forms.TextBox + Friend WithEvents btnBrowse As System.Windows.Forms.Button + Friend WithEvents txtManual As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog + Friend WithEvents btnGetTrailers As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.IMDB.Poster/Scraper/dlgTrailer.resx b/Addons/scraper.IMDB.Poster/Scraper/dlgTrailer.resx new file mode 100644 index 0000000..2be3cac --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/dlgTrailer.resx @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnGetTrailers.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAGHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3NPsx9OAAAB80lEQVQ4T6XTTWsTQRgH8EGr9GDFm19AseDBgzc9eba0FJqvIOTiRase + RAIKtRo9LbbxpYmtggXR2KRFqGLfDio9tDGbdUMrbvc1+57sioiVv7NDLE3MXnTgz8DsPr95dpglAMj/ + pKVY17QuyzLP2raVoBlybHvIc92EUKmcidukBTBrtasUAC0GLWYJggaWl5dw9056uBPSAtDi8aiYAY4N + 13HwLQyxuLiAW6OjyIyPXW5H2gFuZ/cm4HseNFVFsTCD2WIRHz+8P7cb6Qjs7iDqIkLCMEC97kedZWMB + egasA8s24TsBQm8bob8N3w3YZzUzFgsYus6ZZo0WhPisvMackGQR5Dm2xnDLjAdUVeF0XUPD/Yl31eu4 + sURY3orXaDe/EOGGoccDsrzFKYoMz/yON0IaqYVDLPPCTdTtH6D3BKqixANfNjc5SZJga3XMlm5jeP4w + S6E0AsdoQJFlbElSPMCXy/ekDQUTK1eQzB/B+cJxlmT+KB6sXID61UBVFDOxh7i+tjbCf+KxXl7FpZeD + SOR6WS6+6EepsgpREFHh+XRHYC8hB/r7+k7kshOZ/PSrZ7mn2cnTqd7qqdSxjUdPHk7NPC9OT00+vj84 + MHByDyEH/yA7F4kC+wgh3dGDaDTnHkK6etrWuum7+/8C/vWX/g1N2vpUAmZdeAAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnPlayTrailer.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAACwwAAAsMAT9AIsgAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfZBBoSIQHX+6QX + AAACOElEQVQ4T7WSTWvaQRCHozlYNQSiVXwBNSSKKAhqKogo2hx8OeUQpPVY9OBFId+g0IufoQnegslF + EEG8qAgeiij4hohoDjkphJAIGg/udGepfyLV3rowLDu788zs/GZv73+st7e35NPT069KpfJaLpdnj4+P + nel0+p3mOvhnvoeHh0+j0WieTCbB6XSSYDAIoVAIXC4Xicfj0Ov1IJ/Pf9kKweBisQharZbY7XbweDxg + sVjg7OwM8Ix2enpK7u/v4e7u7ttfEJp5QZ3k8PAQ1Go1hMNhyGazIJFIQKVSMd/R0RHgm2azCQqFQsNB + FovFFZZLHZz5fD7AlU6nmY/H43F3NpsNWq3WLQeYz+d1JL8H4BfW6+bmZgOO77rd7isHqNfrM3Ty+XzY + 399n5vV6WfxqtWL79fX1RiWlUgnPHxlkDRAKhSASiUAsFoPf72eBhBAGeXl5AZlMBgKBgIGoxLirGOD5 + +blL/0iwSVKpFORyOVxcXHAV0HtUhzUUm4yATqezpPsHBphMJj8uLy9BqVSCRqOB4+NjiEQiDICZUU6d + TseUQLjb7YZqtVp6L+UBlREBxGg0soBoNArL5RJQDavVCmazGecAKyTtdhtOTk68G7OQy+W+1mo1MJlM + hE4hA2BV5+fnLKPD4QC9Xk8KhQKkUqmfW6cxk8nE6ERCIpFgkxgIBFgzERCLxWAwGOwOXhPpPzWNRuN2 + PB7P+v0+oA2HwyWVrWIwGD5vzbzDyaN++R+phLsCfwMUR2eb8uMbUAAAAABJRU5ErkJggg== +</value> + </data> + <metadata name="ofdTrailer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>40</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Scraper/dlgTrailer.vb b/Addons/scraper.IMDB.Poster/Scraper/dlgTrailer.vb new file mode 100644 index 0000000..d63ea34 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/dlgTrailer.vb @@ -0,0 +1,465 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb +Imports EmberScraperModule.EmberTMDBScraperModule + +Public Class dlgTrailer + +#Region "Fields" + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Friend WithEvents bwCompileList As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwDownloadTrailer As New System.ComponentModel.BackgroundWorker + + Private cTrailer As Trailers + Private imdbID As String = String.Empty + Private prePath As String = String.Empty + Private sPath As String = String.Empty + Private tArray As New List(Of String) + Private tURL As String = String.Empty + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = TMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + cTrailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + End Sub + + Public Overloads Function ShowDialog(ByVal _imdbID As String, ByVal _sPath As String) As String + Me.imdbID = _imdbID + Me.sPath = _sPath + + If MyBase.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + Return Replace(Me.tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + Return Me.tURL + End If + Else + Return String.Empty + End If + End Function + + Protected Overrides Sub Finalize() + cTrailer = Nothing + MyBase.Finalize() + End Sub + + Private Sub BeginDownload(ByVal CloseDialog As Boolean) + Dim didCancel As Boolean = False + + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(56, "Downloading selected trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + If CloseDialog Then + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, Path.GetFileName(Me.prePath)) + FileUtils.Common.MoveFileWithStream(Me.prePath, Me.tURL) + + File.Delete(Me.prePath) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.prePath, """")) + didCancel = True + End If + ElseIf Me.txtManual.Text.Length > 0 Then + Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + If CloseDialog Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.txtManual.Text, """")) + didCancel = True + End If + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + didCancel = True + End If + ElseIf Regex.IsMatch(Me.txtYouTube.Text, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.txtYouTube.Text) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + ElseIf StringUtils.isValidURL(Me.txtYouTube.Text) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = Me.txtYouTube.Text, .bType = CloseDialog}) + Else + If Regex.IsMatch(Me.lbTrailers.SelectedItem.ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.lbTrailers.SelectedItem.ToString) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + Else + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = lbTrailers.SelectedItem.ToString, .bType = CloseDialog}) + End If + End If + + If didCancel Then + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + End Sub + + Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click + Try + With ofdTrailer + .InitialDirectory = Directory.GetParent(Master.currMovie.Filename).FullName + .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.ValidExts.ToArray(), ";*")) + .FilterIndex = 0 + End With + + If ofdTrailer.ShowDialog() = DialogResult.OK Then + txtManual.Text = ofdTrailer.FileName + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub btnGetTrailers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTrailers.Click + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.pnlStatus.Visible = True + + Me.bwCompileList = New System.ComponentModel.BackgroundWorker + Me.bwCompileList.WorkerSupportsCancellation = True + Me.bwCompileList.RunWorkerAsync() + End Sub + + Private Sub btnPlayTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayTrailer.Click + Try + Me.BeginDownload(False) + Catch + MsgBox(Master.eLang.GetString(58, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), MsgBoxStyle.Critical, Master.eLang.GetString(59, "Error Playing Trailer")) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Try + End Sub + + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click + + If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(62, "Moving specified file to trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + File.Move(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + Else + Dim didCancel As Boolean = False + + If StringUtils.isValidURL(Me.txtYouTube.Text) Then + tURL = Me.txtYouTube.Text + ElseIf Me.lbTrailers.SelectedItems.Count > 0 Then + tURL = lbTrailers.SelectedItem.ToString + Else + didCancel = True + End If + + If Not didCancel Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + + End Sub + + Private Sub bwCompileList_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwCompileList.DoWork + Try + tArray = cTrailer.GetTrailers(Me.imdbID, False) + + If Me.bwCompileList.CancellationPending Then + e.Cancel = True + End If + Catch + End Try + End Sub + + Private Sub bwCompileList_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwCompileList.RunWorkerCompleted + If Not e.Cancelled Then + If Me.tArray.Count > 0 Then + For Each tTrail As String In Me.tArray + Me.lbTrailers.Items.Add(tTrail) + Next + + Me.btnGetTrailers.Visible = False + Else + Me.btnGetTrailers.Enabled = False + End If + + End If + + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Sub + + Private Sub bwDownloadTrailer_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTrailer.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + + If Args.bType Then + Me.tURL = cTrailer.DownloadTrailer(Me.sPath, Args.Parameter) + Else + Me.prePath = cTrailer.DownloadTrailer(Path.Combine(Master.TempPath, Path.GetFileName(Me.sPath)), Args.Parameter) + End If + + Catch + End Try + + e.Result = Args.bType + + If Me.bwDownloadTrailer.CancellationPending Then + e.Cancel = True + End If + End Sub + + Private Sub bwDownloadTrailer_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwDownloadTrailer.ProgressChanged + pbStatus.Value = e.ProgressPercentage + End Sub + + Private Sub bwDownloadTrailer_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadTrailer.RunWorkerCompleted + If Not e.Cancelled Then + If Convert.ToBoolean(e.Result) Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + If Not String.IsNullOrEmpty(Me.prePath) Then System.Diagnostics.Process.Start(String.Concat("""", prePath, """")) + End If + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.cTrailer.Cancel() + + If Me.bwCompileList.IsBusy Then Me.bwCompileList.CancelAsync() + If Me.bwDownloadTrailer.IsBusy Then Me.bwDownloadTrailer.CancelAsync() + + While Me.bwCompileList.IsBusy OrElse Me.bwDownloadTrailer.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + AddHandler cTrailer.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + + Private Sub dlgTrailer_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub DownloadProgressUpdated(ByVal iProgress As Integer) + bwDownloadTrailer.ReportProgress(iProgress) + End Sub + + Private Sub lbTrailers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbTrailers.SelectedIndexChanged + Me.SetEnabled(True) + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.BeginDownload(True) + End Sub + + Private Sub SetEnabled(ByVal DeletePre As Boolean) + If DeletePre AndAlso Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + File.Delete(Me.prePath) + Me.prePath = String.Empty + End If + + If StringUtils.isValidURL(Me.txtYouTube.Text) OrElse Me.lbTrailers.SelectedItems.Count > 0 OrElse Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Enabled = True + Me.btnSetNfo.Enabled = True + Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") + Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") + Else + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + Else + Me.OK_Button.Enabled = False + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnPlayTrailer.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(64, "Select Trailer") + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.GroupBox1.Text = Master.eLang.GetString(65, "Select Trailer to Download") + Me.GroupBox2.Text = Master.eLang.GetString(66, "Manual Trailer Entry") + Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") + Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") + Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") + End Sub + + Private Sub txtManual_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtManual.TextChanged + Me.SetEnabled(True) + End Sub + + Private Sub txtYouTube_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtYouTube.TextChanged + Me.SetEnabled(True) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim bType As Boolean + Dim Parameter As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.IMDB.Poster/Scraper/dlgTrailerFormat.Designer.vb new file mode 100644 index 0000000..22f1374 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/dlgTrailerFormat.Designer.vb @@ -0,0 +1,155 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailerFormat + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(84, 117) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(154, 117) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(17, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(78, 69) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(53, 2) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(114, 100) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(10, 29) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.pnlStatus) + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(2, 4) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(220, 111) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 143) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lstFormats As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.IMDB.Poster/Scraper/dlgTrailerFormat.resx b/Addons/scraper.IMDB.Poster/Scraper/dlgTrailerFormat.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/dlgTrailerFormat.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/Scraper/dlgTrailerFormat.vb b/Addons/scraper.IMDB.Poster/Scraper/dlgTrailerFormat.vb new file mode 100644 index 0000000..8f0ad6e --- /dev/null +++ b/Addons/scraper.IMDB.Poster/Scraper/dlgTrailerFormat.vb @@ -0,0 +1,114 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTrailerFormat + +#Region "Fields" + + Private WithEvents YouTube As YouTube.Scraper + Private _selectedformaturl As String + Private _yturl As String + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal YTURL As String) As String + Me._yturl = YTURL + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return _selectedformaturl + Else + Return String.Empty + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailerFormat_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + Me.SetUp() + + lstFormats.DataSource = Nothing + + YouTube = New YouTube.Scraper + YouTube.GetVideoLinksAsync(Me._yturl) + + Catch ex As Exception + MsgBox(Master.eLang.GetString(71, "The video format links could not be retrieved."), MsgBoxStyle.Critical, Master.eLang.GetString(72, "Error Retrieving Video Format Links")) + End Try + End Sub + + Private Sub lstFormats_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFormats.SelectedIndexChanged + Try + Me._selectedformaturl = DirectCast(lstFormats.SelectedItem, YouTube.VideoLinkItem).URL + + If Me.lstFormats.SelectedItems.Count > 0 Then + Me.OK_Button.Enabled = True + Else + Me.OK_Button.Enabled = False + End If + Catch + End Try + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(73, "Select Format") + Me.lblStatus.Text = Master.eLang.GetString(74, "Getting available formats...") + Me.GroupBox1.Text = Master.eLang.GetString(75, "Available Formats") + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub YouTube_VideoLinksRetrieved(ByVal bSuccess As Boolean) Handles YouTube.VideoLinksRetrieved + Try + + If bSuccess Then + lstFormats.DataSource = YouTube.VideoLinks.Values.ToList + lstFormats.DisplayMember = "Description" + lstFormats.ValueMember = "URL" + + If YouTube.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + Me.lstFormats.SelectedIndex = YouTube.VideoLinks.IndexOfKey(Master.eSettings.PreferredTrailerQuality) + ElseIf Me.lstFormats.Items.Count = 1 Then + Me.lstFormats.SelectedIndex = 0 + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + Me.pnlStatus.Visible = False + Me.lstFormats.Enabled = True + End Try + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/frmTMDBInfoSettingsHolder.Designer.vb b/Addons/scraper.IMDB.Poster/frmTMDBInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..f610c2c --- /dev/null +++ b/Addons/scraper.IMDB.Poster/frmTMDBInfoSettingsHolder.Designer.vb @@ -0,0 +1,545 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTMDBInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.chkFallBackEng = New System.Windows.Forms.CheckBox() + Me.cbTMDBPrefLanguage = New System.Windows.Forms.ComboBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtTMDBApiKey = New System.Windows.Forms.TextBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.txtFANARTTVApiKey = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.pbTMDB = New System.Windows.Forms.PictureBox() + Me.pbFANARTTV = New System.Windows.Forms.PictureBox() + Me.GroupBox30.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + Me.GroupBox1.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.pbTMDB) + Me.GroupBox30.Controls.Add(Me.chkFallBackEng) + Me.GroupBox30.Controls.Add(Me.cbTMDBPrefLanguage) + Me.GroupBox30.Controls.Add(Me.Label3) + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtTMDBApiKey) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(309, 123) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "TMDB" + ' + 'chkFallBackEng + ' + Me.chkFallBackEng.AutoSize = True + Me.chkFallBackEng.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFallBackEng.Location = New System.Drawing.Point(8, 100) + Me.chkFallBackEng.Name = "chkFallBackEng" + Me.chkFallBackEng.Size = New System.Drawing.Size(129, 17) + Me.chkFallBackEng.TabIndex = 4 + Me.chkFallBackEng.Text = "Fall back on english" + Me.chkFallBackEng.UseVisualStyleBackColor = True + ' + 'cbTMDBPrefLanguage + ' + Me.cbTMDBPrefLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTMDBPrefLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTMDBPrefLanguage.FormattingEnabled = True + Me.cbTMDBPrefLanguage.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTMDBPrefLanguage.Location = New System.Drawing.Point(123, 65) + Me.cbTMDBPrefLanguage.Name = "cbTMDBPrefLanguage" + Me.cbTMDBPrefLanguage.Size = New System.Drawing.Size(45, 21) + Me.cbTMDBPrefLanguage.TabIndex = 3 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label3.Location = New System.Drawing.Point(6, 68) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(111, 13) + Me.Label3.TabIndex = 2 + Me.Label3.Text = "Preferred Language:" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(79, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "TMDB API Key:" + ' + 'txtTMDBApiKey + ' + Me.txtTMDBApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtTMDBApiKey.Name = "txtTMDBApiKey" + Me.txtTMDBApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtTMDBApiKey.TabIndex = 1 + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pbFANARTTV) + Me.GroupBox1.Controls.Add(Me.Label5) + Me.GroupBox1.Controls.Add(Me.txtFANARTTVApiKey) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(8, 169) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(309, 71) + Me.GroupBox1.TabIndex = 75 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Fanart.tv" + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.Location = New System.Drawing.Point(6, 18) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(94, 13) + Me.Label5.TabIndex = 0 + Me.Label5.Text = "Fanart.tv API Key:" + ' + 'txtFANARTTVApiKey + ' + Me.txtFANARTTVApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtFANARTTVApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtFANARTTVApiKey.Name = "txtFANARTTVApiKey" + Me.txtFANARTTVApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtFANARTTVApiKey.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(323, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(283, 150) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(225, 17) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(52, 17) + Me.chkCrew.TabIndex = 19 + Me.chkCrew.Text = "Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(131, 123) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 89) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 72) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 89) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 123) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(131, 106) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 106) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 72) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'pbTMDB + ' + Me.pbTMDB.Image = CType(resources.GetObject("pbTMDB.Image"), System.Drawing.Image) + Me.pbTMDB.Location = New System.Drawing.Point(287, 34) + Me.pbTMDB.Name = "pbTMDB" + Me.pbTMDB.Size = New System.Drawing.Size(16, 16) + Me.pbTMDB.TabIndex = 5 + Me.pbTMDB.TabStop = False + ' + 'pbFANARTTV + ' + Me.pbFANARTTV.Image = CType(resources.GetObject("pbFANARTTV.Image"), System.Drawing.Image) + Me.pbFANARTTV.Location = New System.Drawing.Point(287, 34) + Me.pbFANARTTV.Name = "pbFANARTTV" + Me.pbFANARTTV.Size = New System.Drawing.Size(16, 16) + Me.pbFANARTTV.TabIndex = 6 + Me.pbFANARTTV.TabStop = False + ' + 'frmTMDBInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox + Friend WithEvents Label18 As System.Windows.Forms.Label + Friend WithEvents txtTMDBApiKey As System.Windows.Forms.TextBox + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents gbOptions As System.Windows.Forms.GroupBox + Friend WithEvents chkCountry As System.Windows.Forms.CheckBox + Friend WithEvents chkStudio As System.Windows.Forms.CheckBox + Friend WithEvents chkRuntime As System.Windows.Forms.CheckBox + Friend WithEvents chkOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkTagline As System.Windows.Forms.CheckBox + Friend WithEvents chkCast As System.Windows.Forms.CheckBox + Friend WithEvents chkVotes As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailer As System.Windows.Forms.CheckBox + Friend WithEvents chkRating As System.Windows.Forms.CheckBox + Friend WithEvents chkRelease As System.Windows.Forms.CheckBox + Friend WithEvents chkMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkYear As System.Windows.Forms.CheckBox + Friend WithEvents chkTitle As System.Windows.Forms.CheckBox + Friend WithEvents chkFallBackEng As System.Windows.Forms.CheckBox + Friend WithEvents cbTMDBPrefLanguage As System.Windows.Forms.ComboBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents chkCrew As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label5 As System.Windows.Forms.Label + Friend WithEvents txtFANARTTVApiKey As System.Windows.Forms.TextBox + Friend WithEvents pbTMDB As System.Windows.Forms.PictureBox + Friend WithEvents pbFANARTTV As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.IMDB.Poster/frmTMDBInfoSettingsHolder.resx b/Addons/scraper.IMDB.Poster/frmTMDBInfoSettingsHolder.resx new file mode 100644 index 0000000..b1bac92 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/frmTMDBInfoSettingsHolder.resx @@ -0,0 +1,223 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="pbFANARTTV.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA + Cv8BNGKaggAABypJREFUWEftlntQlccZxrex1tjYNJMEREEhgiB3OBzu94sXEFSQOypEMEYr9Ro9eBJj + 24wlxabt1PSShFhJEFEuKhxUBAFNRSFq7ESlQUwninYMaqKOM3Gcefq82+RooZ3Qv+gfPTO/+fZ8u++7 + z77v7rufAqBGkhGdXBb+fwH/GxG41NenPr10SfX19qrt75aPWbliefGc2Ym1c5OTmubOTrKwbclKT7Pk + ZKZbMuenWRbkZFsW5y+y5C/Is+Tn5eq2vMucn2rJyUjXY+fSRmzFx5ykWXVLFhesbjvS+rjk/f5XX2ms + e+DyZ5+p/itXRMTopUWL6+gIedmZSIiJQk5mBlYsW4rUOSnITEvF2tUrseT5AmSlz8faVauwbs1qZGek + o7AgH+vYlzU/DakpydomL+ufPnKzMiA+VxWvsHCeMX+/dk1d7e9/KKB6V5Wqq9mj3tj6i5SZcbF48OAB + +vv7ER4ciJbmZgoFfvyj5di4Yb1uH2xqQhoFffHFLdy7dw/pqfOwb2+97tu86RUsLSrU7WNHOxAaZAQX + pv/PSojDRtP6zN+/uU399je/fihg9szpKnnWDEW1JfFU3LBvHyr+tB2hgQF4fcsWHGlt0REpLFiEjvY2 + lL1eipSkROyrr4eloQEMNcpKS3H8zx/gxSWFjE4ajrS0gAvSPt595200WRoxMz6W/w2buDAlWFNAZSpx + eryaHhtdIquODA3WK1yQnYVshlrCWrAwD4sXLcTC3BwU5i/CsheWgLnXyIpFxKyEeG2TvyAXGYxKBlOW + yxSmpszWPiNCggRzREigEqwCZPKkGQkSAZMIaD3cjLt37+LWzZvfzq2buHP7Nn71y63YsG4tbgwM4Cbt + btwY0G3hNvvb244gKiwEYUFGc0RwkBKGRCAuKsJE0HPhAgZoeO3q1WFx+8svUVX5PkO+FXfu3BliM/D5 + 57jY26tTEGL0N4cHG5kC40MB7FCShpjIcFNsZBhOnujUG+fiJ5+g91uQMVcuX0b5229hy2s/0+3BNuLr + 1IcfgilGcICfOSwoQAnWCLBDzYiLUdHhoSbC3XsUf+3pwbmPPx4WfRf78IffvYmfbn4VrClDbHro68Tx + 44iPjkSQv6851GhQglUAcy8bUDFHJtksrYcP4y9nz+L0qVPD4vy5c+Cxwqsvb8SF8+eH2Jz96COennbE + RYYj0M/HzCgowSogPipSJURHqciQYFMEN+EBiwXdXV3opOrhcOb0abxRVqbrxJnTZ4bYdJ08ieZDhxDD + 6Ab4epkD/X2VYBUQGxmuuPnkbJqYG+ytr8MHx45x57YNi87OTl0vXlq7BifYHmwnKW3cv18fRYO3p9no + 660EqwDmXcVEhCkWDVNIgD+qd+1CKwvJoYMHh0V7Wzte+8lmrF5ZjI6ODr3aRxFfdTU1urL6ebqbKUIJ + VgFUJvlXnNzETYL3KnbA0mjBflbE4SBCN71sRvHyZWhm6W7gah+liSmt2rlTV0UfDzezn5e7EqwCmHfm + P0gFGXxNAb7eKGfprKutxZ7du4eFiJT8L3uhSE9cs2fPv1BfV4cdLO3BBj94uU01+7i7KcEqICwwQIUH + GSUvJoYG28vL/ysBMulG0wa8qAU0DBEti6nYsQPcePCY6mymCCVYBbA6Mf8GxR1q8nCZoguKrH5nZeV/ + pOrrPnnK2CJe0XJ/VO2sYlUUu/ettrurq1H68y1cvQvcp04xe7g6K8EqgGeTx8JH+Xt7lLg+5wgXRwc5 + LnrXBhv8YfTzQRTbkazlEkbZTFKyQ4wGjVRPr2muEFvJc1RoCBhNKTpgamHw8YLLZAe4TXGEm7OTmU/F + 5yOngBuQTpSv57QSUVmzu5qVbRsm2dmgZP1LrAuNkAoptfzggSZ+eKzCVKdJ+squqnyPjp2whiegpfkQ + eK3zwglAU2OjLkwO45/FNhapvXW1oH84T7bf5OPuqjwfjYD9BDvFLx+1+RVzcgDV3r9/H3/79BIm2jyN + +toa/TExLzmJV22mbldWVIgjXL9+Xd90srJ33vqj7it6Pl8Lld+BpkbYPfMUenou6P8SkeLlSzOS+O3x + 1A+ffBgBxd93iLub2yh/b8+a6bFRiIkI1angBkVK4gx4M8R+XMHc5ESmwAh3l+d4/8eCV7nkVY+bxz4e + L9np2kbGOTP00WHBvIiieBH5N0xzdR0tc8nPugdGcX7yBN+Nf2LsWBf78balDna2HY72E7ocxtt0TbB5 + usvJYaLQPdH22W7HiXbdzo6TujlG4zx5UjfH6j4ZI2Mn2DzTZU9bJ/FhZ3uUPsueHDfOlXPYPsa5ZM7B + An7Alw5U50wms+3Cge7Ek3gTX+JH/ImBBAxC3kmfjJGxYuMhPsSX+CRTZA4ybrAAxReCROIxMop8l4wm + 3yNjyONk7Nd8n89/xzf9MlZsxFZ8iC/xKb5lDj2fNQLSGClGbOJvFjziAv4B1z91K1OjhosAAAAASUVO + RK5CYII= +</value> + </data> + <data name="pbTMDB.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/frmTMDBInfoSettingsHolder.vb b/Addons/scraper.IMDB.Poster/frmTMDBInfoSettingsHolder.vb new file mode 100644 index 0000000..d17768a --- /dev/null +++ b/Addons/scraper.IMDB.Poster/frmTMDBInfoSettingsHolder.vb @@ -0,0 +1,218 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports System.Diagnostics + +Public Class frmTMDBInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + Public Event SetupNeedsRestart() + +#End Region 'Events + +#Region "Fields" + + Private Api1 As String + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Private Sub chkCrew_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFallBackEng_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkFallBackEng.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTMDBPrefLanguage_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cbTMDBPrefLanguage.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtFANARTTVApiKey_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtFANARTTVApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Enter + Api1 = txtTMDBApiKey.Text + End Sub + + Private Sub txtTMDBApiKey_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextValidated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Validated + If Not (Api1 = txtTMDBApiKey.Text) Then + RaiseEvent SetupNeedsRestart() + End If + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label18.Text = Master.eLang.GetString(854, "TMDB API Key:") + Me.gbOptions.Text = Master.eLang.GetString(6, "Scraper Fields - Scraper specific") + Me.chkStudio.Text = Master.eLang.GetString(395, "Studio", True) + Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime", True) + Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline", True) + Me.chkGenre.Text = Master.eLang.GetString(20, "Genres", True) + Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline", True) + Me.chkCast.Text = Master.eLang.GetString(856, "Cast and Crew", True) + Me.chkVotes.Text = Master.eLang.GetString(399, "Votes", True) + Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer", True) + Me.chkRating.Text = Master.eLang.GetString(400, "Rating", True) + Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date", True) + Me.chkMPAA.Text = Master.eLang.GetString(859, "MPAA & Certification", True) + Me.chkYear.Text = Master.eLang.GetString(278, "Year", True) + Me.chkTitle.Text = Master.eLang.GetString(21, "Title", True) + 'Me.chkCertification.Text = Master.eLang.GetString(722, "Certification", True) + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkFallBackEng.Text = Master.eLang.GetString(114, "Fall back on english") + Me.Label3.Text = Master.eLang.GetString(115, "Preferred Language:") + + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + +#End Region 'Methods + + Private Sub PictureBox2_Click(sender As System.Object, e As System.EventArgs) Handles pbTMDB.Click + If Master.isWindows Then + Process.Start("http://docs.themoviedb.apiary.io/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://docs.themoviedb.apiary.io/" + Explorer.Start() + End Using + End If + + End Sub + + Private Sub pbFANARTTV_Click(sender As System.Object, e As System.EventArgs) Handles pbFANARTTV.Click + If Master.isWindows Then + Process.Start("http://fanart.tv/get-an-api-key/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://fanart.tv/get-an-api-key/" + Explorer.Start() + End Using + End If + + End Sub +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/frmTMDBMediaSettingsHolder.Designer.vb b/Addons/scraper.IMDB.Poster/frmTMDBMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..68e3c03 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/frmTMDBMediaSettingsHolder.Designer.vb @@ -0,0 +1,525 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTMDBMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBMediaSettingsHolder)) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.chkUseFANARTTV = New System.Windows.Forms.CheckBox() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkUseMPDB = New System.Windows.Forms.CheckBox() + Me.chkUseIMDBp = New System.Windows.Forms.CheckBox() + Me.chkUseIMPA = New System.Windows.Forms.CheckBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.cbManualETSize = New System.Windows.Forms.ComboBox() + Me.grpSaveFanart = New System.Windows.Forms.GroupBox() + Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() + Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() + Me.chkScrapePoster = New System.Windows.Forms.CheckBox() + Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.txtTimeout = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() + Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox9.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.grpSaveFanart.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.GroupBox3) + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Panel2) + Me.pnlSettings.Location = New System.Drawing.Point(12, 4) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 94 + Me.PictureBox1.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.GroupBox6) + Me.GroupBox3.Controls.Add(Me.GroupBox9) + Me.GroupBox3.Controls.Add(Me.GroupBox4) + Me.GroupBox3.Controls.Add(Me.grpSaveFanart) + Me.GroupBox3.Controls.Add(Me.chkScrapePoster) + Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(15, 31) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(505, 154) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Images" + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.chkUseFANARTTV) + Me.GroupBox6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox6.Location = New System.Drawing.Point(331, 21) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(160, 55) + Me.GroupBox6.TabIndex = 96 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Get Fanart From:" + ' + 'chkUseFANARTTV + ' + Me.chkUseFANARTTV.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseFANARTTV.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseFANARTTV.Location = New System.Drawing.Point(6, 21) + Me.chkUseFANARTTV.Name = "chkUseFANARTTV" + Me.chkUseFANARTTV.Size = New System.Drawing.Size(150, 22) + Me.chkUseFANARTTV.TabIndex = 2 + Me.chkUseFANARTTV.Text = "fanart.tv" + Me.chkUseFANARTTV.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseFANARTTV.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkUseMPDB) + Me.GroupBox9.Controls.Add(Me.chkUseIMDBp) + Me.GroupBox9.Controls.Add(Me.chkUseIMPA) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(165, 19) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(160, 78) + Me.GroupBox9.TabIndex = 5 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Get Poster From:" + ' + 'chkUseMPDB + ' + Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) + Me.chkUseMPDB.Name = "chkUseMPDB" + Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) + Me.chkUseMPDB.TabIndex = 2 + Me.chkUseMPDB.Text = "MoviePosterDB.com" + Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.UseVisualStyleBackColor = True + ' + 'chkUseIMDBp + ' + Me.chkUseIMDBp.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMDBp.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMDBp.Location = New System.Drawing.Point(6, 18) + Me.chkUseIMDBp.Name = "chkUseIMDBp" + Me.chkUseIMDBp.Size = New System.Drawing.Size(149, 19) + Me.chkUseIMDBp.TabIndex = 0 + Me.chkUseIMDBp.Text = "IMDB.com" + Me.chkUseIMDBp.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMDBp.UseVisualStyleBackColor = True + ' + 'chkUseIMPA + ' + Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) + Me.chkUseIMPA.Name = "chkUseIMPA" + Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) + Me.chkUseIMPA.TabIndex = 1 + Me.chkUseIMPA.Text = "IMPAwards.com" + Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.UseVisualStyleBackColor = True + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.cbManualETSize) + Me.GroupBox4.Location = New System.Drawing.Point(331, 94) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(160, 55) + Me.GroupBox4.TabIndex = 4 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "TMDB Extrathumbs Size:" + ' + 'cbManualETSize + ' + Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbManualETSize.FormattingEnabled = True + Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) + Me.cbManualETSize.Location = New System.Drawing.Point(12, 21) + Me.cbManualETSize.Name = "cbManualETSize" + Me.cbManualETSize.Size = New System.Drawing.Size(131, 21) + Me.cbManualETSize.TabIndex = 0 + ' + 'grpSaveFanart + ' + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) + Me.grpSaveFanart.Enabled = False + Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) + Me.grpSaveFanart.Name = "grpSaveFanart" + Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) + Me.grpSaveFanart.TabIndex = 2 + Me.grpSaveFanart.TabStop = False + Me.grpSaveFanart.Text = "Save Fanart In:" + ' + 'optFanartFolderExtraFanart + ' + Me.optFanartFolderExtraFanart.AutoSize = True + Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) + Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" + Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) + Me.optFanartFolderExtraFanart.TabIndex = 1 + Me.optFanartFolderExtraFanart.TabStop = True + Me.optFanartFolderExtraFanart.Text = "\extrafanart" + Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True + ' + 'optFanartFolderExtraThumbs + ' + Me.optFanartFolderExtraThumbs.AutoSize = True + Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) + Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" + Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) + Me.optFanartFolderExtraThumbs.TabIndex = 0 + Me.optFanartFolderExtraThumbs.TabStop = True + Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" + Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True + ' + 'chkScrapePoster + ' + Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) + Me.chkScrapePoster.Name = "chkScrapePoster" + Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) + Me.chkScrapePoster.TabIndex = 0 + Me.chkScrapePoster.Text = "Get Posters" + Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.UseVisualStyleBackColor = True + ' + 'chkScrapeFanart + ' + Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) + Me.chkScrapeFanart.Name = "chkScrapeFanart" + Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) + Me.chkScrapeFanart.TabIndex = 1 + Me.chkScrapeFanart.Text = "Get Fanart" + Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox1.Controls.Add(Me.Label23) + Me.GroupBox1.Controls.Add(Me.txtTimeout) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(15, 203) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(464, 126) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Trailers" + Me.GroupBox1.UseCompatibleTextRendering = True + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label23.Location = New System.Drawing.Point(21, 43) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(51, 13) + Me.Label23.TabIndex = 1 + Me.Label23.Text = "Timeout:" + ' + 'txtTimeout + ' + Me.txtTimeout.Enabled = False + Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTimeout.Location = New System.Drawing.Point(82, 39) + Me.txtTimeout.Name = "txtTimeout" + Me.txtTimeout.Size = New System.Drawing.Size(50, 22) + Me.txtTimeout.TabIndex = 2 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) + Me.GroupBox2.Controls.Add(Me.GroupBox5) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(165, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(291, 104) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Supported Sites:" + ' + 'chkTrailerIMDB + ' + Me.chkTrailerIMDB.AutoSize = True + Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) + Me.chkTrailerIMDB.Name = "chkTrailerIMDB" + Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) + Me.chkTrailerIMDB.TabIndex = 5 + Me.chkTrailerIMDB.Text = "IMDB" + Me.chkTrailerIMDB.UseVisualStyleBackColor = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) + Me.GroupBox5.Controls.Add(Me.Label2) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) + Me.GroupBox5.Location = New System.Drawing.Point(123, 12) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(161, 83) + Me.GroupBox5.TabIndex = 4 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Youtube/TMDB Trailer:" + ' + 'cbTrailerTMDBPref + ' + Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerTMDBPref.Enabled = False + Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTrailerTMDBPref.FormattingEnabled = True + Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) + Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" + Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) + Me.cbTrailerTMDBPref.TabIndex = 1 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label2.Location = New System.Drawing.Point(26, 26) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(111, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Preferred Language:" + ' + 'chkTrailerTMDBXBMC + ' + Me.chkTrailerTMDBXBMC.AutoSize = True + Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) + Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" + Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) + Me.chkTrailerTMDBXBMC.TabIndex = 1 + Me.chkTrailerTMDBXBMC.Text = "XBMC Format" + Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True + ' + 'chkTrailerTMDB + ' + Me.chkTrailerTMDB.AutoSize = True + Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) + Me.chkTrailerTMDB.Name = "chkTrailerTMDB" + Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) + Me.chkTrailerTMDB.TabIndex = 0 + Me.chkTrailerTMDB.Text = "Youtube/TMDB" + Me.chkTrailerTMDB.UseVisualStyleBackColor = True + ' + 'Panel2 + ' + Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Controls.Add(Me.btnDown) + Me.Panel2.Controls.Add(Me.btnUp) + Me.Panel2.Controls.Add(Me.cbEnabled) + Me.Panel2.Location = New System.Drawing.Point(0, 0) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(1125, 25) + Me.Panel2.TabIndex = 0 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(500, 7) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 12) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'frmTMDBMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.grpSaveFanart.ResumeLayout(False) + Me.grpSaveFanart.PerformLayout() + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents chkScrapeFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkScrapePoster As System.Windows.Forms.CheckBox + Friend WithEvents chkDownloadTrailer As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Panel2 As System.Windows.Forms.Panel + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Label23 As System.Windows.Forms.Label + Friend WithEvents txtTimeout As System.Windows.Forms.TextBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents grpSaveFanart As System.Windows.Forms.GroupBox + Friend WithEvents optFanartFolderExtraFanart As System.Windows.Forms.RadioButton + Friend WithEvents optFanartFolderExtraThumbs As System.Windows.Forms.RadioButton + Friend WithEvents chkTrailerTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDBXBMC As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents cbManualETSize As System.Windows.Forms.ComboBox + Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox + Friend WithEvents cbTrailerTMDBPref As System.Windows.Forms.ComboBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox9 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseMPDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMDBp As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMPA As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerIMDB As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseFANARTTV As System.Windows.Forms.CheckBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/frmTMDBMediaSettingsHolder.resx b/Addons/scraper.IMDB.Poster/frmTMDBMediaSettingsHolder.resx new file mode 100644 index 0000000..3c46229 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/frmTMDBMediaSettingsHolder.resx @@ -0,0 +1,238 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/frmTMDBMediaSettingsHolder.vb b/Addons/scraper.IMDB.Poster/frmTMDBMediaSettingsHolder.vb new file mode 100644 index 0000000..6ccca98 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/frmTMDBMediaSettingsHolder.vb @@ -0,0 +1,165 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTMDBMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order + 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order - 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Sub CheckTrailer() + Me.txtTimeout.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDBXBMC.Enabled = Me.chkDownloadTrailer.Checked + If Not Me.chkDownloadTrailer.Checked Then + Me.txtTimeout.Text = "2" + Me.chkTrailerTMDB.Checked = False + Me.chkTrailerTMDBXBMC.Checked = False + End If + End Sub + + Private Sub chkDownloadTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDownloadTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + CheckTrailer() + End Sub + + Private Sub chkTrailerTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDB.CheckedChanged + chkTrailerTMDBXBMC.Enabled = chkTrailerTMDB.Checked + cbTrailerTMDBPref.Enabled = chkTrailerTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerIMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerTMDBXBMC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDBXBMC.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkScrapeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapeFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + grpSaveFanart.Enabled = chkScrapeFanart.Checked + End Sub + + Private Sub chkScrapePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapePoster.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseFANARTTV_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkUseFANARTTV.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMDBp_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkUseIMDBp.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMDBf_CheckedChanged(sender As System.Object, e As System.EventArgs) + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMPA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseIMPA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseMPDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseMPDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Sub SetUp() + Me.txtTimeout.Text = Master.eSettings.TrailerTimeout.ToString + Me.Label23.Text = Master.eLang.GetString(7, "Timeout:") + Me.GroupBox2.Text = Master.eLang.GetString(8, "Supported Sites:") + Me.grpSaveFanart.Text = Master.eLang.GetString(8001, "Save Fanart In:") + Me.chkDownloadTrailer.Text = Master.eLang.GetString(529, "Enable Trailer Support", True) + Me.Label3.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkScrapePoster.Text = Master.eLang.GetString(101, "Get Posters") + Me.chkScrapeFanart.Text = Master.eLang.GetString(102, "Get Fanart") + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + Private Sub txtTimeout_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTimeout.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraThumbs_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraThumbs.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbManualETSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbManualETSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTrailerTMDBPref_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbTrailerTMDBPref.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/packages.config b/Addons/scraper.IMDB.Poster/packages.config new file mode 100644 index 0000000..9d72b1b --- /dev/null +++ b/Addons/scraper.IMDB.Poster/packages.config @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="RestSharp" version="104.1" targetFramework="net35" /> + <package id="SharpZipLib" version="0.86.0" /> +</packages> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/scraper.IMDB.Poster.vbproj b/Addons/scraper.IMDB.Poster/scraper.IMDB.Poster.vbproj new file mode 100644 index 0000000..a2fc4a5 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/scraper.IMDB.Poster.vbproj @@ -0,0 +1,287 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{6A5A835E-D798-4A21-963C-C8E7A5F99D57}</ProjectGuid> + <OutputType>Library</OutputType> + <RootNamespace>EmberScraperModule</RootNamespace> + <AssemblyName>scraper.IMDB.Poster</AssemblyName> + <FileAlignment>512</FileAlignment> + <MyType>Windows</MyType> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <OptionExplicit>On</OptionExplicit> + <OptionCompare>Binary</OptionCompare> + <OptionStrict>On</OptionStrict> + <OptionInfer>On</OptionInfer> + <FileUpgradeFlags> + </FileUpgradeFlags> + <OldToolsVersion>3.5</OldToolsVersion> + <UpgradeBackupLocation /> + <PublishUrl>publish\</PublishUrl> + <Install>true</Install> + <InstallFrom>Disk</InstallFrom> + <UpdateEnabled>false</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>false</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> + <RestorePackages>true</RestorePackages> + <SccProjectName> + </SccProjectName> + <SccLocalPath> + </SccLocalPath> + <SccAuxPath> + </SccAuxPath> + <SccProvider> + </SccProvider> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> + <DebugSymbols>true</DebugSymbols> + <DefineDebug>true</DefineDebug> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Dev\Modules\</OutputPath> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Deploy\Modules\</OutputPath> + <Optimize>true</Optimize> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <ItemGroup> + <Reference Include="ICSharpCode.SharpZipLib"> + <HintPath>..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> + </Reference> + <Reference Include="RestSharp"> + <HintPath>..\..\packages\RestSharp.104.1\lib\net35\RestSharp.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Import Include="Microsoft.VisualBasic" /> + <Import Include="System" /> + <Import Include="System.Collections" /> + <Import Include="System.Collections.Generic" /> + <Import Include="System.Drawing" /> + <Import Include="System.Linq" /> + <Import Include="System.Web" /> + <Import Include="System.Windows.Forms" /> + <Import Include="System.Xml.Linq" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Scraper\clsScrapeIMPA.vb" /> + <Compile Include="Scraper\clsScrapeMPDB.vb" /> + <Compile Include="Scraper\clsScrapeOFDB.vb" /> + <Compile Include="Scraper\clsScrapeTMDB.vb" /> + <Compile Include="Scraper\clsScrapeTrailers.vb" /> + <Compile Include="Scraper\clsScrapeImages.vb" /> + <Compile Include="Scraper\clsScrapeTMDBg.vb" /> + <Compile Include="Scraper\clsScrapeYouTube.vb" /> + <Compile Include="Scraper\clsScrapeIMDB.vb" /> + <Compile Include="Scraper\clsScrapeFANARTTV.vb" /> + <Compile Include="Scraper\dlgTMDBSearchResults.Designer.vb"> + <DependentUpon>dlgTMDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTMDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgImgSelect.Designer.vb"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgImgSelect.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailer.Designer.vb"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailer.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.Designer.vb"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmTMDBMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmTMDBMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTMDBMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="My Project\AssemblyInfo.vb" /> + <Compile Include="My Project\Application.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Application.myapp</DependentUpon> + </Compile> + <Compile Include="My Project\Resources.Designer.vb"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> + <Compile Include="My Project\Settings.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Settings.settings</DependentUpon> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + </Compile> + <Compile Include="frmTMDBInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmTMDBInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTMDBInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperMovieTMDBModule.vb" /> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="Scraper\dlgTMDBSearchResults.resx"> + <DependentUpon>dlgTMDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgImgSelect.resx"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailer.resx"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailerFormat.resx"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTMDBMediaSettingsHolder.resx"> + <DependentUpon>frmTMDBMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTMDBInfoSettingsHolder.resx"> + <DependentUpon>frmTMDBInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="My Project\Resources.resx"> + <Generator>VbMyResourcesResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.vb</LastGenOutput> + <CustomToolNamespace>My.Resources</CustomToolNamespace> + <SubType>Designer</SubType> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <None Include="My Project\Application.myapp"> + <Generator>MyApplicationCodeGenerator</Generator> + <LastGenOutput>Application.Designer.vb</LastGenOutput> + </None> + <None Include="My Project\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <CustomToolNamespace>My</CustomToolNamespace> + <LastGenOutput>Settings.Designer.vb</LastGenOutput> + </None> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\EmberAPI\EmberAPI.vbproj"> + <Project>{208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}</Project> + <Name>EmberAPI</Name> + <Private>False</Private> + </ProjectReference> + <ProjectReference Include="..\..\FanartTVAPI\FanartTVAPI.csproj"> + <Project>{70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}</Project> + <Name>FanartTVAPI</Name> + </ProjectReference> + <ProjectReference Include="..\..\WatTmdb\WatTmdb.csproj"> + <Project>{EFC11645-FAB4-4C30-A498-29F5ECDF77E8}</Project> + <Name>WatTmdb</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="Langs\scraper.EmberCore.TMDB.Debug_%28db_DB%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.English_%28en_US%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.English_%28en_US%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.German_%28de_DE%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.German_%28de_DE%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.Norwegian_%28no_NO%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.Norwegian_%28no_NO%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + </ItemGroup> + <ItemGroup /> + <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <PropertyGroup> + <PreBuildEvent> + </PreBuildEvent> + </PropertyGroup> + <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> +</Project> \ No newline at end of file diff --git a/Addons/scraper.IMDB.Poster/scraperMovieTMDBModule.vb b/Addons/scraper.IMDB.Poster/scraperMovieTMDBModule.vb new file mode 100644 index 0000000..7ac1344 --- /dev/null +++ b/Addons/scraper.IMDB.Poster/scraperMovieTMDBModule.vb @@ -0,0 +1,761 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports RestSharp +Imports WatTmdb +Imports EmberScraperModule.TMDBg + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberTMDBScraperModule + Implements Interfaces.EmberMovieScraperModule + + +#Region "Fields" + + Public Shared ConfigOptions As New Structures.ScrapeOptions + Public Shared ConfigScrapeModifier As New Structures.ScrapeModifier + Public Shared _AssemblyName As String + + Private dFImgSelect As dlgImgSelect = Nothing + + Private TMDBId As String + 'Private IMDBid As String + + ''' <summary> + ''' Scraping Here + ''' </summary> + ''' <remarks></remarks> + Private _MySettings As New sMySettings + Private _TMDBg As TMDBg.Scraper + Private _Name As String = "Ember TMDB Movie Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmTMDBInfoSettingsHolder + Private _setupPost As frmTMDBMediaSettingsHolder + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberMovieScraperModule.ModuleSettingsChanged + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsScraper + Get + Return True + End Get + End Property + + ReadOnly Property ModuleName() As String Implements Interfaces.EmberMovieScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberMovieScraperModule.ModuleVersion + Get + Return System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Property PostScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Property ScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean Implements Interfaces.EmberMovieScraperModule.QueryPostScraperCapabilities + Select Case cap + Case Enums.PostScraperCapabilities.Fanart + Return True + Case Enums.PostScraperCapabilities.Poster + Return True + Case Enums.PostScraperCapabilities.Trailer + If _MySettings.DownloadTrailers Then Return True + End Select + Return False + End Function + + Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.DownloadTrailer + Using dTrailer As New dlgTrailer(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + sURL = dTrailer.ShowDialog(DBMovie.Movie.TMDBID, DBMovie.Filename) + End Using + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef studio As List(Of String)) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.GetMovieStudio + '' perche' lo crea? + + ''Dim TMDBg As New TMDBg.Scraper + ''TMDBg.IMDBURL = MySettings.IMDBURL + studio = _TMDBg.GetMovieStudios(DBMovie.Movie.ID) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupNeedsRestart() + RaiseEvent SetupNeedsRestart() + End Sub + + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + + Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberMovieScraperModule.Init + _AssemblyName = sAssemblyName + LoadSettings() + 'Must be after Load settings to retrieve the correct API key + _TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Info") + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + End If + End If + _TMDBConf = _TMDBApi.GetConfiguration() + _TMDBApiE = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey) + _TMDBConfE = _TMDBApiE.GetConfiguration() + _TMDBg = New TMDBg.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + End Sub + + Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupPostScraper + Dim Spanel As New Containers.SettingsPanel + _setupPost = New frmTMDBMediaSettingsHolder + LoadSettings() + _setupPost.cbEnabled.Checked = _PostScraperEnabled + _setupPost.chkTrailerIMDB.Checked = _MySettings.UseIMDBTrailer + _setupPost.chkTrailerTMDB.Checked = _MySettings.UseTMDBTrailer + _setupPost.cbTrailerTMDBPref.Text = _MySettings.UseTMDBTrailerPref + _setupPost.chkTrailerTMDBXBMC.Checked = _MySettings.UseTMDBTrailerXBMC + _setupPost.chkScrapePoster.Checked = ConfigScrapeModifier.Poster + _setupPost.chkScrapeFanart.Checked = ConfigScrapeModifier.Fanart + _setupPost.chkUseIMDBp.Checked = _MySettings.UseIMDB + _setupPost.chkUseIMPA.Checked = _MySettings.UseIMPA + _setupPost.chkUseMPDB.Checked = _MySettings.UseMPDB + _setupPost.chkUseFANARTTV.Checked = _MySettings.UseFANARTTV + + ' ad size from TMDB + '_setupPost.cbManualETSize.Items.Clear() + 'If Not IsNothing(_TMDBg.TMDBConf.images) Then + ' For Each aSi In _TMDBg.TMDBConf.images.poster_sizes + ' _setupPost.cbManualETSize.Items.Add(aSi) + ' Next + ' + 'End If + _setupPost.cbManualETSize.Text = _MySettings.ManualETSize + + _setupPost.txtTimeout.Text = _MySettings.TrailerTimeout.ToString + _setupPost.chkDownloadTrailer.Checked = _MySettings.DownloadTrailers + _setupPost.CheckTrailer() + _setupPost.orderChanged() + Spanel.Name = String.Concat(Me._Name, "PostScraper") + Spanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + Spanel.Prefix = "TMDBMovieMedia_" + Spanel.Order = 110 + Spanel.Parent = "pnlMovieMedia" + Spanel.Type = Master.eLang.GetString(36, "Movies", True) + Spanel.ImageIndex = If(Me._PostScraperEnabled, 9, 10) + Spanel.Panel = Me._setupPost.pnlSettings + + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return Spanel + End Function + + Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmTMDBInfoSettingsHolder + LoadSettings() + _setup.cbEnabled.Checked = _ScraperEnabled + _setup.chkTitle.Checked = ConfigOptions.bTitle + _setup.chkYear.Checked = ConfigOptions.bYear + _setup.chkMPAA.Checked = ConfigOptions.bMPAA + _setup.chkRelease.Checked = ConfigOptions.bRelease + _setup.chkRuntime.Checked = ConfigOptions.bRuntime + _setup.chkRating.Checked = ConfigOptions.bRating + _setup.chkVotes.Checked = ConfigOptions.bVotes + _setup.chkStudio.Checked = ConfigOptions.bStudio + _setup.chkTagline.Checked = ConfigOptions.bTagline + _setup.chkOutline.Checked = ConfigOptions.bOutline + _setup.chkCast.Checked = ConfigOptions.bFullCast + _setup.chkGenre.Checked = ConfigOptions.bGenre + _setup.chkTrailer.Checked = ConfigOptions.bTrailer + _setup.chkCountry.Checked = ConfigOptions.bCountry + _setup.chkCrew.Checked = ConfigOptions.bFullCrew + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + + '_setup.chkCertification.Checked = ConfigOptions.bCert + + If String.IsNullOrEmpty(_MySettings.TMDBAPIKey) Then + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + _setup.txtTMDBApiKey.Text = _MySettings.TMDBAPIKey + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.orderChanged() + If String.IsNullOrEmpty(_MySettings.FANARTTVApiKey) Then + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _setup.txtFANARTTVApiKey.Text = _MySettings.FANARTTVApiKey + + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + SPanel.Prefix = "TMDBMovieInfo_" + SPanel.Order = 110 + SPanel.Parent = "pnlMovieData" + SPanel.Type = Master.eLang.GetString(36, "Movies", True) + SPanel.ImageIndex = If(_ScraperEnabled, 9, 10) + SPanel.Panel = _setup.pnlSettings + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return SPanel + End Function + + Sub LoadSettings() + ConfigOptions.bTitle = AdvancedSettings.GetBooleanSetting("DoTitle", True) + ConfigOptions.bYear = AdvancedSettings.GetBooleanSetting("DoYear", True) + ConfigOptions.bMPAA = AdvancedSettings.GetBooleanSetting("DoMPAA", True) + ConfigOptions.bRelease = AdvancedSettings.GetBooleanSetting("DoRelease", True) + ConfigOptions.bRuntime = AdvancedSettings.GetBooleanSetting("DoRuntime", True) + ConfigOptions.bRating = AdvancedSettings.GetBooleanSetting("DoRating", True) + ConfigOptions.bVotes = AdvancedSettings.GetBooleanSetting("DoVotes", True) + ConfigOptions.bStudio = AdvancedSettings.GetBooleanSetting("DoStudio", True) + ConfigOptions.bTagline = AdvancedSettings.GetBooleanSetting("DoTagline", True) + ConfigOptions.bOutline = AdvancedSettings.GetBooleanSetting("DoOutline", True) + ConfigOptions.bPlot = AdvancedSettings.GetBooleanSetting("DoPlot", True) + ConfigOptions.bCast = AdvancedSettings.GetBooleanSetting("DoCast", True) + ConfigOptions.bDirector = AdvancedSettings.GetBooleanSetting("DoDirector", True) + ConfigOptions.bWriters = AdvancedSettings.GetBooleanSetting("DoWriters", True) + ConfigOptions.bProducers = AdvancedSettings.GetBooleanSetting("DoProducers", True) + ConfigOptions.bGenre = AdvancedSettings.GetBooleanSetting("DoGenres", True) + ConfigOptions.bTrailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + ConfigOptions.bMusicBy = AdvancedSettings.GetBooleanSetting("DoMusic", True) + ConfigOptions.bOtherCrew = AdvancedSettings.GetBooleanSetting("DoOtherCrews", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("DoFullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("DoFullCrews", True) + ConfigOptions.bTop250 = AdvancedSettings.GetBooleanSetting("DoTop250", True) + ConfigOptions.bCountry = AdvancedSettings.GetBooleanSetting("DoCountry", True) + ConfigOptions.bCert = AdvancedSettings.GetBooleanSetting("DoCert", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("FullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("FullCrew", True) + + _MySettings.TMDBAPIKey = AdvancedSettings.GetSetting("TMDBAPIKey", "Get your API Key from http://www.themoviedb.org") + _MySettings.FANARTTVApiKey = AdvancedSettings.GetSetting("FANARTTVApiKey", "Get your API Key from http://fanart.tv") + _MySettings.FallBackEng = AdvancedSettings.GetBooleanSetting("FallBackEn", False) + _MySettings.TMDBLanguage = AdvancedSettings.GetSetting("TMDBLanguage", "en") + _MySettings.DownloadTrailers = AdvancedSettings.GetBooleanSetting("DownloadTraliers", False) + + _MySettings.TrailerTimeout = Convert.ToInt32(AdvancedSettings.GetSetting("TrailerTimeout", "10")) + _MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) + _MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) + _MySettings.UseIMPA = AdvancedSettings.GetBooleanSetting("UseIMPA", False) + _MySettings.UseMPDB = AdvancedSettings.GetBooleanSetting("UseMPDB", False) + _MySettings.UseIMDB = AdvancedSettings.GetBooleanSetting("UseIMDB", False) + _MySettings.UseFANARTTV = AdvancedSettings.GetBooleanSetting("UseFANARTTV", False) + _MySettings.UseIMDBTrailer = AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", True) + _MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + _MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) + + ConfigScrapeModifier.DoSearch = True + ConfigScrapeModifier.Meta = True + ConfigScrapeModifier.NFO = True + ConfigScrapeModifier.Extra = True + ConfigScrapeModifier.Actors = True + + ConfigScrapeModifier.Poster = AdvancedSettings.GetBooleanSetting("DoPoster", True) + ConfigScrapeModifier.Fanart = AdvancedSettings.GetBooleanSetting("DoFanart", True) + ConfigScrapeModifier.Trailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + End Sub + + Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.PostScraper + 'LoadSettings() + Dim Poster As New Images + Dim Fanart As New Images + Dim pResults As Containers.ImgResult + Dim fResults As Containers.ImgResult + Dim tURL As String = String.Empty + Dim Trailer As Trailers + Dim aScrapeImages As ScrapeImages + + LoadSettings() + If String.IsNullOrEmpty(DBMovie.Movie.TMDBID) Then + _TMDBg.GetMovieID(DBMovie) + End If + Trailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim saveModifier As Structures.ScrapeModifier = Master.GlobalScrapeMod + Master.GlobalScrapeMod = Functions.ScrapeModifierAndAlso(Master.GlobalScrapeMod, ConfigScrapeModifier) + + Dim doSave As Boolean = False + + aScrapeImages = New ScrapeImages(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + If Master.GlobalScrapeMod.Poster Then + Poster.Clear() + If Poster.IsAllowedToDownload(DBMovie, Enums.ImageType.Posters) Then + pResults = New Containers.ImgResult + If aScrapeImages.GetPreferredImage(Poster, DBMovie.Movie.ID, DBMovie.Movie.TMDBID, Enums.ImageType.Posters, pResults, DBMovie.Filename, False, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Poster.Image) Then + pResults.ImagePath = Poster.SaveAsPoster(DBMovie) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(76, "A poster of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size")) + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApi, _MySettings) + pResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Posters) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + End Using + End If + End If + End If + End If + Dim didEts As Boolean + If Master.GlobalScrapeMod.Fanart Then + Fanart.Clear() + If Fanart.IsAllowedToDownload(DBMovie, Enums.ImageType.Fanart) Then + fResults = New Containers.ImgResult + didEts = True + If aScrapeImages.GetPreferredImage(Fanart, DBMovie.Movie.IMDBID, DBMovie.Movie.TMDBID, Enums.ImageType.Fanart, fResults, DBMovie.Filename, Master.GlobalScrapeMod.Extra, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Fanart.Image) Then + fResults.ImagePath = Fanart.SaveAsFanart(DBMovie) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) ' + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(78, "Fanart of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size:")) + + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApi, _MySettings) + fResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Fanart) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + End Using + End If + End If + End If + End If + If Master.GlobalScrapeMod.Trailer AndAlso _MySettings.DownloadTrailers Then + tURL = Trailer.DownloadSingleTrailer(DBMovie.Filename, DBMovie.Movie.TMDBID, DBMovie.isSingle, DBMovie.Movie.Trailer) + If Not String.IsNullOrEmpty(tURL) Then + If tURL.Substring(0, 22) = "http://www.youtube.com" Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + DBMovie.Movie.Trailer = Replace(tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + DBMovie.Movie.Trailer = tURL + End If + ElseIf tURL.Substring(0, 7) = "http://" Then + DBMovie.Movie.Trailer = tURL + Else + DBMovie.TrailerPath = tURL + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.TrailerItem, True) + End If + End If + End If + If Master.GlobalScrapeMod.Extra Then + If Master.eSettings.AutoET AndAlso DBMovie.isSingle Then + Try + aScrapeImages.GetPreferredFAasET(DBMovie.Movie.TMDBID, DBMovie.Filename) + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.ThumbsItem, True) + Catch ex As Exception + End Try + End If + End If + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then + For Each act As MediaContainers.Person In DBMovie.Movie.Actors + Dim img As New Images + img.FromWeb(act.Thumb) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If + Next + End If + Master.GlobalScrapeMod = saveModifier + Return New Interfaces.ModuleResult With {.breakChain = False, .BoolProperty = didEts} + End Function + + Sub SaveSettings() + AdvancedSettings.SetBooleanSetting("DoFullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("DoFullCrews", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DoTitle", ConfigOptions.bTitle) + AdvancedSettings.SetBooleanSetting("DoYear", ConfigOptions.bYear) + AdvancedSettings.SetBooleanSetting("DoMPAA", ConfigOptions.bMPAA) + AdvancedSettings.SetBooleanSetting("DoRelease", ConfigOptions.bRelease) + AdvancedSettings.SetBooleanSetting("DoRuntime", ConfigOptions.bRuntime) + AdvancedSettings.SetBooleanSetting("DoRating", ConfigOptions.bRating) + AdvancedSettings.SetBooleanSetting("DoVotes", ConfigOptions.bVotes) + AdvancedSettings.SetBooleanSetting("DoStudio", ConfigOptions.bStudio) + AdvancedSettings.SetBooleanSetting("DoTagline", ConfigOptions.bTagline) + AdvancedSettings.SetBooleanSetting("DoOutline", ConfigOptions.bOutline) + AdvancedSettings.SetBooleanSetting("DoPlot", ConfigOptions.bPlot) + AdvancedSettings.SetBooleanSetting("DoCast", ConfigOptions.bCast) + AdvancedSettings.SetBooleanSetting("DoDirector", ConfigOptions.bDirector) + AdvancedSettings.SetBooleanSetting("DoWriters", ConfigOptions.bWriters) + AdvancedSettings.SetBooleanSetting("DoProducers", ConfigOptions.bProducers) + AdvancedSettings.SetBooleanSetting("DoGenres", ConfigOptions.bGenre) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigOptions.bTrailer) + AdvancedSettings.SetBooleanSetting("DoMusic", ConfigOptions.bMusicBy) + AdvancedSettings.SetBooleanSetting("DoOtherCrews", ConfigOptions.bOtherCrew) + AdvancedSettings.SetBooleanSetting("DoCountry", ConfigOptions.bCountry) + AdvancedSettings.SetBooleanSetting("DoTop250", ConfigOptions.bTop250) + AdvancedSettings.SetBooleanSetting("DoCert", ConfigOptions.bCert) + + AdvancedSettings.SetBooleanSetting("FullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("FullCrew", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DownloadTraliers", _MySettings.DownloadTrailers) + + AdvancedSettings.SetSetting("TrailerTimeout", _MySettings.TrailerTimeout.ToString) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailer", _MySettings.UseTMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", _MySettings.UseTMDBTrailerXBMC) + AdvancedSettings.SetBooleanSetting("UseIMDBTrailer", _MySettings.UseIMDBTrailer) + + AdvancedSettings.SetSetting("ManualETSize", _MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("UseTMDBTrailerPref", _MySettings.UseTMDBTrailerPref.ToString) + + AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) + AdvancedSettings.SetBooleanSetting("DoFanart", ConfigScrapeModifier.Fanart) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigScrapeModifier.Trailer) + + AdvancedSettings.SetSetting("TMDBAPIKey", _MySettings.TMDBAPIKey) + AdvancedSettings.SetSetting("FANARTTVApiKey", _MySettings.FANARTTVApiKey) + AdvancedSettings.SetBooleanSetting("FallBackEn", _MySettings.FallBackEng) + AdvancedSettings.SetSetting("TMDBLanguage", _MySettings.TMDBLanguage) + AdvancedSettings.SetBooleanSetting("UseIMPA", _MySettings.UseIMPA) + AdvancedSettings.SetBooleanSetting("UseMPDB", _MySettings.UseMPDB) + AdvancedSettings.SetBooleanSetting("UseIMDB", _MySettings.UseIMDB) + AdvancedSettings.SetBooleanSetting("UseFANARTTV", _MySettings.UseFANARTTV) + End Sub + + Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupPostScraper + _MySettings.DownloadTrailers = _setupPost.chkDownloadTrailer.Checked + _MySettings.UseIMDBTrailer = _setupPost.chkTrailerIMDB.Checked + _MySettings.UseTMDBTrailer = _setupPost.chkTrailerTMDB.Checked + _MySettings.UseTMDBTrailerXBMC = _setupPost.chkTrailerTMDBXBMC.Checked + _MySettings.TrailerTimeout = Convert.ToInt32(_setupPost.txtTimeout.Text) + _MySettings.ManualETSize = _setupPost.cbManualETSize.Text + _MySettings.UseTMDBTrailerPref = _setupPost.cbTrailerTMDBPref.Text + _MySettings.UseIMDB = _setupPost.chkUseIMDBp.Checked + _MySettings.UseIMPA = _setupPost.chkUseIMPA.Checked + _MySettings.UseMPDB = _setupPost.chkUseMPDB.Checked + _MySettings.UseFANARTTV = _setupPost.chkUseFANARTTV.Checked + ConfigScrapeModifier.Poster = _setupPost.chkScrapePoster.Checked + ConfigScrapeModifier.Fanart = _setupPost.chkScrapeFanart.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + RemoveHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + _setupPost.Dispose() + End If + End Sub + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupScraper + If Not String.IsNullOrEmpty(_setup.txtTMDBApiKey.Text) Then + _MySettings.TMDBAPIKey = _setup.txtTMDBApiKey.Text + Else + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + If Not String.IsNullOrEmpty(_setup.txtFANARTTVApiKey.Text) Then + _MySettings.FANARTTVApiKey = _setup.txtFANARTTVApiKey.Text + Else + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + ConfigOptions.bTitle = _setup.chkTitle.Checked + ConfigOptions.bYear = _setup.chkYear.Checked + ConfigOptions.bMPAA = _setup.chkMPAA.Checked + ConfigOptions.bRelease = _setup.chkRelease.Checked + ConfigOptions.bRuntime = _setup.chkRuntime.Checked + ConfigOptions.bRating = _setup.chkRating.Checked + ConfigOptions.bVotes = _setup.chkVotes.Checked + ConfigOptions.bStudio = _setup.chkStudio.Checked + ConfigOptions.bTagline = _setup.chkTagline.Checked + ConfigOptions.bOutline = _setup.chkOutline.Checked + ConfigOptions.bPlot = False + ConfigOptions.bCast = _setup.chkCast.Checked + ConfigOptions.bDirector = _setup.chkCrew.Checked + ConfigOptions.bWriters = _setup.chkCrew.Checked + ConfigOptions.bProducers = _setup.chkCrew.Checked + ConfigOptions.bGenre = _setup.chkGenre.Checked + ConfigOptions.bTrailer = _setup.chkTrailer.Checked + ConfigOptions.bMusicBy = _setup.chkCrew.Checked + ConfigOptions.bOtherCrew = _setup.chkCrew.Checked + ConfigOptions.bCountry = _setup.chkCountry.Checked + ConfigOptions.bTop250 = False + ConfigOptions.bFullCrew = _setup.chkCrew.Checked + ConfigOptions.bFullCast = _setup.chkCast.Checked + ConfigOptions.bCert = ConfigOptions.bMPAA + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + RemoveHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + _setup.Dispose() + End If + End Sub + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.Scraper + 'LoadSettings() + ''TMDBg.IMDBURL = MySettings.IMDBURL + ''TMDBg.UseOFDBTitle = MySettings.UseOFDBTitle + ''TMDBg.UseOFDBOutline = MySettings.UseOFDBOutline + ''TMDBg.UseOFDBPlot = MySettings.UseOFDBPlot + ''TMDBg.UseOFDBGenre = MySettings.UseOFDBGenre + Dim tTitle As String = String.Empty + Dim OldTitle As String = DBMovie.Movie.Title + + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + + If Master.GlobalScrapeMod.NFO AndAlso Not Master.GlobalScrapeMod.DoSearch Then + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, Options.bFullCrew, Options.bFullCast, False, Options, False) + ElseIf Not ScrapeType = Enums.ScrapeType.SingleScrape Then + DBMovie.Movie = _TMDBg.GetSearchMovieInfo(DBMovie.Movie.Title, DBMovie, ScrapeType, Options) + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + If ScrapeType = Enums.ScrapeType.SingleScrape AndAlso Master.GlobalScrapeMod.DoSearch _ + AndAlso ModulesManager.Instance.externalScrapersModules.OrderBy(Function(y) y.ScraperOrder).FirstOrDefault(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled).AssemblyName = _AssemblyName Then + DBMovie.Movie.IMDBID = String.Empty + DBMovie.ClearExtras = True + DBMovie.PosterPath = String.Empty + DBMovie.FanartPath = String.Empty + DBMovie.TrailerPath = String.Empty + DBMovie.ExtraPath = String.Empty + DBMovie.SubPath = String.Empty + DBMovie.NfoPath = String.Empty + DBMovie.Movie.Clear() + End If + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + Select Case ScrapeType + Case Enums.ScrapeType.FilterAuto, Enums.ScrapeType.FullAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.UpdateAuto + Return New Interfaces.ModuleResult With {.breakChain = False} + End Select + If ScrapeType = Enums.ScrapeType.SingleScrape Then + Using dSearch As New dlgTMDBSearchResults(_MySettings, Me._TMDBg) + '' dSearch.IMDBURL = MySettings.IMDBURL + Dim tmpTitle As String = DBMovie.Movie.Title + If String.IsNullOrEmpty(tmpTitle) Then + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name, False) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name, False) + Else + tmpTitle = StringUtils.FilterName(If(DBMovie.isSingle, Directory.GetParent(DBMovie.Filename).Name, Path.GetFileNameWithoutExtension(DBMovie.Filename))) + End If + End If + Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) + If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID + End If + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + + Master.currMovie.ClearExtras = True + Master.currMovie.PosterPath = String.Empty + Master.currMovie.FanartPath = String.Empty + Master.currMovie.TrailerPath = String.Empty + Master.currMovie.ExtraPath = String.Empty + Master.currMovie.SubPath = String.Empty + Master.currMovie.NfoPath = String.Empty + + + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, filterOptions.bFullCrew, filterOptions.bFullCast, False, filterOptions, False) + End If + Else + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End Using + End If + End If + + If Not String.IsNullOrEmpty(DBMovie.Movie.Title) Then + tTitle = StringUtils.FilterTokens(DBMovie.Movie.Title) + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = tTitle + If Master.eSettings.DisplayYear AndAlso Not String.IsNullOrEmpty(DBMovie.Movie.Year) Then + DBMovie.ListTitle = String.Format("{0} ({1})", tTitle, DBMovie.Movie.Year) + Else + DBMovie.ListTitle = tTitle + End If + Else + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name) + Else + If DBMovie.UseFolder AndAlso DBMovie.isSingle Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(DBMovie.Filename).Name) + Else + DBMovie.ListTitle = StringUtils.FilterName(Path.GetFileNameWithoutExtension(DBMovie.Filename)) + End If + End If + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = DBMovie.ListTitle + End If + + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function SelectImageOfType(ByRef mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.SelectImageOfType + If String.IsNullOrEmpty(mMovie.Movie.TMDBID) Then + _TMDBg.GetMovieID(mMovie) + End If + If preload AndAlso _DLType = Enums.ImageType.Fanart AndAlso Not IsNothing(dFImgSelect) Then + pResults = dFImgSelect.ShowDialog() + dFImgSelect = Nothing + Else + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + If preload Then + dFImgSelect = New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + dFImgSelect.PreLoad(mMovie, Enums.ImageType.Fanart, _isEdit) + End If + '' dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(mMovie, _DLType, _isEdit) + End Using + End If + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + Public Sub PostScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.PostScraperOrderChanged + _setup.orderChanged() + End Sub + + Public Sub ScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.ScraperOrderChanged + _setupPost.orderChanged() + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Structure sMySettings + +#Region "Fields" + Dim DownloadTrailers As Boolean + Dim TrailerTimeout As Integer + Dim UseTMDBTrailer As Boolean + Dim UseTMDBTrailerXBMC As Boolean + Dim ManualETSize As String + Dim UseTMDBTrailerPref As String + Dim TMDBAPIKey As String + Dim FANARTTVApiKey As String + Dim TMDBLanguage As String + Dim FallBackEng As Boolean + Dim UseIMDB As Boolean + Dim UseIMPA As Boolean + Dim UseMPDB As Boolean + Dim UseFANARTTV As Boolean + Dim UseIMDBTrailer As Boolean +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml new file mode 100644 index 0000000..cb66cd5 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml @@ -0,0 +1,902 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="1">tmdb1</string> + <string id="2">tmdb2</string> + <string id="3">tmdb3</string> + <string id="4">tmdb4</string> + <string id="5">tmdb5</string> + <string id="6">tmdb6</string> + <string id="7">tmdb7</string> + <string id="8">tmdb8</string> + <string id="9">tmdb9</string> + <string id="10">tmdb10</string> + <string id="11">tmdb11</string> + <string id="12">tmdb12</string> + <string id="13">tmdb13</string> + <string id="14">tmdb14</string> + <string id="15">tmdb15</string> + <string id="16">tmdb16</string> + <string id="17">tmdb17</string> + <string id="18">tmdb18</string> + <string id="19">tmdb19</string> + <string id="20">tmdb20</string> + <string id="21">tmdb21</string> + <string id="22">tmdb22</string> + <string id="23">tmdb23</string> + <string id="24">tmdb24</string> + <string id="25">tmdb25</string> + <string id="26">tmdb26</string> + <string id="27">tmdb27</string> + <string id="28">tmdb28</string> + <string id="29">tmdb29</string> + <string id="30">tmdb30</string> + <string id="31">tmdb31</string> + <string id="32">tmdb32</string> + <string id="33">tmdb33</string> + <string id="34">tmdb34</string> + <string id="35">tmdb35</string> + <string id="36">tmdb36</string> + <string id="37">tmdb37</string> + <string id="38">tmdb38</string> + <string id="39">tmdb39</string> + <string id="40">tmdb40</string> + <string id="41">tmdb41</string> + <string id="42">tmdb42</string> + <string id="43">tmdb43</string> + <string id="44">tmdb44</string> + <string id="45">tmdb45</string> + <string id="46">tmdb46</string> + <string id="47">tmdb47</string> + <string id="48">tmdb48</string> + <string id="49">tmdb49</string> + <string id="50">tmdb50</string> + <string id="51">tmdb51</string> + <string id="52">tmdb52</string> + <string id="53">tmdb53</string> + <string id="54">tmdb54</string> + <string id="55">tmdb55</string> + <string id="56">tmdb56</string> + <string id="57">tmdb57</string> + <string id="58">tmdb58</string> + <string id="59">tmdb59</string> + <string id="60">tmdb60</string> + <string id="61">tmdb61</string> + <string id="62">tmdb62</string> + <string id="63">tmdb63</string> + <string id="64">tmdb64</string> + <string id="65">tmdb65</string> + <string id="66">tmdb66</string> + <string id="67">tmdb67</string> + <string id="68">tmdb68</string> + <string id="69">tmdb69</string> + <string id="70">tmdb70</string> + <string id="71">tmdb71</string> + <string id="72">tmdb72</string> + <string id="73">tmdb73</string> + <string id="74">tmdb74</string> + <string id="75">tmdb75</string> + <string id="76">tmdb76</string> + <string id="77">tmdb77</string> + <string id="78">tmdb78</string> + <string id="79">tmdb79</string> + <string id="80">tmdb80</string> + <string id="81">tmdb81</string> + <string id="82">tmdb82</string> + <string id="83">tmdb83</string> + <string id="84">tmdb84</string> + <string id="85">tmdb85</string> + <string id="86">tmdb86</string> + <string id="87">tmdb87</string> + <string id="88">tmdb88</string> + <string id="89">tmdb89</string> + <string id="90">tmdb90</string> + <string id="91">tmdb91</string> + <string id="92">tmdb92</string> + <string id="93">tmdb93</string> + <string id="94">tmdb94</string> + <string id="95">tmdb95</string> + <string id="96">tmdb96</string> + <string id="97">tmdb97</string> + <string id="98">tmdb98</string> + <string id="99">tmdb99</string> + <string id="100">tmdb100</string> + <string id="101">tmdb101</string> + <string id="102">tmdb102</string> + <string id="103">tmdb103</string> + <string id="104">tmdb104</string> + <string id="105">tmdb105</string> + <string id="106">tmdb106</string> + <string id="107">tmdb107</string> + <string id="108">tmdb108</string> + <string id="109">tmdb109</string> + <string id="110">tmdb110</string> + <string id="111">tmdb111</string> + <string id="112">tmdb112</string> + <string id="113">tmdb113</string> + <string id="114">tmdb114</string> + <string id="115">tmdb115</string> + <string id="116">tmdb116</string> + <string id="117">tmdb117</string> + <string id="118">tmdb118</string> + <string id="119">tmdb119</string> + <string id="120">tmdb120</string> + <string id="121">tmdb121</string> + <string id="122">tmdb122</string> + <string id="123">tmdb123</string> + <string id="124">tmdb124</string> + <string id="125">tmdb125</string> + <string id="126">tmdb126</string> + <string id="127">tmdb127</string> + <string id="128">tmdb128</string> + <string id="129">tmdb129</string> + <string id="130">tmdb130</string> + <string id="131">tmdb131</string> + <string id="132">tmdb132</string> + <string id="133">tmdb133</string> + <string id="134">tmdb134</string> + <string id="135">tmdb135</string> + <string id="136">tmdb136</string> + <string id="137">tmdb137</string> + <string id="138">tmdb138</string> + <string id="139">tmdb139</string> + <string id="140">tmdb140</string> + <string id="141">tmdb141</string> + <string id="142">tmdb142</string> + <string id="143">tmdb143</string> + <string id="144">tmdb144</string> + <string id="145">tmdb145</string> + <string id="146">tmdb146</string> + <string id="147">tmdb147</string> + <string id="148">tmdb148</string> + <string id="149">tmdb149</string> + <string id="150">tmdb150</string> + <string id="151">tmdb151</string> + <string id="152">tmdb152</string> + <string id="153">tmdb153</string> + <string id="154">tmdb154</string> + <string id="155">tmdb155</string> + <string id="156">tmdb156</string> + <string id="157">tmdb157</string> + <string id="158">tmdb158</string> + <string id="159">tmdb159</string> + <string id="160">tmdb160</string> + <string id="161">tmdb161</string> + <string id="162">tmdb162</string> + <string id="163">tmdb163</string> + <string id="164">tmdb164</string> + <string id="165">tmdb165</string> + <string id="166">tmdb166</string> + <string id="167">tmdb167</string> + <string id="168">tmdb168</string> + <string id="169">tmdb169</string> + <string id="170">tmdb170</string> + <string id="171">tmdb171</string> + <string id="172">tmdb172</string> + <string id="173">tmdb173</string> + <string id="174">tmdb174</string> + <string id="175">tmdb175</string> + <string id="176">tmdb176</string> + <string id="177">tmdb177</string> + <string id="178">tmdb178</string> + <string id="179">tmdb179</string> + <string id="180">tmdb180</string> + <string id="181">tmdb181</string> + <string id="182">tmdb182</string> + <string id="183">tmdb183</string> + <string id="184">tmdb184</string> + <string id="185">tmdb185</string> + <string id="186">tmdb186</string> + <string id="187">tmdb187</string> + <string id="188">tmdb188</string> + <string id="189">tmdb189</string> + <string id="190">tmdb190</string> + <string id="191">tmdb191</string> + <string id="192">tmdb192</string> + <string id="193">tmdb193</string> + <string id="194">tmdb194</string> + <string id="195">tmdb195</string> + <string id="196">tmdb196</string> + <string id="197">tmdb197</string> + <string id="198">tmdb198</string> + <string id="199">tmdb199</string> + <string id="200">tmdb200</string> + <string id="201">tmdb201</string> + <string id="202">tmdb202</string> + <string id="203">tmdb203</string> + <string id="204">tmdb204</string> + <string id="205">tmdb205</string> + <string id="206">tmdb206</string> + <string id="207">tmdb207</string> + <string id="208">tmdb208</string> + <string id="209">tmdb209</string> + <string id="210">tmdb210</string> + <string id="211">tmdb211</string> + <string id="212">tmdb212</string> + <string id="213">tmdb213</string> + <string id="214">tmdb214</string> + <string id="215">tmdb215</string> + <string id="216">tmdb216</string> + <string id="217">tmdb217</string> + <string id="218">tmdb218</string> + <string id="219">tmdb219</string> + <string id="220">tmdb220</string> + <string id="221">tmdb221</string> + <string id="222">tmdb222</string> + <string id="223">tmdb223</string> + <string id="224">tmdb224</string> + <string id="225">tmdb225</string> + <string id="226">tmdb226</string> + <string id="227">tmdb227</string> + <string id="228">tmdb228</string> + <string id="229">tmdb229</string> + <string id="230">tmdb230</string> + <string id="231">tmdb231</string> + <string id="232">tmdb232</string> + <string id="233">tmdb233</string> + <string id="234">tmdb234</string> + <string id="235">tmdb235</string> + <string id="236">tmdb236</string> + <string id="237">tmdb237</string> + <string id="238">tmdb238</string> + <string id="239">tmdb239</string> + <string id="240">tmdb240</string> + <string id="241">tmdb241</string> + <string id="242">tmdb242</string> + <string id="243">tmdb243</string> + <string id="244">tmdb244</string> + <string id="245">tmdb245</string> + <string id="246">tmdb246</string> + <string id="247">tmdb247</string> + <string id="248">tmdb248</string> + <string id="249">tmdb249</string> + <string id="250">tmdb250</string> + <string id="251">tmdb251</string> + <string id="252">tmdb252</string> + <string id="253">tmdb253</string> + <string id="254">tmdb254</string> + <string id="255">tmdb255</string> + <string id="256">tmdb256</string> + <string id="257">tmdb257</string> + <string id="258">tmdb258</string> + <string id="259">tmdb259</string> + <string id="260">tmdb260</string> + <string id="261">tmdb261</string> + <string id="262">tmdb262</string> + <string id="263">tmdb263</string> + <string id="264">tmdb264</string> + <string id="265">tmdb265</string> + <string id="266">tmdb266</string> + <string id="267">tmdb267</string> + <string id="268">tmdb268</string> + <string id="269">tmdb269</string> + <string id="270">tmdb270</string> + <string id="271">tmdb271</string> + <string id="272">tmdb272</string> + <string id="273">tmdb273</string> + <string id="274">tmdb274</string> + <string id="275">tmdb275</string> + <string id="276">tmdb276</string> + <string id="277">tmdb277</string> + <string id="278">tmdb278</string> + <string id="279">tmdb279</string> + <string id="280">tmdb280</string> + <string id="281">tmdb281</string> + <string id="282">tmdb282</string> + <string id="283">tmdb283</string> + <string id="284">tmdb284</string> + <string id="285">tmdb285</string> + <string id="286">tmdb286</string> + <string id="287">tmdb287</string> + <string id="288">tmdb288</string> + <string id="289">tmdb289</string> + <string id="290">tmdb290</string> + <string id="291">tmdb291</string> + <string id="292">tmdb292</string> + <string id="293">tmdb293</string> + <string id="294">tmdb294</string> + <string id="295">tmdb295</string> + <string id="296">tmdb296</string> + <string id="297">tmdb297</string> + <string id="298">tmdb298</string> + <string id="299">tmdb299</string> + <string id="300">tmdb300</string> + <string id="301">tmdb301</string> + <string id="302">tmdb302</string> + <string id="303">tmdb303</string> + <string id="304">tmdb304</string> + <string id="305">tmdb305</string> + <string id="306">tmdb306</string> + <string id="307">tmdb307</string> + <string id="308">tmdb308</string> + <string id="309">tmdb309</string> + <string id="310">tmdb310</string> + <string id="311">tmdb311</string> + <string id="312">tmdb312</string> + <string id="313">tmdb313</string> + <string id="314">tmdb314</string> + <string id="315">tmdb315</string> + <string id="316">tmdb316</string> + <string id="317">tmdb317</string> + <string id="318">tmdb318</string> + <string id="319">tmdb319</string> + <string id="320">tmdb320</string> + <string id="321">tmdb321</string> + <string id="322">tmdb322</string> + <string id="323">tmdb323</string> + <string id="324">tmdb324</string> + <string id="325">tmdb325</string> + <string id="326">tmdb326</string> + <string id="327">tmdb327</string> + <string id="328">tmdb328</string> + <string id="329">tmdb329</string> + <string id="330">tmdb330</string> + <string id="331">tmdb331</string> + <string id="332">tmdb332</string> + <string id="333">tmdb333</string> + <string id="334">tmdb334</string> + <string id="335">tmdb335</string> + <string id="336">tmdb336</string> + <string id="337">tmdb337</string> + <string id="338">tmdb338</string> + <string id="339">tmdb339</string> + <string id="340">tmdb340</string> + <string id="341">tmdb341</string> + <string id="342">tmdb342</string> + <string id="343">tmdb343</string> + <string id="344">tmdb344</string> + <string id="345">tmdb345</string> + <string id="346">tmdb346</string> + <string id="347">tmdb347</string> + <string id="348">tmdb348</string> + <string id="349">tmdb349</string> + <string id="350">tmdb350</string> + <string id="351">tmdb351</string> + <string id="352">tmdb352</string> + <string id="353">tmdb353</string> + <string id="354">tmdb354</string> + <string id="355">tmdb355</string> + <string id="356">tmdb356</string> + <string id="357">tmdb357</string> + <string id="358">tmdb358</string> + <string id="359">tmdb359</string> + <string id="360">tmdb360</string> + <string id="361">tmdb361</string> + <string id="362">tmdb362</string> + <string id="363">tmdb363</string> + <string id="364">tmdb364</string> + <string id="365">tmdb365</string> + <string id="366">tmdb366</string> + <string id="367">tmdb367</string> + <string id="368">tmdb368</string> + <string id="369">tmdb369</string> + <string id="370">tmdb370</string> + <string id="371">tmdb371</string> + <string id="372">tmdb372</string> + <string id="373">tmdb373</string> + <string id="374">tmdb374</string> + <string id="375">tmdb375</string> + <string id="376">tmdb376</string> + <string id="377">tmdb377</string> + <string id="378">tmdb378</string> + <string id="379">tmdb379</string> + <string id="380">tmdb380</string> + <string id="381">tmdb381</string> + <string id="382">tmdb382</string> + <string id="383">tmdb383</string> + <string id="384">tmdb384</string> + <string id="385">tmdb385</string> + <string id="386">tmdb386</string> + <string id="387">tmdb387</string> + <string id="388">tmdb388</string> + <string id="389">tmdb389</string> + <string id="390">tmdb390</string> + <string id="391">tmdb391</string> + <string id="392">tmdb392</string> + <string id="393">tmdb393</string> + <string id="394">tmdb394</string> + <string id="395">tmdb395</string> + <string id="396">tmdb396</string> + <string id="397">tmdb397</string> + <string id="398">tmdb398</string> + <string id="399">tmdb399</string> + <string id="400">tmdb400</string> + <string id="401">tmdb401</string> + <string id="402">tmdb402</string> + <string id="403">tmdb403</string> + <string id="404">tmdb404</string> + <string id="405">tmdb405</string> + <string id="406">tmdb406</string> + <string id="407">tmdb407</string> + <string id="408">tmdb408</string> + <string id="409">tmdb409</string> + <string id="410">tmdb410</string> + <string id="411">tmdb411</string> + <string id="412">tmdb412</string> + <string id="413">tmdb413</string> + <string id="414">tmdb414</string> + <string id="415">tmdb415</string> + <string id="416">tmdb416</string> + <string id="417">tmdb417</string> + <string id="418">tmdb418</string> + <string id="419">tmdb419</string> + <string id="420">tmdb420</string> + <string id="421">tmdb421</string> + <string id="422">tmdb422</string> + <string id="423">tmdb423</string> + <string id="424">tmdb424</string> + <string id="425">tmdb425</string> + <string id="426">tmdb426</string> + <string id="427">tmdb427</string> + <string id="428">tmdb428</string> + <string id="429">tmdb429</string> + <string id="430">tmdb430</string> + <string id="431">tmdb431</string> + <string id="432">tmdb432</string> + <string id="433">tmdb433</string> + <string id="434">tmdb434</string> + <string id="435">tmdb435</string> + <string id="436">tmdb436</string> + <string id="437">tmdb437</string> + <string id="438">tmdb438</string> + <string id="439">tmdb439</string> + <string id="440">tmdb440</string> + <string id="441">tmdb441</string> + <string id="442">tmdb442</string> + <string id="443">tmdb443</string> + <string id="444">tmdb444</string> + <string id="445">tmdb445</string> + <string id="446">tmdb446</string> + <string id="447">tmdb447</string> + <string id="448">tmdb448</string> + <string id="449">tmdb449</string> + <string id="450">tmdb450</string> + <string id="451">tmdb451</string> + <string id="452">tmdb452</string> + <string id="453">tmdb453</string> + <string id="454">tmdb454</string> + <string id="455">tmdb455</string> + <string id="456">tmdb456</string> + <string id="457">tmdb457</string> + <string id="458">tmdb458</string> + <string id="459">tmdb459</string> + <string id="460">tmdb460</string> + <string id="461">tmdb461</string> + <string id="462">tmdb462</string> + <string id="463">tmdb463</string> + <string id="464">tmdb464</string> + <string id="465">tmdb465</string> + <string id="466">tmdb466</string> + <string id="467">tmdb467</string> + <string id="468">tmdb468</string> + <string id="469">tmdb469</string> + <string id="470">tmdb470</string> + <string id="471">tmdb471</string> + <string id="472">tmdb472</string> + <string id="473">tmdb473</string> + <string id="474">tmdb474</string> + <string id="475">tmdb475</string> + <string id="476">tmdb476</string> + <string id="477">tmdb477</string> + <string id="478">tmdb478</string> + <string id="479">tmdb479</string> + <string id="480">tmdb480</string> + <string id="481">tmdb481</string> + <string id="482">tmdb482</string> + <string id="483">tmdb483</string> + <string id="484">tmdb484</string> + <string id="485">tmdb485</string> + <string id="486">tmdb486</string> + <string id="487">tmdb487</string> + <string id="488">tmdb488</string> + <string id="489">tmdb489</string> + <string id="490">tmdb490</string> + <string id="491">tmdb491</string> + <string id="492">tmdb492</string> + <string id="493">tmdb493</string> + <string id="494">tmdb494</string> + <string id="495">tmdb495</string> + <string id="496">tmdb496</string> + <string id="497">tmdb497</string> + <string id="498">tmdb498</string> + <string id="499">tmdb499</string> + <string id="500">tmdb500</string> + <string id="501">tmdb501</string> + <string id="502">tmdb502</string> + <string id="503">tmdb503</string> + <string id="504">tmdb504</string> + <string id="505">tmdb505</string> + <string id="506">tmdb506</string> + <string id="507">tmdb507</string> + <string id="508">tmdb508</string> + <string id="509">tmdb509</string> + <string id="510">tmdb510</string> + <string id="511">tmdb511</string> + <string id="512">tmdb512</string> + <string id="513">tmdb513</string> + <string id="514">tmdb514</string> + <string id="515">tmdb515</string> + <string id="516">tmdb516</string> + <string id="517">tmdb517</string> + <string id="518">tmdb518</string> + <string id="519">tmdb519</string> + <string id="520">tmdb520</string> + <string id="521">tmdb521</string> + <string id="522">tmdb522</string> + <string id="523">tmdb523</string> + <string id="524">tmdb524</string> + <string id="525">tmdb525</string> + <string id="526">tmdb526</string> + <string id="527">tmdb527</string> + <string id="528">tmdb528</string> + <string id="529">tmdb529</string> + <string id="530">tmdb530</string> + <string id="531">tmdb531</string> + <string id="532">tmdb532</string> + <string id="533">tmdb533</string> + <string id="534">tmdb534</string> + <string id="535">tmdb535</string> + <string id="536">tmdb536</string> + <string id="537">tmdb537</string> + <string id="538">tmdb538</string> + <string id="539">tmdb539</string> + <string id="540">tmdb540</string> + <string id="541">tmdb541</string> + <string id="542">tmdb542</string> + <string id="543">tmdb543</string> + <string id="544">tmdb544</string> + <string id="545">tmdb545</string> + <string id="546">tmdb546</string> + <string id="547">tmdb547</string> + <string id="548">tmdb548</string> + <string id="549">tmdb549</string> + <string id="550">tmdb550</string> + <string id="551">tmdb551</string> + <string id="552">tmdb552</string> + <string id="553">tmdb553</string> + <string id="554">tmdb554</string> + <string id="555">tmdb555</string> + <string id="556">tmdb556</string> + <string id="557">tmdb557</string> + <string id="558">tmdb558</string> + <string id="559">tmdb559</string> + <string id="560">tmdb560</string> + <string id="561">tmdb561</string> + <string id="562">tmdb562</string> + <string id="563">tmdb563</string> + <string id="564">tmdb564</string> + <string id="565">tmdb565</string> + <string id="566">tmdb566</string> + <string id="567">tmdb567</string> + <string id="568">tmdb568</string> + <string id="569">tmdb569</string> + <string id="570">tmdb570</string> + <string id="571">tmdb571</string> + <string id="572">tmdb572</string> + <string id="573">tmdb573</string> + <string id="574">tmdb574</string> + <string id="575">tmdb575</string> + <string id="576">tmdb576</string> + <string id="577">tmdb577</string> + <string id="578">tmdb578</string> + <string id="579">tmdb579</string> + <string id="580">tmdb580</string> + <string id="581">tmdb581</string> + <string id="582">tmdb582</string> + <string id="583">tmdb583</string> + <string id="584">tmdb584</string> + <string id="585">tmdb585</string> + <string id="586">tmdb586</string> + <string id="587">tmdb587</string> + <string id="588">tmdb588</string> + <string id="589">tmdb589</string> + <string id="590">tmdb590</string> + <string id="591">tmdb591</string> + <string id="592">tmdb592</string> + <string id="593">tmdb593</string> + <string id="594">tmdb594</string> + <string id="595">tmdb595</string> + <string id="596">tmdb596</string> + <string id="597">tmdb597</string> + <string id="598">tmdb598</string> + <string id="599">tmdb599</string> + <string id="600">tmdb600</string> + <string id="601">tmdb601</string> + <string id="602">tmdb602</string> + <string id="603">tmdb603</string> + <string id="604">tmdb604</string> + <string id="605">tmdb605</string> + <string id="606">tmdb606</string> + <string id="607">tmdb607</string> + <string id="608">tmdb608</string> + <string id="609">tmdb609</string> + <string id="610">tmdb610</string> + <string id="611">tmdb611</string> + <string id="612">tmdb612</string> + <string id="613">tmdb613</string> + <string id="614">tmdb614</string> + <string id="615">tmdb615</string> + <string id="616">tmdb616</string> + <string id="617">tmdb617</string> + <string id="618">tmdb618</string> + <string id="619">tmdb619</string> + <string id="620">tmdb620</string> + <string id="621">tmdb621</string> + <string id="622">tmdb622</string> + <string id="623">tmdb623</string> + <string id="624">tmdb624</string> + <string id="625">tmdb625</string> + <string id="626">tmdb626</string> + <string id="627">tmdb627</string> + <string id="628">tmdb628</string> + <string id="629">tmdb629</string> + <string id="630">tmdb630</string> + <string id="631">tmdb631</string> + <string id="632">tmdb632</string> + <string id="633">tmdb633</string> + <string id="634">tmdb634</string> + <string id="635">tmdb635</string> + <string id="636">tmdb636</string> + <string id="637">tmdb637</string> + <string id="638">tmdb638</string> + <string id="639">tmdb639</string> + <string id="640">tmdb640</string> + <string id="641">tmdb641</string> + <string id="642">tmdb642</string> + <string id="643">tmdb643</string> + <string id="644">tmdb644</string> + <string id="645">tmdb645</string> + <string id="646">tmdb646</string> + <string id="647">tmdb647</string> + <string id="648">tmdb648</string> + <string id="649">tmdb649</string> + <string id="650">tmdb650</string> + <string id="651">tmdb651</string> + <string id="652">tmdb652</string> + <string id="653">tmdb653</string> + <string id="654">tmdb654</string> + <string id="655">tmdb655</string> + <string id="656">tmdb656</string> + <string id="657">tmdb657</string> + <string id="658">tmdb658</string> + <string id="659">tmdb659</string> + <string id="660">tmdb660</string> + <string id="661">tmdb661</string> + <string id="662">tmdb662</string> + <string id="663">tmdb663</string> + <string id="664">tmdb664</string> + <string id="665">tmdb665</string> + <string id="666">tmdb666</string> + <string id="667">tmdb667</string> + <string id="668">tmdb668</string> + <string id="669">tmdb669</string> + <string id="670">tmdb670</string> + <string id="671">tmdb671</string> + <string id="672">tmdb672</string> + <string id="673">tmdb673</string> + <string id="674">tmdb674</string> + <string id="675">tmdb675</string> + <string id="676">tmdb676</string> + <string id="677">tmdb677</string> + <string id="678">tmdb678</string> + <string id="679">tmdb679</string> + <string id="680">tmdb680</string> + <string id="681">tmdb681</string> + <string id="682">tmdb682</string> + <string id="683">tmdb683</string> + <string id="684">tmdb684</string> + <string id="685">tmdb685</string> + <string id="686">tmdb686</string> + <string id="687">tmdb687</string> + <string id="688">tmdb688</string> + <string id="689">tmdb689</string> + <string id="690">tmdb690</string> + <string id="691">tmdb691</string> + <string id="692">tmdb692</string> + <string id="693">tmdb693</string> + <string id="694">tmdb694</string> + <string id="695">tmdb695</string> + <string id="696">tmdb696</string> + <string id="697">tmdb697</string> + <string id="698">tmdb698</string> + <string id="699">tmdb699</string> + <string id="700">tmdb700</string> + <string id="701">tmdb701</string> + <string id="702">tmdb702</string> + <string id="703">tmdb703</string> + <string id="704">tmdb704</string> + <string id="705">tmdb705</string> + <string id="706">tmdb706</string> + <string id="707">tmdb707</string> + <string id="708">tmdb708</string> + <string id="709">tmdb709</string> + <string id="710">tmdb710</string> + <string id="711">tmdb711</string> + <string id="712">tmdb712</string> + <string id="713">tmdb713</string> + <string id="714">tmdb714</string> + <string id="715">tmdb715</string> + <string id="716">tmdb716</string> + <string id="717">tmdb717</string> + <string id="718">tmdb718</string> + <string id="719">tmdb719</string> + <string id="720">tmdb720</string> + <string id="721">tmdb721</string> + <string id="722">tmdb722</string> + <string id="723">tmdb723</string> + <string id="724">tmdb724</string> + <string id="725">tmdb725</string> + <string id="726">tmdb726</string> + <string id="727">tmdb727</string> + <string id="728">tmdb728</string> + <string id="729">tmdb729</string> + <string id="730">tmdb730</string> + <string id="731">tmdb731</string> + <string id="732">tmdb732</string> + <string id="733">tmdb733</string> + <string id="734">tmdb734</string> + <string id="735">tmdb735</string> + <string id="736">tmdb736</string> + <string id="737">tmdb737</string> + <string id="738">tmdb738</string> + <string id="739">tmdb739</string> + <string id="740">tmdb740</string> + <string id="741">tmdb741</string> + <string id="742">tmdb742</string> + <string id="743">tmdb743</string> + <string id="744">tmdb744</string> + <string id="745">tmdb745</string> + <string id="746">tmdb746</string> + <string id="747">tmdb747</string> + <string id="748">tmdb748</string> + <string id="749">tmdb749</string> + <string id="750">tmdb750</string> + <string id="751">tmdb751</string> + <string id="752">tmdb752</string> + <string id="753">tmdb753</string> + <string id="754">tmdb754</string> + <string id="755">tmdb755</string> + <string id="756">tmdb756</string> + <string id="757">tmdb757</string> + <string id="758">tmdb758</string> + <string id="759">tmdb759</string> + <string id="760">tmdb760</string> + <string id="761">tmdb761</string> + <string id="762">tmdb762</string> + <string id="763">tmdb763</string> + <string id="764">tmdb764</string> + <string id="765">tmdb765</string> + <string id="766">tmdb766</string> + <string id="767">tmdb767</string> + <string id="768">tmdb768</string> + <string id="769">tmdb769</string> + <string id="770">tmdb770</string> + <string id="771">tmdb771</string> + <string id="772">tmdb772</string> + <string id="773">tmdb773</string> + <string id="774">tmdb774</string> + <string id="775">tmdb775</string> + <string id="776">tmdb776</string> + <string id="777">tmdb777</string> + <string id="778">tmdb778</string> + <string id="779">tmdb779</string> + <string id="780">tmdb780</string> + <string id="781">tmdb781</string> + <string id="782">tmdb782</string> + <string id="783">tmdb783</string> + <string id="784">tmdb784</string> + <string id="785">tmdb785</string> + <string id="786">tmdb786</string> + <string id="787">tmdb787</string> + <string id="788">tmdb788</string> + <string id="789">tmdb789</string> + <string id="790">tmdb790</string> + <string id="791">tmdb791</string> + <string id="792">tmdb792</string> + <string id="793">tmdb793</string> + <string id="794">tmdb794</string> + <string id="795">tmdb795</string> + <string id="796">tmdb796</string> + <string id="797">tmdb797</string> + <string id="798">tmdb798</string> + <string id="799">tmdb799</string> + <string id="800">tmdb800</string> + <string id="801">tmdb801</string> + <string id="802">tmdb802</string> + <string id="803">tmdb803</string> + <string id="804">tmdb804</string> + <string id="805">tmdb805</string> + <string id="806">tmdb806</string> + <string id="807">tmdb807</string> + <string id="808">tmdb808</string> + <string id="809">tmdb809</string> + <string id="810">tmdb810</string> + <string id="811">tmdb811</string> + <string id="812">tmdb812</string> + <string id="813">tmdb813</string> + <string id="814">tmdb814</string> + <string id="815">tmdb815</string> + <string id="816">tmdb816</string> + <string id="817">tmdb817</string> + <string id="818">tmdb818</string> + <string id="819">tmdb819</string> + <string id="820">tmdb820</string> + <string id="821">tmdb821</string> + <string id="822">tmdb822</string> + <string id="823">tmdb823</string> + <string id="824">tmdb824</string> + <string id="825">tmdb825</string> + <string id="826">tmdb826</string> + <string id="827">tmdb827</string> + <string id="828">tmdb828</string> + <string id="829">tmdb829</string> + <string id="830">tmdb830</string> + <string id="831">tmdb831</string> + <string id="832">tmdb832</string> + <string id="833">tmdb833</string> + <string id="834">tmdb834</string> + <string id="835">tmdb835</string> + <string id="836">tmdb836</string> + <string id="837">tmdb837</string> + <string id="838">tmdb838</string> + <string id="839">tmdb839</string> + <string id="840">tmdb840</string> + <string id="841">tmdb841</string> + <string id="842">tmdb842</string> + <string id="843">tmdb843</string> + <string id="844">tmdb844</string> + <string id="845">tmdb845</string> + <string id="846">tmdb846</string> + <string id="847">tmdb847</string> + <string id="848">tmdb848</string> + <string id="849">tmdb849</string> + <string id="850">tmdb850</string> + <string id="851">tmdb851</string> + <string id="852">tmdb852</string> + <string id="853">tmdb853</string> + <string id="854">tmdb854</string> + <string id="855">tmdb855</string> + <string id="856">tmdb856</string> + <string id="857">tmdb857</string> + <string id="858">tmdb858</string> + <string id="859">tmdb859</string> + <string id="860">tmdb860</string> + <string id="861">tmdb861</string> + <string id="862">tmdb862</string> + <string id="863">tmdb863</string> + <string id="864">tmdb864</string> + <string id="865">tmdb865</string> + <string id="866">tmdb866</string> + <string id="867">tmdb867</string> + <string id="868">tmdb868</string> + <string id="869">tmdb869</string> + <string id="870">tmdb870</string> + <string id="871">tmdb871</string> + <string id="872">tmdb872</string> + <string id="873">tmdb873</string> + <string id="874">tmdb874</string> + <string id="875">tmdb875</string> + <string id="876">tmdb876</string> + <string id="877">tmdb877</string> + <string id="878">tmdb878</string> + <string id="879">tmdb879</string> + <string id="880">tmdb880</string> + <string id="881">tmdb881</string> + <string id="882">tmdb882</string> + <string id="883">tmdb883</string> + <string id="884">tmdb884</string> + <string id="885">tmdb885</string> + <string id="886">tmdb886</string> + <string id="887">tmdb887</string> + <string id="888">tmdb888</string> + <string id="889">tmdb889</string> + <string id="890">tmdb890</string> + <string id="891">tmdb891</string> + <string id="892">tmdb892</string> + <string id="893">tmdb893</string> + <string id="894">tmdb894</string> + <string id="895">tmdb895</string> + <string id="896">tmdb896</string> + <string id="897">tmdb897</string> + <string id="898">tmdb898</string> + <string id="899">tmdb899</string> + <string id="900">tmdb900</string> +</strings> \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml new file mode 100644 index 0000000..5e87256 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Enable or disable this module.</string> + <string control="TMDBMovieInfo_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieInfo_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API Key from the TMDB site. Sharing the API key is forbidden.</string> + <string control="TMDBMovieInfo_chkCertification">Enable scraping movie certification.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Selected language for TMDB searches</string> + <string control="TMDBMovieInfo_chkFallBackEng">If no record is available for selected language try English</string> + <string control="TMDBMovieInfo_chkCrew">Enable scraping movie other crew. (Scrape Full Crew must be enabled)</string> + <string control="TMDBMovieInfo_chkStudio">Enable scraping movie studio.</string> + <string control="TMDBMovieInfo_chkRuntime">Enable scraping movie runtime.</string> + <string control="TMDBMovieInfo_chkPlot">Enable scraping movie plot.</string> + <string control="TMDBMovieInfo_chkOutline">Enable scraping movie outline.</string> + <string control="TMDBMovieInfo_chkGenre">Enable scraping movie genre.</string> + <string control="TMDBMovieInfo_chkTagline">Enable scraping movie tagline.</string> + <string control="TMDBMovieInfo_chkCast">Enable scraping movie cast.</string> + <string control="TMDBMovieInfo_chkVotes">Enable scraping movie votes.</string> + <string control="TMDBMovieInfo_chkRating">Enable scraping movie rating.</string> + <string control="TMDBMovieInfo_chkRelease">Enable scraping movie release date.</string> + <string control="TMDBMovieInfo_chkMPAA">Enable scraping movie MPAA.</string> + <string control="TMDBMovieInfo_chkYear">Enable scraping movie year.</string> + <string control="TMDBMovieInfo_chkTitle">Enable scraping movie title.</string> + <string control="TMDBMovieMedia_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieMedia_cbEnabled">Enable or disable this module.</string> + <string control="TMDBMovieMedia_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Enable scraping posters from this module. (Refer to global poster settings for more options)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Enable scraping fanart from this module. (Refer to global fanart settings for more options)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Enable trailer downloading from this module. (Refer to global trailer settings for more options)</string> + <string control="TMDBMovieMedia_txtTimeout">Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Select the sites from which you would like to retrieve trailer URLs and/or files.</string> +</strings> diff --git a/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml new file mode 100644 index 0000000..cf68bc8 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Native TV Scrapers</string> + <string id="1">Use OFDB Genre</string> + <string id="2">Use OFDB Plot</string> + <string id="3">Use OFDB Outline</string> + <string id="4">Use OFDB Title</string> + <string id="5">TMDB Mirror:</string> + <string id="6">Scraper Fields - Scraper specific</string> + <string id="7">Timeout:</string> + <string id="8">Supported Sites:</string> + <string id="9">Get Images From:</string> + <string id="10">Search Results</string> + <string id="11">Searching TMDB...</string> + <string id="12">The ID you entered is not a valid IMDB ID.</string> + <string id="13">You have manually entered an IMDB ID but have not verified it is correct.</string> + <string id="14">Continue without verification?</string> + <string id="15">Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again.</string> + <string id="16">Verification Failed</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">No Matches Found</string> + <string id="21">View details of each result to find the proper movie.</string> + <string id="22">Movie Search Results</string> + <string id="23">Manual IMDB Entry:</string> + <string id="24">Verify</string> + <string id="25">Searching TMDB...</string> + <string id="26">Downloading details...</string> + <string id="27">Downloading {0}</string> + <string id="28">No Fanart found for this movie.</string> + <string id="29">No Fanart Found</string> + <string id="30">No Posters found for this movie.</string> + <string id="31">No Posters Found</string> + <string id="32">Retrieving data from TheMovieDB.com...</string> + <string id="33">TheMovieDB.com is not enabled</string> + <string id="34">Retrieving data from IMPAwards.com...</string> + <string id="35">IMPAwards.com is not enabled</string> + <string id="36">Retrieving data from MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com is not enabled</string> + <string id="38">Preparing images...</string> + <string id="39">Select Poster</string> + <string id="40">Select Fanart</string> + <string id="41">Check All Thumb</string> + <string id="42">Check All Mid</string> + <string id="43">Check All Original</string> + <string id="44">Selected item will be set as fanart. All checked items will be saved to \extrathumbs.</string> + <string id="45">Performing Preliminary Tasks...</string> + <string id="46">Downloading Selected Image...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Small</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Small ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Multiple</string> + <string id="56">Downloading selected trailer...</string> + <string id="57">Copying specified file to trailer...</string> + <string id="58">The trailer could not be played. This could be due to an invalid URL or you do not have the proper player to play the trailer type.</string> + <string id="59">Error Playing Trailer</string> + <string id="60">Move</string> + <string id="61">Copy</string> + <string id="62">Moving specified file to trailer...</string> + <string id="63">Set To Nfo</string> + <string id="64">Select Trailer</string> + <string id="65">Select Trailer to Download</string> + <string id="66">Manual Trailer Entry</string> + <string id="67">Direct Link or YouTube URL:</string> + <string id="68">Compiling trailer list...</string> + <string id="69">Preview Trailer</string> + <string id="70">Local Trailer:</string> + <string id="71">The video format links could not be retrieved.</string> + <string id="72">Error Retrieving Video Format Links</string> + <string id="73">Select Format</string> + <string id="74">Getting available formats...</string> + <string id="75">Available Formats</string> + <string id="76">A poster of your preferred size could not be found. Please choose another.</string> + <string id="77">No Preferred Size</string> + <string id="78">Fanart of your preferred size could not be found. Please choose another.</string> + <string id="79">There are no known episodes for this show. Scrape the show, season, or episode and try again.</string> + <string id="80">No Known Episodes</string> + <string id="81">There is no poster available for this episode.</string> + <string id="82">Guest Star</string> + <string id="83">The ID you entered is not a valid TVDB ID.</string> + <string id="84">Downloading show info...</string> + <string id="85">TV Search Results</string> + <string id="86">View details of each result to find the proper TV show.</string> + <string id="87">Downloading Fullsize Fanart Image...</string> + <string id="88">Loading Current Images...</string> + <string id="89">(Down)Loading New Images...</string> + <string id="90">Setting Defaults...</string> + <string id="91">Show Poster</string> + <string id="92">Episode Fanart</string> + <string id="93">Show Fanart</string> + <string id="94">All Seasons Poster</string> + <string id="95">Season Posters</string> + <string id="96">Season Fanart</string> + <string id="97">Season {0} Posters</string> + <string id="98">Season {0} Fanart</string> + <string id="99">TV Image Selection</string> + <string id="100">Current Image:</string> + <string id="101">Get Posters</string> + <string id="102">Get Fanart</string> + <string id="103">These settings are specific to this module.{0}Please refer to the global settings for more options.</string> + <string id="104">Ember TMDB Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Size:</string> + <string id="109">Trailers</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Preferred language</string> + <string id="113">Save Fanart In:</string> + <string id="114">Fall back on english</string> + <string id="115">Preferred Language:</string> + <string id="116">TMDBid:</string> + <string id="117">Retrieving data from IMDB.com...</string> + <string id="118">IMDB.com is not enabled</string> + <string id="119">TheMovieDB API is missing or not valid</string> + <string id="120">Retrieving data from Fanart.tv...</string> + <string id="121">Fanart.tv is not enabled</string> + <string id="122">Get your API Key from www.themoviedb.org</string> + <string id="123">Get your API Key from fanart.tv</string> +</strings> diff --git a/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml new file mode 100644 index 0000000..d2a3801 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Aktiviert oder deaktiviert dieses Modul.</string> + <string control="TMDBMovieInfo_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieInfo_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API-Key von der TMDB-Website. Gemeinsame Nutzung des API-Schlüssels ist verboten.</string> + <string control="TMDBMovieInfo_chkCertification">Das Scrapen von Altersbeschränkungen einschalten.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Wähle die Sprache in der auf TMDB gesucht werden soll</string> + <string control="TMDBMovieInfo_chkFallBackEng">Wenn kein Datensatz für die gewählte Sprache verfügbar ist versuche englischen zu nehmen.</string> + <string control="TMDBMovieInfo_chkCrew">Das Scrapen von der restlichen Crew einschalten. ("Gesamte Crew Scrapen" muss eingeschaltet sein)</string> + <string control="TMDBMovieInfo_chkStudio">Das Scrapen von Studios einschalten.</string> + <string control="TMDBMovieInfo_chkRuntime">Das Scrapen von Spielzeiten einschalten.</string> + <string control="TMDBMovieInfo_chkPlot">Das Scrapen von Inhaltsangaben einschalten.</string> + <string control="TMDBMovieInfo_chkOutline">Das Scrapen von Kurzbeschreibungen einschalten.</string> + <string control="TMDBMovieInfo_chkGenre">Das Scrapen von Genres einschalten.</string> + <string control="TMDBMovieInfo_chkTagline">Das Scrapen von Taglines einschalten.</string> + <string control="TMDBMovieInfo_chkCast">Das Scrapen von Schauspielern einschalten.</string> + <string control="TMDBMovieInfo_chkVotes">Das Scrapen von Anzahl Bewertungen einschalten.</string> + <string control="TMDBMovieInfo_chkRating">Das Scrapen von Bewertungen einschalten.</string> + <string control="TMDBMovieInfo_chkRelease">Das Scrapen von Premiere-Daten einschalten.</string> + <string control="TMDBMovieInfo_chkMPAA">Das Scrapen von MPAA-Informationen einschalten.</string> + <string control="TMDBMovieInfo_chkYear">Das Scrapen von Filmjahren einschalten.</string> + <string control="TMDBMovieInfo_chkTitle">Das Scrapen von Filmtiteln einschalten.</string> + <string control="TMDBMovieMedia_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieMedia_cbEnabled">Aktiviert oder deaktiviert dieses Modul.</string> + <string control="TMDBMovieMedia_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Aktiviert das Laden von Fanarts mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Aktiviert das Laden von Trailern mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_txtTimeout">Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Seite in dieser Zeit nicht geantwortet hat wird sie übersprungen)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Wähle die Seite von der Trailer URLs/Dateien geladen werden sollen.</string> +</strings> diff --git a/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml new file mode 100644 index 0000000..9b8e52e --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Nativer TV Scraper</string> + <string id="1">OFDB Genre benutzen</string> + <string id="2">OFDB Handlung benutzen</string> + <string id="3">OFDB Kurzbeschr. benutzen</string> + <string id="4">OFDB Titel benutzen</string> + <string id="5">TMDB Mirror:</string> + <string id="6">Scraper Felder - Scraper spezifisch</string> + <string id="7">Timeout:</string> + <string id="8">Unterstützte Seiten:</string> + <string id="9">Bilder holen von:</string> + <string id="10">Suchergebnis</string> + <string id="11">Suche in der TMDB...</string> + <string id="12">Die eingegebene ID ist keine gültige IMDB ID.</string> + <string id="13">Die IMDB ID ist noch nicht geprüft.</string> + <string id="14">Ohne Prüfung fortfahren?</string> + <string id="15">Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben.</string> + <string id="16">Prüfung fehlgeschlagen</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">Keine Treffer</string> + <string id="21">Schaue dir die Details an um den richtigen Film zu finden.</string> + <string id="22">Film Suchergebnis</string> + <string id="23">Man. IMDB ID:</string> + <string id="24">Prüfen</string> + <string id="25">Suche in der TMDB...</string> + <string id="26">Lade Details...</string> + <string id="27">Lade {0} herunter</string> + <string id="28">Kein Fanart für diesen Film gefunden.</string> + <string id="29">Kein Fanart gefunden</string> + <string id="30">Kein Poster für diesen Film gefunden.</string> + <string id="31">Kein Poster gefunden</string> + <string id="32">Lade Daten von TheMovieDB.com...</string> + <string id="33">TheMovieDB.com ist nicht aktiviert</string> + <string id="34">Lade Daten von IMPAwards.com...</string> + <string id="35">IMPAwards.com ist nicht aktiviert</string> + <string id="36">Lade Daten von MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com ist nicht aktiviert</string> + <string id="38">Bereite Bilder vor...</string> + <string id="39">Wähle Poster</string> + <string id="40">Wähle Fanart</string> + <string id="41">Wähle alle Thumb</string> + <string id="42">Wähle alle Mittl.</string> + <string id="43">Wähle alle Original</string> + <string id="44">Markiertes Bild wird Fanart. Alle aktivierten werden Extrathumbs.</string> + <string id="45">Vorarbeit läuft...</string> + <string id="46">Lade gewähltes Bild...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Klein</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Klein ({0}x{1})</string> + <string id="54">Mittel ({0}x{1})</string> + <string id="55">Mehrfach</string> + <string id="56">Lade gewählten Trailer...</string> + <string id="57">Kopiere gewählten Trailer...</string> + <string id="58">Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URL liegen oder es ist kein Player für diesen Dateityp vorhanden.</string> + <string id="59">Fehler beim Abspielen des Trailers</string> + <string id="60">Verschieben</string> + <string id="61">Kopieren</string> + <string id="62">Verschiebe gewählten Treiler...</string> + <string id="63">In NFO speichern</string> + <string id="64">Trailer wählen</string> + <string id="65">Trailer zum laden wählen</string> + <string id="66">Manueller Trailer</string> + <string id="67">Direkter Link oder YouTube URL:</string> + <string id="68">Stelle Trailerliste zusammen...</string> + <string id="69">Trailer Vorschau</string> + <string id="70">Loakler trailer:</string> + <string id="71">Fehler beim generieren der Videoformat Linkliste.</string> + <string id="72">Fehler beim Generieren der Videoformat Links.</string> + <string id="73">Wähle Format</string> + <string id="74">Hole verfügbare Formate...</string> + <string id="75">Verfügbare Formate</string> + <string id="76">Es konnte kein Poster in der bevorzugten Größe gefunden werden. Wähle ein anderes.</string> + <string id="77">Keine bevorzugte Größe</string> + <string id="78">Es konnte kein Fanart in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="79">Keine Episoden für diese TV-Serie verfügbar. Scrape diese Serie, Staffel oder Episode und versuche es erneut.</string> + <string id="80">Keine Episoden verfügbar</string> + <string id="81">Kein Poster für diese Episode vorhanden.</string> + <string id="82">Gaststar</string> + <string id="83">Die eingegebene ID ist keine gültige TMDB ID.</string> + <string id="84">Lade Serien Informationen...</string> + <string id="85">Serien Suchergebnis</string> + <string id="86">Betrachte die Details um die richtige TV-Serie zu erkennen.</string> + <string id="87">Lade Fanart in Originalgröße...</string> + <string id="88">Lade aktuelle Bilder...</string> + <string id="89">Lade neue Bilder...</string> + <string id="90">Setze Standardwerte...</string> + <string id="91">Serien Poster</string> + <string id="92">Episoden Fanart</string> + <string id="93">Serien Fanart</string> + <string id="94">Alle-Staffeln Poster</string> + <string id="95">Staffel Poster</string> + <string id="96">Staffel Fanart</string> + <string id="97">Staffel {0} Poster</string> + <string id="98">Staffel {0} Fanart</string> + <string id="99">Bilderwahl TV-Serien</string> + <string id="100">Aktuelles Bild:</string> + <string id="101">Poster laden</string> + <string id="102">Fanart laden</string> + <string id="103">Diese Einstellungen sind Modul-spezifisch. {0} Bitte werfen sie einen Blick in die Globalen Einstellungen für noch mehr Optionen.</string> + <string id="104">Ember TMDB Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Grösse:</string> + <string id="109">Trailer</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Bevorzugte Sprache</string> + <string id="113">Speichere Fanart in:</string> + <string id="114">Verwende Englisch wenn nichts verfügbar</string> + <string id="115">Bevorzugte Sprache:</string> + <string id="116">TMDBid:</string> + <string id="117">Lade Daten von IMDB.com...</string> + <string id="118">IMDB.com ist nicht aktiviert.</string> + <string id="119">Die TheMovieDB API ist nicht vorhanden oder ungültig</string> + <string id="120">Lade Daten von Fanart.tv...</string> + <string id="121">Fanart.tv ist nicht aktiviert</string> + <string id="122">Get your API Key from www.themoviedb.org</string> + <string id="123">Get your API Key from fanart.tv</string> +</strings> diff --git a/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..54809c6 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Slå denne modulen på eller av.</string> + <string control="TMDBMovieInfo_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieInfo_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API-nøkkel fra TMDB-siden. Deling av denne nøkkelen er forbudt.</string> + <string control="TMDBMovieInfo_chkCertification">Slå på detaljhenting av filmsertifisering.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Valgt språk for TMDB-søk.</string> + <string control="TMDBMovieInfo_chkFallBackEng">Hvis valgt språk ikke blir funnet, prøv engelsk.</string> + <string control="TMDBMovieInfo_chkCrew">Slå på detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått)</string> + <string control="TMDBMovieInfo_chkStudio">Slå på detaljhenting av filmstudio.</string> + <string control="TMDBMovieInfo_chkRuntime">Slå på detaljhenting av filmlengde.</string> + <string control="TMDBMovieInfo_chkPlot">Slå på detaljhenting av filmens historie.</string> + <string control="TMDBMovieInfo_chkOutline">Slå på detaljhenting av filmens beskrivelse.</string> + <string control="TMDBMovieInfo_chkGenre">Slå på detaljhenting av filmens sjanger.</string> + <string control="TMDBMovieInfo_chkTagline">Slå på detaljhetning av filmens undertittel.</string> + <string control="TMDBMovieInfo_chkCast">Slå på detaljhetning av filmens skuespillerbeholdning.</string> + <string control="TMDBMovieInfo_chkVotes">Slå på detaljhetning av filmens poeng.</string> + <string control="TMDBMovieInfo_chkRating">Slå på detaljhetning av filmens aldersgrense.</string> + <string control="TMDBMovieInfo_chkRelease">Slå på detaljhetning av filmens premieredato.</string> + <string control="TMDBMovieInfo_chkMPAA">Slå på detaljhetning av filmens MPAA-markering.</string> + <string control="TMDBMovieInfo_chkYear">Slå på detaljhetning av filmens år.</string> + <string control="TMDBMovieInfo_chkTitle">Slå på detaljhetning av filmens tittel.</string> + <string control="TMDBMovieMedia_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieMedia_cbEnabled">Slå denne modulen på eller av.</string> + <string control="TMDBMovieMedia_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Slå på detaljhetning av plakater i denne modulen. (Se globale plakatinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Slå på detaljhetning av fankunst i denne modulen. (Se globale fankunstinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Slå på automatisk henting av trailer fra denne modulen. (Se globale trailerinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_txtTimeout">Før inn tiden (i sekunder) du vil bruke for timeout for trailersider. (Hvis siden ikke svarer innen timeoutfristen, så vil den bli hoppet over)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Velg sidene du vil bruke til trailer URL og/eller filer.</string> +</strings> diff --git a/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml new file mode 100644 index 0000000..3ee8a25 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">EMM TV-detaljhentere</string> + <string id="1">Bruk OFDB-sjangere</string> + <string id="2">Bruk OFDB-filmhistorie</string> + <string id="3">Bruk OFDB-beskrivelse</string> + <string id="4">Bruk OFDB-tittel</string> + <string id="5">TMDB-speilserver:</string> + <string id="6">Detaljhenterområder - Detaljhenterspesifikk</string> + <string id="7">Tidsavbrudd:</string> + <string id="8">Støttede sider:</string> + <string id="9">Hent bilder fra:</string> + <string id="10">Søkeresultater</string> + <string id="11">Søker TMDB...</string> + <string id="12">IDen du førte inn er ikke en riktig IMDB-ID.</string> + <string id="13">Du har ført inn en IMDB-ID, men har ikke verifisert om den er riktig.</string> + <string id="14">Fortsette uten verifisering?</string> + <string id="15">Kunne ikke hente filmdetaljer for den innførte IDen. Vennligst sjekk IDen og prøv igjen.</string> + <string id="16">Verifisering feilet</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">Ingen funnet</string> + <string id="21">Se detaljer fra hvert treff for å finne riktig film.</string> + <string id="22">Filmsøkresultater</string> + <string id="23">Manuell IMDB innføring:</string> + <string id="24">Verifiser</string> + <string id="25">Søker TMDB...</string> + <string id="26">Laster ned detaljer...</string> + <string id="27">Laster ned {0}</string> + <string id="28">Ingen fankunst funnet for denne filmen.</string> + <string id="29">Ingen fankunst funnet</string> + <string id="30">Ingen plakater funnet for denne filmen.</string> + <string id="31">Ingen plakater funnet</string> + <string id="32">Henter data fra TheMovieDB.com...</string> + <string id="33">TheMovieDB.com er ikke påslått</string> + <string id="34">Henter data fra IMPAwards.com...</string> + <string id="35">IMPAwards.com er ikke påslått</string> + <string id="36">Henter data fra MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com er ikke påslått</string> + <string id="38">Forbereder bilder...</string> + <string id="39">Velg plakat</string> + <string id="40">Velg fankunst</string> + <string id="41">Huk av alle tommelbilder</string> + <string id="42">Huk av alle Mid</string> + <string id="43">Huk av alle originale</string> + <string id="44">Valgte objekt vil bli satt som fankunst. Alle hukede objekter vil bli lagret i \extrathumbs.</string> + <string id="45">Utfører forberedende oppgaver...</string> + <string id="46">Laster ned valgte bilde...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Liten</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Liten ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Flere</string> + <string id="56">Laster ned valgt trailer...</string> + <string id="57">Kopierer valgt fil til trailer...</string> + <string id="58">Traileren kunne ikke spilles av. Det kan være at URL ikke er gyldig, eller at du ikke har riktig avspiller for denne filtypen.</string> + <string id="59">Kan ikke spille av trailer</string> + <string id="60">Flytt</string> + <string id="61">Kopiér</string> + <string id="62">Flytter valgt fil til trailer...</string> + <string id="63">Sett i nfo</string> + <string id="64">Velg trailer</string> + <string id="65">Velg trailer til å laste ned</string> + <string id="66">Manuell trailerinnføring</string> + <string id="67">Direkte link eller YouTube URL:</string> + <string id="68">Kompilerer trailerliste...</string> + <string id="69">Sniktitt på trailer</string> + <string id="70">Lokal trailer:</string> + <string id="71">Videoformatlenkene kunne ikke hentes</string> + <string id="72">Kunne ikke hente videoformatlenker</string> + <string id="73">Velg format</string> + <string id="74">Henter tilgjengelige formater...</string> + <string id="75">Tilgjengelige formater</string> + <string id="76">En plakat i din valgte størrelse kunne ikke hentes. Vennligst velg en annen.</string> + <string id="77">Ingen foretrukket størrelse</string> + <string id="78">Fankunst i din foretrukkede størrelse kunne ikke bli funnet. Vennligst velg en annen.</string> + <string id="79">Det er ingen kjente episoder for denne serien. Detaljhent serien, sesongen eller episoden og prøv på nytt.</string> + <string id="80">Ingen kjente episoder</string> + <string id="81">Det er ingen plakater for denne episoden.</string> + <string id="82">Gjesteskuespiller</string> + <string id="83">IDen du innførte er ikke en gyldig TVDB ID.</string> + <string id="84">Laster ned serieinfo...</string> + <string id="85">TVsøk-resultater</string> + <string id="86">Se detaljer fra hvert resultat for å finne riktig serie.</string> + <string id="87">Laster ned fankunst i full størrelse...</string> + <string id="88">Laster inn nåværende bilder...</string> + <string id="89">Laster (ned) nye bilder...</string> + <string id="90">Setter standarder...</string> + <string id="91">Serieplakat</string> + <string id="92">Episode-fankunst</string> + <string id="93">Seriefankunst</string> + <string id="94">Alle sesonger-plakat</string> + <string id="95">Sesongplakat</string> + <string id="96">Sesongfankunst</string> + <string id="97">Sesong {0}-plakater</string> + <string id="98">Sesong {0}-fankunst</string> + <string id="99">TV-bilde valg</string> + <string id="100">Nåværende bilde:</string> + <string id="101">Hent plakater</string> + <string id="102">Hent fankunst</string> + <string id="103">Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg.</string> + <string id="104">EMM TMDB film-detaljhentere</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (Tysk)</string> + <string id="108">TMDB Ekstrakunst-størrelse:</string> + <string id="109">Trailere</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC-format</string> + <string id="112">Foretrukket språk</string> + <string id="113">Lagre fankunst i:</string> + <string id="114">Fall tilbake til engelsk</string> + <string id="115">Foretrukket språk:</string> + <string id="116">TIMDB-ID:</string> + <string id="117">Henter data fra IMDB.com...</string> + <string id="118">IMDB.com er ikke påslått</string> + <string id="119">TheMovieDB API mangler eller er ikke gyldig</string> + <string id="120">Henter data fra Fanart.tv...</string> + <string id="121">Fanart.tv er ikke påslått</string> + <string id="122">Hent din API-nøkkel fra www.themoviedb.org</string> + <string id="123">Hent din API-nøkkel fra fanart.tv</string> +</strings> diff --git a/Addons/scraper.IMPA.Poster/My Project/Application.Designer.vb b/Addons/scraper.IMPA.Poster/My Project/Application.Designer.vb new file mode 100644 index 0000000..66fb81a --- /dev/null +++ b/Addons/scraper.IMPA.Poster/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Addons/scraper.IMPA.Poster/My Project/Application.myapp b/Addons/scraper.IMPA.Poster/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Addons/scraper.IMPA.Poster/My Project/Application.myapp @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <MySubMain>false</MySubMain> + <SingleInstance>false</SingleInstance> + <ShutdownMode>0</ShutdownMode> + <EnableVisualStyles>true</EnableVisualStyles> + <AuthenticationMode>0</AuthenticationMode> + <ApplicationType>1</ApplicationType> + <SaveMySettingsOnExit>true</SaveMySettingsOnExit> +</MyApplicationData> diff --git a/Addons/scraper.IMPA.Poster/My Project/AssemblyInfo.vb b/Addons/scraper.IMPA.Poster/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..b78251e --- /dev/null +++ b/Addons/scraper.IMPA.Poster/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.IMPA.Poster")> +<Assembly: AssemblyDescription("http://forum.xbmc.org/showthread.php?tid=116941")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.IMPA.Poster")> +<Assembly: AssemblyCopyright("Copyright © 2013")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("9C321BB4-192E-49DB-90B0-A23DCE1075BC")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.11")> +<Assembly: AssemblyFileVersion("1.3.0.11")> diff --git a/Addons/scraper.IMPA.Poster/My Project/Resources.Designer.vb b/Addons/scraper.IMPA.Poster/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bb85827 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''<summary> + ''' A strongly-typed resource class, for looking up localized strings, etc. + '''</summary> + <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + '''<summary> + ''' Returns the cached ResourceManager instance used by this class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EmberScraperModule.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + '''<summary> + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Addons/scraper.IMPA.Poster/My Project/Resources.resx b/Addons/scraper.IMPA.Poster/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Addons/scraper.IMPA.Poster/My Project/Resources.resx @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/My Project/Settings.Designer.vb b/Addons/scraper.IMPA.Poster/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f020222 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _ + Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + <Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _ + Friend Module MySettingsProperty + + <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _ + Friend ReadOnly Property Settings() As Global.EmberScraperModule.My.MySettings + Get + Return Global.EmberScraperModule.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Addons/scraper.IMPA.Poster/My Project/Settings.settings b/Addons/scraper.IMPA.Poster/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Addons/scraper.IMPA.Poster/My Project/Settings.settings @@ -0,0 +1,7 @@ +<?xml version='1.0' encoding='utf-8'?> +<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true"> + <Profiles> + <Profile Name="(Default)" /> + </Profiles> + <Settings /> +</SettingsFile> diff --git a/Addons/scraper.IMPA.Poster/Resources/Logo.png b/Addons/scraper.IMPA.Poster/Resources/Logo.png new file mode 100644 index 0000000..a89dae1 Binary files /dev/null and b/Addons/scraper.IMPA.Poster/Resources/Logo.png differ diff --git a/Addons/scraper.IMPA.Poster/Scraper/clsScrapeFANARTTV.vb b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeFANARTTV.vb new file mode 100644 index 0000000..13c1748 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeFANARTTV.vb @@ -0,0 +1,173 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ +' # HD Movie Logos -> logo.png (choose this first) +' # ClearLOGOs -> logo.png (use this as a backup if no HD Logo in the lanaguage specified) +' # ClearART -> clearart.png (use this as a backup if no HD ClearArt, in the language specified) +' # HDClearART -> clearart.png (choose this first) +' # cdART -> disc.png +' # Movie Backgrounds -> Fanart (this is the only fanart.tv artwork that might overlap with 'typical' artwork scraping from IMDB/TMDB) +' # Movie Banner -> Banner (not poster - Frodo supports both now, <moviename>-poster.jpg/png and <moviename>-banner.jpg/png or poster.jpg/png and banner.jpg/png) +' # Movie Thumbs -> landscape.png +' # Special note - the Logos and ClearArts are language-specific and should be tagged with the appropriate language. Will want to have a setting allowing users to specify a language so as not to get a bunch of foreign-language artwork. +' # 1) Logo.png - to be added at a later stage, today is not possible to save +' # 2) Clearart.png - to be added at a later stage, today is not possible to save +' # 3) Disc.png - to be added at a later stage, today is not possible to save +' # 4) Landscape.png - to be added at a later stage, today is not possible to save +' # language is in image properties + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports FanartTVAPI + +Namespace FANARTTVs + + Public Class Scraper + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _FanartTV As FanartTV.V1.FanartTV + Friend WithEvents bwFANARTTV As New System.ComponentModel.BackgroundWorker + Private _APIInvalid As Boolean = False +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _FanartTV = New FanartTV.V1.FanartTV(_MySettings.FANARTTVApiKey) + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest("1", "JSON", "all", 1, 1)) + If IsNothing(Result) Then + If Not IsNothing(_FanartTV.Error) Then + Master.eLog.WriteToErrorLog(_FanartTV.Error, "", "Error") + _APIInvalid = True + End If + End If + End Sub + + Public Sub Cancel() + If Me.bwFANARTTV.IsBusy Then Me.bwFANARTTV.CancelAsync() + + While Me.bwFANARTTV.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwFANARTTV.IsBusy Then + bwFANARTTV.WorkerSupportsCancellation = True + bwFANARTTV.WorkerReportsProgress = True + bwFANARTTV.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetFANARTTVImages(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + If _APIInvalid Then + Return Nothing + End If + Try + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest(imdbID, "JSON", "all", 1, 2)) + If bwFANARTTV.CancellationPending Then Return Nothing + If IsNothing(Result) Then Return alPoster + If IsNothing(Result.movieinfo.moviebackground) Then Return alPoster + For Each image In Result.movieinfo.moviebackground + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = image.url}) + alPoster.Add(New MediaContainers.Image With {.Description = "thumb", .URL = image.url & "/preview"}) + Next + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwFANARTTVA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTV.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetFANARTTVImages(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwFANARTTV_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTV.ProgressChanged + If Not bwFANARTTV.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwFANARTTV_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTV.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMPA.Poster/Scraper/clsScrapeIMDB.vb b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeIMDB.vb new file mode 100644 index 0000000..ec6d1be --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeIMDB.vb @@ -0,0 +1,174 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Diagnostics +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMDBimg + + Public Class Scraper + +#Region "Fields" + + + + Friend WithEvents bwIMDBimg As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If Me.bwIMDBimg.IsBusy Then Me.bwIMDBimg.CancelAsync() + + While Me.bwIMDBimg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMDBimg.IsBusy Then + bwIMDBimg.WorkerSupportsCancellation = True + bwIMDBimg.WorkerReportsProgress = True + bwIMDBimg.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMDBimg.CancellationPending Then Return Nothing + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", imdbID, "")) + sHTTP = Nothing + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(1) + End If + + + ' check existence of a line like this + ' <a href="/media/rm2995297536/tt0089218?ref_=tt_ov_i" > <img height="317" + ' and then return this one + ' src = "http://ia.media-imdb.com/images/M/MV5BMTY1Mzk3MTg0M15BMl5BanBnXkFtZTcwOTQzODYyMQ@@._V1_SY317_CR3,0,214,317_.jpg" + Dim mcIMDB As MatchCollection = Regex.Matches(HTML, String.Concat("/media/[a-zA-Z0-9]{3,12}/tt", imdbID, "\?ref_=tt_ov_i"), RegexOptions.IgnoreCase) + If mcIMDB.Count > 0 Then + debug.print("GetIMDBPoster 1 - {0}", mcIMDB(0).Value) + 'Dim sUrl1 As String = sHTTP.DownloadData(mcIMDB(0).Value) + mcIMDB = Regex.Matches(HTML, "http://ia.media-imdb.com/images/.{3,80}?.jpg") + If mcIMDB.Count > 0 Then + 'just use the first one if more are found + Debug.Print("GetIMDBPoster 2 - {0}", mcIMDB(0).Value) + alPoster.Add(New MediaContainers.Image With {.Description = "cover", .URL = mcIMDB(0).Value}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(2) + End If + + Dim aSP As String() = Regex.Split(mcIMDB(0).Value, "._V\d+?_SY\d+?_CR\d+?,\d+?,\d+?,\d+?_") + Dim sUrl1 = aSP(0) + aSP(1) + Debug.Print("GetIMDBPoster 3 - {0}", sUrl1) + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = sUrl1}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMDBimg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBimg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMDBimg_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBimg.ProgressChanged + If Not bwIMDBimg.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMDBimg_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBimg.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMPA.Poster/Scraper/clsScrapeIMPA.vb b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeIMPA.vb new file mode 100644 index 0000000..cfe43a1 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeIMPA.vb @@ -0,0 +1,189 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMPA + + Public Class Scraper + + #Region "Fields" + + + + Friend WithEvents bwIMPA As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwIMPA.IsBusy Then Me.bwIMPA.CancelAsync() + + While Me.bwIMPA.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMPA.IsBusy Then + bwIMPA.WorkerSupportsCancellation = True + bwIMPA.WorkerReportsProgress = True + bwIMPA.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMPAPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMPA.CancellationPending Then Return Nothing + Dim sURL As String = GetLink(imdbID) + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(1) + End If + + If Not String.IsNullOrEmpty(sURL) Then + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If bwIMPA.CancellationPending Then Return Nothing + + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(2) + End If + + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + + Dim PosterURL As String + + For Each mPoster As Match In mcPoster + If bwIMPA.CancellationPending Then Return Nothing + PosterURL = Strings.Replace(String.Format("{0}/{1}", sURL.Substring(0, sURL.LastIndexOf("/")), mPoster.Value.ToString()).Replace("thumbs", "posters"), "imp_", String.Empty) + + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + + PosterURL = PosterURL.Insert(PosterURL.LastIndexOf("."), "_xlg") + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = PosterURL}) + Next + End If + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMPA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPA.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMPAPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMPA_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPA.ProgressChanged + If Not bwIMPA.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMPA_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPA.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + Private Function GetLink(ByVal IMDBID As String) As String + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) + sHTTP = Nothing + + Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") + If mcIMPA.Count > 0 Then + 'just use the first one if more are found + Return mcIMPA(0).Value.ToString + Else + Return String.Empty + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return String.Empty + End Try + End Function + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + Dim sType As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMPA.Poster/Scraper/clsScrapeImages.vb b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeImages.vb new file mode 100644 index 0000000..d335b62 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeImages.vb @@ -0,0 +1,1209 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Public Class ScrapeImages + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private TMDB As TMDB.Scraper + Private IMPA As New IMPA.Scraper + Private MPDB As New MPDB.Scraper + Private IMDB As New IMDBimg.Scraper + Private FANARTTVs As FANARTTVs.Scraper + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Function GetPreferredImage(ByRef Image As Images, ByVal IMDBID As String, ByVal TMDBID As String, ByVal iType As Enums.ImageType, ByRef imgResult As Containers.ImgResult, ByVal sPath As String, ByVal doETs As Boolean, Optional ByVal doAsk As Boolean = False) As Boolean + '// + ' Try to get the best match between what the user selected in settings and the actual posters downloaded + '\\ + + Dim hasImages As Boolean = False + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim tmpListIMPA As New List(Of MediaContainers.Image) + Dim tmpListIMDB As New List(Of MediaContainers.Image) + Dim tmpListMPDB As New List(Of MediaContainers.Image) + Dim tmpIMDBX As Images = Nothing + Dim tmpIMDBL As Images = Nothing + Dim tmpIMDBM As Images = Nothing + Dim tmpIMDBS As Images = Nothing + Dim tmpIMDBW As Images = Nothing + Dim tmpTMDBX As Images = Nothing + Dim tmpTMDBL As Images = Nothing + Dim tmpTMDBM As Images = Nothing + Dim tmpTMDBS As Images = Nothing + Dim tmpTMDBW As Images = Nothing + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) + + Try + + If iType = Enums.ImageType.Posters Then 'posters + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tImage.URL) + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + tmpListTMDB.AddRange(TMDB.GetTMDBImages(TMDBID, "poster")) + + If _MySettings.UseIMPA Then + tmpListTMDB.AddRange(IMPA.GetIMPAPosters(IMDBID)) + End If + + If _MySettings.UseMPDB Then + tmpListMPDB.AddRange(MPDB.GetMPDBPosters(IMDBID)) + End If + + If _MySettings.UseIMDB Then + tmpListTMDB.AddRange(IMDB.GetIMDBPosters(IMDBID)) + End If + + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) + If Not IsNothing(tmdbThumb.WebImage.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) + End If + Image.Clear() + Next + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + End If + Else + 'download all TMBD images + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "poster") + + 'check each one for it's size to see if it matched the preferred size + If tmpListTMDB.Count > 0 Then + hasImages = True + + If Not Master.eSettings.NoSaveImagesToNfo Then + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + imgResult.Posters.Add(tmdbThumb.URL) + Next + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Xlrg + If iMovie.Description.ToLower = "original" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Lrg + If iMovie.Description.ToLower = "mid" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Mid + If iMovie.Description.ToLower = "cover" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Small + If iMovie.Description.ToLower = "thumb" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + 'no "wide" for TMDB + End Select + Image.Clear() + Next + End If + + If _MySettings.UseIMDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB found... try IMPA + + tmpListIMDB = IMDB.GetIMDBPosters(IMDBID) + + If tmpListIMDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMDBX) Then + tmpIMDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMDBL) Then + tmpIMDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMDBM) Then + tmpIMDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMDBS) Then + tmpIMDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMDBW) Then + tmpIMDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseIMPA Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from IMDB found... try IMPA + + tmpListIMPA = IMPA.GetIMPAPosters(IMDBID) + + If tmpListIMPA.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMPA + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMPAX) Then + tmpIMPAX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMPAL) Then + tmpIMPAL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMPAM) Then + tmpIMPAM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMPAS) Then + tmpIMPAS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMPAW) Then + tmpIMPAW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseMPDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB or IMPA found... try MPDB + + tmpListMPDB = MPDB.GetMPDBPosters(IMDBID) + + If tmpListMPDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListMPDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpMPDBX) Then + tmpMPDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpMPDBL) Then + tmpMPDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpMPDBM) Then + tmpMPDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpMPDBS) Then + tmpMPDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpMPDBW) Then + tmpMPDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If IsNothing(Image.Image) AndAlso Not doAsk Then + 'STILL no image found, just get the first available image, starting with the largest + 'check TMDB first + If tmpListTMDB.Count > 0 Then + Dim x = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If x.Count > 0 Then + Image.FromWeb(x(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "cover" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + End If + + Image.Clear() + + If _MySettings.UseIMDB Then + If tmpListIMDB.Count > 0 Then + If Not IsNothing(tmpIMDBX) Then + Image = tmpIMDBX + GoTo foundIT + End If + If Not IsNothing(tmpIMDBL) Then + Image = tmpIMDBL + GoTo foundIT + End If + If Not IsNothing(tmpIMDBM) Then + Image = tmpIMDBM + GoTo foundIT + End If + If Not IsNothing(tmpIMDBS) Then + Image = tmpIMDBS + GoTo foundIT + End If + If Not IsNothing(tmpIMDBW) Then + Image = tmpIMDBW + GoTo foundIT + End If + End If + End If + + If _MySettings.UseIMPA Then + If tmpListIMPA.Count > 0 Then + If Not IsNothing(tmpIMPAX) Then + Image = tmpIMPAX + GoTo foundIT + End If + If Not IsNothing(tmpIMPAL) Then + Image = tmpIMPAL + GoTo foundIT + End If + If Not IsNothing(tmpIMPAM) Then + Image = tmpIMPAM + GoTo foundIT + End If + If Not IsNothing(tmpIMPAS) Then + Image = tmpIMPAS + GoTo foundIT + End If + If Not IsNothing(tmpIMPAW) Then + Image = tmpIMPAW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + If _MySettings.UseMPDB Then + If tmpListMPDB.Count > 0 Then + If Not IsNothing(tmpMPDBX) Then + Image = tmpMPDBX + GoTo foundIT + End If + If Not IsNothing(tmpMPDBL) Then + Image = tmpMPDBL + GoTo foundIT + End If + If Not IsNothing(tmpMPDBM) Then + Image = tmpMPDBM + GoTo foundIT + End If + If Not IsNothing(tmpMPDBS) Then + Image = tmpMPDBS + GoTo foundIT + End If + If Not IsNothing(tmpMPDBW) Then + Image = tmpMPDBW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + End If + + End If + + Else 'fanart + + Dim ETHashes As New List(Of String) + If Master.eSettings.AutoET AndAlso doETs Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + End If + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + Image.Clear() + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + + End If + End If + End If + + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + End If + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + +foundIT: + tmpListTMDB = Nothing + tmpListIMPA = Nothing + tmpListMPDB = Nothing + Return hasImages + End Function + + Public Sub GetPreferredFAasET(ByVal IMDBID As String, ByVal sPath As String) + Dim _Image As Image + + If AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim ETHashes As New List(Of String) + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, "fanart") + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + For Each sFile As FileInfo In lFi + Select Case True + Case sFile.Name.Contains("(original)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Master.eSettings.AutoET Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + End If + Next + End If + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + 'Me.Clear() + Next + + _Image = Nothing + FileUtils.Delete.DeleteDirectory(CachePath) + + End If + End If + End If + End Sub + + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ + AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ + (AdvancedSettings.GetBooleanSetting("tUseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + Public Shared Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + End If + + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) + End Sub + + + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0) + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub + Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo + Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() + + For i As Integer = 0 To UBound(Encoders) + If Encoders(i).FormatID = Format.Guid Then + Return Encoders(i) + End If + Next + + Return Nothing + End Function +#End Region 'Methods + + + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Scraper/clsScrapeMPDB.vb b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeMPDB.vb new file mode 100644 index 0000000..cd949ec --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeMPDB.vb @@ -0,0 +1,167 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Namespace MPDB + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwMPDB As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwMPDB.IsBusy Then Me.bwMPDB.CancelAsync() + + While Me.bwMPDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String) + Try + If Not Me.bwMPDB.IsBusy Then + Me.bwMPDB.WorkerSupportsCancellation = True + Me.bwMPDB.WorkerReportsProgress = True + Me.bwMPDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetMPDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + + If Me.bwMPDB.CancellationPending Then Return Nothing + + Try + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.movieposterdb.com/movie/", imdbID)) + sHTTP = Nothing + + If Me.bwMPDB.CancellationPending Then Return Nothing + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(1) + End If + + If Regex.IsMatch(HTML, String.Concat("http://www.imdb.com/title/tt", imdbID), RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline) Then + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "http://www.movieposterdb.com/posters/[0-9_](.*?)/[0-9](.*?)/[0-9](.*?)/[a-z0-9_](.*?).jpg") + + Dim PosterURL As String = String.Empty + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(2) + End If + + For Each mPoster As Match In mcPoster + If Me.bwMPDB.CancellationPending Then Return Nothing + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "l") + alPosters.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "t") + alPosters.Add(New MediaContainers.Image With {.Description = "thumb", .URL = PosterURL}) + Next + End If + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Private Sub bwMPDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetMPDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwMPDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDB.ProgressChanged + If Not bwMPDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwMPDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMPA.Poster/Scraper/clsScrapeOFDB.vb b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeOFDB.vb new file mode 100644 index 0000000..2e94cca --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeOFDB.vb @@ -0,0 +1,242 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class OFDB + + #Region "Fields" + + Private imdbID As String + Private OFDBMovie As MediaContainers.Movie + Private _genre As String + Private _outline As String + Private _plot As String + Private _title As String + + #End Region 'Fields + + #Region "Constructors" + + Public Sub New(ByVal sID As String, ByRef mMovie As MediaContainers.Movie) + Clear() + imdbID = sID + OFDBMovie = mMovie + + GetOFDBDetails() + End Sub + + #End Region 'Constructors + + #Region "Properties" + + Public Property Genre() As String + Get + Return _genre + End Get + Set(ByVal value As String) + _genre = value + End Set + End Property + + Public Property Outline() As String + Get + Return _outline + End Get + Set(ByVal value As String) + _outline = value + End Set + End Property + + Public Property Plot() As String + Get + Return _plot + End Get + Set(ByVal value As String) + _plot = value + End Set + End Property + + Public Property Title() As String + Get + Return _title + End Get + Set(ByVal value As String) + _title = value + End Set + End Property + + #End Region 'Properties + + #Region "Methods" + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Sub Clear() + _title = String.Empty + _outline = String.Empty + _plot = String.Empty + _genre = String.Empty + End Sub + + Private Function GetFullPlot(ByVal sURL As String) As String + Dim FullPlot As String = String.Empty + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + Dim D, W, B As Integer + Dim tmpHTML As String + + D = Html.IndexOf("Eine Inhaltsangabe von") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim + W = tmpHTML.IndexOf("</b></b><br><br>") + If W > 0 Then + B = tmpHTML.IndexOf("</font></p>", W + 16) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return FullPlot + End Function + + Private Sub GetOFDBDetails() + Dim sURL As String = GetOFDBUrlFromIMDBID() + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(Html) Then + 'title + If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(Html, "<td width=""99\%""><h2><font face=""Arial,Helvetica,sans-serif"" size=""3""><b>([^<]+)</b></font></h2></td>").Groups(1).Value.ToString)) + _title = OFDBTitle + End If + + Dim D, W, B As Integer + Dim tmpHTML As String + + 'outline + If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then + D = Html.IndexOf("<b>Inhalt:</b>") + + If D > 0 Then + W = Html.IndexOf("<a href=""", D + 14) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(D + 14, W - (D + 14)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + + 'full plot + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then + D = Html.IndexOf("<b>Inhalt:</b>") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 14, L - (D + 14)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + End If + End If + + 'genre + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Genre) OrElse Not Master.eSettings.LockGenre Then + D = HTML.IndexOf("class=""Normal"">Genre(s):</font></td>") + If D > 0 Then + W = HTML.IndexOf("</table>", D) + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), "<a.*?href=[""'](?<url>.*?)[""'].*?>(?<name>.*?)</a>") + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetOFDBUrlFromIMDBID() As String + Dim ofdbURL As String = String.Empty + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.ofdb.de/view.php?SText=", imdbID, "&Kat=IMDb&page=suchergebnis&sourceid=mozilla-search")) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(HTML) Then + Dim mcOFDBURL As MatchCollection = Regex.Matches(HTML, "<a href=""film/([^<]+)"" onmouseover") + If mcOFDBURL.Count > 0 Then + 'just use the first one if more are found + ofdbURL = String.Concat("http://www.ofdb.de/", Regex.Match(mcOFDBURL(0).Value.ToString, """(film/([^<]+))""").Groups(1).Value.ToString) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return ofdbURL + End Function + + #End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Scraper/clsScrapeTMDB.vb b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeTMDB.vb new file mode 100644 index 0000000..9db6818 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeTMDB.vb @@ -0,0 +1,282 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDB + + Public Class Scraper + +#Region "Fields" + + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Private backdrop_names(3) As v3Size + Private poster_names(5) As v3Size + + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + ' v3 does not have description anymore + poster_names(0).description = "thumb" + poster_names(0).size = "w92" + poster_names(0).width = 92 + poster_names(1).description = "w154" + poster_names(1).size = "w154" + poster_names(1).width = 154 + poster_names(2).description = "cover" + poster_names(2).size = "w185" + poster_names(2).width = 185 + poster_names(3).description = "w342" + poster_names(3).size = "w342" + poster_names(3).width = 342 + poster_names(4).description = "mid" + poster_names(4).size = "w500" + poster_names(4).width = 500 + poster_names(5).description = "original" + poster_names(5).size = "original" + poster_names(5).width = 0 + backdrop_names(0).description = "thumb" + backdrop_names(0).size = "w300" + backdrop_names(0).width = 300 + backdrop_names(1).description = "poster" + backdrop_names(1).size = "w780" + backdrop_names(1).width = 780 + backdrop_names(2).description = "w1280" + backdrop_names(2).size = "w1280" + backdrop_names(2).width = 1280 + backdrop_names(3).description = "original" + backdrop_names(3).size = "original" + backdrop_names(3).width = 0 + End Sub + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim images As V3.TmdbMovieImages + Dim aW, aH As Integer + + If bwTMDB.CancellationPending Then Return Nothing + Try + images = _TMDBApi.GetMovieImages(CInt(imdbID), _MySettings.TMDBLanguage) + If sType = "poster" Then + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + Return alPosters + End If + End If + Else + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + Return alPosters + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If sType = "poster" Then + For Each tmdbI As V3.Poster In images.posters + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In poster_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + ElseIf sType = "backdrop" Then + For Each tmdbI As V3.Backdrop In images.backdrops + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In backdrop_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As List(Of String) + Dim trailers As V3.TmdbMovieTrailers + Dim YT As New List(Of String) + + Try + If bwTMDB.CancellationPending Then Return Nothing + trailers = _TMDBApi.GetMovieTrailers(CInt(imdbID), _MySettings.TMDBLanguage) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + trailers = _TMDBApiE.GetMovieTrailers(CInt(imdbID)) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + Return Nothing + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + 'If bwTMDB.WorkerReportsProgress Then + ' bwTMDB.ReportProgress(2) + 'End If + + If trailers.youtube.Count > 0 Then + For Each trailer In trailers.youtube + YT.Add(String.Format("http://www.youtube.com/watch?v={0}{1})", trailer.source, CStr(IIf(trailer.size = "HD", "&hd=1", "")))) + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return YT + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure v3Size + +#Region "Fields" + + Dim size As String + Dim description As String + Dim width As Integer + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Scraper/clsScrapeTMDB_old.vb b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeTMDB_old.vb new file mode 100644 index 0000000..c5bca0a --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeTMDB_old.vb @@ -0,0 +1,244 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI + +Namespace TMDB_old + + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + + Private Const APIKey As String = "b1ecff8c76278262b27de1569f57f6bd" + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB...<OpenSearchDescription>...<movies>.Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<poster>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<backdrop>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + sHTTP = Nothing + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As String + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + Dim tLang As String + + tLang = AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en") + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/{0}/tt{1}", APIKey, imdbID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + Dim tmdbNode = From xNode In xmlTMDB.Elements + + If tmdbNode.Count > 0 Then + If Not tmdbNode(0).Value = "Your query didn't return any results." Then + Dim movieID As String = xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<id>.Value + Dim i As Integer + + + For i = 0 To 1 Step 1 + sHTTP = New HTTP + ApiXML = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/{0}/xml/{1}/{2}", tLang, APIKey, movieID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + Dim Trailers = From tNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie> Select tNode.<trailer> + If Trailers.Count > 0 AndAlso Not String.IsNullOrEmpty(Trailers(0).Value) Then + If Trailers(0).Value.ToLower.IndexOf("youtube.com") > 0 Then + Return Trailers(0).Value + i += 1 + End If + Else + tLang = "en" + End If + End If + Next + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return String.Empty + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Scraper/clsScrapeTMDBg.vb b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeTMDBg.vb new file mode 100644 index 0000000..86f6083 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeTMDBg.vb @@ -0,0 +1,723 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Globalization +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDBg + + Public Class MovieSearchResults + +#Region "Fields" + + Private _Matches As New List(Of MediaContainers.Movie) + +#End Region 'Fields + +#Region "Properties" + + Public Property Matches() As List(Of MediaContainers.Movie) + Get + Return _Matches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _Matches = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class Scraper + +#Region "Fields" + + 'Public IMDBURL As String + 'Private _TMDBId As String + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Friend WithEvents bwTMDBg As New System.ComponentModel.BackgroundWorker + + Private _sPoster As String + +#End Region 'Fields + +#Region "Properties" + Public ReadOnly Property TMDBConf() As V3.TmdbConfiguration + Get + Return _TMDBConf + End Get + End Property +#End Region + +#Region "Enumerations" + + Private Enum SearchType + Movies = 0 + Details = 1 + SearchDetails = 2 + End Enum + +#End Region 'Enumerations + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + + Public Event SearchResultsDownloaded(ByVal mResults As TMDBg.MovieSearchResults) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + End Sub + + Public Sub CancelAsync() + If bwTMDBg.IsBusy Then bwTMDBg.CancelAsync() + + While bwTMDBg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetMovieID(ByRef DBMovie As Structures.DBMovie) + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + + If bwTMDBg.CancellationPending Then Return + + Movie = _TMDBApi.GetMovieByIMDB(DBMovie.Movie.ID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(DBMovie.Movie.ID) + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return + End If + + DBMovie.Movie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End Sub + + Public Function GetMovieInfo(ByVal strID As String, ByRef IMDBMovie As MediaContainers.Movie, ByVal FullCrew As Boolean, ByVal FullCast As Boolean, ByVal GetPoster As Boolean, ByVal Options As Structures.ScrapeOptions, ByVal IsSearch As Boolean) As Boolean + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + Dim tStr As String + + If bwTMDBg.CancellationPending Then Return Nothing + + If Strings.Left(strID.ToLower(), 2) = "tt" Then + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(strID) + Else + Movie = _TMDBApi.GetMovieInfo(CInt(strID), _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieInfo(CInt(strID)) + End If + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return False + End If + + IMDBMovie.ID = CStr(IIf(String.IsNullOrEmpty(Movie.imdb_id) AndAlso _MySettings.FallBackEng, MovieE.imdb_id, Movie.imdb_id)) + IMDBMovie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + If bwTMDBg.CancellationPending Or IsNothing(Movie) Then Return Nothing + + Dim Keywords As WatTmdb.V3.TmdbMovieKeywords + Keywords = _TMDBApi.GetMovieKeywords(Movie.id) + If Not IsNothing(Keywords) AndAlso Not IsNothing(Keywords.keywords) Then + If Keywords.keywords.Count <> 0 AndAlso _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + End If + + ' to be added the tags structure + '' <movie> + '' ... + '' <tag>Name of the tag</tag> + '' ... + '' </movie> + If Options.bTitle Then + IMDBMovie.OriginalTitle = CStr(IIf(String.IsNullOrEmpty(Movie.original_title) AndAlso _MySettings.FallBackEng, MovieE.original_title, Movie.original_title)) + If String.IsNullOrEmpty(IMDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + IMDBMovie.Title = CStr(IIf(String.IsNullOrEmpty(Movie.title) AndAlso _MySettings.FallBackEng, MovieE.title, Movie.title)) + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If GetPoster Then + ' I will add original always. to be updated if size, TMDBConf.images.poster_sizes(0) & + Dim Images As WatTmdb.V3.TmdbMovieImages + Images = _TMDBApi.GetMovieImages(Movie.id, _MySettings.TMDBLanguage) + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If (Images.posters.Count = 0) AndAlso _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + End If + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If Images.posters.Count > 0 Then + _sPoster = _TMDBConf.images.base_url & "w92" & Images.posters(0).file_path + Else + _sPoster = "" + End If + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bYear Then IMDBMovie.Year = Left(CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)), 4) + + Dim Releases As WatTmdb.V3.TmdbMovieReleases = Nothing + If Options.bMPAA Then + IMDBMovie.MPAA = "" + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each Country In Releases.countries + If Country.iso_3166_1.ToUpper = CStr(IIf(Master.eSettings.CertificationLang = "", "US", Master.eSettings.CertificationLang)) Then + IMDBMovie.MPAA = Country.certification + Exit For + End If + Next + End If + IMDBMovie.Certification = IMDBMovie.MPAA + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bRelease Then + IMDBMovie.ReleaseDate = CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)) + End If + + If Options.bRating AndAlso (String.IsNullOrEmpty(IMDBMovie.Rating) OrElse Not Master.eSettings.LockRating) Then + IMDBMovie.Rating = CStr(IIf(IsNothing(Movie.vote_average) AndAlso Movie.vote_average = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_average, Movie.vote_average)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'trailer + If Options.bTrailer AndAlso (String.IsNullOrEmpty(IMDBMovie.Trailer) OrElse Not Master.eSettings.LockTrailer) Then + Dim Trailers As WatTmdb.V3.TmdbMovieTrailers + Trailers = _TMDBApi.GetMovieTrailers(Movie.id) + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If (Trailers.youtube.Count = 0) AndAlso _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + End If + + IMDBMovie.Trailer = "" + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If Trailers.youtube.Count > 0 Then + IMDBMovie.Trailer = "http://www.youtube.com/watch?hd=1&v=" & Trailers.youtube(0).source + End If + End If + + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bVotes Then + IMDBMovie.Votes = CStr(IIf(IsNothing(Movie.vote_count) AndAlso Movie.vote_count = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_count.ToString(), Movie.vote_count.ToString())) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Dim aCast As WatTmdb.V3.TmdbMovieCast = Nothing + If Options.bCast Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.cast.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + + Dim Cast As New List(Of MediaContainers.Person) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + For Each aAc As WatTmdb.V3.Cast In aCast.cast + Dim aPer As New MediaContainers.Person + aPer.Name = aAc.name + aPer.Role = aAc.character + ' to be added / dialog to choose the size of the images + aPer.Thumb = _TMDBConf.images.base_url & "original" & aAc.profile_path + Cast.Add(aPer) + Next + End If + IMDBMovie.Actors = Cast + End If + + If Options.bTagline AndAlso (String.IsNullOrEmpty(IMDBMovie.Tagline) OrElse Not Master.eSettings.LockTagline) Then + IMDBMovie.Tagline = CStr(IIf(String.IsNullOrEmpty(IMDBMovie.Tagline) AndAlso _MySettings.FallBackEng, MovieE.tagline, Movie.tagline)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get countries of the movie + If Options.bCountry Then + If IsNothing(Releases) Then + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + End If + IMDBMovie.Countries.Clear() + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each aCo As WatTmdb.V3.ReleaseCountry In Releases.countries + IMDBMovie.Countries.Add(aCo.iso_3166_1) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get genres of the movie + If Options.bGenre AndAlso (String.IsNullOrEmpty(IMDBMovie.Genre) OrElse Not Master.eSettings.LockGenre) Then + IMDBMovie.Genres.Clear() + Dim tGen As System.Collections.Generic.List(Of WatTmdb.V3.MovieGenre) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tGen = CType(IIf(Movie.genres.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.genres, Movie.genres), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + Else + tGen = CType(IIf(_MySettings.FallBackEng, MovieE.genres, Nothing), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + End If + + + If Not IsNothing(tGen) Then + For Each aGen As WatTmdb.V3.MovieGenre In tGen + IMDBMovie.Genres.Add(aGen.name) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bOutline AndAlso (String.IsNullOrEmpty(IMDBMovie.Outline) OrElse Not Master.eSettings.LockOutline) Then + IMDBMovie.Outline = CStr(IIf(String.IsNullOrEmpty(Movie.overview) AndAlso _MySettings.FallBackEng, MovieE.overview, Movie.overview)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bPlot AndAlso (String.IsNullOrEmpty(IMDBMovie.Plot) OrElse Not Master.eSettings.LockPlot) Then + If Master.eSettings.OutlineForPlot AndAlso String.IsNullOrEmpty(IMDBMovie.Plot) AndAlso Not String.IsNullOrEmpty(IMDBMovie.Outline) Then + IMDBMovie.Plot = IMDBMovie.Outline + Else + IMDBMovie.Plot = "" + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get the movie duration + If Options.bRuntime Then + IMDBMovie.Runtime = CStr(IIf(IsNothing(Movie.runtime) AndAlso Movie.runtime = 0 AndAlso _MySettings.FallBackEng, MovieE.runtime.ToString(), Movie.runtime.ToString())) + End If + + 'Get Production Studio + If Options.bStudio AndAlso (String.IsNullOrEmpty(IMDBMovie.Studio) OrElse Not Master.eSettings.LockStudio) Then + tStr = "" + Dim tPC As System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tPC = CType(IIf(Movie.production_companies.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.production_companies, Movie.production_companies), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + Else + tPC = CType(IIf(_MySettings.FallBackEng, MovieE.production_companies, Nothing), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + End If + + If Not IsNothing(tPC) Then + For Each aPro As WatTmdb.V3.ProductionCompany In tPC + tStr = tStr & " / " & aPro.name + Next + End If + If Len(tStr) > 3 Then + tStr = Trim(Right(tStr, Len(tStr) - 3)) + End If + IMDBMovie.Studio = tStr + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get All Other Info + If FullCrew Or Options.bWriters Or Options.bDirector Then + If IsNothing(aCast) Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.crew.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + End If + IMDBMovie.Credits.Clear() + IMDBMovie.Directors.Clear() + If Not IsNothing(aCast.crew) Then + For Each aAc As WatTmdb.V3.Crew In aCast.crew + If FullCrew Then + IMDBMovie.Credits.Add(aAc.name) + ElseIf Options.bWriters Then + If aAc.department = "Writing" AndAlso aAc.job = "Writer" Then + IMDBMovie.Credits.Add(aAc.name) + End If + End If + If Options.bDirector Then + If aAc.job = "Director" Then + IMDBMovie.Directors.Add(aAc.name) + End If + End If + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Return True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Function GetMovieStudios(ByVal strID As String) As List(Of String) + Dim alStudio As New List(Of String) + Dim Movie As WatTmdb.V3.TmdbMovie + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + If Movie.production_companies.Count = 0 And _MySettings.FallBackEng Then + Movie = _TMDBApi.GetMovieByIMDB(strID, "en") + End If + For Each aComp In Movie.production_companies + alStudio.Add(aComp.name) + Next + + Return alStudio + + End Function + + Public Function GetSearchMovieInfo(ByVal sMovieName As String, ByRef dbMovie As Structures.DBMovie, ByVal iType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As MediaContainers.Movie + Dim r As MovieSearchResults = SearchMovie(sMovieName) + Dim b As Boolean = False + Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie + + Try + Select Case iType + Case Enums.ScrapeType.FullAsk, Enums.ScrapeType.UpdateAsk, Enums.ScrapeType.NewAsk, Enums.ScrapeType.MarkAsk, Enums.ScrapeType.FilterAsk + + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + Master.tmpMovie.Clear() + Using dIMDB As New dlgTMDBSearchResults(_MySettings, Me) + + If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + b = False + Else + b = GetMovieInfo(Master.tmpMovie.ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + Else + b = False + End If + End Using + End If + Case Enums.ScrapeType.FullAuto, Enums.ScrapeType.UpdateAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.SingleScrape, Enums.ScrapeType.FilterAuto + Dim exactHaveYear As Integer = FindYear(dbMovie.Filename, r.Matches) + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + b = GetMovieInfo(r.Matches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + End Select + + If b Then + Return imdbMovie + Else + Return New MediaContainers.Movie + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New MediaContainers.Movie + End Try + End Function + + Private Function FindYear(ByVal tmpname As String, ByVal lst As List(Of MediaContainers.Movie)) As Integer + Dim tmpyear As String = "" + Dim i As Integer + Dim ret As Integer = -1 + tmpname = Path.GetFileNameWithoutExtension(tmpname) + tmpname = tmpname.Replace(".", " ").Trim.Replace("(", " ").Replace(")", "").Trim + i = tmpname.LastIndexOf(" ") + If i >= 0 Then + tmpyear = tmpname.Substring(i + 1, tmpname.Length - i - 1) + If IsNumeric(tmpyear) AndAlso Convert.ToInt32(tmpyear) > 1950 Then 'let's assume there are no movies older then 1950 + For c = 0 To lst.Count - 1 + If lst(c).Year = tmpyear Then + ret = c + Exit For + End If + Next + End If + End If + Return ret + End Function + + Public Sub GetSearchMovieInfoAsync(ByVal imdbID As String, ByVal IMDBMovie As MediaContainers.Movie, ByVal Options As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.SearchDetails, _ + .Parameter = imdbID, .IMDBMovie = IMDBMovie, .Options = Options}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + + Public Sub SearchMovieAsync(ByVal sMovie As String, ByVal filterOptions As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.Movies, _ + .Parameter = sMovie, .Options = filterOptions}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + Select Case Args.Search + Case SearchType.Movies + Dim r As MovieSearchResults = SearchMovie(Args.Parameter) + e.Result = New Results With {.ResultType = SearchType.Movies, .Result = r} + Case SearchType.SearchDetails + Dim s As Boolean = GetMovieInfo(Args.Parameter, Args.IMDBMovie, False, False, True, Args.Options, True) + e.Result = New Results With {.ResultType = SearchType.SearchDetails, .Success = s} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub BW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBg.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.ResultType + Case SearchType.Movies + RaiseEvent SearchResultsDownloaded(DirectCast(Res.Result, MovieSearchResults)) + Case SearchType.SearchDetails + Dim movieInfo As MovieSearchResults = DirectCast(Res.Result, MovieSearchResults) + RaiseEvent SearchMovieInfoDownloaded(_sPoster, Res.Success) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + 'Private Function GetForcedTitle(ByVal strID As String, ByVal oTitle As String) As String + ' Dim fTitle As String = oTitle + ' Dim Movie As WatTmdb.V3.TmdbMovie + + ' Try + ' '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + ' If Left(strID.ToLower(), 4) = "tt" Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), _MySettings.TMDBLanguage) + ' If IsNothing(Movie) And _MySettings.FallBackEng Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), "en") + ' End If + ' Else + ' Movie = _TMDBApi.GetMovieByIMDB(strID) + ' End If + + ' fTitle = Movie.title + + ' Return fTitle + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' Return fTitle + ' End Try + 'End Function + + Private Function SearchMovie(ByVal sMovie As String) As MovieSearchResults + Try + Dim R As New MovieSearchResults + Dim Page As Integer = 1 + Dim Movies As WatTmdb.V3.TmdbMovieSearch + Dim TotP As Integer + Dim aE As Boolean + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + If Movies.total_results = 0 And _MySettings.FallBackEng Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + aE = True + End If + If Movies.total_results > 0 Then + Dim t1 As String + Dim t2 As String + Dim t3 As String + TotP = Movies.total_pages + While Page <= TotP And Page <= 3 + For Each aMovie In Movies.results + Dim aMI As WatTmdb.V3.TmdbMovie + aMI = _TMDBApi.GetMovieInfo(aMovie.id) + If IsNothing(aMI) Then + aMI = _TMDBApiE.GetMovieInfo(aMovie.id) + End If + If IsNothing(aMI.imdb_id) Then + t1 = "" + Else + t1 = aMI.imdb_id.ToString + End If + t2 = CStr(IIf(String.IsNullOrEmpty(aMovie.title), "", aMovie.title)) + t3 = Left(CStr(IIf(String.IsNullOrEmpty(aMovie.release_date), "", aMovie.release_date)), 4) + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(t1, t2, t3, 0) + lNewMovie.TMDBID = aMI.id.ToString + R.Matches.Add(lNewMovie) + Next + Page = Page + 1 + If aE Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + Else + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + End If + + End While + End If + + Return R + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Nothing + End Try + End Function + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim FullCast As Boolean + Dim FullCrew As Boolean + Dim IMDBMovie As MediaContainers.Movie + Dim Options As Structures.ScrapeOptions + Dim Parameter As String + Dim Search As SearchType + 'Dim TMDBConf As V3.TmdbConfiguration + 'Dim TMDBApi As V3.Tmdb + 'Dim FallBackEng As Boolean + 'Dim TMDBLang As String +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultType As SearchType + Dim Success As Boolean + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.IMPA.Poster/Scraper/clsScrapeTrailers.vb b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeTrailers.vb new file mode 100644 index 0000000..72ce5f8 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeTrailers.vb @@ -0,0 +1,265 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System +Imports System.IO +Imports System.Net +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI +Imports WatTmdb + +Public Class Trailers + +#Region "Fields" + + Private WebPage As New HTTP + Private _ImdbID As String = String.Empty + Private _ImdbTrailerPage As String = String.Empty + Private _TrailerList As New List(Of String) + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + Me.Clear() + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + AddHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + Me.WebPage.Cancel() + End Sub + + Public Sub Clear() + Me._TrailerList.Clear() + Me._ImdbID = String.Empty + Me._ImdbTrailerPage = String.Empty + End Sub + + Public Sub DeleteTrailers(ByVal sPath As String, ByVal NewTrailer As String) + Dim parPath As String = Directory.GetParent(sPath).FullName + Dim tmpName As String = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(sPath))) + Dim tmpNameNoStack As String = Path.Combine(parPath, Path.GetFileNameWithoutExtension(sPath)) + For Each t As String In Master.eSettings.ValidExts + If File.Exists(String.Concat(tmpName, "-trailer", t)) AndAlso Not String.Concat(tmpName, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpName, "[trailer]", t)) AndAlso Not String.Concat(tmpName, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "[trailer]", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "-trailer", t)) AndAlso Not String.Concat(tmpNameNoStack, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) + End If + Next + End Sub + + Public Sub DownloadProgressUpdated(ByVal iPercent As Integer) + RaiseEvent ProgressUpdated(iPercent) + End Sub + + Public Function DownloadSingleTrailer(ByVal sPath As String, ByVal ImdbID As String, ByVal isSingle As Boolean, ByVal currNfoTrailer As String) As String + Dim tURL As String = String.Empty + Try + Me._TrailerList.Clear() + + If Not Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, True) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + + Dim tLink As String = String.Empty + If Regex.IsMatch(Me._TrailerList.Item(0).ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Dim YT As New YouTube.Scraper + YT.GetVideoLinks(Me._TrailerList.Item(0).ToString) + If YT.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + tLink = YT.VideoLinks(Master.eSettings.PreferredTrailerQuality).URL + Else + Select Case Master.eSettings.PreferredTrailerQuality + Case Enums.TrailerQuality.HD1080p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720p) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720p).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD1080pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720pVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720pVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HD720p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD720pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HQFLV + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HQVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.SQMP4 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.SQFLV + tLink = String.Empty + Case Enums.TrailerQuality.SQVP8 + tLink = String.Empty + End Select + End If + Else + tLink = Me._TrailerList.Item(0).ToString + End If + + If Not String.IsNullOrEmpty(tLink) Then + tURL = WebPage.DownloadFile(tLink, sPath, False, "trailer") + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + End If + ElseIf Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, False) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + tURL = Me._TrailerList.Item(0).ToString + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return tURL + End Function + + Public Function DownloadTrailer(ByVal sPath As String, ByVal sURL As String) As String + Dim tURL As String = String.Empty + If Not String.IsNullOrEmpty(sURL) Then + tURL = WebPage.DownloadFile(sURL, sPath, True, "trailer") + + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + Return tURL + End Function + + Public Function GetTrailers(ByVal ImdbID As String, Optional ByVal BreakAfterFound As Boolean = True) As List(Of String) + Me._ImdbID = ImdbID + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", False) Then + Me.GetTMDBTrailer() + End If + + Return Me._TrailerList + End Function + + Public Function IsAllowedToDownload(ByVal sPath As String, ByVal isDL As Boolean, ByVal currNfoTrailer As String, Optional ByVal isSS As Boolean = False) As Boolean + Dim fScanner As New Scanner + + If isDL Then + If String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) OrElse Master.eSettings.OverwriteTrailer Then + Return True + Else + If isSS AndAlso String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) Then + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + Else + Return False + End If + End If + Else + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + End If + End Function + + Private Sub GetTMDBTrailer() + Dim TMDB As New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim YT As List(Of String) + + YT = TMDB.GetTrailers(_ImdbID) + + If Not YT.Count = 0 Then + For Each ast In YT + Me._TrailerList.Add(ast) + Next + End If + + TMDB = Nothing + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Scraper/clsScrapeYouTube.vb b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeYouTube.vb new file mode 100644 index 0000000..51ed7c4 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/clsScrapeYouTube.vb @@ -0,0 +1,336 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace YouTube + + Public Class Scraper + +#Region "Fields" + + Friend WithEvents bwYT As New System.ComponentModel.BackgroundWorker + + Private _VideoLinks As VideoLinkItemCollection + +#End Region 'Fields + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event VideoLinksRetrieved(ByVal bSuccess As Boolean) + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property VideoLinks() As VideoLinkItemCollection + Get + If _VideoLinks Is Nothing Then + _VideoLinks = New VideoLinkItemCollection + End If + Return _VideoLinks + End Get + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() + If bwYT.IsBusy Then bwYT.CancelAsync() + + While bwYT.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetVideoLinks(ByVal url As String) + Try + _VideoLinks = ParseYTFormats(url, False) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub GetVideoLinksAsync(ByVal url As String) + Try + If Not bwYT.IsBusy Then + _VideoLinks = Nothing + bwYT.WorkerSupportsCancellation = True + bwYT.RunWorkerAsync(url) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwYT.DoWork + Dim Url As String = DirectCast(e.Argument, String) + + Try + e.Result = ParseYTFormats(Url, True) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwYT.RunWorkerCompleted + Try + If e.Cancelled Then + 'user cancelled + RaiseEvent VideoLinksRetrieved(False) + ElseIf e.Error IsNot Nothing Then + 'exception occurred + RaiseEvent Exception(e.Error) + Else + 'all good + If e.Result IsNot Nothing Then + _VideoLinks = DirectCast(e.Result, VideoLinkItemCollection) + RaiseEvent VideoLinksRetrieved(True) + Else + RaiseEvent VideoLinksRetrieved(False) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetVideoTitle(ByVal HTML As String) As String + Dim result As String = "" + 'Dim KeyPattern As String = "'VIDEO_TITLE':\s*'([^']*?)'" + Dim KeyPattern As String = "meta name=\""title\"" content=\s*\""([^']*?)\""" + 'meta name="title" content= + If Regex.IsMatch(HTML, KeyPattern) Then + result = Regex.Match(HTML, KeyPattern).Groups(1).Value + End If + + Return result + End Function + + Private Function ParseYTFormats(ByVal url As String, ByVal doProgress As Boolean) As VideoLinkItemCollection + Dim DownloadLinks As New VideoLinkItemCollection + Dim sHTTP As New HTTP + + Try + If bwYT.CancellationPending Then Return DownloadLinks + + Dim Html As String = sHTTP.DownloadData(url) + If Html.ToLower.Contains("page not found") Then + Html = String.Empty + End If + + If String.IsNullOrEmpty(Html.Trim) Then Return DownloadLinks + If bwYT.CancellationPending Then Return DownloadLinks + + Dim VideoTitle As String = GetVideoTitle(Html) + VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") + + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) + If fmtMatch.Success Then + Dim FormatMap As String = fmtMatch.Groups(1).Value + Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") + + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) + Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) + + For i As Integer = 0 To FormatArray.Length - 1 + Dim yturl As String = rurl.Match(FormatArray(i)).Groups(1).Value + Dim ytitag As String = ritag.Match(FormatArray(i)).Groups(1).Value + Dim ytsig As String = rsig.Match(FormatArray(i)).Groups(1).Value + + 'Console.WriteLine("Trailer Itag: {0}", ytitag) + 'Console.WriteLine("Trailer Url: {0}", yturl) + 'Console.WriteLine("Trailer Sig: {0}", ytsig) + + Dim Link As New VideoLinkItem + Select Case ytitag + ' ********************************************************************** + ' see all itags http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs + ' ********************************************************************** + Case "5" + Link.Description = "240p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "6" + Link.Description = "270p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "13" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "17" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "18" + Link.Description = "360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQMP4 + Case "22" + Link.Description = "720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD720p + Case "34" + Link.Description = "360p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQFLV + Case "35" + Link.Description = "480p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HQFLV + Case "36" + Link.Description = "240p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "37" + Link.Description = "1080p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD1080p + Case "38" + Link.Description = "1536p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "43" + Link.Description = "360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.SQVP8 + Case "44" + Link.Description = "480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HQVP8 + Case "45" + Link.Description = "720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD720pVP8 + Case "46" + Link.Description = "1080p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD1080pVP8 + Case "82" + Link.Description = "3D 360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "83" + Link.Description = "3D 480p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "84" + Link.Description = "3D 720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "85" + Link.Description = "3D 520p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "100" + Link.Description = "3D 360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "101" + Link.Description = "3D 480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "102" + Link.Description = "3D 720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "120" + Link.Description = "720p LiveStream (FLV, AVC)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case Else + Link.Description = "Other" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + 'Continue For + End Select + + Link.URL = Web.HttpUtility.UrlDecode(Web.HttpUtility.UrlDecode(yturl)) & "&signature=" & ytsig & "&title=" & Web.HttpUtility.UrlEncode(VideoTitle) + Link.URL = Link.URL.Replace("sig=", "signature=") ' sig= returns HTTP 403 //oldstyle, keep it + 'Console.WriteLine("Trailer Url decoded: {0}", Link.URL) + + If bwYT.CancellationPending Then Return DownloadLinks + + If Not String.IsNullOrEmpty(Link.URL) AndAlso sHTTP.IsValidURL(Link.URL) Then + DownloadLinks.Add(Link) + End If + + If bwYT.CancellationPending Then Return DownloadLinks + + Next + + End If + Return DownloadLinks + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New VideoLinkItemCollection + Finally + sHTTP = Nothing + End Try + End Function + +#End Region 'Methods + + End Class + + Public Class VideoLinkItem + +#Region "Fields" + + Private _Description As String + Private _FormatQuality As Enums.TrailerQuality + Private _URL As String + +#End Region 'Fields + +#Region "Properties" + + Public Property Description() As String + Get + Return _Description + End Get + Set(ByVal value As String) + _Description = value + End Set + End Property + + Public Property URL() As String + Get + Return _URL + End Get + Set(ByVal value As String) + _URL = value + End Set + End Property + + Friend Property FormatQuality() As Enums.TrailerQuality + Get + Return _FormatQuality + End Get + Set(ByVal value As Enums.TrailerQuality) + _FormatQuality = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class VideoLinkItemCollection + Inherits Generic.SortedList(Of Enums.TrailerQuality, VideoLinkItem) + +#Region "Methods" + + Public Shadows Sub Add(ByVal Link As VideoLinkItem) + If Not MyBase.ContainsKey(Link.FormatQuality) Then MyBase.Add(Link.FormatQuality, Link) + End Sub + +#End Region 'Methods + + End Class + +End Namespace + diff --git a/Addons/scraper.IMPA.Poster/Scraper/dlgImgSelect.Designer.vb b/Addons/scraper.IMPA.Poster/Scraper/dlgImgSelect.Designer.vb new file mode 100644 index 0000000..3c9254c --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/dlgImgSelect.Designer.vb @@ -0,0 +1,569 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgImgSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgImgSelect)) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.pnlSize = New System.Windows.Forms.Panel() + Me.btnPreview = New System.Windows.Forms.Button() + Me.rbSmall = New System.Windows.Forms.RadioButton() + Me.rbMedium = New System.Windows.Forms.RadioButton() + Me.rbLarge = New System.Windows.Forms.RadioButton() + Me.rbXLarge = New System.Windows.Forms.RadioButton() + Me.pnlFanart = New System.Windows.Forms.Panel() + Me.chkThumb = New System.Windows.Forms.CheckBox() + Me.chkMid = New System.Windows.Forms.CheckBox() + Me.chkOriginal = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlDLStatus = New System.Windows.Forms.Panel() + Me.pnlIMDB = New System.Windows.Forms.Panel() + Me.lblDL6Status = New System.Windows.Forms.Label() + Me.lblDL6 = New System.Windows.Forms.Label() + Me.pbDL6 = New System.Windows.Forms.ProgressBar() + Me.pnlSinglePic = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlFANARTTV = New System.Windows.Forms.Panel() + Me.lblDL3Status = New System.Windows.Forms.Label() + Me.lblDL3 = New System.Windows.Forms.Label() + Me.pbDL3 = New System.Windows.Forms.ProgressBar() + Me.pnlMDB = New System.Windows.Forms.Panel() + Me.lblDL5Status = New System.Windows.Forms.Label() + Me.lblDL5 = New System.Windows.Forms.Label() + Me.pbDL5 = New System.Windows.Forms.ProgressBar() + Me.pnlIMPA = New System.Windows.Forms.Panel() + Me.lblDL4Status = New System.Windows.Forms.Label() + Me.lblDL4 = New System.Windows.Forms.Label() + Me.pbDL4 = New System.Windows.Forms.ProgressBar() + Me.pnlTMDB = New System.Windows.Forms.Panel() + Me.lblDL2Status = New System.Windows.Forms.Label() + Me.lblDL2 = New System.Windows.Forms.Label() + Me.pbDL2 = New System.Windows.Forms.ProgressBar() + Me.TableLayoutPanel1.SuspendLayout() + Me.pnlBottomMain.SuspendLayout() + Me.pnlSize.SuspendLayout() + Me.pnlFanart.SuspendLayout() + Me.pnlDLStatus.SuspendLayout() + Me.pnlIMDB.SuspendLayout() + Me.pnlSinglePic.SuspendLayout() + Me.pnlFANARTTV.SuspendLayout() + Me.pnlMDB.SuspendLayout() + Me.pnlIMPA.SuspendLayout() + Me.pnlTMDB.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(687, 11) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(836, 495) + Me.pnlBG.TabIndex = 1 + Me.pnlBG.Visible = False + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.pnlSize) + Me.pnlBottomMain.Controls.Add(Me.pnlFanart) + Me.pnlBottomMain.Controls.Add(Me.lblInfo) + Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) + Me.pnlBottomMain.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 495) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(836, 50) + Me.pnlBottomMain.TabIndex = 0 + ' + 'pnlSize + ' + Me.pnlSize.BackColor = System.Drawing.Color.White + Me.pnlSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.pnlSize.Controls.Add(Me.btnPreview) + Me.pnlSize.Controls.Add(Me.rbSmall) + Me.pnlSize.Controls.Add(Me.rbMedium) + Me.pnlSize.Controls.Add(Me.rbLarge) + Me.pnlSize.Controls.Add(Me.rbXLarge) + Me.pnlSize.Location = New System.Drawing.Point(8, 8) + Me.pnlSize.Name = "pnlSize" + Me.pnlSize.Size = New System.Drawing.Size(673, 34) + Me.pnlSize.TabIndex = 4 + Me.pnlSize.Visible = False + ' + 'btnPreview + ' + Me.btnPreview.Enabled = False + Me.btnPreview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnPreview.Image = CType(resources.GetObject("btnPreview.Image"), System.Drawing.Image) + Me.btnPreview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPreview.Location = New System.Drawing.Point(593, 5) + Me.btnPreview.Name = "btnPreview" + Me.btnPreview.Size = New System.Drawing.Size(75, 23) + Me.btnPreview.TabIndex = 6 + Me.btnPreview.Text = "Preview" + Me.btnPreview.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPreview.UseVisualStyleBackColor = True + ' + 'rbSmall + ' + Me.rbSmall.AutoSize = True + Me.rbSmall.Enabled = False + Me.rbSmall.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbSmall.Location = New System.Drawing.Point(475, 8) + Me.rbSmall.Name = "rbSmall" + Me.rbSmall.Size = New System.Drawing.Size(53, 17) + Me.rbSmall.TabIndex = 5 + Me.rbSmall.TabStop = True + Me.rbSmall.Text = "Small" + Me.rbSmall.UseVisualStyleBackColor = True + ' + 'rbMedium + ' + Me.rbMedium.AutoSize = True + Me.rbMedium.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbMedium.Location = New System.Drawing.Point(201, 8) + Me.rbMedium.Name = "rbMedium" + Me.rbMedium.Size = New System.Drawing.Size(69, 17) + Me.rbMedium.TabIndex = 4 + Me.rbMedium.TabStop = True + Me.rbMedium.Text = "Medium" + Me.rbMedium.UseVisualStyleBackColor = True + ' + 'rbLarge + ' + Me.rbLarge.AutoSize = True + Me.rbLarge.Enabled = False + Me.rbLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbLarge.Location = New System.Drawing.Point(343, 8) + Me.rbLarge.Name = "rbLarge" + Me.rbLarge.Size = New System.Drawing.Size(55, 17) + Me.rbLarge.TabIndex = 3 + Me.rbLarge.TabStop = True + Me.rbLarge.Text = "Cover" + Me.rbLarge.UseVisualStyleBackColor = True + ' + 'rbXLarge + ' + Me.rbXLarge.AutoSize = True + Me.rbXLarge.Enabled = False + Me.rbXLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbXLarge.Location = New System.Drawing.Point(26, 8) + Me.rbXLarge.Name = "rbXLarge" + Me.rbXLarge.Size = New System.Drawing.Size(66, 17) + Me.rbXLarge.TabIndex = 2 + Me.rbXLarge.TabStop = True + Me.rbXLarge.Text = "Original" + Me.rbXLarge.UseVisualStyleBackColor = True + ' + 'pnlFanart + ' + Me.pnlFanart.BackColor = System.Drawing.Color.White + Me.pnlFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFanart.Controls.Add(Me.chkThumb) + Me.pnlFanart.Controls.Add(Me.chkMid) + Me.pnlFanart.Controls.Add(Me.chkOriginal) + Me.pnlFanart.Location = New System.Drawing.Point(8, 8) + Me.pnlFanart.Name = "pnlFanart" + Me.pnlFanart.Size = New System.Drawing.Size(339, 34) + Me.pnlFanart.TabIndex = 5 + Me.pnlFanart.Visible = False + ' + 'chkThumb + ' + Me.chkThumb.AutoSize = True + Me.chkThumb.Location = New System.Drawing.Point(231, 8) + Me.chkThumb.Name = "chkThumb" + Me.chkThumb.Size = New System.Drawing.Size(111, 17) + Me.chkThumb.TabIndex = 9 + Me.chkThumb.Text = "Check All Thumb" + Me.chkThumb.UseVisualStyleBackColor = True + ' + 'chkMid + ' + Me.chkMid.AutoSize = True + Me.chkMid.Location = New System.Drawing.Point(131, 8) + Me.chkMid.Name = "chkMid" + Me.chkMid.Size = New System.Drawing.Size(96, 17) + Me.chkMid.TabIndex = 7 + Me.chkMid.Text = "Check All Mid" + Me.chkMid.UseVisualStyleBackColor = True + ' + 'chkOriginal + ' + Me.chkOriginal.AutoSize = True + Me.chkOriginal.Location = New System.Drawing.Point(7, 8) + Me.chkOriginal.Name = "chkOriginal" + Me.chkOriginal.Size = New System.Drawing.Size(118, 17) + Me.chkOriginal.TabIndex = 8 + Me.chkOriginal.Text = "Check All Original" + Me.chkOriginal.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.Location = New System.Drawing.Point(402, 10) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(240, 31) + Me.lblInfo.TabIndex = 3 + Me.lblInfo.Text = "Selected item will be set as fanart. All checked items will be saved to \extrathu" & _ + "mbs." + Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblInfo.Visible = False + ' + 'pnlDLStatus + ' + Me.pnlDLStatus.BackColor = System.Drawing.Color.White + Me.pnlDLStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlDLStatus.Controls.Add(Me.pnlIMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlSinglePic) + Me.pnlDLStatus.Controls.Add(Me.pnlFANARTTV) + Me.pnlDLStatus.Controls.Add(Me.pnlMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlIMPA) + Me.pnlDLStatus.Controls.Add(Me.pnlTMDB) + Me.pnlDLStatus.Location = New System.Drawing.Point(253, 98) + Me.pnlDLStatus.Name = "pnlDLStatus" + Me.pnlDLStatus.Size = New System.Drawing.Size(331, 330) + Me.pnlDLStatus.TabIndex = 0 + Me.pnlDLStatus.Visible = False + ' + 'pnlIMDB + ' + Me.pnlIMDB.Controls.Add(Me.lblDL6Status) + Me.pnlIMDB.Controls.Add(Me.lblDL6) + Me.pnlIMDB.Controls.Add(Me.pbDL6) + Me.pnlIMDB.Location = New System.Drawing.Point(3, 84) + Me.pnlIMDB.Name = "pnlIMDB" + Me.pnlIMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlIMDB.TabIndex = 9 + ' + 'lblDL6Status + ' + Me.lblDL6Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL6Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL6Status.Name = "lblDL6Status" + Me.lblDL6Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL6Status.TabIndex = 8 + ' + 'lblDL6 + ' + Me.lblDL6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL6.Location = New System.Drawing.Point(5, 10) + Me.lblDL6.Name = "lblDL6" + Me.lblDL6.Size = New System.Drawing.Size(310, 13) + Me.lblDL6.TabIndex = 7 + Me.lblDL6.Text = "Performing Preliminary Tasks..." + ' + 'pbDL6 + ' + Me.pbDL6.Location = New System.Drawing.Point(6, 52) + Me.pbDL6.Name = "pbDL6" + Me.pbDL6.Size = New System.Drawing.Size(309, 19) + Me.pbDL6.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL6.TabIndex = 6 + ' + 'pnlSinglePic + ' + Me.pnlSinglePic.BackColor = System.Drawing.Color.White + Me.pnlSinglePic.Controls.Add(Me.Label2) + Me.pnlSinglePic.Controls.Add(Me.ProgressBar1) + Me.pnlSinglePic.Location = New System.Drawing.Point(3, 3) + Me.pnlSinglePic.Name = "pnlSinglePic" + Me.pnlSinglePic.Size = New System.Drawing.Size(321, 75) + Me.pnlSinglePic.TabIndex = 9 + Me.pnlSinglePic.Visible = False + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(5, 10) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(310, 13) + Me.Label2.TabIndex = 7 + Me.Label2.Text = "Downloading Selected Image..." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(6, 53) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(309, 19) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 6 + ' + 'pnlFANARTTV + ' + Me.pnlFANARTTV.Controls.Add(Me.lblDL3Status) + Me.pnlFANARTTV.Controls.Add(Me.lblDL3) + Me.pnlFANARTTV.Controls.Add(Me.pbDL3) + Me.pnlFANARTTV.Location = New System.Drawing.Point(3, 84) + Me.pnlFANARTTV.Name = "pnlFANARTTV" + Me.pnlFANARTTV.Size = New System.Drawing.Size(321, 75) + Me.pnlFANARTTV.TabIndex = 11 + ' + 'lblDL3Status + ' + Me.lblDL3Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL3Status.Name = "lblDL3Status" + Me.lblDL3Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL3Status.TabIndex = 8 + ' + 'lblDL3 + ' + Me.lblDL3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3.Location = New System.Drawing.Point(5, 10) + Me.lblDL3.Name = "lblDL3" + Me.lblDL3.Size = New System.Drawing.Size(310, 13) + Me.lblDL3.TabIndex = 7 + Me.lblDL3.Text = "Performing Preliminary Tasks..." + ' + 'pbDL3 + ' + Me.pbDL3.Location = New System.Drawing.Point(6, 53) + Me.pbDL3.Name = "pbDL3" + Me.pbDL3.Size = New System.Drawing.Size(309, 19) + Me.pbDL3.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL3.TabIndex = 6 + ' + 'pnlMDB + ' + Me.pnlMDB.Controls.Add(Me.lblDL5Status) + Me.pnlMDB.Controls.Add(Me.lblDL5) + Me.pnlMDB.Controls.Add(Me.pbDL5) + Me.pnlMDB.Location = New System.Drawing.Point(3, 246) + Me.pnlMDB.Name = "pnlMDB" + Me.pnlMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlMDB.TabIndex = 9 + ' + 'lblDL5Status + ' + Me.lblDL5Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL5Status.Name = "lblDL5Status" + Me.lblDL5Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL5Status.TabIndex = 8 + ' + 'lblDL5 + ' + Me.lblDL5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5.Location = New System.Drawing.Point(5, 10) + Me.lblDL5.Name = "lblDL5" + Me.lblDL5.Size = New System.Drawing.Size(310, 13) + Me.lblDL5.TabIndex = 7 + Me.lblDL5.Text = "Performing Preliminary Tasks..." + ' + 'pbDL5 + ' + Me.pbDL5.Location = New System.Drawing.Point(6, 53) + Me.pbDL5.Name = "pbDL5" + Me.pbDL5.Size = New System.Drawing.Size(309, 19) + Me.pbDL5.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL5.TabIndex = 6 + ' + 'pnlIMPA + ' + Me.pnlIMPA.Controls.Add(Me.lblDL4Status) + Me.pnlIMPA.Controls.Add(Me.lblDL4) + Me.pnlIMPA.Controls.Add(Me.pbDL4) + Me.pnlIMPA.Location = New System.Drawing.Point(3, 165) + Me.pnlIMPA.Name = "pnlIMPA" + Me.pnlIMPA.Size = New System.Drawing.Size(321, 75) + Me.pnlIMPA.TabIndex = 6 + ' + 'lblDL4Status + ' + Me.lblDL4Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL4Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL4Status.Name = "lblDL4Status" + Me.lblDL4Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL4Status.TabIndex = 8 + ' + 'lblDL4 + ' + Me.lblDL4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL4.Location = New System.Drawing.Point(5, 10) + Me.lblDL4.Name = "lblDL4" + Me.lblDL4.Size = New System.Drawing.Size(310, 13) + Me.lblDL4.TabIndex = 7 + Me.lblDL4.Text = "Performing Preliminary Tasks..." + ' + 'pbDL4 + ' + Me.pbDL4.Location = New System.Drawing.Point(6, 52) + Me.pbDL4.Name = "pbDL4" + Me.pbDL4.Size = New System.Drawing.Size(309, 19) + Me.pbDL4.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL4.TabIndex = 6 + ' + 'pnlTMDB + ' + Me.pnlTMDB.Controls.Add(Me.lblDL2Status) + Me.pnlTMDB.Controls.Add(Me.lblDL2) + Me.pnlTMDB.Controls.Add(Me.pbDL2) + Me.pnlTMDB.Location = New System.Drawing.Point(3, 3) + Me.pnlTMDB.Name = "pnlTMDB" + Me.pnlTMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlTMDB.TabIndex = 10 + ' + 'lblDL2Status + ' + Me.lblDL2Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL2Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL2Status.Name = "lblDL2Status" + Me.lblDL2Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL2Status.TabIndex = 8 + ' + 'lblDL2 + ' + Me.lblDL2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL2.Location = New System.Drawing.Point(5, 10) + Me.lblDL2.Name = "lblDL2" + Me.lblDL2.Size = New System.Drawing.Size(310, 13) + Me.lblDL2.TabIndex = 7 + Me.lblDL2.Text = "Performing Preliminary Tasks..." + ' + 'pbDL2 + ' + Me.pbDL2.Location = New System.Drawing.Point(6, 52) + Me.pbDL2.Name = "pbDL2" + Me.pbDL2.Size = New System.Drawing.Size(309, 19) + Me.pbDL2.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL2.TabIndex = 6 + ' + 'dlgImgSelect + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(836, 545) + Me.ControlBox = False + Me.Controls.Add(Me.pnlDLStatus) + Me.Controls.Add(Me.pnlBG) + Me.Controls.Add(Me.pnlBottomMain) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgImgSelect" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Poster" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlSize.ResumeLayout(False) + Me.pnlSize.PerformLayout() + Me.pnlFanart.ResumeLayout(False) + Me.pnlFanart.PerformLayout() + Me.pnlDLStatus.ResumeLayout(False) + Me.pnlIMDB.ResumeLayout(False) + Me.pnlSinglePic.ResumeLayout(False) + Me.pnlFANARTTV.ResumeLayout(False) + Me.pnlMDB.ResumeLayout(False) + Me.pnlIMPA.ResumeLayout(False) + Me.pnlTMDB.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlDLStatus As System.Windows.Forms.Panel + Friend WithEvents pnlIMPA As System.Windows.Forms.Panel + Friend WithEvents lblDL4Status As System.Windows.Forms.Label + Friend WithEvents lblDL4 As System.Windows.Forms.Label + Friend WithEvents pbDL4 As System.Windows.Forms.ProgressBar + Friend WithEvents lblInfo As System.Windows.Forms.Label + Friend WithEvents pnlSize As System.Windows.Forms.Panel + Friend WithEvents rbSmall As System.Windows.Forms.RadioButton + Friend WithEvents rbMedium As System.Windows.Forms.RadioButton + Friend WithEvents rbLarge As System.Windows.Forms.RadioButton + Friend WithEvents rbXLarge As System.Windows.Forms.RadioButton + Friend WithEvents pnlSinglePic As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL5Status As System.Windows.Forms.Label + Friend WithEvents lblDL5 As System.Windows.Forms.Label + Friend WithEvents pbDL5 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlFanart As System.Windows.Forms.Panel + Friend WithEvents chkThumb As System.Windows.Forms.CheckBox + Friend WithEvents chkMid As System.Windows.Forms.CheckBox + Friend WithEvents chkOriginal As System.Windows.Forms.CheckBox + Friend WithEvents btnPreview As System.Windows.Forms.Button + Friend WithEvents pnlFANARTTV As System.Windows.Forms.Panel + Friend WithEvents lblDL3Status As System.Windows.Forms.Label + Friend WithEvents lblDL3 As System.Windows.Forms.Label + Friend WithEvents pbDL3 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlTMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL2Status As System.Windows.Forms.Label + Friend WithEvents lblDL2 As System.Windows.Forms.Label + Friend WithEvents pbDL2 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlIMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL6Status As System.Windows.Forms.Label + Friend WithEvents lblDL6 As System.Windows.Forms.Label + Friend WithEvents pbDL6 As System.Windows.Forms.ProgressBar + +End Class diff --git a/Addons/scraper.IMPA.Poster/Scraper/dlgImgSelect.resx b/Addons/scraper.IMPA.Poster/Scraper/dlgImgSelect.resx new file mode 100644 index 0000000..3491405 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/dlgImgSelect.resx @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnPreview.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA + Cv8BNGKaggAAAuRJREFUOE+lkltsS3Ecx3+ILAsPFrfEyxJPXkh0bokg4UG78TQNI5FImPBAJKiNhBAy + MTwRMRJ1ibsZ29jc2t00Vrq1p3q6tqft6Tk9t87YeLCHff3/3Sp4dZJPvv/f5fs7///5HwJA/8Nv88jw + 8ApD1y+blnnNtKwGjmXl/qCQMxt+fB9xjI2NEYdGR0dp9OfP6Yph+gOKjpBmMcy8CoxwPi5gok81kDGt + BPOUci+xt1LO0Gy+ZAZuUcbtCe4NpHEtLKNBkHGfrQt5dySNrpSKIcvcbJkmka5pNKhrtrfxFE71RlD3 + UcT5gIjt7THMvhLHTEZlSwz1n0ScZTXe8yKextec6TRNY3zAF0O3tUYl7Ovqh+t9EHs8IRSdC4FO9+WZ + VBfEjlchHPEF8z2PRQnDg9b4AE3L0hA7wqNwDFWvP2Cn1w9Hox90zAc6McFRH9Y97MWuDn++56YwgJEc + G2CwAdmsSkPsCLf6I1jb3IUNL3sY3Zhxxgs67AG5PCg+4YW9uRsbWY33XAp8xrBlOHVdI1IVhb5oWdv1 + QBjLn3qwtqUDq5s6MOd0O2jfizwlx9uwqtGLdazGey76Q/hm6k4tmyXKyDLlVMV29aOApU0erHnWgWmH + noF2NYL2Ph2nuhFF+5uw8okXy1hP/YcghjTVqSgZoqQkkZZK2m58ErDouRfzLjSDKt2grbf+ZpMbJSeb + sPA520FvCINqxinLaaKoKHJsETGK1rCIh+8F3HnTh7vvgrjHbqMAjx/0CGiNDCAqJZGUEk45zQYk4nG+ + i7LPgoBkNIpsOglTzcDSFOQ0FTmdwdRiyvNqKolELAZZlre0t7URLSkro21VVSVdnZ1pSZKQSqXAPizY + /wHDMMCuKg+Ps6oKJZNBsL//6+7q6gWTaPzhWjx31qzF5Xb7Acf69S6mNRV2e22Fw1G7gcGVUcPyro3l + 5Qfnl5auYZ4Zk7l3ClsxuBQGTszNx/9SqHHDVG76BaMnpgu1OH2ZAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Scraper/dlgImgSelect.vb b/Addons/scraper.IMPA.Poster/Scraper/dlgImgSelect.vb new file mode 100644 index 0000000..b2e44a9 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/dlgImgSelect.vb @@ -0,0 +1,1582 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports EmberScraperModule.EmberTMDBScraperModule +Imports RestSharp +Imports WatTmdb + +Public Class dlgImgSelect + +#Region "Fields" + + Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwIMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwFANARTTVDownload As New System.ComponentModel.BackgroundWorker + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Private TMDB As TMDB.Scraper + Private TMDBPosters As New List(Of MediaContainers.Image) + + Private MPDB As New MPDB.Scraper + Private MPDBPosters As New List(Of MediaContainers.Image) + + Private IMPA As New IMPA.Scraper + Private IMPAPosters As New List(Of MediaContainers.Image) + + Private IMDB As New IMDBimg.Scraper + Private IMDBPosters As New List(Of MediaContainers.Image) + + Private FANARTTVs As FANARTTVs.Scraper + Private FANARTTVPosters As New List(Of MediaContainers.Image) + + Private CachePath As String = String.Empty + Private chkImage() As CheckBox + Private DLType As Enums.ImageType + Private ETHashes As New List(Of String) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + + Private isEdit As Boolean = False + Private isShown As Boolean = False + Private iTop As Integer = 5 + Private lblImage() As Label + + Private noImages As Boolean = False + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private PreDL As Boolean = False + Private Results As New Containers.ImgResult + Private selIndex As Integer = -1 + + Private tMovie As New Structures.DBMovie + Private tmpImage As New MediaContainers.Image + Private _impaDone As Boolean = True + Private _imdbDone As Boolean = True + Private _fanarttvDone As Boolean = True + Private _mpdbDone As Boolean = True + Private _tmdbDone As Boolean = True + +#End Region 'Fields + +#Region "Events" + + Private Event IMPADone() + + Private Event MPDBDone() + + Private Event TMDBDone() + + Private Event IMDBDone() + + Private Event FANARTTVDone() +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.PreDL = True + Me.SetUp() + Me.StartDownload() + End Sub + + Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult + '// + ' Overload to pass data + '\\ + + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.isShown = True + + MyBase.ShowDialog() + Return Results + End Function + + Public Overloads Function ShowDialog() As Containers.ImgResult + Me.isShown = True + MyBase.ShowDialog() + + Return Results + End Function + + 'Rewrite to simplify + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal isChecked As Boolean, poster As MediaContainers.Image) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(256, 286) + Me.pbImage(iIndex).Size = New Size(250, 250) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.pnlImage(iIndex).Tag = poster + Me.pbImage(iIndex).Tag = poster + Me.pbImage(iIndex).Image = poster.WebImage.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.pnlBG.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If Me.DLType = Enums.ImageType.Fanart Then + ReDim Preserve Me.chkImage(iIndex) + Me.chkImage(iIndex) = New CheckBox() + Me.chkImage(iIndex).Name = iIndex.ToString + Me.chkImage(iIndex).Size = New Size(250, 30) + Me.chkImage(iIndex).AutoSize = False + Me.chkImage(iIndex).BackColor = Color.White + Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + 'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + Me.chkImage(iIndex).Left = 0 + Me.chkImage(iIndex).Top = 250 + Me.chkImage(iIndex).Checked = isChecked + Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve Me.lblImage(iIndex) + Me.lblImage(iIndex) = New Label() + Me.lblImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Size = New Size(250, 30) + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + If IsTMDBURL(poster.URL) Then + Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + Else + Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + End If + Me.lblImage(iIndex).Tag = poster + Me.lblImage(iIndex).Left = 0 + Me.lblImage(iIndex).Top = 250 + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 301 + Else + Me.iLeft += 271 + End If + End Sub + + Private Sub AllDoneDownloading() + If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone AndAlso Me._imdbDone AndAlso Me._fanarttvDone Then + Me.pnlDLStatus.Visible = False + Me.TMDBPosters.AddRange(Me.IMPAPosters) + Me.TMDBPosters.AddRange(Me.MPDBPosters) + Me.TMDBPosters.AddRange(Me.IMDBPosters) + Me.TMDBPosters.AddRange(Me.FANARTTVPosters) + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + End If + End Sub + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + PreviewImage() + End Sub + + Private Sub PreviewImage() + Try + Dim tImage As New Images + Me.pnlTMDB.Visible = False + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = True + Me.pnlDLStatus.Height = 85 + Me.pnlDLStatus.Top = 185 + + Application.DoEvents() + + Select Case True + Case rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + Case rbLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + Case rbMedium.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case rbSmall.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End Select + + Me.pnlSinglePic.Visible = False + + If Not IsNothing(tImage.Image) Then + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image) + + End If + + tImage.Dispose() + tImage = Nothing + + Catch ex As Exception + Me.pnlSinglePic.Visible = False + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.IMDBPosters.Count - 1 + Try + If Me.bwIMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMDBDownload.ReportProgress(i + 1, Me.IMDBPosters.Item(i).URL) + Try + Me.IMDBPosters.Item(i).WebImage.FromWeb(Me.IMDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMDBPosters.Item(i).URL = StringUtils.CleanURL(Me.IMDBPosters.Item(i).URL) + Me.IMDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMDBPosters.Item(i).Description, ")_(url=", Me.IMDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwIMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL6Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL6.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._imdbDone = True + RaiseEvent IMDBDone() + End If + End Sub + + Private Sub bwFANARTTVDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTVDownload.DoWork + '// + ' Thread to download FanartTV images from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.FANARTTVPosters.Count - 1 + Try + If Me.bwFANARTTVDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwFANARTTVDownload.ReportProgress(i + 1, Me.FANARTTVPosters.Item(i).URL) + Try + Me.FANARTTVPosters.Item(i).WebImage.FromWeb(Me.FANARTTVPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.FANARTTVPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.FANARTTVPosters.Item(i).URL = StringUtils.CleanURL(Me.FANARTTVPosters.Item(i).URL) + Me.FANARTTVPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.FANARTTVPosters.Item(i).Description, ")_(url=", Me.FANARTTVPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwFANARTTVDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTVDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL3.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwFANARTTVDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTVDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._fanarttvDone = True + RaiseEvent FANARTTVDone() + End If + End Sub + + Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork + '// + ' Thread to download impa posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + + For i As Integer = 0 To Me.IMPAPosters.Count - 1 + If bwIMPADownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL) + Try + Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL) + Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL4Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL4.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPABownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._impaDone = True + RaiseEvent IMPADone() + End If + End Sub + + Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.MPDBPosters.Count - 1 + Try + If Me.bwMPDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL) + Try + Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL) + Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL5Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL5.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._mpdbDone = True + RaiseEvent MPDBDone() + End If + End Sub + + Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork + '// + ' Thread to download tmdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + Dim thumbLink As String = String.Empty + Dim savePath As String = String.Empty + Dim extrathumbSize As String = String.Empty + + extrathumbSize = _MySettings.ManualETSize + + 'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all. + Dim posters As MediaContainers.Image() + If Me.DLType = Enums.ImageType.Fanart Then + posters = TMDBPosters.Where(Function(s) s.Description = extrathumbSize).ToArray() + Else + posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray() + End If + + For i As Integer = 0 To posters.Count - 1 + Try + If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then + If Me.bwTMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwTMDBDownload.ReportProgress((i + 1), posters(i).URL) + Try + posters(i).WebImage.FromWeb(posters(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then + If Me.DLType = Enums.ImageType.Fanart Then + + + If Not posters(i).URL.Contains("-thumb.") Then + Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org" + thumbLink = RemoveServerURL(posters(i).URL) + 'If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("-poster.", "-thumb.") + thumbLink = thumbLink.Replace("-original.", "-thumb.") + ''Else + 'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb") + 'End If + Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Else + Me.Results.Posters.Add(posters(i).URL) + End If + End If + If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then + Try + posters(i).URL = Me.CleanTMDBURL(posters(i).URL) + + savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg")) + posters(i).WebImage.Save(savePath, , , False) + + If Master.eSettings.AutoET Then + Dim tSize As New Enums.FanartSize + Select Case posters(i).Description.ToLower + Case "original" + tSize = Enums.FanartSize.Lrg + Case "mid" + tSize = Enums.FanartSize.Mid + Case "thumb" + tSize = Enums.FanartSize.Small + End Select + If Master.eSettings.AutoETSize = tSize Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + posters(i).isChecked = True + End If + End If + End If + + Catch + End Try + End If + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL2.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._tmdbDone = True + RaiseEvent TMDBDone() + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + IMPA.Cancel() + MPDB.Cancel() + TMDB.Cancel() + IMDB.Cancel() + FANARTTVs.Cancel() + + If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync() + If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync() + If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync() + If bwIMDBDownload.IsBusy Then bwIMDBDownload.CancelAsync() + If bwFANARTTVDownload.IsBusy Then bwFANARTTVDownload.CancelAsync() + + While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean) + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Text.ToLower.Contains(sType) Then + Me.chkImage(i).Checked = Checked + End If + Next + End Sub + + Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged + Me.CheckAll("(poster)", chkMid.Checked) + End Sub + + Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged + Me.CheckAll("(original)", chkOriginal.Checked) + End Sub + + Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged + Me.CheckAll("(thumb)", chkThumb.Checked) + End Sub + + Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'Me.tmpImage.Dispose() + + IMPA = Nothing + MPDB = Nothing + TMDB = Nothing + IMDB = Nothing + FANARTTVs = Nothing + + IMPAPosters = Nothing + MPDBPosters = Nothing + TMDBPosters = Nothing + IMDBPosters = Nothing + FANARTTVPosters = Nothing + + End Sub + + Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath) + End Sub + + Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not PreDL Then SetUp() + End Sub + + Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Try + Application.DoEvents() + If Not PreDL Then + StartDownload() + ElseIf noImages Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image) + Try + 'set all pnl colors to white first + 'remove all the current genres + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(i).BackColor = Color.White + Me.chkImage(i).ForeColor = Color.Black + Else + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + End If + Next + + 'set selected pnl color to blue + Me.pnlImage(iIndex).BackColor = Color.Blue + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(iIndex).BackColor = Color.Blue + Me.chkImage(iIndex).ForeColor = Color.White + Else + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + End If + + Me.selIndex = iIndex + + Me.pnlSize.Visible = False + + If IsTMDBURL(poster.URL) Then + Me.SetupSizes(poster.ParentID) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + Me.OK_Button.Enabled = False + Else + Me.OK_Button.Focus() + End If + Me.tmpImage.Clear() + Else + Me.rbXLarge.Checked = False + Me.rbLarge.Checked = False + Me.rbMedium.Checked = False + Me.rbSmall.Checked = False + Me.OK_Button.Enabled = True + Me.OK_Button.Focus() + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function IsTMDBURL(ByVal sURL As String) As Boolean + If sURL.ToLower.Contains(_TMDBConf.images.base_url.ToLower) Then + Return True + Else + Return False + End If + End Function + + Private Function CleanTMDBURL(ByVal sURL As String) As String + If IsTMDBURL(sURL) Then + Dim _sURL As New Uri(sURL) + sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped)) + Else + sURL = StringUtils.TruncateURL(sURL, 40, True) + End If + Return sURL.Replace(":", "$c$").Replace("/", "$s$") + End Function + + + Private Sub GetFanart() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim di As New DirectoryInfo(CachePath) + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + If Not IsNothing(tImage.WebImage.Image) Then + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + 'Case sFile.Name.Contains("(mid)") + ' tImage.Description = "mid" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + End If + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "backdrop") + + If _MySettings.UseFANARTTV Then + Me.lblDL3.Text = Master.eLang.GetString(120, "Retrieving data from Fanart.tv...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._fanarttvDone = False + + Me.FANARTTVs.GetImagesAsync(tMovie.Movie.ID) + Else + Me.lblDL3.Text = Master.eLang.GetString(121, "Fanart.tv is not enabled") + End If + + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub GetPosters() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim lFi As New List(Of FileInfo) + Dim di As New DirectoryInfo(CachePath) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 207 + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "poster") + + If _MySettings.UseIMDB Then + Me.lblDL6.Text = Master.eLang.GetString(117, "Retrieving data from IMDB.com...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._imdbDone = False + + Me.IMDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL6.Text = Master.eLang.GetString(118, "IMDB.com is not enabled") + End If + + If _MySettings.UseIMPA Then + Me.lblDL4.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._impaDone = False + + Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL4.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled") + End If + + If _MySettings.UseMPDB Then + Me.lblDL5.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._mpdbDone = False + + Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL5.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVDoneDownloading() + Try + Me._fanarttvDone = True + Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL3.Value = 0 + + 'Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = Posters.Count + + Me.FANARTTVPosters = Posters + + Me.bwFANARTTVDownload.WorkerSupportsCancellation = True + Me.bwFANARTTVDownload.WorkerReportsProgress = True + Me.bwFANARTTVDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVProgressUpdated(ByVal iPercent As Integer) + Me.pbDL3.Value = iPercent + End Sub + + Private Sub IMDBDoneDownloading() + Try + Me._imdbDone = True + Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL6.Value = 0 + + 'Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = Posters.Count + + Me.IMDBPosters = Posters + + Me.bwIMDBDownload.WorkerSupportsCancellation = True + Me.bwIMDBDownload.WorkerReportsProgress = True + Me.bwIMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL6.Value = iPercent + End Sub + + Private Sub IMPADoneDownloading() + Try + Me._impaDone = True + Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL4.Value = 0 + + 'Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = Posters.Count + + Me.IMPAPosters = Posters + + Me.bwIMPADownload.WorkerSupportsCancellation = True + Me.bwIMPADownload.WorkerReportsProgress = True + Me.bwIMPADownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAProgressUpdated(ByVal iPercent As Integer) + Me.pbDL4.Value = iPercent + End Sub + + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then + pnlBG.VerticalScroll.Value += 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum + End If + Else + If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then + pnlBG.VerticalScroll.Value -= 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub MPDBDoneDownloading() + Try + Me._mpdbDone = True + Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL5.Value = 0 + + 'Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = Posters.Count + + Me.MPDBPosters = Posters + + Me.bwMPDBDownload.WorkerSupportsCancellation = True + Me.bwMPDBDownload.WorkerReportsProgress = True + Me.bwMPDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL5.Value = iPercent + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + Dim tmpPathPlus As String = String.Empty + Dim extrathumbSize As String + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + If DLType = Enums.ImageType.Fanart Then + tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") + Else + tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") + End If + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If + + If Me.DLType = Enums.ImageType.Fanart Then + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + Dim isChecked As Boolean = False + + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + isChecked = True + Exit For + End If + Next + + If isChecked Then + Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs") + If isEdit Then + extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName) + Else + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName) + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName) + Else + extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName) + End If + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + End If + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + Dim fsET As FileStream + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) + Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg) + fsET.Close() + iVal += 1 + End If + Next + fsET = Nothing + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + Try + 'If Me.DLType = Enums.ImageType.Fanart OrElse Not IsTMDBURL(DirectCast(sender, PictureBox).Tag.ToString) Then + 'ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(DirectCast(sender, PictureBox).Image) + 'Else + PreviewImage() + 'End If + Catch + End Try + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Panel).Name), DirectCast(DirectCast(sender, Panel).Tag, MediaContainers.Image)) + End Sub + + Private Sub ProcessPics(ByVal posters As List(Of MediaContainers.Image)) + Try + Dim iIndex As Integer = 0 + + 'remove all entries with invalid images + If Master.eSettings.UseImgCache Then + For i As Integer = posters.Count - 1 To 0 Step -1 + If IsNothing(posters.Item(i).WebImage.Image) Then + posters.RemoveAt(i) + End If + Next + End If + + If posters.Count > 0 Then + For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) RemoveServerURL(p.URL)) + If Not IsNothing(xPoster.WebImage.Image) AndAlso (Me.DLType = Enums.ImageType.Fanart OrElse Not (IsTMDBURL(xPoster.URL) AndAlso Not xPoster.Description = "cover")) Then + Me.AddImage(xPoster.Description, iIndex, xPoster.isChecked, xPoster) + iIndex += 1 + End If + Next + Else + If Not Me.PreDL OrElse isShown Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Else + noImages = True + End If + End If + + Me.Activate() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub rbLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbMedium_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbMedium.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbSmall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSmall.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbXLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbXLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub SetUp() + Try + AddHandler TMDB.PostersDownloaded, AddressOf TMDBPostersDownloaded + AddHandler TMDB.ProgressUpdated, AddressOf TMDBProgressUpdated + AddHandler IMPA.PostersDownloaded, AddressOf IMPAPostersDownloaded + AddHandler IMPA.ProgressUpdated, AddressOf IMPAProgressUpdated + AddHandler MPDB.PostersDownloaded, AddressOf MPDBPostersDownloaded + AddHandler MPDB.ProgressUpdated, AddressOf MPDBProgressUpdated + AddHandler IMDB.PostersDownloaded, AddressOf IMDBPostersDownloaded + AddHandler IMDB.ProgressUpdated, AddressOf IMDBProgressUpdated + AddHandler FANARTTVs.PostersDownloaded, AddressOf FANARTTVPostersDownloaded + AddHandler FANARTTVs.ProgressUpdated, AddressOf FANARTTVProgressUpdated + AddHandler IMPADone, AddressOf IMPADoneDownloading + AddHandler TMDBDone, AddressOf TMDBDoneDownloading + AddHandler MPDBDone, AddressOf MPDBDoneDownloading + AddHandler IMDBDone, AddressOf IMDBDoneDownloading + AddHandler FANARTTVDone, AddressOf FANARTTVDoneDownloading + + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlBG.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlBG) + + If Me.DLType = Enums.ImageType.Posters Then + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = True + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = True + Me.pnlMDB.Visible = True + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 328 + Me.pnlDLStatus.Top = 82 + Else + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = True + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 129 + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(tMovie.Filename) + End If + End If + + CachePath = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, tMovie.Movie.IMDBID, Path.DirectorySeparatorChar, If(Me.DLType = Enums.ImageType.Posters, "posters", "fanart")) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview", True) + Me.chkThumb.Text = Master.eLang.GetString(41, "Check All Thumb") + Me.chkMid.Text = Master.eLang.GetString(42, "Check All Mid") + Me.chkOriginal.Text = Master.eLang.GetString(43, "Check All Original") + Me.lblInfo.Text = Master.eLang.GetString(44, "Selected item will be set as fanart. All checked items will be saved to \extrathumbs.") + Me.lblDL5.Text = Master.eLang.GetString(45, "Performing Preliminary Tasks...") + Me.lblDL4.Text = Me.lblDL5.Text + Me.lblDL3.Text = Me.lblDL5.Text + Me.lblDL2.Text = Me.lblDL5.Text + Me.Label2.Text = Master.eLang.GetString(46, "Downloading Selected Image...") + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(0, sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Function RemoveServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Sub SetupSizes(ByVal ParentID As String) + Try + rbXLarge.Checked = False + rbXLarge.Enabled = False + rbXLarge.Text = Master.eLang.GetString(47, "Original") + rbLarge.Checked = False + rbLarge.Enabled = False + rbMedium.Checked = False + rbSmall.Checked = False + rbSmall.Enabled = False + If Me.DLType = Enums.ImageType.Fanart Then + rbLarge.Text = "w1280" + rbMedium.Text = "poster" + rbSmall.Text = "thumb" + Else + rbLarge.Text = Master.eLang.GetString(48, "Cover") + rbMedium.Text = Master.eLang.GetString(49, "Medium") + rbSmall.Text = Master.eLang.GetString(50, "Small") + End If + + For Each TMDBPoster As MediaContainers.Image In TMDBPosters.Where(Function(f) f.ParentID = ParentID) + Select Case TMDBPoster.Description + Case "original" + ' xlarge + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbXLarge.Enabled = True + rbXLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "cover" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "w1280" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format("w1280 ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + End If + Case "thumb" + ' small + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbSmall.Enabled = True + rbSmall.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "mid" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + Case "poster" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format("Poster ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + End Select + Next + + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Small + rbSmall.Checked = rbSmall.Enabled + Case Enums.PosterSize.Mid + rbMedium.Checked = rbMedium.Enabled + Case Enums.PosterSize.Lrg + rbLarge.Checked = rbLarge.Enabled + Case Enums.PosterSize.Xlrg + rbXLarge.Checked = rbXLarge.Enabled + End Select + + pnlSize.Visible = True + + Invalidate() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub StartDownload() + Try + Select Case Me.DLType + Case Enums.ImageType.Posters + Me.GetPosters() + Case Enums.ImageType.Fanart + Me.GetFanart() + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBDoneDownloading() + Try + Me._tmdbDone = True + Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL2.Value = 0 + + 'Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = Posters.Count + + Me.TMDBPosters = Posters + + Me.bwTMDBDownload.WorkerSupportsCancellation = True + Me.bwTMDBDownload.WorkerReportsProgress = True + Me.bwTMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL2.Value = iPercent + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Scraper/dlgTMDBSearchResults.Designer.vb b/Addons/scraper.IMPA.Poster/Scraper/dlgTMDBSearchResults.Designer.vb new file mode 100644 index 0000000..edf9f3b --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/dlgTMDBSearchResults.Designer.vb @@ -0,0 +1,460 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTMDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtTMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(497, 401) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(570, 401) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(4, 96) + Me.tvResults.Name = "tvResults" + Me.tvResults.ShowLines = False + Me.tvResults.ShowPlusMinus = False + Me.tvResults.ShowRootLines = False + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 4 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(294, 130) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(291, 70) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(291, 89) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(294, 295) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(472, 130) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(472, 156) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(472, 183) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtTMDBID + ' + Me.txtTMDBID.Enabled = False + Me.txtTMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBID.Location = New System.Drawing.Point(139, 399) + Me.txtTMDBID.Name = "txtTMDBID" + Me.txtTMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtTMDBID.TabIndex = 6 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(643, 64) + Me.pnlTop.TabIndex = 8 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(257, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(4, 403) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(130, 17) + Me.chkManual.TabIndex = 5 + Me.chkManual.Text = "Manual TMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(245, 399) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 7 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(472, 247) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(37, 13) + Me.lblIMDB.TabIndex = 20 + Me.lblIMDB.Text = "TMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(410, 130) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(33, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(410, 156) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(410, 183) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(410, 247) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(56, 13) + Me.lblIMDBHeader.TabIndex = 19 + Me.lblIMDBHeader.Text = "TMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(291, 279) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(262, 70) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 3 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(4, 71) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 2 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(364, 183) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 18 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(100, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching TMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(308, 155) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'dlgTMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(643, 454) + Me.ControlBox = False + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtTMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgTMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents tvResults As System.Windows.Forms.TreeView + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lblYear As System.Windows.Forms.Label + Friend WithEvents lblDirector As System.Windows.Forms.Label + Friend WithEvents lblGenre As System.Windows.Forms.Label + Friend WithEvents txtTMDBID As System.Windows.Forms.TextBox + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents lblIMDB As System.Windows.Forms.Label + Friend WithEvents lblYearHeader As System.Windows.Forms.Label + Friend WithEvents lblDirectorHeader As System.Windows.Forms.Label + Friend WithEvents lblGenreHeader As System.Windows.Forms.Label + Friend WithEvents lblIMDBHeader As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel + Friend WithEvents Label4 As System.Windows.Forms.Label + +End Class diff --git a/Addons/scraper.IMPA.Poster/Scraper/dlgTMDBSearchResults.resx b/Addons/scraper.IMPA.Poster/Scraper/dlgTMDBSearchResults.resx new file mode 100644 index 0000000..017a5ad --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/dlgTMDBSearchResults.resx @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + gg== +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA + CukB/XXO0wAAAepJREFUOE+lkktIG1EUhkeFaLQ+UGulgthNEUHRCrqyIHZTdSd0Iyq46cL3Sly50ppV + uywYi2uDiyKK1ioFk0lm7mSmSgymJuIqSkwwCTVpGs3fM0Pa+poWceBj4N5zvnvOuZcDwN2HeyWrB98Q + LFosuRJjz51O6cXmxsaj/1V3RSAx8fVXRQnIsgwVRZHjJHr7L8kfAROFPoWS3G43gicnCIVC8O7vQ11z + StKsnkQTrK6sGCSJBXddLpyfJ5FKpTTUz+f1gvbA22w1t0k0AW3WCYIAv9+PZPIn4vGYRiLxA+HwKRhj + EByOIV2BdWur3mG34/j4iJISiEYjRBSx2BkikQiYKOJQ4ft1BZ/X13NIEHalW1CrUEVACj6fF4yqe2W2 + TegK0m0MiBSoziEQCNAQg/B4PPi2I8Fk+QJucBnZI0vvrkuuXCPP8+PU63dC7RnbTvHi/cKnA2O3GYbu + OeT0ziOv58Na8djHgt+iGw+JHk+pzWrtpMF27cn2Ko7jMnLbTebCl1MoaH+D/I4ZFHbM7FZ0ThtvfYl6 + 913WMjFc2jyGkqZRlNC/om2yXBNk0RFEEfGEqCZqiXriGdGYpoHCHhdXtg6W1fQKD592mQwZ3N8KKCiL + yCaMRB7xgMi/zuXqMinnTi3otfYLj6yxrhdJtZ8AAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Scraper/dlgTMDBSearchResults.vb b/Addons/scraper.IMPA.Poster/Scraper/dlgTMDBSearchResults.vb new file mode 100644 index 0000000..d05fd0b --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/dlgTMDBSearchResults.vb @@ -0,0 +1,462 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb + +Public Class dlgTMDBSearchResults + +#Region "Fields" + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + Friend WithEvents tmrLoad As New System.Windows.Forms.Timer + Friend WithEvents tmrWait As New System.Windows.Forms.Timer + + Private TMDBg As TMDBg.Scraper + Private sHTTP As New HTTP + Private _currnode As Integer = -1 + Private _prevnode As Integer = -2 + Private MySettings As EmberTMDBScraperModule.sMySettings + 'Private TMDBConf As V3.TmdbConfiguration + 'Private TMDBApi As V3.Tmdb + + Private _InfoCache As New Dictionary(Of String, MediaContainers.Movie) + Private _PosterCache As New Dictionary(Of String, System.Drawing.Image) + Private _filterOptions As Structures.ScrapeOptions + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(_MySettings As EmberTMDBScraperModule.sMySettings, _TMDBg As TMDBg.Scraper) + + ' This call is required by the designer. + InitializeComponent() + 'TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + 'TMDBConf = TMDBApi.GetConfiguration() + MySettings = _MySettings + TMDBg = _TMDBg + End Sub + + + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + _filterOptions = filterOptions + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + chkManual.Enabled = False + 'TMDBg.IMDBURL = TMDBId + TMDBg.SearchMovieAsync(sMovieTitle, _filterOptions) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal Res As TMDBg.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + SearchResultsDownloaded(Res) + + Return MyBase.ShowDialog() + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.OK_Button.Enabled = False + pnlPicStatus.Visible = False + _InfoCache.Clear() + _PosterCache.Clear() + Me.ClearInfo() + Me.Label3.Text = Master.eLang.GetString(11, "Searching TMDB...") + Me.pnlLoading.Visible = True + chkManual.Enabled = False + TMDBg.CancelAsync() + 'IMDB.IMDBURL = IMDBURL + TMDBg.SearchMovieAsync(Me.txtSearch.Text, _filterOptions) + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + TMDBg.GetSearchMovieInfoAsync(Me.txtTMDBID.Text, Master.tmpMovie, Master.DefaultOptions) + + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + sHTTP.StartDownloadImage(Args.pURL) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image, .IMDBId = Args.IMDBId} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + '// + ' Thread finished: display pic if it was able to get one + '\\ + + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbPoster.Image = Res.Result + If Not _PosterCache.ContainsKey(Res.IMDBId) Then + _PosterCache.Add(Res.IMDBId, Res.Result) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + pnlPicStatus.Visible = False + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Master.tmpMovie.Clear() + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtTMDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.tvResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtTMDBID.Text = String.Empty + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblTagline.Text = String.Empty + Me.lblYear.Text = String.Empty + Me.lblDirector.Text = String.Empty + Me.lblGenre.Text = String.Empty + Me.txtOutline.Text = String.Empty + Me.lblIMDB.Text = String.Empty + Me.pbPoster.Image = Nothing + + Master.tmpMovie.Clear() + + TMDBg.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.lblYearHeader.Visible = areVisible + Me.lblDirectorHeader.Visible = areVisible + Me.lblGenreHeader.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.lblIMDBHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + Me.lblYear.Visible = areVisible + Me.lblTagline.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblDirector.Visible = areVisible + Me.lblGenre.Visible = areVisible + Me.lblIMDB.Visible = areVisible + Me.pbPoster.Visible = areVisible + End Sub + + Private Sub dlgIMDBSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub dlgIMDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + pnlPicStatus.Visible = False + 'TMDBg.IMDBURL = IMDBURL + AddHandler TMDBg.SearchMovieInfoDownloaded, AddressOf SearchMovieInfoDownloaded + AddHandler TMDBg.SearchResultsDownloaded, AddressOf SearchResultsDownloaded + + Try + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgIMDBSearchResults_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + Me.tvResults.Focus() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + If Me.chkManual.Checked AndAlso Me.btnVerify.Enabled Then + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Master.tmpMovie.IMDBID = Me.txtTMDBID.Text + End If + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.Close() + End Sub + + Private Sub SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + '// + ' Info downloaded... fill form with data + '\\ + + Me.pnlLoading.Visible = False + Me.OK_Button.Enabled = True + + Try + If bSuccess Then + Me.ControlsVisible(True) + Me.lblTitle.Text = Master.tmpMovie.Title + Me.lblTagline.Text = Master.tmpMovie.Tagline + Me.lblYear.Text = Master.tmpMovie.Year + Me.lblDirector.Text = Master.tmpMovie.Director + Me.lblGenre.Text = Master.tmpMovie.Genre + Me.txtOutline.Text = Master.tmpMovie.Outline + Me.lblIMDB.Text = Master.tmpMovie.IMDBID + + If _PosterCache.ContainsKey(Master.tmpMovie.TMDBID) Then + 'just set it + Me.pbPoster.Image = _PosterCache(Master.tmpMovie.TMDBID) + Else + 'go download it, if available + If Not String.IsNullOrEmpty(sPoster) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + pnlPicStatus.Visible = True + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = sPoster, .IMDBId = Master.tmpMovie.TMDBID}) + End If + + End If + + 'store clone of tmpmovie + If Not _InfoCache.ContainsKey(Master.tmpMovie.TMDBID) Then + _InfoCache.Add(Master.tmpMovie.TMDBID, GetMovieClone(Master.tmpMovie)) + End If + + + Me.btnVerify.Enabled = False + Else + If Me.chkManual.Checked Then + MsgBox(Master.eLang.GetString(15, "Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again."), MsgBoxStyle.Exclamation, Master.eLang.GetString(16, "Verification Failed")) + Me.btnVerify.Enabled = True + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SearchResultsDownloaded(ByVal M As TMDBg.MovieSearchResults) + '// + ' Process the results that IMDB gave us + '\\ + 'Dim TnP As New TreeNode + 'Dim selNode As New TreeNode + + Try + Me.tvResults.Nodes.Clear() + Me.ClearInfo() + If Not IsNothing(M) AndAlso M.Matches.Count > 0 Then + + 'M.Matches.Sort() + For Each Movie As MediaContainers.Movie In M.Matches + 'TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Me.tvResults.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.TMDBID}) + Next + 'TnP.Expand() + 'Me.tvResults.Nodes.Add(TnP) + 'selNode = Me.tvResults.Nodes(0) + 'selNode = TnP.FirstNode + 'selNode = Me.tvResults.Nodes(0) + Me.tvResults.SelectedNode = Me.tvResults.Nodes(0) + + Me._prevnode = -2 + + Me.tvResults.Focus() + Else + Me.tvResults.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(20, "No Matches Found")}) + End If + Me.pnlLoading.Visible = False + chkManual.Enabled = True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.Label2.Text = Master.eLang.GetString(21, "View details of each result to find the proper movie.") + Me.Label1.Text = Master.eLang.GetString(22, "Movie Search Results") + Me.chkManual.Text = Master.eLang.GetString(23, "Manual TMDB Entry:") + Me.btnVerify.Text = Master.eLang.GetString(24, "Verify") + Me.lblYearHeader.Text = Master.eLang.GetString(49, "Year:", True) + Me.lblDirectorHeader.Text = Master.eLang.GetString(239, "Director:", True) + Me.lblGenreHeader.Text = Master.eLang.GetString(51, "Genre(s):", True) + Me.lblIMDBHeader.Text = Master.eLang.GetString(116, "TMDB ID:") + Me.lblPlotHeader.Text = Master.eLang.GetString(242, "Plot Outline:", True) + Me.Label3.Text = Master.eLang.GetString(25, "Searching TMDB...") + End Sub + + Private Sub tmrLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoad.Tick + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + Me.pnlLoading.Visible = True + Me.Label3.Text = Master.eLang.GetString(26, "Downloading details...") + + 'IMDB.IMDBURL = IMDBURL + TMDBg.GetSearchMovieInfoAsync(Me.tvResults.SelectedNode.Tag.ToString, Master.tmpMovie, Master.DefaultOptions) + End Sub + + Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrWait.Tick + If Not Me._prevnode = Me._currnode Then + Me._prevnode = Me._currnode + Me.tmrWait.Stop() + Me.tmrLoad.Start() + Else + Me.tmrLoad.Stop() + Me.tmrWait.Stop() + End If + End Sub + + Private Sub tvResults_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvResults.AfterSelect + Try + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + + Me.ClearInfo() + Me.OK_Button.Enabled = False + + If Not IsNothing(Me.tvResults.SelectedNode.Tag) AndAlso Not String.IsNullOrEmpty(Me.tvResults.SelectedNode.Tag.ToString) Then + Me._currnode = Me.tvResults.SelectedNode.Index + + 'check if this movie is in the cache already + If _InfoCache.ContainsKey(Me.tvResults.SelectedNode.Tag.ToString) Then + Master.tmpMovie = GetMovieClone(_InfoCache(Me.tvResults.SelectedNode.Tag.ToString)) + SearchMovieInfoDownloaded(String.Empty, True) + Return + End If + + Me.pnlLoading.Visible = True + Me.tmrWait.Start() + Else + Me.pnlLoading.Visible = False + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub tvResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub txtIMDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTMDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtIMDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBID.TextChanged + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Function GetMovieClone(ByVal original As MediaContainers.Movie) As MediaContainers.Movie + 'have to do this the old-fashioned way because it is not serializable + Dim result As New MediaContainers.Movie + With result + .IMDBID = original.IMDBID + .Genre = original.Genre + .Title = original.Title + .Tagline = original.Tagline + .Year = original.Year + .Director = original.Director + .Genre = original.Genre + .Outline = original.Outline + End With + Return result + 'Using mem As New IO.MemoryStream() + ' Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, New System.Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.Clone)) + ' bin.Serialize(mem, original) + ' mem.Seek(0, IO.SeekOrigin.Begin) + ' Return DirectCast(bin.Deserialize(mem), MediaContainers.Movie) + 'End Using + End Function + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim pURL As String + Dim IMDBId As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Image + Dim IMDBId As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.IMPA.Poster/Scraper/dlgTrailer.Designer.vb new file mode 100644 index 0000000..1865dbc --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/dlgTrailer.Designer.vb @@ -0,0 +1,279 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(290, 339) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(74, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(369, 339) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(411, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(424, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(112, 82) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(120, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(411, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(376, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(365, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(72, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(392, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(153, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 339) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(106, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(207, 339) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(77, 23) + Me.btnSetNfo.TabIndex = 4 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(444, 331) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(450, 366) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lbTrailers As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnPlayTrailer As System.Windows.Forms.Button + Friend WithEvents btnSetNfo As System.Windows.Forms.Button + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtYouTube As System.Windows.Forms.TextBox + Friend WithEvents btnBrowse As System.Windows.Forms.Button + Friend WithEvents txtManual As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog + Friend WithEvents btnGetTrailers As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.IMPA.Poster/Scraper/dlgTrailer.resx b/Addons/scraper.IMPA.Poster/Scraper/dlgTrailer.resx new file mode 100644 index 0000000..2be3cac --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/dlgTrailer.resx @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnGetTrailers.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAGHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3NPsx9OAAAB80lEQVQ4T6XTTWsTQRgH8EGr9GDFm19AseDBgzc9eba0FJqvIOTiRase + RAIKtRo9LbbxpYmtggXR2KRFqGLfDio9tDGbdUMrbvc1+57sioiVv7NDLE3MXnTgz8DsPr95dpglAMj/ + pKVY17QuyzLP2raVoBlybHvIc92EUKmcidukBTBrtasUAC0GLWYJggaWl5dw9056uBPSAtDi8aiYAY4N + 13HwLQyxuLiAW6OjyIyPXW5H2gFuZ/cm4HseNFVFsTCD2WIRHz+8P7cb6Qjs7iDqIkLCMEC97kedZWMB + egasA8s24TsBQm8bob8N3w3YZzUzFgsYus6ZZo0WhPisvMackGQR5Dm2xnDLjAdUVeF0XUPD/Yl31eu4 + sURY3orXaDe/EOGGoccDsrzFKYoMz/yON0IaqYVDLPPCTdTtH6D3BKqixANfNjc5SZJga3XMlm5jeP4w + S6E0AsdoQJFlbElSPMCXy/ekDQUTK1eQzB/B+cJxlmT+KB6sXID61UBVFDOxh7i+tjbCf+KxXl7FpZeD + SOR6WS6+6EepsgpREFHh+XRHYC8hB/r7+k7kshOZ/PSrZ7mn2cnTqd7qqdSxjUdPHk7NPC9OT00+vj84 + MHByDyEH/yA7F4kC+wgh3dGDaDTnHkK6etrWuum7+/8C/vWX/g1N2vpUAmZdeAAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnPlayTrailer.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAACwwAAAsMAT9AIsgAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfZBBoSIQHX+6QX + AAACOElEQVQ4T7WSTWvaQRCHozlYNQSiVXwBNSSKKAhqKogo2hx8OeUQpPVY9OBFId+g0IufoQnegslF + EEG8qAgeiij4hohoDjkphJAIGg/udGepfyLV3rowLDu788zs/GZv73+st7e35NPT069KpfJaLpdnj4+P + nel0+p3mOvhnvoeHh0+j0WieTCbB6XSSYDAIoVAIXC4Xicfj0Ov1IJ/Pf9kKweBisQharZbY7XbweDxg + sVjg7OwM8Ix2enpK7u/v4e7u7ttfEJp5QZ3k8PAQ1Go1hMNhyGazIJFIQKVSMd/R0RHgm2azCQqFQsNB + FovFFZZLHZz5fD7AlU6nmY/H43F3NpsNWq3WLQeYz+d1JL8H4BfW6+bmZgOO77rd7isHqNfrM3Ty+XzY + 399n5vV6WfxqtWL79fX1RiWlUgnPHxlkDRAKhSASiUAsFoPf72eBhBAGeXl5AZlMBgKBgIGoxLirGOD5 + +blL/0iwSVKpFORyOVxcXHAV0HtUhzUUm4yATqezpPsHBphMJj8uLy9BqVSCRqOB4+NjiEQiDICZUU6d + TseUQLjb7YZqtVp6L+UBlREBxGg0soBoNArL5RJQDavVCmazGecAKyTtdhtOTk68G7OQy+W+1mo1MJlM + hE4hA2BV5+fnLKPD4QC9Xk8KhQKkUqmfW6cxk8nE6ERCIpFgkxgIBFgzERCLxWAwGOwOXhPpPzWNRuN2 + PB7P+v0+oA2HwyWVrWIwGD5vzbzDyaN++R+phLsCfwMUR2eb8uMbUAAAAABJRU5ErkJggg== +</value> + </data> + <metadata name="ofdTrailer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>40</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Scraper/dlgTrailer.vb b/Addons/scraper.IMPA.Poster/Scraper/dlgTrailer.vb new file mode 100644 index 0000000..d63ea34 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/dlgTrailer.vb @@ -0,0 +1,465 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb +Imports EmberScraperModule.EmberTMDBScraperModule + +Public Class dlgTrailer + +#Region "Fields" + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Friend WithEvents bwCompileList As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwDownloadTrailer As New System.ComponentModel.BackgroundWorker + + Private cTrailer As Trailers + Private imdbID As String = String.Empty + Private prePath As String = String.Empty + Private sPath As String = String.Empty + Private tArray As New List(Of String) + Private tURL As String = String.Empty + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = TMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + cTrailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + End Sub + + Public Overloads Function ShowDialog(ByVal _imdbID As String, ByVal _sPath As String) As String + Me.imdbID = _imdbID + Me.sPath = _sPath + + If MyBase.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + Return Replace(Me.tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + Return Me.tURL + End If + Else + Return String.Empty + End If + End Function + + Protected Overrides Sub Finalize() + cTrailer = Nothing + MyBase.Finalize() + End Sub + + Private Sub BeginDownload(ByVal CloseDialog As Boolean) + Dim didCancel As Boolean = False + + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(56, "Downloading selected trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + If CloseDialog Then + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, Path.GetFileName(Me.prePath)) + FileUtils.Common.MoveFileWithStream(Me.prePath, Me.tURL) + + File.Delete(Me.prePath) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.prePath, """")) + didCancel = True + End If + ElseIf Me.txtManual.Text.Length > 0 Then + Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + If CloseDialog Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.txtManual.Text, """")) + didCancel = True + End If + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + didCancel = True + End If + ElseIf Regex.IsMatch(Me.txtYouTube.Text, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.txtYouTube.Text) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + ElseIf StringUtils.isValidURL(Me.txtYouTube.Text) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = Me.txtYouTube.Text, .bType = CloseDialog}) + Else + If Regex.IsMatch(Me.lbTrailers.SelectedItem.ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.lbTrailers.SelectedItem.ToString) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + Else + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = lbTrailers.SelectedItem.ToString, .bType = CloseDialog}) + End If + End If + + If didCancel Then + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + End Sub + + Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click + Try + With ofdTrailer + .InitialDirectory = Directory.GetParent(Master.currMovie.Filename).FullName + .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.ValidExts.ToArray(), ";*")) + .FilterIndex = 0 + End With + + If ofdTrailer.ShowDialog() = DialogResult.OK Then + txtManual.Text = ofdTrailer.FileName + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub btnGetTrailers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTrailers.Click + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.pnlStatus.Visible = True + + Me.bwCompileList = New System.ComponentModel.BackgroundWorker + Me.bwCompileList.WorkerSupportsCancellation = True + Me.bwCompileList.RunWorkerAsync() + End Sub + + Private Sub btnPlayTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayTrailer.Click + Try + Me.BeginDownload(False) + Catch + MsgBox(Master.eLang.GetString(58, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), MsgBoxStyle.Critical, Master.eLang.GetString(59, "Error Playing Trailer")) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Try + End Sub + + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click + + If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(62, "Moving specified file to trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + File.Move(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + Else + Dim didCancel As Boolean = False + + If StringUtils.isValidURL(Me.txtYouTube.Text) Then + tURL = Me.txtYouTube.Text + ElseIf Me.lbTrailers.SelectedItems.Count > 0 Then + tURL = lbTrailers.SelectedItem.ToString + Else + didCancel = True + End If + + If Not didCancel Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + + End Sub + + Private Sub bwCompileList_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwCompileList.DoWork + Try + tArray = cTrailer.GetTrailers(Me.imdbID, False) + + If Me.bwCompileList.CancellationPending Then + e.Cancel = True + End If + Catch + End Try + End Sub + + Private Sub bwCompileList_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwCompileList.RunWorkerCompleted + If Not e.Cancelled Then + If Me.tArray.Count > 0 Then + For Each tTrail As String In Me.tArray + Me.lbTrailers.Items.Add(tTrail) + Next + + Me.btnGetTrailers.Visible = False + Else + Me.btnGetTrailers.Enabled = False + End If + + End If + + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Sub + + Private Sub bwDownloadTrailer_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTrailer.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + + If Args.bType Then + Me.tURL = cTrailer.DownloadTrailer(Me.sPath, Args.Parameter) + Else + Me.prePath = cTrailer.DownloadTrailer(Path.Combine(Master.TempPath, Path.GetFileName(Me.sPath)), Args.Parameter) + End If + + Catch + End Try + + e.Result = Args.bType + + If Me.bwDownloadTrailer.CancellationPending Then + e.Cancel = True + End If + End Sub + + Private Sub bwDownloadTrailer_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwDownloadTrailer.ProgressChanged + pbStatus.Value = e.ProgressPercentage + End Sub + + Private Sub bwDownloadTrailer_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadTrailer.RunWorkerCompleted + If Not e.Cancelled Then + If Convert.ToBoolean(e.Result) Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + If Not String.IsNullOrEmpty(Me.prePath) Then System.Diagnostics.Process.Start(String.Concat("""", prePath, """")) + End If + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.cTrailer.Cancel() + + If Me.bwCompileList.IsBusy Then Me.bwCompileList.CancelAsync() + If Me.bwDownloadTrailer.IsBusy Then Me.bwDownloadTrailer.CancelAsync() + + While Me.bwCompileList.IsBusy OrElse Me.bwDownloadTrailer.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + AddHandler cTrailer.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + + Private Sub dlgTrailer_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub DownloadProgressUpdated(ByVal iProgress As Integer) + bwDownloadTrailer.ReportProgress(iProgress) + End Sub + + Private Sub lbTrailers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbTrailers.SelectedIndexChanged + Me.SetEnabled(True) + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.BeginDownload(True) + End Sub + + Private Sub SetEnabled(ByVal DeletePre As Boolean) + If DeletePre AndAlso Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + File.Delete(Me.prePath) + Me.prePath = String.Empty + End If + + If StringUtils.isValidURL(Me.txtYouTube.Text) OrElse Me.lbTrailers.SelectedItems.Count > 0 OrElse Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Enabled = True + Me.btnSetNfo.Enabled = True + Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") + Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") + Else + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + Else + Me.OK_Button.Enabled = False + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnPlayTrailer.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(64, "Select Trailer") + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.GroupBox1.Text = Master.eLang.GetString(65, "Select Trailer to Download") + Me.GroupBox2.Text = Master.eLang.GetString(66, "Manual Trailer Entry") + Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") + Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") + Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") + End Sub + + Private Sub txtManual_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtManual.TextChanged + Me.SetEnabled(True) + End Sub + + Private Sub txtYouTube_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtYouTube.TextChanged + Me.SetEnabled(True) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim bType As Boolean + Dim Parameter As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.IMPA.Poster/Scraper/dlgTrailerFormat.Designer.vb new file mode 100644 index 0000000..22f1374 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/dlgTrailerFormat.Designer.vb @@ -0,0 +1,155 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailerFormat + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(84, 117) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(154, 117) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(17, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(78, 69) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(53, 2) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(114, 100) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(10, 29) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.pnlStatus) + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(2, 4) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(220, 111) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 143) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lstFormats As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.IMPA.Poster/Scraper/dlgTrailerFormat.resx b/Addons/scraper.IMPA.Poster/Scraper/dlgTrailerFormat.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/dlgTrailerFormat.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/Scraper/dlgTrailerFormat.vb b/Addons/scraper.IMPA.Poster/Scraper/dlgTrailerFormat.vb new file mode 100644 index 0000000..8f0ad6e --- /dev/null +++ b/Addons/scraper.IMPA.Poster/Scraper/dlgTrailerFormat.vb @@ -0,0 +1,114 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTrailerFormat + +#Region "Fields" + + Private WithEvents YouTube As YouTube.Scraper + Private _selectedformaturl As String + Private _yturl As String + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal YTURL As String) As String + Me._yturl = YTURL + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return _selectedformaturl + Else + Return String.Empty + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailerFormat_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + Me.SetUp() + + lstFormats.DataSource = Nothing + + YouTube = New YouTube.Scraper + YouTube.GetVideoLinksAsync(Me._yturl) + + Catch ex As Exception + MsgBox(Master.eLang.GetString(71, "The video format links could not be retrieved."), MsgBoxStyle.Critical, Master.eLang.GetString(72, "Error Retrieving Video Format Links")) + End Try + End Sub + + Private Sub lstFormats_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFormats.SelectedIndexChanged + Try + Me._selectedformaturl = DirectCast(lstFormats.SelectedItem, YouTube.VideoLinkItem).URL + + If Me.lstFormats.SelectedItems.Count > 0 Then + Me.OK_Button.Enabled = True + Else + Me.OK_Button.Enabled = False + End If + Catch + End Try + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(73, "Select Format") + Me.lblStatus.Text = Master.eLang.GetString(74, "Getting available formats...") + Me.GroupBox1.Text = Master.eLang.GetString(75, "Available Formats") + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub YouTube_VideoLinksRetrieved(ByVal bSuccess As Boolean) Handles YouTube.VideoLinksRetrieved + Try + + If bSuccess Then + lstFormats.DataSource = YouTube.VideoLinks.Values.ToList + lstFormats.DisplayMember = "Description" + lstFormats.ValueMember = "URL" + + If YouTube.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + Me.lstFormats.SelectedIndex = YouTube.VideoLinks.IndexOfKey(Master.eSettings.PreferredTrailerQuality) + ElseIf Me.lstFormats.Items.Count = 1 Then + Me.lstFormats.SelectedIndex = 0 + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + Me.pnlStatus.Visible = False + Me.lstFormats.Enabled = True + End Try + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/frmTMDBInfoSettingsHolder.Designer.vb b/Addons/scraper.IMPA.Poster/frmTMDBInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..f610c2c --- /dev/null +++ b/Addons/scraper.IMPA.Poster/frmTMDBInfoSettingsHolder.Designer.vb @@ -0,0 +1,545 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTMDBInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.chkFallBackEng = New System.Windows.Forms.CheckBox() + Me.cbTMDBPrefLanguage = New System.Windows.Forms.ComboBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtTMDBApiKey = New System.Windows.Forms.TextBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.txtFANARTTVApiKey = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.pbTMDB = New System.Windows.Forms.PictureBox() + Me.pbFANARTTV = New System.Windows.Forms.PictureBox() + Me.GroupBox30.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + Me.GroupBox1.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.pbTMDB) + Me.GroupBox30.Controls.Add(Me.chkFallBackEng) + Me.GroupBox30.Controls.Add(Me.cbTMDBPrefLanguage) + Me.GroupBox30.Controls.Add(Me.Label3) + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtTMDBApiKey) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(309, 123) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "TMDB" + ' + 'chkFallBackEng + ' + Me.chkFallBackEng.AutoSize = True + Me.chkFallBackEng.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFallBackEng.Location = New System.Drawing.Point(8, 100) + Me.chkFallBackEng.Name = "chkFallBackEng" + Me.chkFallBackEng.Size = New System.Drawing.Size(129, 17) + Me.chkFallBackEng.TabIndex = 4 + Me.chkFallBackEng.Text = "Fall back on english" + Me.chkFallBackEng.UseVisualStyleBackColor = True + ' + 'cbTMDBPrefLanguage + ' + Me.cbTMDBPrefLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTMDBPrefLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTMDBPrefLanguage.FormattingEnabled = True + Me.cbTMDBPrefLanguage.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTMDBPrefLanguage.Location = New System.Drawing.Point(123, 65) + Me.cbTMDBPrefLanguage.Name = "cbTMDBPrefLanguage" + Me.cbTMDBPrefLanguage.Size = New System.Drawing.Size(45, 21) + Me.cbTMDBPrefLanguage.TabIndex = 3 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label3.Location = New System.Drawing.Point(6, 68) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(111, 13) + Me.Label3.TabIndex = 2 + Me.Label3.Text = "Preferred Language:" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(79, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "TMDB API Key:" + ' + 'txtTMDBApiKey + ' + Me.txtTMDBApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtTMDBApiKey.Name = "txtTMDBApiKey" + Me.txtTMDBApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtTMDBApiKey.TabIndex = 1 + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pbFANARTTV) + Me.GroupBox1.Controls.Add(Me.Label5) + Me.GroupBox1.Controls.Add(Me.txtFANARTTVApiKey) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(8, 169) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(309, 71) + Me.GroupBox1.TabIndex = 75 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Fanart.tv" + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.Location = New System.Drawing.Point(6, 18) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(94, 13) + Me.Label5.TabIndex = 0 + Me.Label5.Text = "Fanart.tv API Key:" + ' + 'txtFANARTTVApiKey + ' + Me.txtFANARTTVApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtFANARTTVApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtFANARTTVApiKey.Name = "txtFANARTTVApiKey" + Me.txtFANARTTVApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtFANARTTVApiKey.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(323, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(283, 150) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(225, 17) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(52, 17) + Me.chkCrew.TabIndex = 19 + Me.chkCrew.Text = "Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(131, 123) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 89) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 72) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 89) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 123) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(131, 106) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 106) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 72) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'pbTMDB + ' + Me.pbTMDB.Image = CType(resources.GetObject("pbTMDB.Image"), System.Drawing.Image) + Me.pbTMDB.Location = New System.Drawing.Point(287, 34) + Me.pbTMDB.Name = "pbTMDB" + Me.pbTMDB.Size = New System.Drawing.Size(16, 16) + Me.pbTMDB.TabIndex = 5 + Me.pbTMDB.TabStop = False + ' + 'pbFANARTTV + ' + Me.pbFANARTTV.Image = CType(resources.GetObject("pbFANARTTV.Image"), System.Drawing.Image) + Me.pbFANARTTV.Location = New System.Drawing.Point(287, 34) + Me.pbFANARTTV.Name = "pbFANARTTV" + Me.pbFANARTTV.Size = New System.Drawing.Size(16, 16) + Me.pbFANARTTV.TabIndex = 6 + Me.pbFANARTTV.TabStop = False + ' + 'frmTMDBInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox + Friend WithEvents Label18 As System.Windows.Forms.Label + Friend WithEvents txtTMDBApiKey As System.Windows.Forms.TextBox + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents gbOptions As System.Windows.Forms.GroupBox + Friend WithEvents chkCountry As System.Windows.Forms.CheckBox + Friend WithEvents chkStudio As System.Windows.Forms.CheckBox + Friend WithEvents chkRuntime As System.Windows.Forms.CheckBox + Friend WithEvents chkOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkTagline As System.Windows.Forms.CheckBox + Friend WithEvents chkCast As System.Windows.Forms.CheckBox + Friend WithEvents chkVotes As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailer As System.Windows.Forms.CheckBox + Friend WithEvents chkRating As System.Windows.Forms.CheckBox + Friend WithEvents chkRelease As System.Windows.Forms.CheckBox + Friend WithEvents chkMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkYear As System.Windows.Forms.CheckBox + Friend WithEvents chkTitle As System.Windows.Forms.CheckBox + Friend WithEvents chkFallBackEng As System.Windows.Forms.CheckBox + Friend WithEvents cbTMDBPrefLanguage As System.Windows.Forms.ComboBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents chkCrew As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label5 As System.Windows.Forms.Label + Friend WithEvents txtFANARTTVApiKey As System.Windows.Forms.TextBox + Friend WithEvents pbTMDB As System.Windows.Forms.PictureBox + Friend WithEvents pbFANARTTV As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.IMPA.Poster/frmTMDBInfoSettingsHolder.resx b/Addons/scraper.IMPA.Poster/frmTMDBInfoSettingsHolder.resx new file mode 100644 index 0000000..b1bac92 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/frmTMDBInfoSettingsHolder.resx @@ -0,0 +1,223 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="pbFANARTTV.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + RK5CYII= +</value> + </data> + <data name="pbTMDB.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/frmTMDBInfoSettingsHolder.vb b/Addons/scraper.IMPA.Poster/frmTMDBInfoSettingsHolder.vb new file mode 100644 index 0000000..d17768a --- /dev/null +++ b/Addons/scraper.IMPA.Poster/frmTMDBInfoSettingsHolder.vb @@ -0,0 +1,218 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports System.Diagnostics + +Public Class frmTMDBInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + Public Event SetupNeedsRestart() + +#End Region 'Events + +#Region "Fields" + + Private Api1 As String + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Private Sub chkCrew_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFallBackEng_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkFallBackEng.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTMDBPrefLanguage_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cbTMDBPrefLanguage.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtFANARTTVApiKey_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtFANARTTVApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Enter + Api1 = txtTMDBApiKey.Text + End Sub + + Private Sub txtTMDBApiKey_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextValidated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Validated + If Not (Api1 = txtTMDBApiKey.Text) Then + RaiseEvent SetupNeedsRestart() + End If + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label18.Text = Master.eLang.GetString(854, "TMDB API Key:") + Me.gbOptions.Text = Master.eLang.GetString(6, "Scraper Fields - Scraper specific") + Me.chkStudio.Text = Master.eLang.GetString(395, "Studio", True) + Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime", True) + Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline", True) + Me.chkGenre.Text = Master.eLang.GetString(20, "Genres", True) + Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline", True) + Me.chkCast.Text = Master.eLang.GetString(856, "Cast and Crew", True) + Me.chkVotes.Text = Master.eLang.GetString(399, "Votes", True) + Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer", True) + Me.chkRating.Text = Master.eLang.GetString(400, "Rating", True) + Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date", True) + Me.chkMPAA.Text = Master.eLang.GetString(859, "MPAA & Certification", True) + Me.chkYear.Text = Master.eLang.GetString(278, "Year", True) + Me.chkTitle.Text = Master.eLang.GetString(21, "Title", True) + 'Me.chkCertification.Text = Master.eLang.GetString(722, "Certification", True) + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkFallBackEng.Text = Master.eLang.GetString(114, "Fall back on english") + Me.Label3.Text = Master.eLang.GetString(115, "Preferred Language:") + + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + +#End Region 'Methods + + Private Sub PictureBox2_Click(sender As System.Object, e As System.EventArgs) Handles pbTMDB.Click + If Master.isWindows Then + Process.Start("http://docs.themoviedb.apiary.io/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://docs.themoviedb.apiary.io/" + Explorer.Start() + End Using + End If + + End Sub + + Private Sub pbFANARTTV_Click(sender As System.Object, e As System.EventArgs) Handles pbFANARTTV.Click + If Master.isWindows Then + Process.Start("http://fanart.tv/get-an-api-key/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://fanart.tv/get-an-api-key/" + Explorer.Start() + End Using + End If + + End Sub +End Class \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/frmTMDBMediaSettingsHolder.Designer.vb b/Addons/scraper.IMPA.Poster/frmTMDBMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..68e3c03 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/frmTMDBMediaSettingsHolder.Designer.vb @@ -0,0 +1,525 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTMDBMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBMediaSettingsHolder)) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.chkUseFANARTTV = New System.Windows.Forms.CheckBox() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkUseMPDB = New System.Windows.Forms.CheckBox() + Me.chkUseIMDBp = New System.Windows.Forms.CheckBox() + Me.chkUseIMPA = New System.Windows.Forms.CheckBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.cbManualETSize = New System.Windows.Forms.ComboBox() + Me.grpSaveFanart = New System.Windows.Forms.GroupBox() + Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() + Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() + Me.chkScrapePoster = New System.Windows.Forms.CheckBox() + Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.txtTimeout = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() + Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox9.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.grpSaveFanart.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.GroupBox3) + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Panel2) + Me.pnlSettings.Location = New System.Drawing.Point(12, 4) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 94 + Me.PictureBox1.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.GroupBox6) + Me.GroupBox3.Controls.Add(Me.GroupBox9) + Me.GroupBox3.Controls.Add(Me.GroupBox4) + Me.GroupBox3.Controls.Add(Me.grpSaveFanart) + Me.GroupBox3.Controls.Add(Me.chkScrapePoster) + Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(15, 31) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(505, 154) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Images" + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.chkUseFANARTTV) + Me.GroupBox6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox6.Location = New System.Drawing.Point(331, 21) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(160, 55) + Me.GroupBox6.TabIndex = 96 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Get Fanart From:" + ' + 'chkUseFANARTTV + ' + Me.chkUseFANARTTV.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseFANARTTV.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseFANARTTV.Location = New System.Drawing.Point(6, 21) + Me.chkUseFANARTTV.Name = "chkUseFANARTTV" + Me.chkUseFANARTTV.Size = New System.Drawing.Size(150, 22) + Me.chkUseFANARTTV.TabIndex = 2 + Me.chkUseFANARTTV.Text = "fanart.tv" + Me.chkUseFANARTTV.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseFANARTTV.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkUseMPDB) + Me.GroupBox9.Controls.Add(Me.chkUseIMDBp) + Me.GroupBox9.Controls.Add(Me.chkUseIMPA) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(165, 19) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(160, 78) + Me.GroupBox9.TabIndex = 5 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Get Poster From:" + ' + 'chkUseMPDB + ' + Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) + Me.chkUseMPDB.Name = "chkUseMPDB" + Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) + Me.chkUseMPDB.TabIndex = 2 + Me.chkUseMPDB.Text = "MoviePosterDB.com" + Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.UseVisualStyleBackColor = True + ' + 'chkUseIMDBp + ' + Me.chkUseIMDBp.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMDBp.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMDBp.Location = New System.Drawing.Point(6, 18) + Me.chkUseIMDBp.Name = "chkUseIMDBp" + Me.chkUseIMDBp.Size = New System.Drawing.Size(149, 19) + Me.chkUseIMDBp.TabIndex = 0 + Me.chkUseIMDBp.Text = "IMDB.com" + Me.chkUseIMDBp.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMDBp.UseVisualStyleBackColor = True + ' + 'chkUseIMPA + ' + Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) + Me.chkUseIMPA.Name = "chkUseIMPA" + Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) + Me.chkUseIMPA.TabIndex = 1 + Me.chkUseIMPA.Text = "IMPAwards.com" + Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.UseVisualStyleBackColor = True + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.cbManualETSize) + Me.GroupBox4.Location = New System.Drawing.Point(331, 94) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(160, 55) + Me.GroupBox4.TabIndex = 4 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "TMDB Extrathumbs Size:" + ' + 'cbManualETSize + ' + Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbManualETSize.FormattingEnabled = True + Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) + Me.cbManualETSize.Location = New System.Drawing.Point(12, 21) + Me.cbManualETSize.Name = "cbManualETSize" + Me.cbManualETSize.Size = New System.Drawing.Size(131, 21) + Me.cbManualETSize.TabIndex = 0 + ' + 'grpSaveFanart + ' + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) + Me.grpSaveFanart.Enabled = False + Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) + Me.grpSaveFanart.Name = "grpSaveFanart" + Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) + Me.grpSaveFanart.TabIndex = 2 + Me.grpSaveFanart.TabStop = False + Me.grpSaveFanart.Text = "Save Fanart In:" + ' + 'optFanartFolderExtraFanart + ' + Me.optFanartFolderExtraFanart.AutoSize = True + Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) + Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" + Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) + Me.optFanartFolderExtraFanart.TabIndex = 1 + Me.optFanartFolderExtraFanart.TabStop = True + Me.optFanartFolderExtraFanart.Text = "\extrafanart" + Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True + ' + 'optFanartFolderExtraThumbs + ' + Me.optFanartFolderExtraThumbs.AutoSize = True + Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) + Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" + Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) + Me.optFanartFolderExtraThumbs.TabIndex = 0 + Me.optFanartFolderExtraThumbs.TabStop = True + Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" + Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True + ' + 'chkScrapePoster + ' + Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) + Me.chkScrapePoster.Name = "chkScrapePoster" + Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) + Me.chkScrapePoster.TabIndex = 0 + Me.chkScrapePoster.Text = "Get Posters" + Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.UseVisualStyleBackColor = True + ' + 'chkScrapeFanart + ' + Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) + Me.chkScrapeFanart.Name = "chkScrapeFanart" + Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) + Me.chkScrapeFanart.TabIndex = 1 + Me.chkScrapeFanart.Text = "Get Fanart" + Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox1.Controls.Add(Me.Label23) + Me.GroupBox1.Controls.Add(Me.txtTimeout) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(15, 203) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(464, 126) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Trailers" + Me.GroupBox1.UseCompatibleTextRendering = True + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label23.Location = New System.Drawing.Point(21, 43) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(51, 13) + Me.Label23.TabIndex = 1 + Me.Label23.Text = "Timeout:" + ' + 'txtTimeout + ' + Me.txtTimeout.Enabled = False + Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTimeout.Location = New System.Drawing.Point(82, 39) + Me.txtTimeout.Name = "txtTimeout" + Me.txtTimeout.Size = New System.Drawing.Size(50, 22) + Me.txtTimeout.TabIndex = 2 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) + Me.GroupBox2.Controls.Add(Me.GroupBox5) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(165, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(291, 104) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Supported Sites:" + ' + 'chkTrailerIMDB + ' + Me.chkTrailerIMDB.AutoSize = True + Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) + Me.chkTrailerIMDB.Name = "chkTrailerIMDB" + Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) + Me.chkTrailerIMDB.TabIndex = 5 + Me.chkTrailerIMDB.Text = "IMDB" + Me.chkTrailerIMDB.UseVisualStyleBackColor = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) + Me.GroupBox5.Controls.Add(Me.Label2) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) + Me.GroupBox5.Location = New System.Drawing.Point(123, 12) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(161, 83) + Me.GroupBox5.TabIndex = 4 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Youtube/TMDB Trailer:" + ' + 'cbTrailerTMDBPref + ' + Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerTMDBPref.Enabled = False + Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTrailerTMDBPref.FormattingEnabled = True + Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) + Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" + Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) + Me.cbTrailerTMDBPref.TabIndex = 1 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label2.Location = New System.Drawing.Point(26, 26) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(111, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Preferred Language:" + ' + 'chkTrailerTMDBXBMC + ' + Me.chkTrailerTMDBXBMC.AutoSize = True + Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) + Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" + Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) + Me.chkTrailerTMDBXBMC.TabIndex = 1 + Me.chkTrailerTMDBXBMC.Text = "XBMC Format" + Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True + ' + 'chkTrailerTMDB + ' + Me.chkTrailerTMDB.AutoSize = True + Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) + Me.chkTrailerTMDB.Name = "chkTrailerTMDB" + Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) + Me.chkTrailerTMDB.TabIndex = 0 + Me.chkTrailerTMDB.Text = "Youtube/TMDB" + Me.chkTrailerTMDB.UseVisualStyleBackColor = True + ' + 'Panel2 + ' + Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Controls.Add(Me.btnDown) + Me.Panel2.Controls.Add(Me.btnUp) + Me.Panel2.Controls.Add(Me.cbEnabled) + Me.Panel2.Location = New System.Drawing.Point(0, 0) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(1125, 25) + Me.Panel2.TabIndex = 0 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(500, 7) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 12) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'frmTMDBMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.grpSaveFanart.ResumeLayout(False) + Me.grpSaveFanart.PerformLayout() + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents chkScrapeFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkScrapePoster As System.Windows.Forms.CheckBox + Friend WithEvents chkDownloadTrailer As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Panel2 As System.Windows.Forms.Panel + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Label23 As System.Windows.Forms.Label + Friend WithEvents txtTimeout As System.Windows.Forms.TextBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents grpSaveFanart As System.Windows.Forms.GroupBox + Friend WithEvents optFanartFolderExtraFanart As System.Windows.Forms.RadioButton + Friend WithEvents optFanartFolderExtraThumbs As System.Windows.Forms.RadioButton + Friend WithEvents chkTrailerTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDBXBMC As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents cbManualETSize As System.Windows.Forms.ComboBox + Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox + Friend WithEvents cbTrailerTMDBPref As System.Windows.Forms.ComboBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox9 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseMPDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMDBp As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMPA As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerIMDB As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseFANARTTV As System.Windows.Forms.CheckBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/frmTMDBMediaSettingsHolder.resx b/Addons/scraper.IMPA.Poster/frmTMDBMediaSettingsHolder.resx new file mode 100644 index 0000000..3c46229 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/frmTMDBMediaSettingsHolder.resx @@ -0,0 +1,238 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/frmTMDBMediaSettingsHolder.vb b/Addons/scraper.IMPA.Poster/frmTMDBMediaSettingsHolder.vb new file mode 100644 index 0000000..6ccca98 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/frmTMDBMediaSettingsHolder.vb @@ -0,0 +1,165 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTMDBMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order + 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order - 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Sub CheckTrailer() + Me.txtTimeout.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDBXBMC.Enabled = Me.chkDownloadTrailer.Checked + If Not Me.chkDownloadTrailer.Checked Then + Me.txtTimeout.Text = "2" + Me.chkTrailerTMDB.Checked = False + Me.chkTrailerTMDBXBMC.Checked = False + End If + End Sub + + Private Sub chkDownloadTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDownloadTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + CheckTrailer() + End Sub + + Private Sub chkTrailerTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDB.CheckedChanged + chkTrailerTMDBXBMC.Enabled = chkTrailerTMDB.Checked + cbTrailerTMDBPref.Enabled = chkTrailerTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerIMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerTMDBXBMC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDBXBMC.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkScrapeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapeFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + grpSaveFanart.Enabled = chkScrapeFanart.Checked + End Sub + + Private Sub chkScrapePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapePoster.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseFANARTTV_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkUseFANARTTV.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMDBp_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkUseIMDBp.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMDBf_CheckedChanged(sender As System.Object, e As System.EventArgs) + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMPA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseIMPA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseMPDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseMPDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Sub SetUp() + Me.txtTimeout.Text = Master.eSettings.TrailerTimeout.ToString + Me.Label23.Text = Master.eLang.GetString(7, "Timeout:") + Me.GroupBox2.Text = Master.eLang.GetString(8, "Supported Sites:") + Me.grpSaveFanart.Text = Master.eLang.GetString(8001, "Save Fanart In:") + Me.chkDownloadTrailer.Text = Master.eLang.GetString(529, "Enable Trailer Support", True) + Me.Label3.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkScrapePoster.Text = Master.eLang.GetString(101, "Get Posters") + Me.chkScrapeFanart.Text = Master.eLang.GetString(102, "Get Fanart") + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + Private Sub txtTimeout_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTimeout.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraThumbs_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraThumbs.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbManualETSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbManualETSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTrailerTMDBPref_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbTrailerTMDBPref.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/packages.config b/Addons/scraper.IMPA.Poster/packages.config new file mode 100644 index 0000000..9d72b1b --- /dev/null +++ b/Addons/scraper.IMPA.Poster/packages.config @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="RestSharp" version="104.1" targetFramework="net35" /> + <package id="SharpZipLib" version="0.86.0" /> +</packages> \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/scraper.IMPA.Poster.vbproj b/Addons/scraper.IMPA.Poster/scraper.IMPA.Poster.vbproj new file mode 100644 index 0000000..63824a6 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/scraper.IMPA.Poster.vbproj @@ -0,0 +1,287 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{D9878E03-87D7-429E-AA0C-A7116A31FA7F}</ProjectGuid> + <OutputType>Library</OutputType> + <RootNamespace>EmberScraperModule</RootNamespace> + <AssemblyName>scraper.IMPA.Poster</AssemblyName> + <FileAlignment>512</FileAlignment> + <MyType>Windows</MyType> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <OptionExplicit>On</OptionExplicit> + <OptionCompare>Binary</OptionCompare> + <OptionStrict>On</OptionStrict> + <OptionInfer>On</OptionInfer> + <FileUpgradeFlags> + </FileUpgradeFlags> + <OldToolsVersion>3.5</OldToolsVersion> + <UpgradeBackupLocation /> + <PublishUrl>publish\</PublishUrl> + <Install>true</Install> + <InstallFrom>Disk</InstallFrom> + <UpdateEnabled>false</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>false</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> + <RestorePackages>true</RestorePackages> + <SccProjectName> + </SccProjectName> + <SccLocalPath> + </SccLocalPath> + <SccAuxPath> + </SccAuxPath> + <SccProvider> + </SccProvider> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> + <DebugSymbols>true</DebugSymbols> + <DefineDebug>true</DefineDebug> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Dev\Modules\</OutputPath> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Deploy\Modules\</OutputPath> + <Optimize>true</Optimize> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <ItemGroup> + <Reference Include="ICSharpCode.SharpZipLib"> + <HintPath>..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> + </Reference> + <Reference Include="RestSharp"> + <HintPath>..\..\packages\RestSharp.104.1\lib\net35\RestSharp.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Import Include="Microsoft.VisualBasic" /> + <Import Include="System" /> + <Import Include="System.Collections" /> + <Import Include="System.Collections.Generic" /> + <Import Include="System.Drawing" /> + <Import Include="System.Linq" /> + <Import Include="System.Web" /> + <Import Include="System.Windows.Forms" /> + <Import Include="System.Xml.Linq" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Scraper\clsScrapeIMPA.vb" /> + <Compile Include="Scraper\clsScrapeMPDB.vb" /> + <Compile Include="Scraper\clsScrapeOFDB.vb" /> + <Compile Include="Scraper\clsScrapeTMDB.vb" /> + <Compile Include="Scraper\clsScrapeTrailers.vb" /> + <Compile Include="Scraper\clsScrapeImages.vb" /> + <Compile Include="Scraper\clsScrapeTMDBg.vb" /> + <Compile Include="Scraper\clsScrapeYouTube.vb" /> + <Compile Include="Scraper\clsScrapeIMDB.vb" /> + <Compile Include="Scraper\clsScrapeFANARTTV.vb" /> + <Compile Include="Scraper\dlgTMDBSearchResults.Designer.vb"> + <DependentUpon>dlgTMDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTMDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgImgSelect.Designer.vb"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgImgSelect.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailer.Designer.vb"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailer.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.Designer.vb"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmTMDBMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmTMDBMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTMDBMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="My Project\AssemblyInfo.vb" /> + <Compile Include="My Project\Application.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Application.myapp</DependentUpon> + </Compile> + <Compile Include="My Project\Resources.Designer.vb"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> + <Compile Include="My Project\Settings.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Settings.settings</DependentUpon> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + </Compile> + <Compile Include="frmTMDBInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmTMDBInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTMDBInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperMovieTMDBModule.vb" /> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="Scraper\dlgTMDBSearchResults.resx"> + <DependentUpon>dlgTMDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgImgSelect.resx"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailer.resx"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailerFormat.resx"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTMDBMediaSettingsHolder.resx"> + <DependentUpon>frmTMDBMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTMDBInfoSettingsHolder.resx"> + <DependentUpon>frmTMDBInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="My Project\Resources.resx"> + <Generator>VbMyResourcesResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.vb</LastGenOutput> + <CustomToolNamespace>My.Resources</CustomToolNamespace> + <SubType>Designer</SubType> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <None Include="My Project\Application.myapp"> + <Generator>MyApplicationCodeGenerator</Generator> + <LastGenOutput>Application.Designer.vb</LastGenOutput> + </None> + <None Include="My Project\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <CustomToolNamespace>My</CustomToolNamespace> + <LastGenOutput>Settings.Designer.vb</LastGenOutput> + </None> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\EmberAPI\EmberAPI.vbproj"> + <Project>{208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}</Project> + <Name>EmberAPI</Name> + <Private>False</Private> + </ProjectReference> + <ProjectReference Include="..\..\FanartTVAPI\FanartTVAPI.csproj"> + <Project>{70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}</Project> + <Name>FanartTVAPI</Name> + </ProjectReference> + <ProjectReference Include="..\..\WatTmdb\WatTmdb.csproj"> + <Project>{EFC11645-FAB4-4C30-A498-29F5ECDF77E8}</Project> + <Name>WatTmdb</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="Langs\scraper.EmberCore.TMDB.Debug_%28db_DB%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.English_%28en_US%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.English_%28en_US%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.German_%28de_DE%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.German_%28de_DE%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.Norwegian_%28no_NO%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.Norwegian_%28no_NO%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + </ItemGroup> + <ItemGroup /> + <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <PropertyGroup> + <PreBuildEvent> + </PreBuildEvent> + </PropertyGroup> + <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> +</Project> \ No newline at end of file diff --git a/Addons/scraper.IMPA.Poster/scraperMovieTMDBModule.vb b/Addons/scraper.IMPA.Poster/scraperMovieTMDBModule.vb new file mode 100644 index 0000000..7ac1344 --- /dev/null +++ b/Addons/scraper.IMPA.Poster/scraperMovieTMDBModule.vb @@ -0,0 +1,761 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports RestSharp +Imports WatTmdb +Imports EmberScraperModule.TMDBg + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberTMDBScraperModule + Implements Interfaces.EmberMovieScraperModule + + +#Region "Fields" + + Public Shared ConfigOptions As New Structures.ScrapeOptions + Public Shared ConfigScrapeModifier As New Structures.ScrapeModifier + Public Shared _AssemblyName As String + + Private dFImgSelect As dlgImgSelect = Nothing + + Private TMDBId As String + 'Private IMDBid As String + + ''' <summary> + ''' Scraping Here + ''' </summary> + ''' <remarks></remarks> + Private _MySettings As New sMySettings + Private _TMDBg As TMDBg.Scraper + Private _Name As String = "Ember TMDB Movie Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmTMDBInfoSettingsHolder + Private _setupPost As frmTMDBMediaSettingsHolder + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberMovieScraperModule.ModuleSettingsChanged + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsScraper + Get + Return True + End Get + End Property + + ReadOnly Property ModuleName() As String Implements Interfaces.EmberMovieScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberMovieScraperModule.ModuleVersion + Get + Return System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Property PostScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Property ScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean Implements Interfaces.EmberMovieScraperModule.QueryPostScraperCapabilities + Select Case cap + Case Enums.PostScraperCapabilities.Fanart + Return True + Case Enums.PostScraperCapabilities.Poster + Return True + Case Enums.PostScraperCapabilities.Trailer + If _MySettings.DownloadTrailers Then Return True + End Select + Return False + End Function + + Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.DownloadTrailer + Using dTrailer As New dlgTrailer(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + sURL = dTrailer.ShowDialog(DBMovie.Movie.TMDBID, DBMovie.Filename) + End Using + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef studio As List(Of String)) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.GetMovieStudio + '' perche' lo crea? + + ''Dim TMDBg As New TMDBg.Scraper + ''TMDBg.IMDBURL = MySettings.IMDBURL + studio = _TMDBg.GetMovieStudios(DBMovie.Movie.ID) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupNeedsRestart() + RaiseEvent SetupNeedsRestart() + End Sub + + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + + Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberMovieScraperModule.Init + _AssemblyName = sAssemblyName + LoadSettings() + 'Must be after Load settings to retrieve the correct API key + _TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Info") + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + End If + End If + _TMDBConf = _TMDBApi.GetConfiguration() + _TMDBApiE = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey) + _TMDBConfE = _TMDBApiE.GetConfiguration() + _TMDBg = New TMDBg.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + End Sub + + Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupPostScraper + Dim Spanel As New Containers.SettingsPanel + _setupPost = New frmTMDBMediaSettingsHolder + LoadSettings() + _setupPost.cbEnabled.Checked = _PostScraperEnabled + _setupPost.chkTrailerIMDB.Checked = _MySettings.UseIMDBTrailer + _setupPost.chkTrailerTMDB.Checked = _MySettings.UseTMDBTrailer + _setupPost.cbTrailerTMDBPref.Text = _MySettings.UseTMDBTrailerPref + _setupPost.chkTrailerTMDBXBMC.Checked = _MySettings.UseTMDBTrailerXBMC + _setupPost.chkScrapePoster.Checked = ConfigScrapeModifier.Poster + _setupPost.chkScrapeFanart.Checked = ConfigScrapeModifier.Fanart + _setupPost.chkUseIMDBp.Checked = _MySettings.UseIMDB + _setupPost.chkUseIMPA.Checked = _MySettings.UseIMPA + _setupPost.chkUseMPDB.Checked = _MySettings.UseMPDB + _setupPost.chkUseFANARTTV.Checked = _MySettings.UseFANARTTV + + ' ad size from TMDB + '_setupPost.cbManualETSize.Items.Clear() + 'If Not IsNothing(_TMDBg.TMDBConf.images) Then + ' For Each aSi In _TMDBg.TMDBConf.images.poster_sizes + ' _setupPost.cbManualETSize.Items.Add(aSi) + ' Next + ' + 'End If + _setupPost.cbManualETSize.Text = _MySettings.ManualETSize + + _setupPost.txtTimeout.Text = _MySettings.TrailerTimeout.ToString + _setupPost.chkDownloadTrailer.Checked = _MySettings.DownloadTrailers + _setupPost.CheckTrailer() + _setupPost.orderChanged() + Spanel.Name = String.Concat(Me._Name, "PostScraper") + Spanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + Spanel.Prefix = "TMDBMovieMedia_" + Spanel.Order = 110 + Spanel.Parent = "pnlMovieMedia" + Spanel.Type = Master.eLang.GetString(36, "Movies", True) + Spanel.ImageIndex = If(Me._PostScraperEnabled, 9, 10) + Spanel.Panel = Me._setupPost.pnlSettings + + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return Spanel + End Function + + Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmTMDBInfoSettingsHolder + LoadSettings() + _setup.cbEnabled.Checked = _ScraperEnabled + _setup.chkTitle.Checked = ConfigOptions.bTitle + _setup.chkYear.Checked = ConfigOptions.bYear + _setup.chkMPAA.Checked = ConfigOptions.bMPAA + _setup.chkRelease.Checked = ConfigOptions.bRelease + _setup.chkRuntime.Checked = ConfigOptions.bRuntime + _setup.chkRating.Checked = ConfigOptions.bRating + _setup.chkVotes.Checked = ConfigOptions.bVotes + _setup.chkStudio.Checked = ConfigOptions.bStudio + _setup.chkTagline.Checked = ConfigOptions.bTagline + _setup.chkOutline.Checked = ConfigOptions.bOutline + _setup.chkCast.Checked = ConfigOptions.bFullCast + _setup.chkGenre.Checked = ConfigOptions.bGenre + _setup.chkTrailer.Checked = ConfigOptions.bTrailer + _setup.chkCountry.Checked = ConfigOptions.bCountry + _setup.chkCrew.Checked = ConfigOptions.bFullCrew + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + + '_setup.chkCertification.Checked = ConfigOptions.bCert + + If String.IsNullOrEmpty(_MySettings.TMDBAPIKey) Then + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + _setup.txtTMDBApiKey.Text = _MySettings.TMDBAPIKey + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.orderChanged() + If String.IsNullOrEmpty(_MySettings.FANARTTVApiKey) Then + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _setup.txtFANARTTVApiKey.Text = _MySettings.FANARTTVApiKey + + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + SPanel.Prefix = "TMDBMovieInfo_" + SPanel.Order = 110 + SPanel.Parent = "pnlMovieData" + SPanel.Type = Master.eLang.GetString(36, "Movies", True) + SPanel.ImageIndex = If(_ScraperEnabled, 9, 10) + SPanel.Panel = _setup.pnlSettings + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return SPanel + End Function + + Sub LoadSettings() + ConfigOptions.bTitle = AdvancedSettings.GetBooleanSetting("DoTitle", True) + ConfigOptions.bYear = AdvancedSettings.GetBooleanSetting("DoYear", True) + ConfigOptions.bMPAA = AdvancedSettings.GetBooleanSetting("DoMPAA", True) + ConfigOptions.bRelease = AdvancedSettings.GetBooleanSetting("DoRelease", True) + ConfigOptions.bRuntime = AdvancedSettings.GetBooleanSetting("DoRuntime", True) + ConfigOptions.bRating = AdvancedSettings.GetBooleanSetting("DoRating", True) + ConfigOptions.bVotes = AdvancedSettings.GetBooleanSetting("DoVotes", True) + ConfigOptions.bStudio = AdvancedSettings.GetBooleanSetting("DoStudio", True) + ConfigOptions.bTagline = AdvancedSettings.GetBooleanSetting("DoTagline", True) + ConfigOptions.bOutline = AdvancedSettings.GetBooleanSetting("DoOutline", True) + ConfigOptions.bPlot = AdvancedSettings.GetBooleanSetting("DoPlot", True) + ConfigOptions.bCast = AdvancedSettings.GetBooleanSetting("DoCast", True) + ConfigOptions.bDirector = AdvancedSettings.GetBooleanSetting("DoDirector", True) + ConfigOptions.bWriters = AdvancedSettings.GetBooleanSetting("DoWriters", True) + ConfigOptions.bProducers = AdvancedSettings.GetBooleanSetting("DoProducers", True) + ConfigOptions.bGenre = AdvancedSettings.GetBooleanSetting("DoGenres", True) + ConfigOptions.bTrailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + ConfigOptions.bMusicBy = AdvancedSettings.GetBooleanSetting("DoMusic", True) + ConfigOptions.bOtherCrew = AdvancedSettings.GetBooleanSetting("DoOtherCrews", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("DoFullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("DoFullCrews", True) + ConfigOptions.bTop250 = AdvancedSettings.GetBooleanSetting("DoTop250", True) + ConfigOptions.bCountry = AdvancedSettings.GetBooleanSetting("DoCountry", True) + ConfigOptions.bCert = AdvancedSettings.GetBooleanSetting("DoCert", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("FullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("FullCrew", True) + + _MySettings.TMDBAPIKey = AdvancedSettings.GetSetting("TMDBAPIKey", "Get your API Key from http://www.themoviedb.org") + _MySettings.FANARTTVApiKey = AdvancedSettings.GetSetting("FANARTTVApiKey", "Get your API Key from http://fanart.tv") + _MySettings.FallBackEng = AdvancedSettings.GetBooleanSetting("FallBackEn", False) + _MySettings.TMDBLanguage = AdvancedSettings.GetSetting("TMDBLanguage", "en") + _MySettings.DownloadTrailers = AdvancedSettings.GetBooleanSetting("DownloadTraliers", False) + + _MySettings.TrailerTimeout = Convert.ToInt32(AdvancedSettings.GetSetting("TrailerTimeout", "10")) + _MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) + _MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) + _MySettings.UseIMPA = AdvancedSettings.GetBooleanSetting("UseIMPA", False) + _MySettings.UseMPDB = AdvancedSettings.GetBooleanSetting("UseMPDB", False) + _MySettings.UseIMDB = AdvancedSettings.GetBooleanSetting("UseIMDB", False) + _MySettings.UseFANARTTV = AdvancedSettings.GetBooleanSetting("UseFANARTTV", False) + _MySettings.UseIMDBTrailer = AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", True) + _MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + _MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) + + ConfigScrapeModifier.DoSearch = True + ConfigScrapeModifier.Meta = True + ConfigScrapeModifier.NFO = True + ConfigScrapeModifier.Extra = True + ConfigScrapeModifier.Actors = True + + ConfigScrapeModifier.Poster = AdvancedSettings.GetBooleanSetting("DoPoster", True) + ConfigScrapeModifier.Fanart = AdvancedSettings.GetBooleanSetting("DoFanart", True) + ConfigScrapeModifier.Trailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + End Sub + + Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.PostScraper + 'LoadSettings() + Dim Poster As New Images + Dim Fanart As New Images + Dim pResults As Containers.ImgResult + Dim fResults As Containers.ImgResult + Dim tURL As String = String.Empty + Dim Trailer As Trailers + Dim aScrapeImages As ScrapeImages + + LoadSettings() + If String.IsNullOrEmpty(DBMovie.Movie.TMDBID) Then + _TMDBg.GetMovieID(DBMovie) + End If + Trailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim saveModifier As Structures.ScrapeModifier = Master.GlobalScrapeMod + Master.GlobalScrapeMod = Functions.ScrapeModifierAndAlso(Master.GlobalScrapeMod, ConfigScrapeModifier) + + Dim doSave As Boolean = False + + aScrapeImages = New ScrapeImages(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + If Master.GlobalScrapeMod.Poster Then + Poster.Clear() + If Poster.IsAllowedToDownload(DBMovie, Enums.ImageType.Posters) Then + pResults = New Containers.ImgResult + If aScrapeImages.GetPreferredImage(Poster, DBMovie.Movie.ID, DBMovie.Movie.TMDBID, Enums.ImageType.Posters, pResults, DBMovie.Filename, False, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Poster.Image) Then + pResults.ImagePath = Poster.SaveAsPoster(DBMovie) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(76, "A poster of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size")) + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApi, _MySettings) + pResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Posters) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + End Using + End If + End If + End If + End If + Dim didEts As Boolean + If Master.GlobalScrapeMod.Fanart Then + Fanart.Clear() + If Fanart.IsAllowedToDownload(DBMovie, Enums.ImageType.Fanart) Then + fResults = New Containers.ImgResult + didEts = True + If aScrapeImages.GetPreferredImage(Fanart, DBMovie.Movie.IMDBID, DBMovie.Movie.TMDBID, Enums.ImageType.Fanart, fResults, DBMovie.Filename, Master.GlobalScrapeMod.Extra, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Fanart.Image) Then + fResults.ImagePath = Fanart.SaveAsFanart(DBMovie) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) ' + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(78, "Fanart of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size:")) + + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApi, _MySettings) + fResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Fanart) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + End Using + End If + End If + End If + End If + If Master.GlobalScrapeMod.Trailer AndAlso _MySettings.DownloadTrailers Then + tURL = Trailer.DownloadSingleTrailer(DBMovie.Filename, DBMovie.Movie.TMDBID, DBMovie.isSingle, DBMovie.Movie.Trailer) + If Not String.IsNullOrEmpty(tURL) Then + If tURL.Substring(0, 22) = "http://www.youtube.com" Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + DBMovie.Movie.Trailer = Replace(tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + DBMovie.Movie.Trailer = tURL + End If + ElseIf tURL.Substring(0, 7) = "http://" Then + DBMovie.Movie.Trailer = tURL + Else + DBMovie.TrailerPath = tURL + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.TrailerItem, True) + End If + End If + End If + If Master.GlobalScrapeMod.Extra Then + If Master.eSettings.AutoET AndAlso DBMovie.isSingle Then + Try + aScrapeImages.GetPreferredFAasET(DBMovie.Movie.TMDBID, DBMovie.Filename) + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.ThumbsItem, True) + Catch ex As Exception + End Try + End If + End If + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then + For Each act As MediaContainers.Person In DBMovie.Movie.Actors + Dim img As New Images + img.FromWeb(act.Thumb) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If + Next + End If + Master.GlobalScrapeMod = saveModifier + Return New Interfaces.ModuleResult With {.breakChain = False, .BoolProperty = didEts} + End Function + + Sub SaveSettings() + AdvancedSettings.SetBooleanSetting("DoFullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("DoFullCrews", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DoTitle", ConfigOptions.bTitle) + AdvancedSettings.SetBooleanSetting("DoYear", ConfigOptions.bYear) + AdvancedSettings.SetBooleanSetting("DoMPAA", ConfigOptions.bMPAA) + AdvancedSettings.SetBooleanSetting("DoRelease", ConfigOptions.bRelease) + AdvancedSettings.SetBooleanSetting("DoRuntime", ConfigOptions.bRuntime) + AdvancedSettings.SetBooleanSetting("DoRating", ConfigOptions.bRating) + AdvancedSettings.SetBooleanSetting("DoVotes", ConfigOptions.bVotes) + AdvancedSettings.SetBooleanSetting("DoStudio", ConfigOptions.bStudio) + AdvancedSettings.SetBooleanSetting("DoTagline", ConfigOptions.bTagline) + AdvancedSettings.SetBooleanSetting("DoOutline", ConfigOptions.bOutline) + AdvancedSettings.SetBooleanSetting("DoPlot", ConfigOptions.bPlot) + AdvancedSettings.SetBooleanSetting("DoCast", ConfigOptions.bCast) + AdvancedSettings.SetBooleanSetting("DoDirector", ConfigOptions.bDirector) + AdvancedSettings.SetBooleanSetting("DoWriters", ConfigOptions.bWriters) + AdvancedSettings.SetBooleanSetting("DoProducers", ConfigOptions.bProducers) + AdvancedSettings.SetBooleanSetting("DoGenres", ConfigOptions.bGenre) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigOptions.bTrailer) + AdvancedSettings.SetBooleanSetting("DoMusic", ConfigOptions.bMusicBy) + AdvancedSettings.SetBooleanSetting("DoOtherCrews", ConfigOptions.bOtherCrew) + AdvancedSettings.SetBooleanSetting("DoCountry", ConfigOptions.bCountry) + AdvancedSettings.SetBooleanSetting("DoTop250", ConfigOptions.bTop250) + AdvancedSettings.SetBooleanSetting("DoCert", ConfigOptions.bCert) + + AdvancedSettings.SetBooleanSetting("FullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("FullCrew", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DownloadTraliers", _MySettings.DownloadTrailers) + + AdvancedSettings.SetSetting("TrailerTimeout", _MySettings.TrailerTimeout.ToString) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailer", _MySettings.UseTMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", _MySettings.UseTMDBTrailerXBMC) + AdvancedSettings.SetBooleanSetting("UseIMDBTrailer", _MySettings.UseIMDBTrailer) + + AdvancedSettings.SetSetting("ManualETSize", _MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("UseTMDBTrailerPref", _MySettings.UseTMDBTrailerPref.ToString) + + AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) + AdvancedSettings.SetBooleanSetting("DoFanart", ConfigScrapeModifier.Fanart) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigScrapeModifier.Trailer) + + AdvancedSettings.SetSetting("TMDBAPIKey", _MySettings.TMDBAPIKey) + AdvancedSettings.SetSetting("FANARTTVApiKey", _MySettings.FANARTTVApiKey) + AdvancedSettings.SetBooleanSetting("FallBackEn", _MySettings.FallBackEng) + AdvancedSettings.SetSetting("TMDBLanguage", _MySettings.TMDBLanguage) + AdvancedSettings.SetBooleanSetting("UseIMPA", _MySettings.UseIMPA) + AdvancedSettings.SetBooleanSetting("UseMPDB", _MySettings.UseMPDB) + AdvancedSettings.SetBooleanSetting("UseIMDB", _MySettings.UseIMDB) + AdvancedSettings.SetBooleanSetting("UseFANARTTV", _MySettings.UseFANARTTV) + End Sub + + Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupPostScraper + _MySettings.DownloadTrailers = _setupPost.chkDownloadTrailer.Checked + _MySettings.UseIMDBTrailer = _setupPost.chkTrailerIMDB.Checked + _MySettings.UseTMDBTrailer = _setupPost.chkTrailerTMDB.Checked + _MySettings.UseTMDBTrailerXBMC = _setupPost.chkTrailerTMDBXBMC.Checked + _MySettings.TrailerTimeout = Convert.ToInt32(_setupPost.txtTimeout.Text) + _MySettings.ManualETSize = _setupPost.cbManualETSize.Text + _MySettings.UseTMDBTrailerPref = _setupPost.cbTrailerTMDBPref.Text + _MySettings.UseIMDB = _setupPost.chkUseIMDBp.Checked + _MySettings.UseIMPA = _setupPost.chkUseIMPA.Checked + _MySettings.UseMPDB = _setupPost.chkUseMPDB.Checked + _MySettings.UseFANARTTV = _setupPost.chkUseFANARTTV.Checked + ConfigScrapeModifier.Poster = _setupPost.chkScrapePoster.Checked + ConfigScrapeModifier.Fanart = _setupPost.chkScrapeFanart.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + RemoveHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + _setupPost.Dispose() + End If + End Sub + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupScraper + If Not String.IsNullOrEmpty(_setup.txtTMDBApiKey.Text) Then + _MySettings.TMDBAPIKey = _setup.txtTMDBApiKey.Text + Else + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + If Not String.IsNullOrEmpty(_setup.txtFANARTTVApiKey.Text) Then + _MySettings.FANARTTVApiKey = _setup.txtFANARTTVApiKey.Text + Else + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + ConfigOptions.bTitle = _setup.chkTitle.Checked + ConfigOptions.bYear = _setup.chkYear.Checked + ConfigOptions.bMPAA = _setup.chkMPAA.Checked + ConfigOptions.bRelease = _setup.chkRelease.Checked + ConfigOptions.bRuntime = _setup.chkRuntime.Checked + ConfigOptions.bRating = _setup.chkRating.Checked + ConfigOptions.bVotes = _setup.chkVotes.Checked + ConfigOptions.bStudio = _setup.chkStudio.Checked + ConfigOptions.bTagline = _setup.chkTagline.Checked + ConfigOptions.bOutline = _setup.chkOutline.Checked + ConfigOptions.bPlot = False + ConfigOptions.bCast = _setup.chkCast.Checked + ConfigOptions.bDirector = _setup.chkCrew.Checked + ConfigOptions.bWriters = _setup.chkCrew.Checked + ConfigOptions.bProducers = _setup.chkCrew.Checked + ConfigOptions.bGenre = _setup.chkGenre.Checked + ConfigOptions.bTrailer = _setup.chkTrailer.Checked + ConfigOptions.bMusicBy = _setup.chkCrew.Checked + ConfigOptions.bOtherCrew = _setup.chkCrew.Checked + ConfigOptions.bCountry = _setup.chkCountry.Checked + ConfigOptions.bTop250 = False + ConfigOptions.bFullCrew = _setup.chkCrew.Checked + ConfigOptions.bFullCast = _setup.chkCast.Checked + ConfigOptions.bCert = ConfigOptions.bMPAA + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + RemoveHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + _setup.Dispose() + End If + End Sub + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.Scraper + 'LoadSettings() + ''TMDBg.IMDBURL = MySettings.IMDBURL + ''TMDBg.UseOFDBTitle = MySettings.UseOFDBTitle + ''TMDBg.UseOFDBOutline = MySettings.UseOFDBOutline + ''TMDBg.UseOFDBPlot = MySettings.UseOFDBPlot + ''TMDBg.UseOFDBGenre = MySettings.UseOFDBGenre + Dim tTitle As String = String.Empty + Dim OldTitle As String = DBMovie.Movie.Title + + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + + If Master.GlobalScrapeMod.NFO AndAlso Not Master.GlobalScrapeMod.DoSearch Then + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, Options.bFullCrew, Options.bFullCast, False, Options, False) + ElseIf Not ScrapeType = Enums.ScrapeType.SingleScrape Then + DBMovie.Movie = _TMDBg.GetSearchMovieInfo(DBMovie.Movie.Title, DBMovie, ScrapeType, Options) + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + If ScrapeType = Enums.ScrapeType.SingleScrape AndAlso Master.GlobalScrapeMod.DoSearch _ + AndAlso ModulesManager.Instance.externalScrapersModules.OrderBy(Function(y) y.ScraperOrder).FirstOrDefault(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled).AssemblyName = _AssemblyName Then + DBMovie.Movie.IMDBID = String.Empty + DBMovie.ClearExtras = True + DBMovie.PosterPath = String.Empty + DBMovie.FanartPath = String.Empty + DBMovie.TrailerPath = String.Empty + DBMovie.ExtraPath = String.Empty + DBMovie.SubPath = String.Empty + DBMovie.NfoPath = String.Empty + DBMovie.Movie.Clear() + End If + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + Select Case ScrapeType + Case Enums.ScrapeType.FilterAuto, Enums.ScrapeType.FullAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.UpdateAuto + Return New Interfaces.ModuleResult With {.breakChain = False} + End Select + If ScrapeType = Enums.ScrapeType.SingleScrape Then + Using dSearch As New dlgTMDBSearchResults(_MySettings, Me._TMDBg) + '' dSearch.IMDBURL = MySettings.IMDBURL + Dim tmpTitle As String = DBMovie.Movie.Title + If String.IsNullOrEmpty(tmpTitle) Then + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name, False) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name, False) + Else + tmpTitle = StringUtils.FilterName(If(DBMovie.isSingle, Directory.GetParent(DBMovie.Filename).Name, Path.GetFileNameWithoutExtension(DBMovie.Filename))) + End If + End If + Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) + If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID + End If + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + + Master.currMovie.ClearExtras = True + Master.currMovie.PosterPath = String.Empty + Master.currMovie.FanartPath = String.Empty + Master.currMovie.TrailerPath = String.Empty + Master.currMovie.ExtraPath = String.Empty + Master.currMovie.SubPath = String.Empty + Master.currMovie.NfoPath = String.Empty + + + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, filterOptions.bFullCrew, filterOptions.bFullCast, False, filterOptions, False) + End If + Else + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End Using + End If + End If + + If Not String.IsNullOrEmpty(DBMovie.Movie.Title) Then + tTitle = StringUtils.FilterTokens(DBMovie.Movie.Title) + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = tTitle + If Master.eSettings.DisplayYear AndAlso Not String.IsNullOrEmpty(DBMovie.Movie.Year) Then + DBMovie.ListTitle = String.Format("{0} ({1})", tTitle, DBMovie.Movie.Year) + Else + DBMovie.ListTitle = tTitle + End If + Else + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name) + Else + If DBMovie.UseFolder AndAlso DBMovie.isSingle Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(DBMovie.Filename).Name) + Else + DBMovie.ListTitle = StringUtils.FilterName(Path.GetFileNameWithoutExtension(DBMovie.Filename)) + End If + End If + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = DBMovie.ListTitle + End If + + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function SelectImageOfType(ByRef mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.SelectImageOfType + If String.IsNullOrEmpty(mMovie.Movie.TMDBID) Then + _TMDBg.GetMovieID(mMovie) + End If + If preload AndAlso _DLType = Enums.ImageType.Fanart AndAlso Not IsNothing(dFImgSelect) Then + pResults = dFImgSelect.ShowDialog() + dFImgSelect = Nothing + Else + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + If preload Then + dFImgSelect = New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + dFImgSelect.PreLoad(mMovie, Enums.ImageType.Fanart, _isEdit) + End If + '' dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(mMovie, _DLType, _isEdit) + End Using + End If + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + Public Sub PostScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.PostScraperOrderChanged + _setup.orderChanged() + End Sub + + Public Sub ScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.ScraperOrderChanged + _setupPost.orderChanged() + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Structure sMySettings + +#Region "Fields" + Dim DownloadTrailers As Boolean + Dim TrailerTimeout As Integer + Dim UseTMDBTrailer As Boolean + Dim UseTMDBTrailerXBMC As Boolean + Dim ManualETSize As String + Dim UseTMDBTrailerPref As String + Dim TMDBAPIKey As String + Dim FANARTTVApiKey As String + Dim TMDBLanguage As String + Dim FallBackEng As Boolean + Dim UseIMDB As Boolean + Dim UseIMPA As Boolean + Dim UseMPDB As Boolean + Dim UseFANARTTV As Boolean + Dim UseIMDBTrailer As Boolean +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml new file mode 100644 index 0000000..cb66cd5 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml @@ -0,0 +1,902 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="1">tmdb1</string> + <string id="2">tmdb2</string> + <string id="3">tmdb3</string> + <string id="4">tmdb4</string> + <string id="5">tmdb5</string> + <string id="6">tmdb6</string> + <string id="7">tmdb7</string> + <string id="8">tmdb8</string> + <string id="9">tmdb9</string> + <string id="10">tmdb10</string> + <string id="11">tmdb11</string> + <string id="12">tmdb12</string> + <string id="13">tmdb13</string> + <string id="14">tmdb14</string> + <string id="15">tmdb15</string> + <string id="16">tmdb16</string> + <string id="17">tmdb17</string> + <string id="18">tmdb18</string> + <string id="19">tmdb19</string> + <string id="20">tmdb20</string> + <string id="21">tmdb21</string> + <string id="22">tmdb22</string> + <string id="23">tmdb23</string> + <string id="24">tmdb24</string> + <string id="25">tmdb25</string> + <string id="26">tmdb26</string> + <string id="27">tmdb27</string> + <string id="28">tmdb28</string> + <string id="29">tmdb29</string> + <string id="30">tmdb30</string> + <string id="31">tmdb31</string> + <string id="32">tmdb32</string> + <string id="33">tmdb33</string> + <string id="34">tmdb34</string> + <string id="35">tmdb35</string> + <string id="36">tmdb36</string> + <string id="37">tmdb37</string> + <string id="38">tmdb38</string> + <string id="39">tmdb39</string> + <string id="40">tmdb40</string> + <string id="41">tmdb41</string> + <string id="42">tmdb42</string> + <string id="43">tmdb43</string> + <string id="44">tmdb44</string> + <string id="45">tmdb45</string> + <string id="46">tmdb46</string> + <string id="47">tmdb47</string> + <string id="48">tmdb48</string> + <string id="49">tmdb49</string> + <string id="50">tmdb50</string> + <string id="51">tmdb51</string> + <string id="52">tmdb52</string> + <string id="53">tmdb53</string> + <string id="54">tmdb54</string> + <string id="55">tmdb55</string> + <string id="56">tmdb56</string> + <string id="57">tmdb57</string> + <string id="58">tmdb58</string> + <string id="59">tmdb59</string> + <string id="60">tmdb60</string> + <string id="61">tmdb61</string> + <string id="62">tmdb62</string> + <string id="63">tmdb63</string> + <string id="64">tmdb64</string> + <string id="65">tmdb65</string> + <string id="66">tmdb66</string> + <string id="67">tmdb67</string> + <string id="68">tmdb68</string> + <string id="69">tmdb69</string> + <string id="70">tmdb70</string> + <string id="71">tmdb71</string> + <string id="72">tmdb72</string> + <string id="73">tmdb73</string> + <string id="74">tmdb74</string> + <string id="75">tmdb75</string> + <string id="76">tmdb76</string> + <string id="77">tmdb77</string> + <string id="78">tmdb78</string> + <string id="79">tmdb79</string> + <string id="80">tmdb80</string> + <string id="81">tmdb81</string> + <string id="82">tmdb82</string> + <string id="83">tmdb83</string> + <string id="84">tmdb84</string> + <string id="85">tmdb85</string> + <string id="86">tmdb86</string> + <string id="87">tmdb87</string> + <string id="88">tmdb88</string> + <string id="89">tmdb89</string> + <string id="90">tmdb90</string> + <string id="91">tmdb91</string> + <string id="92">tmdb92</string> + <string id="93">tmdb93</string> + <string id="94">tmdb94</string> + <string id="95">tmdb95</string> + <string id="96">tmdb96</string> + <string id="97">tmdb97</string> + <string id="98">tmdb98</string> + <string id="99">tmdb99</string> + <string id="100">tmdb100</string> + <string id="101">tmdb101</string> + <string id="102">tmdb102</string> + <string id="103">tmdb103</string> + <string id="104">tmdb104</string> + <string id="105">tmdb105</string> + <string id="106">tmdb106</string> + <string id="107">tmdb107</string> + <string id="108">tmdb108</string> + <string id="109">tmdb109</string> + <string id="110">tmdb110</string> + <string id="111">tmdb111</string> + <string id="112">tmdb112</string> + <string id="113">tmdb113</string> + <string id="114">tmdb114</string> + <string id="115">tmdb115</string> + <string id="116">tmdb116</string> + <string id="117">tmdb117</string> + <string id="118">tmdb118</string> + <string id="119">tmdb119</string> + <string id="120">tmdb120</string> + <string id="121">tmdb121</string> + <string id="122">tmdb122</string> + <string id="123">tmdb123</string> + <string id="124">tmdb124</string> + <string id="125">tmdb125</string> + <string id="126">tmdb126</string> + <string id="127">tmdb127</string> + <string id="128">tmdb128</string> + <string id="129">tmdb129</string> + <string id="130">tmdb130</string> + <string id="131">tmdb131</string> + <string id="132">tmdb132</string> + <string id="133">tmdb133</string> + <string id="134">tmdb134</string> + <string id="135">tmdb135</string> + <string id="136">tmdb136</string> + <string id="137">tmdb137</string> + <string id="138">tmdb138</string> + <string id="139">tmdb139</string> + <string id="140">tmdb140</string> + <string id="141">tmdb141</string> + <string id="142">tmdb142</string> + <string id="143">tmdb143</string> + <string id="144">tmdb144</string> + <string id="145">tmdb145</string> + <string id="146">tmdb146</string> + <string id="147">tmdb147</string> + <string id="148">tmdb148</string> + <string id="149">tmdb149</string> + <string id="150">tmdb150</string> + <string id="151">tmdb151</string> + <string id="152">tmdb152</string> + <string id="153">tmdb153</string> + <string id="154">tmdb154</string> + <string id="155">tmdb155</string> + <string id="156">tmdb156</string> + <string id="157">tmdb157</string> + <string id="158">tmdb158</string> + <string id="159">tmdb159</string> + <string id="160">tmdb160</string> + <string id="161">tmdb161</string> + <string id="162">tmdb162</string> + <string id="163">tmdb163</string> + <string id="164">tmdb164</string> + <string id="165">tmdb165</string> + <string id="166">tmdb166</string> + <string id="167">tmdb167</string> + <string id="168">tmdb168</string> + <string id="169">tmdb169</string> + <string id="170">tmdb170</string> + <string id="171">tmdb171</string> + <string id="172">tmdb172</string> + <string id="173">tmdb173</string> + <string id="174">tmdb174</string> + <string id="175">tmdb175</string> + <string id="176">tmdb176</string> + <string id="177">tmdb177</string> + <string id="178">tmdb178</string> + <string id="179">tmdb179</string> + <string id="180">tmdb180</string> + <string id="181">tmdb181</string> + <string id="182">tmdb182</string> + <string id="183">tmdb183</string> + <string id="184">tmdb184</string> + <string id="185">tmdb185</string> + <string id="186">tmdb186</string> + <string id="187">tmdb187</string> + <string id="188">tmdb188</string> + <string id="189">tmdb189</string> + <string id="190">tmdb190</string> + <string id="191">tmdb191</string> + <string id="192">tmdb192</string> + <string id="193">tmdb193</string> + <string id="194">tmdb194</string> + <string id="195">tmdb195</string> + <string id="196">tmdb196</string> + <string id="197">tmdb197</string> + <string id="198">tmdb198</string> + <string id="199">tmdb199</string> + <string id="200">tmdb200</string> + <string id="201">tmdb201</string> + <string id="202">tmdb202</string> + <string id="203">tmdb203</string> + <string id="204">tmdb204</string> + <string id="205">tmdb205</string> + <string id="206">tmdb206</string> + <string id="207">tmdb207</string> + <string id="208">tmdb208</string> + <string id="209">tmdb209</string> + <string id="210">tmdb210</string> + <string id="211">tmdb211</string> + <string id="212">tmdb212</string> + <string id="213">tmdb213</string> + <string id="214">tmdb214</string> + <string id="215">tmdb215</string> + <string id="216">tmdb216</string> + <string id="217">tmdb217</string> + <string id="218">tmdb218</string> + <string id="219">tmdb219</string> + <string id="220">tmdb220</string> + <string id="221">tmdb221</string> + <string id="222">tmdb222</string> + <string id="223">tmdb223</string> + <string id="224">tmdb224</string> + <string id="225">tmdb225</string> + <string id="226">tmdb226</string> + <string id="227">tmdb227</string> + <string id="228">tmdb228</string> + <string id="229">tmdb229</string> + <string id="230">tmdb230</string> + <string id="231">tmdb231</string> + <string id="232">tmdb232</string> + <string id="233">tmdb233</string> + <string id="234">tmdb234</string> + <string id="235">tmdb235</string> + <string id="236">tmdb236</string> + <string id="237">tmdb237</string> + <string id="238">tmdb238</string> + <string id="239">tmdb239</string> + <string id="240">tmdb240</string> + <string id="241">tmdb241</string> + <string id="242">tmdb242</string> + <string id="243">tmdb243</string> + <string id="244">tmdb244</string> + <string id="245">tmdb245</string> + <string id="246">tmdb246</string> + <string id="247">tmdb247</string> + <string id="248">tmdb248</string> + <string id="249">tmdb249</string> + <string id="250">tmdb250</string> + <string id="251">tmdb251</string> + <string id="252">tmdb252</string> + <string id="253">tmdb253</string> + <string id="254">tmdb254</string> + <string id="255">tmdb255</string> + <string id="256">tmdb256</string> + <string id="257">tmdb257</string> + <string id="258">tmdb258</string> + <string id="259">tmdb259</string> + <string id="260">tmdb260</string> + <string id="261">tmdb261</string> + <string id="262">tmdb262</string> + <string id="263">tmdb263</string> + <string id="264">tmdb264</string> + <string id="265">tmdb265</string> + <string id="266">tmdb266</string> + <string id="267">tmdb267</string> + <string id="268">tmdb268</string> + <string id="269">tmdb269</string> + <string id="270">tmdb270</string> + <string id="271">tmdb271</string> + <string id="272">tmdb272</string> + <string id="273">tmdb273</string> + <string id="274">tmdb274</string> + <string id="275">tmdb275</string> + <string id="276">tmdb276</string> + <string id="277">tmdb277</string> + <string id="278">tmdb278</string> + <string id="279">tmdb279</string> + <string id="280">tmdb280</string> + <string id="281">tmdb281</string> + <string id="282">tmdb282</string> + <string id="283">tmdb283</string> + <string id="284">tmdb284</string> + <string id="285">tmdb285</string> + <string id="286">tmdb286</string> + <string id="287">tmdb287</string> + <string id="288">tmdb288</string> + <string id="289">tmdb289</string> + <string id="290">tmdb290</string> + <string id="291">tmdb291</string> + <string id="292">tmdb292</string> + <string id="293">tmdb293</string> + <string id="294">tmdb294</string> + <string id="295">tmdb295</string> + <string id="296">tmdb296</string> + <string id="297">tmdb297</string> + <string id="298">tmdb298</string> + <string id="299">tmdb299</string> + <string id="300">tmdb300</string> + <string id="301">tmdb301</string> + <string id="302">tmdb302</string> + <string id="303">tmdb303</string> + <string id="304">tmdb304</string> + <string id="305">tmdb305</string> + <string id="306">tmdb306</string> + <string id="307">tmdb307</string> + <string id="308">tmdb308</string> + <string id="309">tmdb309</string> + <string id="310">tmdb310</string> + <string id="311">tmdb311</string> + <string id="312">tmdb312</string> + <string id="313">tmdb313</string> + <string id="314">tmdb314</string> + <string id="315">tmdb315</string> + <string id="316">tmdb316</string> + <string id="317">tmdb317</string> + <string id="318">tmdb318</string> + <string id="319">tmdb319</string> + <string id="320">tmdb320</string> + <string id="321">tmdb321</string> + <string id="322">tmdb322</string> + <string id="323">tmdb323</string> + <string id="324">tmdb324</string> + <string id="325">tmdb325</string> + <string id="326">tmdb326</string> + <string id="327">tmdb327</string> + <string id="328">tmdb328</string> + <string id="329">tmdb329</string> + <string id="330">tmdb330</string> + <string id="331">tmdb331</string> + <string id="332">tmdb332</string> + <string id="333">tmdb333</string> + <string id="334">tmdb334</string> + <string id="335">tmdb335</string> + <string id="336">tmdb336</string> + <string id="337">tmdb337</string> + <string id="338">tmdb338</string> + <string id="339">tmdb339</string> + <string id="340">tmdb340</string> + <string id="341">tmdb341</string> + <string id="342">tmdb342</string> + <string id="343">tmdb343</string> + <string id="344">tmdb344</string> + <string id="345">tmdb345</string> + <string id="346">tmdb346</string> + <string id="347">tmdb347</string> + <string id="348">tmdb348</string> + <string id="349">tmdb349</string> + <string id="350">tmdb350</string> + <string id="351">tmdb351</string> + <string id="352">tmdb352</string> + <string id="353">tmdb353</string> + <string id="354">tmdb354</string> + <string id="355">tmdb355</string> + <string id="356">tmdb356</string> + <string id="357">tmdb357</string> + <string id="358">tmdb358</string> + <string id="359">tmdb359</string> + <string id="360">tmdb360</string> + <string id="361">tmdb361</string> + <string id="362">tmdb362</string> + <string id="363">tmdb363</string> + <string id="364">tmdb364</string> + <string id="365">tmdb365</string> + <string id="366">tmdb366</string> + <string id="367">tmdb367</string> + <string id="368">tmdb368</string> + <string id="369">tmdb369</string> + <string id="370">tmdb370</string> + <string id="371">tmdb371</string> + <string id="372">tmdb372</string> + <string id="373">tmdb373</string> + <string id="374">tmdb374</string> + <string id="375">tmdb375</string> + <string id="376">tmdb376</string> + <string id="377">tmdb377</string> + <string id="378">tmdb378</string> + <string id="379">tmdb379</string> + <string id="380">tmdb380</string> + <string id="381">tmdb381</string> + <string id="382">tmdb382</string> + <string id="383">tmdb383</string> + <string id="384">tmdb384</string> + <string id="385">tmdb385</string> + <string id="386">tmdb386</string> + <string id="387">tmdb387</string> + <string id="388">tmdb388</string> + <string id="389">tmdb389</string> + <string id="390">tmdb390</string> + <string id="391">tmdb391</string> + <string id="392">tmdb392</string> + <string id="393">tmdb393</string> + <string id="394">tmdb394</string> + <string id="395">tmdb395</string> + <string id="396">tmdb396</string> + <string id="397">tmdb397</string> + <string id="398">tmdb398</string> + <string id="399">tmdb399</string> + <string id="400">tmdb400</string> + <string id="401">tmdb401</string> + <string id="402">tmdb402</string> + <string id="403">tmdb403</string> + <string id="404">tmdb404</string> + <string id="405">tmdb405</string> + <string id="406">tmdb406</string> + <string id="407">tmdb407</string> + <string id="408">tmdb408</string> + <string id="409">tmdb409</string> + <string id="410">tmdb410</string> + <string id="411">tmdb411</string> + <string id="412">tmdb412</string> + <string id="413">tmdb413</string> + <string id="414">tmdb414</string> + <string id="415">tmdb415</string> + <string id="416">tmdb416</string> + <string id="417">tmdb417</string> + <string id="418">tmdb418</string> + <string id="419">tmdb419</string> + <string id="420">tmdb420</string> + <string id="421">tmdb421</string> + <string id="422">tmdb422</string> + <string id="423">tmdb423</string> + <string id="424">tmdb424</string> + <string id="425">tmdb425</string> + <string id="426">tmdb426</string> + <string id="427">tmdb427</string> + <string id="428">tmdb428</string> + <string id="429">tmdb429</string> + <string id="430">tmdb430</string> + <string id="431">tmdb431</string> + <string id="432">tmdb432</string> + <string id="433">tmdb433</string> + <string id="434">tmdb434</string> + <string id="435">tmdb435</string> + <string id="436">tmdb436</string> + <string id="437">tmdb437</string> + <string id="438">tmdb438</string> + <string id="439">tmdb439</string> + <string id="440">tmdb440</string> + <string id="441">tmdb441</string> + <string id="442">tmdb442</string> + <string id="443">tmdb443</string> + <string id="444">tmdb444</string> + <string id="445">tmdb445</string> + <string id="446">tmdb446</string> + <string id="447">tmdb447</string> + <string id="448">tmdb448</string> + <string id="449">tmdb449</string> + <string id="450">tmdb450</string> + <string id="451">tmdb451</string> + <string id="452">tmdb452</string> + <string id="453">tmdb453</string> + <string id="454">tmdb454</string> + <string id="455">tmdb455</string> + <string id="456">tmdb456</string> + <string id="457">tmdb457</string> + <string id="458">tmdb458</string> + <string id="459">tmdb459</string> + <string id="460">tmdb460</string> + <string id="461">tmdb461</string> + <string id="462">tmdb462</string> + <string id="463">tmdb463</string> + <string id="464">tmdb464</string> + <string id="465">tmdb465</string> + <string id="466">tmdb466</string> + <string id="467">tmdb467</string> + <string id="468">tmdb468</string> + <string id="469">tmdb469</string> + <string id="470">tmdb470</string> + <string id="471">tmdb471</string> + <string id="472">tmdb472</string> + <string id="473">tmdb473</string> + <string id="474">tmdb474</string> + <string id="475">tmdb475</string> + <string id="476">tmdb476</string> + <string id="477">tmdb477</string> + <string id="478">tmdb478</string> + <string id="479">tmdb479</string> + <string id="480">tmdb480</string> + <string id="481">tmdb481</string> + <string id="482">tmdb482</string> + <string id="483">tmdb483</string> + <string id="484">tmdb484</string> + <string id="485">tmdb485</string> + <string id="486">tmdb486</string> + <string id="487">tmdb487</string> + <string id="488">tmdb488</string> + <string id="489">tmdb489</string> + <string id="490">tmdb490</string> + <string id="491">tmdb491</string> + <string id="492">tmdb492</string> + <string id="493">tmdb493</string> + <string id="494">tmdb494</string> + <string id="495">tmdb495</string> + <string id="496">tmdb496</string> + <string id="497">tmdb497</string> + <string id="498">tmdb498</string> + <string id="499">tmdb499</string> + <string id="500">tmdb500</string> + <string id="501">tmdb501</string> + <string id="502">tmdb502</string> + <string id="503">tmdb503</string> + <string id="504">tmdb504</string> + <string id="505">tmdb505</string> + <string id="506">tmdb506</string> + <string id="507">tmdb507</string> + <string id="508">tmdb508</string> + <string id="509">tmdb509</string> + <string id="510">tmdb510</string> + <string id="511">tmdb511</string> + <string id="512">tmdb512</string> + <string id="513">tmdb513</string> + <string id="514">tmdb514</string> + <string id="515">tmdb515</string> + <string id="516">tmdb516</string> + <string id="517">tmdb517</string> + <string id="518">tmdb518</string> + <string id="519">tmdb519</string> + <string id="520">tmdb520</string> + <string id="521">tmdb521</string> + <string id="522">tmdb522</string> + <string id="523">tmdb523</string> + <string id="524">tmdb524</string> + <string id="525">tmdb525</string> + <string id="526">tmdb526</string> + <string id="527">tmdb527</string> + <string id="528">tmdb528</string> + <string id="529">tmdb529</string> + <string id="530">tmdb530</string> + <string id="531">tmdb531</string> + <string id="532">tmdb532</string> + <string id="533">tmdb533</string> + <string id="534">tmdb534</string> + <string id="535">tmdb535</string> + <string id="536">tmdb536</string> + <string id="537">tmdb537</string> + <string id="538">tmdb538</string> + <string id="539">tmdb539</string> + <string id="540">tmdb540</string> + <string id="541">tmdb541</string> + <string id="542">tmdb542</string> + <string id="543">tmdb543</string> + <string id="544">tmdb544</string> + <string id="545">tmdb545</string> + <string id="546">tmdb546</string> + <string id="547">tmdb547</string> + <string id="548">tmdb548</string> + <string id="549">tmdb549</string> + <string id="550">tmdb550</string> + <string id="551">tmdb551</string> + <string id="552">tmdb552</string> + <string id="553">tmdb553</string> + <string id="554">tmdb554</string> + <string id="555">tmdb555</string> + <string id="556">tmdb556</string> + <string id="557">tmdb557</string> + <string id="558">tmdb558</string> + <string id="559">tmdb559</string> + <string id="560">tmdb560</string> + <string id="561">tmdb561</string> + <string id="562">tmdb562</string> + <string id="563">tmdb563</string> + <string id="564">tmdb564</string> + <string id="565">tmdb565</string> + <string id="566">tmdb566</string> + <string id="567">tmdb567</string> + <string id="568">tmdb568</string> + <string id="569">tmdb569</string> + <string id="570">tmdb570</string> + <string id="571">tmdb571</string> + <string id="572">tmdb572</string> + <string id="573">tmdb573</string> + <string id="574">tmdb574</string> + <string id="575">tmdb575</string> + <string id="576">tmdb576</string> + <string id="577">tmdb577</string> + <string id="578">tmdb578</string> + <string id="579">tmdb579</string> + <string id="580">tmdb580</string> + <string id="581">tmdb581</string> + <string id="582">tmdb582</string> + <string id="583">tmdb583</string> + <string id="584">tmdb584</string> + <string id="585">tmdb585</string> + <string id="586">tmdb586</string> + <string id="587">tmdb587</string> + <string id="588">tmdb588</string> + <string id="589">tmdb589</string> + <string id="590">tmdb590</string> + <string id="591">tmdb591</string> + <string id="592">tmdb592</string> + <string id="593">tmdb593</string> + <string id="594">tmdb594</string> + <string id="595">tmdb595</string> + <string id="596">tmdb596</string> + <string id="597">tmdb597</string> + <string id="598">tmdb598</string> + <string id="599">tmdb599</string> + <string id="600">tmdb600</string> + <string id="601">tmdb601</string> + <string id="602">tmdb602</string> + <string id="603">tmdb603</string> + <string id="604">tmdb604</string> + <string id="605">tmdb605</string> + <string id="606">tmdb606</string> + <string id="607">tmdb607</string> + <string id="608">tmdb608</string> + <string id="609">tmdb609</string> + <string id="610">tmdb610</string> + <string id="611">tmdb611</string> + <string id="612">tmdb612</string> + <string id="613">tmdb613</string> + <string id="614">tmdb614</string> + <string id="615">tmdb615</string> + <string id="616">tmdb616</string> + <string id="617">tmdb617</string> + <string id="618">tmdb618</string> + <string id="619">tmdb619</string> + <string id="620">tmdb620</string> + <string id="621">tmdb621</string> + <string id="622">tmdb622</string> + <string id="623">tmdb623</string> + <string id="624">tmdb624</string> + <string id="625">tmdb625</string> + <string id="626">tmdb626</string> + <string id="627">tmdb627</string> + <string id="628">tmdb628</string> + <string id="629">tmdb629</string> + <string id="630">tmdb630</string> + <string id="631">tmdb631</string> + <string id="632">tmdb632</string> + <string id="633">tmdb633</string> + <string id="634">tmdb634</string> + <string id="635">tmdb635</string> + <string id="636">tmdb636</string> + <string id="637">tmdb637</string> + <string id="638">tmdb638</string> + <string id="639">tmdb639</string> + <string id="640">tmdb640</string> + <string id="641">tmdb641</string> + <string id="642">tmdb642</string> + <string id="643">tmdb643</string> + <string id="644">tmdb644</string> + <string id="645">tmdb645</string> + <string id="646">tmdb646</string> + <string id="647">tmdb647</string> + <string id="648">tmdb648</string> + <string id="649">tmdb649</string> + <string id="650">tmdb650</string> + <string id="651">tmdb651</string> + <string id="652">tmdb652</string> + <string id="653">tmdb653</string> + <string id="654">tmdb654</string> + <string id="655">tmdb655</string> + <string id="656">tmdb656</string> + <string id="657">tmdb657</string> + <string id="658">tmdb658</string> + <string id="659">tmdb659</string> + <string id="660">tmdb660</string> + <string id="661">tmdb661</string> + <string id="662">tmdb662</string> + <string id="663">tmdb663</string> + <string id="664">tmdb664</string> + <string id="665">tmdb665</string> + <string id="666">tmdb666</string> + <string id="667">tmdb667</string> + <string id="668">tmdb668</string> + <string id="669">tmdb669</string> + <string id="670">tmdb670</string> + <string id="671">tmdb671</string> + <string id="672">tmdb672</string> + <string id="673">tmdb673</string> + <string id="674">tmdb674</string> + <string id="675">tmdb675</string> + <string id="676">tmdb676</string> + <string id="677">tmdb677</string> + <string id="678">tmdb678</string> + <string id="679">tmdb679</string> + <string id="680">tmdb680</string> + <string id="681">tmdb681</string> + <string id="682">tmdb682</string> + <string id="683">tmdb683</string> + <string id="684">tmdb684</string> + <string id="685">tmdb685</string> + <string id="686">tmdb686</string> + <string id="687">tmdb687</string> + <string id="688">tmdb688</string> + <string id="689">tmdb689</string> + <string id="690">tmdb690</string> + <string id="691">tmdb691</string> + <string id="692">tmdb692</string> + <string id="693">tmdb693</string> + <string id="694">tmdb694</string> + <string id="695">tmdb695</string> + <string id="696">tmdb696</string> + <string id="697">tmdb697</string> + <string id="698">tmdb698</string> + <string id="699">tmdb699</string> + <string id="700">tmdb700</string> + <string id="701">tmdb701</string> + <string id="702">tmdb702</string> + <string id="703">tmdb703</string> + <string id="704">tmdb704</string> + <string id="705">tmdb705</string> + <string id="706">tmdb706</string> + <string id="707">tmdb707</string> + <string id="708">tmdb708</string> + <string id="709">tmdb709</string> + <string id="710">tmdb710</string> + <string id="711">tmdb711</string> + <string id="712">tmdb712</string> + <string id="713">tmdb713</string> + <string id="714">tmdb714</string> + <string id="715">tmdb715</string> + <string id="716">tmdb716</string> + <string id="717">tmdb717</string> + <string id="718">tmdb718</string> + <string id="719">tmdb719</string> + <string id="720">tmdb720</string> + <string id="721">tmdb721</string> + <string id="722">tmdb722</string> + <string id="723">tmdb723</string> + <string id="724">tmdb724</string> + <string id="725">tmdb725</string> + <string id="726">tmdb726</string> + <string id="727">tmdb727</string> + <string id="728">tmdb728</string> + <string id="729">tmdb729</string> + <string id="730">tmdb730</string> + <string id="731">tmdb731</string> + <string id="732">tmdb732</string> + <string id="733">tmdb733</string> + <string id="734">tmdb734</string> + <string id="735">tmdb735</string> + <string id="736">tmdb736</string> + <string id="737">tmdb737</string> + <string id="738">tmdb738</string> + <string id="739">tmdb739</string> + <string id="740">tmdb740</string> + <string id="741">tmdb741</string> + <string id="742">tmdb742</string> + <string id="743">tmdb743</string> + <string id="744">tmdb744</string> + <string id="745">tmdb745</string> + <string id="746">tmdb746</string> + <string id="747">tmdb747</string> + <string id="748">tmdb748</string> + <string id="749">tmdb749</string> + <string id="750">tmdb750</string> + <string id="751">tmdb751</string> + <string id="752">tmdb752</string> + <string id="753">tmdb753</string> + <string id="754">tmdb754</string> + <string id="755">tmdb755</string> + <string id="756">tmdb756</string> + <string id="757">tmdb757</string> + <string id="758">tmdb758</string> + <string id="759">tmdb759</string> + <string id="760">tmdb760</string> + <string id="761">tmdb761</string> + <string id="762">tmdb762</string> + <string id="763">tmdb763</string> + <string id="764">tmdb764</string> + <string id="765">tmdb765</string> + <string id="766">tmdb766</string> + <string id="767">tmdb767</string> + <string id="768">tmdb768</string> + <string id="769">tmdb769</string> + <string id="770">tmdb770</string> + <string id="771">tmdb771</string> + <string id="772">tmdb772</string> + <string id="773">tmdb773</string> + <string id="774">tmdb774</string> + <string id="775">tmdb775</string> + <string id="776">tmdb776</string> + <string id="777">tmdb777</string> + <string id="778">tmdb778</string> + <string id="779">tmdb779</string> + <string id="780">tmdb780</string> + <string id="781">tmdb781</string> + <string id="782">tmdb782</string> + <string id="783">tmdb783</string> + <string id="784">tmdb784</string> + <string id="785">tmdb785</string> + <string id="786">tmdb786</string> + <string id="787">tmdb787</string> + <string id="788">tmdb788</string> + <string id="789">tmdb789</string> + <string id="790">tmdb790</string> + <string id="791">tmdb791</string> + <string id="792">tmdb792</string> + <string id="793">tmdb793</string> + <string id="794">tmdb794</string> + <string id="795">tmdb795</string> + <string id="796">tmdb796</string> + <string id="797">tmdb797</string> + <string id="798">tmdb798</string> + <string id="799">tmdb799</string> + <string id="800">tmdb800</string> + <string id="801">tmdb801</string> + <string id="802">tmdb802</string> + <string id="803">tmdb803</string> + <string id="804">tmdb804</string> + <string id="805">tmdb805</string> + <string id="806">tmdb806</string> + <string id="807">tmdb807</string> + <string id="808">tmdb808</string> + <string id="809">tmdb809</string> + <string id="810">tmdb810</string> + <string id="811">tmdb811</string> + <string id="812">tmdb812</string> + <string id="813">tmdb813</string> + <string id="814">tmdb814</string> + <string id="815">tmdb815</string> + <string id="816">tmdb816</string> + <string id="817">tmdb817</string> + <string id="818">tmdb818</string> + <string id="819">tmdb819</string> + <string id="820">tmdb820</string> + <string id="821">tmdb821</string> + <string id="822">tmdb822</string> + <string id="823">tmdb823</string> + <string id="824">tmdb824</string> + <string id="825">tmdb825</string> + <string id="826">tmdb826</string> + <string id="827">tmdb827</string> + <string id="828">tmdb828</string> + <string id="829">tmdb829</string> + <string id="830">tmdb830</string> + <string id="831">tmdb831</string> + <string id="832">tmdb832</string> + <string id="833">tmdb833</string> + <string id="834">tmdb834</string> + <string id="835">tmdb835</string> + <string id="836">tmdb836</string> + <string id="837">tmdb837</string> + <string id="838">tmdb838</string> + <string id="839">tmdb839</string> + <string id="840">tmdb840</string> + <string id="841">tmdb841</string> + <string id="842">tmdb842</string> + <string id="843">tmdb843</string> + <string id="844">tmdb844</string> + <string id="845">tmdb845</string> + <string id="846">tmdb846</string> + <string id="847">tmdb847</string> + <string id="848">tmdb848</string> + <string id="849">tmdb849</string> + <string id="850">tmdb850</string> + <string id="851">tmdb851</string> + <string id="852">tmdb852</string> + <string id="853">tmdb853</string> + <string id="854">tmdb854</string> + <string id="855">tmdb855</string> + <string id="856">tmdb856</string> + <string id="857">tmdb857</string> + <string id="858">tmdb858</string> + <string id="859">tmdb859</string> + <string id="860">tmdb860</string> + <string id="861">tmdb861</string> + <string id="862">tmdb862</string> + <string id="863">tmdb863</string> + <string id="864">tmdb864</string> + <string id="865">tmdb865</string> + <string id="866">tmdb866</string> + <string id="867">tmdb867</string> + <string id="868">tmdb868</string> + <string id="869">tmdb869</string> + <string id="870">tmdb870</string> + <string id="871">tmdb871</string> + <string id="872">tmdb872</string> + <string id="873">tmdb873</string> + <string id="874">tmdb874</string> + <string id="875">tmdb875</string> + <string id="876">tmdb876</string> + <string id="877">tmdb877</string> + <string id="878">tmdb878</string> + <string id="879">tmdb879</string> + <string id="880">tmdb880</string> + <string id="881">tmdb881</string> + <string id="882">tmdb882</string> + <string id="883">tmdb883</string> + <string id="884">tmdb884</string> + <string id="885">tmdb885</string> + <string id="886">tmdb886</string> + <string id="887">tmdb887</string> + <string id="888">tmdb888</string> + <string id="889">tmdb889</string> + <string id="890">tmdb890</string> + <string id="891">tmdb891</string> + <string id="892">tmdb892</string> + <string id="893">tmdb893</string> + <string id="894">tmdb894</string> + <string id="895">tmdb895</string> + <string id="896">tmdb896</string> + <string id="897">tmdb897</string> + <string id="898">tmdb898</string> + <string id="899">tmdb899</string> + <string id="900">tmdb900</string> +</strings> \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml new file mode 100644 index 0000000..5e87256 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Enable or disable this module.</string> + <string control="TMDBMovieInfo_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieInfo_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API Key from the TMDB site. Sharing the API key is forbidden.</string> + <string control="TMDBMovieInfo_chkCertification">Enable scraping movie certification.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Selected language for TMDB searches</string> + <string control="TMDBMovieInfo_chkFallBackEng">If no record is available for selected language try English</string> + <string control="TMDBMovieInfo_chkCrew">Enable scraping movie other crew. (Scrape Full Crew must be enabled)</string> + <string control="TMDBMovieInfo_chkStudio">Enable scraping movie studio.</string> + <string control="TMDBMovieInfo_chkRuntime">Enable scraping movie runtime.</string> + <string control="TMDBMovieInfo_chkPlot">Enable scraping movie plot.</string> + <string control="TMDBMovieInfo_chkOutline">Enable scraping movie outline.</string> + <string control="TMDBMovieInfo_chkGenre">Enable scraping movie genre.</string> + <string control="TMDBMovieInfo_chkTagline">Enable scraping movie tagline.</string> + <string control="TMDBMovieInfo_chkCast">Enable scraping movie cast.</string> + <string control="TMDBMovieInfo_chkVotes">Enable scraping movie votes.</string> + <string control="TMDBMovieInfo_chkRating">Enable scraping movie rating.</string> + <string control="TMDBMovieInfo_chkRelease">Enable scraping movie release date.</string> + <string control="TMDBMovieInfo_chkMPAA">Enable scraping movie MPAA.</string> + <string control="TMDBMovieInfo_chkYear">Enable scraping movie year.</string> + <string control="TMDBMovieInfo_chkTitle">Enable scraping movie title.</string> + <string control="TMDBMovieMedia_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieMedia_cbEnabled">Enable or disable this module.</string> + <string control="TMDBMovieMedia_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Enable scraping posters from this module. (Refer to global poster settings for more options)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Enable scraping fanart from this module. (Refer to global fanart settings for more options)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Enable trailer downloading from this module. (Refer to global trailer settings for more options)</string> + <string control="TMDBMovieMedia_txtTimeout">Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Select the sites from which you would like to retrieve trailer URLs and/or files.</string> +</strings> diff --git a/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml new file mode 100644 index 0000000..cf68bc8 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Native TV Scrapers</string> + <string id="1">Use OFDB Genre</string> + <string id="2">Use OFDB Plot</string> + <string id="3">Use OFDB Outline</string> + <string id="4">Use OFDB Title</string> + <string id="5">TMDB Mirror:</string> + <string id="6">Scraper Fields - Scraper specific</string> + <string id="7">Timeout:</string> + <string id="8">Supported Sites:</string> + <string id="9">Get Images From:</string> + <string id="10">Search Results</string> + <string id="11">Searching TMDB...</string> + <string id="12">The ID you entered is not a valid IMDB ID.</string> + <string id="13">You have manually entered an IMDB ID but have not verified it is correct.</string> + <string id="14">Continue without verification?</string> + <string id="15">Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again.</string> + <string id="16">Verification Failed</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">No Matches Found</string> + <string id="21">View details of each result to find the proper movie.</string> + <string id="22">Movie Search Results</string> + <string id="23">Manual IMDB Entry:</string> + <string id="24">Verify</string> + <string id="25">Searching TMDB...</string> + <string id="26">Downloading details...</string> + <string id="27">Downloading {0}</string> + <string id="28">No Fanart found for this movie.</string> + <string id="29">No Fanart Found</string> + <string id="30">No Posters found for this movie.</string> + <string id="31">No Posters Found</string> + <string id="32">Retrieving data from TheMovieDB.com...</string> + <string id="33">TheMovieDB.com is not enabled</string> + <string id="34">Retrieving data from IMPAwards.com...</string> + <string id="35">IMPAwards.com is not enabled</string> + <string id="36">Retrieving data from MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com is not enabled</string> + <string id="38">Preparing images...</string> + <string id="39">Select Poster</string> + <string id="40">Select Fanart</string> + <string id="41">Check All Thumb</string> + <string id="42">Check All Mid</string> + <string id="43">Check All Original</string> + <string id="44">Selected item will be set as fanart. All checked items will be saved to \extrathumbs.</string> + <string id="45">Performing Preliminary Tasks...</string> + <string id="46">Downloading Selected Image...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Small</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Small ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Multiple</string> + <string id="56">Downloading selected trailer...</string> + <string id="57">Copying specified file to trailer...</string> + <string id="58">The trailer could not be played. This could be due to an invalid URL or you do not have the proper player to play the trailer type.</string> + <string id="59">Error Playing Trailer</string> + <string id="60">Move</string> + <string id="61">Copy</string> + <string id="62">Moving specified file to trailer...</string> + <string id="63">Set To Nfo</string> + <string id="64">Select Trailer</string> + <string id="65">Select Trailer to Download</string> + <string id="66">Manual Trailer Entry</string> + <string id="67">Direct Link or YouTube URL:</string> + <string id="68">Compiling trailer list...</string> + <string id="69">Preview Trailer</string> + <string id="70">Local Trailer:</string> + <string id="71">The video format links could not be retrieved.</string> + <string id="72">Error Retrieving Video Format Links</string> + <string id="73">Select Format</string> + <string id="74">Getting available formats...</string> + <string id="75">Available Formats</string> + <string id="76">A poster of your preferred size could not be found. Please choose another.</string> + <string id="77">No Preferred Size</string> + <string id="78">Fanart of your preferred size could not be found. Please choose another.</string> + <string id="79">There are no known episodes for this show. Scrape the show, season, or episode and try again.</string> + <string id="80">No Known Episodes</string> + <string id="81">There is no poster available for this episode.</string> + <string id="82">Guest Star</string> + <string id="83">The ID you entered is not a valid TVDB ID.</string> + <string id="84">Downloading show info...</string> + <string id="85">TV Search Results</string> + <string id="86">View details of each result to find the proper TV show.</string> + <string id="87">Downloading Fullsize Fanart Image...</string> + <string id="88">Loading Current Images...</string> + <string id="89">(Down)Loading New Images...</string> + <string id="90">Setting Defaults...</string> + <string id="91">Show Poster</string> + <string id="92">Episode Fanart</string> + <string id="93">Show Fanart</string> + <string id="94">All Seasons Poster</string> + <string id="95">Season Posters</string> + <string id="96">Season Fanart</string> + <string id="97">Season {0} Posters</string> + <string id="98">Season {0} Fanart</string> + <string id="99">TV Image Selection</string> + <string id="100">Current Image:</string> + <string id="101">Get Posters</string> + <string id="102">Get Fanart</string> + <string id="103">These settings are specific to this module.{0}Please refer to the global settings for more options.</string> + <string id="104">Ember TMDB Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Size:</string> + <string id="109">Trailers</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Preferred language</string> + <string id="113">Save Fanart In:</string> + <string id="114">Fall back on english</string> + <string id="115">Preferred Language:</string> + <string id="116">TMDBid:</string> + <string id="117">Retrieving data from IMDB.com...</string> + <string id="118">IMDB.com is not enabled</string> + <string id="119">TheMovieDB API is missing or not valid</string> + <string id="120">Retrieving data from Fanart.tv...</string> + <string id="121">Fanart.tv is not enabled</string> + <string id="122">Get your API Key from www.themoviedb.org</string> + <string id="123">Get your API Key from fanart.tv</string> +</strings> diff --git a/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml new file mode 100644 index 0000000..d2a3801 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Aktiviert oder deaktiviert dieses Modul.</string> + <string control="TMDBMovieInfo_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieInfo_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API-Key von der TMDB-Website. Gemeinsame Nutzung des API-Schlüssels ist verboten.</string> + <string control="TMDBMovieInfo_chkCertification">Das Scrapen von Altersbeschränkungen einschalten.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Wähle die Sprache in der auf TMDB gesucht werden soll</string> + <string control="TMDBMovieInfo_chkFallBackEng">Wenn kein Datensatz für die gewählte Sprache verfügbar ist versuche englischen zu nehmen.</string> + <string control="TMDBMovieInfo_chkCrew">Das Scrapen von der restlichen Crew einschalten. ("Gesamte Crew Scrapen" muss eingeschaltet sein)</string> + <string control="TMDBMovieInfo_chkStudio">Das Scrapen von Studios einschalten.</string> + <string control="TMDBMovieInfo_chkRuntime">Das Scrapen von Spielzeiten einschalten.</string> + <string control="TMDBMovieInfo_chkPlot">Das Scrapen von Inhaltsangaben einschalten.</string> + <string control="TMDBMovieInfo_chkOutline">Das Scrapen von Kurzbeschreibungen einschalten.</string> + <string control="TMDBMovieInfo_chkGenre">Das Scrapen von Genres einschalten.</string> + <string control="TMDBMovieInfo_chkTagline">Das Scrapen von Taglines einschalten.</string> + <string control="TMDBMovieInfo_chkCast">Das Scrapen von Schauspielern einschalten.</string> + <string control="TMDBMovieInfo_chkVotes">Das Scrapen von Anzahl Bewertungen einschalten.</string> + <string control="TMDBMovieInfo_chkRating">Das Scrapen von Bewertungen einschalten.</string> + <string control="TMDBMovieInfo_chkRelease">Das Scrapen von Premiere-Daten einschalten.</string> + <string control="TMDBMovieInfo_chkMPAA">Das Scrapen von MPAA-Informationen einschalten.</string> + <string control="TMDBMovieInfo_chkYear">Das Scrapen von Filmjahren einschalten.</string> + <string control="TMDBMovieInfo_chkTitle">Das Scrapen von Filmtiteln einschalten.</string> + <string control="TMDBMovieMedia_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieMedia_cbEnabled">Aktiviert oder deaktiviert dieses Modul.</string> + <string control="TMDBMovieMedia_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Aktiviert das Laden von Fanarts mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Aktiviert das Laden von Trailern mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_txtTimeout">Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Seite in dieser Zeit nicht geantwortet hat wird sie übersprungen)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Wähle die Seite von der Trailer URLs/Dateien geladen werden sollen.</string> +</strings> diff --git a/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml new file mode 100644 index 0000000..9b8e52e --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Nativer TV Scraper</string> + <string id="1">OFDB Genre benutzen</string> + <string id="2">OFDB Handlung benutzen</string> + <string id="3">OFDB Kurzbeschr. benutzen</string> + <string id="4">OFDB Titel benutzen</string> + <string id="5">TMDB Mirror:</string> + <string id="6">Scraper Felder - Scraper spezifisch</string> + <string id="7">Timeout:</string> + <string id="8">Unterstützte Seiten:</string> + <string id="9">Bilder holen von:</string> + <string id="10">Suchergebnis</string> + <string id="11">Suche in der TMDB...</string> + <string id="12">Die eingegebene ID ist keine gültige IMDB ID.</string> + <string id="13">Die IMDB ID ist noch nicht geprüft.</string> + <string id="14">Ohne Prüfung fortfahren?</string> + <string id="15">Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben.</string> + <string id="16">Prüfung fehlgeschlagen</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">Keine Treffer</string> + <string id="21">Schaue dir die Details an um den richtigen Film zu finden.</string> + <string id="22">Film Suchergebnis</string> + <string id="23">Man. IMDB ID:</string> + <string id="24">Prüfen</string> + <string id="25">Suche in der TMDB...</string> + <string id="26">Lade Details...</string> + <string id="27">Lade {0} herunter</string> + <string id="28">Kein Fanart für diesen Film gefunden.</string> + <string id="29">Kein Fanart gefunden</string> + <string id="30">Kein Poster für diesen Film gefunden.</string> + <string id="31">Kein Poster gefunden</string> + <string id="32">Lade Daten von TheMovieDB.com...</string> + <string id="33">TheMovieDB.com ist nicht aktiviert</string> + <string id="34">Lade Daten von IMPAwards.com...</string> + <string id="35">IMPAwards.com ist nicht aktiviert</string> + <string id="36">Lade Daten von MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com ist nicht aktiviert</string> + <string id="38">Bereite Bilder vor...</string> + <string id="39">Wähle Poster</string> + <string id="40">Wähle Fanart</string> + <string id="41">Wähle alle Thumb</string> + <string id="42">Wähle alle Mittl.</string> + <string id="43">Wähle alle Original</string> + <string id="44">Markiertes Bild wird Fanart. Alle aktivierten werden Extrathumbs.</string> + <string id="45">Vorarbeit läuft...</string> + <string id="46">Lade gewähltes Bild...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Klein</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Klein ({0}x{1})</string> + <string id="54">Mittel ({0}x{1})</string> + <string id="55">Mehrfach</string> + <string id="56">Lade gewählten Trailer...</string> + <string id="57">Kopiere gewählten Trailer...</string> + <string id="58">Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URL liegen oder es ist kein Player für diesen Dateityp vorhanden.</string> + <string id="59">Fehler beim Abspielen des Trailers</string> + <string id="60">Verschieben</string> + <string id="61">Kopieren</string> + <string id="62">Verschiebe gewählten Treiler...</string> + <string id="63">In NFO speichern</string> + <string id="64">Trailer wählen</string> + <string id="65">Trailer zum laden wählen</string> + <string id="66">Manueller Trailer</string> + <string id="67">Direkter Link oder YouTube URL:</string> + <string id="68">Stelle Trailerliste zusammen...</string> + <string id="69">Trailer Vorschau</string> + <string id="70">Loakler trailer:</string> + <string id="71">Fehler beim generieren der Videoformat Linkliste.</string> + <string id="72">Fehler beim Generieren der Videoformat Links.</string> + <string id="73">Wähle Format</string> + <string id="74">Hole verfügbare Formate...</string> + <string id="75">Verfügbare Formate</string> + <string id="76">Es konnte kein Poster in der bevorzugten Größe gefunden werden. Wähle ein anderes.</string> + <string id="77">Keine bevorzugte Größe</string> + <string id="78">Es konnte kein Fanart in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="79">Keine Episoden für diese TV-Serie verfügbar. Scrape diese Serie, Staffel oder Episode und versuche es erneut.</string> + <string id="80">Keine Episoden verfügbar</string> + <string id="81">Kein Poster für diese Episode vorhanden.</string> + <string id="82">Gaststar</string> + <string id="83">Die eingegebene ID ist keine gültige TMDB ID.</string> + <string id="84">Lade Serien Informationen...</string> + <string id="85">Serien Suchergebnis</string> + <string id="86">Betrachte die Details um die richtige TV-Serie zu erkennen.</string> + <string id="87">Lade Fanart in Originalgröße...</string> + <string id="88">Lade aktuelle Bilder...</string> + <string id="89">Lade neue Bilder...</string> + <string id="90">Setze Standardwerte...</string> + <string id="91">Serien Poster</string> + <string id="92">Episoden Fanart</string> + <string id="93">Serien Fanart</string> + <string id="94">Alle-Staffeln Poster</string> + <string id="95">Staffel Poster</string> + <string id="96">Staffel Fanart</string> + <string id="97">Staffel {0} Poster</string> + <string id="98">Staffel {0} Fanart</string> + <string id="99">Bilderwahl TV-Serien</string> + <string id="100">Aktuelles Bild:</string> + <string id="101">Poster laden</string> + <string id="102">Fanart laden</string> + <string id="103">Diese Einstellungen sind Modul-spezifisch. {0} Bitte werfen sie einen Blick in die Globalen Einstellungen für noch mehr Optionen.</string> + <string id="104">Ember TMDB Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Grösse:</string> + <string id="109">Trailer</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Bevorzugte Sprache</string> + <string id="113">Speichere Fanart in:</string> + <string id="114">Verwende Englisch wenn nichts verfügbar</string> + <string id="115">Bevorzugte Sprache:</string> + <string id="116">TMDBid:</string> + <string id="117">Lade Daten von IMDB.com...</string> + <string id="118">IMDB.com ist nicht aktiviert.</string> + <string id="119">Die TheMovieDB API ist nicht vorhanden oder ungültig</string> + <string id="120">Lade Daten von Fanart.tv...</string> + <string id="121">Fanart.tv ist nicht aktiviert</string> + <string id="122">Get your API Key from www.themoviedb.org</string> + <string id="123">Get your API Key from fanart.tv</string> +</strings> diff --git a/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..54809c6 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Slå denne modulen på eller av.</string> + <string control="TMDBMovieInfo_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieInfo_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API-nøkkel fra TMDB-siden. Deling av denne nøkkelen er forbudt.</string> + <string control="TMDBMovieInfo_chkCertification">Slå på detaljhenting av filmsertifisering.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Valgt språk for TMDB-søk.</string> + <string control="TMDBMovieInfo_chkFallBackEng">Hvis valgt språk ikke blir funnet, prøv engelsk.</string> + <string control="TMDBMovieInfo_chkCrew">Slå på detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått)</string> + <string control="TMDBMovieInfo_chkStudio">Slå på detaljhenting av filmstudio.</string> + <string control="TMDBMovieInfo_chkRuntime">Slå på detaljhenting av filmlengde.</string> + <string control="TMDBMovieInfo_chkPlot">Slå på detaljhenting av filmens historie.</string> + <string control="TMDBMovieInfo_chkOutline">Slå på detaljhenting av filmens beskrivelse.</string> + <string control="TMDBMovieInfo_chkGenre">Slå på detaljhenting av filmens sjanger.</string> + <string control="TMDBMovieInfo_chkTagline">Slå på detaljhetning av filmens undertittel.</string> + <string control="TMDBMovieInfo_chkCast">Slå på detaljhetning av filmens skuespillerbeholdning.</string> + <string control="TMDBMovieInfo_chkVotes">Slå på detaljhetning av filmens poeng.</string> + <string control="TMDBMovieInfo_chkRating">Slå på detaljhetning av filmens aldersgrense.</string> + <string control="TMDBMovieInfo_chkRelease">Slå på detaljhetning av filmens premieredato.</string> + <string control="TMDBMovieInfo_chkMPAA">Slå på detaljhetning av filmens MPAA-markering.</string> + <string control="TMDBMovieInfo_chkYear">Slå på detaljhetning av filmens år.</string> + <string control="TMDBMovieInfo_chkTitle">Slå på detaljhetning av filmens tittel.</string> + <string control="TMDBMovieMedia_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieMedia_cbEnabled">Slå denne modulen på eller av.</string> + <string control="TMDBMovieMedia_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Slå på detaljhetning av plakater i denne modulen. (Se globale plakatinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Slå på detaljhetning av fankunst i denne modulen. (Se globale fankunstinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Slå på automatisk henting av trailer fra denne modulen. (Se globale trailerinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_txtTimeout">Før inn tiden (i sekunder) du vil bruke for timeout for trailersider. (Hvis siden ikke svarer innen timeoutfristen, så vil den bli hoppet over)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Velg sidene du vil bruke til trailer URL og/eller filer.</string> +</strings> diff --git a/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml new file mode 100644 index 0000000..3ee8a25 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">EMM TV-detaljhentere</string> + <string id="1">Bruk OFDB-sjangere</string> + <string id="2">Bruk OFDB-filmhistorie</string> + <string id="3">Bruk OFDB-beskrivelse</string> + <string id="4">Bruk OFDB-tittel</string> + <string id="5">TMDB-speilserver:</string> + <string id="6">Detaljhenterområder - Detaljhenterspesifikk</string> + <string id="7">Tidsavbrudd:</string> + <string id="8">Støttede sider:</string> + <string id="9">Hent bilder fra:</string> + <string id="10">Søkeresultater</string> + <string id="11">Søker TMDB...</string> + <string id="12">IDen du førte inn er ikke en riktig IMDB-ID.</string> + <string id="13">Du har ført inn en IMDB-ID, men har ikke verifisert om den er riktig.</string> + <string id="14">Fortsette uten verifisering?</string> + <string id="15">Kunne ikke hente filmdetaljer for den innførte IDen. Vennligst sjekk IDen og prøv igjen.</string> + <string id="16">Verifisering feilet</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">Ingen funnet</string> + <string id="21">Se detaljer fra hvert treff for å finne riktig film.</string> + <string id="22">Filmsøkresultater</string> + <string id="23">Manuell IMDB innføring:</string> + <string id="24">Verifiser</string> + <string id="25">Søker TMDB...</string> + <string id="26">Laster ned detaljer...</string> + <string id="27">Laster ned {0}</string> + <string id="28">Ingen fankunst funnet for denne filmen.</string> + <string id="29">Ingen fankunst funnet</string> + <string id="30">Ingen plakater funnet for denne filmen.</string> + <string id="31">Ingen plakater funnet</string> + <string id="32">Henter data fra TheMovieDB.com...</string> + <string id="33">TheMovieDB.com er ikke påslått</string> + <string id="34">Henter data fra IMPAwards.com...</string> + <string id="35">IMPAwards.com er ikke påslått</string> + <string id="36">Henter data fra MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com er ikke påslått</string> + <string id="38">Forbereder bilder...</string> + <string id="39">Velg plakat</string> + <string id="40">Velg fankunst</string> + <string id="41">Huk av alle tommelbilder</string> + <string id="42">Huk av alle Mid</string> + <string id="43">Huk av alle originale</string> + <string id="44">Valgte objekt vil bli satt som fankunst. Alle hukede objekter vil bli lagret i \extrathumbs.</string> + <string id="45">Utfører forberedende oppgaver...</string> + <string id="46">Laster ned valgte bilde...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Liten</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Liten ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Flere</string> + <string id="56">Laster ned valgt trailer...</string> + <string id="57">Kopierer valgt fil til trailer...</string> + <string id="58">Traileren kunne ikke spilles av. Det kan være at URL ikke er gyldig, eller at du ikke har riktig avspiller for denne filtypen.</string> + <string id="59">Kan ikke spille av trailer</string> + <string id="60">Flytt</string> + <string id="61">Kopiér</string> + <string id="62">Flytter valgt fil til trailer...</string> + <string id="63">Sett i nfo</string> + <string id="64">Velg trailer</string> + <string id="65">Velg trailer til å laste ned</string> + <string id="66">Manuell trailerinnføring</string> + <string id="67">Direkte link eller YouTube URL:</string> + <string id="68">Kompilerer trailerliste...</string> + <string id="69">Sniktitt på trailer</string> + <string id="70">Lokal trailer:</string> + <string id="71">Videoformatlenkene kunne ikke hentes</string> + <string id="72">Kunne ikke hente videoformatlenker</string> + <string id="73">Velg format</string> + <string id="74">Henter tilgjengelige formater...</string> + <string id="75">Tilgjengelige formater</string> + <string id="76">En plakat i din valgte størrelse kunne ikke hentes. Vennligst velg en annen.</string> + <string id="77">Ingen foretrukket størrelse</string> + <string id="78">Fankunst i din foretrukkede størrelse kunne ikke bli funnet. Vennligst velg en annen.</string> + <string id="79">Det er ingen kjente episoder for denne serien. Detaljhent serien, sesongen eller episoden og prøv på nytt.</string> + <string id="80">Ingen kjente episoder</string> + <string id="81">Det er ingen plakater for denne episoden.</string> + <string id="82">Gjesteskuespiller</string> + <string id="83">IDen du innførte er ikke en gyldig TVDB ID.</string> + <string id="84">Laster ned serieinfo...</string> + <string id="85">TVsøk-resultater</string> + <string id="86">Se detaljer fra hvert resultat for å finne riktig serie.</string> + <string id="87">Laster ned fankunst i full størrelse...</string> + <string id="88">Laster inn nåværende bilder...</string> + <string id="89">Laster (ned) nye bilder...</string> + <string id="90">Setter standarder...</string> + <string id="91">Serieplakat</string> + <string id="92">Episode-fankunst</string> + <string id="93">Seriefankunst</string> + <string id="94">Alle sesonger-plakat</string> + <string id="95">Sesongplakat</string> + <string id="96">Sesongfankunst</string> + <string id="97">Sesong {0}-plakater</string> + <string id="98">Sesong {0}-fankunst</string> + <string id="99">TV-bilde valg</string> + <string id="100">Nåværende bilde:</string> + <string id="101">Hent plakater</string> + <string id="102">Hent fankunst</string> + <string id="103">Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg.</string> + <string id="104">EMM TMDB film-detaljhentere</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (Tysk)</string> + <string id="108">TMDB Ekstrakunst-størrelse:</string> + <string id="109">Trailere</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC-format</string> + <string id="112">Foretrukket språk</string> + <string id="113">Lagre fankunst i:</string> + <string id="114">Fall tilbake til engelsk</string> + <string id="115">Foretrukket språk:</string> + <string id="116">TIMDB-ID:</string> + <string id="117">Henter data fra IMDB.com...</string> + <string id="118">IMDB.com er ikke påslått</string> + <string id="119">TheMovieDB API mangler eller er ikke gyldig</string> + <string id="120">Henter data fra Fanart.tv...</string> + <string id="121">Fanart.tv er ikke påslått</string> + <string id="122">Hent din API-nøkkel fra www.themoviedb.org</string> + <string id="123">Hent din API-nøkkel fra fanart.tv</string> +</strings> diff --git a/Addons/scraper.MPDB.Poster/My Project/Application.Designer.vb b/Addons/scraper.MPDB.Poster/My Project/Application.Designer.vb new file mode 100644 index 0000000..66fb81a --- /dev/null +++ b/Addons/scraper.MPDB.Poster/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Addons/scraper.MPDB.Poster/My Project/Application.myapp b/Addons/scraper.MPDB.Poster/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Addons/scraper.MPDB.Poster/My Project/Application.myapp @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <MySubMain>false</MySubMain> + <SingleInstance>false</SingleInstance> + <ShutdownMode>0</ShutdownMode> + <EnableVisualStyles>true</EnableVisualStyles> + <AuthenticationMode>0</AuthenticationMode> + <ApplicationType>1</ApplicationType> + <SaveMySettingsOnExit>true</SaveMySettingsOnExit> +</MyApplicationData> diff --git a/Addons/scraper.MPDB.Poster/My Project/AssemblyInfo.vb b/Addons/scraper.MPDB.Poster/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..2ca9b2f --- /dev/null +++ b/Addons/scraper.MPDB.Poster/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.MPDB.Poster")> +<Assembly: AssemblyDescription("http://forum.xbmc.org/showthread.php?tid=116941")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.MPDB.Poster")> +<Assembly: AssemblyCopyright("Copyright © 2013")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("B7970BB3-03C7-4C37-9EF4-40231DE4D10C")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.11")> +<Assembly: AssemblyFileVersion("1.3.0.11")> diff --git a/Addons/scraper.MPDB.Poster/My Project/Resources.Designer.vb b/Addons/scraper.MPDB.Poster/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bb85827 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''<summary> + ''' A strongly-typed resource class, for looking up localized strings, etc. + '''</summary> + <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + '''<summary> + ''' Returns the cached ResourceManager instance used by this class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EmberScraperModule.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + '''<summary> + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Addons/scraper.MPDB.Poster/My Project/Resources.resx b/Addons/scraper.MPDB.Poster/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Addons/scraper.MPDB.Poster/My Project/Resources.resx @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/My Project/Settings.Designer.vb b/Addons/scraper.MPDB.Poster/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f020222 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _ + Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + <Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _ + Friend Module MySettingsProperty + + <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _ + Friend ReadOnly Property Settings() As Global.EmberScraperModule.My.MySettings + Get + Return Global.EmberScraperModule.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Addons/scraper.MPDB.Poster/My Project/Settings.settings b/Addons/scraper.MPDB.Poster/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Addons/scraper.MPDB.Poster/My Project/Settings.settings @@ -0,0 +1,7 @@ +<?xml version='1.0' encoding='utf-8'?> +<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true"> + <Profiles> + <Profile Name="(Default)" /> + </Profiles> + <Settings /> +</SettingsFile> diff --git a/Addons/scraper.MPDB.Poster/Resources/Logo.png b/Addons/scraper.MPDB.Poster/Resources/Logo.png new file mode 100644 index 0000000..a89dae1 Binary files /dev/null and b/Addons/scraper.MPDB.Poster/Resources/Logo.png differ diff --git a/Addons/scraper.MPDB.Poster/Scraper/clsScrapeFANARTTV.vb b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeFANARTTV.vb new file mode 100644 index 0000000..13c1748 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeFANARTTV.vb @@ -0,0 +1,173 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ +' # HD Movie Logos -> logo.png (choose this first) +' # ClearLOGOs -> logo.png (use this as a backup if no HD Logo in the lanaguage specified) +' # ClearART -> clearart.png (use this as a backup if no HD ClearArt, in the language specified) +' # HDClearART -> clearart.png (choose this first) +' # cdART -> disc.png +' # Movie Backgrounds -> Fanart (this is the only fanart.tv artwork that might overlap with 'typical' artwork scraping from IMDB/TMDB) +' # Movie Banner -> Banner (not poster - Frodo supports both now, <moviename>-poster.jpg/png and <moviename>-banner.jpg/png or poster.jpg/png and banner.jpg/png) +' # Movie Thumbs -> landscape.png +' # Special note - the Logos and ClearArts are language-specific and should be tagged with the appropriate language. Will want to have a setting allowing users to specify a language so as not to get a bunch of foreign-language artwork. +' # 1) Logo.png - to be added at a later stage, today is not possible to save +' # 2) Clearart.png - to be added at a later stage, today is not possible to save +' # 3) Disc.png - to be added at a later stage, today is not possible to save +' # 4) Landscape.png - to be added at a later stage, today is not possible to save +' # language is in image properties + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports FanartTVAPI + +Namespace FANARTTVs + + Public Class Scraper + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _FanartTV As FanartTV.V1.FanartTV + Friend WithEvents bwFANARTTV As New System.ComponentModel.BackgroundWorker + Private _APIInvalid As Boolean = False +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _FanartTV = New FanartTV.V1.FanartTV(_MySettings.FANARTTVApiKey) + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest("1", "JSON", "all", 1, 1)) + If IsNothing(Result) Then + If Not IsNothing(_FanartTV.Error) Then + Master.eLog.WriteToErrorLog(_FanartTV.Error, "", "Error") + _APIInvalid = True + End If + End If + End Sub + + Public Sub Cancel() + If Me.bwFANARTTV.IsBusy Then Me.bwFANARTTV.CancelAsync() + + While Me.bwFANARTTV.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwFANARTTV.IsBusy Then + bwFANARTTV.WorkerSupportsCancellation = True + bwFANARTTV.WorkerReportsProgress = True + bwFANARTTV.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetFANARTTVImages(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + If _APIInvalid Then + Return Nothing + End If + Try + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest(imdbID, "JSON", "all", 1, 2)) + If bwFANARTTV.CancellationPending Then Return Nothing + If IsNothing(Result) Then Return alPoster + If IsNothing(Result.movieinfo.moviebackground) Then Return alPoster + For Each image In Result.movieinfo.moviebackground + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = image.url}) + alPoster.Add(New MediaContainers.Image With {.Description = "thumb", .URL = image.url & "/preview"}) + Next + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwFANARTTVA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTV.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetFANARTTVImages(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwFANARTTV_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTV.ProgressChanged + If Not bwFANARTTV.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwFANARTTV_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTV.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.MPDB.Poster/Scraper/clsScrapeIMDB.vb b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeIMDB.vb new file mode 100644 index 0000000..ec6d1be --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeIMDB.vb @@ -0,0 +1,174 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Diagnostics +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMDBimg + + Public Class Scraper + +#Region "Fields" + + + + Friend WithEvents bwIMDBimg As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If Me.bwIMDBimg.IsBusy Then Me.bwIMDBimg.CancelAsync() + + While Me.bwIMDBimg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMDBimg.IsBusy Then + bwIMDBimg.WorkerSupportsCancellation = True + bwIMDBimg.WorkerReportsProgress = True + bwIMDBimg.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMDBimg.CancellationPending Then Return Nothing + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", imdbID, "")) + sHTTP = Nothing + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(1) + End If + + + ' check existence of a line like this + ' <a href="/media/rm2995297536/tt0089218?ref_=tt_ov_i" > <img height="317" + ' and then return this one + ' src = "http://ia.media-imdb.com/images/M/MV5BMTY1Mzk3MTg0M15BMl5BanBnXkFtZTcwOTQzODYyMQ@@._V1_SY317_CR3,0,214,317_.jpg" + Dim mcIMDB As MatchCollection = Regex.Matches(HTML, String.Concat("/media/[a-zA-Z0-9]{3,12}/tt", imdbID, "\?ref_=tt_ov_i"), RegexOptions.IgnoreCase) + If mcIMDB.Count > 0 Then + debug.print("GetIMDBPoster 1 - {0}", mcIMDB(0).Value) + 'Dim sUrl1 As String = sHTTP.DownloadData(mcIMDB(0).Value) + mcIMDB = Regex.Matches(HTML, "http://ia.media-imdb.com/images/.{3,80}?.jpg") + If mcIMDB.Count > 0 Then + 'just use the first one if more are found + Debug.Print("GetIMDBPoster 2 - {0}", mcIMDB(0).Value) + alPoster.Add(New MediaContainers.Image With {.Description = "cover", .URL = mcIMDB(0).Value}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(2) + End If + + Dim aSP As String() = Regex.Split(mcIMDB(0).Value, "._V\d+?_SY\d+?_CR\d+?,\d+?,\d+?,\d+?_") + Dim sUrl1 = aSP(0) + aSP(1) + Debug.Print("GetIMDBPoster 3 - {0}", sUrl1) + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = sUrl1}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMDBimg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBimg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMDBimg_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBimg.ProgressChanged + If Not bwIMDBimg.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMDBimg_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBimg.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.MPDB.Poster/Scraper/clsScrapeIMPA.vb b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeIMPA.vb new file mode 100644 index 0000000..cfe43a1 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeIMPA.vb @@ -0,0 +1,189 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMPA + + Public Class Scraper + + #Region "Fields" + + + + Friend WithEvents bwIMPA As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwIMPA.IsBusy Then Me.bwIMPA.CancelAsync() + + While Me.bwIMPA.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMPA.IsBusy Then + bwIMPA.WorkerSupportsCancellation = True + bwIMPA.WorkerReportsProgress = True + bwIMPA.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMPAPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMPA.CancellationPending Then Return Nothing + Dim sURL As String = GetLink(imdbID) + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(1) + End If + + If Not String.IsNullOrEmpty(sURL) Then + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If bwIMPA.CancellationPending Then Return Nothing + + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(2) + End If + + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + + Dim PosterURL As String + + For Each mPoster As Match In mcPoster + If bwIMPA.CancellationPending Then Return Nothing + PosterURL = Strings.Replace(String.Format("{0}/{1}", sURL.Substring(0, sURL.LastIndexOf("/")), mPoster.Value.ToString()).Replace("thumbs", "posters"), "imp_", String.Empty) + + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + + PosterURL = PosterURL.Insert(PosterURL.LastIndexOf("."), "_xlg") + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = PosterURL}) + Next + End If + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMPA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPA.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMPAPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMPA_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPA.ProgressChanged + If Not bwIMPA.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMPA_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPA.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + Private Function GetLink(ByVal IMDBID As String) As String + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) + sHTTP = Nothing + + Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") + If mcIMPA.Count > 0 Then + 'just use the first one if more are found + Return mcIMPA(0).Value.ToString + Else + Return String.Empty + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return String.Empty + End Try + End Function + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + Dim sType As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.MPDB.Poster/Scraper/clsScrapeImages.vb b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeImages.vb new file mode 100644 index 0000000..d335b62 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeImages.vb @@ -0,0 +1,1209 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Public Class ScrapeImages + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private TMDB As TMDB.Scraper + Private IMPA As New IMPA.Scraper + Private MPDB As New MPDB.Scraper + Private IMDB As New IMDBimg.Scraper + Private FANARTTVs As FANARTTVs.Scraper + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Function GetPreferredImage(ByRef Image As Images, ByVal IMDBID As String, ByVal TMDBID As String, ByVal iType As Enums.ImageType, ByRef imgResult As Containers.ImgResult, ByVal sPath As String, ByVal doETs As Boolean, Optional ByVal doAsk As Boolean = False) As Boolean + '// + ' Try to get the best match between what the user selected in settings and the actual posters downloaded + '\\ + + Dim hasImages As Boolean = False + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim tmpListIMPA As New List(Of MediaContainers.Image) + Dim tmpListIMDB As New List(Of MediaContainers.Image) + Dim tmpListMPDB As New List(Of MediaContainers.Image) + Dim tmpIMDBX As Images = Nothing + Dim tmpIMDBL As Images = Nothing + Dim tmpIMDBM As Images = Nothing + Dim tmpIMDBS As Images = Nothing + Dim tmpIMDBW As Images = Nothing + Dim tmpTMDBX As Images = Nothing + Dim tmpTMDBL As Images = Nothing + Dim tmpTMDBM As Images = Nothing + Dim tmpTMDBS As Images = Nothing + Dim tmpTMDBW As Images = Nothing + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) + + Try + + If iType = Enums.ImageType.Posters Then 'posters + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tImage.URL) + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + tmpListTMDB.AddRange(TMDB.GetTMDBImages(TMDBID, "poster")) + + If _MySettings.UseIMPA Then + tmpListTMDB.AddRange(IMPA.GetIMPAPosters(IMDBID)) + End If + + If _MySettings.UseMPDB Then + tmpListMPDB.AddRange(MPDB.GetMPDBPosters(IMDBID)) + End If + + If _MySettings.UseIMDB Then + tmpListTMDB.AddRange(IMDB.GetIMDBPosters(IMDBID)) + End If + + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) + If Not IsNothing(tmdbThumb.WebImage.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) + End If + Image.Clear() + Next + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + End If + Else + 'download all TMBD images + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "poster") + + 'check each one for it's size to see if it matched the preferred size + If tmpListTMDB.Count > 0 Then + hasImages = True + + If Not Master.eSettings.NoSaveImagesToNfo Then + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + imgResult.Posters.Add(tmdbThumb.URL) + Next + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Xlrg + If iMovie.Description.ToLower = "original" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Lrg + If iMovie.Description.ToLower = "mid" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Mid + If iMovie.Description.ToLower = "cover" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Small + If iMovie.Description.ToLower = "thumb" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + 'no "wide" for TMDB + End Select + Image.Clear() + Next + End If + + If _MySettings.UseIMDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB found... try IMPA + + tmpListIMDB = IMDB.GetIMDBPosters(IMDBID) + + If tmpListIMDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMDBX) Then + tmpIMDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMDBL) Then + tmpIMDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMDBM) Then + tmpIMDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMDBS) Then + tmpIMDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMDBW) Then + tmpIMDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseIMPA Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from IMDB found... try IMPA + + tmpListIMPA = IMPA.GetIMPAPosters(IMDBID) + + If tmpListIMPA.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMPA + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMPAX) Then + tmpIMPAX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMPAL) Then + tmpIMPAL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMPAM) Then + tmpIMPAM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMPAS) Then + tmpIMPAS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMPAW) Then + tmpIMPAW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseMPDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB or IMPA found... try MPDB + + tmpListMPDB = MPDB.GetMPDBPosters(IMDBID) + + If tmpListMPDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListMPDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpMPDBX) Then + tmpMPDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpMPDBL) Then + tmpMPDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpMPDBM) Then + tmpMPDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpMPDBS) Then + tmpMPDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpMPDBW) Then + tmpMPDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If IsNothing(Image.Image) AndAlso Not doAsk Then + 'STILL no image found, just get the first available image, starting with the largest + 'check TMDB first + If tmpListTMDB.Count > 0 Then + Dim x = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If x.Count > 0 Then + Image.FromWeb(x(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "cover" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + End If + + Image.Clear() + + If _MySettings.UseIMDB Then + If tmpListIMDB.Count > 0 Then + If Not IsNothing(tmpIMDBX) Then + Image = tmpIMDBX + GoTo foundIT + End If + If Not IsNothing(tmpIMDBL) Then + Image = tmpIMDBL + GoTo foundIT + End If + If Not IsNothing(tmpIMDBM) Then + Image = tmpIMDBM + GoTo foundIT + End If + If Not IsNothing(tmpIMDBS) Then + Image = tmpIMDBS + GoTo foundIT + End If + If Not IsNothing(tmpIMDBW) Then + Image = tmpIMDBW + GoTo foundIT + End If + End If + End If + + If _MySettings.UseIMPA Then + If tmpListIMPA.Count > 0 Then + If Not IsNothing(tmpIMPAX) Then + Image = tmpIMPAX + GoTo foundIT + End If + If Not IsNothing(tmpIMPAL) Then + Image = tmpIMPAL + GoTo foundIT + End If + If Not IsNothing(tmpIMPAM) Then + Image = tmpIMPAM + GoTo foundIT + End If + If Not IsNothing(tmpIMPAS) Then + Image = tmpIMPAS + GoTo foundIT + End If + If Not IsNothing(tmpIMPAW) Then + Image = tmpIMPAW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + If _MySettings.UseMPDB Then + If tmpListMPDB.Count > 0 Then + If Not IsNothing(tmpMPDBX) Then + Image = tmpMPDBX + GoTo foundIT + End If + If Not IsNothing(tmpMPDBL) Then + Image = tmpMPDBL + GoTo foundIT + End If + If Not IsNothing(tmpMPDBM) Then + Image = tmpMPDBM + GoTo foundIT + End If + If Not IsNothing(tmpMPDBS) Then + Image = tmpMPDBS + GoTo foundIT + End If + If Not IsNothing(tmpMPDBW) Then + Image = tmpMPDBW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + End If + + End If + + Else 'fanart + + Dim ETHashes As New List(Of String) + If Master.eSettings.AutoET AndAlso doETs Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + End If + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + Image.Clear() + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + + End If + End If + End If + + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + End If + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + +foundIT: + tmpListTMDB = Nothing + tmpListIMPA = Nothing + tmpListMPDB = Nothing + Return hasImages + End Function + + Public Sub GetPreferredFAasET(ByVal IMDBID As String, ByVal sPath As String) + Dim _Image As Image + + If AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim ETHashes As New List(Of String) + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, "fanart") + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + For Each sFile As FileInfo In lFi + Select Case True + Case sFile.Name.Contains("(original)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Master.eSettings.AutoET Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + End If + Next + End If + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + 'Me.Clear() + Next + + _Image = Nothing + FileUtils.Delete.DeleteDirectory(CachePath) + + End If + End If + End If + End Sub + + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ + AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ + (AdvancedSettings.GetBooleanSetting("tUseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + Public Shared Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + End If + + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) + End Sub + + + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0) + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub + Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo + Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() + + For i As Integer = 0 To UBound(Encoders) + If Encoders(i).FormatID = Format.Guid Then + Return Encoders(i) + End If + Next + + Return Nothing + End Function +#End Region 'Methods + + + +End Class \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Scraper/clsScrapeMPDB.vb b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeMPDB.vb new file mode 100644 index 0000000..cd949ec --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeMPDB.vb @@ -0,0 +1,167 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Namespace MPDB + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwMPDB As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwMPDB.IsBusy Then Me.bwMPDB.CancelAsync() + + While Me.bwMPDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String) + Try + If Not Me.bwMPDB.IsBusy Then + Me.bwMPDB.WorkerSupportsCancellation = True + Me.bwMPDB.WorkerReportsProgress = True + Me.bwMPDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetMPDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + + If Me.bwMPDB.CancellationPending Then Return Nothing + + Try + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.movieposterdb.com/movie/", imdbID)) + sHTTP = Nothing + + If Me.bwMPDB.CancellationPending Then Return Nothing + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(1) + End If + + If Regex.IsMatch(HTML, String.Concat("http://www.imdb.com/title/tt", imdbID), RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline) Then + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "http://www.movieposterdb.com/posters/[0-9_](.*?)/[0-9](.*?)/[0-9](.*?)/[a-z0-9_](.*?).jpg") + + Dim PosterURL As String = String.Empty + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(2) + End If + + For Each mPoster As Match In mcPoster + If Me.bwMPDB.CancellationPending Then Return Nothing + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "l") + alPosters.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "t") + alPosters.Add(New MediaContainers.Image With {.Description = "thumb", .URL = PosterURL}) + Next + End If + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Private Sub bwMPDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetMPDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwMPDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDB.ProgressChanged + If Not bwMPDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwMPDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.MPDB.Poster/Scraper/clsScrapeOFDB.vb b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeOFDB.vb new file mode 100644 index 0000000..2e94cca --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeOFDB.vb @@ -0,0 +1,242 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class OFDB + + #Region "Fields" + + Private imdbID As String + Private OFDBMovie As MediaContainers.Movie + Private _genre As String + Private _outline As String + Private _plot As String + Private _title As String + + #End Region 'Fields + + #Region "Constructors" + + Public Sub New(ByVal sID As String, ByRef mMovie As MediaContainers.Movie) + Clear() + imdbID = sID + OFDBMovie = mMovie + + GetOFDBDetails() + End Sub + + #End Region 'Constructors + + #Region "Properties" + + Public Property Genre() As String + Get + Return _genre + End Get + Set(ByVal value As String) + _genre = value + End Set + End Property + + Public Property Outline() As String + Get + Return _outline + End Get + Set(ByVal value As String) + _outline = value + End Set + End Property + + Public Property Plot() As String + Get + Return _plot + End Get + Set(ByVal value As String) + _plot = value + End Set + End Property + + Public Property Title() As String + Get + Return _title + End Get + Set(ByVal value As String) + _title = value + End Set + End Property + + #End Region 'Properties + + #Region "Methods" + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Sub Clear() + _title = String.Empty + _outline = String.Empty + _plot = String.Empty + _genre = String.Empty + End Sub + + Private Function GetFullPlot(ByVal sURL As String) As String + Dim FullPlot As String = String.Empty + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + Dim D, W, B As Integer + Dim tmpHTML As String + + D = Html.IndexOf("Eine Inhaltsangabe von") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim + W = tmpHTML.IndexOf("</b></b><br><br>") + If W > 0 Then + B = tmpHTML.IndexOf("</font></p>", W + 16) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return FullPlot + End Function + + Private Sub GetOFDBDetails() + Dim sURL As String = GetOFDBUrlFromIMDBID() + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(Html) Then + 'title + If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(Html, "<td width=""99\%""><h2><font face=""Arial,Helvetica,sans-serif"" size=""3""><b>([^<]+)</b></font></h2></td>").Groups(1).Value.ToString)) + _title = OFDBTitle + End If + + Dim D, W, B As Integer + Dim tmpHTML As String + + 'outline + If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then + D = Html.IndexOf("<b>Inhalt:</b>") + + If D > 0 Then + W = Html.IndexOf("<a href=""", D + 14) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(D + 14, W - (D + 14)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + + 'full plot + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then + D = Html.IndexOf("<b>Inhalt:</b>") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 14, L - (D + 14)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + End If + End If + + 'genre + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Genre) OrElse Not Master.eSettings.LockGenre Then + D = HTML.IndexOf("class=""Normal"">Genre(s):</font></td>") + If D > 0 Then + W = HTML.IndexOf("</table>", D) + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), "<a.*?href=[""'](?<url>.*?)[""'].*?>(?<name>.*?)</a>") + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetOFDBUrlFromIMDBID() As String + Dim ofdbURL As String = String.Empty + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.ofdb.de/view.php?SText=", imdbID, "&Kat=IMDb&page=suchergebnis&sourceid=mozilla-search")) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(HTML) Then + Dim mcOFDBURL As MatchCollection = Regex.Matches(HTML, "<a href=""film/([^<]+)"" onmouseover") + If mcOFDBURL.Count > 0 Then + 'just use the first one if more are found + ofdbURL = String.Concat("http://www.ofdb.de/", Regex.Match(mcOFDBURL(0).Value.ToString, """(film/([^<]+))""").Groups(1).Value.ToString) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return ofdbURL + End Function + + #End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Scraper/clsScrapeTMDB.vb b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeTMDB.vb new file mode 100644 index 0000000..9db6818 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeTMDB.vb @@ -0,0 +1,282 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDB + + Public Class Scraper + +#Region "Fields" + + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Private backdrop_names(3) As v3Size + Private poster_names(5) As v3Size + + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + ' v3 does not have description anymore + poster_names(0).description = "thumb" + poster_names(0).size = "w92" + poster_names(0).width = 92 + poster_names(1).description = "w154" + poster_names(1).size = "w154" + poster_names(1).width = 154 + poster_names(2).description = "cover" + poster_names(2).size = "w185" + poster_names(2).width = 185 + poster_names(3).description = "w342" + poster_names(3).size = "w342" + poster_names(3).width = 342 + poster_names(4).description = "mid" + poster_names(4).size = "w500" + poster_names(4).width = 500 + poster_names(5).description = "original" + poster_names(5).size = "original" + poster_names(5).width = 0 + backdrop_names(0).description = "thumb" + backdrop_names(0).size = "w300" + backdrop_names(0).width = 300 + backdrop_names(1).description = "poster" + backdrop_names(1).size = "w780" + backdrop_names(1).width = 780 + backdrop_names(2).description = "w1280" + backdrop_names(2).size = "w1280" + backdrop_names(2).width = 1280 + backdrop_names(3).description = "original" + backdrop_names(3).size = "original" + backdrop_names(3).width = 0 + End Sub + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim images As V3.TmdbMovieImages + Dim aW, aH As Integer + + If bwTMDB.CancellationPending Then Return Nothing + Try + images = _TMDBApi.GetMovieImages(CInt(imdbID), _MySettings.TMDBLanguage) + If sType = "poster" Then + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + Return alPosters + End If + End If + Else + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + Return alPosters + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If sType = "poster" Then + For Each tmdbI As V3.Poster In images.posters + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In poster_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + ElseIf sType = "backdrop" Then + For Each tmdbI As V3.Backdrop In images.backdrops + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In backdrop_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As List(Of String) + Dim trailers As V3.TmdbMovieTrailers + Dim YT As New List(Of String) + + Try + If bwTMDB.CancellationPending Then Return Nothing + trailers = _TMDBApi.GetMovieTrailers(CInt(imdbID), _MySettings.TMDBLanguage) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + trailers = _TMDBApiE.GetMovieTrailers(CInt(imdbID)) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + Return Nothing + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + 'If bwTMDB.WorkerReportsProgress Then + ' bwTMDB.ReportProgress(2) + 'End If + + If trailers.youtube.Count > 0 Then + For Each trailer In trailers.youtube + YT.Add(String.Format("http://www.youtube.com/watch?v={0}{1})", trailer.source, CStr(IIf(trailer.size = "HD", "&hd=1", "")))) + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return YT + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure v3Size + +#Region "Fields" + + Dim size As String + Dim description As String + Dim width As Integer + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Scraper/clsScrapeTMDB_old.vb b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeTMDB_old.vb new file mode 100644 index 0000000..c5bca0a --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeTMDB_old.vb @@ -0,0 +1,244 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI + +Namespace TMDB_old + + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + + Private Const APIKey As String = "b1ecff8c76278262b27de1569f57f6bd" + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB...<OpenSearchDescription>...<movies>.Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<poster>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<backdrop>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + sHTTP = Nothing + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As String + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + Dim tLang As String + + tLang = AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en") + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/{0}/tt{1}", APIKey, imdbID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + Dim tmdbNode = From xNode In xmlTMDB.Elements + + If tmdbNode.Count > 0 Then + If Not tmdbNode(0).Value = "Your query didn't return any results." Then + Dim movieID As String = xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<id>.Value + Dim i As Integer + + + For i = 0 To 1 Step 1 + sHTTP = New HTTP + ApiXML = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/{0}/xml/{1}/{2}", tLang, APIKey, movieID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + Dim Trailers = From tNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie> Select tNode.<trailer> + If Trailers.Count > 0 AndAlso Not String.IsNullOrEmpty(Trailers(0).Value) Then + If Trailers(0).Value.ToLower.IndexOf("youtube.com") > 0 Then + Return Trailers(0).Value + i += 1 + End If + Else + tLang = "en" + End If + End If + Next + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return String.Empty + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Scraper/clsScrapeTMDBg.vb b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeTMDBg.vb new file mode 100644 index 0000000..86f6083 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeTMDBg.vb @@ -0,0 +1,723 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Globalization +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDBg + + Public Class MovieSearchResults + +#Region "Fields" + + Private _Matches As New List(Of MediaContainers.Movie) + +#End Region 'Fields + +#Region "Properties" + + Public Property Matches() As List(Of MediaContainers.Movie) + Get + Return _Matches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _Matches = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class Scraper + +#Region "Fields" + + 'Public IMDBURL As String + 'Private _TMDBId As String + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Friend WithEvents bwTMDBg As New System.ComponentModel.BackgroundWorker + + Private _sPoster As String + +#End Region 'Fields + +#Region "Properties" + Public ReadOnly Property TMDBConf() As V3.TmdbConfiguration + Get + Return _TMDBConf + End Get + End Property +#End Region + +#Region "Enumerations" + + Private Enum SearchType + Movies = 0 + Details = 1 + SearchDetails = 2 + End Enum + +#End Region 'Enumerations + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + + Public Event SearchResultsDownloaded(ByVal mResults As TMDBg.MovieSearchResults) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + End Sub + + Public Sub CancelAsync() + If bwTMDBg.IsBusy Then bwTMDBg.CancelAsync() + + While bwTMDBg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetMovieID(ByRef DBMovie As Structures.DBMovie) + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + + If bwTMDBg.CancellationPending Then Return + + Movie = _TMDBApi.GetMovieByIMDB(DBMovie.Movie.ID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(DBMovie.Movie.ID) + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return + End If + + DBMovie.Movie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End Sub + + Public Function GetMovieInfo(ByVal strID As String, ByRef IMDBMovie As MediaContainers.Movie, ByVal FullCrew As Boolean, ByVal FullCast As Boolean, ByVal GetPoster As Boolean, ByVal Options As Structures.ScrapeOptions, ByVal IsSearch As Boolean) As Boolean + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + Dim tStr As String + + If bwTMDBg.CancellationPending Then Return Nothing + + If Strings.Left(strID.ToLower(), 2) = "tt" Then + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(strID) + Else + Movie = _TMDBApi.GetMovieInfo(CInt(strID), _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieInfo(CInt(strID)) + End If + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return False + End If + + IMDBMovie.ID = CStr(IIf(String.IsNullOrEmpty(Movie.imdb_id) AndAlso _MySettings.FallBackEng, MovieE.imdb_id, Movie.imdb_id)) + IMDBMovie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + If bwTMDBg.CancellationPending Or IsNothing(Movie) Then Return Nothing + + Dim Keywords As WatTmdb.V3.TmdbMovieKeywords + Keywords = _TMDBApi.GetMovieKeywords(Movie.id) + If Not IsNothing(Keywords) AndAlso Not IsNothing(Keywords.keywords) Then + If Keywords.keywords.Count <> 0 AndAlso _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + End If + + ' to be added the tags structure + '' <movie> + '' ... + '' <tag>Name of the tag</tag> + '' ... + '' </movie> + If Options.bTitle Then + IMDBMovie.OriginalTitle = CStr(IIf(String.IsNullOrEmpty(Movie.original_title) AndAlso _MySettings.FallBackEng, MovieE.original_title, Movie.original_title)) + If String.IsNullOrEmpty(IMDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + IMDBMovie.Title = CStr(IIf(String.IsNullOrEmpty(Movie.title) AndAlso _MySettings.FallBackEng, MovieE.title, Movie.title)) + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If GetPoster Then + ' I will add original always. to be updated if size, TMDBConf.images.poster_sizes(0) & + Dim Images As WatTmdb.V3.TmdbMovieImages + Images = _TMDBApi.GetMovieImages(Movie.id, _MySettings.TMDBLanguage) + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If (Images.posters.Count = 0) AndAlso _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + End If + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If Images.posters.Count > 0 Then + _sPoster = _TMDBConf.images.base_url & "w92" & Images.posters(0).file_path + Else + _sPoster = "" + End If + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bYear Then IMDBMovie.Year = Left(CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)), 4) + + Dim Releases As WatTmdb.V3.TmdbMovieReleases = Nothing + If Options.bMPAA Then + IMDBMovie.MPAA = "" + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each Country In Releases.countries + If Country.iso_3166_1.ToUpper = CStr(IIf(Master.eSettings.CertificationLang = "", "US", Master.eSettings.CertificationLang)) Then + IMDBMovie.MPAA = Country.certification + Exit For + End If + Next + End If + IMDBMovie.Certification = IMDBMovie.MPAA + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bRelease Then + IMDBMovie.ReleaseDate = CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)) + End If + + If Options.bRating AndAlso (String.IsNullOrEmpty(IMDBMovie.Rating) OrElse Not Master.eSettings.LockRating) Then + IMDBMovie.Rating = CStr(IIf(IsNothing(Movie.vote_average) AndAlso Movie.vote_average = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_average, Movie.vote_average)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'trailer + If Options.bTrailer AndAlso (String.IsNullOrEmpty(IMDBMovie.Trailer) OrElse Not Master.eSettings.LockTrailer) Then + Dim Trailers As WatTmdb.V3.TmdbMovieTrailers + Trailers = _TMDBApi.GetMovieTrailers(Movie.id) + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If (Trailers.youtube.Count = 0) AndAlso _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + End If + + IMDBMovie.Trailer = "" + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If Trailers.youtube.Count > 0 Then + IMDBMovie.Trailer = "http://www.youtube.com/watch?hd=1&v=" & Trailers.youtube(0).source + End If + End If + + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bVotes Then + IMDBMovie.Votes = CStr(IIf(IsNothing(Movie.vote_count) AndAlso Movie.vote_count = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_count.ToString(), Movie.vote_count.ToString())) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Dim aCast As WatTmdb.V3.TmdbMovieCast = Nothing + If Options.bCast Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.cast.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + + Dim Cast As New List(Of MediaContainers.Person) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + For Each aAc As WatTmdb.V3.Cast In aCast.cast + Dim aPer As New MediaContainers.Person + aPer.Name = aAc.name + aPer.Role = aAc.character + ' to be added / dialog to choose the size of the images + aPer.Thumb = _TMDBConf.images.base_url & "original" & aAc.profile_path + Cast.Add(aPer) + Next + End If + IMDBMovie.Actors = Cast + End If + + If Options.bTagline AndAlso (String.IsNullOrEmpty(IMDBMovie.Tagline) OrElse Not Master.eSettings.LockTagline) Then + IMDBMovie.Tagline = CStr(IIf(String.IsNullOrEmpty(IMDBMovie.Tagline) AndAlso _MySettings.FallBackEng, MovieE.tagline, Movie.tagline)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get countries of the movie + If Options.bCountry Then + If IsNothing(Releases) Then + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + End If + IMDBMovie.Countries.Clear() + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each aCo As WatTmdb.V3.ReleaseCountry In Releases.countries + IMDBMovie.Countries.Add(aCo.iso_3166_1) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get genres of the movie + If Options.bGenre AndAlso (String.IsNullOrEmpty(IMDBMovie.Genre) OrElse Not Master.eSettings.LockGenre) Then + IMDBMovie.Genres.Clear() + Dim tGen As System.Collections.Generic.List(Of WatTmdb.V3.MovieGenre) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tGen = CType(IIf(Movie.genres.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.genres, Movie.genres), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + Else + tGen = CType(IIf(_MySettings.FallBackEng, MovieE.genres, Nothing), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + End If + + + If Not IsNothing(tGen) Then + For Each aGen As WatTmdb.V3.MovieGenre In tGen + IMDBMovie.Genres.Add(aGen.name) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bOutline AndAlso (String.IsNullOrEmpty(IMDBMovie.Outline) OrElse Not Master.eSettings.LockOutline) Then + IMDBMovie.Outline = CStr(IIf(String.IsNullOrEmpty(Movie.overview) AndAlso _MySettings.FallBackEng, MovieE.overview, Movie.overview)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bPlot AndAlso (String.IsNullOrEmpty(IMDBMovie.Plot) OrElse Not Master.eSettings.LockPlot) Then + If Master.eSettings.OutlineForPlot AndAlso String.IsNullOrEmpty(IMDBMovie.Plot) AndAlso Not String.IsNullOrEmpty(IMDBMovie.Outline) Then + IMDBMovie.Plot = IMDBMovie.Outline + Else + IMDBMovie.Plot = "" + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get the movie duration + If Options.bRuntime Then + IMDBMovie.Runtime = CStr(IIf(IsNothing(Movie.runtime) AndAlso Movie.runtime = 0 AndAlso _MySettings.FallBackEng, MovieE.runtime.ToString(), Movie.runtime.ToString())) + End If + + 'Get Production Studio + If Options.bStudio AndAlso (String.IsNullOrEmpty(IMDBMovie.Studio) OrElse Not Master.eSettings.LockStudio) Then + tStr = "" + Dim tPC As System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tPC = CType(IIf(Movie.production_companies.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.production_companies, Movie.production_companies), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + Else + tPC = CType(IIf(_MySettings.FallBackEng, MovieE.production_companies, Nothing), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + End If + + If Not IsNothing(tPC) Then + For Each aPro As WatTmdb.V3.ProductionCompany In tPC + tStr = tStr & " / " & aPro.name + Next + End If + If Len(tStr) > 3 Then + tStr = Trim(Right(tStr, Len(tStr) - 3)) + End If + IMDBMovie.Studio = tStr + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get All Other Info + If FullCrew Or Options.bWriters Or Options.bDirector Then + If IsNothing(aCast) Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.crew.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + End If + IMDBMovie.Credits.Clear() + IMDBMovie.Directors.Clear() + If Not IsNothing(aCast.crew) Then + For Each aAc As WatTmdb.V3.Crew In aCast.crew + If FullCrew Then + IMDBMovie.Credits.Add(aAc.name) + ElseIf Options.bWriters Then + If aAc.department = "Writing" AndAlso aAc.job = "Writer" Then + IMDBMovie.Credits.Add(aAc.name) + End If + End If + If Options.bDirector Then + If aAc.job = "Director" Then + IMDBMovie.Directors.Add(aAc.name) + End If + End If + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Return True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Function GetMovieStudios(ByVal strID As String) As List(Of String) + Dim alStudio As New List(Of String) + Dim Movie As WatTmdb.V3.TmdbMovie + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + If Movie.production_companies.Count = 0 And _MySettings.FallBackEng Then + Movie = _TMDBApi.GetMovieByIMDB(strID, "en") + End If + For Each aComp In Movie.production_companies + alStudio.Add(aComp.name) + Next + + Return alStudio + + End Function + + Public Function GetSearchMovieInfo(ByVal sMovieName As String, ByRef dbMovie As Structures.DBMovie, ByVal iType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As MediaContainers.Movie + Dim r As MovieSearchResults = SearchMovie(sMovieName) + Dim b As Boolean = False + Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie + + Try + Select Case iType + Case Enums.ScrapeType.FullAsk, Enums.ScrapeType.UpdateAsk, Enums.ScrapeType.NewAsk, Enums.ScrapeType.MarkAsk, Enums.ScrapeType.FilterAsk + + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + Master.tmpMovie.Clear() + Using dIMDB As New dlgTMDBSearchResults(_MySettings, Me) + + If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + b = False + Else + b = GetMovieInfo(Master.tmpMovie.ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + Else + b = False + End If + End Using + End If + Case Enums.ScrapeType.FullAuto, Enums.ScrapeType.UpdateAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.SingleScrape, Enums.ScrapeType.FilterAuto + Dim exactHaveYear As Integer = FindYear(dbMovie.Filename, r.Matches) + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + b = GetMovieInfo(r.Matches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + End Select + + If b Then + Return imdbMovie + Else + Return New MediaContainers.Movie + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New MediaContainers.Movie + End Try + End Function + + Private Function FindYear(ByVal tmpname As String, ByVal lst As List(Of MediaContainers.Movie)) As Integer + Dim tmpyear As String = "" + Dim i As Integer + Dim ret As Integer = -1 + tmpname = Path.GetFileNameWithoutExtension(tmpname) + tmpname = tmpname.Replace(".", " ").Trim.Replace("(", " ").Replace(")", "").Trim + i = tmpname.LastIndexOf(" ") + If i >= 0 Then + tmpyear = tmpname.Substring(i + 1, tmpname.Length - i - 1) + If IsNumeric(tmpyear) AndAlso Convert.ToInt32(tmpyear) > 1950 Then 'let's assume there are no movies older then 1950 + For c = 0 To lst.Count - 1 + If lst(c).Year = tmpyear Then + ret = c + Exit For + End If + Next + End If + End If + Return ret + End Function + + Public Sub GetSearchMovieInfoAsync(ByVal imdbID As String, ByVal IMDBMovie As MediaContainers.Movie, ByVal Options As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.SearchDetails, _ + .Parameter = imdbID, .IMDBMovie = IMDBMovie, .Options = Options}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + + Public Sub SearchMovieAsync(ByVal sMovie As String, ByVal filterOptions As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.Movies, _ + .Parameter = sMovie, .Options = filterOptions}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + Select Case Args.Search + Case SearchType.Movies + Dim r As MovieSearchResults = SearchMovie(Args.Parameter) + e.Result = New Results With {.ResultType = SearchType.Movies, .Result = r} + Case SearchType.SearchDetails + Dim s As Boolean = GetMovieInfo(Args.Parameter, Args.IMDBMovie, False, False, True, Args.Options, True) + e.Result = New Results With {.ResultType = SearchType.SearchDetails, .Success = s} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub BW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBg.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.ResultType + Case SearchType.Movies + RaiseEvent SearchResultsDownloaded(DirectCast(Res.Result, MovieSearchResults)) + Case SearchType.SearchDetails + Dim movieInfo As MovieSearchResults = DirectCast(Res.Result, MovieSearchResults) + RaiseEvent SearchMovieInfoDownloaded(_sPoster, Res.Success) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + 'Private Function GetForcedTitle(ByVal strID As String, ByVal oTitle As String) As String + ' Dim fTitle As String = oTitle + ' Dim Movie As WatTmdb.V3.TmdbMovie + + ' Try + ' '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + ' If Left(strID.ToLower(), 4) = "tt" Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), _MySettings.TMDBLanguage) + ' If IsNothing(Movie) And _MySettings.FallBackEng Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), "en") + ' End If + ' Else + ' Movie = _TMDBApi.GetMovieByIMDB(strID) + ' End If + + ' fTitle = Movie.title + + ' Return fTitle + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' Return fTitle + ' End Try + 'End Function + + Private Function SearchMovie(ByVal sMovie As String) As MovieSearchResults + Try + Dim R As New MovieSearchResults + Dim Page As Integer = 1 + Dim Movies As WatTmdb.V3.TmdbMovieSearch + Dim TotP As Integer + Dim aE As Boolean + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + If Movies.total_results = 0 And _MySettings.FallBackEng Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + aE = True + End If + If Movies.total_results > 0 Then + Dim t1 As String + Dim t2 As String + Dim t3 As String + TotP = Movies.total_pages + While Page <= TotP And Page <= 3 + For Each aMovie In Movies.results + Dim aMI As WatTmdb.V3.TmdbMovie + aMI = _TMDBApi.GetMovieInfo(aMovie.id) + If IsNothing(aMI) Then + aMI = _TMDBApiE.GetMovieInfo(aMovie.id) + End If + If IsNothing(aMI.imdb_id) Then + t1 = "" + Else + t1 = aMI.imdb_id.ToString + End If + t2 = CStr(IIf(String.IsNullOrEmpty(aMovie.title), "", aMovie.title)) + t3 = Left(CStr(IIf(String.IsNullOrEmpty(aMovie.release_date), "", aMovie.release_date)), 4) + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(t1, t2, t3, 0) + lNewMovie.TMDBID = aMI.id.ToString + R.Matches.Add(lNewMovie) + Next + Page = Page + 1 + If aE Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + Else + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + End If + + End While + End If + + Return R + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Nothing + End Try + End Function + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim FullCast As Boolean + Dim FullCrew As Boolean + Dim IMDBMovie As MediaContainers.Movie + Dim Options As Structures.ScrapeOptions + Dim Parameter As String + Dim Search As SearchType + 'Dim TMDBConf As V3.TmdbConfiguration + 'Dim TMDBApi As V3.Tmdb + 'Dim FallBackEng As Boolean + 'Dim TMDBLang As String +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultType As SearchType + Dim Success As Boolean + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.MPDB.Poster/Scraper/clsScrapeTrailers.vb b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeTrailers.vb new file mode 100644 index 0000000..72ce5f8 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeTrailers.vb @@ -0,0 +1,265 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System +Imports System.IO +Imports System.Net +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI +Imports WatTmdb + +Public Class Trailers + +#Region "Fields" + + Private WebPage As New HTTP + Private _ImdbID As String = String.Empty + Private _ImdbTrailerPage As String = String.Empty + Private _TrailerList As New List(Of String) + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + Me.Clear() + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + AddHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + Me.WebPage.Cancel() + End Sub + + Public Sub Clear() + Me._TrailerList.Clear() + Me._ImdbID = String.Empty + Me._ImdbTrailerPage = String.Empty + End Sub + + Public Sub DeleteTrailers(ByVal sPath As String, ByVal NewTrailer As String) + Dim parPath As String = Directory.GetParent(sPath).FullName + Dim tmpName As String = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(sPath))) + Dim tmpNameNoStack As String = Path.Combine(parPath, Path.GetFileNameWithoutExtension(sPath)) + For Each t As String In Master.eSettings.ValidExts + If File.Exists(String.Concat(tmpName, "-trailer", t)) AndAlso Not String.Concat(tmpName, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpName, "[trailer]", t)) AndAlso Not String.Concat(tmpName, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "[trailer]", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "-trailer", t)) AndAlso Not String.Concat(tmpNameNoStack, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) + End If + Next + End Sub + + Public Sub DownloadProgressUpdated(ByVal iPercent As Integer) + RaiseEvent ProgressUpdated(iPercent) + End Sub + + Public Function DownloadSingleTrailer(ByVal sPath As String, ByVal ImdbID As String, ByVal isSingle As Boolean, ByVal currNfoTrailer As String) As String + Dim tURL As String = String.Empty + Try + Me._TrailerList.Clear() + + If Not Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, True) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + + Dim tLink As String = String.Empty + If Regex.IsMatch(Me._TrailerList.Item(0).ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Dim YT As New YouTube.Scraper + YT.GetVideoLinks(Me._TrailerList.Item(0).ToString) + If YT.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + tLink = YT.VideoLinks(Master.eSettings.PreferredTrailerQuality).URL + Else + Select Case Master.eSettings.PreferredTrailerQuality + Case Enums.TrailerQuality.HD1080p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720p) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720p).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD1080pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720pVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720pVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HD720p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD720pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HQFLV + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HQVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.SQMP4 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.SQFLV + tLink = String.Empty + Case Enums.TrailerQuality.SQVP8 + tLink = String.Empty + End Select + End If + Else + tLink = Me._TrailerList.Item(0).ToString + End If + + If Not String.IsNullOrEmpty(tLink) Then + tURL = WebPage.DownloadFile(tLink, sPath, False, "trailer") + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + End If + ElseIf Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, False) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + tURL = Me._TrailerList.Item(0).ToString + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return tURL + End Function + + Public Function DownloadTrailer(ByVal sPath As String, ByVal sURL As String) As String + Dim tURL As String = String.Empty + If Not String.IsNullOrEmpty(sURL) Then + tURL = WebPage.DownloadFile(sURL, sPath, True, "trailer") + + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + Return tURL + End Function + + Public Function GetTrailers(ByVal ImdbID As String, Optional ByVal BreakAfterFound As Boolean = True) As List(Of String) + Me._ImdbID = ImdbID + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", False) Then + Me.GetTMDBTrailer() + End If + + Return Me._TrailerList + End Function + + Public Function IsAllowedToDownload(ByVal sPath As String, ByVal isDL As Boolean, ByVal currNfoTrailer As String, Optional ByVal isSS As Boolean = False) As Boolean + Dim fScanner As New Scanner + + If isDL Then + If String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) OrElse Master.eSettings.OverwriteTrailer Then + Return True + Else + If isSS AndAlso String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) Then + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + Else + Return False + End If + End If + Else + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + End If + End Function + + Private Sub GetTMDBTrailer() + Dim TMDB As New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim YT As List(Of String) + + YT = TMDB.GetTrailers(_ImdbID) + + If Not YT.Count = 0 Then + For Each ast In YT + Me._TrailerList.Add(ast) + Next + End If + + TMDB = Nothing + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Scraper/clsScrapeYouTube.vb b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeYouTube.vb new file mode 100644 index 0000000..51ed7c4 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/clsScrapeYouTube.vb @@ -0,0 +1,336 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace YouTube + + Public Class Scraper + +#Region "Fields" + + Friend WithEvents bwYT As New System.ComponentModel.BackgroundWorker + + Private _VideoLinks As VideoLinkItemCollection + +#End Region 'Fields + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event VideoLinksRetrieved(ByVal bSuccess As Boolean) + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property VideoLinks() As VideoLinkItemCollection + Get + If _VideoLinks Is Nothing Then + _VideoLinks = New VideoLinkItemCollection + End If + Return _VideoLinks + End Get + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() + If bwYT.IsBusy Then bwYT.CancelAsync() + + While bwYT.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetVideoLinks(ByVal url As String) + Try + _VideoLinks = ParseYTFormats(url, False) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub GetVideoLinksAsync(ByVal url As String) + Try + If Not bwYT.IsBusy Then + _VideoLinks = Nothing + bwYT.WorkerSupportsCancellation = True + bwYT.RunWorkerAsync(url) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwYT.DoWork + Dim Url As String = DirectCast(e.Argument, String) + + Try + e.Result = ParseYTFormats(Url, True) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwYT.RunWorkerCompleted + Try + If e.Cancelled Then + 'user cancelled + RaiseEvent VideoLinksRetrieved(False) + ElseIf e.Error IsNot Nothing Then + 'exception occurred + RaiseEvent Exception(e.Error) + Else + 'all good + If e.Result IsNot Nothing Then + _VideoLinks = DirectCast(e.Result, VideoLinkItemCollection) + RaiseEvent VideoLinksRetrieved(True) + Else + RaiseEvent VideoLinksRetrieved(False) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetVideoTitle(ByVal HTML As String) As String + Dim result As String = "" + 'Dim KeyPattern As String = "'VIDEO_TITLE':\s*'([^']*?)'" + Dim KeyPattern As String = "meta name=\""title\"" content=\s*\""([^']*?)\""" + 'meta name="title" content= + If Regex.IsMatch(HTML, KeyPattern) Then + result = Regex.Match(HTML, KeyPattern).Groups(1).Value + End If + + Return result + End Function + + Private Function ParseYTFormats(ByVal url As String, ByVal doProgress As Boolean) As VideoLinkItemCollection + Dim DownloadLinks As New VideoLinkItemCollection + Dim sHTTP As New HTTP + + Try + If bwYT.CancellationPending Then Return DownloadLinks + + Dim Html As String = sHTTP.DownloadData(url) + If Html.ToLower.Contains("page not found") Then + Html = String.Empty + End If + + If String.IsNullOrEmpty(Html.Trim) Then Return DownloadLinks + If bwYT.CancellationPending Then Return DownloadLinks + + Dim VideoTitle As String = GetVideoTitle(Html) + VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") + + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) + If fmtMatch.Success Then + Dim FormatMap As String = fmtMatch.Groups(1).Value + Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") + + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) + Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) + + For i As Integer = 0 To FormatArray.Length - 1 + Dim yturl As String = rurl.Match(FormatArray(i)).Groups(1).Value + Dim ytitag As String = ritag.Match(FormatArray(i)).Groups(1).Value + Dim ytsig As String = rsig.Match(FormatArray(i)).Groups(1).Value + + 'Console.WriteLine("Trailer Itag: {0}", ytitag) + 'Console.WriteLine("Trailer Url: {0}", yturl) + 'Console.WriteLine("Trailer Sig: {0}", ytsig) + + Dim Link As New VideoLinkItem + Select Case ytitag + ' ********************************************************************** + ' see all itags http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs + ' ********************************************************************** + Case "5" + Link.Description = "240p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "6" + Link.Description = "270p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "13" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "17" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "18" + Link.Description = "360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQMP4 + Case "22" + Link.Description = "720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD720p + Case "34" + Link.Description = "360p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQFLV + Case "35" + Link.Description = "480p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HQFLV + Case "36" + Link.Description = "240p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "37" + Link.Description = "1080p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD1080p + Case "38" + Link.Description = "1536p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "43" + Link.Description = "360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.SQVP8 + Case "44" + Link.Description = "480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HQVP8 + Case "45" + Link.Description = "720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD720pVP8 + Case "46" + Link.Description = "1080p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD1080pVP8 + Case "82" + Link.Description = "3D 360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "83" + Link.Description = "3D 480p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "84" + Link.Description = "3D 720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "85" + Link.Description = "3D 520p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "100" + Link.Description = "3D 360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "101" + Link.Description = "3D 480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "102" + Link.Description = "3D 720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "120" + Link.Description = "720p LiveStream (FLV, AVC)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case Else + Link.Description = "Other" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + 'Continue For + End Select + + Link.URL = Web.HttpUtility.UrlDecode(Web.HttpUtility.UrlDecode(yturl)) & "&signature=" & ytsig & "&title=" & Web.HttpUtility.UrlEncode(VideoTitle) + Link.URL = Link.URL.Replace("sig=", "signature=") ' sig= returns HTTP 403 //oldstyle, keep it + 'Console.WriteLine("Trailer Url decoded: {0}", Link.URL) + + If bwYT.CancellationPending Then Return DownloadLinks + + If Not String.IsNullOrEmpty(Link.URL) AndAlso sHTTP.IsValidURL(Link.URL) Then + DownloadLinks.Add(Link) + End If + + If bwYT.CancellationPending Then Return DownloadLinks + + Next + + End If + Return DownloadLinks + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New VideoLinkItemCollection + Finally + sHTTP = Nothing + End Try + End Function + +#End Region 'Methods + + End Class + + Public Class VideoLinkItem + +#Region "Fields" + + Private _Description As String + Private _FormatQuality As Enums.TrailerQuality + Private _URL As String + +#End Region 'Fields + +#Region "Properties" + + Public Property Description() As String + Get + Return _Description + End Get + Set(ByVal value As String) + _Description = value + End Set + End Property + + Public Property URL() As String + Get + Return _URL + End Get + Set(ByVal value As String) + _URL = value + End Set + End Property + + Friend Property FormatQuality() As Enums.TrailerQuality + Get + Return _FormatQuality + End Get + Set(ByVal value As Enums.TrailerQuality) + _FormatQuality = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class VideoLinkItemCollection + Inherits Generic.SortedList(Of Enums.TrailerQuality, VideoLinkItem) + +#Region "Methods" + + Public Shadows Sub Add(ByVal Link As VideoLinkItem) + If Not MyBase.ContainsKey(Link.FormatQuality) Then MyBase.Add(Link.FormatQuality, Link) + End Sub + +#End Region 'Methods + + End Class + +End Namespace + diff --git a/Addons/scraper.MPDB.Poster/Scraper/dlgImgSelect.Designer.vb b/Addons/scraper.MPDB.Poster/Scraper/dlgImgSelect.Designer.vb new file mode 100644 index 0000000..3c9254c --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/dlgImgSelect.Designer.vb @@ -0,0 +1,569 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgImgSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgImgSelect)) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.pnlSize = New System.Windows.Forms.Panel() + Me.btnPreview = New System.Windows.Forms.Button() + Me.rbSmall = New System.Windows.Forms.RadioButton() + Me.rbMedium = New System.Windows.Forms.RadioButton() + Me.rbLarge = New System.Windows.Forms.RadioButton() + Me.rbXLarge = New System.Windows.Forms.RadioButton() + Me.pnlFanart = New System.Windows.Forms.Panel() + Me.chkThumb = New System.Windows.Forms.CheckBox() + Me.chkMid = New System.Windows.Forms.CheckBox() + Me.chkOriginal = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlDLStatus = New System.Windows.Forms.Panel() + Me.pnlIMDB = New System.Windows.Forms.Panel() + Me.lblDL6Status = New System.Windows.Forms.Label() + Me.lblDL6 = New System.Windows.Forms.Label() + Me.pbDL6 = New System.Windows.Forms.ProgressBar() + Me.pnlSinglePic = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlFANARTTV = New System.Windows.Forms.Panel() + Me.lblDL3Status = New System.Windows.Forms.Label() + Me.lblDL3 = New System.Windows.Forms.Label() + Me.pbDL3 = New System.Windows.Forms.ProgressBar() + Me.pnlMDB = New System.Windows.Forms.Panel() + Me.lblDL5Status = New System.Windows.Forms.Label() + Me.lblDL5 = New System.Windows.Forms.Label() + Me.pbDL5 = New System.Windows.Forms.ProgressBar() + Me.pnlIMPA = New System.Windows.Forms.Panel() + Me.lblDL4Status = New System.Windows.Forms.Label() + Me.lblDL4 = New System.Windows.Forms.Label() + Me.pbDL4 = New System.Windows.Forms.ProgressBar() + Me.pnlTMDB = New System.Windows.Forms.Panel() + Me.lblDL2Status = New System.Windows.Forms.Label() + Me.lblDL2 = New System.Windows.Forms.Label() + Me.pbDL2 = New System.Windows.Forms.ProgressBar() + Me.TableLayoutPanel1.SuspendLayout() + Me.pnlBottomMain.SuspendLayout() + Me.pnlSize.SuspendLayout() + Me.pnlFanart.SuspendLayout() + Me.pnlDLStatus.SuspendLayout() + Me.pnlIMDB.SuspendLayout() + Me.pnlSinglePic.SuspendLayout() + Me.pnlFANARTTV.SuspendLayout() + Me.pnlMDB.SuspendLayout() + Me.pnlIMPA.SuspendLayout() + Me.pnlTMDB.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(687, 11) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(836, 495) + Me.pnlBG.TabIndex = 1 + Me.pnlBG.Visible = False + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.pnlSize) + Me.pnlBottomMain.Controls.Add(Me.pnlFanart) + Me.pnlBottomMain.Controls.Add(Me.lblInfo) + Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) + Me.pnlBottomMain.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 495) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(836, 50) + Me.pnlBottomMain.TabIndex = 0 + ' + 'pnlSize + ' + Me.pnlSize.BackColor = System.Drawing.Color.White + Me.pnlSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.pnlSize.Controls.Add(Me.btnPreview) + Me.pnlSize.Controls.Add(Me.rbSmall) + Me.pnlSize.Controls.Add(Me.rbMedium) + Me.pnlSize.Controls.Add(Me.rbLarge) + Me.pnlSize.Controls.Add(Me.rbXLarge) + Me.pnlSize.Location = New System.Drawing.Point(8, 8) + Me.pnlSize.Name = "pnlSize" + Me.pnlSize.Size = New System.Drawing.Size(673, 34) + Me.pnlSize.TabIndex = 4 + Me.pnlSize.Visible = False + ' + 'btnPreview + ' + Me.btnPreview.Enabled = False + Me.btnPreview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnPreview.Image = CType(resources.GetObject("btnPreview.Image"), System.Drawing.Image) + Me.btnPreview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPreview.Location = New System.Drawing.Point(593, 5) + Me.btnPreview.Name = "btnPreview" + Me.btnPreview.Size = New System.Drawing.Size(75, 23) + Me.btnPreview.TabIndex = 6 + Me.btnPreview.Text = "Preview" + Me.btnPreview.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPreview.UseVisualStyleBackColor = True + ' + 'rbSmall + ' + Me.rbSmall.AutoSize = True + Me.rbSmall.Enabled = False + Me.rbSmall.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbSmall.Location = New System.Drawing.Point(475, 8) + Me.rbSmall.Name = "rbSmall" + Me.rbSmall.Size = New System.Drawing.Size(53, 17) + Me.rbSmall.TabIndex = 5 + Me.rbSmall.TabStop = True + Me.rbSmall.Text = "Small" + Me.rbSmall.UseVisualStyleBackColor = True + ' + 'rbMedium + ' + Me.rbMedium.AutoSize = True + Me.rbMedium.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbMedium.Location = New System.Drawing.Point(201, 8) + Me.rbMedium.Name = "rbMedium" + Me.rbMedium.Size = New System.Drawing.Size(69, 17) + Me.rbMedium.TabIndex = 4 + Me.rbMedium.TabStop = True + Me.rbMedium.Text = "Medium" + Me.rbMedium.UseVisualStyleBackColor = True + ' + 'rbLarge + ' + Me.rbLarge.AutoSize = True + Me.rbLarge.Enabled = False + Me.rbLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbLarge.Location = New System.Drawing.Point(343, 8) + Me.rbLarge.Name = "rbLarge" + Me.rbLarge.Size = New System.Drawing.Size(55, 17) + Me.rbLarge.TabIndex = 3 + Me.rbLarge.TabStop = True + Me.rbLarge.Text = "Cover" + Me.rbLarge.UseVisualStyleBackColor = True + ' + 'rbXLarge + ' + Me.rbXLarge.AutoSize = True + Me.rbXLarge.Enabled = False + Me.rbXLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbXLarge.Location = New System.Drawing.Point(26, 8) + Me.rbXLarge.Name = "rbXLarge" + Me.rbXLarge.Size = New System.Drawing.Size(66, 17) + Me.rbXLarge.TabIndex = 2 + Me.rbXLarge.TabStop = True + Me.rbXLarge.Text = "Original" + Me.rbXLarge.UseVisualStyleBackColor = True + ' + 'pnlFanart + ' + Me.pnlFanart.BackColor = System.Drawing.Color.White + Me.pnlFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFanart.Controls.Add(Me.chkThumb) + Me.pnlFanart.Controls.Add(Me.chkMid) + Me.pnlFanart.Controls.Add(Me.chkOriginal) + Me.pnlFanart.Location = New System.Drawing.Point(8, 8) + Me.pnlFanart.Name = "pnlFanart" + Me.pnlFanart.Size = New System.Drawing.Size(339, 34) + Me.pnlFanart.TabIndex = 5 + Me.pnlFanart.Visible = False + ' + 'chkThumb + ' + Me.chkThumb.AutoSize = True + Me.chkThumb.Location = New System.Drawing.Point(231, 8) + Me.chkThumb.Name = "chkThumb" + Me.chkThumb.Size = New System.Drawing.Size(111, 17) + Me.chkThumb.TabIndex = 9 + Me.chkThumb.Text = "Check All Thumb" + Me.chkThumb.UseVisualStyleBackColor = True + ' + 'chkMid + ' + Me.chkMid.AutoSize = True + Me.chkMid.Location = New System.Drawing.Point(131, 8) + Me.chkMid.Name = "chkMid" + Me.chkMid.Size = New System.Drawing.Size(96, 17) + Me.chkMid.TabIndex = 7 + Me.chkMid.Text = "Check All Mid" + Me.chkMid.UseVisualStyleBackColor = True + ' + 'chkOriginal + ' + Me.chkOriginal.AutoSize = True + Me.chkOriginal.Location = New System.Drawing.Point(7, 8) + Me.chkOriginal.Name = "chkOriginal" + Me.chkOriginal.Size = New System.Drawing.Size(118, 17) + Me.chkOriginal.TabIndex = 8 + Me.chkOriginal.Text = "Check All Original" + Me.chkOriginal.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.Location = New System.Drawing.Point(402, 10) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(240, 31) + Me.lblInfo.TabIndex = 3 + Me.lblInfo.Text = "Selected item will be set as fanart. All checked items will be saved to \extrathu" & _ + "mbs." + Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblInfo.Visible = False + ' + 'pnlDLStatus + ' + Me.pnlDLStatus.BackColor = System.Drawing.Color.White + Me.pnlDLStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlDLStatus.Controls.Add(Me.pnlIMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlSinglePic) + Me.pnlDLStatus.Controls.Add(Me.pnlFANARTTV) + Me.pnlDLStatus.Controls.Add(Me.pnlMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlIMPA) + Me.pnlDLStatus.Controls.Add(Me.pnlTMDB) + Me.pnlDLStatus.Location = New System.Drawing.Point(253, 98) + Me.pnlDLStatus.Name = "pnlDLStatus" + Me.pnlDLStatus.Size = New System.Drawing.Size(331, 330) + Me.pnlDLStatus.TabIndex = 0 + Me.pnlDLStatus.Visible = False + ' + 'pnlIMDB + ' + Me.pnlIMDB.Controls.Add(Me.lblDL6Status) + Me.pnlIMDB.Controls.Add(Me.lblDL6) + Me.pnlIMDB.Controls.Add(Me.pbDL6) + Me.pnlIMDB.Location = New System.Drawing.Point(3, 84) + Me.pnlIMDB.Name = "pnlIMDB" + Me.pnlIMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlIMDB.TabIndex = 9 + ' + 'lblDL6Status + ' + Me.lblDL6Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL6Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL6Status.Name = "lblDL6Status" + Me.lblDL6Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL6Status.TabIndex = 8 + ' + 'lblDL6 + ' + Me.lblDL6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL6.Location = New System.Drawing.Point(5, 10) + Me.lblDL6.Name = "lblDL6" + Me.lblDL6.Size = New System.Drawing.Size(310, 13) + Me.lblDL6.TabIndex = 7 + Me.lblDL6.Text = "Performing Preliminary Tasks..." + ' + 'pbDL6 + ' + Me.pbDL6.Location = New System.Drawing.Point(6, 52) + Me.pbDL6.Name = "pbDL6" + Me.pbDL6.Size = New System.Drawing.Size(309, 19) + Me.pbDL6.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL6.TabIndex = 6 + ' + 'pnlSinglePic + ' + Me.pnlSinglePic.BackColor = System.Drawing.Color.White + Me.pnlSinglePic.Controls.Add(Me.Label2) + Me.pnlSinglePic.Controls.Add(Me.ProgressBar1) + Me.pnlSinglePic.Location = New System.Drawing.Point(3, 3) + Me.pnlSinglePic.Name = "pnlSinglePic" + Me.pnlSinglePic.Size = New System.Drawing.Size(321, 75) + Me.pnlSinglePic.TabIndex = 9 + Me.pnlSinglePic.Visible = False + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(5, 10) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(310, 13) + Me.Label2.TabIndex = 7 + Me.Label2.Text = "Downloading Selected Image..." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(6, 53) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(309, 19) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 6 + ' + 'pnlFANARTTV + ' + Me.pnlFANARTTV.Controls.Add(Me.lblDL3Status) + Me.pnlFANARTTV.Controls.Add(Me.lblDL3) + Me.pnlFANARTTV.Controls.Add(Me.pbDL3) + Me.pnlFANARTTV.Location = New System.Drawing.Point(3, 84) + Me.pnlFANARTTV.Name = "pnlFANARTTV" + Me.pnlFANARTTV.Size = New System.Drawing.Size(321, 75) + Me.pnlFANARTTV.TabIndex = 11 + ' + 'lblDL3Status + ' + Me.lblDL3Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL3Status.Name = "lblDL3Status" + Me.lblDL3Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL3Status.TabIndex = 8 + ' + 'lblDL3 + ' + Me.lblDL3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3.Location = New System.Drawing.Point(5, 10) + Me.lblDL3.Name = "lblDL3" + Me.lblDL3.Size = New System.Drawing.Size(310, 13) + Me.lblDL3.TabIndex = 7 + Me.lblDL3.Text = "Performing Preliminary Tasks..." + ' + 'pbDL3 + ' + Me.pbDL3.Location = New System.Drawing.Point(6, 53) + Me.pbDL3.Name = "pbDL3" + Me.pbDL3.Size = New System.Drawing.Size(309, 19) + Me.pbDL3.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL3.TabIndex = 6 + ' + 'pnlMDB + ' + Me.pnlMDB.Controls.Add(Me.lblDL5Status) + Me.pnlMDB.Controls.Add(Me.lblDL5) + Me.pnlMDB.Controls.Add(Me.pbDL5) + Me.pnlMDB.Location = New System.Drawing.Point(3, 246) + Me.pnlMDB.Name = "pnlMDB" + Me.pnlMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlMDB.TabIndex = 9 + ' + 'lblDL5Status + ' + Me.lblDL5Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL5Status.Name = "lblDL5Status" + Me.lblDL5Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL5Status.TabIndex = 8 + ' + 'lblDL5 + ' + Me.lblDL5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5.Location = New System.Drawing.Point(5, 10) + Me.lblDL5.Name = "lblDL5" + Me.lblDL5.Size = New System.Drawing.Size(310, 13) + Me.lblDL5.TabIndex = 7 + Me.lblDL5.Text = "Performing Preliminary Tasks..." + ' + 'pbDL5 + ' + Me.pbDL5.Location = New System.Drawing.Point(6, 53) + Me.pbDL5.Name = "pbDL5" + Me.pbDL5.Size = New System.Drawing.Size(309, 19) + Me.pbDL5.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL5.TabIndex = 6 + ' + 'pnlIMPA + ' + Me.pnlIMPA.Controls.Add(Me.lblDL4Status) + Me.pnlIMPA.Controls.Add(Me.lblDL4) + Me.pnlIMPA.Controls.Add(Me.pbDL4) + Me.pnlIMPA.Location = New System.Drawing.Point(3, 165) + Me.pnlIMPA.Name = "pnlIMPA" + Me.pnlIMPA.Size = New System.Drawing.Size(321, 75) + Me.pnlIMPA.TabIndex = 6 + ' + 'lblDL4Status + ' + Me.lblDL4Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL4Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL4Status.Name = "lblDL4Status" + Me.lblDL4Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL4Status.TabIndex = 8 + ' + 'lblDL4 + ' + Me.lblDL4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL4.Location = New System.Drawing.Point(5, 10) + Me.lblDL4.Name = "lblDL4" + Me.lblDL4.Size = New System.Drawing.Size(310, 13) + Me.lblDL4.TabIndex = 7 + Me.lblDL4.Text = "Performing Preliminary Tasks..." + ' + 'pbDL4 + ' + Me.pbDL4.Location = New System.Drawing.Point(6, 52) + Me.pbDL4.Name = "pbDL4" + Me.pbDL4.Size = New System.Drawing.Size(309, 19) + Me.pbDL4.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL4.TabIndex = 6 + ' + 'pnlTMDB + ' + Me.pnlTMDB.Controls.Add(Me.lblDL2Status) + Me.pnlTMDB.Controls.Add(Me.lblDL2) + Me.pnlTMDB.Controls.Add(Me.pbDL2) + Me.pnlTMDB.Location = New System.Drawing.Point(3, 3) + Me.pnlTMDB.Name = "pnlTMDB" + Me.pnlTMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlTMDB.TabIndex = 10 + ' + 'lblDL2Status + ' + Me.lblDL2Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL2Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL2Status.Name = "lblDL2Status" + Me.lblDL2Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL2Status.TabIndex = 8 + ' + 'lblDL2 + ' + Me.lblDL2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL2.Location = New System.Drawing.Point(5, 10) + Me.lblDL2.Name = "lblDL2" + Me.lblDL2.Size = New System.Drawing.Size(310, 13) + Me.lblDL2.TabIndex = 7 + Me.lblDL2.Text = "Performing Preliminary Tasks..." + ' + 'pbDL2 + ' + Me.pbDL2.Location = New System.Drawing.Point(6, 52) + Me.pbDL2.Name = "pbDL2" + Me.pbDL2.Size = New System.Drawing.Size(309, 19) + Me.pbDL2.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL2.TabIndex = 6 + ' + 'dlgImgSelect + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(836, 545) + Me.ControlBox = False + Me.Controls.Add(Me.pnlDLStatus) + Me.Controls.Add(Me.pnlBG) + Me.Controls.Add(Me.pnlBottomMain) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgImgSelect" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Poster" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlSize.ResumeLayout(False) + Me.pnlSize.PerformLayout() + Me.pnlFanart.ResumeLayout(False) + Me.pnlFanart.PerformLayout() + Me.pnlDLStatus.ResumeLayout(False) + Me.pnlIMDB.ResumeLayout(False) + Me.pnlSinglePic.ResumeLayout(False) + Me.pnlFANARTTV.ResumeLayout(False) + Me.pnlMDB.ResumeLayout(False) + Me.pnlIMPA.ResumeLayout(False) + Me.pnlTMDB.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlDLStatus As System.Windows.Forms.Panel + Friend WithEvents pnlIMPA As System.Windows.Forms.Panel + Friend WithEvents lblDL4Status As System.Windows.Forms.Label + Friend WithEvents lblDL4 As System.Windows.Forms.Label + Friend WithEvents pbDL4 As System.Windows.Forms.ProgressBar + Friend WithEvents lblInfo As System.Windows.Forms.Label + Friend WithEvents pnlSize As System.Windows.Forms.Panel + Friend WithEvents rbSmall As System.Windows.Forms.RadioButton + Friend WithEvents rbMedium As System.Windows.Forms.RadioButton + Friend WithEvents rbLarge As System.Windows.Forms.RadioButton + Friend WithEvents rbXLarge As System.Windows.Forms.RadioButton + Friend WithEvents pnlSinglePic As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL5Status As System.Windows.Forms.Label + Friend WithEvents lblDL5 As System.Windows.Forms.Label + Friend WithEvents pbDL5 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlFanart As System.Windows.Forms.Panel + Friend WithEvents chkThumb As System.Windows.Forms.CheckBox + Friend WithEvents chkMid As System.Windows.Forms.CheckBox + Friend WithEvents chkOriginal As System.Windows.Forms.CheckBox + Friend WithEvents btnPreview As System.Windows.Forms.Button + Friend WithEvents pnlFANARTTV As System.Windows.Forms.Panel + Friend WithEvents lblDL3Status As System.Windows.Forms.Label + Friend WithEvents lblDL3 As System.Windows.Forms.Label + Friend WithEvents pbDL3 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlTMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL2Status As System.Windows.Forms.Label + Friend WithEvents lblDL2 As System.Windows.Forms.Label + Friend WithEvents pbDL2 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlIMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL6Status As System.Windows.Forms.Label + Friend WithEvents lblDL6 As System.Windows.Forms.Label + Friend WithEvents pbDL6 As System.Windows.Forms.ProgressBar + +End Class diff --git a/Addons/scraper.MPDB.Poster/Scraper/dlgImgSelect.resx b/Addons/scraper.MPDB.Poster/Scraper/dlgImgSelect.resx new file mode 100644 index 0000000..3491405 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/dlgImgSelect.resx @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnPreview.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA + Cv8BNGKaggAAAuRJREFUOE+lkltsS3Ecx3+ILAsPFrfEyxJPXkh0bokg4UG78TQNI5FImPBAJKiNhBAy + MTwRMRJ1ibsZ29jc2t00Vrq1p3q6tqft6Tk9t87YeLCHff3/3Sp4dZJPvv/f5fs7///5HwJA/8Nv88jw + 8ApD1y+blnnNtKwGjmXl/qCQMxt+fB9xjI2NEYdGR0dp9OfP6Yph+gOKjpBmMcy8CoxwPi5gok81kDGt + BPOUci+xt1LO0Gy+ZAZuUcbtCe4NpHEtLKNBkHGfrQt5dySNrpSKIcvcbJkmka5pNKhrtrfxFE71RlD3 + UcT5gIjt7THMvhLHTEZlSwz1n0ScZTXe8yKextec6TRNY3zAF0O3tUYl7Ovqh+t9EHs8IRSdC4FO9+WZ + VBfEjlchHPEF8z2PRQnDg9b4AE3L0hA7wqNwDFWvP2Cn1w9Hox90zAc6McFRH9Y97MWuDn++56YwgJEc + G2CwAdmsSkPsCLf6I1jb3IUNL3sY3Zhxxgs67AG5PCg+4YW9uRsbWY33XAp8xrBlOHVdI1IVhb5oWdv1 + QBjLn3qwtqUDq5s6MOd0O2jfizwlx9uwqtGLdazGey76Q/hm6k4tmyXKyDLlVMV29aOApU0erHnWgWmH + noF2NYL2Ph2nuhFF+5uw8okXy1hP/YcghjTVqSgZoqQkkZZK2m58ErDouRfzLjSDKt2grbf+ZpMbJSeb + sPA520FvCINqxinLaaKoKHJsETGK1rCIh+8F3HnTh7vvgrjHbqMAjx/0CGiNDCAqJZGUEk45zQYk4nG+ + i7LPgoBkNIpsOglTzcDSFOQ0FTmdwdRiyvNqKolELAZZlre0t7URLSkro21VVSVdnZ1pSZKQSqXAPizY + /wHDMMCuKg+Ps6oKJZNBsL//6+7q6gWTaPzhWjx31qzF5Xb7Acf69S6mNRV2e22Fw1G7gcGVUcPyro3l + 5Qfnl5auYZ4Zk7l3ClsxuBQGTszNx/9SqHHDVG76BaMnpgu1OH2ZAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Scraper/dlgImgSelect.vb b/Addons/scraper.MPDB.Poster/Scraper/dlgImgSelect.vb new file mode 100644 index 0000000..b2e44a9 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/dlgImgSelect.vb @@ -0,0 +1,1582 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports EmberScraperModule.EmberTMDBScraperModule +Imports RestSharp +Imports WatTmdb + +Public Class dlgImgSelect + +#Region "Fields" + + Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwIMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwFANARTTVDownload As New System.ComponentModel.BackgroundWorker + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Private TMDB As TMDB.Scraper + Private TMDBPosters As New List(Of MediaContainers.Image) + + Private MPDB As New MPDB.Scraper + Private MPDBPosters As New List(Of MediaContainers.Image) + + Private IMPA As New IMPA.Scraper + Private IMPAPosters As New List(Of MediaContainers.Image) + + Private IMDB As New IMDBimg.Scraper + Private IMDBPosters As New List(Of MediaContainers.Image) + + Private FANARTTVs As FANARTTVs.Scraper + Private FANARTTVPosters As New List(Of MediaContainers.Image) + + Private CachePath As String = String.Empty + Private chkImage() As CheckBox + Private DLType As Enums.ImageType + Private ETHashes As New List(Of String) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + + Private isEdit As Boolean = False + Private isShown As Boolean = False + Private iTop As Integer = 5 + Private lblImage() As Label + + Private noImages As Boolean = False + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private PreDL As Boolean = False + Private Results As New Containers.ImgResult + Private selIndex As Integer = -1 + + Private tMovie As New Structures.DBMovie + Private tmpImage As New MediaContainers.Image + Private _impaDone As Boolean = True + Private _imdbDone As Boolean = True + Private _fanarttvDone As Boolean = True + Private _mpdbDone As Boolean = True + Private _tmdbDone As Boolean = True + +#End Region 'Fields + +#Region "Events" + + Private Event IMPADone() + + Private Event MPDBDone() + + Private Event TMDBDone() + + Private Event IMDBDone() + + Private Event FANARTTVDone() +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.PreDL = True + Me.SetUp() + Me.StartDownload() + End Sub + + Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult + '// + ' Overload to pass data + '\\ + + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.isShown = True + + MyBase.ShowDialog() + Return Results + End Function + + Public Overloads Function ShowDialog() As Containers.ImgResult + Me.isShown = True + MyBase.ShowDialog() + + Return Results + End Function + + 'Rewrite to simplify + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal isChecked As Boolean, poster As MediaContainers.Image) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(256, 286) + Me.pbImage(iIndex).Size = New Size(250, 250) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.pnlImage(iIndex).Tag = poster + Me.pbImage(iIndex).Tag = poster + Me.pbImage(iIndex).Image = poster.WebImage.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.pnlBG.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If Me.DLType = Enums.ImageType.Fanart Then + ReDim Preserve Me.chkImage(iIndex) + Me.chkImage(iIndex) = New CheckBox() + Me.chkImage(iIndex).Name = iIndex.ToString + Me.chkImage(iIndex).Size = New Size(250, 30) + Me.chkImage(iIndex).AutoSize = False + Me.chkImage(iIndex).BackColor = Color.White + Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + 'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + Me.chkImage(iIndex).Left = 0 + Me.chkImage(iIndex).Top = 250 + Me.chkImage(iIndex).Checked = isChecked + Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve Me.lblImage(iIndex) + Me.lblImage(iIndex) = New Label() + Me.lblImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Size = New Size(250, 30) + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + If IsTMDBURL(poster.URL) Then + Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + Else + Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + End If + Me.lblImage(iIndex).Tag = poster + Me.lblImage(iIndex).Left = 0 + Me.lblImage(iIndex).Top = 250 + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 301 + Else + Me.iLeft += 271 + End If + End Sub + + Private Sub AllDoneDownloading() + If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone AndAlso Me._imdbDone AndAlso Me._fanarttvDone Then + Me.pnlDLStatus.Visible = False + Me.TMDBPosters.AddRange(Me.IMPAPosters) + Me.TMDBPosters.AddRange(Me.MPDBPosters) + Me.TMDBPosters.AddRange(Me.IMDBPosters) + Me.TMDBPosters.AddRange(Me.FANARTTVPosters) + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + End If + End Sub + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + PreviewImage() + End Sub + + Private Sub PreviewImage() + Try + Dim tImage As New Images + Me.pnlTMDB.Visible = False + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = True + Me.pnlDLStatus.Height = 85 + Me.pnlDLStatus.Top = 185 + + Application.DoEvents() + + Select Case True + Case rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + Case rbLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + Case rbMedium.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case rbSmall.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End Select + + Me.pnlSinglePic.Visible = False + + If Not IsNothing(tImage.Image) Then + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image) + + End If + + tImage.Dispose() + tImage = Nothing + + Catch ex As Exception + Me.pnlSinglePic.Visible = False + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.IMDBPosters.Count - 1 + Try + If Me.bwIMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMDBDownload.ReportProgress(i + 1, Me.IMDBPosters.Item(i).URL) + Try + Me.IMDBPosters.Item(i).WebImage.FromWeb(Me.IMDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMDBPosters.Item(i).URL = StringUtils.CleanURL(Me.IMDBPosters.Item(i).URL) + Me.IMDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMDBPosters.Item(i).Description, ")_(url=", Me.IMDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwIMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL6Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL6.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._imdbDone = True + RaiseEvent IMDBDone() + End If + End Sub + + Private Sub bwFANARTTVDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTVDownload.DoWork + '// + ' Thread to download FanartTV images from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.FANARTTVPosters.Count - 1 + Try + If Me.bwFANARTTVDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwFANARTTVDownload.ReportProgress(i + 1, Me.FANARTTVPosters.Item(i).URL) + Try + Me.FANARTTVPosters.Item(i).WebImage.FromWeb(Me.FANARTTVPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.FANARTTVPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.FANARTTVPosters.Item(i).URL = StringUtils.CleanURL(Me.FANARTTVPosters.Item(i).URL) + Me.FANARTTVPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.FANARTTVPosters.Item(i).Description, ")_(url=", Me.FANARTTVPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwFANARTTVDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTVDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL3.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwFANARTTVDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTVDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._fanarttvDone = True + RaiseEvent FANARTTVDone() + End If + End Sub + + Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork + '// + ' Thread to download impa posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + + For i As Integer = 0 To Me.IMPAPosters.Count - 1 + If bwIMPADownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL) + Try + Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL) + Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL4Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL4.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPABownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._impaDone = True + RaiseEvent IMPADone() + End If + End Sub + + Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.MPDBPosters.Count - 1 + Try + If Me.bwMPDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL) + Try + Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL) + Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL5Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL5.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._mpdbDone = True + RaiseEvent MPDBDone() + End If + End Sub + + Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork + '// + ' Thread to download tmdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + Dim thumbLink As String = String.Empty + Dim savePath As String = String.Empty + Dim extrathumbSize As String = String.Empty + + extrathumbSize = _MySettings.ManualETSize + + 'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all. + Dim posters As MediaContainers.Image() + If Me.DLType = Enums.ImageType.Fanart Then + posters = TMDBPosters.Where(Function(s) s.Description = extrathumbSize).ToArray() + Else + posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray() + End If + + For i As Integer = 0 To posters.Count - 1 + Try + If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then + If Me.bwTMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwTMDBDownload.ReportProgress((i + 1), posters(i).URL) + Try + posters(i).WebImage.FromWeb(posters(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then + If Me.DLType = Enums.ImageType.Fanart Then + + + If Not posters(i).URL.Contains("-thumb.") Then + Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org" + thumbLink = RemoveServerURL(posters(i).URL) + 'If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("-poster.", "-thumb.") + thumbLink = thumbLink.Replace("-original.", "-thumb.") + ''Else + 'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb") + 'End If + Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Else + Me.Results.Posters.Add(posters(i).URL) + End If + End If + If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then + Try + posters(i).URL = Me.CleanTMDBURL(posters(i).URL) + + savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg")) + posters(i).WebImage.Save(savePath, , , False) + + If Master.eSettings.AutoET Then + Dim tSize As New Enums.FanartSize + Select Case posters(i).Description.ToLower + Case "original" + tSize = Enums.FanartSize.Lrg + Case "mid" + tSize = Enums.FanartSize.Mid + Case "thumb" + tSize = Enums.FanartSize.Small + End Select + If Master.eSettings.AutoETSize = tSize Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + posters(i).isChecked = True + End If + End If + End If + + Catch + End Try + End If + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL2.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._tmdbDone = True + RaiseEvent TMDBDone() + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + IMPA.Cancel() + MPDB.Cancel() + TMDB.Cancel() + IMDB.Cancel() + FANARTTVs.Cancel() + + If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync() + If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync() + If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync() + If bwIMDBDownload.IsBusy Then bwIMDBDownload.CancelAsync() + If bwFANARTTVDownload.IsBusy Then bwFANARTTVDownload.CancelAsync() + + While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean) + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Text.ToLower.Contains(sType) Then + Me.chkImage(i).Checked = Checked + End If + Next + End Sub + + Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged + Me.CheckAll("(poster)", chkMid.Checked) + End Sub + + Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged + Me.CheckAll("(original)", chkOriginal.Checked) + End Sub + + Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged + Me.CheckAll("(thumb)", chkThumb.Checked) + End Sub + + Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'Me.tmpImage.Dispose() + + IMPA = Nothing + MPDB = Nothing + TMDB = Nothing + IMDB = Nothing + FANARTTVs = Nothing + + IMPAPosters = Nothing + MPDBPosters = Nothing + TMDBPosters = Nothing + IMDBPosters = Nothing + FANARTTVPosters = Nothing + + End Sub + + Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath) + End Sub + + Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not PreDL Then SetUp() + End Sub + + Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Try + Application.DoEvents() + If Not PreDL Then + StartDownload() + ElseIf noImages Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image) + Try + 'set all pnl colors to white first + 'remove all the current genres + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(i).BackColor = Color.White + Me.chkImage(i).ForeColor = Color.Black + Else + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + End If + Next + + 'set selected pnl color to blue + Me.pnlImage(iIndex).BackColor = Color.Blue + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(iIndex).BackColor = Color.Blue + Me.chkImage(iIndex).ForeColor = Color.White + Else + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + End If + + Me.selIndex = iIndex + + Me.pnlSize.Visible = False + + If IsTMDBURL(poster.URL) Then + Me.SetupSizes(poster.ParentID) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + Me.OK_Button.Enabled = False + Else + Me.OK_Button.Focus() + End If + Me.tmpImage.Clear() + Else + Me.rbXLarge.Checked = False + Me.rbLarge.Checked = False + Me.rbMedium.Checked = False + Me.rbSmall.Checked = False + Me.OK_Button.Enabled = True + Me.OK_Button.Focus() + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function IsTMDBURL(ByVal sURL As String) As Boolean + If sURL.ToLower.Contains(_TMDBConf.images.base_url.ToLower) Then + Return True + Else + Return False + End If + End Function + + Private Function CleanTMDBURL(ByVal sURL As String) As String + If IsTMDBURL(sURL) Then + Dim _sURL As New Uri(sURL) + sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped)) + Else + sURL = StringUtils.TruncateURL(sURL, 40, True) + End If + Return sURL.Replace(":", "$c$").Replace("/", "$s$") + End Function + + + Private Sub GetFanart() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim di As New DirectoryInfo(CachePath) + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + If Not IsNothing(tImage.WebImage.Image) Then + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + 'Case sFile.Name.Contains("(mid)") + ' tImage.Description = "mid" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + End If + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "backdrop") + + If _MySettings.UseFANARTTV Then + Me.lblDL3.Text = Master.eLang.GetString(120, "Retrieving data from Fanart.tv...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._fanarttvDone = False + + Me.FANARTTVs.GetImagesAsync(tMovie.Movie.ID) + Else + Me.lblDL3.Text = Master.eLang.GetString(121, "Fanart.tv is not enabled") + End If + + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub GetPosters() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim lFi As New List(Of FileInfo) + Dim di As New DirectoryInfo(CachePath) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 207 + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "poster") + + If _MySettings.UseIMDB Then + Me.lblDL6.Text = Master.eLang.GetString(117, "Retrieving data from IMDB.com...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._imdbDone = False + + Me.IMDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL6.Text = Master.eLang.GetString(118, "IMDB.com is not enabled") + End If + + If _MySettings.UseIMPA Then + Me.lblDL4.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._impaDone = False + + Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL4.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled") + End If + + If _MySettings.UseMPDB Then + Me.lblDL5.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._mpdbDone = False + + Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL5.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVDoneDownloading() + Try + Me._fanarttvDone = True + Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL3.Value = 0 + + 'Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = Posters.Count + + Me.FANARTTVPosters = Posters + + Me.bwFANARTTVDownload.WorkerSupportsCancellation = True + Me.bwFANARTTVDownload.WorkerReportsProgress = True + Me.bwFANARTTVDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVProgressUpdated(ByVal iPercent As Integer) + Me.pbDL3.Value = iPercent + End Sub + + Private Sub IMDBDoneDownloading() + Try + Me._imdbDone = True + Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL6.Value = 0 + + 'Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = Posters.Count + + Me.IMDBPosters = Posters + + Me.bwIMDBDownload.WorkerSupportsCancellation = True + Me.bwIMDBDownload.WorkerReportsProgress = True + Me.bwIMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL6.Value = iPercent + End Sub + + Private Sub IMPADoneDownloading() + Try + Me._impaDone = True + Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL4.Value = 0 + + 'Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = Posters.Count + + Me.IMPAPosters = Posters + + Me.bwIMPADownload.WorkerSupportsCancellation = True + Me.bwIMPADownload.WorkerReportsProgress = True + Me.bwIMPADownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAProgressUpdated(ByVal iPercent As Integer) + Me.pbDL4.Value = iPercent + End Sub + + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then + pnlBG.VerticalScroll.Value += 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum + End If + Else + If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then + pnlBG.VerticalScroll.Value -= 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub MPDBDoneDownloading() + Try + Me._mpdbDone = True + Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL5.Value = 0 + + 'Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = Posters.Count + + Me.MPDBPosters = Posters + + Me.bwMPDBDownload.WorkerSupportsCancellation = True + Me.bwMPDBDownload.WorkerReportsProgress = True + Me.bwMPDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL5.Value = iPercent + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + Dim tmpPathPlus As String = String.Empty + Dim extrathumbSize As String + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + If DLType = Enums.ImageType.Fanart Then + tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") + Else + tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") + End If + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If + + If Me.DLType = Enums.ImageType.Fanart Then + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + Dim isChecked As Boolean = False + + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + isChecked = True + Exit For + End If + Next + + If isChecked Then + Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs") + If isEdit Then + extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName) + Else + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName) + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName) + Else + extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName) + End If + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + End If + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + Dim fsET As FileStream + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) + Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg) + fsET.Close() + iVal += 1 + End If + Next + fsET = Nothing + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + Try + 'If Me.DLType = Enums.ImageType.Fanart OrElse Not IsTMDBURL(DirectCast(sender, PictureBox).Tag.ToString) Then + 'ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(DirectCast(sender, PictureBox).Image) + 'Else + PreviewImage() + 'End If + Catch + End Try + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Panel).Name), DirectCast(DirectCast(sender, Panel).Tag, MediaContainers.Image)) + End Sub + + Private Sub ProcessPics(ByVal posters As List(Of MediaContainers.Image)) + Try + Dim iIndex As Integer = 0 + + 'remove all entries with invalid images + If Master.eSettings.UseImgCache Then + For i As Integer = posters.Count - 1 To 0 Step -1 + If IsNothing(posters.Item(i).WebImage.Image) Then + posters.RemoveAt(i) + End If + Next + End If + + If posters.Count > 0 Then + For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) RemoveServerURL(p.URL)) + If Not IsNothing(xPoster.WebImage.Image) AndAlso (Me.DLType = Enums.ImageType.Fanart OrElse Not (IsTMDBURL(xPoster.URL) AndAlso Not xPoster.Description = "cover")) Then + Me.AddImage(xPoster.Description, iIndex, xPoster.isChecked, xPoster) + iIndex += 1 + End If + Next + Else + If Not Me.PreDL OrElse isShown Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Else + noImages = True + End If + End If + + Me.Activate() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub rbLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbMedium_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbMedium.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbSmall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSmall.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbXLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbXLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub SetUp() + Try + AddHandler TMDB.PostersDownloaded, AddressOf TMDBPostersDownloaded + AddHandler TMDB.ProgressUpdated, AddressOf TMDBProgressUpdated + AddHandler IMPA.PostersDownloaded, AddressOf IMPAPostersDownloaded + AddHandler IMPA.ProgressUpdated, AddressOf IMPAProgressUpdated + AddHandler MPDB.PostersDownloaded, AddressOf MPDBPostersDownloaded + AddHandler MPDB.ProgressUpdated, AddressOf MPDBProgressUpdated + AddHandler IMDB.PostersDownloaded, AddressOf IMDBPostersDownloaded + AddHandler IMDB.ProgressUpdated, AddressOf IMDBProgressUpdated + AddHandler FANARTTVs.PostersDownloaded, AddressOf FANARTTVPostersDownloaded + AddHandler FANARTTVs.ProgressUpdated, AddressOf FANARTTVProgressUpdated + AddHandler IMPADone, AddressOf IMPADoneDownloading + AddHandler TMDBDone, AddressOf TMDBDoneDownloading + AddHandler MPDBDone, AddressOf MPDBDoneDownloading + AddHandler IMDBDone, AddressOf IMDBDoneDownloading + AddHandler FANARTTVDone, AddressOf FANARTTVDoneDownloading + + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlBG.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlBG) + + If Me.DLType = Enums.ImageType.Posters Then + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = True + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = True + Me.pnlMDB.Visible = True + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 328 + Me.pnlDLStatus.Top = 82 + Else + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = True + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 129 + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(tMovie.Filename) + End If + End If + + CachePath = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, tMovie.Movie.IMDBID, Path.DirectorySeparatorChar, If(Me.DLType = Enums.ImageType.Posters, "posters", "fanart")) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview", True) + Me.chkThumb.Text = Master.eLang.GetString(41, "Check All Thumb") + Me.chkMid.Text = Master.eLang.GetString(42, "Check All Mid") + Me.chkOriginal.Text = Master.eLang.GetString(43, "Check All Original") + Me.lblInfo.Text = Master.eLang.GetString(44, "Selected item will be set as fanart. All checked items will be saved to \extrathumbs.") + Me.lblDL5.Text = Master.eLang.GetString(45, "Performing Preliminary Tasks...") + Me.lblDL4.Text = Me.lblDL5.Text + Me.lblDL3.Text = Me.lblDL5.Text + Me.lblDL2.Text = Me.lblDL5.Text + Me.Label2.Text = Master.eLang.GetString(46, "Downloading Selected Image...") + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(0, sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Function RemoveServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Sub SetupSizes(ByVal ParentID As String) + Try + rbXLarge.Checked = False + rbXLarge.Enabled = False + rbXLarge.Text = Master.eLang.GetString(47, "Original") + rbLarge.Checked = False + rbLarge.Enabled = False + rbMedium.Checked = False + rbSmall.Checked = False + rbSmall.Enabled = False + If Me.DLType = Enums.ImageType.Fanart Then + rbLarge.Text = "w1280" + rbMedium.Text = "poster" + rbSmall.Text = "thumb" + Else + rbLarge.Text = Master.eLang.GetString(48, "Cover") + rbMedium.Text = Master.eLang.GetString(49, "Medium") + rbSmall.Text = Master.eLang.GetString(50, "Small") + End If + + For Each TMDBPoster As MediaContainers.Image In TMDBPosters.Where(Function(f) f.ParentID = ParentID) + Select Case TMDBPoster.Description + Case "original" + ' xlarge + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbXLarge.Enabled = True + rbXLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "cover" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "w1280" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format("w1280 ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + End If + Case "thumb" + ' small + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbSmall.Enabled = True + rbSmall.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "mid" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + Case "poster" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format("Poster ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + End Select + Next + + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Small + rbSmall.Checked = rbSmall.Enabled + Case Enums.PosterSize.Mid + rbMedium.Checked = rbMedium.Enabled + Case Enums.PosterSize.Lrg + rbLarge.Checked = rbLarge.Enabled + Case Enums.PosterSize.Xlrg + rbXLarge.Checked = rbXLarge.Enabled + End Select + + pnlSize.Visible = True + + Invalidate() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub StartDownload() + Try + Select Case Me.DLType + Case Enums.ImageType.Posters + Me.GetPosters() + Case Enums.ImageType.Fanart + Me.GetFanart() + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBDoneDownloading() + Try + Me._tmdbDone = True + Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL2.Value = 0 + + 'Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = Posters.Count + + Me.TMDBPosters = Posters + + Me.bwTMDBDownload.WorkerSupportsCancellation = True + Me.bwTMDBDownload.WorkerReportsProgress = True + Me.bwTMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL2.Value = iPercent + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Scraper/dlgTMDBSearchResults.Designer.vb b/Addons/scraper.MPDB.Poster/Scraper/dlgTMDBSearchResults.Designer.vb new file mode 100644 index 0000000..edf9f3b --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/dlgTMDBSearchResults.Designer.vb @@ -0,0 +1,460 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTMDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtTMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(497, 401) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(570, 401) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(4, 96) + Me.tvResults.Name = "tvResults" + Me.tvResults.ShowLines = False + Me.tvResults.ShowPlusMinus = False + Me.tvResults.ShowRootLines = False + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 4 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(294, 130) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(291, 70) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(291, 89) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(294, 295) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(472, 130) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(472, 156) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(472, 183) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtTMDBID + ' + Me.txtTMDBID.Enabled = False + Me.txtTMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBID.Location = New System.Drawing.Point(139, 399) + Me.txtTMDBID.Name = "txtTMDBID" + Me.txtTMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtTMDBID.TabIndex = 6 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(643, 64) + Me.pnlTop.TabIndex = 8 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(257, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(4, 403) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(130, 17) + Me.chkManual.TabIndex = 5 + Me.chkManual.Text = "Manual TMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(245, 399) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 7 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(472, 247) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(37, 13) + Me.lblIMDB.TabIndex = 20 + Me.lblIMDB.Text = "TMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(410, 130) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(33, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(410, 156) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(410, 183) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(410, 247) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(56, 13) + Me.lblIMDBHeader.TabIndex = 19 + Me.lblIMDBHeader.Text = "TMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(291, 279) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(262, 70) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 3 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(4, 71) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 2 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(364, 183) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 18 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(100, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching TMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(308, 155) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'dlgTMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(643, 454) + Me.ControlBox = False + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtTMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgTMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents tvResults As System.Windows.Forms.TreeView + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lblYear As System.Windows.Forms.Label + Friend WithEvents lblDirector As System.Windows.Forms.Label + Friend WithEvents lblGenre As System.Windows.Forms.Label + Friend WithEvents txtTMDBID As System.Windows.Forms.TextBox + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents lblIMDB As System.Windows.Forms.Label + Friend WithEvents lblYearHeader As System.Windows.Forms.Label + Friend WithEvents lblDirectorHeader As System.Windows.Forms.Label + Friend WithEvents lblGenreHeader As System.Windows.Forms.Label + Friend WithEvents lblIMDBHeader As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel + Friend WithEvents Label4 As System.Windows.Forms.Label + +End Class diff --git a/Addons/scraper.MPDB.Poster/Scraper/dlgTMDBSearchResults.resx b/Addons/scraper.MPDB.Poster/Scraper/dlgTMDBSearchResults.resx new file mode 100644 index 0000000..017a5ad --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/dlgTMDBSearchResults.resx @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + gg== +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA + CukB/XXO0wAAAepJREFUOE+lkktIG1EUhkeFaLQ+UGulgthNEUHRCrqyIHZTdSd0Iyq46cL3Sly50ppV + uywYi2uDiyKK1ioFk0lm7mSmSgymJuIqSkwwCTVpGs3fM0Pa+poWceBj4N5zvnvOuZcDwN2HeyWrB98Q + LFosuRJjz51O6cXmxsaj/1V3RSAx8fVXRQnIsgwVRZHjJHr7L8kfAROFPoWS3G43gicnCIVC8O7vQ11z + StKsnkQTrK6sGCSJBXddLpyfJ5FKpTTUz+f1gvbA22w1t0k0AW3WCYIAv9+PZPIn4vGYRiLxA+HwKRhj + EByOIV2BdWur3mG34/j4iJISiEYjRBSx2BkikQiYKOJQ4ft1BZ/X13NIEHalW1CrUEVACj6fF4yqe2W2 + TegK0m0MiBSoziEQCNAQg/B4PPi2I8Fk+QJucBnZI0vvrkuuXCPP8+PU63dC7RnbTvHi/cKnA2O3GYbu + OeT0ziOv58Na8djHgt+iGw+JHk+pzWrtpMF27cn2Ko7jMnLbTebCl1MoaH+D/I4ZFHbM7FZ0ThtvfYl6 + 913WMjFc2jyGkqZRlNC/om2yXBNk0RFEEfGEqCZqiXriGdGYpoHCHhdXtg6W1fQKD592mQwZ3N8KKCiL + yCaMRB7xgMi/zuXqMinnTi3otfYLj6yxrhdJtZ8AAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Scraper/dlgTMDBSearchResults.vb b/Addons/scraper.MPDB.Poster/Scraper/dlgTMDBSearchResults.vb new file mode 100644 index 0000000..d05fd0b --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/dlgTMDBSearchResults.vb @@ -0,0 +1,462 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb + +Public Class dlgTMDBSearchResults + +#Region "Fields" + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + Friend WithEvents tmrLoad As New System.Windows.Forms.Timer + Friend WithEvents tmrWait As New System.Windows.Forms.Timer + + Private TMDBg As TMDBg.Scraper + Private sHTTP As New HTTP + Private _currnode As Integer = -1 + Private _prevnode As Integer = -2 + Private MySettings As EmberTMDBScraperModule.sMySettings + 'Private TMDBConf As V3.TmdbConfiguration + 'Private TMDBApi As V3.Tmdb + + Private _InfoCache As New Dictionary(Of String, MediaContainers.Movie) + Private _PosterCache As New Dictionary(Of String, System.Drawing.Image) + Private _filterOptions As Structures.ScrapeOptions + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(_MySettings As EmberTMDBScraperModule.sMySettings, _TMDBg As TMDBg.Scraper) + + ' This call is required by the designer. + InitializeComponent() + 'TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + 'TMDBConf = TMDBApi.GetConfiguration() + MySettings = _MySettings + TMDBg = _TMDBg + End Sub + + + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + _filterOptions = filterOptions + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + chkManual.Enabled = False + 'TMDBg.IMDBURL = TMDBId + TMDBg.SearchMovieAsync(sMovieTitle, _filterOptions) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal Res As TMDBg.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + SearchResultsDownloaded(Res) + + Return MyBase.ShowDialog() + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.OK_Button.Enabled = False + pnlPicStatus.Visible = False + _InfoCache.Clear() + _PosterCache.Clear() + Me.ClearInfo() + Me.Label3.Text = Master.eLang.GetString(11, "Searching TMDB...") + Me.pnlLoading.Visible = True + chkManual.Enabled = False + TMDBg.CancelAsync() + 'IMDB.IMDBURL = IMDBURL + TMDBg.SearchMovieAsync(Me.txtSearch.Text, _filterOptions) + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + TMDBg.GetSearchMovieInfoAsync(Me.txtTMDBID.Text, Master.tmpMovie, Master.DefaultOptions) + + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + sHTTP.StartDownloadImage(Args.pURL) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image, .IMDBId = Args.IMDBId} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + '// + ' Thread finished: display pic if it was able to get one + '\\ + + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbPoster.Image = Res.Result + If Not _PosterCache.ContainsKey(Res.IMDBId) Then + _PosterCache.Add(Res.IMDBId, Res.Result) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + pnlPicStatus.Visible = False + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Master.tmpMovie.Clear() + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtTMDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.tvResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtTMDBID.Text = String.Empty + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblTagline.Text = String.Empty + Me.lblYear.Text = String.Empty + Me.lblDirector.Text = String.Empty + Me.lblGenre.Text = String.Empty + Me.txtOutline.Text = String.Empty + Me.lblIMDB.Text = String.Empty + Me.pbPoster.Image = Nothing + + Master.tmpMovie.Clear() + + TMDBg.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.lblYearHeader.Visible = areVisible + Me.lblDirectorHeader.Visible = areVisible + Me.lblGenreHeader.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.lblIMDBHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + Me.lblYear.Visible = areVisible + Me.lblTagline.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblDirector.Visible = areVisible + Me.lblGenre.Visible = areVisible + Me.lblIMDB.Visible = areVisible + Me.pbPoster.Visible = areVisible + End Sub + + Private Sub dlgIMDBSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub dlgIMDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + pnlPicStatus.Visible = False + 'TMDBg.IMDBURL = IMDBURL + AddHandler TMDBg.SearchMovieInfoDownloaded, AddressOf SearchMovieInfoDownloaded + AddHandler TMDBg.SearchResultsDownloaded, AddressOf SearchResultsDownloaded + + Try + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgIMDBSearchResults_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + Me.tvResults.Focus() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + If Me.chkManual.Checked AndAlso Me.btnVerify.Enabled Then + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Master.tmpMovie.IMDBID = Me.txtTMDBID.Text + End If + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.Close() + End Sub + + Private Sub SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + '// + ' Info downloaded... fill form with data + '\\ + + Me.pnlLoading.Visible = False + Me.OK_Button.Enabled = True + + Try + If bSuccess Then + Me.ControlsVisible(True) + Me.lblTitle.Text = Master.tmpMovie.Title + Me.lblTagline.Text = Master.tmpMovie.Tagline + Me.lblYear.Text = Master.tmpMovie.Year + Me.lblDirector.Text = Master.tmpMovie.Director + Me.lblGenre.Text = Master.tmpMovie.Genre + Me.txtOutline.Text = Master.tmpMovie.Outline + Me.lblIMDB.Text = Master.tmpMovie.IMDBID + + If _PosterCache.ContainsKey(Master.tmpMovie.TMDBID) Then + 'just set it + Me.pbPoster.Image = _PosterCache(Master.tmpMovie.TMDBID) + Else + 'go download it, if available + If Not String.IsNullOrEmpty(sPoster) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + pnlPicStatus.Visible = True + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = sPoster, .IMDBId = Master.tmpMovie.TMDBID}) + End If + + End If + + 'store clone of tmpmovie + If Not _InfoCache.ContainsKey(Master.tmpMovie.TMDBID) Then + _InfoCache.Add(Master.tmpMovie.TMDBID, GetMovieClone(Master.tmpMovie)) + End If + + + Me.btnVerify.Enabled = False + Else + If Me.chkManual.Checked Then + MsgBox(Master.eLang.GetString(15, "Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again."), MsgBoxStyle.Exclamation, Master.eLang.GetString(16, "Verification Failed")) + Me.btnVerify.Enabled = True + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SearchResultsDownloaded(ByVal M As TMDBg.MovieSearchResults) + '// + ' Process the results that IMDB gave us + '\\ + 'Dim TnP As New TreeNode + 'Dim selNode As New TreeNode + + Try + Me.tvResults.Nodes.Clear() + Me.ClearInfo() + If Not IsNothing(M) AndAlso M.Matches.Count > 0 Then + + 'M.Matches.Sort() + For Each Movie As MediaContainers.Movie In M.Matches + 'TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Me.tvResults.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.TMDBID}) + Next + 'TnP.Expand() + 'Me.tvResults.Nodes.Add(TnP) + 'selNode = Me.tvResults.Nodes(0) + 'selNode = TnP.FirstNode + 'selNode = Me.tvResults.Nodes(0) + Me.tvResults.SelectedNode = Me.tvResults.Nodes(0) + + Me._prevnode = -2 + + Me.tvResults.Focus() + Else + Me.tvResults.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(20, "No Matches Found")}) + End If + Me.pnlLoading.Visible = False + chkManual.Enabled = True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.Label2.Text = Master.eLang.GetString(21, "View details of each result to find the proper movie.") + Me.Label1.Text = Master.eLang.GetString(22, "Movie Search Results") + Me.chkManual.Text = Master.eLang.GetString(23, "Manual TMDB Entry:") + Me.btnVerify.Text = Master.eLang.GetString(24, "Verify") + Me.lblYearHeader.Text = Master.eLang.GetString(49, "Year:", True) + Me.lblDirectorHeader.Text = Master.eLang.GetString(239, "Director:", True) + Me.lblGenreHeader.Text = Master.eLang.GetString(51, "Genre(s):", True) + Me.lblIMDBHeader.Text = Master.eLang.GetString(116, "TMDB ID:") + Me.lblPlotHeader.Text = Master.eLang.GetString(242, "Plot Outline:", True) + Me.Label3.Text = Master.eLang.GetString(25, "Searching TMDB...") + End Sub + + Private Sub tmrLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoad.Tick + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + Me.pnlLoading.Visible = True + Me.Label3.Text = Master.eLang.GetString(26, "Downloading details...") + + 'IMDB.IMDBURL = IMDBURL + TMDBg.GetSearchMovieInfoAsync(Me.tvResults.SelectedNode.Tag.ToString, Master.tmpMovie, Master.DefaultOptions) + End Sub + + Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrWait.Tick + If Not Me._prevnode = Me._currnode Then + Me._prevnode = Me._currnode + Me.tmrWait.Stop() + Me.tmrLoad.Start() + Else + Me.tmrLoad.Stop() + Me.tmrWait.Stop() + End If + End Sub + + Private Sub tvResults_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvResults.AfterSelect + Try + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + + Me.ClearInfo() + Me.OK_Button.Enabled = False + + If Not IsNothing(Me.tvResults.SelectedNode.Tag) AndAlso Not String.IsNullOrEmpty(Me.tvResults.SelectedNode.Tag.ToString) Then + Me._currnode = Me.tvResults.SelectedNode.Index + + 'check if this movie is in the cache already + If _InfoCache.ContainsKey(Me.tvResults.SelectedNode.Tag.ToString) Then + Master.tmpMovie = GetMovieClone(_InfoCache(Me.tvResults.SelectedNode.Tag.ToString)) + SearchMovieInfoDownloaded(String.Empty, True) + Return + End If + + Me.pnlLoading.Visible = True + Me.tmrWait.Start() + Else + Me.pnlLoading.Visible = False + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub tvResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub txtIMDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTMDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtIMDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBID.TextChanged + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Function GetMovieClone(ByVal original As MediaContainers.Movie) As MediaContainers.Movie + 'have to do this the old-fashioned way because it is not serializable + Dim result As New MediaContainers.Movie + With result + .IMDBID = original.IMDBID + .Genre = original.Genre + .Title = original.Title + .Tagline = original.Tagline + .Year = original.Year + .Director = original.Director + .Genre = original.Genre + .Outline = original.Outline + End With + Return result + 'Using mem As New IO.MemoryStream() + ' Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, New System.Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.Clone)) + ' bin.Serialize(mem, original) + ' mem.Seek(0, IO.SeekOrigin.Begin) + ' Return DirectCast(bin.Deserialize(mem), MediaContainers.Movie) + 'End Using + End Function + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim pURL As String + Dim IMDBId As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Image + Dim IMDBId As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.MPDB.Poster/Scraper/dlgTrailer.Designer.vb new file mode 100644 index 0000000..1865dbc --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/dlgTrailer.Designer.vb @@ -0,0 +1,279 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(290, 339) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(74, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(369, 339) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(411, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(424, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(112, 82) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(120, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(411, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(376, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(365, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(72, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(392, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(153, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 339) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(106, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(207, 339) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(77, 23) + Me.btnSetNfo.TabIndex = 4 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(444, 331) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(450, 366) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lbTrailers As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnPlayTrailer As System.Windows.Forms.Button + Friend WithEvents btnSetNfo As System.Windows.Forms.Button + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtYouTube As System.Windows.Forms.TextBox + Friend WithEvents btnBrowse As System.Windows.Forms.Button + Friend WithEvents txtManual As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog + Friend WithEvents btnGetTrailers As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.MPDB.Poster/Scraper/dlgTrailer.resx b/Addons/scraper.MPDB.Poster/Scraper/dlgTrailer.resx new file mode 100644 index 0000000..2be3cac --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/dlgTrailer.resx @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnGetTrailers.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAGHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3NPsx9OAAAB80lEQVQ4T6XTTWsTQRgH8EGr9GDFm19AseDBgzc9eba0FJqvIOTiRase + RAIKtRo9LbbxpYmtggXR2KRFqGLfDio9tDGbdUMrbvc1+57sioiVv7NDLE3MXnTgz8DsPr95dpglAMj/ + pKVY17QuyzLP2raVoBlybHvIc92EUKmcidukBTBrtasUAC0GLWYJggaWl5dw9056uBPSAtDi8aiYAY4N + 13HwLQyxuLiAW6OjyIyPXW5H2gFuZ/cm4HseNFVFsTCD2WIRHz+8P7cb6Qjs7iDqIkLCMEC97kedZWMB + egasA8s24TsBQm8bob8N3w3YZzUzFgsYus6ZZo0WhPisvMackGQR5Dm2xnDLjAdUVeF0XUPD/Yl31eu4 + sURY3orXaDe/EOGGoccDsrzFKYoMz/yON0IaqYVDLPPCTdTtH6D3BKqixANfNjc5SZJga3XMlm5jeP4w + S6E0AsdoQJFlbElSPMCXy/ekDQUTK1eQzB/B+cJxlmT+KB6sXID61UBVFDOxh7i+tjbCf+KxXl7FpZeD + SOR6WS6+6EepsgpREFHh+XRHYC8hB/r7+k7kshOZ/PSrZ7mn2cnTqd7qqdSxjUdPHk7NPC9OT00+vj84 + MHByDyEH/yA7F4kC+wgh3dGDaDTnHkK6etrWuum7+/8C/vWX/g1N2vpUAmZdeAAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnPlayTrailer.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAACwwAAAsMAT9AIsgAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfZBBoSIQHX+6QX + AAACOElEQVQ4T7WSTWvaQRCHozlYNQSiVXwBNSSKKAhqKogo2hx8OeUQpPVY9OBFId+g0IufoQnegslF + EEG8qAgeiij4hohoDjkphJAIGg/udGepfyLV3rowLDu788zs/GZv73+st7e35NPT069KpfJaLpdnj4+P + nel0+p3mOvhnvoeHh0+j0WieTCbB6XSSYDAIoVAIXC4Xicfj0Ov1IJ/Pf9kKweBisQharZbY7XbweDxg + sVjg7OwM8Ix2enpK7u/v4e7u7ttfEJp5QZ3k8PAQ1Go1hMNhyGazIJFIQKVSMd/R0RHgm2azCQqFQsNB + FovFFZZLHZz5fD7AlU6nmY/H43F3NpsNWq3WLQeYz+d1JL8H4BfW6+bmZgOO77rd7isHqNfrM3Ty+XzY + 399n5vV6WfxqtWL79fX1RiWlUgnPHxlkDRAKhSASiUAsFoPf72eBhBAGeXl5AZlMBgKBgIGoxLirGOD5 + +blL/0iwSVKpFORyOVxcXHAV0HtUhzUUm4yATqezpPsHBphMJj8uLy9BqVSCRqOB4+NjiEQiDICZUU6d + TseUQLjb7YZqtVp6L+UBlREBxGg0soBoNArL5RJQDavVCmazGecAKyTtdhtOTk68G7OQy+W+1mo1MJlM + hE4hA2BV5+fnLKPD4QC9Xk8KhQKkUqmfW6cxk8nE6ERCIpFgkxgIBFgzERCLxWAwGOwOXhPpPzWNRuN2 + PB7P+v0+oA2HwyWVrWIwGD5vzbzDyaN++R+phLsCfwMUR2eb8uMbUAAAAABJRU5ErkJggg== +</value> + </data> + <metadata name="ofdTrailer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>40</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Scraper/dlgTrailer.vb b/Addons/scraper.MPDB.Poster/Scraper/dlgTrailer.vb new file mode 100644 index 0000000..d63ea34 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/dlgTrailer.vb @@ -0,0 +1,465 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb +Imports EmberScraperModule.EmberTMDBScraperModule + +Public Class dlgTrailer + +#Region "Fields" + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Friend WithEvents bwCompileList As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwDownloadTrailer As New System.ComponentModel.BackgroundWorker + + Private cTrailer As Trailers + Private imdbID As String = String.Empty + Private prePath As String = String.Empty + Private sPath As String = String.Empty + Private tArray As New List(Of String) + Private tURL As String = String.Empty + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = TMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + cTrailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + End Sub + + Public Overloads Function ShowDialog(ByVal _imdbID As String, ByVal _sPath As String) As String + Me.imdbID = _imdbID + Me.sPath = _sPath + + If MyBase.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + Return Replace(Me.tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + Return Me.tURL + End If + Else + Return String.Empty + End If + End Function + + Protected Overrides Sub Finalize() + cTrailer = Nothing + MyBase.Finalize() + End Sub + + Private Sub BeginDownload(ByVal CloseDialog As Boolean) + Dim didCancel As Boolean = False + + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(56, "Downloading selected trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + If CloseDialog Then + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, Path.GetFileName(Me.prePath)) + FileUtils.Common.MoveFileWithStream(Me.prePath, Me.tURL) + + File.Delete(Me.prePath) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.prePath, """")) + didCancel = True + End If + ElseIf Me.txtManual.Text.Length > 0 Then + Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + If CloseDialog Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.txtManual.Text, """")) + didCancel = True + End If + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + didCancel = True + End If + ElseIf Regex.IsMatch(Me.txtYouTube.Text, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.txtYouTube.Text) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + ElseIf StringUtils.isValidURL(Me.txtYouTube.Text) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = Me.txtYouTube.Text, .bType = CloseDialog}) + Else + If Regex.IsMatch(Me.lbTrailers.SelectedItem.ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.lbTrailers.SelectedItem.ToString) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + Else + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = lbTrailers.SelectedItem.ToString, .bType = CloseDialog}) + End If + End If + + If didCancel Then + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + End Sub + + Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click + Try + With ofdTrailer + .InitialDirectory = Directory.GetParent(Master.currMovie.Filename).FullName + .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.ValidExts.ToArray(), ";*")) + .FilterIndex = 0 + End With + + If ofdTrailer.ShowDialog() = DialogResult.OK Then + txtManual.Text = ofdTrailer.FileName + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub btnGetTrailers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTrailers.Click + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.pnlStatus.Visible = True + + Me.bwCompileList = New System.ComponentModel.BackgroundWorker + Me.bwCompileList.WorkerSupportsCancellation = True + Me.bwCompileList.RunWorkerAsync() + End Sub + + Private Sub btnPlayTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayTrailer.Click + Try + Me.BeginDownload(False) + Catch + MsgBox(Master.eLang.GetString(58, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), MsgBoxStyle.Critical, Master.eLang.GetString(59, "Error Playing Trailer")) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Try + End Sub + + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click + + If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(62, "Moving specified file to trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + File.Move(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + Else + Dim didCancel As Boolean = False + + If StringUtils.isValidURL(Me.txtYouTube.Text) Then + tURL = Me.txtYouTube.Text + ElseIf Me.lbTrailers.SelectedItems.Count > 0 Then + tURL = lbTrailers.SelectedItem.ToString + Else + didCancel = True + End If + + If Not didCancel Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + + End Sub + + Private Sub bwCompileList_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwCompileList.DoWork + Try + tArray = cTrailer.GetTrailers(Me.imdbID, False) + + If Me.bwCompileList.CancellationPending Then + e.Cancel = True + End If + Catch + End Try + End Sub + + Private Sub bwCompileList_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwCompileList.RunWorkerCompleted + If Not e.Cancelled Then + If Me.tArray.Count > 0 Then + For Each tTrail As String In Me.tArray + Me.lbTrailers.Items.Add(tTrail) + Next + + Me.btnGetTrailers.Visible = False + Else + Me.btnGetTrailers.Enabled = False + End If + + End If + + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Sub + + Private Sub bwDownloadTrailer_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTrailer.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + + If Args.bType Then + Me.tURL = cTrailer.DownloadTrailer(Me.sPath, Args.Parameter) + Else + Me.prePath = cTrailer.DownloadTrailer(Path.Combine(Master.TempPath, Path.GetFileName(Me.sPath)), Args.Parameter) + End If + + Catch + End Try + + e.Result = Args.bType + + If Me.bwDownloadTrailer.CancellationPending Then + e.Cancel = True + End If + End Sub + + Private Sub bwDownloadTrailer_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwDownloadTrailer.ProgressChanged + pbStatus.Value = e.ProgressPercentage + End Sub + + Private Sub bwDownloadTrailer_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadTrailer.RunWorkerCompleted + If Not e.Cancelled Then + If Convert.ToBoolean(e.Result) Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + If Not String.IsNullOrEmpty(Me.prePath) Then System.Diagnostics.Process.Start(String.Concat("""", prePath, """")) + End If + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.cTrailer.Cancel() + + If Me.bwCompileList.IsBusy Then Me.bwCompileList.CancelAsync() + If Me.bwDownloadTrailer.IsBusy Then Me.bwDownloadTrailer.CancelAsync() + + While Me.bwCompileList.IsBusy OrElse Me.bwDownloadTrailer.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + AddHandler cTrailer.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + + Private Sub dlgTrailer_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub DownloadProgressUpdated(ByVal iProgress As Integer) + bwDownloadTrailer.ReportProgress(iProgress) + End Sub + + Private Sub lbTrailers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbTrailers.SelectedIndexChanged + Me.SetEnabled(True) + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.BeginDownload(True) + End Sub + + Private Sub SetEnabled(ByVal DeletePre As Boolean) + If DeletePre AndAlso Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + File.Delete(Me.prePath) + Me.prePath = String.Empty + End If + + If StringUtils.isValidURL(Me.txtYouTube.Text) OrElse Me.lbTrailers.SelectedItems.Count > 0 OrElse Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Enabled = True + Me.btnSetNfo.Enabled = True + Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") + Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") + Else + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + Else + Me.OK_Button.Enabled = False + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnPlayTrailer.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(64, "Select Trailer") + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.GroupBox1.Text = Master.eLang.GetString(65, "Select Trailer to Download") + Me.GroupBox2.Text = Master.eLang.GetString(66, "Manual Trailer Entry") + Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") + Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") + Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") + End Sub + + Private Sub txtManual_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtManual.TextChanged + Me.SetEnabled(True) + End Sub + + Private Sub txtYouTube_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtYouTube.TextChanged + Me.SetEnabled(True) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim bType As Boolean + Dim Parameter As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.MPDB.Poster/Scraper/dlgTrailerFormat.Designer.vb new file mode 100644 index 0000000..22f1374 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/dlgTrailerFormat.Designer.vb @@ -0,0 +1,155 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailerFormat + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(84, 117) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(154, 117) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(17, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(78, 69) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(53, 2) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(114, 100) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(10, 29) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.pnlStatus) + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(2, 4) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(220, 111) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 143) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lstFormats As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.MPDB.Poster/Scraper/dlgTrailerFormat.resx b/Addons/scraper.MPDB.Poster/Scraper/dlgTrailerFormat.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/dlgTrailerFormat.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/Scraper/dlgTrailerFormat.vb b/Addons/scraper.MPDB.Poster/Scraper/dlgTrailerFormat.vb new file mode 100644 index 0000000..8f0ad6e --- /dev/null +++ b/Addons/scraper.MPDB.Poster/Scraper/dlgTrailerFormat.vb @@ -0,0 +1,114 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTrailerFormat + +#Region "Fields" + + Private WithEvents YouTube As YouTube.Scraper + Private _selectedformaturl As String + Private _yturl As String + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal YTURL As String) As String + Me._yturl = YTURL + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return _selectedformaturl + Else + Return String.Empty + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailerFormat_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + Me.SetUp() + + lstFormats.DataSource = Nothing + + YouTube = New YouTube.Scraper + YouTube.GetVideoLinksAsync(Me._yturl) + + Catch ex As Exception + MsgBox(Master.eLang.GetString(71, "The video format links could not be retrieved."), MsgBoxStyle.Critical, Master.eLang.GetString(72, "Error Retrieving Video Format Links")) + End Try + End Sub + + Private Sub lstFormats_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFormats.SelectedIndexChanged + Try + Me._selectedformaturl = DirectCast(lstFormats.SelectedItem, YouTube.VideoLinkItem).URL + + If Me.lstFormats.SelectedItems.Count > 0 Then + Me.OK_Button.Enabled = True + Else + Me.OK_Button.Enabled = False + End If + Catch + End Try + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(73, "Select Format") + Me.lblStatus.Text = Master.eLang.GetString(74, "Getting available formats...") + Me.GroupBox1.Text = Master.eLang.GetString(75, "Available Formats") + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub YouTube_VideoLinksRetrieved(ByVal bSuccess As Boolean) Handles YouTube.VideoLinksRetrieved + Try + + If bSuccess Then + lstFormats.DataSource = YouTube.VideoLinks.Values.ToList + lstFormats.DisplayMember = "Description" + lstFormats.ValueMember = "URL" + + If YouTube.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + Me.lstFormats.SelectedIndex = YouTube.VideoLinks.IndexOfKey(Master.eSettings.PreferredTrailerQuality) + ElseIf Me.lstFormats.Items.Count = 1 Then + Me.lstFormats.SelectedIndex = 0 + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + Me.pnlStatus.Visible = False + Me.lstFormats.Enabled = True + End Try + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/frmTMDBInfoSettingsHolder.Designer.vb b/Addons/scraper.MPDB.Poster/frmTMDBInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..f610c2c --- /dev/null +++ b/Addons/scraper.MPDB.Poster/frmTMDBInfoSettingsHolder.Designer.vb @@ -0,0 +1,545 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTMDBInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.chkFallBackEng = New System.Windows.Forms.CheckBox() + Me.cbTMDBPrefLanguage = New System.Windows.Forms.ComboBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtTMDBApiKey = New System.Windows.Forms.TextBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.txtFANARTTVApiKey = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.pbTMDB = New System.Windows.Forms.PictureBox() + Me.pbFANARTTV = New System.Windows.Forms.PictureBox() + Me.GroupBox30.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + Me.GroupBox1.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.pbTMDB) + Me.GroupBox30.Controls.Add(Me.chkFallBackEng) + Me.GroupBox30.Controls.Add(Me.cbTMDBPrefLanguage) + Me.GroupBox30.Controls.Add(Me.Label3) + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtTMDBApiKey) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(309, 123) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "TMDB" + ' + 'chkFallBackEng + ' + Me.chkFallBackEng.AutoSize = True + Me.chkFallBackEng.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFallBackEng.Location = New System.Drawing.Point(8, 100) + Me.chkFallBackEng.Name = "chkFallBackEng" + Me.chkFallBackEng.Size = New System.Drawing.Size(129, 17) + Me.chkFallBackEng.TabIndex = 4 + Me.chkFallBackEng.Text = "Fall back on english" + Me.chkFallBackEng.UseVisualStyleBackColor = True + ' + 'cbTMDBPrefLanguage + ' + Me.cbTMDBPrefLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTMDBPrefLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTMDBPrefLanguage.FormattingEnabled = True + Me.cbTMDBPrefLanguage.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTMDBPrefLanguage.Location = New System.Drawing.Point(123, 65) + Me.cbTMDBPrefLanguage.Name = "cbTMDBPrefLanguage" + Me.cbTMDBPrefLanguage.Size = New System.Drawing.Size(45, 21) + Me.cbTMDBPrefLanguage.TabIndex = 3 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label3.Location = New System.Drawing.Point(6, 68) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(111, 13) + Me.Label3.TabIndex = 2 + Me.Label3.Text = "Preferred Language:" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(79, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "TMDB API Key:" + ' + 'txtTMDBApiKey + ' + Me.txtTMDBApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtTMDBApiKey.Name = "txtTMDBApiKey" + Me.txtTMDBApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtTMDBApiKey.TabIndex = 1 + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pbFANARTTV) + Me.GroupBox1.Controls.Add(Me.Label5) + Me.GroupBox1.Controls.Add(Me.txtFANARTTVApiKey) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(8, 169) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(309, 71) + Me.GroupBox1.TabIndex = 75 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Fanart.tv" + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.Location = New System.Drawing.Point(6, 18) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(94, 13) + Me.Label5.TabIndex = 0 + Me.Label5.Text = "Fanart.tv API Key:" + ' + 'txtFANARTTVApiKey + ' + Me.txtFANARTTVApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtFANARTTVApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtFANARTTVApiKey.Name = "txtFANARTTVApiKey" + Me.txtFANARTTVApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtFANARTTVApiKey.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(323, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(283, 150) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(225, 17) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(52, 17) + Me.chkCrew.TabIndex = 19 + Me.chkCrew.Text = "Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(131, 123) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 89) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 72) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 89) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 123) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(131, 106) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 106) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 72) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'pbTMDB + ' + Me.pbTMDB.Image = CType(resources.GetObject("pbTMDB.Image"), System.Drawing.Image) + Me.pbTMDB.Location = New System.Drawing.Point(287, 34) + Me.pbTMDB.Name = "pbTMDB" + Me.pbTMDB.Size = New System.Drawing.Size(16, 16) + Me.pbTMDB.TabIndex = 5 + Me.pbTMDB.TabStop = False + ' + 'pbFANARTTV + ' + Me.pbFANARTTV.Image = CType(resources.GetObject("pbFANARTTV.Image"), System.Drawing.Image) + Me.pbFANARTTV.Location = New System.Drawing.Point(287, 34) + Me.pbFANARTTV.Name = "pbFANARTTV" + Me.pbFANARTTV.Size = New System.Drawing.Size(16, 16) + Me.pbFANARTTV.TabIndex = 6 + Me.pbFANARTTV.TabStop = False + ' + 'frmTMDBInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox + Friend WithEvents Label18 As System.Windows.Forms.Label + Friend WithEvents txtTMDBApiKey As System.Windows.Forms.TextBox + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents gbOptions As System.Windows.Forms.GroupBox + Friend WithEvents chkCountry As System.Windows.Forms.CheckBox + Friend WithEvents chkStudio As System.Windows.Forms.CheckBox + Friend WithEvents chkRuntime As System.Windows.Forms.CheckBox + Friend WithEvents chkOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkTagline As System.Windows.Forms.CheckBox + Friend WithEvents chkCast As System.Windows.Forms.CheckBox + Friend WithEvents chkVotes As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailer As System.Windows.Forms.CheckBox + Friend WithEvents chkRating As System.Windows.Forms.CheckBox + Friend WithEvents chkRelease As System.Windows.Forms.CheckBox + Friend WithEvents chkMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkYear As System.Windows.Forms.CheckBox + Friend WithEvents chkTitle As System.Windows.Forms.CheckBox + Friend WithEvents chkFallBackEng As System.Windows.Forms.CheckBox + Friend WithEvents cbTMDBPrefLanguage As System.Windows.Forms.ComboBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents chkCrew As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label5 As System.Windows.Forms.Label + Friend WithEvents txtFANARTTVApiKey As System.Windows.Forms.TextBox + Friend WithEvents pbTMDB As System.Windows.Forms.PictureBox + Friend WithEvents pbFANARTTV As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.MPDB.Poster/frmTMDBInfoSettingsHolder.resx b/Addons/scraper.MPDB.Poster/frmTMDBInfoSettingsHolder.resx new file mode 100644 index 0000000..b1bac92 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/frmTMDBInfoSettingsHolder.resx @@ -0,0 +1,223 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="pbFANARTTV.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + RK5CYII= +</value> + </data> + <data name="pbTMDB.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/frmTMDBInfoSettingsHolder.vb b/Addons/scraper.MPDB.Poster/frmTMDBInfoSettingsHolder.vb new file mode 100644 index 0000000..d17768a --- /dev/null +++ b/Addons/scraper.MPDB.Poster/frmTMDBInfoSettingsHolder.vb @@ -0,0 +1,218 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports System.Diagnostics + +Public Class frmTMDBInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + Public Event SetupNeedsRestart() + +#End Region 'Events + +#Region "Fields" + + Private Api1 As String + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Private Sub chkCrew_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFallBackEng_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkFallBackEng.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTMDBPrefLanguage_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cbTMDBPrefLanguage.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtFANARTTVApiKey_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtFANARTTVApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Enter + Api1 = txtTMDBApiKey.Text + End Sub + + Private Sub txtTMDBApiKey_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextValidated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Validated + If Not (Api1 = txtTMDBApiKey.Text) Then + RaiseEvent SetupNeedsRestart() + End If + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label18.Text = Master.eLang.GetString(854, "TMDB API Key:") + Me.gbOptions.Text = Master.eLang.GetString(6, "Scraper Fields - Scraper specific") + Me.chkStudio.Text = Master.eLang.GetString(395, "Studio", True) + Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime", True) + Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline", True) + Me.chkGenre.Text = Master.eLang.GetString(20, "Genres", True) + Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline", True) + Me.chkCast.Text = Master.eLang.GetString(856, "Cast and Crew", True) + Me.chkVotes.Text = Master.eLang.GetString(399, "Votes", True) + Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer", True) + Me.chkRating.Text = Master.eLang.GetString(400, "Rating", True) + Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date", True) + Me.chkMPAA.Text = Master.eLang.GetString(859, "MPAA & Certification", True) + Me.chkYear.Text = Master.eLang.GetString(278, "Year", True) + Me.chkTitle.Text = Master.eLang.GetString(21, "Title", True) + 'Me.chkCertification.Text = Master.eLang.GetString(722, "Certification", True) + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkFallBackEng.Text = Master.eLang.GetString(114, "Fall back on english") + Me.Label3.Text = Master.eLang.GetString(115, "Preferred Language:") + + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + +#End Region 'Methods + + Private Sub PictureBox2_Click(sender As System.Object, e As System.EventArgs) Handles pbTMDB.Click + If Master.isWindows Then + Process.Start("http://docs.themoviedb.apiary.io/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://docs.themoviedb.apiary.io/" + Explorer.Start() + End Using + End If + + End Sub + + Private Sub pbFANARTTV_Click(sender As System.Object, e As System.EventArgs) Handles pbFANARTTV.Click + If Master.isWindows Then + Process.Start("http://fanart.tv/get-an-api-key/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://fanart.tv/get-an-api-key/" + Explorer.Start() + End Using + End If + + End Sub +End Class \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/frmTMDBMediaSettingsHolder.Designer.vb b/Addons/scraper.MPDB.Poster/frmTMDBMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..68e3c03 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/frmTMDBMediaSettingsHolder.Designer.vb @@ -0,0 +1,525 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTMDBMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBMediaSettingsHolder)) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.chkUseFANARTTV = New System.Windows.Forms.CheckBox() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkUseMPDB = New System.Windows.Forms.CheckBox() + Me.chkUseIMDBp = New System.Windows.Forms.CheckBox() + Me.chkUseIMPA = New System.Windows.Forms.CheckBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.cbManualETSize = New System.Windows.Forms.ComboBox() + Me.grpSaveFanart = New System.Windows.Forms.GroupBox() + Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() + Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() + Me.chkScrapePoster = New System.Windows.Forms.CheckBox() + Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.txtTimeout = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() + Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox9.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.grpSaveFanart.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.GroupBox3) + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Panel2) + Me.pnlSettings.Location = New System.Drawing.Point(12, 4) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 94 + Me.PictureBox1.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.GroupBox6) + Me.GroupBox3.Controls.Add(Me.GroupBox9) + Me.GroupBox3.Controls.Add(Me.GroupBox4) + Me.GroupBox3.Controls.Add(Me.grpSaveFanart) + Me.GroupBox3.Controls.Add(Me.chkScrapePoster) + Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(15, 31) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(505, 154) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Images" + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.chkUseFANARTTV) + Me.GroupBox6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox6.Location = New System.Drawing.Point(331, 21) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(160, 55) + Me.GroupBox6.TabIndex = 96 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Get Fanart From:" + ' + 'chkUseFANARTTV + ' + Me.chkUseFANARTTV.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseFANARTTV.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseFANARTTV.Location = New System.Drawing.Point(6, 21) + Me.chkUseFANARTTV.Name = "chkUseFANARTTV" + Me.chkUseFANARTTV.Size = New System.Drawing.Size(150, 22) + Me.chkUseFANARTTV.TabIndex = 2 + Me.chkUseFANARTTV.Text = "fanart.tv" + Me.chkUseFANARTTV.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseFANARTTV.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkUseMPDB) + Me.GroupBox9.Controls.Add(Me.chkUseIMDBp) + Me.GroupBox9.Controls.Add(Me.chkUseIMPA) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(165, 19) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(160, 78) + Me.GroupBox9.TabIndex = 5 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Get Poster From:" + ' + 'chkUseMPDB + ' + Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) + Me.chkUseMPDB.Name = "chkUseMPDB" + Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) + Me.chkUseMPDB.TabIndex = 2 + Me.chkUseMPDB.Text = "MoviePosterDB.com" + Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.UseVisualStyleBackColor = True + ' + 'chkUseIMDBp + ' + Me.chkUseIMDBp.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMDBp.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMDBp.Location = New System.Drawing.Point(6, 18) + Me.chkUseIMDBp.Name = "chkUseIMDBp" + Me.chkUseIMDBp.Size = New System.Drawing.Size(149, 19) + Me.chkUseIMDBp.TabIndex = 0 + Me.chkUseIMDBp.Text = "IMDB.com" + Me.chkUseIMDBp.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMDBp.UseVisualStyleBackColor = True + ' + 'chkUseIMPA + ' + Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) + Me.chkUseIMPA.Name = "chkUseIMPA" + Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) + Me.chkUseIMPA.TabIndex = 1 + Me.chkUseIMPA.Text = "IMPAwards.com" + Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.UseVisualStyleBackColor = True + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.cbManualETSize) + Me.GroupBox4.Location = New System.Drawing.Point(331, 94) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(160, 55) + Me.GroupBox4.TabIndex = 4 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "TMDB Extrathumbs Size:" + ' + 'cbManualETSize + ' + Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbManualETSize.FormattingEnabled = True + Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) + Me.cbManualETSize.Location = New System.Drawing.Point(12, 21) + Me.cbManualETSize.Name = "cbManualETSize" + Me.cbManualETSize.Size = New System.Drawing.Size(131, 21) + Me.cbManualETSize.TabIndex = 0 + ' + 'grpSaveFanart + ' + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) + Me.grpSaveFanart.Enabled = False + Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) + Me.grpSaveFanart.Name = "grpSaveFanart" + Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) + Me.grpSaveFanart.TabIndex = 2 + Me.grpSaveFanart.TabStop = False + Me.grpSaveFanart.Text = "Save Fanart In:" + ' + 'optFanartFolderExtraFanart + ' + Me.optFanartFolderExtraFanart.AutoSize = True + Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) + Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" + Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) + Me.optFanartFolderExtraFanart.TabIndex = 1 + Me.optFanartFolderExtraFanart.TabStop = True + Me.optFanartFolderExtraFanart.Text = "\extrafanart" + Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True + ' + 'optFanartFolderExtraThumbs + ' + Me.optFanartFolderExtraThumbs.AutoSize = True + Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) + Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" + Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) + Me.optFanartFolderExtraThumbs.TabIndex = 0 + Me.optFanartFolderExtraThumbs.TabStop = True + Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" + Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True + ' + 'chkScrapePoster + ' + Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) + Me.chkScrapePoster.Name = "chkScrapePoster" + Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) + Me.chkScrapePoster.TabIndex = 0 + Me.chkScrapePoster.Text = "Get Posters" + Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.UseVisualStyleBackColor = True + ' + 'chkScrapeFanart + ' + Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) + Me.chkScrapeFanart.Name = "chkScrapeFanart" + Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) + Me.chkScrapeFanart.TabIndex = 1 + Me.chkScrapeFanart.Text = "Get Fanart" + Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox1.Controls.Add(Me.Label23) + Me.GroupBox1.Controls.Add(Me.txtTimeout) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(15, 203) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(464, 126) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Trailers" + Me.GroupBox1.UseCompatibleTextRendering = True + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label23.Location = New System.Drawing.Point(21, 43) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(51, 13) + Me.Label23.TabIndex = 1 + Me.Label23.Text = "Timeout:" + ' + 'txtTimeout + ' + Me.txtTimeout.Enabled = False + Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTimeout.Location = New System.Drawing.Point(82, 39) + Me.txtTimeout.Name = "txtTimeout" + Me.txtTimeout.Size = New System.Drawing.Size(50, 22) + Me.txtTimeout.TabIndex = 2 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) + Me.GroupBox2.Controls.Add(Me.GroupBox5) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(165, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(291, 104) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Supported Sites:" + ' + 'chkTrailerIMDB + ' + Me.chkTrailerIMDB.AutoSize = True + Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) + Me.chkTrailerIMDB.Name = "chkTrailerIMDB" + Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) + Me.chkTrailerIMDB.TabIndex = 5 + Me.chkTrailerIMDB.Text = "IMDB" + Me.chkTrailerIMDB.UseVisualStyleBackColor = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) + Me.GroupBox5.Controls.Add(Me.Label2) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) + Me.GroupBox5.Location = New System.Drawing.Point(123, 12) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(161, 83) + Me.GroupBox5.TabIndex = 4 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Youtube/TMDB Trailer:" + ' + 'cbTrailerTMDBPref + ' + Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerTMDBPref.Enabled = False + Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTrailerTMDBPref.FormattingEnabled = True + Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) + Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" + Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) + Me.cbTrailerTMDBPref.TabIndex = 1 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label2.Location = New System.Drawing.Point(26, 26) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(111, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Preferred Language:" + ' + 'chkTrailerTMDBXBMC + ' + Me.chkTrailerTMDBXBMC.AutoSize = True + Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) + Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" + Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) + Me.chkTrailerTMDBXBMC.TabIndex = 1 + Me.chkTrailerTMDBXBMC.Text = "XBMC Format" + Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True + ' + 'chkTrailerTMDB + ' + Me.chkTrailerTMDB.AutoSize = True + Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) + Me.chkTrailerTMDB.Name = "chkTrailerTMDB" + Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) + Me.chkTrailerTMDB.TabIndex = 0 + Me.chkTrailerTMDB.Text = "Youtube/TMDB" + Me.chkTrailerTMDB.UseVisualStyleBackColor = True + ' + 'Panel2 + ' + Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Controls.Add(Me.btnDown) + Me.Panel2.Controls.Add(Me.btnUp) + Me.Panel2.Controls.Add(Me.cbEnabled) + Me.Panel2.Location = New System.Drawing.Point(0, 0) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(1125, 25) + Me.Panel2.TabIndex = 0 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(500, 7) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 12) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'frmTMDBMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.grpSaveFanart.ResumeLayout(False) + Me.grpSaveFanart.PerformLayout() + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents chkScrapeFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkScrapePoster As System.Windows.Forms.CheckBox + Friend WithEvents chkDownloadTrailer As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Panel2 As System.Windows.Forms.Panel + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Label23 As System.Windows.Forms.Label + Friend WithEvents txtTimeout As System.Windows.Forms.TextBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents grpSaveFanart As System.Windows.Forms.GroupBox + Friend WithEvents optFanartFolderExtraFanart As System.Windows.Forms.RadioButton + Friend WithEvents optFanartFolderExtraThumbs As System.Windows.Forms.RadioButton + Friend WithEvents chkTrailerTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDBXBMC As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents cbManualETSize As System.Windows.Forms.ComboBox + Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox + Friend WithEvents cbTrailerTMDBPref As System.Windows.Forms.ComboBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox9 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseMPDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMDBp As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMPA As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerIMDB As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseFANARTTV As System.Windows.Forms.CheckBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/frmTMDBMediaSettingsHolder.resx b/Addons/scraper.MPDB.Poster/frmTMDBMediaSettingsHolder.resx new file mode 100644 index 0000000..3c46229 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/frmTMDBMediaSettingsHolder.resx @@ -0,0 +1,238 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/frmTMDBMediaSettingsHolder.vb b/Addons/scraper.MPDB.Poster/frmTMDBMediaSettingsHolder.vb new file mode 100644 index 0000000..6ccca98 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/frmTMDBMediaSettingsHolder.vb @@ -0,0 +1,165 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTMDBMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order + 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order - 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Sub CheckTrailer() + Me.txtTimeout.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDBXBMC.Enabled = Me.chkDownloadTrailer.Checked + If Not Me.chkDownloadTrailer.Checked Then + Me.txtTimeout.Text = "2" + Me.chkTrailerTMDB.Checked = False + Me.chkTrailerTMDBXBMC.Checked = False + End If + End Sub + + Private Sub chkDownloadTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDownloadTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + CheckTrailer() + End Sub + + Private Sub chkTrailerTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDB.CheckedChanged + chkTrailerTMDBXBMC.Enabled = chkTrailerTMDB.Checked + cbTrailerTMDBPref.Enabled = chkTrailerTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerIMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerTMDBXBMC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDBXBMC.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkScrapeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapeFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + grpSaveFanart.Enabled = chkScrapeFanart.Checked + End Sub + + Private Sub chkScrapePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapePoster.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseFANARTTV_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkUseFANARTTV.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMDBp_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkUseIMDBp.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMDBf_CheckedChanged(sender As System.Object, e As System.EventArgs) + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMPA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseIMPA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseMPDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseMPDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Sub SetUp() + Me.txtTimeout.Text = Master.eSettings.TrailerTimeout.ToString + Me.Label23.Text = Master.eLang.GetString(7, "Timeout:") + Me.GroupBox2.Text = Master.eLang.GetString(8, "Supported Sites:") + Me.grpSaveFanart.Text = Master.eLang.GetString(8001, "Save Fanart In:") + Me.chkDownloadTrailer.Text = Master.eLang.GetString(529, "Enable Trailer Support", True) + Me.Label3.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkScrapePoster.Text = Master.eLang.GetString(101, "Get Posters") + Me.chkScrapeFanart.Text = Master.eLang.GetString(102, "Get Fanart") + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + Private Sub txtTimeout_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTimeout.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraThumbs_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraThumbs.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbManualETSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbManualETSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTrailerTMDBPref_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbTrailerTMDBPref.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/packages.config b/Addons/scraper.MPDB.Poster/packages.config new file mode 100644 index 0000000..9d72b1b --- /dev/null +++ b/Addons/scraper.MPDB.Poster/packages.config @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="RestSharp" version="104.1" targetFramework="net35" /> + <package id="SharpZipLib" version="0.86.0" /> +</packages> \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/scraper.MPDB.Poster.vbproj b/Addons/scraper.MPDB.Poster/scraper.MPDB.Poster.vbproj new file mode 100644 index 0000000..523e219 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/scraper.MPDB.Poster.vbproj @@ -0,0 +1,287 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{72A8EF23-3379-4C72-B212-A14A3C286D9C}</ProjectGuid> + <OutputType>Library</OutputType> + <RootNamespace>EmberScraperModule</RootNamespace> + <AssemblyName>scraper.MPDB.Poster</AssemblyName> + <FileAlignment>512</FileAlignment> + <MyType>Windows</MyType> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <OptionExplicit>On</OptionExplicit> + <OptionCompare>Binary</OptionCompare> + <OptionStrict>On</OptionStrict> + <OptionInfer>On</OptionInfer> + <FileUpgradeFlags> + </FileUpgradeFlags> + <OldToolsVersion>3.5</OldToolsVersion> + <UpgradeBackupLocation /> + <PublishUrl>publish\</PublishUrl> + <Install>true</Install> + <InstallFrom>Disk</InstallFrom> + <UpdateEnabled>false</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>false</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> + <RestorePackages>true</RestorePackages> + <SccProjectName> + </SccProjectName> + <SccLocalPath> + </SccLocalPath> + <SccAuxPath> + </SccAuxPath> + <SccProvider> + </SccProvider> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> + <DebugSymbols>true</DebugSymbols> + <DefineDebug>true</DefineDebug> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Dev\Modules\</OutputPath> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Deploy\Modules\</OutputPath> + <Optimize>true</Optimize> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <ItemGroup> + <Reference Include="ICSharpCode.SharpZipLib"> + <HintPath>..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> + </Reference> + <Reference Include="RestSharp"> + <HintPath>..\..\packages\RestSharp.104.1\lib\net35\RestSharp.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Import Include="Microsoft.VisualBasic" /> + <Import Include="System" /> + <Import Include="System.Collections" /> + <Import Include="System.Collections.Generic" /> + <Import Include="System.Drawing" /> + <Import Include="System.Linq" /> + <Import Include="System.Web" /> + <Import Include="System.Windows.Forms" /> + <Import Include="System.Xml.Linq" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Scraper\clsScrapeIMPA.vb" /> + <Compile Include="Scraper\clsScrapeMPDB.vb" /> + <Compile Include="Scraper\clsScrapeOFDB.vb" /> + <Compile Include="Scraper\clsScrapeTMDB.vb" /> + <Compile Include="Scraper\clsScrapeTrailers.vb" /> + <Compile Include="Scraper\clsScrapeImages.vb" /> + <Compile Include="Scraper\clsScrapeTMDBg.vb" /> + <Compile Include="Scraper\clsScrapeYouTube.vb" /> + <Compile Include="Scraper\clsScrapeIMDB.vb" /> + <Compile Include="Scraper\clsScrapeFANARTTV.vb" /> + <Compile Include="Scraper\dlgTMDBSearchResults.Designer.vb"> + <DependentUpon>dlgTMDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTMDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgImgSelect.Designer.vb"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgImgSelect.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailer.Designer.vb"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailer.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.Designer.vb"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmTMDBMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmTMDBMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTMDBMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="My Project\AssemblyInfo.vb" /> + <Compile Include="My Project\Application.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Application.myapp</DependentUpon> + </Compile> + <Compile Include="My Project\Resources.Designer.vb"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> + <Compile Include="My Project\Settings.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Settings.settings</DependentUpon> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + </Compile> + <Compile Include="frmTMDBInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmTMDBInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTMDBInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperMovieTMDBModule.vb" /> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="Scraper\dlgTMDBSearchResults.resx"> + <DependentUpon>dlgTMDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgImgSelect.resx"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailer.resx"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailerFormat.resx"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTMDBMediaSettingsHolder.resx"> + <DependentUpon>frmTMDBMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTMDBInfoSettingsHolder.resx"> + <DependentUpon>frmTMDBInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="My Project\Resources.resx"> + <Generator>VbMyResourcesResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.vb</LastGenOutput> + <CustomToolNamespace>My.Resources</CustomToolNamespace> + <SubType>Designer</SubType> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <None Include="My Project\Application.myapp"> + <Generator>MyApplicationCodeGenerator</Generator> + <LastGenOutput>Application.Designer.vb</LastGenOutput> + </None> + <None Include="My Project\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <CustomToolNamespace>My</CustomToolNamespace> + <LastGenOutput>Settings.Designer.vb</LastGenOutput> + </None> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\EmberAPI\EmberAPI.vbproj"> + <Project>{208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}</Project> + <Name>EmberAPI</Name> + <Private>False</Private> + </ProjectReference> + <ProjectReference Include="..\..\FanartTVAPI\FanartTVAPI.csproj"> + <Project>{70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}</Project> + <Name>FanartTVAPI</Name> + </ProjectReference> + <ProjectReference Include="..\..\WatTmdb\WatTmdb.csproj"> + <Project>{EFC11645-FAB4-4C30-A498-29F5ECDF77E8}</Project> + <Name>WatTmdb</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="Langs\scraper.EmberCore.TMDB.Debug_%28db_DB%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.English_%28en_US%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.English_%28en_US%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.German_%28de_DE%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.German_%28de_DE%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.Norwegian_%28no_NO%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.Norwegian_%28no_NO%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + </ItemGroup> + <ItemGroup /> + <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <PropertyGroup> + <PreBuildEvent> + </PreBuildEvent> + </PropertyGroup> + <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> +</Project> \ No newline at end of file diff --git a/Addons/scraper.MPDB.Poster/scraperMovieTMDBModule.vb b/Addons/scraper.MPDB.Poster/scraperMovieTMDBModule.vb new file mode 100644 index 0000000..7ac1344 --- /dev/null +++ b/Addons/scraper.MPDB.Poster/scraperMovieTMDBModule.vb @@ -0,0 +1,761 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports RestSharp +Imports WatTmdb +Imports EmberScraperModule.TMDBg + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberTMDBScraperModule + Implements Interfaces.EmberMovieScraperModule + + +#Region "Fields" + + Public Shared ConfigOptions As New Structures.ScrapeOptions + Public Shared ConfigScrapeModifier As New Structures.ScrapeModifier + Public Shared _AssemblyName As String + + Private dFImgSelect As dlgImgSelect = Nothing + + Private TMDBId As String + 'Private IMDBid As String + + ''' <summary> + ''' Scraping Here + ''' </summary> + ''' <remarks></remarks> + Private _MySettings As New sMySettings + Private _TMDBg As TMDBg.Scraper + Private _Name As String = "Ember TMDB Movie Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmTMDBInfoSettingsHolder + Private _setupPost As frmTMDBMediaSettingsHolder + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberMovieScraperModule.ModuleSettingsChanged + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsScraper + Get + Return True + End Get + End Property + + ReadOnly Property ModuleName() As String Implements Interfaces.EmberMovieScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberMovieScraperModule.ModuleVersion + Get + Return System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Property PostScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Property ScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean Implements Interfaces.EmberMovieScraperModule.QueryPostScraperCapabilities + Select Case cap + Case Enums.PostScraperCapabilities.Fanart + Return True + Case Enums.PostScraperCapabilities.Poster + Return True + Case Enums.PostScraperCapabilities.Trailer + If _MySettings.DownloadTrailers Then Return True + End Select + Return False + End Function + + Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.DownloadTrailer + Using dTrailer As New dlgTrailer(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + sURL = dTrailer.ShowDialog(DBMovie.Movie.TMDBID, DBMovie.Filename) + End Using + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef studio As List(Of String)) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.GetMovieStudio + '' perche' lo crea? + + ''Dim TMDBg As New TMDBg.Scraper + ''TMDBg.IMDBURL = MySettings.IMDBURL + studio = _TMDBg.GetMovieStudios(DBMovie.Movie.ID) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupNeedsRestart() + RaiseEvent SetupNeedsRestart() + End Sub + + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + + Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberMovieScraperModule.Init + _AssemblyName = sAssemblyName + LoadSettings() + 'Must be after Load settings to retrieve the correct API key + _TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Info") + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + End If + End If + _TMDBConf = _TMDBApi.GetConfiguration() + _TMDBApiE = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey) + _TMDBConfE = _TMDBApiE.GetConfiguration() + _TMDBg = New TMDBg.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + End Sub + + Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupPostScraper + Dim Spanel As New Containers.SettingsPanel + _setupPost = New frmTMDBMediaSettingsHolder + LoadSettings() + _setupPost.cbEnabled.Checked = _PostScraperEnabled + _setupPost.chkTrailerIMDB.Checked = _MySettings.UseIMDBTrailer + _setupPost.chkTrailerTMDB.Checked = _MySettings.UseTMDBTrailer + _setupPost.cbTrailerTMDBPref.Text = _MySettings.UseTMDBTrailerPref + _setupPost.chkTrailerTMDBXBMC.Checked = _MySettings.UseTMDBTrailerXBMC + _setupPost.chkScrapePoster.Checked = ConfigScrapeModifier.Poster + _setupPost.chkScrapeFanart.Checked = ConfigScrapeModifier.Fanart + _setupPost.chkUseIMDBp.Checked = _MySettings.UseIMDB + _setupPost.chkUseIMPA.Checked = _MySettings.UseIMPA + _setupPost.chkUseMPDB.Checked = _MySettings.UseMPDB + _setupPost.chkUseFANARTTV.Checked = _MySettings.UseFANARTTV + + ' ad size from TMDB + '_setupPost.cbManualETSize.Items.Clear() + 'If Not IsNothing(_TMDBg.TMDBConf.images) Then + ' For Each aSi In _TMDBg.TMDBConf.images.poster_sizes + ' _setupPost.cbManualETSize.Items.Add(aSi) + ' Next + ' + 'End If + _setupPost.cbManualETSize.Text = _MySettings.ManualETSize + + _setupPost.txtTimeout.Text = _MySettings.TrailerTimeout.ToString + _setupPost.chkDownloadTrailer.Checked = _MySettings.DownloadTrailers + _setupPost.CheckTrailer() + _setupPost.orderChanged() + Spanel.Name = String.Concat(Me._Name, "PostScraper") + Spanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + Spanel.Prefix = "TMDBMovieMedia_" + Spanel.Order = 110 + Spanel.Parent = "pnlMovieMedia" + Spanel.Type = Master.eLang.GetString(36, "Movies", True) + Spanel.ImageIndex = If(Me._PostScraperEnabled, 9, 10) + Spanel.Panel = Me._setupPost.pnlSettings + + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return Spanel + End Function + + Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmTMDBInfoSettingsHolder + LoadSettings() + _setup.cbEnabled.Checked = _ScraperEnabled + _setup.chkTitle.Checked = ConfigOptions.bTitle + _setup.chkYear.Checked = ConfigOptions.bYear + _setup.chkMPAA.Checked = ConfigOptions.bMPAA + _setup.chkRelease.Checked = ConfigOptions.bRelease + _setup.chkRuntime.Checked = ConfigOptions.bRuntime + _setup.chkRating.Checked = ConfigOptions.bRating + _setup.chkVotes.Checked = ConfigOptions.bVotes + _setup.chkStudio.Checked = ConfigOptions.bStudio + _setup.chkTagline.Checked = ConfigOptions.bTagline + _setup.chkOutline.Checked = ConfigOptions.bOutline + _setup.chkCast.Checked = ConfigOptions.bFullCast + _setup.chkGenre.Checked = ConfigOptions.bGenre + _setup.chkTrailer.Checked = ConfigOptions.bTrailer + _setup.chkCountry.Checked = ConfigOptions.bCountry + _setup.chkCrew.Checked = ConfigOptions.bFullCrew + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + + '_setup.chkCertification.Checked = ConfigOptions.bCert + + If String.IsNullOrEmpty(_MySettings.TMDBAPIKey) Then + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + _setup.txtTMDBApiKey.Text = _MySettings.TMDBAPIKey + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.orderChanged() + If String.IsNullOrEmpty(_MySettings.FANARTTVApiKey) Then + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _setup.txtFANARTTVApiKey.Text = _MySettings.FANARTTVApiKey + + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + SPanel.Prefix = "TMDBMovieInfo_" + SPanel.Order = 110 + SPanel.Parent = "pnlMovieData" + SPanel.Type = Master.eLang.GetString(36, "Movies", True) + SPanel.ImageIndex = If(_ScraperEnabled, 9, 10) + SPanel.Panel = _setup.pnlSettings + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return SPanel + End Function + + Sub LoadSettings() + ConfigOptions.bTitle = AdvancedSettings.GetBooleanSetting("DoTitle", True) + ConfigOptions.bYear = AdvancedSettings.GetBooleanSetting("DoYear", True) + ConfigOptions.bMPAA = AdvancedSettings.GetBooleanSetting("DoMPAA", True) + ConfigOptions.bRelease = AdvancedSettings.GetBooleanSetting("DoRelease", True) + ConfigOptions.bRuntime = AdvancedSettings.GetBooleanSetting("DoRuntime", True) + ConfigOptions.bRating = AdvancedSettings.GetBooleanSetting("DoRating", True) + ConfigOptions.bVotes = AdvancedSettings.GetBooleanSetting("DoVotes", True) + ConfigOptions.bStudio = AdvancedSettings.GetBooleanSetting("DoStudio", True) + ConfigOptions.bTagline = AdvancedSettings.GetBooleanSetting("DoTagline", True) + ConfigOptions.bOutline = AdvancedSettings.GetBooleanSetting("DoOutline", True) + ConfigOptions.bPlot = AdvancedSettings.GetBooleanSetting("DoPlot", True) + ConfigOptions.bCast = AdvancedSettings.GetBooleanSetting("DoCast", True) + ConfigOptions.bDirector = AdvancedSettings.GetBooleanSetting("DoDirector", True) + ConfigOptions.bWriters = AdvancedSettings.GetBooleanSetting("DoWriters", True) + ConfigOptions.bProducers = AdvancedSettings.GetBooleanSetting("DoProducers", True) + ConfigOptions.bGenre = AdvancedSettings.GetBooleanSetting("DoGenres", True) + ConfigOptions.bTrailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + ConfigOptions.bMusicBy = AdvancedSettings.GetBooleanSetting("DoMusic", True) + ConfigOptions.bOtherCrew = AdvancedSettings.GetBooleanSetting("DoOtherCrews", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("DoFullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("DoFullCrews", True) + ConfigOptions.bTop250 = AdvancedSettings.GetBooleanSetting("DoTop250", True) + ConfigOptions.bCountry = AdvancedSettings.GetBooleanSetting("DoCountry", True) + ConfigOptions.bCert = AdvancedSettings.GetBooleanSetting("DoCert", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("FullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("FullCrew", True) + + _MySettings.TMDBAPIKey = AdvancedSettings.GetSetting("TMDBAPIKey", "Get your API Key from http://www.themoviedb.org") + _MySettings.FANARTTVApiKey = AdvancedSettings.GetSetting("FANARTTVApiKey", "Get your API Key from http://fanart.tv") + _MySettings.FallBackEng = AdvancedSettings.GetBooleanSetting("FallBackEn", False) + _MySettings.TMDBLanguage = AdvancedSettings.GetSetting("TMDBLanguage", "en") + _MySettings.DownloadTrailers = AdvancedSettings.GetBooleanSetting("DownloadTraliers", False) + + _MySettings.TrailerTimeout = Convert.ToInt32(AdvancedSettings.GetSetting("TrailerTimeout", "10")) + _MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) + _MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) + _MySettings.UseIMPA = AdvancedSettings.GetBooleanSetting("UseIMPA", False) + _MySettings.UseMPDB = AdvancedSettings.GetBooleanSetting("UseMPDB", False) + _MySettings.UseIMDB = AdvancedSettings.GetBooleanSetting("UseIMDB", False) + _MySettings.UseFANARTTV = AdvancedSettings.GetBooleanSetting("UseFANARTTV", False) + _MySettings.UseIMDBTrailer = AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", True) + _MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + _MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) + + ConfigScrapeModifier.DoSearch = True + ConfigScrapeModifier.Meta = True + ConfigScrapeModifier.NFO = True + ConfigScrapeModifier.Extra = True + ConfigScrapeModifier.Actors = True + + ConfigScrapeModifier.Poster = AdvancedSettings.GetBooleanSetting("DoPoster", True) + ConfigScrapeModifier.Fanart = AdvancedSettings.GetBooleanSetting("DoFanart", True) + ConfigScrapeModifier.Trailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + End Sub + + Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.PostScraper + 'LoadSettings() + Dim Poster As New Images + Dim Fanart As New Images + Dim pResults As Containers.ImgResult + Dim fResults As Containers.ImgResult + Dim tURL As String = String.Empty + Dim Trailer As Trailers + Dim aScrapeImages As ScrapeImages + + LoadSettings() + If String.IsNullOrEmpty(DBMovie.Movie.TMDBID) Then + _TMDBg.GetMovieID(DBMovie) + End If + Trailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim saveModifier As Structures.ScrapeModifier = Master.GlobalScrapeMod + Master.GlobalScrapeMod = Functions.ScrapeModifierAndAlso(Master.GlobalScrapeMod, ConfigScrapeModifier) + + Dim doSave As Boolean = False + + aScrapeImages = New ScrapeImages(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + If Master.GlobalScrapeMod.Poster Then + Poster.Clear() + If Poster.IsAllowedToDownload(DBMovie, Enums.ImageType.Posters) Then + pResults = New Containers.ImgResult + If aScrapeImages.GetPreferredImage(Poster, DBMovie.Movie.ID, DBMovie.Movie.TMDBID, Enums.ImageType.Posters, pResults, DBMovie.Filename, False, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Poster.Image) Then + pResults.ImagePath = Poster.SaveAsPoster(DBMovie) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(76, "A poster of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size")) + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApi, _MySettings) + pResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Posters) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + End Using + End If + End If + End If + End If + Dim didEts As Boolean + If Master.GlobalScrapeMod.Fanart Then + Fanart.Clear() + If Fanart.IsAllowedToDownload(DBMovie, Enums.ImageType.Fanart) Then + fResults = New Containers.ImgResult + didEts = True + If aScrapeImages.GetPreferredImage(Fanart, DBMovie.Movie.IMDBID, DBMovie.Movie.TMDBID, Enums.ImageType.Fanart, fResults, DBMovie.Filename, Master.GlobalScrapeMod.Extra, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Fanart.Image) Then + fResults.ImagePath = Fanart.SaveAsFanart(DBMovie) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) ' + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(78, "Fanart of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size:")) + + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApi, _MySettings) + fResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Fanart) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + End Using + End If + End If + End If + End If + If Master.GlobalScrapeMod.Trailer AndAlso _MySettings.DownloadTrailers Then + tURL = Trailer.DownloadSingleTrailer(DBMovie.Filename, DBMovie.Movie.TMDBID, DBMovie.isSingle, DBMovie.Movie.Trailer) + If Not String.IsNullOrEmpty(tURL) Then + If tURL.Substring(0, 22) = "http://www.youtube.com" Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + DBMovie.Movie.Trailer = Replace(tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + DBMovie.Movie.Trailer = tURL + End If + ElseIf tURL.Substring(0, 7) = "http://" Then + DBMovie.Movie.Trailer = tURL + Else + DBMovie.TrailerPath = tURL + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.TrailerItem, True) + End If + End If + End If + If Master.GlobalScrapeMod.Extra Then + If Master.eSettings.AutoET AndAlso DBMovie.isSingle Then + Try + aScrapeImages.GetPreferredFAasET(DBMovie.Movie.TMDBID, DBMovie.Filename) + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.ThumbsItem, True) + Catch ex As Exception + End Try + End If + End If + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then + For Each act As MediaContainers.Person In DBMovie.Movie.Actors + Dim img As New Images + img.FromWeb(act.Thumb) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If + Next + End If + Master.GlobalScrapeMod = saveModifier + Return New Interfaces.ModuleResult With {.breakChain = False, .BoolProperty = didEts} + End Function + + Sub SaveSettings() + AdvancedSettings.SetBooleanSetting("DoFullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("DoFullCrews", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DoTitle", ConfigOptions.bTitle) + AdvancedSettings.SetBooleanSetting("DoYear", ConfigOptions.bYear) + AdvancedSettings.SetBooleanSetting("DoMPAA", ConfigOptions.bMPAA) + AdvancedSettings.SetBooleanSetting("DoRelease", ConfigOptions.bRelease) + AdvancedSettings.SetBooleanSetting("DoRuntime", ConfigOptions.bRuntime) + AdvancedSettings.SetBooleanSetting("DoRating", ConfigOptions.bRating) + AdvancedSettings.SetBooleanSetting("DoVotes", ConfigOptions.bVotes) + AdvancedSettings.SetBooleanSetting("DoStudio", ConfigOptions.bStudio) + AdvancedSettings.SetBooleanSetting("DoTagline", ConfigOptions.bTagline) + AdvancedSettings.SetBooleanSetting("DoOutline", ConfigOptions.bOutline) + AdvancedSettings.SetBooleanSetting("DoPlot", ConfigOptions.bPlot) + AdvancedSettings.SetBooleanSetting("DoCast", ConfigOptions.bCast) + AdvancedSettings.SetBooleanSetting("DoDirector", ConfigOptions.bDirector) + AdvancedSettings.SetBooleanSetting("DoWriters", ConfigOptions.bWriters) + AdvancedSettings.SetBooleanSetting("DoProducers", ConfigOptions.bProducers) + AdvancedSettings.SetBooleanSetting("DoGenres", ConfigOptions.bGenre) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigOptions.bTrailer) + AdvancedSettings.SetBooleanSetting("DoMusic", ConfigOptions.bMusicBy) + AdvancedSettings.SetBooleanSetting("DoOtherCrews", ConfigOptions.bOtherCrew) + AdvancedSettings.SetBooleanSetting("DoCountry", ConfigOptions.bCountry) + AdvancedSettings.SetBooleanSetting("DoTop250", ConfigOptions.bTop250) + AdvancedSettings.SetBooleanSetting("DoCert", ConfigOptions.bCert) + + AdvancedSettings.SetBooleanSetting("FullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("FullCrew", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DownloadTraliers", _MySettings.DownloadTrailers) + + AdvancedSettings.SetSetting("TrailerTimeout", _MySettings.TrailerTimeout.ToString) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailer", _MySettings.UseTMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", _MySettings.UseTMDBTrailerXBMC) + AdvancedSettings.SetBooleanSetting("UseIMDBTrailer", _MySettings.UseIMDBTrailer) + + AdvancedSettings.SetSetting("ManualETSize", _MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("UseTMDBTrailerPref", _MySettings.UseTMDBTrailerPref.ToString) + + AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) + AdvancedSettings.SetBooleanSetting("DoFanart", ConfigScrapeModifier.Fanart) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigScrapeModifier.Trailer) + + AdvancedSettings.SetSetting("TMDBAPIKey", _MySettings.TMDBAPIKey) + AdvancedSettings.SetSetting("FANARTTVApiKey", _MySettings.FANARTTVApiKey) + AdvancedSettings.SetBooleanSetting("FallBackEn", _MySettings.FallBackEng) + AdvancedSettings.SetSetting("TMDBLanguage", _MySettings.TMDBLanguage) + AdvancedSettings.SetBooleanSetting("UseIMPA", _MySettings.UseIMPA) + AdvancedSettings.SetBooleanSetting("UseMPDB", _MySettings.UseMPDB) + AdvancedSettings.SetBooleanSetting("UseIMDB", _MySettings.UseIMDB) + AdvancedSettings.SetBooleanSetting("UseFANARTTV", _MySettings.UseFANARTTV) + End Sub + + Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupPostScraper + _MySettings.DownloadTrailers = _setupPost.chkDownloadTrailer.Checked + _MySettings.UseIMDBTrailer = _setupPost.chkTrailerIMDB.Checked + _MySettings.UseTMDBTrailer = _setupPost.chkTrailerTMDB.Checked + _MySettings.UseTMDBTrailerXBMC = _setupPost.chkTrailerTMDBXBMC.Checked + _MySettings.TrailerTimeout = Convert.ToInt32(_setupPost.txtTimeout.Text) + _MySettings.ManualETSize = _setupPost.cbManualETSize.Text + _MySettings.UseTMDBTrailerPref = _setupPost.cbTrailerTMDBPref.Text + _MySettings.UseIMDB = _setupPost.chkUseIMDBp.Checked + _MySettings.UseIMPA = _setupPost.chkUseIMPA.Checked + _MySettings.UseMPDB = _setupPost.chkUseMPDB.Checked + _MySettings.UseFANARTTV = _setupPost.chkUseFANARTTV.Checked + ConfigScrapeModifier.Poster = _setupPost.chkScrapePoster.Checked + ConfigScrapeModifier.Fanart = _setupPost.chkScrapeFanart.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + RemoveHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + _setupPost.Dispose() + End If + End Sub + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupScraper + If Not String.IsNullOrEmpty(_setup.txtTMDBApiKey.Text) Then + _MySettings.TMDBAPIKey = _setup.txtTMDBApiKey.Text + Else + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + If Not String.IsNullOrEmpty(_setup.txtFANARTTVApiKey.Text) Then + _MySettings.FANARTTVApiKey = _setup.txtFANARTTVApiKey.Text + Else + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + ConfigOptions.bTitle = _setup.chkTitle.Checked + ConfigOptions.bYear = _setup.chkYear.Checked + ConfigOptions.bMPAA = _setup.chkMPAA.Checked + ConfigOptions.bRelease = _setup.chkRelease.Checked + ConfigOptions.bRuntime = _setup.chkRuntime.Checked + ConfigOptions.bRating = _setup.chkRating.Checked + ConfigOptions.bVotes = _setup.chkVotes.Checked + ConfigOptions.bStudio = _setup.chkStudio.Checked + ConfigOptions.bTagline = _setup.chkTagline.Checked + ConfigOptions.bOutline = _setup.chkOutline.Checked + ConfigOptions.bPlot = False + ConfigOptions.bCast = _setup.chkCast.Checked + ConfigOptions.bDirector = _setup.chkCrew.Checked + ConfigOptions.bWriters = _setup.chkCrew.Checked + ConfigOptions.bProducers = _setup.chkCrew.Checked + ConfigOptions.bGenre = _setup.chkGenre.Checked + ConfigOptions.bTrailer = _setup.chkTrailer.Checked + ConfigOptions.bMusicBy = _setup.chkCrew.Checked + ConfigOptions.bOtherCrew = _setup.chkCrew.Checked + ConfigOptions.bCountry = _setup.chkCountry.Checked + ConfigOptions.bTop250 = False + ConfigOptions.bFullCrew = _setup.chkCrew.Checked + ConfigOptions.bFullCast = _setup.chkCast.Checked + ConfigOptions.bCert = ConfigOptions.bMPAA + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + RemoveHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + _setup.Dispose() + End If + End Sub + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.Scraper + 'LoadSettings() + ''TMDBg.IMDBURL = MySettings.IMDBURL + ''TMDBg.UseOFDBTitle = MySettings.UseOFDBTitle + ''TMDBg.UseOFDBOutline = MySettings.UseOFDBOutline + ''TMDBg.UseOFDBPlot = MySettings.UseOFDBPlot + ''TMDBg.UseOFDBGenre = MySettings.UseOFDBGenre + Dim tTitle As String = String.Empty + Dim OldTitle As String = DBMovie.Movie.Title + + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + + If Master.GlobalScrapeMod.NFO AndAlso Not Master.GlobalScrapeMod.DoSearch Then + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, Options.bFullCrew, Options.bFullCast, False, Options, False) + ElseIf Not ScrapeType = Enums.ScrapeType.SingleScrape Then + DBMovie.Movie = _TMDBg.GetSearchMovieInfo(DBMovie.Movie.Title, DBMovie, ScrapeType, Options) + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + If ScrapeType = Enums.ScrapeType.SingleScrape AndAlso Master.GlobalScrapeMod.DoSearch _ + AndAlso ModulesManager.Instance.externalScrapersModules.OrderBy(Function(y) y.ScraperOrder).FirstOrDefault(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled).AssemblyName = _AssemblyName Then + DBMovie.Movie.IMDBID = String.Empty + DBMovie.ClearExtras = True + DBMovie.PosterPath = String.Empty + DBMovie.FanartPath = String.Empty + DBMovie.TrailerPath = String.Empty + DBMovie.ExtraPath = String.Empty + DBMovie.SubPath = String.Empty + DBMovie.NfoPath = String.Empty + DBMovie.Movie.Clear() + End If + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + Select Case ScrapeType + Case Enums.ScrapeType.FilterAuto, Enums.ScrapeType.FullAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.UpdateAuto + Return New Interfaces.ModuleResult With {.breakChain = False} + End Select + If ScrapeType = Enums.ScrapeType.SingleScrape Then + Using dSearch As New dlgTMDBSearchResults(_MySettings, Me._TMDBg) + '' dSearch.IMDBURL = MySettings.IMDBURL + Dim tmpTitle As String = DBMovie.Movie.Title + If String.IsNullOrEmpty(tmpTitle) Then + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name, False) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name, False) + Else + tmpTitle = StringUtils.FilterName(If(DBMovie.isSingle, Directory.GetParent(DBMovie.Filename).Name, Path.GetFileNameWithoutExtension(DBMovie.Filename))) + End If + End If + Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) + If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID + End If + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + + Master.currMovie.ClearExtras = True + Master.currMovie.PosterPath = String.Empty + Master.currMovie.FanartPath = String.Empty + Master.currMovie.TrailerPath = String.Empty + Master.currMovie.ExtraPath = String.Empty + Master.currMovie.SubPath = String.Empty + Master.currMovie.NfoPath = String.Empty + + + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, filterOptions.bFullCrew, filterOptions.bFullCast, False, filterOptions, False) + End If + Else + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End Using + End If + End If + + If Not String.IsNullOrEmpty(DBMovie.Movie.Title) Then + tTitle = StringUtils.FilterTokens(DBMovie.Movie.Title) + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = tTitle + If Master.eSettings.DisplayYear AndAlso Not String.IsNullOrEmpty(DBMovie.Movie.Year) Then + DBMovie.ListTitle = String.Format("{0} ({1})", tTitle, DBMovie.Movie.Year) + Else + DBMovie.ListTitle = tTitle + End If + Else + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name) + Else + If DBMovie.UseFolder AndAlso DBMovie.isSingle Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(DBMovie.Filename).Name) + Else + DBMovie.ListTitle = StringUtils.FilterName(Path.GetFileNameWithoutExtension(DBMovie.Filename)) + End If + End If + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = DBMovie.ListTitle + End If + + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function SelectImageOfType(ByRef mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.SelectImageOfType + If String.IsNullOrEmpty(mMovie.Movie.TMDBID) Then + _TMDBg.GetMovieID(mMovie) + End If + If preload AndAlso _DLType = Enums.ImageType.Fanart AndAlso Not IsNothing(dFImgSelect) Then + pResults = dFImgSelect.ShowDialog() + dFImgSelect = Nothing + Else + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + If preload Then + dFImgSelect = New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + dFImgSelect.PreLoad(mMovie, Enums.ImageType.Fanart, _isEdit) + End If + '' dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(mMovie, _DLType, _isEdit) + End Using + End If + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + Public Sub PostScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.PostScraperOrderChanged + _setup.orderChanged() + End Sub + + Public Sub ScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.ScraperOrderChanged + _setupPost.orderChanged() + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Structure sMySettings + +#Region "Fields" + Dim DownloadTrailers As Boolean + Dim TrailerTimeout As Integer + Dim UseTMDBTrailer As Boolean + Dim UseTMDBTrailerXBMC As Boolean + Dim ManualETSize As String + Dim UseTMDBTrailerPref As String + Dim TMDBAPIKey As String + Dim FANARTTVApiKey As String + Dim TMDBLanguage As String + Dim FallBackEng As Boolean + Dim UseIMDB As Boolean + Dim UseIMPA As Boolean + Dim UseMPDB As Boolean + Dim UseFANARTTV As Boolean + Dim UseIMDBTrailer As Boolean +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/AssemblyInfo.vb b/Addons/scraper.OFDB.Data/AssemblyInfo.vb new file mode 100644 index 0000000..1b59a44 --- /dev/null +++ b/Addons/scraper.OFDB.Data/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.EmberCore")> +<Assembly: AssemblyDescription("www.embermm.com")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.EmberCore")> +<Assembly: AssemblyCopyright("Copyright © 2011")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("4c4e9cbd-06e2-44ed-bbed-0f51f6c3f4ef")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.5")> +<Assembly: AssemblyFileVersion("1.3.0.5")> diff --git a/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.Debug_(db_DB).xml b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.Debug_(db_DB).xml new file mode 100644 index 0000000..0fba5b0 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.Debug_(db_DB).xml @@ -0,0 +1,902 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="1">native1</string> + <string id="2">native2</string> + <string id="3">native3</string> + <string id="4">native4</string> + <string id="5">native5</string> + <string id="6">native6</string> + <string id="7">native7</string> + <string id="8">native8</string> + <string id="9">native9</string> + <string id="10">native10</string> + <string id="11">native11</string> + <string id="12">native12</string> + <string id="13">native13</string> + <string id="14">native14</string> + <string id="15">native15</string> + <string id="16">native16</string> + <string id="17">native17</string> + <string id="18">native18</string> + <string id="19">native19</string> + <string id="20">native20</string> + <string id="21">native21</string> + <string id="22">native22</string> + <string id="23">native23</string> + <string id="24">native24</string> + <string id="25">native25</string> + <string id="26">native26</string> + <string id="27">native27</string> + <string id="28">native28</string> + <string id="29">native29</string> + <string id="30">native30</string> + <string id="31">native31</string> + <string id="32">native32</string> + <string id="33">native33</string> + <string id="34">native34</string> + <string id="35">native35</string> + <string id="36">native36</string> + <string id="37">native37</string> + <string id="38">native38</string> + <string id="39">native39</string> + <string id="40">native40</string> + <string id="41">native41</string> + <string id="42">native42</string> + <string id="43">native43</string> + <string id="44">native44</string> + <string id="45">native45</string> + <string id="46">native46</string> + <string id="47">native47</string> + <string id="48">native48</string> + <string id="49">native49</string> + <string id="50">native50</string> + <string id="51">native51</string> + <string id="52">native52</string> + <string id="53">native53</string> + <string id="54">native54</string> + <string id="55">native55</string> + <string id="56">native56</string> + <string id="57">native57</string> + <string id="58">native58</string> + <string id="59">native59</string> + <string id="60">native60</string> + <string id="61">native61</string> + <string id="62">native62</string> + <string id="63">native63</string> + <string id="64">native64</string> + <string id="65">native65</string> + <string id="66">native66</string> + <string id="67">native67</string> + <string id="68">native68</string> + <string id="69">native69</string> + <string id="70">native70</string> + <string id="71">native71</string> + <string id="72">native72</string> + <string id="73">native73</string> + <string id="74">native74</string> + <string id="75">native75</string> + <string id="76">native76</string> + <string id="77">native77</string> + <string id="78">native78</string> + <string id="79">native79</string> + <string id="80">native80</string> + <string id="81">native81</string> + <string id="82">native82</string> + <string id="83">native83</string> + <string id="84">native84</string> + <string id="85">native85</string> + <string id="86">native86</string> + <string id="87">native87</string> + <string id="88">native88</string> + <string id="89">native89</string> + <string id="90">native90</string> + <string id="91">native91</string> + <string id="92">native92</string> + <string id="93">native93</string> + <string id="94">native94</string> + <string id="95">native95</string> + <string id="96">native96</string> + <string id="97">native97</string> + <string id="98">native98</string> + <string id="99">native99</string> + <string id="100">native100</string> + <string id="101">native101</string> + <string id="102">native102</string> + <string id="103">native103</string> + <string id="104">native104</string> + <string id="105">native105</string> + <string id="106">native106</string> + <string id="107">native107</string> + <string id="108">native108</string> + <string id="109">native109</string> + <string id="110">native110</string> + <string id="111">native111</string> + <string id="112">native112</string> + <string id="113">native113</string> + <string id="114">native114</string> + <string id="115">native115</string> + <string id="116">native116</string> + <string id="117">native117</string> + <string id="118">native118</string> + <string id="119">native119</string> + <string id="120">native120</string> + <string id="121">native121</string> + <string id="122">native122</string> + <string id="123">native123</string> + <string id="124">native124</string> + <string id="125">native125</string> + <string id="126">native126</string> + <string id="127">native127</string> + <string id="128">native128</string> + <string id="129">native129</string> + <string id="130">native130</string> + <string id="131">native131</string> + <string id="132">native132</string> + <string id="133">native133</string> + <string id="134">native134</string> + <string id="135">native135</string> + <string id="136">native136</string> + <string id="137">native137</string> + <string id="138">native138</string> + <string id="139">native139</string> + <string id="140">native140</string> + <string id="141">native141</string> + <string id="142">native142</string> + <string id="143">native143</string> + <string id="144">native144</string> + <string id="145">native145</string> + <string id="146">native146</string> + <string id="147">native147</string> + <string id="148">native148</string> + <string id="149">native149</string> + <string id="150">native150</string> + <string id="151">native151</string> + <string id="152">native152</string> + <string id="153">native153</string> + <string id="154">native154</string> + <string id="155">native155</string> + <string id="156">native156</string> + <string id="157">native157</string> + <string id="158">native158</string> + <string id="159">native159</string> + <string id="160">native160</string> + <string id="161">native161</string> + <string id="162">native162</string> + <string id="163">native163</string> + <string id="164">native164</string> + <string id="165">native165</string> + <string id="166">native166</string> + <string id="167">native167</string> + <string id="168">native168</string> + <string id="169">native169</string> + <string id="170">native170</string> + <string id="171">native171</string> + <string id="172">native172</string> + <string id="173">native173</string> + <string id="174">native174</string> + <string id="175">native175</string> + <string id="176">native176</string> + <string id="177">native177</string> + <string id="178">native178</string> + <string id="179">native179</string> + <string id="180">native180</string> + <string id="181">native181</string> + <string id="182">native182</string> + <string id="183">native183</string> + <string id="184">native184</string> + <string id="185">native185</string> + <string id="186">native186</string> + <string id="187">native187</string> + <string id="188">native188</string> + <string id="189">native189</string> + <string id="190">native190</string> + <string id="191">native191</string> + <string id="192">native192</string> + <string id="193">native193</string> + <string id="194">native194</string> + <string id="195">native195</string> + <string id="196">native196</string> + <string id="197">native197</string> + <string id="198">native198</string> + <string id="199">native199</string> + <string id="200">native200</string> + <string id="201">native201</string> + <string id="202">native202</string> + <string id="203">native203</string> + <string id="204">native204</string> + <string id="205">native205</string> + <string id="206">native206</string> + <string id="207">native207</string> + <string id="208">native208</string> + <string id="209">native209</string> + <string id="210">native210</string> + <string id="211">native211</string> + <string id="212">native212</string> + <string id="213">native213</string> + <string id="214">native214</string> + <string id="215">native215</string> + <string id="216">native216</string> + <string id="217">native217</string> + <string id="218">native218</string> + <string id="219">native219</string> + <string id="220">native220</string> + <string id="221">native221</string> + <string id="222">native222</string> + <string id="223">native223</string> + <string id="224">native224</string> + <string id="225">native225</string> + <string id="226">native226</string> + <string id="227">native227</string> + <string id="228">native228</string> + <string id="229">native229</string> + <string id="230">native230</string> + <string id="231">native231</string> + <string id="232">native232</string> + <string id="233">native233</string> + <string id="234">native234</string> + <string id="235">native235</string> + <string id="236">native236</string> + <string id="237">native237</string> + <string id="238">native238</string> + <string id="239">native239</string> + <string id="240">native240</string> + <string id="241">native241</string> + <string id="242">native242</string> + <string id="243">native243</string> + <string id="244">native244</string> + <string id="245">native245</string> + <string id="246">native246</string> + <string id="247">native247</string> + <string id="248">native248</string> + <string id="249">native249</string> + <string id="250">native250</string> + <string id="251">native251</string> + <string id="252">native252</string> + <string id="253">native253</string> + <string id="254">native254</string> + <string id="255">native255</string> + <string id="256">native256</string> + <string id="257">native257</string> + <string id="258">native258</string> + <string id="259">native259</string> + <string id="260">native260</string> + <string id="261">native261</string> + <string id="262">native262</string> + <string id="263">native263</string> + <string id="264">native264</string> + <string id="265">native265</string> + <string id="266">native266</string> + <string id="267">native267</string> + <string id="268">native268</string> + <string id="269">native269</string> + <string id="270">native270</string> + <string id="271">native271</string> + <string id="272">native272</string> + <string id="273">native273</string> + <string id="274">native274</string> + <string id="275">native275</string> + <string id="276">native276</string> + <string id="277">native277</string> + <string id="278">native278</string> + <string id="279">native279</string> + <string id="280">native280</string> + <string id="281">native281</string> + <string id="282">native282</string> + <string id="283">native283</string> + <string id="284">native284</string> + <string id="285">native285</string> + <string id="286">native286</string> + <string id="287">native287</string> + <string id="288">native288</string> + <string id="289">native289</string> + <string id="290">native290</string> + <string id="291">native291</string> + <string id="292">native292</string> + <string id="293">native293</string> + <string id="294">native294</string> + <string id="295">native295</string> + <string id="296">native296</string> + <string id="297">native297</string> + <string id="298">native298</string> + <string id="299">native299</string> + <string id="300">native300</string> + <string id="301">native301</string> + <string id="302">native302</string> + <string id="303">native303</string> + <string id="304">native304</string> + <string id="305">native305</string> + <string id="306">native306</string> + <string id="307">native307</string> + <string id="308">native308</string> + <string id="309">native309</string> + <string id="310">native310</string> + <string id="311">native311</string> + <string id="312">native312</string> + <string id="313">native313</string> + <string id="314">native314</string> + <string id="315">native315</string> + <string id="316">native316</string> + <string id="317">native317</string> + <string id="318">native318</string> + <string id="319">native319</string> + <string id="320">native320</string> + <string id="321">native321</string> + <string id="322">native322</string> + <string id="323">native323</string> + <string id="324">native324</string> + <string id="325">native325</string> + <string id="326">native326</string> + <string id="327">native327</string> + <string id="328">native328</string> + <string id="329">native329</string> + <string id="330">native330</string> + <string id="331">native331</string> + <string id="332">native332</string> + <string id="333">native333</string> + <string id="334">native334</string> + <string id="335">native335</string> + <string id="336">native336</string> + <string id="337">native337</string> + <string id="338">native338</string> + <string id="339">native339</string> + <string id="340">native340</string> + <string id="341">native341</string> + <string id="342">native342</string> + <string id="343">native343</string> + <string id="344">native344</string> + <string id="345">native345</string> + <string id="346">native346</string> + <string id="347">native347</string> + <string id="348">native348</string> + <string id="349">native349</string> + <string id="350">native350</string> + <string id="351">native351</string> + <string id="352">native352</string> + <string id="353">native353</string> + <string id="354">native354</string> + <string id="355">native355</string> + <string id="356">native356</string> + <string id="357">native357</string> + <string id="358">native358</string> + <string id="359">native359</string> + <string id="360">native360</string> + <string id="361">native361</string> + <string id="362">native362</string> + <string id="363">native363</string> + <string id="364">native364</string> + <string id="365">native365</string> + <string id="366">native366</string> + <string id="367">native367</string> + <string id="368">native368</string> + <string id="369">native369</string> + <string id="370">native370</string> + <string id="371">native371</string> + <string id="372">native372</string> + <string id="373">native373</string> + <string id="374">native374</string> + <string id="375">native375</string> + <string id="376">native376</string> + <string id="377">native377</string> + <string id="378">native378</string> + <string id="379">native379</string> + <string id="380">native380</string> + <string id="381">native381</string> + <string id="382">native382</string> + <string id="383">native383</string> + <string id="384">native384</string> + <string id="385">native385</string> + <string id="386">native386</string> + <string id="387">native387</string> + <string id="388">native388</string> + <string id="389">native389</string> + <string id="390">native390</string> + <string id="391">native391</string> + <string id="392">native392</string> + <string id="393">native393</string> + <string id="394">native394</string> + <string id="395">native395</string> + <string id="396">native396</string> + <string id="397">native397</string> + <string id="398">native398</string> + <string id="399">native399</string> + <string id="400">native400</string> + <string id="401">native401</string> + <string id="402">native402</string> + <string id="403">native403</string> + <string id="404">native404</string> + <string id="405">native405</string> + <string id="406">native406</string> + <string id="407">native407</string> + <string id="408">native408</string> + <string id="409">native409</string> + <string id="410">native410</string> + <string id="411">native411</string> + <string id="412">native412</string> + <string id="413">native413</string> + <string id="414">native414</string> + <string id="415">native415</string> + <string id="416">native416</string> + <string id="417">native417</string> + <string id="418">native418</string> + <string id="419">native419</string> + <string id="420">native420</string> + <string id="421">native421</string> + <string id="422">native422</string> + <string id="423">native423</string> + <string id="424">native424</string> + <string id="425">native425</string> + <string id="426">native426</string> + <string id="427">native427</string> + <string id="428">native428</string> + <string id="429">native429</string> + <string id="430">native430</string> + <string id="431">native431</string> + <string id="432">native432</string> + <string id="433">native433</string> + <string id="434">native434</string> + <string id="435">native435</string> + <string id="436">native436</string> + <string id="437">native437</string> + <string id="438">native438</string> + <string id="439">native439</string> + <string id="440">native440</string> + <string id="441">native441</string> + <string id="442">native442</string> + <string id="443">native443</string> + <string id="444">native444</string> + <string id="445">native445</string> + <string id="446">native446</string> + <string id="447">native447</string> + <string id="448">native448</string> + <string id="449">native449</string> + <string id="450">native450</string> + <string id="451">native451</string> + <string id="452">native452</string> + <string id="453">native453</string> + <string id="454">native454</string> + <string id="455">native455</string> + <string id="456">native456</string> + <string id="457">native457</string> + <string id="458">native458</string> + <string id="459">native459</string> + <string id="460">native460</string> + <string id="461">native461</string> + <string id="462">native462</string> + <string id="463">native463</string> + <string id="464">native464</string> + <string id="465">native465</string> + <string id="466">native466</string> + <string id="467">native467</string> + <string id="468">native468</string> + <string id="469">native469</string> + <string id="470">native470</string> + <string id="471">native471</string> + <string id="472">native472</string> + <string id="473">native473</string> + <string id="474">native474</string> + <string id="475">native475</string> + <string id="476">native476</string> + <string id="477">native477</string> + <string id="478">native478</string> + <string id="479">native479</string> + <string id="480">native480</string> + <string id="481">native481</string> + <string id="482">native482</string> + <string id="483">native483</string> + <string id="484">native484</string> + <string id="485">native485</string> + <string id="486">native486</string> + <string id="487">native487</string> + <string id="488">native488</string> + <string id="489">native489</string> + <string id="490">native490</string> + <string id="491">native491</string> + <string id="492">native492</string> + <string id="493">native493</string> + <string id="494">native494</string> + <string id="495">native495</string> + <string id="496">native496</string> + <string id="497">native497</string> + <string id="498">native498</string> + <string id="499">native499</string> + <string id="500">native500</string> + <string id="501">native501</string> + <string id="502">native502</string> + <string id="503">native503</string> + <string id="504">native504</string> + <string id="505">native505</string> + <string id="506">native506</string> + <string id="507">native507</string> + <string id="508">native508</string> + <string id="509">native509</string> + <string id="510">native510</string> + <string id="511">native511</string> + <string id="512">native512</string> + <string id="513">native513</string> + <string id="514">native514</string> + <string id="515">native515</string> + <string id="516">native516</string> + <string id="517">native517</string> + <string id="518">native518</string> + <string id="519">native519</string> + <string id="520">native520</string> + <string id="521">native521</string> + <string id="522">native522</string> + <string id="523">native523</string> + <string id="524">native524</string> + <string id="525">native525</string> + <string id="526">native526</string> + <string id="527">native527</string> + <string id="528">native528</string> + <string id="529">native529</string> + <string id="530">native530</string> + <string id="531">native531</string> + <string id="532">native532</string> + <string id="533">native533</string> + <string id="534">native534</string> + <string id="535">native535</string> + <string id="536">native536</string> + <string id="537">native537</string> + <string id="538">native538</string> + <string id="539">native539</string> + <string id="540">native540</string> + <string id="541">native541</string> + <string id="542">native542</string> + <string id="543">native543</string> + <string id="544">native544</string> + <string id="545">native545</string> + <string id="546">native546</string> + <string id="547">native547</string> + <string id="548">native548</string> + <string id="549">native549</string> + <string id="550">native550</string> + <string id="551">native551</string> + <string id="552">native552</string> + <string id="553">native553</string> + <string id="554">native554</string> + <string id="555">native555</string> + <string id="556">native556</string> + <string id="557">native557</string> + <string id="558">native558</string> + <string id="559">native559</string> + <string id="560">native560</string> + <string id="561">native561</string> + <string id="562">native562</string> + <string id="563">native563</string> + <string id="564">native564</string> + <string id="565">native565</string> + <string id="566">native566</string> + <string id="567">native567</string> + <string id="568">native568</string> + <string id="569">native569</string> + <string id="570">native570</string> + <string id="571">native571</string> + <string id="572">native572</string> + <string id="573">native573</string> + <string id="574">native574</string> + <string id="575">native575</string> + <string id="576">native576</string> + <string id="577">native577</string> + <string id="578">native578</string> + <string id="579">native579</string> + <string id="580">native580</string> + <string id="581">native581</string> + <string id="582">native582</string> + <string id="583">native583</string> + <string id="584">native584</string> + <string id="585">native585</string> + <string id="586">native586</string> + <string id="587">native587</string> + <string id="588">native588</string> + <string id="589">native589</string> + <string id="590">native590</string> + <string id="591">native591</string> + <string id="592">native592</string> + <string id="593">native593</string> + <string id="594">native594</string> + <string id="595">native595</string> + <string id="596">native596</string> + <string id="597">native597</string> + <string id="598">native598</string> + <string id="599">native599</string> + <string id="600">native600</string> + <string id="601">native601</string> + <string id="602">native602</string> + <string id="603">native603</string> + <string id="604">native604</string> + <string id="605">native605</string> + <string id="606">native606</string> + <string id="607">native607</string> + <string id="608">native608</string> + <string id="609">native609</string> + <string id="610">native610</string> + <string id="611">native611</string> + <string id="612">native612</string> + <string id="613">native613</string> + <string id="614">native614</string> + <string id="615">native615</string> + <string id="616">native616</string> + <string id="617">native617</string> + <string id="618">native618</string> + <string id="619">native619</string> + <string id="620">native620</string> + <string id="621">native621</string> + <string id="622">native622</string> + <string id="623">native623</string> + <string id="624">native624</string> + <string id="625">native625</string> + <string id="626">native626</string> + <string id="627">native627</string> + <string id="628">native628</string> + <string id="629">native629</string> + <string id="630">native630</string> + <string id="631">native631</string> + <string id="632">native632</string> + <string id="633">native633</string> + <string id="634">native634</string> + <string id="635">native635</string> + <string id="636">native636</string> + <string id="637">native637</string> + <string id="638">native638</string> + <string id="639">native639</string> + <string id="640">native640</string> + <string id="641">native641</string> + <string id="642">native642</string> + <string id="643">native643</string> + <string id="644">native644</string> + <string id="645">native645</string> + <string id="646">native646</string> + <string id="647">native647</string> + <string id="648">native648</string> + <string id="649">native649</string> + <string id="650">native650</string> + <string id="651">native651</string> + <string id="652">native652</string> + <string id="653">native653</string> + <string id="654">native654</string> + <string id="655">native655</string> + <string id="656">native656</string> + <string id="657">native657</string> + <string id="658">native658</string> + <string id="659">native659</string> + <string id="660">native660</string> + <string id="661">native661</string> + <string id="662">native662</string> + <string id="663">native663</string> + <string id="664">native664</string> + <string id="665">native665</string> + <string id="666">native666</string> + <string id="667">native667</string> + <string id="668">native668</string> + <string id="669">native669</string> + <string id="670">native670</string> + <string id="671">native671</string> + <string id="672">native672</string> + <string id="673">native673</string> + <string id="674">native674</string> + <string id="675">native675</string> + <string id="676">native676</string> + <string id="677">native677</string> + <string id="678">native678</string> + <string id="679">native679</string> + <string id="680">native680</string> + <string id="681">native681</string> + <string id="682">native682</string> + <string id="683">native683</string> + <string id="684">native684</string> + <string id="685">native685</string> + <string id="686">native686</string> + <string id="687">native687</string> + <string id="688">native688</string> + <string id="689">native689</string> + <string id="690">native690</string> + <string id="691">native691</string> + <string id="692">native692</string> + <string id="693">native693</string> + <string id="694">native694</string> + <string id="695">native695</string> + <string id="696">native696</string> + <string id="697">native697</string> + <string id="698">native698</string> + <string id="699">native699</string> + <string id="700">native700</string> + <string id="701">native701</string> + <string id="702">native702</string> + <string id="703">native703</string> + <string id="704">native704</string> + <string id="705">native705</string> + <string id="706">native706</string> + <string id="707">native707</string> + <string id="708">native708</string> + <string id="709">native709</string> + <string id="710">native710</string> + <string id="711">native711</string> + <string id="712">native712</string> + <string id="713">native713</string> + <string id="714">native714</string> + <string id="715">native715</string> + <string id="716">native716</string> + <string id="717">native717</string> + <string id="718">native718</string> + <string id="719">native719</string> + <string id="720">native720</string> + <string id="721">native721</string> + <string id="722">native722</string> + <string id="723">native723</string> + <string id="724">native724</string> + <string id="725">native725</string> + <string id="726">native726</string> + <string id="727">native727</string> + <string id="728">native728</string> + <string id="729">native729</string> + <string id="730">native730</string> + <string id="731">native731</string> + <string id="732">native732</string> + <string id="733">native733</string> + <string id="734">native734</string> + <string id="735">native735</string> + <string id="736">native736</string> + <string id="737">native737</string> + <string id="738">native738</string> + <string id="739">native739</string> + <string id="740">native740</string> + <string id="741">native741</string> + <string id="742">native742</string> + <string id="743">native743</string> + <string id="744">native744</string> + <string id="745">native745</string> + <string id="746">native746</string> + <string id="747">native747</string> + <string id="748">native748</string> + <string id="749">native749</string> + <string id="750">native750</string> + <string id="751">native751</string> + <string id="752">native752</string> + <string id="753">native753</string> + <string id="754">native754</string> + <string id="755">native755</string> + <string id="756">native756</string> + <string id="757">native757</string> + <string id="758">native758</string> + <string id="759">native759</string> + <string id="760">native760</string> + <string id="761">native761</string> + <string id="762">native762</string> + <string id="763">native763</string> + <string id="764">native764</string> + <string id="765">native765</string> + <string id="766">native766</string> + <string id="767">native767</string> + <string id="768">native768</string> + <string id="769">native769</string> + <string id="770">native770</string> + <string id="771">native771</string> + <string id="772">native772</string> + <string id="773">native773</string> + <string id="774">native774</string> + <string id="775">native775</string> + <string id="776">native776</string> + <string id="777">native777</string> + <string id="778">native778</string> + <string id="779">native779</string> + <string id="780">native780</string> + <string id="781">native781</string> + <string id="782">native782</string> + <string id="783">native783</string> + <string id="784">native784</string> + <string id="785">native785</string> + <string id="786">native786</string> + <string id="787">native787</string> + <string id="788">native788</string> + <string id="789">native789</string> + <string id="790">native790</string> + <string id="791">native791</string> + <string id="792">native792</string> + <string id="793">native793</string> + <string id="794">native794</string> + <string id="795">native795</string> + <string id="796">native796</string> + <string id="797">native797</string> + <string id="798">native798</string> + <string id="799">native799</string> + <string id="800">native800</string> + <string id="801">native801</string> + <string id="802">native802</string> + <string id="803">native803</string> + <string id="804">native804</string> + <string id="805">native805</string> + <string id="806">native806</string> + <string id="807">native807</string> + <string id="808">native808</string> + <string id="809">native809</string> + <string id="810">native810</string> + <string id="811">native811</string> + <string id="812">native812</string> + <string id="813">native813</string> + <string id="814">native814</string> + <string id="815">native815</string> + <string id="816">native816</string> + <string id="817">native817</string> + <string id="818">native818</string> + <string id="819">native819</string> + <string id="820">native820</string> + <string id="821">native821</string> + <string id="822">native822</string> + <string id="823">native823</string> + <string id="824">native824</string> + <string id="825">native825</string> + <string id="826">native826</string> + <string id="827">native827</string> + <string id="828">native828</string> + <string id="829">native829</string> + <string id="830">native830</string> + <string id="831">native831</string> + <string id="832">native832</string> + <string id="833">native833</string> + <string id="834">native834</string> + <string id="835">native835</string> + <string id="836">native836</string> + <string id="837">native837</string> + <string id="838">native838</string> + <string id="839">native839</string> + <string id="840">native840</string> + <string id="841">native841</string> + <string id="842">native842</string> + <string id="843">native843</string> + <string id="844">native844</string> + <string id="845">native845</string> + <string id="846">native846</string> + <string id="847">native847</string> + <string id="848">native848</string> + <string id="849">native849</string> + <string id="850">native850</string> + <string id="851">native851</string> + <string id="852">native852</string> + <string id="853">native853</string> + <string id="854">native854</string> + <string id="855">native855</string> + <string id="856">native856</string> + <string id="857">native857</string> + <string id="858">native858</string> + <string id="859">native859</string> + <string id="860">native860</string> + <string id="861">native861</string> + <string id="862">native862</string> + <string id="863">native863</string> + <string id="864">native864</string> + <string id="865">native865</string> + <string id="866">native866</string> + <string id="867">native867</string> + <string id="868">native868</string> + <string id="869">native869</string> + <string id="870">native870</string> + <string id="871">native871</string> + <string id="872">native872</string> + <string id="873">native873</string> + <string id="874">native874</string> + <string id="875">native875</string> + <string id="876">native876</string> + <string id="877">native877</string> + <string id="878">native878</string> + <string id="879">native879</string> + <string id="880">native880</string> + <string id="881">native881</string> + <string id="882">native882</string> + <string id="883">native883</string> + <string id="884">native884</string> + <string id="885">native885</string> + <string id="886">native886</string> + <string id="887">native887</string> + <string id="888">native888</string> + <string id="889">native889</string> + <string id="890">native890</string> + <string id="891">native891</string> + <string id="892">native892</string> + <string id="893">native893</string> + <string id="894">native894</string> + <string id="895">native895</string> + <string id="896">native896</string> + <string id="897">native897</string> + <string id="898">native898</string> + <string id="899">native899</string> + <string id="900">native900</string> +</strings> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.English_(en_US)-Help.xml b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.English_(en_US)-Help.xml new file mode 100644 index 0000000..1705beb --- /dev/null +++ b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.English_(en_US)-Help.xml @@ -0,0 +1,45 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="NativeMovieInfo_cbEnabled">Enable or disable this module.</string> + <string control="NativeMovieInfo_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieInfo_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieInfo_txtIMDBURL">Enter the mirror to use when retrieving information from IMDB.</string> + <string control="NativeMovieInfo_chkOFDBTitle">If enabled, Ember will attempt to retreive the movie title from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkOFDBOutline">If enabled, Ember will attempt to retreive the movie outline from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkOFDBPlot">If enabled, Ember will attempt to retreive the movie plot from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkOFDBGenre">If enabled, Ember will attempt to retreive the movie genre from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkCertification">Enable scraping movie certification.</string> + <string control="NativeMovieInfo_chkTop250">Enable scraping movie Top 250 ranking.</string> + <string control="NativeMovieInfo_txtGenreLimit">Limit the number of scraped genres to the entered value.</string> + <string control="NativeMovieInfo_txtActorLimit">Limit the number of scraped actors to the entered value.</string> + <string control="NativeMovieInfo_chkCrew">Enable scraping movie other crew. (Scrape Full Crew must be enabled)</string> + <string control="NativeMovieInfo_chkMusicBy">Enable scraping movie musicians. (Scrape Full Crew must be enabled)</string> + <string control="NativeMovieInfo_chkProducers">Enable scraping movie producers. (Scrape Full Crew must be enabled)</string> + <string control="NativeMovieInfo_chkWriters">Enable scraping movie writers.</string> + <string control="NativeMovieInfo_chkStudio">Enable scraping movie studio.</string> + <string control="NativeMovieInfo_chkRuntime">Enable scraping movie runtime.</string> + <string control="NativeMovieInfo_chkPlot">Enable scraping movie plot.</string> + <string control="NativeMovieInfo_chkOutline">Enable scraping movie outline.</string> + <string control="NativeMovieInfo_chkGenre">Enable scraping movie genre.</string> + <string control="NativeMovieInfo_chkDirector">Enable scraping movie director.</string> + <string control="NativeMovieInfo_chkTagline">Enable scraping movie tagline.</string> + <string control="NativeMovieInfo_chkCast">Enable scraping movie cast.</string> + <string control="NativeMovieInfo_chkVotes">Enable scraping movie votes.</string> + <string control="NativeMovieInfo_chkTrailer">Enable scraping movie trailer url.</string> + <string control="NativeMovieInfo_chkRating">Enable scraping movie rating.</string> + <string control="NativeMovieInfo_chkRelease">Enable scraping movie release date.</string> + <string control="NativeMovieInfo_chkMPAA">Enable scraping movie MPAA.</string> + <string control="NativeMovieInfo_chkYear">Enable scraping movie year.</string> + <string control="NativeMovieInfo_chkTitle">Enable scraping movie title.</string> + <string control="NativeMovieMedia_cbEnabled">Enable or disable this module.</string> + <string control="NativeMovieMedia_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieMedia_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieMedia_chkScrapePoster">Enable scraping posters from this module. (Refer to global poster settings for more options)</string> + <string control="NativeMovieMedia_chkScrapeFanart">Enable scraping fanart from this module. (Refer to global fanart settings for more options)</string> + <string control="NativeMovieMedia_chkUseTMDB">Enable retrieving images from theMovieDB.org.</string> + <string control="NativeMovieMedia_chkUseIMPA">Enable retrieving images from</string> + <string control="NativeMovieMedia_chkUseMPDB">Enable retrieving images from MoviePosterDB.com.</string> + <string control="NativeMovieMedia_chkAutoThumbs">Enable automatic extraction of extrathumbs from this module. (Refer to global extrathumb settings for more options)</string> + <string control="NativeMovieMedia_chkDownloadTrailer">Enable trailer downloading from this module. (Refer to global trailer settings for more options)</string> + <string control="NativeMovieMedia_txtTimeout">Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.)</string> + <string control="NativeMovieMedia_lbTrailerSites">Select the sites from which you would like to retrieve trailer URLs and/or files.</string> +</strings> diff --git a/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.English_(en_US).xml b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.English_(en_US).xml new file mode 100644 index 0000000..87a19b5 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.English_(en_US).xml @@ -0,0 +1,117 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Native TV Scrapers</string> + <string id="1">Use OFDB Genre</string> + <string id="2">Use OFDB Plot</string> + <string id="3">Use OFDB Outline</string> + <string id="4">Use OFDB Title</string> + <string id="5">IMDB Mirror:</string> + <string id="6">Scraper Fields - Scraper specific</string> + <string id="7">Timeout:</string> + <string id="8">Supported Sites:</string> + <string id="9">Get Images From:</string> + <string id="10">Search Results</string> + <string id="11">Searching IMDB...</string> + <string id="12">The ID you entered is not a valid IMDB ID.</string> + <string id="13">You have manually entered an IMDB ID but have not verified it is correct.</string> + <string id="14">Continue without verification?</string> + <string id="15">Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again.</string> + <string id="16">Verification Failed</string> + <string id="17">Partial Matches ({0})</string> + <string id="18">Exact Matches ({0})</string> + <string id="19">Popular Titles ({0})</string> + <string id="20">No Matches Found</string> + <string id="21">View details of each result to find the proper movie.</string> + <string id="22">Movie Search Results</string> + <string id="23">Manual IMDB Entry:</string> + <string id="24">Verify</string> + <string id="25">Searching IMDB...</string> + <string id="26">Downloading details...</string> + <string id="27">Downloading {0}</string> + <string id="28">No Fanart found for this movie.</string> + <string id="29">No Fanart Found</string> + <string id="30">No Posters found for this movie.</string> + <string id="31">No Posters Found</string> + <string id="32">Retrieving data from TheMovieDB.com...</string> + <string id="33">TheMovieDB.com is not enabled</string> + <string id="34">Retrieving data from IMPAwards.com...</string> + <string id="35">IMPAwards.com is not enabled</string> + <string id="36">Retrieving data from MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com is not enabled</string> + <string id="38">Preparing images...</string> + <string id="39">Select Poster</string> + <string id="40">Select Fanart</string> + <string id="41">Check All Thumb</string> + <string id="42">Check All Mid</string> + <string id="43">Check All Original</string> + <string id="44">Selected item will be set as fanart. All checked items will be saved to \extrathumbs.</string> + <string id="45">Performing Preliminary Tasks...</string> + <string id="46">Downloading Selected Image...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Small</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Small ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Multiple</string> + <string id="56">Downloading selected trailer...</string> + <string id="57">Copying specified file to trailer...</string> + <string id="58">The trailer could not be played. This could be due to an invalid URL or you do not have the proper player to play the trailer type.</string> + <string id="59">Error Playing Trailer</string> + <string id="60">Move</string> + <string id="61">Copy</string> + <string id="62">Moving specified file to trailer...</string> + <string id="63">Set To Nfo</string> + <string id="64">Select Trailer</string> + <string id="65">Select Trailer to Download</string> + <string id="66">Manual Trailer Entry</string> + <string id="67">Direct Link or YouTube URL:</string> + <string id="68">Compiling trailer list...</string> + <string id="69">Preview Trailer</string> + <string id="70">Local Trailer:</string> + <string id="71">The video format links could not be retrieved.</string> + <string id="72">Error Retrieving Video Format Links</string> + <string id="73">Select Format</string> + <string id="74">Getting available formats...</string> + <string id="75">Available Formats</string> + <string id="76">A poster of your preferred size could not be found. Please choose another.</string> + <string id="77">No Preferred Size</string> + <string id="78">Fanart of your preferred size could not be found. Please choose another.</string> + <string id="79">There are no known episodes for this show. Scrape the show, season, or episode and try again.</string> + <string id="80">No Known Episodes</string> + <string id="81">There is no poster available for this episode.</string> + <string id="82">Guest Star</string> + <string id="83">The ID you entered is not a valid TVDB ID.</string> + <string id="84">Downloading show info...</string> + <string id="85">TV Search Results</string> + <string id="86">View details of each result to find the proper TV show.</string> + <string id="87">Downloading Fullsize Fanart Image...</string> + <string id="88">Loading Current Images...</string> + <string id="89">(Down)Loading New Images...</string> + <string id="90">Setting Defaults...</string> + <string id="91">Show Poster</string> + <string id="92">Episode Fanart</string> + <string id="93">Show Fanart</string> + <string id="94">All Seasons Poster</string> + <string id="95">Season Posters</string> + <string id="96">Season Fanart</string> + <string id="97">Season {0} Posters</string> + <string id="98">Season {0} Fanart</string> + <string id="99">TV Image Selection</string> + <string id="100">Current Image:</string> + <string id="101">Get Posters</string> + <string id="102">Get Fanart</string> + <string id="103">These settings are specific to this module.{0}Please refer to the global settings for more options.</string> + <string id="104">Ember Native Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Size:</string> + <string id="109">Trailers</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Preferred language</string> + <string id="113">Save Fanart In:</string> + <string id="114">Open In Browser</string> +</strings> diff --git a/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.German_(de_DE)-Help.xml b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.German_(de_DE)-Help.xml new file mode 100644 index 0000000..f4c930d --- /dev/null +++ b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.German_(de_DE)-Help.xml @@ -0,0 +1,45 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="NativeMovieInfo_cbEnabled">Aktiviert dieses Modul.</string> + <string control="NativeMovieInfo_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieInfo_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieInfo_txtIMDBURL">Gib den Mirror ein über den Ember mit der IMDB kommunizieren soll.</string> + <string control="NativeMovieInfo_chkOFDBTitle">Wenn aktiviert versucht Ember den Titel von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkOFDBOutline">Wenn aktiviert versucht Ember die Kurzebschreibung von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkOFDBPlot">Wenn aktiviert versucht Ember die Inhaltsangabe von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkOFDBGenre">Wenn aktiviert versucht Ember die Genres von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkCertification">Aktiviert das Scrapen der Altersbeschränkung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTop250">Aktiviert das Scrapen der IMDB Top250 mit diesem Modul.</string> + <string control="NativeMovieInfo_txtGenreLimit">Die Anzahl der gescrapten Genres limitieren.</string> + <string control="NativeMovieInfo_txtActorLimit">Die Anzahl der gescrapten Schauspieler limitieren.</string> + <string control="NativeMovieInfo_chkCrew">Aktiviert das Scrapen der Sonstigen Crew mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!)</string> + <string control="NativeMovieInfo_chkMusicBy">Aktiviert das Scrapen der Musiker mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!)</string> + <string control="NativeMovieInfo_chkProducers">Aktiviert das Scrapen der Produzenten mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!)</string> + <string control="NativeMovieInfo_chkWriters">Aktiviert das Scrapen der Autoren mit diesem Modul.</string> + <string control="NativeMovieInfo_chkStudio">Aktiviert das Scrapen des Studios mit diesem Modul.</string> + <string control="NativeMovieInfo_chkRuntime">Aktiviert das Scrapen der Spielzeit mit diesem Modul.</string> + <string control="NativeMovieInfo_chkPlot">Aktiviert das Scrapen des Inhalts mit diesem Modul.</string> + <string control="NativeMovieInfo_chkOutline">Aktiviert das Scrapen der Kurzbeschreibung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkGenre">Aktiviert das Scrapen von Genre mit diesem Modul.</string> + <string control="NativeMovieInfo_chkDirector">Aktiviert das Scrapen des Regisseurs mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTagline">Aktiviert das Scrapen der Tagline mit diesem Modul.</string> + <string control="NativeMovieInfo_chkCast">Aktiviert das Scrapen der Schauspieler mit diesem Modul.</string> + <string control="NativeMovieInfo_chkVotes">Aktiviert das Scrapen der Anzahl Bewertungen mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTrailer">Aktiviert das Scrapen von Trailern mit diesem Modul.</string> + <string control="NativeMovieInfo_chkRating">Aktiviert das Scrapen der Bewertung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkRelease">Aktiviert das Scrapen des Premiere Datums mit diesem Modul.</string> + <string control="NativeMovieInfo_chkMPAA">Aktiviert das Scrapen der MPAA Bewertung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkYear">Aktiviert das Scrapen des Jahres mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTitle">Aktiviert das Scrapen des Titels mit diesem Modul.</string> + <string control="NativeMovieMedia_cbEnabled">Aktiviert dieses Modul.</string> + <string control="NativeMovieMedia_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieMedia_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieMedia_chkScrapePoster">Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_chkScrapeFanart">Aktiviert das Laden von Fanart mit diesem Modul. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_chkUseTMDB">Aktiviert das Laden von Bildern von TheMovieDB.org.</string> + <string control="NativeMovieMedia_chkUseIMPA">Aktiviert das Laden von Bildern von IMPA</string> + <string control="NativeMovieMedia_chkUseMPDB">Aktiviert das Laden von Bildern von MoviePosterDB.com.</string> + <string control="NativeMovieMedia_chkAutoThumbs">Automatische Frame extraktion mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_chkDownloadTrailer">Trailer laden mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_txtTimeout">Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Zeite in dieser Zeit nicht geantwortet hat wird sie übersprungen)</string> + <string control="NativeMovieMedia_lbTrailerSites">Wähle die Seite von der Trailer URLs/Dateien geladen werden sollen.</string> +</strings> diff --git a/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.German_(de_DE).xml b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.German_(de_DE).xml new file mode 100644 index 0000000..0349557 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.German_(de_DE).xml @@ -0,0 +1,117 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Nativer TV Scraper</string> + <string id="1">OFDB Genre benutzen</string> + <string id="2">OFDB Handlung benutzen</string> + <string id="3">OFDB Kurzbeschr. benutzen</string> + <string id="4">OFDB Titel benutzen</string> + <string id="5">IMDB Mirror:</string> + <string id="6">Scraper Felder - Scraper spezifisch</string> + <string id="7">Timeout:</string> + <string id="8">Unterstützte Seiten:</string> + <string id="9">Bilder holen von:</string> + <string id="10">Suchergebnis</string> + <string id="11">Suche in der IMDB...</string> + <string id="12">Die eingegebene ID ist keine gültige IMDB ID.</string> + <string id="13">Die IMDB ID ist noch nicht geprüft.</string> + <string id="14">Ohne Prüfung fortfahren?</string> + <string id="15">Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben.</string> + <string id="16">Prüfung fehlgeschlagen</string> + <string id="17">Teil Treffer ({0})</string> + <string id="18">Exakte Treffer({0})</string> + <string id="19">Populäre Titel ({0})</string> + <string id="20">Keine Treffer</string> + <string id="21">Schaue dir die Details an um den richtigen Film zu finden.</string> + <string id="22">Film Suchergebnis</string> + <string id="23">Man. IMDB ID:</string> + <string id="24">Prüfen</string> + <string id="25">Suche in der IMDB...</string> + <string id="26">Lade Details...</string> + <string id="27">Lade {0} herunter</string> + <string id="28">Kein Fanart für diesen Film gefunden</string> + <string id="29">Kein Fanart gefunden</string> + <string id="30">Kein Poster für diesen Film gefunden</string> + <string id="31">Kein Poster gefunden</string> + <string id="32">Lade Daten von TheMovieDB.com...</string> + <string id="33">TheMovieDB.com ist nicht aktiviert.</string> + <string id="34">Lade Daten von IMPAwards.com...</string> + <string id="35">IMPAwards.com ist nicht aktiviert.</string> + <string id="36">Lade Daten von MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com ist nicht aktiviert.</string> + <string id="38">Bereite Bilder vor...</string> + <string id="39">Wähle Poster</string> + <string id="40">Wähle Fanart</string> + <string id="41">Alle Thumbs</string> + <string id="42">Alle Mittl.</string> + <string id="43">Alle Original</string> + <string id="44">Markiertes Bild wird Fanart. Alle aktivierten werden Extrathumbs.</string> + <string id="45">Vorarbeit läuft...</string> + <string id="46">Lade gewähltes Bild...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">mittel</string> + <string id="50">klein</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">klein ({0}x{1})</string> + <string id="54">mittel ({0}x{1})</string> + <string id="55">Mehrfach</string> + <string id="56">Lade gewählten Trailer...</string> + <string id="57">Kopiere gewählten Trailer...</string> + <string id="58">Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URL liegen oder es ist kein Player für diesen Dateityp vorhanden.</string> + <string id="59">Fehler beim Abspielen des Trailers</string> + <string id="60">Verschieben</string> + <string id="61">Kopieren</string> + <string id="62">Verschiebe gewählten Trailer...</string> + <string id="63">In NFO speichern</string> + <string id="64">Trailer wählen</string> + <string id="65">Trailer zum laden wählen</string> + <string id="66">Man. Trailer</string> + <string id="67">Direktlink oder YouTube URL:</string> + <string id="68">Stelle Trailerliste zusammen...</string> + <string id="69">Trailer Vorschau</string> + <string id="70">Lokaler Trailer:</string> + <string id="71">Die Videoformat Linkliste konnte nicht generiert werden.</string> + <string id="72">Fehler beim generieren der Videoformat Linkliste</string> + <string id="73">Format wählen</string> + <string id="74">Hole verfügbare Formate...</string> + <string id="75">Verfügbare Formate</string> + <string id="76">Es konnte kein Poster in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="77">Keine gewünschte Größe</string> + <string id="78">Es konnte kein Fanart in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="79">Keine Episoden für diese TV-Serie verfügbar. Scrape diese Serie, Staffel oder Episode und versuche es erneut.</string> + <string id="80">Keine Episoden verfügbar</string> + <string id="81">Kein Poster für diese Episode vorhanden.</string> + <string id="82">Gast Star</string> + <string id="83">Die eingegebene ID ist keine gültige TVDB ID.</string> + <string id="84">Lade Serien Informationen...</string> + <string id="85">Serien Suchergebnis</string> + <string id="86">Betrachte die Details um die richtige TV-Serie zu erkennen.</string> + <string id="87">Lade Fanart in Originalgröße...</string> + <string id="88">Lade aktuelle Bilder...</string> + <string id="89">Lade neue Bilder...</string> + <string id="90">Setze Standardwerte...</string> + <string id="91">Serien Poster</string> + <string id="92">Episoden Fanart</string> + <string id="93">Serien Fanart</string> + <string id="94">Alle-Staffeln Poster</string> + <string id="95">Staffel Posters</string> + <string id="96">Staffel Fanart</string> + <string id="97">Staffel {0} Poster</string> + <string id="98">Staffel {0} Fanart</string> + <string id="99">Bilderwahl TV-Serien</string> + <string id="100">Aktuelles Bild:</string> + <string id="101">Poster laden</string> + <string id="102">Fanart laden</string> + <string id="103">Diese Einstellungen sind Modul-spezifisch. {0} Bitte werfen sie einen blick in die Globalen Einstellungen für noch mehr Optionen.</string> + <string id="104">Ember Nativer Film Scraper</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Grösse:</string> + <string id="109">Trailer</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Bevorzugte Sprache</string> + <string id="113">Speichere Fanart in:</string> + <string id="114">Im Browser öffnen</string> +</strings> diff --git a/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..79a98bf --- /dev/null +++ b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,45 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="NativeMovieInfo_cbEnabled">Slå modulen av eller på.</string> + <string control="NativeMovieInfo_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieInfo_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieInfo_txtIMDBURL">Før inn speilserver til IMDB.</string> + <string control="NativeMovieInfo_chkOFDBTitle">Hvis påslått, EMM vil å prøve å finne filmtittel fra OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkOFDBOutline">Hvis påslått, EMM vil prøve å finne beskrivelse av filmen på OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkOFDBPlot">Hvis påslått, EMM vil hente filmhistorien fra OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkOFDBGenre">Hvis påslått, EMM vil hente filmsjanger fra OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkCertification">Slå på detaljhenting av filmsertifisering.</string> + <string control="NativeMovieInfo_chkTop250">Slå på detaljhenting av IMDB Top 250-plassering.</string> + <string control="NativeMovieInfo_txtGenreLimit">Begrens antall detaljhentede sjangre.</string> + <string control="NativeMovieInfo_txtActorLimit">Begrens antall skuespillere.</string> + <string control="NativeMovieInfo_chkCrew">Slå på detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått)</string> + <string control="NativeMovieInfo_chkMusicBy">Slå på detaljhenting av musikere. (Detaljhenting av fullt crew må være påslått)</string> + <string control="NativeMovieInfo_chkProducers">Slå på detaljhenting av filmprodusenter. (Detaljhenting av full crew må være påslått)</string> + <string control="NativeMovieInfo_chkWriters">Slå på detaljhenting av manusforfattere.</string> + <string control="NativeMovieInfo_chkStudio">Slå på detaljhenting av studio.</string> + <string control="NativeMovieInfo_chkRuntime">Slå på detaljhenting av filmlengde.</string> + <string control="NativeMovieInfo_chkPlot">Slå på detaljhenting av filmens historie.</string> + <string control="NativeMovieInfo_chkOutline">Slå på detaljhenting av filmens beskrivelse.</string> + <string control="NativeMovieInfo_chkGenre">Slå på detaljhenting av filmens sjanger.</string> + <string control="NativeMovieInfo_chkDirector">Slå på detaljhetning av filmens regissør.</string> + <string control="NativeMovieInfo_chkTagline">Slå på detaljhetning av filmens undertittel.</string> + <string control="NativeMovieInfo_chkCast">Slå på detaljhetning av filmens skuespillerbeholdning.</string> + <string control="NativeMovieInfo_chkVotes">Slå på detaljhetning av filmens poeng.</string> + <string control="NativeMovieInfo_chkTrailer">Slå på detaljhetning av filmens trailer URL.</string> + <string control="NativeMovieInfo_chkRating">Slå på detaljhetning av filmens aldersgrense.</string> + <string control="NativeMovieInfo_chkRelease">Slå på detaljhetning av filmens premieredato.</string> + <string control="NativeMovieInfo_chkMPAA">Slå på detaljhetning av filmens MPAA-markering.</string> + <string control="NativeMovieInfo_chkYear">Slå på detaljhetning av filmens år.</string> + <string control="NativeMovieInfo_chkTitle">Slå på detaljhetning av filmens tittel.</string> + <string control="NativeMovieMedia_cbEnabled">Slå modulen av eller på.</string> + <string control="NativeMovieMedia_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieMedia_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieMedia_chkScrapePoster">Slå på detaljhetning av plakater i denne modulen. (Se globale plakatinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_chkScrapeFanart">Slå på detaljhetning av fankunst i denne modulen. (Se globale fankunstinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_chkUseTMDB">Slå på bildehenting fra theMovieDB.org.</string> + <string control="NativeMovieMedia_chkUseIMPA">Slå på bildehenting fra</string> + <string control="NativeMovieMedia_chkUseMPDB">Slå på bildehenting fra MoviePosterDB.com</string> + <string control="NativeMovieMedia_chkAutoThumbs">Slå på automatisk henting av ekstrakunst fra denne modulen. (Se globale ekstrakunstinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_chkDownloadTrailer">Slå på automatisk henting av trailer fra denne modulen. (Se globale trailerinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_txtTimeout">Før inn tiden (i sekunder) du vil bruke for timeout for trailersider. (Hvis siden ikke svarer innen timeoutfristen, så vil den bli hoppet over)</string> + <string control="NativeMovieMedia_lbTrailerSites">Velg sidene du vil bruke til trailer URL og/eller filer.</string> +</strings> diff --git a/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO).xml b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO).xml new file mode 100644 index 0000000..52370c3 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO).xml @@ -0,0 +1,117 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">EMM TV-detaljhentere</string> + <string id="1">Bruk OFDB-sjangere</string> + <string id="2">Bruk OFDB-filmhistorie</string> + <string id="3">Bruk OFDB-beskrivelse</string> + <string id="4">Bruk OFDB-tittel</string> + <string id="5">IMDB-speilserver:</string> + <string id="6">Detaljhenterområder - Detaljhenterspesifikk</string> + <string id="7">Tidsavbrudd:</string> + <string id="8">Støttede sider:</string> + <string id="9">Hent bilder fra:</string> + <string id="10">Søkeresultater</string> + <string id="11">Søker TMDB...</string> + <string id="12">IDen du førte inn er ikke en riktig IMDB-ID.</string> + <string id="13">Du har ført inn en IMDB-ID, men har ikke verifisert om den er riktig.</string> + <string id="14">Fortsette uten verifisering?</string> + <string id="15">Kunne ikke hente filmdetaljer for den innførte IDen. Vennligst sjekk IDen og prøv igjen.</string> + <string id="16">Verifisering feilet</string> + <string id="17">Delvise treff ({0})</string> + <string id="18">Eksakte treff ({0})</string> + <string id="19">Populære titler ({0})</string> + <string id="20">Ingen funnet</string> + <string id="21">Se detaljer fra hvert treff for å finne riktig film.</string> + <string id="22">Filmsøkresultater</string> + <string id="23">Manuell IMDB innføring:</string> + <string id="24">Verifiser</string> + <string id="25">Søker TMDB...</string> + <string id="26">Laster ned detaljer...</string> + <string id="27">Laster ned {0}</string> + <string id="28">Ingen fankunst funnet for denne filmen.</string> + <string id="29">Ingen fankunst funnet</string> + <string id="30">Ingen plakater funnet for denne filmen.</string> + <string id="31">Ingen plakater funnet</string> + <string id="32">Henter data fra TheMovieDB.com...</string> + <string id="33">TheMovieDB.com er ikke påslått</string> + <string id="34">Henter data fra IMPAwards.com...</string> + <string id="35">IMPAwards.com er ikke påslått</string> + <string id="36">Henter data fra MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com er ikke påslått</string> + <string id="38">Forbereder bilder...</string> + <string id="39">Velg plakat</string> + <string id="40">Velg fankunst</string> + <string id="41">Huk av alle tommelbilder</string> + <string id="42">Huk av alle Mid</string> + <string id="43">Huk av alle originale</string> + <string id="44">Valgte objekt vil bli satt som fankunst. Alle hukede objekter vil bli lagret i \extrathumbs.</string> + <string id="45">Utfører forberedende oppgaver...</string> + <string id="46">Laster ned valgte bilde...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Liten</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover {0}x{1}</string> + <string id="53">Liten ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Flere</string> + <string id="56">Laster ned valgt trailer...</string> + <string id="57">Kopierer valgt fil til trailer...</string> + <string id="58">Traileren kunne ikke spilles av. Det kan være at URL ikke er gyldig, eller at du ikke har riktig avspiller for denne filtypen.</string> + <string id="59">Kunne spille av trailer.</string> + <string id="60">Flytt</string> + <string id="61">Kopiér</string> + <string id="62">Flytter valgt fil til trailer...</string> + <string id="63">Sett i nfo</string> + <string id="64">Velg trailer</string> + <string id="65">Velg trailer til å laste ned</string> + <string id="66">Manuell trailerinnføring</string> + <string id="67">Direkte link eller YouTube URL:</string> + <string id="68">Kompilerer trailerliste...</string> + <string id="69">Sniktitt på trailer</string> + <string id="70">Lokal trailer:</string> + <string id="71">Videoformatlenkene kunne ikke hentes</string> + <string id="72">Kunne ikke hente videoformatlenker</string> + <string id="73">Velg format</string> + <string id="74">Henter tilgjengelige formater...</string> + <string id="75">Tilgjengelige formater</string> + <string id="76">En plakat i din valgte størrelse kunne ikke hentes. Vennligst velg en annen.</string> + <string id="77">Ingen foretrukket størrelse</string> + <string id="78">Fankunst i din foretrukkede størrelse kunne ikke bli funnet. Vennligst velg en annen.</string> + <string id="79">Det er ingen kjente episoder for denne serien. Detaljhent serien, sesongen eller episoden og prøv på nytt.</string> + <string id="80">Ingen kjente episoder</string> + <string id="81">Det er ingen plakater for denne episoden.</string> + <string id="82">Gjesteskuespiller</string> + <string id="83">IDen du innførte er ikke en gyldig TVDB ID.</string> + <string id="84">Laster ned serieinfo...</string> + <string id="85">TVsøk-resultater</string> + <string id="86">Se detaljer fra hvert resultat for å finne riktig serie.</string> + <string id="87">Laster ned fankunst i full størrelse...</string> + <string id="88">Laster inn nåværende bilder...</string> + <string id="89">Laster (ned) nye bilder...</string> + <string id="90">Setter standarder...</string> + <string id="91">Serieplakat</string> + <string id="92">Episodefankunst</string> + <string id="93">Vis fankunst</string> + <string id="94">Alle sesonger-plakat</string> + <string id="95">Sesongplakater</string> + <string id="96">Sesongfankunst</string> + <string id="97">Sesong {0}-plakater</string> + <string id="98">Sesong {0}-fankunst</string> + <string id="99">TV-bilde valg</string> + <string id="100">Nåværende bilde:</string> + <string id="101">Hent plakater</string> + <string id="102">Hent fankunst</string> + <string id="103">Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg.</string> + <string id="104">EMM film-detaljhentere</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (Tysk)</string> + <string id="108">TMDB Ekstrakunst-størrelse:</string> + <string id="109">Trailere</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC-format</string> + <string id="112">Foretrukket språk</string> + <string id="113">Lagre fankunst i:</string> + <string id="114">Åpne i nettleser</string> +</strings> diff --git a/Addons/scraper.OFDB.Data/My Project/Application.Designer.vb b/Addons/scraper.OFDB.Data/My Project/Application.Designer.vb new file mode 100644 index 0000000..66fb81a --- /dev/null +++ b/Addons/scraper.OFDB.Data/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Addons/scraper.OFDB.Data/My Project/Application.myapp b/Addons/scraper.OFDB.Data/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Addons/scraper.OFDB.Data/My Project/Application.myapp @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <MySubMain>false</MySubMain> + <SingleInstance>false</SingleInstance> + <ShutdownMode>0</ShutdownMode> + <EnableVisualStyles>true</EnableVisualStyles> + <AuthenticationMode>0</AuthenticationMode> + <ApplicationType>1</ApplicationType> + <SaveMySettingsOnExit>true</SaveMySettingsOnExit> +</MyApplicationData> diff --git a/Addons/scraper.OFDB.Data/My Project/AssemblyInfo.vb b/Addons/scraper.OFDB.Data/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..12730d1 --- /dev/null +++ b/Addons/scraper.OFDB.Data/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.OFDB.Data")> +<Assembly: AssemblyDescription("http://forum.xbmc.org/showthread.php?tid=116941")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.OFDB.Data")> +<Assembly: AssemblyCopyright("Copyright © 2013")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("E24E069F-D892-447B-80D4-28445B107A35")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.11")> +<Assembly: AssemblyFileVersion("1.3.0.11")> diff --git a/Addons/scraper.OFDB.Data/My Project/Resources.Designer.vb b/Addons/scraper.OFDB.Data/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bb85827 --- /dev/null +++ b/Addons/scraper.OFDB.Data/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''<summary> + ''' A strongly-typed resource class, for looking up localized strings, etc. + '''</summary> + <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + '''<summary> + ''' Returns the cached ResourceManager instance used by this class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EmberScraperModule.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + '''<summary> + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Addons/scraper.OFDB.Data/My Project/Resources.resx b/Addons/scraper.OFDB.Data/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Addons/scraper.OFDB.Data/My Project/Resources.resx @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/My Project/Settings.Designer.vb b/Addons/scraper.OFDB.Data/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f020222 --- /dev/null +++ b/Addons/scraper.OFDB.Data/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _ + Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + <Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _ + Friend Module MySettingsProperty + + <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _ + Friend ReadOnly Property Settings() As Global.EmberScraperModule.My.MySettings + Get + Return Global.EmberScraperModule.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Addons/scraper.OFDB.Data/My Project/Settings.settings b/Addons/scraper.OFDB.Data/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Addons/scraper.OFDB.Data/My Project/Settings.settings @@ -0,0 +1,7 @@ +<?xml version='1.0' encoding='utf-8'?> +<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true"> + <Profiles> + <Profile Name="(Default)" /> + </Profiles> + <Settings /> +</SettingsFile> diff --git a/Addons/scraper.OFDB.Data/Resources/Logo.png b/Addons/scraper.OFDB.Data/Resources/Logo.png new file mode 100644 index 0000000..a89dae1 Binary files /dev/null and b/Addons/scraper.OFDB.Data/Resources/Logo.png differ diff --git a/Addons/scraper.OFDB.Data/Scraper/clsScrapeIMDB.vb b/Addons/scraper.OFDB.Data/Scraper/clsScrapeIMDB.vb new file mode 100644 index 0000000..06e23c6 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/clsScrapeIMDB.vb @@ -0,0 +1,1126 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Globalization +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMDB + + Public Class MovieSearchResults + +#Region "Fields" + + Private _ExactMatches As New List(Of MediaContainers.Movie) + Private _PartialMatches As New List(Of MediaContainers.Movie) + Private _PopularTitles As New List(Of MediaContainers.Movie) + +#End Region 'Fields + +#Region "Properties" + + Public Property ExactMatches() As List(Of MediaContainers.Movie) + Get + Return _ExactMatches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _ExactMatches = value + End Set + End Property + + Public Property PartialMatches() As List(Of MediaContainers.Movie) + Get + Return _PartialMatches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _PartialMatches = value + End Set + End Property + + Public Property PopularTitles() As List(Of MediaContainers.Movie) + Get + Return _PopularTitles + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _PopularTitles = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + Public UseOFDBGenre As Boolean + Public UseOFDBOutline As Boolean + Public UseOFDBPlot As Boolean + Public UseOFDBTitle As Boolean + + Friend WithEvents bwIMDB As New System.ComponentModel.BackgroundWorker + + Private Const LINK_PATTERN As String = "<a[\s]+[^>]*?href[\s]?=[\s\""\']*(?<url>.*?)[\""\']*.*?>(?<name>[^<]+|.*?)?<\/a>" + + Private Const ACTORTABLE_PATTERN As String = "<table class=""cast"">(.*?)</table>" + Private Const HREF_PATTERN As String = "<a.*?href=[""'](?<url>.*?)[""'].*?>(?<name>.*?)</a>" + Private Const HREF_PATTERN_2 As String = "<a\shref=[""""'](?<url>.*?)[""""'].*?>(?<name>.*?)</a>" + Private Const HREF_PATTERN_3 As String = "<a href=""/search/title\?certificates=[^""]*"">([^<]*):([^<]*)</a>[^<]*(<i>([^<]*)</i>)?" + Private Const HREF_PATTERN_4 As String = "<a.*?href=[""']/(title/tt\d{7}/|name/nm\d{7}/)[""'].*?>(?<text>.*?)</a>" + Private Const IMDB_ID_REGEX As String = "tt\d\d\d\d\d\d\d" + Private Const IMG_PATTERN As String = "<img src=""(?<thumb>.*?)"" width=""\d{1,3}"" height=""\d{1,3}"" border="".{1,3}"">" + Private Const MOVIE_TITLE_PATTERN As String = "(?<=<(title)>).*(?=<\/\1>)" + Private Const TABLE_PATTERN As String = "<table.*?>\n?(.*?)</table>" + Private Const TD_PATTERN_1 As String = "<td\sclass=""nm"">(.*?)</td>" + Private Const TD_PATTERN_2 As String = "(?<=<td\sclass=""char"">)(.*?)(?=</td>)(\s\(.*?\))?" + Private Const TD_PATTERN_3 As String = "<td\sclass=""hs"">(.*?)</td>" + Private Const TD_PATTERN_4 As String = "<td>(?<title>.*?)</td>" + Private Const TITLE_PATTERN As String = "<a\shref=[""""'](?<url>.*?)[""""'].*?>(?<name>.*?)</a>((\s)+?(\((?<year>\d{4})(\/.*?)?\)))?((\s)+?(\((?<type>.*?)\)))?" + Private Const TR_PATTERN As String = "<tr\sclass="".*?"">(.*?)</tr>" + + Private sPoster As String + +#End Region 'Fields + +#Region "Enumerations" + + Private Enum SearchType + Movies = 0 + Details = 1 + SearchDetails = 2 + End Enum + +#End Region 'Enumerations + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + + Public Event SearchResultsDownloaded(ByVal mResults As IMDB.MovieSearchResults) + +#End Region 'Events + +#Region "Methods" + + Public Sub CancelAsync() + If bwIMDB.IsBusy Then bwIMDB.CancelAsync() + + While bwIMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Function GetMovieInfo(ByVal strID As String, ByRef IMDBMovie As MediaContainers.Movie, ByVal FullCrew As Boolean, ByVal FullCast As Boolean, ByVal GetPoster As Boolean, ByVal Options As Structures.ScrapeOptions, ByVal IsSearch As Boolean) As Boolean + Try + Dim ofdbTitle As String = String.Empty + Dim ofdbOutline As String = String.Empty + Dim ofdbPlot As String = String.Empty + Dim ofdbGenre As String = String.Empty + + If bwIMDB.CancellationPending Then Return Nothing + + If (UseOFDBTitle AndAlso Options.bTitle) OrElse (UseOFDBOutline AndAlso Options.bOutline) OrElse _ + (UseOFDBPlot AndAlso Options.bPlot) OrElse (UseOFDBGenre AndAlso Options.bGenre) Then + Dim OFDBScrape As New OFDB(strID, IMDBMovie) + If UseOFDBTitle AndAlso Options.bTitle Then ofdbTitle = OFDBScrape.Title + If UseOFDBOutline AndAlso Options.bOutline Then ofdbOutline = OFDBScrape.Outline + If UseOFDBPlot AndAlso Options.bPlot Then ofdbPlot = OFDBScrape.Plot + If UseOFDBGenre AndAlso Options.bGenre Then ofdbGenre = OFDBScrape.Genre + End If + + If bwIMDB.CancellationPending Then Return Nothing + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/combined")) + sHTTP = Nothing + + If bwIMDB.CancellationPending Then Return Nothing + + Dim sPlot As New HTTP + Dim PlotHtml As String = sPlot.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/plotsummary")) + sPlot = Nothing + + IMDBMovie.IMDBID = strID + + If bwIMDB.CancellationPending Then Return Nothing + + Dim OriginalTitle As String = Regex.Match(HTML, MOVIE_TITLE_PATTERN).ToString + If Options.bTitle Then + Dim oldOTitle As String = IMDBMovie.OriginalTitle + IMDBMovie.OriginalTitle = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(OriginalTitle, ".*(?=\s\(\d+.*?\))").ToString)).Trim + If String.IsNullOrEmpty(IMDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + If Not String.IsNullOrEmpty(ofdbTitle) Then + IMDBMovie.Title = ofdbTitle.Trim + Else + If Not String.IsNullOrEmpty(Master.eSettings.ForceTitle) Then + IMDBMovie.Title = GetForcedTitle(strID, IMDBMovie.OriginalTitle) + Else + IMDBMovie.Title = IMDBMovie.OriginalTitle.Trim + End If + End If + If String.IsNullOrEmpty(oldOTitle) OrElse Not oldOTitle = IMDBMovie.OriginalTitle Then + IMDBMovie.SortTitle = String.Empty + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If GetPoster Then + sPoster = Regex.Match(Regex.Match(HTML, "(?<=\b(name=""poster"")).*\b[</a>]\b").ToString, "(?<=\b(src=)).*\b(?=[</a>])").ToString.Replace("""", String.Empty).Replace("/></", String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bYear Then IMDBMovie.Year = Regex.Match(OriginalTitle, "(?<=\()\d+(?=.*\))", RegexOptions.RightToLeft).ToString + + Dim D, W, tempD As Integer + + If Options.bMPAA AndAlso (String.IsNullOrEmpty(IMDBMovie.MPAA) OrElse Not Master.eSettings.LockMPAA) Then + tempD = If(HTML.IndexOf("<h5><a href=""/mpaa"">MPAA</a>:</h5>") > 0, HTML.IndexOf("<h5><a href=""/mpaa"">MPAA</a>:</h5>"), 0) + + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + + W = If(D > 0, HTML.IndexOf("</div", D), 0) + + IMDBMovie.MPAA = If(D > 0 AndAlso W > 0, Web.HttpUtility.HtmlDecode(HTML.Substring(D, W - D).Remove(0, 26)).Trim(), String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bCert AndAlso (String.IsNullOrEmpty(IMDBMovie.Certification) OrElse Not Master.eSettings.LockMPAA) Then + 'get certifications + D = HTML.IndexOf("<h5>Certification:</h5>") + + If D > 0 Then + W = HTML.IndexOf("</div>", D) + Dim rCert As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN_3) + + If rCert.Count > 0 Then + Dim Cert = From M In rCert Select N = String.Format("{0}:{1}", DirectCast(M, Match).Groups(1).ToString.Trim, DirectCast(M, Match).Groups(2).ToString.Trim) Order By N Descending Where N.Contains(Master.eSettings.CertificationLang) + + If Not String.IsNullOrEmpty(Master.eSettings.CertificationLang) Then + If Cert.Count > 0 Then + IMDBMovie.Certification = Cert(0).ToString.Replace("West", String.Empty).Trim + If Options.bMPAA AndAlso Master.eSettings.UseCertForMPAA AndAlso (Not Master.eSettings.CertificationLang = "USA" OrElse (Master.eSettings.CertificationLang = "USA" AndAlso String.IsNullOrEmpty(IMDBMovie.MPAA))) Then + IMDBMovie.MPAA = If(Master.eSettings.CertificationLang = "USA", StringUtils.USACertToMPAA(IMDBMovie.Certification), If(Master.eSettings.OnlyValueForCert, IMDBMovie.Certification.Split(Convert.ToChar(":"))(1), IMDBMovie.Certification)) + End If + + + Else + 'No FSK Rating was found -> Alternative: Set USA Rating instead as fallback, MPAA will be converted to FSK, Certification from USA will be used, so people can see that US info was used! + If Master.eSettings.UseMPAAForFSK Then + Try + If Master.eSettings.CertificationLang = "Germany" AndAlso (IMDBMovie.MPAA.ToLower.Contains("usa") Or IMDBMovie.MPAA.ToLower.Contains("rated")) Then + Dim LANGRATING As String = "USA" + Dim Cert2 = From M In rCert Select N = String.Format("{0}:{1}", DirectCast(M, Match).Groups(1).ToString.Trim, DirectCast(M, Match).Groups(2).ToString.Trim) Order By N Descending Where N.Contains(LANGRATING) + If Cert2.Count > 0 Then + IMDBMovie.Certification = Cert2(0).ToString.Replace("West", String.Empty).Trim + If Options.bMPAA AndAlso Master.eSettings.UseCertForMPAA Then + If IMDBMovie.MPAA.ToLower.Contains("usa:g") Or IMDBMovie.MPAA.ToLower.Contains("rated g") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:0" + Else + IMDBMovie.MPAA = "0" + End If + + ElseIf IMDBMovie.MPAA.ToLower.Contains("usa:pg-13") Or IMDBMovie.MPAA.ToLower.Contains("rated pg-13") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:16" + Else + IMDBMovie.MPAA = "16" + End If + + ElseIf IMDBMovie.MPAA.ToLower.Contains("usa:pg") Or IMDBMovie.MPAA.ToLower.Contains("rated pg") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:12" + Else + IMDBMovie.MPAA = "12" + End If + + ElseIf IMDBMovie.Certification.ToLower.Contains("usa:r") Or IMDBMovie.Certification.ToLower.Contains("rated r") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:18" + Else + IMDBMovie.MPAA = "18" + End If + + ElseIf IMDBMovie.Certification.ToLower.Contains("usa:nc-17") Or IMDBMovie.Certification.ToLower.Contains("rated nc") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:18" + Else + IMDBMovie.MPAA = "18" + End If + + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End If + End If + + + Else + + IMDBMovie.Certification = Strings.Join(Cert.ToArray, " / ").Trim + + + End If + End If + End If + + If String.IsNullOrEmpty(IMDBMovie.Certification) AndAlso Not String.IsNullOrEmpty(IMDBMovie.MPAA) Then + IMDBMovie.Certification = IMDBMovie.MPAA + End If + + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bRelease Then + Dim RelDate As Date + Dim sRelDate As String = Regex.Match(HTML, "\d+\s\w+\s\d\d\d\d\s").ToString.Trim + If Not sRelDate = String.Empty Then + If Date.TryParse(sRelDate, RelDate) Then + IMDBMovie.ReleaseDate = Strings.FormatDateTime(RelDate, DateFormat.ShortDate).ToString + End If + Else + IMDBMovie.ReleaseDate = Nothing + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bRating AndAlso (String.IsNullOrEmpty(IMDBMovie.Rating) OrElse Not Master.eSettings.LockRating) Then + Dim RegexRating As String = Regex.Match(HTML, "\b\d\W\d/\d\d").ToString + If String.IsNullOrEmpty(RegexRating) Then + IMDBMovie.Rating = String.Empty + Else + IMDBMovie.Rating = RegexRating.Split(Convert.ToChar("/")).First.Trim + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'trailer + If Options.bTrailer AndAlso (String.IsNullOrEmpty(IMDBMovie.Trailer) OrElse Not Master.eSettings.LockTrailer) Then + 'Get first IMDB trailer if possible + Dim trailers As List(Of String) = GetTrailers(IMDBMovie.IMDBID) + 'Dim TMDB As New TMDB.Scraper + 'Dim YT As String = TMDB.GetTrailers(IMDBMovie.IMDBID) + + 'Dim sTrailerUrl As String = Regex.Match(HTML, "href=""(.*?/video/imdb/vi.*?)""").Groups(1).Value.Trim + 'If Not sTrailerUrl = String.Empty Then + 'Dim sTrailerURL2 As String = String.Empty + 'sTrailerUrl = String.Concat("http://", IMDBURL, sTrailerUrl, "player") + 'Dim HTTPTrailer As New HTTP + 'Dim HtmlTrailer As String = HTTPTrailer.DownloadData(sTrailerUrl) + 'HTTPTrailer = Nothing + + 'sTrailerUrl = Regex.Match(HtmlTrailer, "so.addVariable\(""id"", ""(.*?)""\);").Groups(1).Value.Trim + 'If sTrailerUrl = String.Empty Then + 'sTrailerURL2 = Regex.Match(HtmlTrailer, "so.addVariable\(""file"", ""(.*?)""\);").Groups(1).Value.Trim + 'Else + 'sTrailerURL2 = String.Concat(Regex.Match(HtmlTrailer, "so.addVariable\(""file"", ""(.*?)""\);").Groups(1).Value.Trim, sTrailerUrl) + 'End If + 'IMDBMovie.Trailer = Web.HttpUtility.UrlDecode(sTrailerURL2) + 'End If + IMDBMovie.Trailer = trailers.FirstOrDefault() + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bVotes Then IMDBMovie.Votes = Regex.Match(HTML, "class=""tn15more"">([0-9,]+) votes</a>").Groups(1).Value.Trim + + 'Top250 + 'ie: <a href="/chart/top?tt0167260">Top 250: #13</a> + If Options.bTop250 Then IMDBMovie.Top250 = Regex.Match(HTML, String.Concat("/chart/top\?tt", IMDBMovie.IMDBID, """>Top 250: #([0-9]+)</a>")).Groups(1).Value.Trim + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bCast Then + 'Find all cast of the movie + 'Match the table only 1 time + Dim ActorsTable As String = Regex.Match(HTML, ACTORTABLE_PATTERN).ToString + Dim ThumbsSize = AdvancedSettings.GetSetting("ActorThumbsSize", "SY275_SX400") + + Dim rCast As MatchCollection = Regex.Matches(ActorsTable, TR_PATTERN) + + Dim Cast1 = From M In rCast _ + Let m1 = Regex.Match(Regex.Match(M.ToString, TD_PATTERN_1).ToString, HREF_PATTERN) _ + Let m2 = Regex.Match(M.ToString, TD_PATTERN_2).ToString _ + Let m3 = Regex.Match(Regex.Match(M.ToString, TD_PATTERN_3).ToString, IMG_PATTERN) _ + Select New MediaContainers.Person(Web.HttpUtility.HtmlDecode(m1.Groups("name").ToString.Trim), _ + Web.HttpUtility.HtmlDecode(m2.ToString.Trim), _ + If(m3.Groups("thumb").ToString.IndexOf("addtiny") > 0 OrElse m3.Groups("thumb").ToString.IndexOf("no_photo") > 0, String.Empty, Strings.Replace(Web.HttpUtility.HtmlDecode(m3.Groups("thumb").ToString.Trim), _ + "._SX23_SY30_.jpg", String.Concat("._", ThumbsSize, "_.jpg")))) Take If(Master.eSettings.ActorLimit > 0, Master.eSettings.ActorLimit, 999999) + + If Master.eSettings.CastImagesOnly Then + Cast1 = Cast1.Where(Function(p As MediaContainers.Person) (Not String.IsNullOrEmpty(p.Thumb))) + End If + + Dim Cast As List(Of MediaContainers.Person) = Cast1.ToList + + 'Clean up the actors list + For Each Ps As MediaContainers.Person In Cast + For Each sMatch As Match In Regex.Matches(Ps.Role, HREF_PATTERN) + Ps.Role = Ps.Role.Replace(sMatch.Value, sMatch.Groups("name").Value.ToString.Trim) + Next + ' Dim a_patterRegex = Regex.Match(Ps.Role, HREF_PATTERN) + ' If a_patterRegex.Success Then Ps.Role = a_patterRegex.Groups("name").ToString.Trim + Next + + IMDBMovie.Actors = Cast + End If + + If bwIMDB.CancellationPending Then Return Nothing + + D = 0 : W = 0 + + If Options.bTagline AndAlso (String.IsNullOrEmpty(IMDBMovie.Tagline) OrElse Not Master.eSettings.LockTagline) Then + + tempD = If(HTML.IndexOf("<h5>Tagline:</h5>") > 0, HTML.IndexOf("<h5>Tagline:</h5>"), 0) + + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + + Dim lHtmlIndexOf As Integer = If(D > 0, HTML.IndexOf("<a class=""tn15more inline""", D), 0) + Dim TagLineEnd As Integer = If(lHtmlIndexOf > 0, lHtmlIndexOf, 0) + If D > 0 Then W = If(TagLineEnd > 0, TagLineEnd, HTML.IndexOf("</div>", D)) + + IMDBMovie.Tagline = If(D > 0 AndAlso W > 0, Web.HttpUtility.HtmlDecode(HTML.Substring(D, W - D).Replace("<h5>Tagline:</h5>", String.Empty).Split(vbCrLf.ToCharArray)(1)).Trim, String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bDirector Then + 'Get the directors + D = If(HTML.IndexOf("<h5>Director:</h5>") > 0, HTML.IndexOf("<h5>Director:</h5>"), HTML.IndexOf("<h5>Directors:</h5>")) + W = If(D > 0, HTML.IndexOf("</div>", D), 0) + 'got any director(s) ? + If D > 0 AndAlso Not W <= 0 Then + 'get only the first director's name + Dim rDir As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + Dim Dir = From M In rDir Where Not DirectCast(M, Match).Groups("name").ToString.Contains("more") _ + Select Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + + If Dir.Count > 0 Then + IMDBMovie.Director = Strings.Join(Dir.ToArray, " / ").Trim + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get countries of the movie + If Options.bCountry Then + 'Get the countries + D = If(HTML.IndexOf("<h5>Country:</h5>") > 0, HTML.IndexOf("<h5>Country:</h5>"), HTML.IndexOf("<h5>Countries:</h5>")) + W = If(D > 0, HTML.IndexOf("</div>", D), 0) + 'got any country ? + If D > 0 AndAlso Not W <= 0 Then + 'get only the first country's name + Dim rCou As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + Dim Cou = From M In rCou Where Not DirectCast(M, Match).Groups("name").ToString.Contains("more") _ + Select Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + + If Cou.Count > 0 Then + + 'fix for display country flag in XBMC! + If Strings.Join(Cou.ToArray, " / ").Trim.ToUpper.Contains("USA") Then + IMDBMovie.Country = "United States of America" + ElseIf Strings.Join(Cou.ToArray, " / ").Trim.ToUpper.Contains("UK") Then + IMDBMovie.Country = "United Kingdom" + Else + IMDBMovie.Country = Strings.Join(Cou.ToArray, " / ").Trim() + End If + + End If + End If + + + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get genres of the movie + If Options.bGenre AndAlso (String.IsNullOrEmpty(IMDBMovie.Genre) OrElse Not Master.eSettings.LockGenre) Then + If Not String.IsNullOrEmpty(ofdbGenre) Then + IMDBMovie.Genre = ofdbGenre + Else + D = 0 : W = 0 + D = HTML.IndexOf("<h5>Genre:</h5>") + 'Check if doesnt find genres + If D > 0 Then + W = HTML.IndexOf("</div>", D) + + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) Where Not N.Contains("more") Take If(Master.eSettings.GenreLimit > 0, Master.eSettings.GenreLimit, 999999) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + tGenre = StringUtils.GenreFilter(tGenre) + If Not String.IsNullOrEmpty(tGenre) Then + IMDBMovie.Genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bOutline AndAlso (String.IsNullOrEmpty(IMDBMovie.Outline) OrElse Not Master.eSettings.LockOutline) Then + + If Not String.IsNullOrEmpty(ofdbOutline) Then + IMDBMovie.Outline = ofdbOutline + Else + 'Get the Plot Outline + D = 0 : W = 0 + + Try + If IMDBMovie.Title.Contains("(VG)") Then + D = If(HTML.IndexOf("<h5>Plot Summary:</h5>") > 0, HTML.IndexOf("<h5>Plot Summary:</h5>"), HTML.IndexOf("<h5>Tagline:</h5>")) + If D > 0 Then W = HTML.IndexOf("</div>", D) + Else + tempD = If(HTML.IndexOf("<h5>Plot:</h5>") > 0, HTML.IndexOf("<h5>Plot:</h5>"), HTML.IndexOf("<h5>Plot Summary:</h5>")) + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + If D <= 0 Then D = HTML.IndexOf("<h5>Plot Synopsis:</h5>") + If D > 0 Then + W = HTML.IndexOf("<a class=", D) + If W > 0 Then + W = HTML.IndexOf("</div>", D) + Else + IMDBMovie.Outline = String.Empty + GoTo mplot + End If + Else + IMDBMovie.Outline = String.Empty + GoTo mPlot 'This plot synopsis is empty + End If + End If + Dim PlotOutline As String = HTML.Substring(D, W - D).Remove(0, 26) + + PlotOutline = Web.HttpUtility.HtmlDecode(If(PlotOutline.Contains("is empty") OrElse PlotOutline.Contains("View full synopsis") _ + , String.Empty, PlotOutline.Replace("|", String.Empty).Replace("»", String.Empty)).Trim) + 'check if outline has links to other IMDB entry + If Not String.IsNullOrEmpty(PlotOutline) Then + For Each rMatch As Match In Regex.Matches(PlotOutline, HREF_PATTERN_4) + PlotOutline = PlotOutline.Replace(rMatch.Value, rMatch.Groups("text").Value.Trim) + Next + IMDBMovie.Outline = Regex.Replace(PlotOutline, HREF_PATTERN, String.Empty).Trim + Else + IMDBMovie.Outline = String.Empty + End If + + Catch ex As Exception + IMDBMovie.Outline = String.Empty + End Try + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + +mPlot: + 'Get the full Plot + If Options.bPlot AndAlso (String.IsNullOrEmpty(IMDBMovie.Plot) OrElse Not Master.eSettings.LockPlot) Then + If Not String.IsNullOrEmpty(ofdbPlot) Then + IMDBMovie.Plot = ofdbPlot + Else + Dim FullPlotP As String = Regex.Match(PlotHtml, "<p class=.plotpar.>(.*?)</p>", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline).Groups(1).Value.ToString.Trim + Dim FullPlotI As String = Regex.Match(PlotHtml, "<p class=.plotpar.>(.*?)<i>", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline).Groups(1).Value.ToString.Trim + Dim FullPlot As String = If(FullPlotI.Length < FullPlotP.Length, FullPlotI, FullPlotP) + If Not String.IsNullOrEmpty(FullPlot) Then + For Each rMatch As Match In Regex.Matches(FullPlot, HREF_PATTERN_4) + FullPlot = FullPlot.Replace(rMatch.Value, rMatch.Groups("text").Value.Trim) + Next + IMDBMovie.Plot = Web.HttpUtility.HtmlDecode(FullPlot.Replace("|", String.Empty)).Trim + End If + + End If + + If Master.eSettings.OutlineForPlot AndAlso String.IsNullOrEmpty(IMDBMovie.Plot) AndAlso Not String.IsNullOrEmpty(IMDBMovie.Outline) Then + IMDBMovie.Plot = IMDBMovie.Outline + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get the movie duration + If Options.bRuntime Then IMDBMovie.Runtime = Web.HttpUtility.HtmlDecode(Regex.Match(HTML, "<h5>Runtime:</h5>[^0-9]*([^<]*)").Groups(1).Value.Trim) + + 'Get Production Studio + If Options.bStudio AndAlso (String.IsNullOrEmpty(IMDBMovie.Studio) OrElse Not Master.eSettings.LockStudio) Then + D = 0 : W = 0 + If FullCrew Then + D = HTML.IndexOf("<b class=""blackcatheader"">Production Companies</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + 'only get the first one + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(P1, Match).Groups("name").ToString = String.Empty _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) Take 1 + IMDBMovie.Studio = Ps(0).ToString.Trim + End If + Else + D = HTML.IndexOf("<h5>Company:</h5>") + If D > 0 Then W = HTML.IndexOf("</div>", D) + If D > 0 AndAlso W > 0 Then + IMDBMovie.Studio = Web.HttpUtility.HtmlDecode(Regex.Match(HTML.Substring(D, W - D), HREF_PATTERN).Groups("name").ToString.Trim) + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get Writers + If Options.bWriters Then + D = 0 : W = 0 + D = HTML.IndexOf("<h5>Writer") + If D > 0 Then W = HTML.IndexOf("</div>", D) + If D > 0 AndAlso W > 0 Then + Dim q = From M In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(M, Match).Groups("name").ToString.Trim = "more" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim = "(more)" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim = "WGA" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim.Contains("see more") _ + Select Writer = Web.HttpUtility.HtmlDecode(String.Concat(DirectCast(M, Match).Groups("name").ToString, If(FullCrew, " (writer)", String.Empty))) + + If q.Count > 0 Then + IMDBMovie.OldCredits = Strings.Join(q.ToArray, " / ").Trim + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get All Other Info + If FullCrew Then + + D = 0 : W = 0 + D = HTML.IndexOf("Directed by</a></h5>") + If D > 0 Then W = HTML.IndexOf("</body>", D) + If D > 0 AndAlso W > 0 Then + Dim qTables As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), TABLE_PATTERN) + + For Each M As Match In qTables + + If bwIMDB.CancellationPending Then Return Nothing + + 'Producers + If Options.bProducers AndAlso M.ToString.Contains("Produced by</a></h5>") Then + Dim Pr = From Po In Regex.Matches(M.ToString, "<td\svalign=""top"">(.*?)</td>") _ + Where Not Po.ToString.Contains(String.Concat("http://", IMDBURL, "/Glossary/")) _ + Let P1 = Regex.Match(Po.ToString, HREF_PATTERN_2) _ + Where Not String.IsNullOrEmpty(P1.Groups("name").ToString) _ + Select Producer = Web.HttpUtility.HtmlDecode(String.Concat(P1.Groups("name").ToString, " (producer)")) + + If Pr.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Pr.ToArray, " / ").Trim) + End If + End If + + 'Music by + If Options.bMusicBy AndAlso M.ToString.Contains("Original Music by</a></h5>") Then + Dim Mu = From Mo In Regex.Matches(M.ToString, "<td\svalign=""top"">(.*?)</td>") _ + Let M1 = Regex.Match(Mo.ToString, HREF_PATTERN) _ + Where Not String.IsNullOrEmpty(M1.Groups("name").ToString) _ + Select Musician = Web.HttpUtility.HtmlDecode(String.Concat(M1.Groups("name").ToString, " (music by)")) + + If Mu.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Mu.ToArray, " / ").Trim) + End If + End If + + Next + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Special Effects + If Options.bOtherCrew Then + D = HTML.IndexOf("<b class=""blackcatheader"">Special Effects</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not String.IsNullOrEmpty(DirectCast(P1, Match).Groups("name").ToString) _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) + If Ps.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Ps.ToArray, " / ").Trim) + End If + End If + End If + End If + + Return True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Function GetMovieStudios(ByVal strID As String) As List(Of String) + Dim alStudio As New List(Of String) + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/combined")) + sHTTP = Nothing + + Dim D, W As Integer + + D = HTML.IndexOf("<b class=""blackcatheader"">Production Companies</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(P1, Match).Groups("name").ToString = String.Empty _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) + alStudio.AddRange(Ps.ToArray) + End If + + Return alStudio + End Function + + Public Function GetSearchMovieInfo(ByVal sMovieName As String, ByRef dbMovie As Structures.DBMovie, ByVal iType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As MediaContainers.Movie + Dim r As MovieSearchResults = SearchMovie(sMovieName) + Dim b As Boolean = False + Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie + + 'r.PopularTitles.Sort() + 'r.ExactMatches.Sort() + 'r.PartialMatches.Sort() + + Try + Select Case iType + Case Enums.ScrapeType.FullAsk, Enums.ScrapeType.UpdateAsk, Enums.ScrapeType.NewAsk, Enums.ScrapeType.MarkAsk, Enums.ScrapeType.FilterAsk + + If r.ExactMatches.Count = 1 Then 'AndAlso r.PopularTitles.Count = 0 AndAlso r.PartialMatches.Count = 0 Then 'redirected to imdb info page + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count = 1 AndAlso r.PopularTitles(0).Lev <= 5 Then + b = GetMovieInfo(r.PopularTitles.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.ExactMatches.Count = 1 AndAlso r.ExactMatches(0).Lev <= 5 Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + Master.tmpMovie.Clear() + Using dIMDB As New dlgIMDBSearchResults + dIMDB.IMDBURL = IMDBURL + If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + b = False + Else + b = GetMovieInfo(Master.tmpMovie.IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + Else + b = False + End If + End Using + End If + Case Enums.ScrapeType.FullAuto, Enums.ScrapeType.UpdateAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.SingleScrape, Enums.ScrapeType.FilterAuto + + 'check if ALL results are over lev value + Dim useAnyway As Boolean = False + If ((r.PopularTitles.Count > 0 AndAlso r.PopularTitles(0).Lev > 5) OrElse r.PopularTitles.Count = 0) AndAlso _ + ((r.ExactMatches.Count > 0 AndAlso r.ExactMatches(0).Lev > 5) OrElse r.ExactMatches.Count = 0) AndAlso _ + ((r.PartialMatches.Count > 0 AndAlso r.PartialMatches(0).Lev > 5) OrElse r.PartialMatches.Count = 0) Then + useAnyway = True + End If + Dim exactHaveYear As Integer = FindYear(dbMovie.Filename, r.ExactMatches) + Dim popularHaveYear As Integer = FindYear(dbMovie.Filename, r.PopularTitles) + 'it seems "popular matches" is a better result than "exact matches" ..... nope + 'If r.ExactMatches.Count = 1 AndAlso r.PopularTitles.Count = 0 AndAlso r.PartialMatches.Count = 0 Then 'redirected to imdb info page + ' b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf (popularHaveYear >= 0 OrElse exactHaveYear = -1) AndAlso r.PopularTitles.Count > 0 AndAlso (r.PopularTitles(If(popularHaveYear >= 0, popularHaveYear, 0)).Lev <= 5 OrElse useAnyway) Then + ' b = GetMovieInfo(r.PopularTitles.Item(If(popularHaveYear >= 0, popularHaveYear, 0)).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf r.ExactMatches.Count > 0 AndAlso (r.ExactMatches(If(exactHaveYear >= 0, exactHaveYear, 0)).Lev <= 5 OrElse useAnyway) Then + ' b = GetMovieInfo(r.ExactMatches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf r.PartialMatches.Count > 0 Then + ' b = GetMovieInfo(r.PartialMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'End If + If r.ExactMatches.Count = 1 Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.ExactMatches.Count > 1 AndAlso exactHaveYear >= 0 Then + b = GetMovieInfo(r.ExactMatches.Item(exactHaveYear).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count > 0 AndAlso popularHaveYear >= 0 Then + b = GetMovieInfo(r.PopularTitles.Item(popularHaveYear).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCrew, False, Options, True) + ElseIf r.ExactMatches.Count > 0 AndAlso (r.ExactMatches(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count > 0 AndAlso (r.PopularTitles(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.PopularTitles.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PartialMatches.Count > 0 AndAlso (r.PartialMatches(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.PartialMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + End Select + + If b Then + Return imdbMovie + Else + Return New MediaContainers.Movie + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New MediaContainers.Movie + End Try + End Function + + Private Function FindYear(ByVal tmpname As String, ByVal lst As List(Of MediaContainers.Movie)) As Integer + Dim tmpyear As String = "" + Dim i As Integer + Dim ret As Integer = -1 + tmpname = Path.GetFileNameWithoutExtension(tmpname) + tmpname = tmpname.Replace(".", " ").Trim.Replace("(", " ").Replace(")", "").Trim + i = tmpname.LastIndexOf(" ") + If i >= 0 Then + tmpyear = tmpname.Substring(i + 1, tmpname.Length - i - 1) + If IsNumeric(tmpyear) AndAlso Convert.ToInt32(tmpyear) > 1950 Then 'let's assume there are no movies older then 1950 + For c = 0 To lst.Count - 1 + If lst(c).Year = tmpyear Then + ret = c + Exit For + End If + Next + End If + End If + Return ret + End Function + + Public Sub GetSearchMovieInfoAsync(ByVal imdbID As String, ByVal IMDBMovie As MediaContainers.Movie, ByVal Options As Structures.ScrapeOptions) + Try + If Not bwIMDB.IsBusy Then + bwIMDB.WorkerReportsProgress = False + bwIMDB.WorkerSupportsCancellation = True + bwIMDB.RunWorkerAsync(New Arguments With {.Search = SearchType.SearchDetails, _ + .Parameter = imdbID, .IMDBMovie = IMDBMovie, .Options = Options}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + + Public Sub SearchMovieAsync(ByVal sMovie As String, ByVal filterOptions As Structures.ScrapeOptions) + Try + If Not bwIMDB.IsBusy Then + bwIMDB.WorkerReportsProgress = False + bwIMDB.WorkerSupportsCancellation = True + bwIMDB.RunWorkerAsync(New Arguments With {.Search = SearchType.Movies, .Parameter = sMovie, .Options = filterOptions}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + Try + Select Case Args.Search + Case SearchType.Movies + Dim r As MovieSearchResults = SearchMovie(Args.Parameter) + e.Result = New Results With {.ResultType = SearchType.Movies, .Result = r} + Case SearchType.SearchDetails + Dim s As Boolean = GetMovieInfo(Args.Parameter, Args.IMDBMovie, False, False, True, Args.Options, True) + e.Result = New Results With {.ResultType = SearchType.SearchDetails, .Success = s} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub BW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDB.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.ResultType + Case SearchType.Movies + RaiseEvent SearchResultsDownloaded(DirectCast(Res.Result, MovieSearchResults)) + Case SearchType.SearchDetails + Dim movieInfo As MovieSearchResults = DirectCast(Res.Result, MovieSearchResults) + RaiseEvent SearchMovieInfoDownloaded(sPoster, Res.Success) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Function GetForcedTitle(ByVal strID As String, ByVal oTitle As String) As String + Dim fTitle As String = oTitle + + Try + If bwIMDB.CancellationPending Then Return Nothing + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/releaseinfo#akas")) + sHTTP = Nothing + + Dim D, W As Integer + + D = HTML.IndexOf("<h5><a name=""akas"">Also Known As (AKA)</a></h5>") + + If D > 0 Then + W = HTML.IndexOf("</table>", D) + Dim rTitles As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), TD_PATTERN_4, RegexOptions.Multiline Or RegexOptions.IgnorePatternWhitespace) + + If rTitles.Count > 0 Then + For i As Integer = 1 To rTitles.Count - 1 Step 2 + If rTitles(i).Value.ToString.Contains(Master.eSettings.ForceTitle) AndAlso Not rTitles(i).Value.ToString.Contains(String.Concat(Master.eSettings.ForceTitle, " (working title)")) AndAlso Not rTitles(i).Value.ToString.Contains(String.Concat(Master.eSettings.ForceTitle, " (fake working title)")) Then + fTitle = CleanTitle(Web.HttpUtility.HtmlDecode(rTitles(i - 1).Groups("title").Value.ToString.Trim)) + Exit For + End If + Next + End If + + End If + + Return fTitle + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return fTitle + End Try + End Function + + Private Function GetMovieID(ByVal strObj As String) As String + Return Regex.Match(strObj, IMDB_ID_REGEX).ToString.Replace("tt", String.Empty) + End Function + + Private Function SearchMovie(ByVal sMovie As String) As MovieSearchResults + Try + + Dim D, W As Integer + Dim R As New MovieSearchResults + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft")) + Dim HTMLp As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&ref_=fn_tt_pop")) + Dim HTMLm As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&ref_=fn_ft")) + Dim HTMLe As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&exact=true&ref_=fn_tt_ex")) + Dim rUri As String = sHTTP.ResponseUri + sHTTP = Nothing + + 'Check if we've been redirected straight to the movie page + If Regex.IsMatch(rUri, IMDB_ID_REGEX) Then + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(Regex.Match(rUri, IMDB_ID_REGEX).ToString, _ + StringUtils.ProperCase(sMovie), Regex.Match(Regex.Match(HTML, MOVIE_TITLE_PATTERN).ToString, "(?<=\()\d+(?=.*\))").ToString, 0) + R.ExactMatches.Add(lNewMovie) + Return R + End If + + 'popular titles + D = HTMLp.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mPartial + W = HTMLp.IndexOf("</table>", D) + 8 + + Dim Table As String = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString + + Dim qPopular = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.PopularTitles = qPopular.ToList +mPartial: + + D = HTMLm.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mExact + W = HTMLm.IndexOf("</table>", D) + 8 + + Table = Regex.Match(HTMLm.Substring(D, W - D), TABLE_PATTERN).ToString + Dim qpartial = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.PartialMatches = qpartial.ToList + 'mApprox: + + ' 'Now process "Approx Matches" and merge both Partial and Approx matches + ' D = HTML.IndexOf("Titles (Approx Matches)") + ' If D <= 0 Then GoTo mExact + ' W = HTML.IndexOf("</table>", D) + 8 + + ' Table = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString + + ' Dim qApprox = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + ' Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + ' Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + ' Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + ' If Not IsNothing(R.PartialMatches) Then + ' R.PartialMatches = R.PartialMatches.Union(qApprox.ToList).ToList + ' Else + ' R.PartialMatches = qApprox.ToList + ' End If + +mExact: + + D = HTMLe.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mResult + W = HTMLe.IndexOf("</table>", D) + 8 + + Table = String.Empty + Table = Regex.Match(HTMLe.Substring(D, W - D), TABLE_PATTERN).ToString + + Dim qExact = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString.ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.ExactMatches = qExact.ToList + +mResult: + Return R + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Nothing + End Try + End Function + + Public Function GetTrailers(imdbID As String) As List(Of String) + Dim TrailerList As New List(Of String) + Dim TrailerNumber As Integer = 0 + Dim Links As MatchCollection + Dim trailerPage As String + Dim trailerUrl As String + Dim Link As Match + Dim currPage As Integer = 0 + + Dim WebPage As New HTTP + Dim _ImdbTrailerPage As String = String.Empty + + _ImdbTrailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", imdbID, "/videogallery/content_type-Trailer")) + If _ImdbTrailerPage.ToLower.Contains("page not found") Then + _ImdbTrailerPage = String.Empty + End If + + If Not String.IsNullOrEmpty(_ImdbTrailerPage) Then + Link = Regex.Match(_ImdbTrailerPage, "of [0-9]{1,3}") + + If Link.Success Then + TrailerNumber = Convert.ToInt32(Link.Value.Substring(3)) + + If TrailerNumber > 0 Then + currPage = Convert.ToInt32(Math.Ceiling(TrailerNumber / 10)) + + For i As Integer = 1 To currPage + If Not i = 1 Then + _ImdbTrailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", imdbID, "/videogallery/content_type-Trailer?page=", i)) + End If + + Links = Regex.Matches(_ImdbTrailerPage, "screenplay/(vi[0-9]+)/") + Dim linksCollection As String() = From m As Object In Links Select CType(m, Match).Value Distinct.ToArray() + + Links = Regex.Matches(_ImdbTrailerPage, "imdb/(vi[0-9]+)/") + linksCollection = linksCollection.Concat(From m As Object In Links Select CType(m, Match).Value Distinct.ToArray()).ToArray + + For Each value As String In linksCollection + If value.Contains("screenplay") Then + trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player")) + trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + TrailerList.Add(trailerUrl) + End If + Else + ''480p Trailer + 'trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player?uff=2")) + 'trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + 'If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + ' Me._TrailerList.Add(trailerUrl) + 'End If + + ''720p Trailer + 'trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player?uff=3")) + 'trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + 'If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + ' Me._TrailerList.Add(trailerUrl) + 'End If + End If + Next + Next + End If + End If + End If + Return TrailerList + End Function + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim FullCast As Boolean + Dim FullCrew As Boolean + Dim IMDBMovie As MediaContainers.Movie + Dim Options As Structures.ScrapeOptions + Dim Parameter As String + Dim Search As SearchType + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultType As SearchType + Dim Success As Boolean + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.OFDB.Data/Scraper/clsScrapeIMPA.vb b/Addons/scraper.OFDB.Data/Scraper/clsScrapeIMPA.vb new file mode 100644 index 0000000..5f052ed --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/clsScrapeIMPA.vb @@ -0,0 +1,179 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMPA + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwIMPA As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwIMPA.IsBusy Then Me.bwIMPA.CancelAsync() + + While Me.bwIMPA.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMPA.IsBusy Then + bwIMPA.WorkerSupportsCancellation = True + bwIMPA.WorkerReportsProgress = True + bwIMPA.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMPAPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMPA.CancellationPending Then Return Nothing + Dim sURL As String = GetLink(imdbID) + + If Not String.IsNullOrEmpty(sURL) Then + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If bwIMPA.CancellationPending Then Return Nothing + + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + + Dim PosterURL As String + + For Each mPoster As Match In mcPoster + If bwIMPA.CancellationPending Then Return Nothing + PosterURL = Strings.Replace(String.Format("{0}/{1}", sURL.Substring(0, sURL.LastIndexOf("/")), mPoster.Value.ToString()).Replace("thumbs", "posters"), "imp_", String.Empty) + + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + + PosterURL = PosterURL.Insert(PosterURL.LastIndexOf("."), "_xlg") + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = PosterURL}) + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMPA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPA.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMPAPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMPA_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPA.ProgressChanged + If Not bwIMPA.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMPA_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPA.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + Private Function GetLink(ByVal IMDBID As String) As String + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) + sHTTP = Nothing + + Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") + If mcIMPA.Count > 0 Then + 'just use the first one if more are found + Return mcIMPA(0).Value.ToString + Else + Return String.Empty + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return String.Empty + End Try + End Function + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + Dim sType As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.OFDB.Data/Scraper/clsScrapeImages.vb b/Addons/scraper.OFDB.Data/Scraper/clsScrapeImages.vb new file mode 100644 index 0000000..7bdb821 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/clsScrapeImages.vb @@ -0,0 +1,940 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class ScrapeImages + +#Region "Methods" + + Public Shared Function GetPreferredImage(ByRef Image As Images, ByVal IMDBID As String, ByVal iType As Enums.ImageType, ByRef imgResult As Containers.ImgResult, ByVal sPath As String, ByVal doETs As Boolean, Optional ByVal doAsk As Boolean = False) As Boolean + '// + ' Try to get the best match between what the user selected in settings and the actual posters downloaded + '\\ + + Dim hasImages As Boolean = False + Dim TMDB As New TMDB.Scraper + Dim IMPA As New IMPA.Scraper + Dim MPDB As New MPDB.Scraper + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim tmpListIMPA As New List(Of MediaContainers.Image) + Dim tmpListMPDB As New List(Of MediaContainers.Image) + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) + + Try + + If iType = Enums.ImageType.Posters Then 'posters + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tImage.URL) + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + tmpListTMDB.AddRange(TMDB.GetTMDBImages(IMDBID, "poster")) + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + tmpListTMDB.AddRange(IMPA.GetIMPAPosters(IMDBID)) + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + tmpListTMDB.AddRange(MPDB.GetMPDBPosters(IMDBID)) + End If + + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) + If Not IsNothing(tmdbThumb.WebImage.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) + End If + Image.Clear() + Next + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + End If + Else + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + 'download all TMBD images + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "poster") + + 'check each one for it's size to see if it matched the preferred size + If tmpListTMDB.Count > 0 Then + hasImages = True + + If Not Master.eSettings.NoSaveImagesToNfo Then + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + imgResult.Posters.Add(tmdbThumb.URL) + Next + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Xlrg + If iMovie.Description.ToLower = "original" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Lrg + If iMovie.Description.ToLower = "mid" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Mid + If iMovie.Description.ToLower = "cover" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Small + If iMovie.Description.ToLower = "thumb" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + 'no "wide" for TMDB + End Select + Image.Clear() + Next + End If + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB found... try IMPA + + tmpListIMPA = IMPA.GetIMPAPosters(IMDBID) + + If tmpListIMPA.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMPA + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMPAX) Then + tmpIMPAX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMPAL) Then + tmpIMPAL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMPAM) Then + tmpIMPAM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMPAS) Then + tmpIMPAS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMPAW) Then + tmpIMPAW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB or IMPA found... try MPDB + + tmpListMPDB = MPDB.GetMPDBPosters(IMDBID) + + If tmpListMPDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListMPDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpMPDBX) Then + tmpMPDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpMPDBL) Then + tmpMPDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpMPDBM) Then + tmpMPDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpMPDBS) Then + tmpMPDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpMPDBW) Then + tmpMPDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If IsNothing(Image.Image) AndAlso Not doAsk Then + 'STILL no image found, just get the first available image, starting with the largest + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + 'check TMDB first + If tmpListTMDB.Count > 0 Then + Dim x = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If x.Count > 0 Then + Image.FromWeb(x(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "cover" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + End If + End If + + Image.Clear() + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + If tmpListIMPA.Count > 0 Then + If Not IsNothing(tmpIMPAX) Then + Image = tmpIMPAX + GoTo foundIT + End If + If Not IsNothing(tmpIMPAL) Then + Image = tmpIMPAL + GoTo foundIT + End If + If Not IsNothing(tmpIMPAM) Then + Image = tmpIMPAM + GoTo foundIT + End If + If Not IsNothing(tmpIMPAS) Then + Image = tmpIMPAS + GoTo foundIT + End If + If Not IsNothing(tmpIMPAW) Then + Image = tmpIMPAW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + If tmpListMPDB.Count > 0 Then + If Not IsNothing(tmpMPDBX) Then + Image = tmpMPDBX + GoTo foundIT + End If + If Not IsNothing(tmpMPDBL) Then + Image = tmpMPDBL + GoTo foundIT + End If + If Not IsNothing(tmpMPDBM) Then + Image = tmpMPDBM + GoTo foundIT + End If + If Not IsNothing(tmpMPDBS) Then + Image = tmpMPDBS + GoTo foundIT + End If + If Not IsNothing(tmpMPDBW) Then + Image = tmpMPDBW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + End If + + End If + + Else 'fanart + + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + + Dim ETHashes As New List(Of String) + If Master.eSettings.AutoET AndAlso doETs Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + End If + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + Image.Clear() + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + +foundIT: + TMDB = Nothing + IMPA = Nothing + MPDB = Nothing + tmpListTMDB = Nothing + tmpListIMPA = Nothing + tmpListMPDB = Nothing + Return hasImages + End Function + + Public Shared Sub GetPreferredFAasET(ByVal IMDBID As String, ByVal sPath As String) + Dim _Image As Image + Dim TMDB As New TMDB.Scraper + Dim IMPA As New IMPA.Scraper + Dim MPDB As New MPDB.Scraper + + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim ETHashes As New List(Of String) + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, "fanart") + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + For Each sFile As FileInfo In lFi + Select Case True + Case sFile.Name.Contains("(original)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Master.eSettings.AutoET Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + End If + Next + End If + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + 'Me.Clear() + Next + + _Image = Nothing + FileUtils.Delete.DeleteDirectory(CachePath) + + End If + End If + End If + End Sub + + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ + AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ + (AdvancedSettings.GetBooleanSetting("UseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Shared Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + End If + + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) + End Sub + + ' Duplicate of clsImage + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0, Optional ByVal sUrl As String = "") + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' If Not sUrl = "" Then + ' Dim stroriginalurl As String = sUrl + + ' 'Image Download from tmdb is special, need original size + ' If Not sUrl.Contains("impawards") AndAlso Not sUrl.Contains("movieposterdb") Then + ' 'Always get original image... + ' 'links to images (tmdb) have following structure: 'example: http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w92/x65b4vsFKYuA878pLN1mJiAsgIP.jpg + ' Dim stringArray() As String = Split(stroriginalurl, "/") + ' If stringArray.Length > 4 Then + ' ' stringArray(5) contains values like "w185","original", "w154"...-->size -> we want original! + ' stringArray(5) = "original" + ' stroriginalurl = Join(stringArray, "/") + ' End If + ' End If + ' Dim webclient As New Net.WebClient + ' webclient.DownloadFile(stroriginalurl, sPath) + ' Else + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + ' End If + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub + + Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo + Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() + + For i As Integer = 0 To UBound(Encoders) + If Encoders(i).FormatID = Format.Guid Then + Return Encoders(i) + End If + Next + + Return Nothing + End Function +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/Scraper/clsScrapeMPDB.vb b/Addons/scraper.OFDB.Data/Scraper/clsScrapeMPDB.vb new file mode 100644 index 0000000..7a7e13b --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/clsScrapeMPDB.vb @@ -0,0 +1,160 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Namespace MPDB + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwMPDB As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwMPDB.IsBusy Then Me.bwMPDB.CancelAsync() + + While Me.bwMPDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String) + Try + If Not Me.bwMPDB.IsBusy Then + Me.bwMPDB.WorkerSupportsCancellation = True + Me.bwMPDB.WorkerReportsProgress = True + Me.bwMPDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetMPDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + + If Me.bwMPDB.CancellationPending Then Return Nothing + + Try + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.movieposterdb.com/movie/", imdbID)) + sHTTP = Nothing + + If Me.bwMPDB.CancellationPending Then Return Nothing + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(1) + End If + + If Regex.IsMatch(HTML, String.Concat("http://www.imdb.com/title/tt", imdbID), RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline) Then + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "http://www.movieposterdb.com/posters/[0-9_](.*?)/[0-9](.*?)/[0-9](.*?)/[a-z0-9_](.*?).jpg") + + Dim PosterURL As String = String.Empty + + For Each mPoster As Match In mcPoster + If Me.bwMPDB.CancellationPending Then Return Nothing + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "l") + alPosters.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + Next + End If + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Private Sub bwMPDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetMPDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwMPDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDB.ProgressChanged + If Not bwMPDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwMPDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.OFDB.Data/Scraper/clsScrapeOFDB.vb b/Addons/scraper.OFDB.Data/Scraper/clsScrapeOFDB.vb new file mode 100644 index 0000000..a220a06 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/clsScrapeOFDB.vb @@ -0,0 +1,280 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class OFDB + + #Region "Fields" + + Private imdbID As String + Private OFDBMovie As MediaContainers.Movie + Private _genre As String + Private _outline As String + Private _plot As String + Private _title As String + + #End Region 'Fields + + #Region "Constructors" + + Public Sub New(ByVal sID As String, ByRef mMovie As MediaContainers.Movie) + Clear() + imdbID = sID + OFDBMovie = mMovie + + GetOFDBDetails() + End Sub + + #End Region 'Constructors + + #Region "Properties" + + Public Property Genre() As String + Get + Return _genre + End Get + Set(ByVal value As String) + _genre = value + End Set + End Property + + Public Property Outline() As String + Get + Return _outline + End Get + Set(ByVal value As String) + _outline = value + End Set + End Property + + Public Property Plot() As String + Get + Return _plot + End Get + Set(ByVal value As String) + _plot = value + End Set + End Property + + Public Property Title() As String + Get + Return _title + End Get + Set(ByVal value As String) + _title = value + End Set + End Property + + #End Region 'Properties + + #Region "Methods" + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Sub Clear() + _title = String.Empty + _outline = String.Empty + _plot = String.Empty + _genre = String.Empty + End Sub + + Private Function GetFullPlot(ByVal sURL As String) As String + Dim FullPlot As String = String.Empty + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + Dim D, W, Wq, Wqq, B As Integer + Dim tmpHTML As String + + D = HTML.IndexOf("Eine Inhaltsangabe von") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim + W = tmpHTML.IndexOf("</b></b><br><br>") + Wq = tmpHTML.IndexOf("<b>Quelle:</b>") + If Wq > 0 Then + Wqq = tmpHTML.IndexOf("<br><br>", Wq) + B = tmpHTML.IndexOf("</font></p>", Wqq + 8) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(Wqq + 8, B - (Wqq + 8)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + ElseIf W > 0 Then + B = tmpHTML.IndexOf("</font></p>", W + 16) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return FullPlot + End Function + + Private Sub GetOFDBDetails() + Dim sURL As String = GetOFDBUrlFromIMDBID() + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(Html) Then + 'title + If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(HTML, "<td width=""99\%""><h1 itemprop=""name""><font face=""Arial,Helvetica,sans-serif"" size=""3""><b>([^<]+)</b></font></h1></td>").Groups(1).Value.ToString)) + If OFDBTitle.EndsWith(", Der") Then + _title = String.Concat("Der ", OFDBTitle.Replace(", Der", " ")).Trim + ElseIf OFDBTitle.EndsWith(", Die") Then + _title = String.Concat("Die ", OFDBTitle.Replace(", Die", " ")).Trim + ElseIf OFDBTitle.EndsWith(", Das") Then + _title = String.Concat("Das ", OFDBTitle.Replace(", Das", " ")).Trim + ElseIf OFDBTitle.EndsWith(", The") Then + _title = String.Concat("The ", OFDBTitle.Replace(", The", " ")).Trim + Else + _title = OFDBTitle + End If + End If + + Dim D, Dq, W, Wq, B As Integer + Dim tmpHTML As String + + 'outline + If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then + D = HTML.IndexOf("<b>Inhalt:</b>") + Dq = HTML.IndexOf("<b>Inhalt:</b> <font style=") + + If Dq > 0 Then + Wq = HTML.IndexOf("<span itemprop=""description"">", Dq) + W = HTML.IndexOf("<a href=""plot", Wq + 29) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(Wq + 29, W - (Wq + 29)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + ElseIf D > 0 Then + W = HTML.IndexOf("<a href=""", D + 44) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(D + 44, W - (D + 44)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + + 'full plot + D = 0 : Dq = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then + D = HTML.IndexOf("<b>Inhalt:</b>") + Dq = HTML.IndexOf("<b>Inhalt:</b> <font style=") + + If Dq > 0 Then + Dim L As Integer = HTML.Length + tmpHTML = HTML.Substring(D + 197, L - (D + 197)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + ElseIf D > 0 Then + Dim L As Integer = HTML.Length + tmpHTML = HTML.Substring(D + 44, L - (D + 44)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + End If + End If + + 'genre + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Genre) OrElse Not Master.eSettings.LockGenre Then + D = HTML.IndexOf("class=""Normal"">Genre(s):</font></td>") + If D > 0 Then + W = HTML.IndexOf("</table>", D) + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), "<a.*?href=[""'](?<url>.*?)[""'].*?><span itemprop=""genre"">(?<name>.*?)</span></a>") + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + tGenre = StringUtils.GenreFilter(tGenre) + If Not String.IsNullOrEmpty(tGenre) Then + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + End If + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetOFDBUrlFromIMDBID() As String + Dim ofdbURL As String = String.Empty + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.ofdb.de/view.php?SText=", imdbID, "&Kat=IMDb&page=suchergebnis&sourceid=mozilla-search")) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(HTML) Then + Dim mcOFDBURL As MatchCollection = Regex.Matches(HTML, "<a href=""film/([^<]+)"" onmouseover") + If mcOFDBURL.Count > 0 Then + 'just use the first one if more are found + ofdbURL = String.Concat("http://www.ofdb.de/", Regex.Match(mcOFDBURL(0).Value.ToString, """(film/([^<]+))""").Groups(1).Value.ToString) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return ofdbURL + End Function + + #End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/Scraper/clsScrapeTMDB.vb b/Addons/scraper.OFDB.Data/Scraper/clsScrapeTMDB.vb new file mode 100644 index 0000000..d40e628 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/clsScrapeTMDB.vb @@ -0,0 +1,243 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI + +Namespace TMDB + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + + Private Const APIKey As String = "b1ecff8c76278262b27de1569f57f6bd" + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB...<OpenSearchDescription>...<movies>.Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<poster>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<backdrop>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Debug.Print("{0}/t{1}", tmdbI.@size, tmdbI.@url) + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + sHTTP = Nothing + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As String + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + Dim tLang As String + + tLang = AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en") + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/{0}/tt{1}", APIKey, imdbID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + Dim tmdbNode = From xNode In xmlTMDB.Elements + + If tmdbNode.Count > 0 Then + If Not tmdbNode(0).Value = "Your query didn't return any results." Then + Dim movieID As String = xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<id>.Value + Dim i As Integer + + + For i = 0 To 1 Step 1 + sHTTP = New HTTP + ApiXML = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/{0}/xml/{1}/{2}", tLang, APIKey, movieID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + Dim Trailers = From tNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie> Select tNode.<trailer> + If Trailers.Count > 0 AndAlso Not String.IsNullOrEmpty(Trailers(0).Value) Then + If Trailers(0).Value.ToLower.IndexOf("youtube.com") > 0 Then + Return Trailers(0).Value + i += 1 + End If + Else + tLang = "en" + End If + End If + Next + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return String.Empty + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/Scraper/clsScrapeTrailers.vb b/Addons/scraper.OFDB.Data/Scraper/clsScrapeTrailers.vb new file mode 100644 index 0000000..19327b4 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/clsScrapeTrailers.vb @@ -0,0 +1,265 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System +Imports System.IO +Imports System.Net +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Public Class Trailers + +#Region "Fields" + + Public IMDBURL As String + + Private WebPage As New HTTP + Private _ImdbID As String = String.Empty + Private _ImdbTrailerPage As String = String.Empty + Private _TrailerList As New List(Of String) + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + AddHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + Me.WebPage.Cancel() + End Sub + + Public Sub Clear() + Me._TrailerList.Clear() + Me._ImdbID = String.Empty + Me._ImdbTrailerPage = String.Empty + End Sub + + Public Sub DeleteTrailers(ByVal sPath As String, ByVal NewTrailer As String) + Dim parPath As String = Directory.GetParent(sPath).FullName + Dim tmpName As String = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(sPath))) + Dim tmpNameNoStack As String = Path.Combine(parPath, Path.GetFileNameWithoutExtension(sPath)) + For Each t As String In Master.eSettings.ValidExts + If File.Exists(String.Concat(tmpName, "-trailer", t)) AndAlso Not String.Concat(tmpName, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpName, "[trailer]", t)) AndAlso Not String.Concat(tmpName, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "[trailer]", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "-trailer", t)) AndAlso Not String.Concat(tmpNameNoStack, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) + End If + Next + End Sub + + Public Sub DownloadProgressUpdated(ByVal iPercent As Integer) + RaiseEvent ProgressUpdated(iPercent) + End Sub + + Public Function DownloadSingleTrailer(ByVal sPath As String, ByVal ImdbID As String, ByVal isSingle As Boolean, ByVal currNfoTrailer As String) As String + Dim tURL As String = String.Empty + Try + Me._TrailerList.Clear() + + If Not Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, True) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + + Dim tLink As String = String.Empty + If Regex.IsMatch(Me._TrailerList.Item(0).ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Dim YT As New YouTube.Scraper + YT.GetVideoLinks(Me._TrailerList.Item(0).ToString) + If YT.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + tLink = YT.VideoLinks(Master.eSettings.PreferredTrailerQuality).URL + Else + Select Case Master.eSettings.PreferredTrailerQuality + Case Enums.TrailerQuality.HD1080p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720p) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720p).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD1080pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720pVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720pVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HD720p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD720pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HQFLV + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HQVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.SQMP4 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.SQFLV + tLink = String.Empty + Case Enums.TrailerQuality.SQVP8 + tLink = String.Empty + End Select + End If + Else + tLink = Me._TrailerList.Item(0).ToString + End If + + If Not String.IsNullOrEmpty(tLink) Then + tURL = WebPage.DownloadFile(tLink, sPath, False, "trailer") + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + End If + ElseIf Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, False) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + tURL = Me._TrailerList.Item(0).ToString + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return tURL + End Function + + Public Function DownloadTrailer(ByVal sPath As String, ByVal sURL As String) As String + Dim tURL As String = String.Empty + If Not String.IsNullOrEmpty(sURL) Then + tURL = WebPage.DownloadFile(sURL, sPath, True, "trailer") + + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + Return tURL + End Function + + Public Function GetTrailers(ByVal ImdbID As String, Optional ByVal BreakAfterFound As Boolean = True) As List(Of String) + Me._ImdbID = ImdbID + If AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", False) Then + Me.GetImdbTrailer() + End If + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", False) Then + Me.GetTMDBTrailer() + End If + + Return Me._TrailerList + End Function + + Public Function IsAllowedToDownload(ByVal sPath As String, ByVal isDL As Boolean, ByVal currNfoTrailer As String, Optional ByVal isSS As Boolean = False) As Boolean + Dim fScanner As New Scanner + + If isDL Then + If String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) OrElse Master.eSettings.OverwriteTrailer Then + Return True + Else + If isSS AndAlso String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) Then + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + Else + Return False + End If + End If + Else + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + End If + End Function + + Private Sub GetIMDBTrailer() + Dim IMDB As New IMDB.Scraper + IMDB.IMDBURL = AdvancedSettings.GetSetting("IMDBURL", "akas.imdb.com") + Dim results As List(Of String) = IMDB.GetTrailers(_ImdbID) + + Me._TrailerList.AddRange(results) + + IMDB = Nothing + End Sub + + Private Sub GetTMDBTrailer() + Dim TMDB As New TMDB.Scraper + Dim YT As String = TMDB.GetTrailers(_ImdbID) + + If Not String.IsNullOrEmpty(YT) Then + Me._TrailerList.Add(YT) + End If + + TMDB = Nothing + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/Scraper/clsScrapeYouTube.vb b/Addons/scraper.OFDB.Data/Scraper/clsScrapeYouTube.vb new file mode 100644 index 0000000..b4603fd --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/clsScrapeYouTube.vb @@ -0,0 +1,335 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace YouTube + + Public Class Scraper + +#Region "Fields" + + Friend WithEvents bwYT As New System.ComponentModel.BackgroundWorker + + Private _VideoLinks As VideoLinkItemCollection + +#End Region 'Fields + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event VideoLinksRetrieved(ByVal bSuccess As Boolean) + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property VideoLinks() As VideoLinkItemCollection + Get + If _VideoLinks Is Nothing Then + _VideoLinks = New VideoLinkItemCollection + End If + Return _VideoLinks + End Get + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() + If bwYT.IsBusy Then bwYT.CancelAsync() + + While bwYT.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetVideoLinks(ByVal url As String) + Try + _VideoLinks = ParseYTFormats(url, False) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub GetVideoLinksAsync(ByVal url As String) + Try + If Not bwYT.IsBusy Then + _VideoLinks = Nothing + bwYT.WorkerSupportsCancellation = True + bwYT.RunWorkerAsync(url) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwYT.DoWork + Dim Url As String = DirectCast(e.Argument, String) + + Try + e.Result = ParseYTFormats(Url, True) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwYT.RunWorkerCompleted + Try + If e.Cancelled Then + 'user cancelled + RaiseEvent VideoLinksRetrieved(False) + ElseIf e.Error IsNot Nothing Then + 'exception occurred + RaiseEvent Exception(e.Error) + Else + 'all good + If e.Result IsNot Nothing Then + _VideoLinks = DirectCast(e.Result, VideoLinkItemCollection) + RaiseEvent VideoLinksRetrieved(True) + Else + RaiseEvent VideoLinksRetrieved(False) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetVideoTitle(ByVal HTML As String) As String + Dim result As String = "" + 'Dim KeyPattern As String = "'VIDEO_TITLE':\s*'([^']*?)'" + Dim KeyPattern As String = "meta name=\""title\"" content=\s*\""([^']*?)\""" + 'meta name="title" content= + If Regex.IsMatch(HTML, KeyPattern) Then + result = Regex.Match(HTML, KeyPattern).Groups(1).Value + End If + + Return result + End Function + + Private Function ParseYTFormats(ByVal url As String, ByVal doProgress As Boolean) As VideoLinkItemCollection + Dim DownloadLinks As New VideoLinkItemCollection + Dim sHTTP As New HTTP + + Try + If bwYT.CancellationPending Then Return DownloadLinks + + Dim Html As String = sHTTP.DownloadData(url) + If Html.ToLower.Contains("page not found") Then + Html = String.Empty + End If + + If String.IsNullOrEmpty(Html.Trim) Then Return DownloadLinks + If bwYT.CancellationPending Then Return DownloadLinks + + Dim VideoTitle As String = GetVideoTitle(Html) + VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") + + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) + If fmtMatch.Success Then + Dim FormatMap As String = fmtMatch.Groups(1).Value + Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") + + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) + Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) + + For i As Integer = 0 To FormatArray.Length - 1 + Dim yturl As String = rurl.Match(FormatArray(i)).Groups(1).Value + Dim ytitag As String = ritag.Match(FormatArray(i)).Groups(1).Value + Dim ytsig As String = rsig.Match(FormatArray(i)).Groups(1).Value + + 'Console.WriteLine("Trailer Itag: {0}", ytitag) + 'Console.WriteLine("Trailer Url: {0}", yturl) + 'Console.WriteLine("Trailer Sig: {0}", ytsig) + + Dim Link As New VideoLinkItem + Select Case ytitag + ' ********************************************************************** + ' see all itags http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs + ' ********************************************************************** + Case "5" + Link.Description = "240p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "6" + Link.Description = "270p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "13" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "17" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "18" + Link.Description = "360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQMP4 + Case "22" + Link.Description = "720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD720p + Case "34" + Link.Description = "360p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQFLV + Case "35" + Link.Description = "480p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HQFLV + Case "36" + Link.Description = "240p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "37" + Link.Description = "1080p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD1080p + Case "38" + Link.Description = "1536p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "43" + Link.Description = "360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.SQVP8 + Case "44" + Link.Description = "480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HQVP8 + Case "45" + Link.Description = "720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD720pVP8 + Case "46" + Link.Description = "1080p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD1080pVP8 + Case "82" + Link.Description = "3D 360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "83" + Link.Description = "3D 480p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "84" + Link.Description = "3D 720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "85" + Link.Description = "3D 520p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "100" + Link.Description = "3D 360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "101" + Link.Description = "3D 480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "102" + Link.Description = "3D 720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "120" + Link.Description = "720p LiveStream (FLV, AVC)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case Else + Link.Description = "Other" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + 'Continue For + End Select + + Link.URL = Web.HttpUtility.UrlDecode(Web.HttpUtility.UrlDecode(yturl)) & "&signature=" & ytsig & "&title=" & Web.HttpUtility.UrlEncode(VideoTitle) + Link.URL = Link.URL.Replace("sig=", "signature=") ' sig= returns HTTP 403 //oldstyle, keep it + 'Console.WriteLine("Trailer Url decoded: {0}", Link.URL) + + If bwYT.CancellationPending Then Return DownloadLinks + + If Not String.IsNullOrEmpty(Link.URL) AndAlso sHTTP.IsValidURL(Link.URL) Then + DownloadLinks.Add(Link) + End If + + If bwYT.CancellationPending Then Return DownloadLinks + + Next + + End If + Return DownloadLinks + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New VideoLinkItemCollection + Finally + sHTTP = Nothing + End Try + End Function + +#End Region 'Methods + + End Class + + Public Class VideoLinkItem + +#Region "Fields" + + Private _Description As String + Private _FormatQuality As Enums.TrailerQuality + Private _URL As String + +#End Region 'Fields + +#Region "Properties" + + Public Property Description() As String + Get + Return _Description + End Get + Set(ByVal value As String) + _Description = value + End Set + End Property + + Public Property URL() As String + Get + Return _URL + End Get + Set(ByVal value As String) + _URL = value + End Set + End Property + + Friend Property FormatQuality() As Enums.TrailerQuality + Get + Return _FormatQuality + End Get + Set(ByVal value As Enums.TrailerQuality) + _FormatQuality = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class VideoLinkItemCollection + Inherits Generic.SortedList(Of Enums.TrailerQuality, VideoLinkItem) + +#Region "Methods" + + Public Shadows Sub Add(ByVal Link As VideoLinkItem) + If Not MyBase.ContainsKey(Link.FormatQuality) Then MyBase.Add(Link.FormatQuality, Link) + End Sub + +#End Region 'Methods + + End Class + +End Namespace diff --git a/Addons/scraper.OFDB.Data/Scraper/dlgIMDBSearchResults.Designer.vb b/Addons/scraper.OFDB.Data/Scraper/dlgIMDBSearchResults.Designer.vb new file mode 100644 index 0000000..6d0924e --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/dlgIMDBSearchResults.Designer.vb @@ -0,0 +1,480 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgIMDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgIMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtIMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + Me.txtFileName = New System.Windows.Forms.TextBox() + Me.btnOpenFolder = New System.Windows.Forms.Button() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(501, 431) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(574, 431) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(8, 126) + Me.tvResults.Name = "tvResults" + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 5 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(298, 160) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(295, 100) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(295, 119) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(298, 325) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(476, 160) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(476, 186) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(476, 213) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtIMDBID + ' + Me.txtIMDBID.Enabled = False + Me.txtIMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtIMDBID.Location = New System.Drawing.Point(143, 429) + Me.txtIMDBID.Name = "txtIMDBID" + Me.txtIMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtIMDBID.TabIndex = 7 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(647, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(256, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(8, 433) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(128, 17) + Me.chkManual.TabIndex = 6 + Me.chkManual.Text = "Manual IMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(249, 429) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 8 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(476, 277) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(35, 13) + Me.lblIMDB.TabIndex = 19 + Me.lblIMDB.Text = "IMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(414, 160) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(32, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(414, 186) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(414, 213) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(414, 277) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(53, 13) + Me.lblIMDBHeader.TabIndex = 18 + Me.lblIMDBHeader.Text = "IMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(295, 309) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(266, 100) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 4 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(8, 101) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 3 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(368, 213) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 20 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(98, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching IMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(312, 185) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'txtFileName + ' + Me.txtFileName.Enabled = False + Me.txtFileName.Location = New System.Drawing.Point(8, 73) + Me.txtFileName.Name = "txtFileName" + Me.txtFileName.Size = New System.Drawing.Size(598, 22) + Me.txtFileName.TabIndex = 3 + ' + 'btnOpenFolder + ' + Me.btnOpenFolder.Location = New System.Drawing.Point(612, 73) + Me.btnOpenFolder.Name = "btnOpenFolder" + Me.btnOpenFolder.Size = New System.Drawing.Size(29, 23) + Me.btnOpenFolder.TabIndex = 23 + Me.btnOpenFolder.Text = "..." + Me.btnOpenFolder.UseVisualStyleBackColor = True + ' + 'dlgIMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(647, 492) + Me.ControlBox = False + Me.Controls.Add(Me.btnOpenFolder) + Me.Controls.Add(Me.txtFileName) + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtIMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgIMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents tvResults As System.Windows.Forms.TreeView + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lblYear As System.Windows.Forms.Label + Friend WithEvents lblDirector As System.Windows.Forms.Label + Friend WithEvents lblGenre As System.Windows.Forms.Label + Friend WithEvents txtIMDBID As System.Windows.Forms.TextBox + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents lblIMDB As System.Windows.Forms.Label + Friend WithEvents lblYearHeader As System.Windows.Forms.Label + Friend WithEvents lblDirectorHeader As System.Windows.Forms.Label + Friend WithEvents lblGenreHeader As System.Windows.Forms.Label + Friend WithEvents lblIMDBHeader As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel + Friend WithEvents Label4 As System.Windows.Forms.Label + Friend WithEvents txtFileName As System.Windows.Forms.TextBox + Friend WithEvents btnOpenFolder As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.OFDB.Data/Scraper/dlgIMDBSearchResults.resx b/Addons/scraper.OFDB.Data/Scraper/dlgIMDBSearchResults.resx new file mode 100644 index 0000000..fc0d614 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/dlgIMDBSearchResults.resx @@ -0,0 +1,190 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB9ElE + QVQ4T6XSTWgTQRQH8E0LaZPaD9oaxULRi0igJSroqYLoxaa3gpfSFrx4sGp7Kj31pDYnPQpG8dzgQcSg + 1orQZJPd2exWSYOxiXhKQz5oEjQxpubvm6WN2zUe1IXf7OzMe2/fLCsA+C9NF//GbwtPfD67wti5SES5 + +GZ19ZB532zfg8Lkq+uallFVFZymqRUqdNcYY9aYMFma1igpFoshl80in88jsbkJvhZRlAfGJCN9eOH3 + WxWF5TaiUezs1FCv13X8SiYSoD2IwaCTx5rpA20OS5KEVCqFWu07KpWyrlr9hkJhG4wxSOHwdXMypw+B + tTVXOBRCOr1FSVWUSkVSQrn8FcViEUyW8VkTr5iTOX14vbLSTgUK0d0j8C54IaCOZDIBRt1d9gYXjIl7 + GhM6xjWZAvl3yGQy9BFziMfj+Phegcf3FsLMc7TdfHbPmMztexBFcZ7O+oXwM+NdRP5xf/nVJ9uEF9aJ + h2ifeoyOyUcve+eedjUtwNHP0x8MBMaoo/EPauioIAgW+6jH233pFrpG76DTvYRu99LGwNhtW9MCf+IY + WbjRf3YOfWdm0Uf3gQuLh/m60EqvID3kGDlBhoiLnCKnd52ksCO9g+dnHM4p6eDxcY/VIvzqgAJaSRux + kQ5ygHSa7XXDtVBOo8C/g/ATj6yxruTRIKcAAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/Scraper/dlgIMDBSearchResults.vb b/Addons/scraper.OFDB.Data/Scraper/dlgIMDBSearchResults.vb new file mode 100644 index 0000000..6fde061 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/dlgIMDBSearchResults.vb @@ -0,0 +1,520 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports System.IO +Imports EmberAPI + +Public Class dlgIMDBSearchResults + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + Friend WithEvents tmrLoad As New System.Windows.Forms.Timer + Friend WithEvents tmrWait As New System.Windows.Forms.Timer + + Private IMDB As New IMDB.Scraper + Private sHTTP As New HTTP + Dim UseOFDBGenre As Boolean + Dim UseOFDBOutline As Boolean + Dim UseOFDBPlot As Boolean + Dim UseOFDBTitle As Boolean + Private _currnode As Integer = -1 + Private _prevnode As Integer = -2 + + Private _InfoCache As New Dictionary(Of String, MediaContainers.Movie) + Private _PosterCache As New Dictionary(Of String, System.Drawing.Image) + Private _filterOptions As Structures.ScrapeOptions + +#End Region 'Fields + + #Region "Methods" + + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + _filterOptions = filterOptions + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + chkManual.Enabled = False + IMDB.IMDBURL = IMDBURL + IMDB.SearchMovieAsync(sMovieTitle, _filterOptions) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal Res As IMDB.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + SearchResultsDownloaded(Res) + + Return MyBase.ShowDialog() + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.OK_Button.Enabled = False + pnlPicStatus.Visible = False + _InfoCache.Clear() + _PosterCache.Clear() + Me.ClearInfo() + Me.Label3.Text = Master.eLang.GetString(11, "Searching IMDB...") + Me.pnlLoading.Visible = True + chkManual.Enabled = False + IMDB.CancelAsync() + IMDB.IMDBURL = IMDBURL + IMDB.SearchMovieAsync(Me.txtSearch.Text, _filterOptions) + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + If Regex.IsMatch(Me.txtIMDBID.Text.Replace("tt", String.Empty), "\d\d\d\d\d\d\d") Then + IMDB.IMDBURL = IMDBURL + IMDB.GetSearchMovieInfoAsync(Me.txtIMDBID.Text.Replace("tt", String.Empty), Master.tmpMovie, Master.DefaultOptions) + Else + MsgBox(Master.eLang.GetString(12, "The ID you entered is not a valid IMDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + End If + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + sHTTP.StartDownloadImage(Args.pURL) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image, .IMDBId = Args.IMDBId} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + '// + ' Thread finished: display pic if it was able to get one + '\\ + + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbPoster.Image = Res.Result + If Not _PosterCache.ContainsKey(Res.IMDBId) Then + _PosterCache.Add(Res.IMDBId, Res.Result) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + pnlPicStatus.Visible = False + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Master.tmpMovie.Clear() + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub btnOpenFolder_Click(sender As Object, e As EventArgs) Handles btnOpenFolder.Click + Dim fPath As String = Directory.GetParent(Master.currMovie.Filename).FullName + + If Not String.IsNullOrEmpty(fPath) Then + Shell("Explorer.exe " & fPath, vbNormalFocus) + End If + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtIMDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.tvResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtIMDBID.Text = String.Empty + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblTagline.Text = String.Empty + Me.lblYear.Text = String.Empty + Me.lblDirector.Text = String.Empty + Me.lblGenre.Text = String.Empty + Me.txtOutline.Text = String.Empty + Me.lblIMDB.Text = String.Empty + Me.pbPoster.Image = Nothing + + Master.tmpMovie.Clear() + + IMDB.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.lblYearHeader.Visible = areVisible + Me.lblDirectorHeader.Visible = areVisible + Me.lblGenreHeader.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.lblIMDBHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + Me.lblYear.Visible = areVisible + Me.lblTagline.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblDirector.Visible = areVisible + Me.lblGenre.Visible = areVisible + Me.lblIMDB.Visible = areVisible + Me.pbPoster.Visible = areVisible + End Sub + + Private Sub dlgIMDBSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub dlgIMDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + pnlPicStatus.Visible = False + IMDB.IMDBURL = IMDBURL + IMDB.UseOFDBTitle = UseOFDBTitle + IMDB.UseOFDBOutline = UseOFDBOutline + IMDB.UseOFDBPlot = UseOFDBPlot + IMDB.UseOFDBGenre = UseOFDBGenre + AddHandler IMDB.SearchMovieInfoDownloaded, AddressOf SearchMovieInfoDownloaded + AddHandler IMDB.SearchResultsDownloaded, AddressOf SearchResultsDownloaded + + Try + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgIMDBSearchResults_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + Me.tvResults.Focus() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + If Me.chkManual.Checked AndAlso Me.btnVerify.Enabled Then + If Not Regex.IsMatch(Me.txtIMDBID.Text.Replace("tt", String.Empty), "\d\d\d\d\d\d\d") Then + MsgBox(Master.eLang.GetString(12, "The ID you entered is not a valid IMDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + Exit Sub + Else + If MsgBox(String.Concat(Master.eLang.GetString(13, "You have manually entered an IMDB ID but have not verified it is correct."), vbNewLine, vbNewLine, Master.eLang.GetString(101, "Are you sure you want to continue?", True)), MsgBoxStyle.YesNo, Master.eLang.GetString(14, "Continue without verification?")) = MsgBoxResult.No Then + Exit Sub + Else + Master.tmpMovie.IMDBID = Me.txtIMDBID.Text.Replace("tt", String.Empty) + End If + End If + End If + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.Close() + End Sub + + Private Sub SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + '// + ' Info downloaded... fill form with data + '\\ + + Me.pnlLoading.Visible = False + Me.OK_Button.Enabled = True + + Try + If bSuccess Then + Me.ControlsVisible(True) + Me.lblTitle.Text = Master.tmpMovie.Title + Me.lblTagline.Text = Master.tmpMovie.Tagline + Me.lblYear.Text = Master.tmpMovie.Year + Me.lblDirector.Text = Master.tmpMovie.Director + Me.lblGenre.Text = Master.tmpMovie.Genre + Me.txtOutline.Text = Master.tmpMovie.Outline + Me.lblIMDB.Text = Master.tmpMovie.IMDBID + + If _PosterCache.ContainsKey(Master.tmpMovie.IMDBID) Then + 'just set it + Me.pbPoster.Image = _PosterCache(Master.tmpMovie.IMDBID) + Else + 'go download it, if available + If Not String.IsNullOrEmpty(sPoster) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + pnlPicStatus.Visible = True + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = sPoster, .IMDBId = Master.tmpMovie.IMDBID}) + End If + + End If + + 'store clone of tmpmovie + If Not _InfoCache.ContainsKey(Master.tmpMovie.IMDBID) Then + _InfoCache.Add(Master.tmpMovie.IMDBID, GetMovieClone(Master.tmpMovie)) + End If + + + Me.btnVerify.Enabled = False + Else + If Me.chkManual.Checked Then + MsgBox(Master.eLang.GetString(15, "Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again."), MsgBoxStyle.Exclamation, Master.eLang.GetString(16, "Verification Failed")) + Me.btnVerify.Enabled = True + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SearchResultsDownloaded(ByVal M As IMDB.MovieSearchResults) + '// + ' Process the results that IMDB gave us + '\\ + + Try + Me.tvResults.Nodes.Clear() + Me.ClearInfo() + If Not IsNothing(M) Then + If M.PartialMatches.Count > 0 OrElse M.PopularTitles.Count > 0 OrElse M.ExactMatches.Count > 0 Then + Dim TnP As New TreeNode(String.Format(Master.eLang.GetString(17, "Partial Matches ({0})"), M.PartialMatches.Count)) + Dim selNode As New TreeNode + + If M.PartialMatches.Count > 0 Then + M.PartialMatches.Sort() + For Each Movie As MediaContainers.Movie In M.PartialMatches + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + selNode = TnP.FirstNode + End If + + If M.PopularTitles.Count > 0 Then + M.PopularTitles.Sort() + If M.PartialMatches.Count > 0 OrElse M.ExactMatches.Count > 0 Then + Me.tvResults.Nodes(TnP.Index).Collapse() + End If + + TnP = New TreeNode(String.Format(Master.eLang.GetString(19, "Popular Titles ({0})"), M.PopularTitles.Count)) + + For Each Movie As MediaContainers.Movie In M.PopularTitles + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + + selNode = TnP.FirstNode + End If + + If M.ExactMatches.Count > 0 Then + M.ExactMatches.Sort() + If M.PartialMatches.Count > 0 Then + Me.tvResults.Nodes(TnP.Index).Collapse() + End If + TnP = New TreeNode(String.Format(Master.eLang.GetString(18, "Exact Matches ({0})"), M.ExactMatches.Count)) + For Each Movie As MediaContainers.Movie In M.ExactMatches + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + + selNode = TnP.FirstNode + + End If + Me._prevnode = -2 + + 'determine if we automatically start downloading info for selected node + If M.ExactMatches.Count > 0 Then + Me.tvResults.SelectedNode = selNode + ElseIf M.PopularTitles.Count > 0 Then + Me.tvResults.SelectedNode = selNode + ElseIf M.PartialMatches.Count > 0 Then + Me.tvResults.SelectedNode = selNode + Else + Me.tvResults.SelectedNode = Nothing + End If + Me.tvResults.Focus() + Else + Me.tvResults.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(20, "No Matches Found")}) + End If + End If + Me.pnlLoading.Visible = False + chkManual.Enabled = True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.Label2.Text = Master.eLang.GetString(21, "View details of each result to find the proper movie.") + Me.Label1.Text = Master.eLang.GetString(22, "Movie Search Results") + Me.chkManual.Text = Master.eLang.GetString(23, "Manual IMDB Entry:") + Me.btnVerify.Text = Master.eLang.GetString(24, "Verify") + Me.lblYearHeader.Text = Master.eLang.GetString(49, "Year:", True) + Me.lblDirectorHeader.Text = Master.eLang.GetString(239, "Director:", True) + Me.lblGenreHeader.Text = Master.eLang.GetString(51, "Genre(s):", True) + Me.lblIMDBHeader.Text = Master.eLang.GetString(289, "IMDB ID:", True) + Me.lblPlotHeader.Text = Master.eLang.GetString(242, "Plot Outline:", True) + Me.Label3.Text = Master.eLang.GetString(25, "Searching IMDB...") + Me.txtFileName.Text = Master.currMovie.Filename + End Sub + + Private Sub tmrLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoad.Tick + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + Me.pnlLoading.Visible = True + Me.Label3.Text = Master.eLang.GetString(26, "Downloading details...") + + IMDB.IMDBURL = IMDBURL + IMDB.GetSearchMovieInfoAsync(Me.tvResults.SelectedNode.Tag.ToString, Master.tmpMovie, Master.DefaultOptions) + End Sub + + Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrWait.Tick + If Not Me._prevnode = Me._currnode Then + Me._prevnode = Me._currnode + Me.tmrWait.Stop() + Me.tmrLoad.Start() + Else + Me.tmrLoad.Stop() + Me.tmrWait.Stop() + End If + End Sub + Private Sub tvResults_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvResults.AfterSelect + Try + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + + Me.ClearInfo() + Me.OK_Button.Enabled = False + + If Not IsNothing(Me.tvResults.SelectedNode.Tag) AndAlso Not String.IsNullOrEmpty(Me.tvResults.SelectedNode.Tag.ToString) Then + Me._currnode = Me.tvResults.SelectedNode.Index + + 'check if this movie is in the cache already + If _InfoCache.ContainsKey(Me.tvResults.SelectedNode.Tag.ToString) Then + Master.tmpMovie = GetMovieClone(_InfoCache(Me.tvResults.SelectedNode.Tag.ToString)) + SearchMovieInfoDownloaded(String.Empty, True) + Return + End If + + Me.pnlLoading.Visible = True + Me.tmrWait.Start() + Else + Me.pnlLoading.Visible = False + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub tvResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub txtIMDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtIMDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtIMDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtIMDBID.TextChanged + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Function GetMovieClone(ByVal original As MediaContainers.Movie) As MediaContainers.Movie + 'have to do this the old-fashioned way because it is not serializable + Dim result As New MediaContainers.Movie + With result + .IMDBID = original.IMDBID + .Genre = original.Genre + .Title = original.Title + .Tagline = original.Tagline + .Year = original.Year + .Director = original.Director + .Genre = original.Genre + .Outline = original.Outline + End With + Return result + 'Using mem As New IO.MemoryStream() + ' Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, New System.Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.Clone)) + ' bin.Serialize(mem, original) + ' mem.Seek(0, IO.SeekOrigin.Begin) + ' Return DirectCast(bin.Deserialize(mem), MediaContainers.Movie) + 'End Using + End Function + + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim pURL As String + Dim IMDBId As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Image + Dim IMDBId As String + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/Scraper/dlgImgSelect.Designer.vb b/Addons/scraper.OFDB.Data/Scraper/dlgImgSelect.Designer.vb new file mode 100644 index 0000000..213f00e --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/dlgImgSelect.Designer.vb @@ -0,0 +1,466 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgImgSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgImgSelect)) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.pnlSize = New System.Windows.Forms.Panel() + Me.btnPreview = New System.Windows.Forms.Button() + Me.rbSmall = New System.Windows.Forms.RadioButton() + Me.rbMedium = New System.Windows.Forms.RadioButton() + Me.rbLarge = New System.Windows.Forms.RadioButton() + Me.rbXLarge = New System.Windows.Forms.RadioButton() + Me.pnlFanart = New System.Windows.Forms.Panel() + Me.chkThumb = New System.Windows.Forms.CheckBox() + Me.chkMid = New System.Windows.Forms.CheckBox() + Me.chkOriginal = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlDLStatus = New System.Windows.Forms.Panel() + Me.pnlMPDB = New System.Windows.Forms.Panel() + Me.lblDL3Status = New System.Windows.Forms.Label() + Me.lblDL3 = New System.Windows.Forms.Label() + Me.pbDL3 = New System.Windows.Forms.ProgressBar() + Me.pnlIMPA = New System.Windows.Forms.Panel() + Me.lblDL2Status = New System.Windows.Forms.Label() + Me.lblDL2 = New System.Windows.Forms.Label() + Me.pbDL2 = New System.Windows.Forms.ProgressBar() + Me.lblDL1Status = New System.Windows.Forms.Label() + Me.lblDL1 = New System.Windows.Forms.Label() + Me.pbDL1 = New System.Windows.Forms.ProgressBar() + Me.pnlSinglePic = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.TableLayoutPanel1.SuspendLayout() + Me.pnlBottomMain.SuspendLayout() + Me.pnlSize.SuspendLayout() + Me.pnlFanart.SuspendLayout() + Me.pnlDLStatus.SuspendLayout() + Me.pnlMPDB.SuspendLayout() + Me.pnlIMPA.SuspendLayout() + Me.pnlSinglePic.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(687, 11) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(836, 495) + Me.pnlBG.TabIndex = 1 + Me.pnlBG.Visible = False + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.pnlSize) + Me.pnlBottomMain.Controls.Add(Me.pnlFanart) + Me.pnlBottomMain.Controls.Add(Me.lblInfo) + Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) + Me.pnlBottomMain.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 495) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(836, 50) + Me.pnlBottomMain.TabIndex = 0 + ' + 'pnlSize + ' + Me.pnlSize.BackColor = System.Drawing.Color.White + Me.pnlSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.pnlSize.Controls.Add(Me.btnPreview) + Me.pnlSize.Controls.Add(Me.rbSmall) + Me.pnlSize.Controls.Add(Me.rbMedium) + Me.pnlSize.Controls.Add(Me.rbLarge) + Me.pnlSize.Controls.Add(Me.rbXLarge) + Me.pnlSize.Location = New System.Drawing.Point(8, 8) + Me.pnlSize.Name = "pnlSize" + Me.pnlSize.Size = New System.Drawing.Size(673, 34) + Me.pnlSize.TabIndex = 1 + Me.pnlSize.Visible = False + ' + 'btnPreview + ' + Me.btnPreview.Enabled = False + Me.btnPreview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnPreview.Image = CType(resources.GetObject("btnPreview.Image"), System.Drawing.Image) + Me.btnPreview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPreview.Location = New System.Drawing.Point(593, 5) + Me.btnPreview.Name = "btnPreview" + Me.btnPreview.Size = New System.Drawing.Size(75, 23) + Me.btnPreview.TabIndex = 4 + Me.btnPreview.Text = "Preview" + Me.btnPreview.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPreview.UseVisualStyleBackColor = True + ' + 'rbSmall + ' + Me.rbSmall.AutoSize = True + Me.rbSmall.Enabled = False + Me.rbSmall.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbSmall.Location = New System.Drawing.Point(475, 8) + Me.rbSmall.Name = "rbSmall" + Me.rbSmall.Size = New System.Drawing.Size(53, 17) + Me.rbSmall.TabIndex = 3 + Me.rbSmall.TabStop = True + Me.rbSmall.Text = "Small" + Me.rbSmall.UseVisualStyleBackColor = True + ' + 'rbMedium + ' + Me.rbMedium.AutoSize = True + Me.rbMedium.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbMedium.Location = New System.Drawing.Point(201, 8) + Me.rbMedium.Name = "rbMedium" + Me.rbMedium.Size = New System.Drawing.Size(69, 17) + Me.rbMedium.TabIndex = 1 + Me.rbMedium.TabStop = True + Me.rbMedium.Text = "Medium" + Me.rbMedium.UseVisualStyleBackColor = True + ' + 'rbLarge + ' + Me.rbLarge.AutoSize = True + Me.rbLarge.Enabled = False + Me.rbLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbLarge.Location = New System.Drawing.Point(343, 8) + Me.rbLarge.Name = "rbLarge" + Me.rbLarge.Size = New System.Drawing.Size(55, 17) + Me.rbLarge.TabIndex = 2 + Me.rbLarge.TabStop = True + Me.rbLarge.Text = "Cover" + Me.rbLarge.UseVisualStyleBackColor = True + ' + 'rbXLarge + ' + Me.rbXLarge.AutoSize = True + Me.rbXLarge.Enabled = False + Me.rbXLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbXLarge.Location = New System.Drawing.Point(26, 8) + Me.rbXLarge.Name = "rbXLarge" + Me.rbXLarge.Size = New System.Drawing.Size(66, 17) + Me.rbXLarge.TabIndex = 0 + Me.rbXLarge.TabStop = True + Me.rbXLarge.Text = "Original" + Me.rbXLarge.UseVisualStyleBackColor = True + ' + 'pnlFanart + ' + Me.pnlFanart.BackColor = System.Drawing.Color.White + Me.pnlFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFanart.Controls.Add(Me.chkThumb) + Me.pnlFanart.Controls.Add(Me.chkMid) + Me.pnlFanart.Controls.Add(Me.chkOriginal) + Me.pnlFanart.Location = New System.Drawing.Point(8, 8) + Me.pnlFanart.Name = "pnlFanart" + Me.pnlFanart.Size = New System.Drawing.Size(339, 34) + Me.pnlFanart.TabIndex = 5 + Me.pnlFanart.Visible = False + ' + 'chkThumb + ' + Me.chkThumb.AutoSize = True + Me.chkThumb.Location = New System.Drawing.Point(231, 8) + Me.chkThumb.Name = "chkThumb" + Me.chkThumb.Size = New System.Drawing.Size(111, 17) + Me.chkThumb.TabIndex = 2 + Me.chkThumb.Text = "Check All Thumb" + Me.chkThumb.UseVisualStyleBackColor = True + ' + 'chkMid + ' + Me.chkMid.AutoSize = True + Me.chkMid.Location = New System.Drawing.Point(131, 8) + Me.chkMid.Name = "chkMid" + Me.chkMid.Size = New System.Drawing.Size(96, 17) + Me.chkMid.TabIndex = 1 + Me.chkMid.Text = "Check All Mid" + Me.chkMid.UseVisualStyleBackColor = True + ' + 'chkOriginal + ' + Me.chkOriginal.AutoSize = True + Me.chkOriginal.Location = New System.Drawing.Point(7, 8) + Me.chkOriginal.Name = "chkOriginal" + Me.chkOriginal.Size = New System.Drawing.Size(118, 17) + Me.chkOriginal.TabIndex = 0 + Me.chkOriginal.Text = "Check All Original" + Me.chkOriginal.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.Location = New System.Drawing.Point(402, 10) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(240, 31) + Me.lblInfo.TabIndex = 1 + Me.lblInfo.Text = "Selected item will be set as fanart. All checked items will be saved to \extrathu" & _ + "mbs." + Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblInfo.Visible = False + ' + 'pnlDLStatus + ' + Me.pnlDLStatus.BackColor = System.Drawing.Color.White + Me.pnlDLStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlDLStatus.Controls.Add(Me.pnlMPDB) + Me.pnlDLStatus.Controls.Add(Me.pnlIMPA) + Me.pnlDLStatus.Controls.Add(Me.lblDL1Status) + Me.pnlDLStatus.Controls.Add(Me.lblDL1) + Me.pnlDLStatus.Controls.Add(Me.pbDL1) + Me.pnlDLStatus.Location = New System.Drawing.Point(257, 132) + Me.pnlDLStatus.Name = "pnlDLStatus" + Me.pnlDLStatus.Size = New System.Drawing.Size(321, 223) + Me.pnlDLStatus.TabIndex = 2 + Me.pnlDLStatus.Visible = False + ' + 'pnlMPDB + ' + Me.pnlMPDB.Controls.Add(Me.lblDL3Status) + Me.pnlMPDB.Controls.Add(Me.lblDL3) + Me.pnlMPDB.Controls.Add(Me.pbDL3) + Me.pnlMPDB.Location = New System.Drawing.Point(0, 147) + Me.pnlMPDB.Name = "pnlMPDB" + Me.pnlMPDB.Size = New System.Drawing.Size(321, 75) + Me.pnlMPDB.TabIndex = 4 + ' + 'lblDL3Status + ' + Me.lblDL3Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL3Status.Name = "lblDL3Status" + Me.lblDL3Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL3Status.TabIndex = 1 + ' + 'lblDL3 + ' + Me.lblDL3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3.Location = New System.Drawing.Point(5, 10) + Me.lblDL3.Name = "lblDL3" + Me.lblDL3.Size = New System.Drawing.Size(310, 13) + Me.lblDL3.TabIndex = 0 + Me.lblDL3.Text = "Performing Preliminary Tasks..." + ' + 'pbDL3 + ' + Me.pbDL3.Location = New System.Drawing.Point(6, 53) + Me.pbDL3.Name = "pbDL3" + Me.pbDL3.Size = New System.Drawing.Size(309, 19) + Me.pbDL3.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL3.TabIndex = 2 + ' + 'pnlIMPA + ' + Me.pnlIMPA.Controls.Add(Me.pnlSinglePic) + Me.pnlIMPA.Controls.Add(Me.lblDL2Status) + Me.pnlIMPA.Controls.Add(Me.lblDL2) + Me.pnlIMPA.Controls.Add(Me.pbDL2) + Me.pnlIMPA.Location = New System.Drawing.Point(0, 73) + Me.pnlIMPA.Name = "pnlIMPA" + Me.pnlIMPA.Size = New System.Drawing.Size(321, 75) + Me.pnlIMPA.TabIndex = 3 + ' + 'lblDL2Status + ' + Me.lblDL2Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL2Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL2Status.Name = "lblDL2Status" + Me.lblDL2Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL2Status.TabIndex = 1 + ' + 'lblDL2 + ' + Me.lblDL2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL2.Location = New System.Drawing.Point(5, 10) + Me.lblDL2.Name = "lblDL2" + Me.lblDL2.Size = New System.Drawing.Size(310, 13) + Me.lblDL2.TabIndex = 0 + Me.lblDL2.Text = "Performing Preliminary Tasks..." + ' + 'pbDL2 + ' + Me.pbDL2.Location = New System.Drawing.Point(6, 52) + Me.pbDL2.Name = "pbDL2" + Me.pbDL2.Size = New System.Drawing.Size(309, 19) + Me.pbDL2.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL2.TabIndex = 2 + ' + 'lblDL1Status + ' + Me.lblDL1Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL1Status.Location = New System.Drawing.Point(5, 29) + Me.lblDL1Status.Name = "lblDL1Status" + Me.lblDL1Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL1Status.TabIndex = 1 + ' + 'lblDL1 + ' + Me.lblDL1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL1.Location = New System.Drawing.Point(5, 6) + Me.lblDL1.Name = "lblDL1" + Me.lblDL1.Size = New System.Drawing.Size(310, 13) + Me.lblDL1.TabIndex = 0 + Me.lblDL1.Text = "Performing Preliminary Tasks..." + ' + 'pbDL1 + ' + Me.pbDL1.Location = New System.Drawing.Point(6, 49) + Me.pbDL1.Name = "pbDL1" + Me.pbDL1.Size = New System.Drawing.Size(309, 19) + Me.pbDL1.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL1.TabIndex = 2 + ' + 'pnlSinglePic + ' + Me.pnlSinglePic.BackColor = System.Drawing.Color.White + Me.pnlSinglePic.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlSinglePic.Controls.Add(Me.Label2) + Me.pnlSinglePic.Controls.Add(Me.ProgressBar1) + Me.pnlSinglePic.Location = New System.Drawing.Point(0, 1) + Me.pnlSinglePic.Name = "pnlSinglePic" + Me.pnlSinglePic.Size = New System.Drawing.Size(321, 75) + Me.pnlSinglePic.TabIndex = 1 + Me.pnlSinglePic.Visible = False + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(5, 10) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(310, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Downloading Selected Image..." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(6, 53) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(309, 19) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'dlgImgSelect + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(836, 545) + Me.ControlBox = False + Me.Controls.Add(Me.pnlDLStatus) + Me.Controls.Add(Me.pnlBG) + Me.Controls.Add(Me.pnlBottomMain) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgImgSelect" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Poster" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlSize.ResumeLayout(False) + Me.pnlSize.PerformLayout() + Me.pnlFanart.ResumeLayout(False) + Me.pnlFanart.PerformLayout() + Me.pnlDLStatus.ResumeLayout(False) + Me.pnlMPDB.ResumeLayout(False) + Me.pnlIMPA.ResumeLayout(False) + Me.pnlSinglePic.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlDLStatus As System.Windows.Forms.Panel + Friend WithEvents lblDL1Status As System.Windows.Forms.Label + Friend WithEvents lblDL1 As System.Windows.Forms.Label + Friend WithEvents pbDL1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlIMPA As System.Windows.Forms.Panel + Friend WithEvents lblDL2Status As System.Windows.Forms.Label + Friend WithEvents lblDL2 As System.Windows.Forms.Label + Friend WithEvents pbDL2 As System.Windows.Forms.ProgressBar + Friend WithEvents lblInfo As System.Windows.Forms.Label + Friend WithEvents pnlSize As System.Windows.Forms.Panel + Friend WithEvents rbSmall As System.Windows.Forms.RadioButton + Friend WithEvents rbMedium As System.Windows.Forms.RadioButton + Friend WithEvents rbLarge As System.Windows.Forms.RadioButton + Friend WithEvents rbXLarge As System.Windows.Forms.RadioButton + Friend WithEvents pnlSinglePic As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlMPDB As System.Windows.Forms.Panel + Friend WithEvents lblDL3Status As System.Windows.Forms.Label + Friend WithEvents lblDL3 As System.Windows.Forms.Label + Friend WithEvents pbDL3 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlFanart As System.Windows.Forms.Panel + Friend WithEvents chkThumb As System.Windows.Forms.CheckBox + Friend WithEvents chkMid As System.Windows.Forms.CheckBox + Friend WithEvents chkOriginal As System.Windows.Forms.CheckBox + Friend WithEvents btnPreview As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.OFDB.Data/Scraper/dlgImgSelect.resx b/Addons/scraper.OFDB.Data/Scraper/dlgImgSelect.resx new file mode 100644 index 0000000..e4a4f58 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/dlgImgSelect.resx @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnPreview.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA + CwAB5DetvwAAAuRJREFUOE+lkltsS3Ecx3+ILAsPFrfEyxJPXkh0bokg4UG78TQNI5FImPBAJKiNhBAy + MTwRMRJ1ibsZ29jc2t00Vrq1p3q6tqft6Tk9t87YeLCHff3/3Sp4dZJPvv/f5fs7///5HwJA/8Nv88jw + 8ApD1y+blnnNtKwGjmXl/qCQMxt+fB9xjI2NEYdGR0dp9OfP6Yph+gOKjpBmMcy8CoxwPi5gok81kDGt + BPOUci+xt1LO0Gy+ZAZuUcbtCe4NpHEtLKNBkHGfrQt5dySNrpSKIcvcbJkmka5pNKhrtrfxFE71RlD3 + UcT5gIjt7THMvhLHTEZlSwz1n0ScZTXe8yKextec6TRNY3zAF0O3tUYl7Ovqh+t9EHs8IRSdC4FO9+WZ + VBfEjlchHPEF8z2PRQnDg9b4AE3L0hA7wqNwDFWvP2Cn1w9Hox90zAc6McFRH9Y97MWuDn++56YwgJEc + G2CwAdmsSkPsCLf6I1jb3IUNL3sY3Zhxxgs67AG5PCg+4YW9uRsbWY33XAp8xrBlOHVdI1IVhb5oWdv1 + QBjLn3qwtqUDq5s6MOd0O2jfizwlx9uwqtGLdazGey76Q/hm6k4tmyXKyDLlVMV29aOApU0erHnWgWmH + noF2NYL2Ph2nuhFF+5uw8okXy1hP/YcghjTVqSgZoqQkkZZK2m58ErDouRfzLjSDKt2grbf+ZpMbJSeb + sPA520FvCINqxinLaaKoKHJsETGK1rCIh+8F3HnTh7vvgrjHbqMAjx/0CGiNDCAqJZGUEk45zQYk4nG+ + i7LPgoBkNIpsOglTzcDSFOQ0FTmdwdRiyvNqKolELAZZlre0t7URLSkro21VVSVdnZ1pSZKQSqXAPizY + /wHDMMCuKg+Ps6oKJZNBsL//6+7q6gWTaPzhWjx31qzF5Xb7Acf69S6mNRV2e22Fw1G7gcGVUcPyro3l + 5Qfnl5auYZ4Zk7l3ClsxuBQGTszNx/9SqHHDVG76BaMnpgu1OH2ZAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/Scraper/dlgImgSelect.vb b/Addons/scraper.OFDB.Data/Scraper/dlgImgSelect.vb new file mode 100644 index 0000000..7e37076 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/dlgImgSelect.vb @@ -0,0 +1,1309 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgImgSelect + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker + + Private CachePath As String = String.Empty + Private chkImage() As CheckBox + Private DLType As Enums.ImageType + Private ETHashes As New List(Of String) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + Private IMPA As New IMPA.Scraper + Private IMPAPosters As New List(Of MediaContainers.Image) + Private isEdit As Boolean = False + Private isShown As Boolean = False + Private iTop As Integer = 5 + Private lblImage() As Label + Private MPDB As New MPDB.Scraper + Private MPDBPosters As New List(Of MediaContainers.Image) + Private noImages As Boolean = False + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private PreDL As Boolean = False + Private Results As New Containers.ImgResult + Private selIndex As Integer = -1 + Private TMDB As New TMDB.Scraper + Private TMDBPosters As New List(Of MediaContainers.Image) + Private tMovie As New Structures.DBMovie + Private tmpImage As New MediaContainers.Image + Private _impaDone As Boolean = True + Private _mpdbDone As Boolean = True + Private _tmdbDone As Boolean = True + Private selURL As String = "" + +#End Region 'Fields + +#Region "Events" + + Private Event IMPADone() + + Private Event MPDBDone() + + Private Event TMDBDone() + +#End Region 'Events + +#Region "Methods" + + Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.PreDL = True + Me.SetUp() + Me.StartDownload() + End Sub + + Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult + '// + ' Overload to pass data + '\\ + + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.isShown = True + + MyBase.ShowDialog() + Return Results + End Function + + Public Overloads Function ShowDialog() As Containers.ImgResult + Me.isShown = True + MyBase.ShowDialog() + + Return Results + End Function + + 'Rewrite to simplify + Private Sub AddImage(ByVal iImage As Image, ByVal sDescription As String, ByVal iIndex As Integer, ByVal sURL As String, ByVal isChecked As Boolean, poster As MediaContainers.Image) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(256, 286) + Me.pbImage(iIndex).Size = New Size(250, 250) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.pnlImage(iIndex).Tag = poster + Me.pbImage(iIndex).Tag = poster + Me.pbImage(iIndex).Image = iImage + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.pnlBG.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If Me.DLType = Enums.ImageType.Fanart Then + ReDim Preserve Me.chkImage(iIndex) + Me.chkImage(iIndex) = New CheckBox() + Me.chkImage(iIndex).Name = iIndex.ToString + Me.chkImage(iIndex).Size = New Size(250, 30) + Me.chkImage(iIndex).AutoSize = False + Me.chkImage(iIndex).BackColor = Color.White + Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + 'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + Me.chkImage(iIndex).Left = 0 + Me.chkImage(iIndex).Top = 250 + Me.chkImage(iIndex).Checked = isChecked + Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve Me.lblImage(iIndex) + Me.lblImage(iIndex) = New Label() + Me.lblImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Size = New Size(250, 30) + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + If IsTMDBURL(sURL) Then + Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + Else + Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + End If + Me.lblImage(iIndex).Tag = poster + Me.lblImage(iIndex).Left = 0 + Me.lblImage(iIndex).Top = 250 + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 301 + Else + Me.iLeft += 271 + End If + End Sub + + Private Sub AllDoneDownloading() + If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone Then + Me.pnlDLStatus.Visible = False + Me.TMDBPosters.AddRange(Me.IMPAPosters) + Me.TMDBPosters.AddRange(Me.MPDBPosters) + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + End If + End Sub + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + PreviewImage() + End Sub + Private Sub PreviewImage() + Try + Dim tImage As New Images + + Me.pnlSinglePic.Visible = True + Application.DoEvents() + + Select Case True + Case rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + Case rbLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + Case rbMedium.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case rbSmall.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End Select + + Me.pnlSinglePic.Visible = False + + If Not IsNothing(tImage.Image) Then + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image) + + End If + + tImage.Dispose() + tImage = Nothing + + Catch ex As Exception + Me.pnlSinglePic.Visible = False + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork + '// + ' Thread to download impa posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + + For i As Integer = 0 To Me.IMPAPosters.Count - 1 + If bwIMPADownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL) + Try + Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL) + Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg"))) + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL2.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPADownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._impaDone = True + RaiseEvent IMPADone() + End If + End Sub + + Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.MPDBPosters.Count - 1 + Try + If Me.bwMPDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL) + Try + Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL) + Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg"))) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL3.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._mpdbDone = True + RaiseEvent MPDBDone() + End If + End Sub + + Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork + '// + ' Thread to download tmdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + Dim thumbLink As String = String.Empty + Dim savePath As String = String.Empty + Dim extrathumbSize As String = String.Empty + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + 'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all. + Dim posters As MediaContainers.Image() + If Me.DLType = Enums.ImageType.Fanart Then + posters = TMDBPosters.Where(Function(s) s.Description = extrathumbSize).ToArray() + Else + posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray() + End If + + Dim percent = 100 / posters.Count + For i As Integer = 0 To posters.Count - 1 + Try + If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then + If Me.bwTMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwTMDBDownload.ReportProgress(Convert.ToInt32((i + 1) * percent), posters(i).URL) + Try + posters(i).WebImage.FromWeb(posters(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then + If Me.DLType = Enums.ImageType.Fanart Then + + + If Not posters(i).URL.Contains("-thumb.") Then + Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org" + thumbLink = RemoveServerURL(posters(i).URL) + 'If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("-poster.", "-thumb.") + thumbLink = thumbLink.Replace("-original.", "-thumb.") + ''Else + 'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb") + 'End If + Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Else + Me.Results.Posters.Add(posters(i).URL) + End If + End If + If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then + Try + posters(i).URL = Me.CleanTMDBURL(posters(i).URL) + + savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg")) + posters(i).WebImage.Save(savePath) + + If Master.eSettings.AutoET Then + Dim tSize As New Enums.FanartSize + Select Case posters(i).Description.ToLower + Case "original" + tSize = Enums.FanartSize.Lrg + Case "mid" + tSize = Enums.FanartSize.Mid + Case "thumb" + tSize = Enums.FanartSize.Small + End Select + If Master.eSettings.AutoETSize = tSize Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + posters(i).isChecked = True + End If + End If + End If + + Catch + End Try + End If + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL1Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL1.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._tmdbDone = True + RaiseEvent TMDBDone() + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + IMPA.Cancel() + MPDB.Cancel() + TMDB.Cancel() + + If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync() + If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync() + If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync() + + While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean) + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Text.ToLower.Contains(sType) Then + Me.chkImage(i).Checked = Checked + End If + Next + End Sub + + Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged + Me.CheckAll("(poster)", chkMid.Checked) + End Sub + + Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged + Me.CheckAll("(original)", chkOriginal.Checked) + End Sub + + Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged + Me.CheckAll("(thumb)", chkThumb.Checked) + End Sub + + Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'Me.tmpImage.Dispose() + + IMPA = Nothing + MPDB = Nothing + TMDB = Nothing + + IMPAPosters = Nothing + MPDBPosters = Nothing + TMDBPosters = Nothing + End Sub + + Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath) + End Sub + + Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not PreDL Then SetUp() + End Sub + + Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Try + Application.DoEvents() + If Not PreDL Then + StartDownload() + ElseIf noImages Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image) + Try + 'set all pnl colors to white first + 'remove all the current genres + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(i).BackColor = Color.White + Me.chkImage(i).ForeColor = Color.Black + Else + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + End If + Next + + 'set selected pnl color to blue + Me.pnlImage(iIndex).BackColor = Color.Blue + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(iIndex).BackColor = Color.Blue + Me.chkImage(iIndex).ForeColor = Color.White + Else + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + End If + + Me.selIndex = iIndex + Me.selURL = poster.URL + + Me.pnlSize.Visible = False + + If IsTMDBURL(poster.URL) Then + Me.SetupSizes(poster.ParentID) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + Me.OK_Button.Enabled = False + Else + Me.OK_Button.Focus() + End If + Me.tmpImage.Clear() + Else + Me.rbXLarge.Checked = False + Me.rbLarge.Checked = False + Me.rbMedium.Checked = False + Me.rbSmall.Checked = False + Me.OK_Button.Enabled = True + Me.OK_Button.Focus() + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function IsTMDBURL(ByVal sURL As String) As Boolean + If sURL.ToLower.Contains("themoviedb.org") OrElse sURL.ToLower.Contains("d3gtl9l2a4fn1j.cloudfront.net") OrElse sURL.ToLower.Contains("cf1.imgobject.com") OrElse sURL.ToLower.Contains("cf2.imgobject.com") Then + Return True + Else + Return False + End If + End Function + + Private Function CleanTMDBURL(ByVal sURL As String) As String + If IsTMDBURL(sURL) Then + Dim _sURL As New Uri(sURL) + sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped)) + Else + sURL = StringUtils.TruncateURL(sURL, 40, True) + End If + Return sURL.Replace(":", "$c$").Replace("/", "$s$") + End Function + + + Private Sub GetFanart() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim di As New DirectoryInfo(CachePath) + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + If Not IsNothing(tImage.WebImage.Image) Then + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + 'Case sFile.Name.Contains("(mid)") + ' tImage.Description = "mid" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + End If + Next + ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Me.lblDL1.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL1Status.Text = String.Empty + Me.pbDL1.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me.TMDB.GetImagesAsync(tMovie.Movie.IMDBID, "backdrop") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub GetPosters() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim lFi As New List(Of FileInfo) + Dim di As New DirectoryInfo(CachePath) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Height = 75 + Me.pnlDLStatus.Top = 207 + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + Next + ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + Me.lblDL1.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL1Status.Text = String.Empty + Me.pbDL1.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.IMDBID, "poster") + Else + Me.lblDL1.Text = Master.eLang.GetString(33, "TheMovieDB.com is not enabled") + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + Me.lblDL2.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._impaDone = False + + Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL2.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled") + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + Me.lblDL3.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._mpdbDone = False + + Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL3.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPADoneDownloading() + Try + Me._impaDone = True + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL2.Value = 0 + + Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = Posters.Count + + Me.IMPAPosters = Posters + + Me.bwIMPADownload.WorkerSupportsCancellation = True + Me.bwIMPADownload.WorkerReportsProgress = True + Me.bwIMPADownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAProgressUpdated(ByVal iPercent As Integer) + Me.pbDL2.Value = iPercent + End Sub + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then + pnlBG.VerticalScroll.Value += 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum + End If + Else + If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then + pnlBG.VerticalScroll.Value -= 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub MPDBDoneDownloading() + Try + Me._mpdbDone = True + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL3.Value = 0 + + Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = Posters.Count + + Me.MPDBPosters = Posters + + Me.bwMPDBDownload.WorkerSupportsCancellation = True + Me.bwMPDBDownload.WorkerReportsProgress = True + Me.bwMPDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL3.Value = iPercent + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + Dim tmpPathPlus As String = String.Empty + Dim extrathumbSize As String + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + If DLType = Enums.ImageType.Fanart Then + tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") + Else + tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") + End If + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + 'Me.tmpImage.Save(tmpPathPlus, 100, selURL) + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + 'Me.tmpImage.Save(tmpPathPlus, 100, selURL) + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If + + If Me.DLType = Enums.ImageType.Fanart Then + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + Dim isChecked As Boolean = False + + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + isChecked = True + Exit For + End If + Next + + If isChecked Then + Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs") + If isEdit Then + extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName) + Else + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName) + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName) + Else + extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName) + End If + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + End If + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + Dim fsET As FileStream + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) + Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg) + fsET.Close() + iVal += 1 + End If + Next + fsET = Nothing + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + Try + 'If Me.DLType = Enums.ImageType.Fanart OrElse Not IsTMDBURL(DirectCast(sender, PictureBox).Tag.ToString) Then + 'ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(DirectCast(sender, PictureBox).Image) + 'Else + PreviewImage() + 'End If + Catch + End Try + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Panel).Name), DirectCast(DirectCast(sender, Panel).Tag, MediaContainers.Image)) + End Sub + + Private Sub ProcessPics(ByVal posters As List(Of MediaContainers.Image)) + Try + Dim iIndex As Integer = 0 + + 'remove all entries with invalid images + If Master.eSettings.UseImgCache Then + For i As Integer = posters.Count - 1 To 0 Step -1 + If IsNothing(posters.Item(i).WebImage.Image) Then + posters.RemoveAt(i) + End If + Next + End If + + If posters.Count > 0 Then + For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) RemoveServerURL(p.URL)) + If Not IsNothing(xPoster.WebImage.Image) AndAlso (Me.DLType = Enums.ImageType.Fanart OrElse Not (IsTMDBURL(xPoster.URL) AndAlso Not xPoster.Description = "cover")) Then + Me.AddImage(xPoster.WebImage.Image, xPoster.Description, iIndex, xPoster.URL, xPoster.isChecked, xPoster) + iIndex += 1 + End If + Next + Else + If Not Me.PreDL OrElse isShown Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Else + noImages = True + End If + End If + + Me.Activate() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub rbLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbMedium_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbMedium.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbSmall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSmall.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbXLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbXLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub SetUp() + Try + IMPA.IMDBURL = IMDBURL + TMDB.IMDBURL = IMDBURL + MPDB.IMDBURL = IMDBURL + AddHandler TMDB.PostersDownloaded, AddressOf TMDBPostersDownloaded + AddHandler TMDB.ProgressUpdated, AddressOf TMDBProgressUpdated + AddHandler IMPA.PostersDownloaded, AddressOf IMPAPostersDownloaded + AddHandler IMPA.ProgressUpdated, AddressOf IMPAProgressUpdated + AddHandler MPDB.PostersDownloaded, AddressOf MPDBPostersDownloaded + AddHandler MPDB.ProgressUpdated, AddressOf MPDBProgressUpdated + AddHandler IMPADone, AddressOf IMPADoneDownloading + AddHandler TMDBDone, AddressOf TMDBDoneDownloading + AddHandler MPDBDone, AddressOf MPDBDoneDownloading + + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlBG.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlBG) + + If Me.DLType = Enums.ImageType.Posters Then + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Else + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlDLStatus.Height = 75 + Me.pnlDLStatus.Top = 207 + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(tMovie.Filename) + End If + End If + + CachePath = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, tMovie.Movie.IMDBID, Path.DirectorySeparatorChar, If(Me.DLType = Enums.ImageType.Posters, "posters", "fanart")) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview", True) + Me.chkThumb.Text = Master.eLang.GetString(41, "Check All Thumb") + Me.chkMid.Text = Master.eLang.GetString(42, "Check All Mid") + Me.chkOriginal.Text = Master.eLang.GetString(43, "Check All Original") + Me.lblInfo.Text = Master.eLang.GetString(44, "Selected item will be set as fanart. All checked items will be saved to \extrathumbs.") + Me.lblDL3.Text = Master.eLang.GetString(45, "Performing Preliminary Tasks...") + Me.lblDL2.Text = Me.lblDL3.Text + Me.lblDL1.Text = Me.lblDL3.Text + Me.Label2.Text = Master.eLang.GetString(46, "Downloading Selected Image...") + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(0, sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Function RemoveServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Sub SetupSizes(ByVal ParentID As String) + Try + rbXLarge.Checked = False + rbXLarge.Enabled = False + rbXLarge.Text = Master.eLang.GetString(47, "Original") + rbLarge.Checked = False + rbLarge.Enabled = False + rbMedium.Checked = False + rbSmall.Checked = False + rbSmall.Enabled = False + If Me.DLType = Enums.ImageType.Fanart Then + rbLarge.Text = "w1280" + rbMedium.Text = "poster" + rbSmall.Text = "thumb" + Else + rbLarge.Text = Master.eLang.GetString(48, "Cover") + rbMedium.Text = Master.eLang.GetString(49, "Medium") + rbSmall.Text = Master.eLang.GetString(50, "Small") + End If + + For Each TMDBPoster As MediaContainers.Image In TMDBPosters.Where(Function(f) f.ParentID = ParentID) + Select Case TMDBPoster.Description + Case "original" + ' xlarge + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbXLarge.Enabled = True + rbXLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "cover" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "w1280" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format("w1280 ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + End If + Case "thumb" + ' small + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbSmall.Enabled = True + rbSmall.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "mid" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + Case "poster" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format("Poster ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + End Select + Next + + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Small + rbSmall.Checked = rbSmall.Enabled + Case Enums.PosterSize.Mid + rbMedium.Checked = rbMedium.Enabled + Case Enums.PosterSize.Lrg + rbLarge.Checked = rbLarge.Enabled + Case Enums.PosterSize.Xlrg + rbXLarge.Checked = rbXLarge.Enabled + End Select + + pnlSize.Visible = True + + Invalidate() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub StartDownload() + Try + Select Case Me.DLType + Case Enums.ImageType.Posters + Me.GetPosters() + Case Enums.ImageType.Fanart + Me.GetFanart() + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBDoneDownloading() + Try + If Me.DLType = Enums.ImageType.Posters Then + Me._tmdbDone = True + Me.AllDoneDownloading() + Else + Me.pnlDLStatus.Visible = False + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL1.Value = 0 + + Me.lblDL1.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL1Status.Text = String.Empty + + TMDBPosters = Posters + Me.pbDL1.Maximum = 100 + + Me.bwTMDBDownload.WorkerSupportsCancellation = True + Me.bwTMDBDownload.WorkerReportsProgress = True + Me.bwTMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL1.Value = iPercent + End Sub + +#End Region 'Methods +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.OFDB.Data/Scraper/dlgTrailer.Designer.vb new file mode 100644 index 0000000..2871b29 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/dlgTrailer.Designer.vb @@ -0,0 +1,292 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.btnPlayBrowser = New System.Windows.Forms.Button() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(350, 340) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(120, 23) + Me.OK_Button.TabIndex = 6 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(350, 369) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(120, 23) + Me.Cancel_Button.TabIndex = 7 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(445, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(458, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(122, 60) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(130, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(445, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(410, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(395, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(71, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(426, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(151, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 369) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(120, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(224, 340) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(120, 23) + Me.btnSetNfo.TabIndex = 5 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(478, 331) + Me.Panel1.TabIndex = 2 + ' + 'btnPlayBrowser + ' + Me.btnPlayBrowser.Enabled = False + Me.btnPlayBrowser.Location = New System.Drawing.Point(12, 340) + Me.btnPlayBrowser.Name = "btnPlayBrowser" + Me.btnPlayBrowser.Size = New System.Drawing.Size(120, 23) + Me.btnPlayBrowser.TabIndex = 4 + Me.btnPlayBrowser.Text = "Open In Browser" + Me.btnPlayBrowser.UseVisualStyleBackColor = True + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(484, 398) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Controls.Add(Me.btnPlayBrowser) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lbTrailers As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnPlayTrailer As System.Windows.Forms.Button + Friend WithEvents btnSetNfo As System.Windows.Forms.Button + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtYouTube As System.Windows.Forms.TextBox + Friend WithEvents btnBrowse As System.Windows.Forms.Button + Friend WithEvents txtManual As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog + Friend WithEvents btnGetTrailers As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents btnPlayBrowser As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.OFDB.Data/Scraper/dlgTrailer.resx b/Addons/scraper.OFDB.Data/Scraper/dlgTrailer.resx new file mode 100644 index 0000000..f08e020 --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/dlgTrailer.resx @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnGetTrailers.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAK + 6QAACukB/XXO0wAAABh0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzT7MfTgAAAfdJREFUOE+lkk1r + E1EUhi9apQsr7vwDigUXLtzpyrWlpdD8BSEbN1p1IRJQqNXoarCNH03aKlgQjU1ahCr2a6HSRRszGSe0 + 4nQ+M9/JjIhYeb25JGVGmo0OPMw5h/M+9zIMAfBfxBpd07osyzxv21aCMuTY9pDnugmhUjkX3YsSa8xa + 7ToVgIZBw4wgaGBlZRn376WHo7ttYg0NjzfDTODYcB0H38MQS0uLuDM6isz42NXofpNYQwXc7uktge95 + 0FQVxcIs5opFfPr44UI0s6cgeoO2JAwD1Ot+c56NZmIC+g2YwLJN+E6A0NtB6O/AdwMmbTEWzcQEhq5z + plmjgRBflDeYF5IMQZ5nMya3zM4CVVU4XdfQcH/hffUmbi0TxjvxBr3NbzTlhqF3FsjyNqcoMjzzB94K + aaQWjzAWhNuo2z9B/xOoitJZ8HVri5MkCbZWx1zpLoYXjjIKpRE4RgOKLGNbkjoL+HL5gbSpYGL1GpL5 + Y7hYOMlI5o/j0eolqN8MVEUxE83EBBvr6yP8Zx4b5TVceTWIRK6XcfllP0qVNYiCiArPp6OZ3WI/IYf6 + +/pO5bITmfzM6+e5Z9mps6ne6pnUic0nTx9Pz74ozkxPTT4cHBg4vY+Qw3sJDhBCutmQPq13DyFdPX/N + uunuwWbN+nbxb4D8AU3a+lQSEAyqAAAAAElFTkSuQmCC +</value> + </data> + <data name="btnPlayTrailer.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9kEGhIhAdf7pBcAAAJDSURBVDhPtVJLa5pBFPWxsGoQNI2oAY1ogigI + GitIULQufKxcBGmzLLpwo9B/UOgmv6GKuxDdCCKIGyOBLIpE8IWIaBauFEQSwcfCuZ07PkIogW564HDn + m7nnzHxzhvNfsFwuE5PJ5HelUnm5u7ubDYfD5ng8/kGXDjYd7+Dp6elTv9+fJxIJcDgcJBAIQDAYhIuL + CxKLxaDdbkOhUPiybX8LFJdKJdBoNOT8/BxcLheYzWaw2WyA30i9Xk+y2SxkMplvW9kr6M4LWohEIoHj + 42MIh8OQy+VAJpOBSqVic1KpFLCnVquBQqFQMyFisVh8x+PS4Z4ejwcQ6XSafXO53P2a1WqFer1+Q8cb + zOfzKi2Ect+Ev7BDKpXaz+/YarVeaN2gWq3OaAEejwd8Pp/R7XYz8Xq9ZjWZTDLh7iTlchnrR8pXA6FQ + CCKRCMRiMfh8PiYkhDCT5+dnODo6AoFAwAxoxFhVqOdMp9MWdSZ4SYeHhyCXyyEUCjEDFNN1TIddKF4y + GjSbzRWtH5jBaDT6eXl5CUqlEtRqNWi1Wri6umIGuDPGeXJywpJAc6fTCff392Um3uKAxogGxGAwMEEk + EoHVasXSsFgsYDKZ8B3gCUmj0QCdTufeajfI5/NfHx4ewGg0EvoKmQGeyuv1sh3tdjucnp6SYrEI19fX + v7ayt7i9vY3SFwnxeJzF6Pf72WWiQTQahW63+754B/qf6sfHx5vBYDDrdDqA7PV6Kxpb5ezs7PO27Z/A + pZRTYlRCnPgbHM4fFEdnm0hssg4AAAAASUVORK5CYII= +</value> + </data> + <metadata name="ofdTrailer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>40</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/Scraper/dlgTrailer.vb b/Addons/scraper.OFDB.Data/Scraper/dlgTrailer.vb new file mode 100644 index 0000000..67c25ca --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/dlgTrailer.vb @@ -0,0 +1,480 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgTrailer + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwCompileList As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwDownloadTrailer As New System.ComponentModel.BackgroundWorker + + Private cTrailer As New Trailers + Private imdbID As String = String.Empty + Private prePath As String = String.Empty + Private sPath As String = String.Empty + Private tArray As New List(Of String) + Private tURL As String = String.Empty + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal _imdbID As String, ByVal _sPath As String) As String + Me.imdbID = _imdbID + Me.sPath = _sPath + + If MyBase.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + Return Replace(Me.tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + Return Me.tURL + End If + Else + Return String.Empty + End If + End Function + + Protected Overrides Sub Finalize() + cTrailer = Nothing + MyBase.Finalize() + End Sub + + Private Sub BeginDownload(ByVal CloseDialog As Boolean) + Dim didCancel As Boolean = False + + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(56, "Downloading selected trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + If CloseDialog Then + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, Path.GetFileName(Me.prePath)) + FileUtils.Common.MoveFileWithStream(Me.prePath, Me.tURL) + + File.Delete(Me.prePath) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.prePath, """")) + didCancel = True + End If + ElseIf Me.txtManual.Text.Length > 0 Then + Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + If CloseDialog Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.txtManual.Text, """")) + didCancel = True + End If + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + didCancel = True + End If + ElseIf Regex.IsMatch(Me.txtYouTube.Text, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.txtYouTube.Text) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + ElseIf StringUtils.isValidURL(Me.txtYouTube.Text) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = Me.txtYouTube.Text, .bType = CloseDialog}) + Else + If Regex.IsMatch(Me.lbTrailers.SelectedItem.ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.lbTrailers.SelectedItem.ToString) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + Else + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = lbTrailers.SelectedItem.ToString, .bType = CloseDialog}) + End If + End If + + If didCancel Then + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + End Sub + + Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click + Try + With ofdTrailer + .InitialDirectory = Directory.GetParent(Master.currMovie.Filename).FullName + .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.ValidExts.ToArray(), ";*")) + .FilterIndex = 0 + End With + + If ofdTrailer.ShowDialog() = DialogResult.OK Then + txtManual.Text = ofdTrailer.FileName + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub btnGetTrailers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTrailers.Click + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.pnlStatus.Visible = True + + Me.bwCompileList = New System.ComponentModel.BackgroundWorker + Me.bwCompileList.WorkerSupportsCancellation = True + Me.bwCompileList.RunWorkerAsync() + End Sub + + Private Sub btnPlayTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayTrailer.Click + Try + Me.BeginDownload(False) + Catch + MsgBox(Master.eLang.GetString(58, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), MsgBoxStyle.Critical, Master.eLang.GetString(59, "Error Playing Trailer")) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Try + End Sub + + Private Sub btnPlayBrowser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayBrowser.Click + If Not String.IsNullOrEmpty(Me.txtYouTube.Text) Then + If Master.isWindows Then + Process.Start(Me.txtYouTube.Text) + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = Me.txtYouTube.Text + Explorer.Start() + End Using + End If + Else + If Master.isWindows Then + Process.Start(Me.lbTrailers.SelectedItem.ToString) + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = Me.lbTrailers.SelectedItem.ToString + Explorer.Start() + End Using + End If + End If + End Sub + + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click + + If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(62, "Moving specified file to trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + File.Move(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + Else + Dim didCancel As Boolean = False + + If StringUtils.isValidURL(Me.txtYouTube.Text) Then + tURL = Me.txtYouTube.Text + ElseIf Me.lbTrailers.SelectedItems.Count > 0 Then + tURL = lbTrailers.SelectedItem.ToString + Else + didCancel = True + End If + + If Not didCancel Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + + End Sub + + Private Sub bwCompileList_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwCompileList.DoWork + Try + tArray = cTrailer.GetTrailers(Me.imdbID, False) + + If Me.bwCompileList.CancellationPending Then + e.Cancel = True + End If + Catch + End Try + End Sub + + Private Sub bwCompileList_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwCompileList.RunWorkerCompleted + If Not e.Cancelled Then + If Me.tArray.Count > 0 Then + For Each tTrail As String In Me.tArray + Me.lbTrailers.Items.Add(tTrail) + Next + + Me.btnGetTrailers.Visible = False + Else + Me.btnGetTrailers.Enabled = False + End If + + End If + + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Sub + + Private Sub bwDownloadTrailer_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTrailer.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + + If Args.bType Then + Me.tURL = cTrailer.DownloadTrailer(Me.sPath, Args.Parameter) + Else + Me.prePath = cTrailer.DownloadTrailer(Path.Combine(Master.TempPath, Path.GetFileName(Me.sPath)), Args.Parameter) + End If + + Catch + End Try + + e.Result = Args.bType + + If Me.bwDownloadTrailer.CancellationPending Then + e.Cancel = True + End If + End Sub + + Private Sub bwDownloadTrailer_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwDownloadTrailer.ProgressChanged + pbStatus.Value = e.ProgressPercentage + End Sub + + Private Sub bwDownloadTrailer_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadTrailer.RunWorkerCompleted + If Not e.Cancelled Then + If Convert.ToBoolean(e.Result) Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + If Not String.IsNullOrEmpty(Me.prePath) Then System.Diagnostics.Process.Start(String.Concat("""", prePath, """")) + End If + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.cTrailer.Cancel() + + If Me.bwCompileList.IsBusy Then Me.bwCompileList.CancelAsync() + If Me.bwDownloadTrailer.IsBusy Then Me.bwDownloadTrailer.CancelAsync() + + While Me.bwCompileList.IsBusy OrElse Me.bwDownloadTrailer.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + cTrailer.IMDBURL = IMDBURL + AddHandler cTrailer.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + + Private Sub dlgTrailer_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub DownloadProgressUpdated(ByVal iProgress As Integer) + bwDownloadTrailer.ReportProgress(iProgress) + End Sub + + Private Sub lbTrailers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbTrailers.SelectedIndexChanged + Me.SetEnabled(True) + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.BeginDownload(True) + End Sub + + Private Sub SetEnabled(ByVal DeletePre As Boolean) + If DeletePre AndAlso Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + File.Delete(Me.prePath) + Me.prePath = String.Empty + End If + + If StringUtils.isValidURL(Me.txtYouTube.Text) OrElse Me.lbTrailers.SelectedItems.Count > 0 OrElse Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Enabled = True + Me.btnSetNfo.Enabled = True + Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.btnPlayBrowser.Enabled = False + Else + Me.btnPlayBrowser.Enabled = True + End If + If Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") + Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") + Else + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + Else + Me.OK_Button.Enabled = False + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(64, "Select Trailer") + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.GroupBox1.Text = Master.eLang.GetString(65, "Select Trailer to Download") + Me.GroupBox2.Text = Master.eLang.GetString(66, "Manual Trailer Entry") + Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") + Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") + Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnPlayBrowser.Text = Master.eLang.GetString(114, "Open In Browser") + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") + End Sub + + Private Sub txtManual_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtManual.TextChanged + Me.SetEnabled(True) + End Sub + + Private Sub txtYouTube_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtYouTube.TextChanged + Me.SetEnabled(True) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim bType As Boolean + Dim Parameter As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.OFDB.Data/Scraper/dlgTrailerFormat.Designer.vb new file mode 100644 index 0000000..8d135fa --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/dlgTrailerFormat.Designer.vb @@ -0,0 +1,155 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailerFormat + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(72, 187) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(145, 187) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(4, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(170, 121) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(10, 8) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(180, 151) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(12, 75) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(12, 12) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(200, 169) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 217) + Me.Controls.Add(Me.pnlStatus) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lstFormats As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.OFDB.Data/Scraper/dlgTrailerFormat.resx b/Addons/scraper.OFDB.Data/Scraper/dlgTrailerFormat.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/dlgTrailerFormat.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/Scraper/dlgTrailerFormat.vb b/Addons/scraper.OFDB.Data/Scraper/dlgTrailerFormat.vb new file mode 100644 index 0000000..8f0ad6e --- /dev/null +++ b/Addons/scraper.OFDB.Data/Scraper/dlgTrailerFormat.vb @@ -0,0 +1,114 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTrailerFormat + +#Region "Fields" + + Private WithEvents YouTube As YouTube.Scraper + Private _selectedformaturl As String + Private _yturl As String + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal YTURL As String) As String + Me._yturl = YTURL + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return _selectedformaturl + Else + Return String.Empty + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailerFormat_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + Me.SetUp() + + lstFormats.DataSource = Nothing + + YouTube = New YouTube.Scraper + YouTube.GetVideoLinksAsync(Me._yturl) + + Catch ex As Exception + MsgBox(Master.eLang.GetString(71, "The video format links could not be retrieved."), MsgBoxStyle.Critical, Master.eLang.GetString(72, "Error Retrieving Video Format Links")) + End Try + End Sub + + Private Sub lstFormats_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFormats.SelectedIndexChanged + Try + Me._selectedformaturl = DirectCast(lstFormats.SelectedItem, YouTube.VideoLinkItem).URL + + If Me.lstFormats.SelectedItems.Count > 0 Then + Me.OK_Button.Enabled = True + Else + Me.OK_Button.Enabled = False + End If + Catch + End Try + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(73, "Select Format") + Me.lblStatus.Text = Master.eLang.GetString(74, "Getting available formats...") + Me.GroupBox1.Text = Master.eLang.GetString(75, "Available Formats") + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub YouTube_VideoLinksRetrieved(ByVal bSuccess As Boolean) Handles YouTube.VideoLinksRetrieved + Try + + If bSuccess Then + lstFormats.DataSource = YouTube.VideoLinks.Values.ToList + lstFormats.DisplayMember = "Description" + lstFormats.ValueMember = "URL" + + If YouTube.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + Me.lstFormats.SelectedIndex = YouTube.VideoLinks.IndexOfKey(Master.eSettings.PreferredTrailerQuality) + ElseIf Me.lstFormats.Items.Count = 1 Then + Me.lstFormats.SelectedIndex = 0 + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + Me.pnlStatus.Visible = False + Me.lstFormats.Enabled = True + End Try + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/TVScraper/clsScrapeTVDB.vb b/Addons/scraper.OFDB.Data/TVScraper/clsScrapeTVDB.vb new file mode 100644 index 0000000..b0f8531 --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/clsScrapeTVDB.vb @@ -0,0 +1,1911 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Data +Imports System.IO +Imports System.Text + +Imports ICSharpCode.SharpZipLib.Zip +Imports EmberAPI + +Public Class Scraper + +#Region "Fields" + + Public Const APIKey As String = "7B090234F418D074" + + Public Shared WithEvents sObject As New ScraperObject + Public Shared tEpisodes As New List(Of MediaContainers.EpisodeDetails) + Public Shared tmpTVDBShow As New TVDBShow + Public Shared TVDBImages As New TVImages + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + AddHandler sObject.ScraperEvent, AddressOf InnerEvent + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + +#End Region 'Events + +#Region "Methods" + + Public Sub CancelAsync() + sObject.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String) As MediaContainers.EpisodeDetails + Return sObject.ChangeEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .TVDBID = TVDBID, .SelectedLang = Lang, .iSeason = -999}) + End Function + + Public Function GetLangs(ByVal sMirror As String) As List(Of Containers.TVLanguage) + Dim tvdbLangs As New List(Of Containers.TVLanguage) + Dim cLang As Containers.TVLanguage + Dim xmlTVDB As XDocument + Dim sHTTP As New HTTP + + Dim apiXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/languages.xml", sMirror, APIKey)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(apiXML) Then + Try + xmlTVDB = XDocument.Parse(apiXML) + Catch + Return tvdbLangs + End Try + + Dim xLangs = From xLanguages In xmlTVDB.Descendants("Language") + + For Each xL As XElement In xLangs + cLang = New Containers.TVLanguage + cLang.LongLang = xL.Element("name").Value + cLang.ShortLang = xL.Element("abbreviation").Value + tvdbLangs.Add(cLang) + Next + End If + Return tvdbLangs + End Function + + Public Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As MediaContainers.EpisodeDetails + Return sObject.GetSingleEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .TVDBID = TVDBID, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Function + + Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images) As Images + Return sObject.GetSingleImage(New Structures.ScrapeInfo With {.ShowTitle = Title, .ShowID = ShowID, .TVDBID = TVDBID, .ImageType = Type, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .CurrentImage = CurrentImage}) + End Function + + Public Sub InnerEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent ScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Function IsBusy() As Boolean + Return sObject.IsBusy + End Function + + Public Sub SaveImages() + sObject.SaveImages() + End Sub + + Public Sub ScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) + sObject.ScrapeEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .iEpisode = iEpisode, .iSeason = iSeason, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Sub + + Public Sub ScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) + sObject.ScrapeSeason(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .iSeason = iSeason, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Sub + + Public Sub SingleScrape(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) + sObject.SingleScrape(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options, .ScrapeType = ScrapeType, .WithCurrent = WithCurrent, .iSeason = -999}) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + <Serializable()> _ + Public Structure TVImages + +#Region "Fields" + + Dim AllSeasonPoster As TVDBShowPoster + Dim SeasonImageList As List(Of TVDBSeasonImage) + Dim ShowFanart As TVDBFanart + Dim ShowPoster As TVDBShowPoster + +#End Region 'Fields + +#Region "Methods" + + Public Function Clone() As TVImages + Dim newTVI As New TVImages + Try + Using ms As New IO.MemoryStream() + Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter() + bf.Serialize(ms, Me) + ms.Position = 0 + newTVI = DirectCast(bf.Deserialize(ms), TVImages) + ms.Close() + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return newTVI + End Function + +#End Region 'Methods + + End Structure + + Public Class ScraperObject + +#Region "Fields" + + Friend WithEvents bwTVDB As New System.ComponentModel.BackgroundWorker + + Private aXML As String = String.Empty + Private bXML As String = String.Empty + Private sXML As String = String.Empty + +#End Region 'Fields + +#Region "Events" + + Public Event ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + +#End Region 'Events + +#Region "Methods" + + Public Shared Sub LoadAllEpisodes(ByVal _ID As Integer, ByVal OnlySeason As Integer) + Try + + tmpTVDBShow = New TVDBShow + + tmpTVDBShow.Show = Master.DB.LoadTVFullShowFromDB(_ID) + tmpTVDBShow.AllSeason = Master.DB.LoadTVAllSeasonFromDB(_ID) + + Using SQLCount As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + If OnlySeason = 999 Then + SQLCount.CommandText = String.Concat("SELECT COUNT(ID) AS eCount FROM TVEps WHERE TVShowID = ", _ID, " AND Missing = 0;") + Else + SQLCount.CommandText = String.Concat("SELECT COUNT(ID) AS eCount FROM TVEps WHERE TVShowID = ", _ID, " AND Season = ", OnlySeason, " AND Missing = 0;") + End If + Using SQLRCount As SQLite.SQLiteDataReader = SQLCount.ExecuteReader + If Convert.ToInt32(SQLRCount("eCount")) > 0 Then + Using SQLCommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + If OnlySeason = 999 Then + SQLCommand.CommandText = String.Concat("SELECT ID, Lock FROM TVEps WHERE TVShowID = ", _ID, " AND Missing = 0;") + Else + SQLCommand.CommandText = String.Concat("SELECT ID, Lock FROM TVEps WHERE TVShowID = ", _ID, " AND Season = ", OnlySeason, " AND Missing = 0;") + End If + Using SQLReader As SQLite.SQLiteDataReader = SQLCommand.ExecuteReader + While SQLReader.Read + tmpTVDBShow.Episodes.Add(Master.DB.LoadTVEpFromDB(Convert.ToInt64(SQLReader("ID")), True)) + End While + End Using + End Using + End If + End Using + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub CancelAsync() + If bwTVDB.IsBusy Then bwTVDB.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal sInfo As Structures.ScrapeInfo) As MediaContainers.EpisodeDetails + Try + Dim tEpisodes As List(Of MediaContainers.EpisodeDetails) = Me.GetListOfKnownEpisodes(sInfo) + If tEpisodes.Count > 0 Then + Using dChangeEp As New dlgTVChangeEp + Return dChangeEp.ShowDialog(tEpisodes) + End Using + Else + MsgBox(Master.eLang.GetString(79, "There are no known episodes for this show. Scrape the show, season, or episode and try again."), MsgBoxStyle.OkOnly, Master.eLang.GetString(80, "No Known Episodes")) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return Nothing + End Function + + Public Sub DownloadSeries(ByVal sInfo As Structures.ScrapeInfo, Optional ByVal ImagesOnly As Boolean = False) + Try + Dim fPath As String = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, sInfo.SelectedLang, ".zip")) + Dim fExists As Boolean = File.Exists(fPath) + Dim doDownload As Boolean = False + + Select Case Master.eSettings.TVUpdateTime + Case Enums.TVUpdateTime.Always + doDownload = True + Case Enums.TVUpdateTime.Never + doDownload = False + Case Enums.TVUpdateTime.Week + If fExists AndAlso File.GetCreationTime(fPath).AddDays(7) < Now Then doDownload = True + Case Enums.TVUpdateTime.BiWeekly + If fExists AndAlso File.GetCreationTime(fPath).AddDays(14) < Now Then doDownload = True + Case Enums.TVUpdateTime.Month + If fExists AndAlso File.GetCreationTime(fPath).AddMonths(1) < Now Then doDownload = True + End Select + + If doDownload OrElse Not fExists Then + Dim sHTTP As New HTTP + Dim xZip As Byte() = sHTTP.DownloadZip(String.Format("http://{0}/api/{1}/series/{2}/all/{3}.zip", Master.eSettings.TVDBMirror, APIKey, sInfo.TVDBID, sInfo.SelectedLang)) + sHTTP = Nothing + + If Not IsNothing(xZip) AndAlso xZip.Length > 0 Then + 'save it to the temp dir + Directory.CreateDirectory(Directory.GetParent(fPath).FullName) + Using fStream As FileStream = New FileStream(fPath, FileMode.Create, FileAccess.Write) + fStream.Write(xZip, 0, xZip.Length) + End Using + + Me.ProcessTVDBZip(xZip, sInfo) + Me.ShowFromXML(sInfo, ImagesOnly) + End If + Else + Using fStream As FileStream = New FileStream(fPath, FileMode.Open, FileAccess.Read) + Dim fZip As Byte() = Functions.ReadStreamToEnd(fStream) + + Me.ProcessTVDBZip(fZip, sInfo) + Me.ShowFromXML(sInfo, ImagesOnly) + End Using + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub DownloadSeriesAsync(ByVal sInfo As Structures.ScrapeInfo) + Try + If Not bwTVDB.IsBusy Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.StartingDownload, 0, Nothing) + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 1, .Parameter = sInfo}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetListOfKnownEpisodes(ByVal sInfo As Structures.ScrapeInfo) As List(Of MediaContainers.EpisodeDetails) + Dim Actors As New List(Of MediaContainers.Person) + Dim tEpisodes As New List(Of MediaContainers.EpisodeDetails) + Dim tEpisode As New MediaContainers.EpisodeDetails + Dim fPath As String = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, sInfo.SelectedLang, ".zip")) + Dim tSeas As Integer = -1 + Dim tOrdering As Enums.Ordering = Enums.Ordering.Standard + + Try + If File.Exists(fPath) Then + Using fStream As FileStream = New FileStream(fPath, FileMode.Open, FileAccess.Read) + Dim fZip As Byte() = Functions.ReadStreamToEnd(fStream) + Me.ProcessTVDBZip(fZip, sInfo) + + 'get the actors first + Try + If Not String.IsNullOrEmpty(aXML) Then + Dim xdActors As XDocument = XDocument.Parse(aXML) + For Each Actor As XElement In xdActors.Descendants("Actor") + If Not IsNothing(Actor.Element("Name")) AndAlso Not String.IsNullOrEmpty(Actor.Element("Name").Value) Then + Actors.Add(New MediaContainers.Person With {.Name = Actor.Element("Name").Value, .Role = If(IsNothing(Actor.Element("Role")), String.Empty, Actor.Element("Role").Value), .Thumb = If(IsNothing(Actor.Element("Image")) OrElse String.IsNullOrEmpty(Actor.Element("Image").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Actor.Element("Image").Value))}) + End If + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + If Not String.IsNullOrEmpty(sXML) Then + Dim xdEps As XDocument = XDocument.Parse(sXML) + + For Each Episode As XElement In xdEps.Descendants("Episode") + If Not IsNothing(Episode.Element("EpisodeName").Value) AndAlso Not String.IsNullOrEmpty(Episode.Element("EpisodeName").Value) Then + tEpisode = New MediaContainers.EpisodeDetails + + tOrdering = Enums.Ordering.Standard + + If sInfo.Ordering = Enums.Ordering.DVD Then + If Not IsNothing(Episode.Element("SeasonNumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("SeasonNumber").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_season").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_episodenumber").Value.ToString) Then + tSeas = Convert.ToInt32(Episode.Element("SeasonNumber").Value) + If sInfo.iSeason >= 0 AndAlso Not tSeas = sInfo.iSeason Then Continue For + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) = tSeas AndAlso (IsNothing(e.Element("DVD_season")) OrElse String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) OrElse IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + ElseIf Not IsNothing(Episode.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_season").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_episodenumber").Value.ToString) Then + tSeas = Convert.ToInt32(Episode.Element("DVD_season").Value) + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("DVD_season").Value) = tSeas AndAlso (IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + End If + ElseIf sInfo.Ordering = Enums.Ordering.Absolute Then + If Not IsNothing(Episode.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(Episode.Element("absolute_number").Value.ToString) Then + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) > 0 AndAlso (IsNothing(e.Element("absolute_number")) OrElse String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.Absolute + End If + End If + Else + If sInfo.iSeason >= 0 AndAlso Not Convert.ToInt32(Episode.Element("SeasonNumber").Value) = sInfo.iSeason Then Continue For + End If + + With tEpisode + .Title = Episode.Element("EpisodeName").Value + If tOrdering = Enums.Ordering.DVD Then + .Season = Convert.ToInt32(Episode.Element("DVD_season").Value) + .Episode = Convert.ToInt32(CLng(Episode.Element("DVD_episodenumber").Value)) + ElseIf tOrdering = Enums.Ordering.Absolute Then + .Season = 1 + .Episode = Convert.ToInt32(Episode.Element("absolute_number").Value) + Else + .Season = If(IsNothing(Episode.Element("SeasonNumber")) OrElse String.IsNullOrEmpty(Episode.Element("SeasonNumber").Value), 0, Convert.ToInt32(Episode.Element("SeasonNumber").Value)) + .Episode = If(IsNothing(Episode.Element("EpisodeNumber")) OrElse String.IsNullOrEmpty(Episode.Element("EpisodeNumber").Value), 0, Convert.ToInt32(Episode.Element("EpisodeNumber").Value)) + End If + .Aired = If(IsNothing(Episode.Element("FirstAired")), String.Empty, Episode.Element("FirstAired").Value) + .Rating = If(IsNothing(Episode.Element("Rating")), String.Empty, Episode.Element("Rating").Value) + .Plot = If(IsNothing(Episode.Element("Overview")), String.Empty, Episode.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + .Director = If(IsNothing(Episode.Element("Director")), String.Empty, Strings.Join(Episode.Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + .Credits = CreditsString(If(IsNothing(Episode.Element("GuestStars")), String.Empty, Episode.Element("GuestStars").Value), If(IsNothing(Episode.Element("Writer")), String.Empty, Episode.Element("Writer").Value)) + .Actors = Actors + .PosterURL = If(IsNothing(Episode.Element("filename")), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Episode.Element("filename").Value)) + .LocalFile = If(IsNothing(Episode.Element("filename")), String.Empty, Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, "episodeposters", Path.DirectorySeparatorChar, Episode.Element("filename").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar)))) + End With + + tEpisodes.Add(tEpisode) + End If + Next + + End If + End Using + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return tEpisodes + End Function + + Public Sub GetSearchResultsAsync(ByVal sInfo As Structures.ScrapeInfo) + Try + If Not bwTVDB.IsBusy Then + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 0, .Parameter = sInfo}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetSingleEpisode(ByVal sInfo As Structures.ScrapeInfo) As MediaContainers.EpisodeDetails + Dim tEp As New MediaContainers.EpisodeDetails + Try + + tEp = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Season = sInfo.iSeason AndAlso e.Episode = sInfo.iEpisode) + + If Not IsNothing(tEp) Then + Return tEp + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return New MediaContainers.EpisodeDetails + End Function + + Public Function GetSingleImage(ByVal sInfo As Structures.ScrapeInfo) As Images + tmpTVDBShow = New TVDBShow + + If sInfo.ImageType = Enums.TVImageType.EpisodePoster Then + + If String.IsNullOrEmpty(sInfo.TVDBID) Then + Using dTVDBSearch As New dlgTVDBSearchResults + sInfo = dTVDBSearch.ShowDialog(sInfo, True) + If Not String.IsNullOrEmpty(sInfo.TVDBID) Then + Master.currShow.TVShow.ID = sInfo.TVDBID + + Using tImage As New Images + Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) + If Not IsNothing(tmpEp) Then + + If File.Exists(tmpEp.LocalFile) Then + tImage.FromFile(tmpEp.LocalFile) + Else + tImage.FromWeb(tmpEp.PosterURL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) + tImage.Save(tmpEp.LocalFile, , , False) + End If + End If + + If Not IsNothing(tImage.Image) Then + Using dPosterConfirm As New dlgTVEpisodePoster + If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Using + Else + MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) + Return Nothing + End If + Else + Return Nothing + End If + End Using + Else + Return Nothing + End If + End Using + Else + Using tImage As New Images + Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) + If Not IsNothing(tmpEp) Then + + If File.Exists(tmpEp.LocalFile) Then + tImage.FromFile(tmpEp.LocalFile) + Else + tImage.FromWeb(tmpEp.PosterURL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) + tImage.Save(tmpEp.LocalFile, , , False) + End If + End If + + If Not IsNothing(tImage.Image) Then + Using dPosterConfirm As New dlgTVEpisodePoster + If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Using + Else + MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) + Return Nothing + End If + Else + Return Nothing + End If + End Using + End If + Else + If String.IsNullOrEmpty(sInfo.TVDBID) Then + Using dTVDBSearch As New dlgTVDBSearchResults + sInfo = dTVDBSearch.ShowDialog(sInfo, True) + If Not String.IsNullOrEmpty(sInfo.TVDBID) Then + Master.currShow.TVShow.ID = sInfo.TVDBID + Me.DownloadSeries(sInfo, True) + Using dImageSelect As New dlgTVImageSelect + Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) + End Using + Else + Return Nothing + End If + End Using + Else + Me.DownloadSeries(sInfo, True) + Using dImageSelect As New dlgTVImageSelect + Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) + End Using + End If + End If + End Function + + Public Function IsBusy() As Boolean + Return bwTVDB.IsBusy + End Function + + Public Sub PassEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent ScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Sub ProcessTVDBZip(ByVal tvZip As Byte(), ByVal sInfo As Structures.ScrapeInfo) + sXML = String.Empty + bXML = String.Empty + aXML = String.Empty + + Try + Using zStream As ZipInputStream = New ZipInputStream(New MemoryStream(tvZip)) + Dim zEntry As ZipEntry = zStream.GetNextEntry + + While Not IsNothing(zEntry) + Dim zBuffer As Byte() = Functions.ReadStreamToEnd(zStream) + + Select Case True + Case zEntry.Name.Equals(String.Concat(sInfo.SelectedLang, ".xml")) + sXML = System.Text.Encoding.UTF8.GetString(zBuffer) + Case zEntry.Name.Equals("banners.xml") + bXML = System.Text.Encoding.UTF8.GetString(zBuffer) + Case zEntry.Name.Equals("actors.xml") + aXML = System.Text.Encoding.UTF8.GetString(zBuffer) + End Select + + zEntry = zStream.GetNextEntry + End While + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub SaveImages() + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SavingStarted, 0, Nothing) + Me.bwTVDB = New System.ComponentModel.BackgroundWorker + Me.bwTVDB.WorkerReportsProgress = True + Me.bwTVDB.WorkerSupportsCancellation = True + Me.bwTVDB.RunWorkerAsync(New Arguments With {.Type = 3}) + End Sub + + Public Sub ScrapeEpisode(ByVal sInfo As Structures.ScrapeInfo) + Try + tmpTVDBShow = New TVDBShow + tmpTVDBShow.Episodes.Add(Master.currShow) + + If String.IsNullOrEmpty(sInfo.TVDBID) Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + DownloadSeries(sInfo) + If tmpTVDBShow.Episodes(0).TVShow.ID.Length > 0 Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso Not File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso Not File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub ScrapeSeason(ByVal sInfo As Structures.ScrapeInfo) + RaiseEvent ScraperEvent(Enums.TVScraperEventType.LoadingEpisodes, 0, Nothing) + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 4, .Parameter = sInfo}) + End Sub + + Public Sub SingleScrape(ByVal sInfo As Structures.ScrapeInfo) + RaiseEvent ScraperEvent(Enums.TVScraperEventType.LoadingEpisodes, 0, Nothing) + bwTVDB.WorkerReportsProgress = False + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 2, .Parameter = sInfo}) + While bwTVDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub StartSingleScraper(ByVal sInfo As Structures.ScrapeInfo) + Try + If String.IsNullOrEmpty(sInfo.TVDBID) AndAlso sInfo.ScrapeType = Enums.ScrapeType.FullAsk Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + DownloadSeries(sInfo) + If tmpTVDBShow.Show.TVShow.ID.Length > 0 Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + If sInfo.ScrapeType = Enums.ScrapeType.FullAuto Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SaveAuto, 0, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + ElseIf sInfo.ScrapeType = Enums.ScrapeType.FullAsk Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + 'Ignore Show scrape if ScrapeAuto and show don't have ID + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwtvDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTVDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + Try + Select Case Args.Type + Case 0 'search + e.Result = New Results With {.Type = 0, .Result = SearchSeries(DirectCast(Args.Parameter, Structures.ScrapeInfo))} + Case 1 'show download + Me.DownloadSeries(DirectCast(Args.Parameter, Structures.ScrapeInfo)) + e.Result = New Results With {.Type = 1} + Case 2 'load episodes + LoadAllEpisodes(DirectCast(Args.Parameter, Structures.ScrapeInfo).ShowID, 999) + e.Result = New Results With {.Type = 2, .Result = Args.Parameter} + Case 3 'save + Me.SaveAllTVInfo() + e.Result = New Results With {.Type = 3} + Case 4 + Dim sInfo As Structures.ScrapeInfo = DirectCast(Args.Parameter, Structures.ScrapeInfo) + LoadAllEpisodes(sInfo.ShowID, sInfo.iSeason) + e.Result = New Results With {.Type = 2, .Result = Args.Parameter} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTVDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTVDB.ProgressChanged + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Progress, e.ProgressPercentage, e.UserState.ToString) + End Sub + + Private Sub bwTVDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTVDB.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.Type + Case 0 'search + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SearchResultsDownloaded, 0, DirectCast(Res.Result, List(Of TVSearchResults))) + Case 1 'show download + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ShowDownloaded, 0, Nothing) + Case 2 'load episodes + If Not e.Cancelled Then + StartSingleScraper(DirectCast(Res.Result, Structures.ScrapeInfo)) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ScraperDone, 0, Nothing) + End If + Case 3 'save + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ScraperDone, 0, Nothing) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CreditsString(ByVal sGStars As String, ByVal sWriters As String) As String + Dim cString As New List(Of String) + Dim gString As String = Master.eLang.GetString(82, "Guest Star") + Dim wString As String = Master.eLang.GetString(777, "Writer", True) + + If Not String.IsNullOrEmpty(sGStars) Then + For Each gStar In sGStars.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")) + If Not String.IsNullOrEmpty(gStar) Then cString.Add(String.Concat(gStar, String.Format(" ({0})", gString))) + Next + End If + + If Not String.IsNullOrEmpty(sWriters) Then + For Each Writer In sWriters.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")) + If Not String.IsNullOrEmpty(Writer) Then cString.Add(String.Concat(Writer, String.Format(" ({0})", wString))) + Next + End If + + Return Strings.Join(cString.ToArray, " / ") + End Function + + Private Sub SaveAllTVInfo() + Dim iEp As Integer = -1 + Dim iSea As Integer = -1 + Dim iProgress As Integer = 1 + + Dim tShow As New Structures.DBTV + Dim tEpisode As New MediaContainers.EpisodeDetails + + Me.bwTVDB.ReportProgress(tmpTVDBShow.Episodes.Count, "max") + + Using SQLTrans As SQLite.SQLiteTransaction = Master.DB.MediaDBConn.BeginTransaction() + If Master.eSettings.DisplayMissingEpisodes Then + 'clear old missing episode from db + Using SQLCommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + SQLCommand.CommandText = String.Concat("DELETE FROM TVEps WHERE Missing = 1 AND TVShowID = ", Master.currShow.ShowID, ";") + SQLCommand.ExecuteNonQuery() + End Using + End If + + Try + For Each Episode As Structures.DBTV In tmpTVDBShow.Episodes + + Try + If Me.bwTVDB.CancellationPending Then Return + + Episode.ShowID = Master.currShow.ShowID + + iEp = Episode.TVEp.Episode + iSea = Episode.TVEp.Season + + 'remove it from tepisodes since it's a real episode + If Master.eSettings.DisplayMissingEpisodes Then + tEpisode = tEpisodes.FirstOrDefault(Function(e) e.Episode = iEp AndAlso e.Season = iSea) + If Not IsNothing(tEpisode) Then tEpisodes.Remove(tEpisode) + tShow = Episode + End If + + If Me.bwTVDB.CancellationPending Then Return + + If Episode.TVEp.Season > -1 AndAlso Episode.TVEp.Episode > -1 AndAlso Not Episode.IsLockEp Then + If Not IsNothing(Episode.TVEp.Poster.Image) Then Episode.EpPosterPath = Episode.TVEp.Poster.SaveAsEpPoster(Episode, Episode.TVEp.PosterURL) + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.EpisodeFanartEnabled AndAlso Not IsNothing(Episode.TVEp.Fanart.Image) Then Episode.EpFanartPath = Episode.TVEp.Fanart.SaveAsEpFanart(Episode, ) + + If Me.bwTVDB.CancellationPending Then Return + + Dim cSea = From cSeason As TVDBSeasonImage In TVDBImages.SeasonImageList Where cSeason.Season = iSea Take 1 + If cSea.Count > 0 Then + If Not IsNothing(cSea(0).Poster.Image) Then Episode.SeasonPosterPath = cSea(0).Poster.SaveAsSeasonPoster(Episode) + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.SeasonFanartEnabled Then + If Not String.IsNullOrEmpty(cSea(0).Fanart.LocalFile) AndAlso File.Exists(cSea(0).Fanart.LocalFile) Then + cSea(0).Fanart.Image.FromFile(cSea(0).Fanart.LocalFile) + Episode.SeasonFanartPath = cSea(0).Fanart.Image.SaveAsSeasonFanart(Episode) + ElseIf Not String.IsNullOrEmpty(cSea(0).Fanart.URL) AndAlso Not String.IsNullOrEmpty(cSea(0).Fanart.LocalFile) Then + cSea(0).Fanart.Image.Clear() + cSea(0).Fanart.Image.FromWeb(cSea(0).Fanart.URL) + If Not IsNothing(cSea(0).Fanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(cSea(0).Fanart.LocalFile).FullName) + cSea(0).Fanart.Image.Save(cSea(0).Fanart.LocalFile, , , False) + Episode.SeasonFanartPath = cSea(0).Fanart.Image.SaveAsSeasonFanart(Episode) + End If + End If + End If + End If + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Episode) + + Master.DB.SaveTVEpToDB(Episode, False, True, True, True) + + If Me.bwTVDB.CancellationPending Then Return + End If + Me.bwTVDB.ReportProgress(iProgress, "progress") + + 'If AdvancedSettings.GetBooleanSetting("ScrapeActorsThumbs", False) Then + 'For Each act As MediaContainers.Person In Episode.TVEp.Actors + 'Dim img As New Images + 'img.FromWeb(act.Thumb) + 'img.SaveAsActorThumb(act, Directory.GetParent(Episode.Filename).FullName) + 'Next + 'End If + + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + + 'now save all missing episodes + If Master.eSettings.DisplayMissingEpisodes Then + tShow.Filename = String.Empty + tShow.EpFanartPath = String.Empty + tShow.EpPosterPath = String.Empty + tShow.EpNfoPath = String.Empty + tShow.SeasonFanartPath = String.Empty + tShow.SeasonPosterPath = String.Empty + tShow.ShowFanartPath = String.Empty + tShow.IsLockEp = False + tShow.IsMarkEp = False + tShow.EpID = -1 + If tEpisodes.Count > 0 Then + For Each Episode As MediaContainers.EpisodeDetails In tEpisodes + tShow.TVEp = Episode + Master.DB.SaveTVEpToDB(tShow, True, True, True) + Next + End If + End If + + If Me.bwTVDB.CancellationPending Then Return + + SQLTrans.Commit() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End Using + End Sub + + Private Sub SaveToCache(ByVal sID As String, ByVal sURL As String, ByVal sPath As String) + Dim sImage As New Images + + sImage.FromWeb(sURL) + + If Not IsNothing(sImage.Image) Then + sImage.Save(Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, sPath.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), , , True) + End If + sImage = Nothing + End Sub + + Private Function SearchSeries(ByVal sInfo As Structures.ScrapeInfo) As List(Of TVSearchResults) + Dim tvdbResults As New List(Of TVSearchResults) + Dim cResult As New TVSearchResults + Dim xmlTVDB As XDocument + Dim tmpXML As XDocument + Dim sHTTP As New HTTP + Dim sLang As String = String.Empty + Dim tmpID As String = String.Empty + + Try + Dim apiXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/GetSeries.php?seriesname={1}&language={2}", Master.eSettings.TVDBMirror, sInfo.ShowTitle, Master.eSettings.TVDBLanguage)) + + If Not String.IsNullOrEmpty(apiXML) Then + Try + xmlTVDB = XDocument.Parse(apiXML) + Catch + Return tvdbResults + End Try + + Dim xSer = From xSeries In xmlTVDB.Descendants("Series") Where xSeries.HasElements + + 'check each unique showid to see if we have an entry for the preferred languages. If not, try to force download it + For Each tID As String In xSer.GroupBy(Function(s) s.Element("seriesid").Value.ToString).Select(Function(group) group.Key) + tmpID = tID + If xSer.Where(Function(s) s.Element("seriesid").Value.ToString = tmpID AndAlso s.Element("language").Value.ToString = Master.eSettings.TVDBLanguage).Count = 0 Then + 'no preferred language in this series, force it + Dim forceXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/series/{2}/{3}.xml", Master.eSettings.TVDBMirror, APIKey, tmpID, Master.eSettings.TVDBLanguage)) + If Not String.IsNullOrEmpty(forceXML) Then + Try + tmpXML = XDocument.Parse(forceXML) + Catch + Continue For + End Try + + For Each tSer As XElement In tmpXML.Descendants("Series").Where(Function(s) s.HasElements) + sLang = String.Empty + cResult = New TVSearchResults + cResult.ID = Convert.ToInt32(tSer.Element("id").Value) + cResult.Name = If(Not IsNothing(tSer.Element("SeriesName")), tSer.Element("SeriesName").Value, String.Empty) + If Not IsNothing(tSer.Element("Language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = tSer.Element("Language").Value + cResult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(tSer.Element("Language")) Then + sLang = tSer.Element("Language").Value + cResult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + Else + 'no language info available... don't bother adding it + Continue For + End If + cResult.Aired = If(Not IsNothing(tSer.Element("FirstAired")), tSer.Element("FirstAired").Value, String.Empty) + cResult.Overview = If(Not IsNothing(tSer.Element("Overview")), tSer.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf), String.Empty) + cResult.Banner = If(Not IsNothing(tSer.Element("banner")), tSer.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(cResult.Name) AndAlso Not String.IsNullOrEmpty(sLang) AndAlso xSer.Where(Function(s) s.Element("seriesid").Value.ToString = cResult.ID.ToString AndAlso s.Element("language").Value.ToString = sLang).Count = 0 Then + cResult.Lev = StringUtils.ComputeLevenshtein(sInfo.ShowTitle, cResult.Name) + tvdbResults.Add(cResult) + End If + Next + End If + End If + Next + sHTTP = Nothing + + For Each xS As XElement In xSer + sLang = String.Empty + cResult = New TVSearchResults + cResult.ID = Convert.ToInt32(xS.Element("seriesid").Value) + cResult.Name = If(Not IsNothing(xS.Element("SeriesName")), xS.Element("SeriesName").Value, String.Empty) + If Not IsNothing(xS.Element("language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = xS.Element("language").Value + cResult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(xS.Element("language")) Then + sLang = xS.Element("language").Value + cResult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + Else + 'no language info available... don't bother adding it + Continue For + End If + cResult.Aired = If(Not IsNothing(xS.Element("FirstAired")), xS.Element("FirstAired").Value, String.Empty) + cResult.Overview = If(Not IsNothing(xS.Element("Overview")), xS.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf), String.Empty) + cResult.Banner = If(Not IsNothing(xS.Element("banner")), xS.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(cResult.Name) AndAlso Not String.IsNullOrEmpty(sLang) Then + cResult.Lev = StringUtils.ComputeLevenshtein(sInfo.ShowTitle, cResult.Name) + tvdbResults.Add(cResult) + End If + Next + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return tvdbResults + End Function + + Private Sub ShowFromXML(ByVal sInfo As Structures.ScrapeInfo, ByVal ImagesOnly As Boolean) + Dim Actors As New List(Of MediaContainers.Person) + Dim sID As String = String.Empty + Dim iEp As Integer = -1 + Dim iSeas As Integer = -1 + Dim sTitle As String = String.Empty + Dim byTitle As Boolean = False + Dim xE As XElement = Nothing + Dim tShow As Structures.DBTV = tmpTVDBShow.Show + Dim tOrdering As Enums.Ordering = Enums.Ordering.Standard + + If Not ImagesOnly Then + If Master.eSettings.DisplayMissingEpisodes Then tEpisodes = Me.GetListOfKnownEpisodes(sInfo) + + 'get the actors first + Try + If sInfo.Options.bShowActors OrElse sInfo.Options.bEpActors Then + If Not String.IsNullOrEmpty(aXML) Then + Dim xdActors As XDocument = XDocument.Parse(aXML) + For Each Actor As XElement In xdActors.Descendants("Actor") + If Not IsNothing(Actor.Element("Name")) AndAlso Not String.IsNullOrEmpty(Actor.Element("Name").Value) Then + Actors.Add(New MediaContainers.Person With {.Name = Actor.Element("Name").Value, .Role = Actor.Element("Role").Value, .Thumb = If(IsNothing(Actor.Element("Image")) OrElse String.IsNullOrEmpty(Actor.Element("Image").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Actor.Element("Image").Value))}) + End If + Next + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + 'now let's get the show info and all the episodes + Try + If Not String.IsNullOrEmpty(sXML) Then + Dim xdShow As XDocument = XDocument.Parse(sXML) + Dim xS = From xShow In xdShow.Descendants("Series") + If xS.Count > 0 Then + tShow.ShowLanguage = sInfo.SelectedLang + If Not IsNothing(tShow.TVShow) Then + With tShow.TVShow + sID = xS(0).Element("id").Value + .ID = sID + If sInfo.Options.bShowTitle AndAlso (String.IsNullOrEmpty(.Title) OrElse Not Master.eSettings.ShowLockTitle) Then .Title = If(IsNothing(xS(0).Element("SeriesName")), .Title, xS(0).Element("SeriesName").Value) + If sInfo.Options.bShowEpisodeGuide Then .EpisodeGuideURL = If(Not String.IsNullOrEmpty(Master.eSettings.ExternalTVDBAPIKey), String.Format("http://{0}/api/{1}/series/{2}/all/{3}.zip", Master.eSettings.TVDBMirror, Master.eSettings.ExternalTVDBAPIKey, sID, Master.eSettings.TVDBLanguage), String.Empty) + If sInfo.Options.bShowGenre AndAlso (String.IsNullOrEmpty(.Genre) OrElse Not Master.eSettings.ShowLockGenre) Then .Genre = If(IsNothing(xS(0).Element("Genre")), .Genre, Strings.Join(xS(0).Element("Genre").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bShowMPAA Then .MPAA = If(IsNothing(xS(0).Element("ContentRating")), .MPAA, xS(0).Element("ContentRating").Value) + If sInfo.Options.bShowPlot AndAlso (String.IsNullOrEmpty(.Plot) OrElse Not Master.eSettings.ShowLockPlot) Then .Plot = If(IsNothing(xS(0).Element("Overview")), .Plot, xS(0).Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + If sInfo.Options.bShowPremiered Then .Premiered = If(IsNothing(xS(0).Element("FirstAired")), .Premiered, xS(0).Element("FirstAired").Value) + If sInfo.Options.bShowRating AndAlso (String.IsNullOrEmpty(.Rating) OrElse Not Master.eSettings.ShowLockRating) Then .Rating = If(IsNothing(xS(0).Element("Rating")), .Rating, xS(0).Element("Rating").Value) + If sInfo.Options.bShowStudio AndAlso (String.IsNullOrEmpty(.Studio) OrElse Not Master.eSettings.ShowLockStudio) Then .Studio = If(IsNothing(xS(0).Element("Network")), .Studio, xS(0).Element("Network").Value) + If sInfo.Options.bShowActors Then .Actors = Actors + End With + End If + + 'set it back + tmpTVDBShow.Show = tShow + + For Each Episode As Structures.DBTV In tmpTVDBShow.Episodes + + Episode.ShowLanguage = sInfo.SelectedLang + + iEp = Episode.TVEp.Episode + iSeas = Episode.TVEp.Season + sTitle = Episode.TVEp.Title + byTitle = False + tOrdering = Enums.Ordering.Standard + + If Not IsNothing(tShow.TVShow) Then Episode.TVShow = tShow.TVShow + + If sInfo.Ordering = Enums.Ordering.DVD Then + 'first we need to check if dvd order is specified for every episode in the season + 'we'll use the regular season number as an indicator even though there are some cases + 'where this will not work (season 1 episode 1 = dvd_season 2 dvd_episode 1) but it + 'should work in most cases and is the best solution I could come up with + + If xdShow.Descendants("Episode").Where(Function(e) Not IsNothing(e.Element("SeasonNumber")) AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas AndAlso (IsNothing(e.Element("DVD_season")) OrElse String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) OrElse IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + ElseIf sInfo.Ordering = Enums.Ordering.Absolute Then + If xdShow.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) > 0 AndAlso (IsNothing(e.Element("absolute_number")) OrElse String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.Absolute + End If + End If + + If tOrdering = Enums.Ordering.DVD Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString) AndAlso Convert.ToInt32(CLng(e.Element("DVD_episodenumber").Value.ToString)) = iEp AndAlso Not IsNothing(e.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) AndAlso Convert.ToInt32(e.Element("DVD_season").Value) = iSeas) + ElseIf tOrdering = Enums.Ordering.Absolute Then + If iSeas = 1 Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString) AndAlso Convert.ToInt32(e.Element("absolute_number").Value.ToString) = iEp) + Else + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString) AndAlso Convert.ToInt32(e.Element("EpisodeNumber").Value.ToString) = iEp AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas) + End If + Else + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Convert.ToInt32(e.Element("EpisodeNumber").Value) = iEp AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas) + End If + + If IsNothing(xE) Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) StringUtils.ComputeLevenshtein(e.Element("EpisodeName").Value, sTitle) < 5) + byTitle = True + End If + + If Not IsNothing(xE) Then + With Episode.TVEp + If sInfo.Options.bEpTitle AndAlso (String.IsNullOrEmpty(.Title) OrElse Not Master.eSettings.EpLockTitle) AndAlso Not String.IsNullOrEmpty(xE.Element("EpisodeName").Value) Then .Title = xE.Element("EpisodeName").Value + If byTitle Then + If tOrdering = Enums.Ordering.DVD Then + If sInfo.Options.bEpSeason Then .Season = If(IsNothing(xE.Element("DVD_season")) OrElse String.IsNullOrEmpty(xE.Element("DVD_season").Value), 0, Convert.ToInt32(xE.Element("DVD_season").Value)) + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(xE.Element("DVD_episodenumber").Value), 0, Convert.ToInt32(xE.Element("DVD_episodenumber").Value)) + ElseIf tOrdering = Enums.Ordering.Absolute Then + If sInfo.Options.bEpSeason Then .Season = 1 + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("absolute_number")) OrElse String.IsNullOrEmpty(xE.Element("absolute_number").Value), 0, Convert.ToInt32(xE.Element("absolute_number").Value)) + Else + If sInfo.Options.bEpSeason Then .Season = If(IsNothing(xE.Element("SeasonNumber")) OrElse String.IsNullOrEmpty(xE.Element("SeasonNumber").Value), 0, Convert.ToInt32(xE.Element("SeasonNumber").Value)) + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("EpisodeNumber")) OrElse String.IsNullOrEmpty(xE.Element("EpisodeNumber").Value), 0, Convert.ToInt32(xE.Element("EpisodeNumber").Value)) + End If + End If + If sInfo.Options.bEpAired Then .Aired = If(IsNothing(xE.Element("FirstAired")), .Aired, xE.Element("FirstAired").Value) + If sInfo.Options.bEpRating AndAlso (String.IsNullOrEmpty(.Rating) OrElse Not Master.eSettings.EpLockRating) Then .Rating = If(IsNothing(xE.Element("Rating")), .Rating, xE.Element("Rating").Value) + If sInfo.Options.bEpPlot AndAlso (String.IsNullOrEmpty(.Plot) OrElse Not Master.eSettings.EpLockPlot) Then .Plot = If(IsNothing(xE.Element("Overview")), .Plot, xE.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + 'If sInfo.Options.bEpDirector Then .Director = If(IsNothing(xS(0).Element("Director")), .Director, Strings.Join(xS(0).Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bEpDirector Then .Director = If(IsNothing(xE.Element("Director")), .Director, Strings.Join(xE.Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bEpCredits Then .Credits = CreditsString(If(IsNothing(xE.Element("GuestStars")), String.Empty, xE.Element("GuestStars").Value), If(IsNothing(xE.Element("Writer")), String.Empty, xE.Element("Writer").Value)) + If sInfo.Options.bEpActors Then .Actors = Actors + .PosterURL = If(IsNothing(xE.Element("filename")) OrElse String.IsNullOrEmpty(xE.Element("filename").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, xE.Element("filename").Value)) + .LocalFile = If(IsNothing(xE.Element("filename")) OrElse String.IsNullOrEmpty(xE.Element("filename").Value), String.Empty, Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "episodeposters", Path.DirectorySeparatorChar, xE.Element("filename").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar)))) + End With + End If + Next + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Else + sID = sInfo.TVDBID + End If + 'and finally the images + Try + If ImagesOnly OrElse Not IsNothing(tShow.TVShow) Then + If Not String.IsNullOrEmpty(bXML) Then + Dim xdImage As XDocument = XDocument.Parse(bXML) + For Each tImage As XElement In xdImage.Descendants("Banner") + If (Not IsNothing(tImage.Element("BannerPath")) AndAlso Not String.IsNullOrEmpty(tImage.Element("BannerPath").Value)) AndAlso _ + (Not Master.eSettings.OnlyGetTVImagesForSelectedLanguage OrElse ((Not IsNothing(tImage.Element("Language")) AndAlso tImage.Element("Language").Value = Master.eSettings.TVDBLanguage) OrElse _ + ((IsNothing(tImage.Element("Language")) OrElse tImage.Element("Language").Value = "en") AndAlso Master.eSettings.AlwaysGetEnglishTVImages))) Then + Select Case tImage.Element("BannerType").Value + Case "fanart" + tmpTVDBShow.Fanart.Add(New TVDBFanart With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .ThumbnailURL = If(IsNothing(tImage.Element("ThumbnailPath")) OrElse String.IsNullOrEmpty(tImage.Element("ThumbnailPath").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("ThumbnailPath").Value)), _ + .Size = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), New Size With {.Width = 0, .Height = 0}, StringUtils.StringToSize(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "fanart", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .LocalThumb = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "fanart", Path.DirectorySeparatorChar, tImage.Element("ThumbnailPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "poster" + tmpTVDBShow.Posters.Add(New TVDBPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Size = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), New Size With {.Width = 0, .Height = 0}, StringUtils.StringToSize(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "posters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "season" + tmpTVDBShow.SeasonPosters.Add(New TVDBSeasonPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Season = If(IsNothing(tImage.Element("Season")) OrElse String.IsNullOrEmpty(tImage.Element("Season").Value), 0, Convert.ToInt32(tImage.Element("Season").Value)), _ + .Type = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), Enums.SeasonPosterType.None, StringToSeasonPosterType(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "seasonposters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "series" + tmpTVDBShow.ShowPosters.Add(New TVDBShowPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Type = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), Enums.ShowBannerType.None, StringToShowPosterType(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "seriesposters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + End Select + End If + Next + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function StringToSeasonPosterType(ByVal sType As String) As Enums.SeasonPosterType + Select Case sType.ToLower + Case "season" + Return Enums.SeasonPosterType.Poster + Case "seasonwide" + Return Enums.SeasonPosterType.Wide + Case Else + Return Enums.SeasonPosterType.None + End Select + End Function + + Private Function StringToShowPosterType(ByVal sType As String) As Enums.ShowBannerType + Select Case sType.ToLower + Case "blank" + Return Enums.ShowBannerType.Blank + Case "graphical" + Return Enums.ShowBannerType.Graphical + Case "text" + Return Enums.ShowBannerType.Text + Case Else + Return Enums.ShowBannerType.None + End Select + End Function + +#End Region 'Methods + +#Region "Other" + + Private Structure Arguments + + Dim Parameter As Object + Dim Type As Integer + + End Structure + + Private Structure Results + + Dim Result As Object + Dim Type As Integer '0 = search, 1 = show download, 2 = load eps, 3 = save + + End Structure + +#End Region 'Other + + End Class + + <Serializable()> _ + Public Class TVDBFanart + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _localthumb As String + Private _size As Size + Private _thumbnailurl As String + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property LocalThumb() As String + Get + Return Me._localthumb + End Get + Set(ByVal value As String) + Me._localthumb = value + End Set + End Property + + Public Property Size() As Size + Get + Return Me._size + End Get + Set(ByVal value As Size) + Me._size = value + End Set + End Property + + Public Property ThumbnailURL() As String + Get + Return Me._thumbnailurl + End Get + Set(ByVal value As String) + Me._thumbnailurl = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._thumbnailurl = String.Empty + Me._size = New Size + Me._localfile = String.Empty + Me._localthumb = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _size As Size + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Size() As Size + Get + Return Me._size + End Get + Set(ByVal value As Size) + Me._size = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._size = New Size + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + <Serializable()> _ + Public Class TVDBSeasonImage + +#Region "Fields" + + Private _fanart As TVDBFanart + Private _poster As Images + Private _season As Integer + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Fanart() As TVDBFanart + Get + Return Me._fanart + End Get + Set(ByVal value As TVDBFanart) + Me._fanart = value + End Set + End Property + + Public Property Poster() As Images + Get + Return Me._poster + End Get + Set(ByVal value As Images) + Me._poster = value + End Set + End Property + + Public Property Season() As Integer + Get + Return Me._season + End Get + Set(ByVal value As Integer) + Me._season = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._season = -1 + Me._poster = New Images + Me._fanart = New TVDBFanart + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBSeasonPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _season As Integer + Private _type As Enums.SeasonPosterType + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Season() As Integer + Get + Return Me._season + End Get + Set(ByVal value As Integer) + Me._season = value + End Set + End Property + + Public Property Type() As Enums.SeasonPosterType + Get + Return Me._type + End Get + Set(ByVal value As Enums.SeasonPosterType) + Me._type = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._season = 0 + Me._type = Enums.SeasonPosterType.None + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBShow + +#Region "Fields" + + Private _allseason As Structures.DBTV + Private _episodes As New List(Of Structures.DBTV) + Private _fanart As New List(Of TVDBFanart) + Private _posters As New List(Of TVDBPoster) + Private _seasonposters As New List(Of TVDBSeasonPoster) + Private _show As Structures.DBTV + Private _showposters As New List(Of TVDBShowPoster) + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property AllSeason() As Structures.DBTV + Get + Return Me._allseason + End Get + Set(ByVal value As Structures.DBTV) + Me._allseason = value + End Set + End Property + + Public Property Episodes() As List(Of Structures.DBTV) + Get + Return Me._episodes + End Get + Set(ByVal value As List(Of Structures.DBTV)) + Me._episodes = value + End Set + End Property + + Public Property Fanart() As List(Of TVDBFanart) + Get + Return Me._fanart + End Get + Set(ByVal value As List(Of TVDBFanart)) + Me._fanart = value + End Set + End Property + + Public Property Posters() As List(Of TVDBPoster) + Get + Return Me._posters + End Get + Set(ByVal value As List(Of TVDBPoster)) + Me._posters = value + End Set + End Property + + Public Property SeasonPosters() As List(Of TVDBSeasonPoster) + Get + Return Me._seasonposters + End Get + Set(ByVal value As List(Of TVDBSeasonPoster)) + Me._seasonposters = value + End Set + End Property + + Public Property Show() As Structures.DBTV + Get + Return Me._show + End Get + Set(ByVal value As Structures.DBTV) + Me._show = value + End Set + End Property + + Public Property ShowPosters() As List(Of TVDBShowPoster) + Get + Return Me._showposters + End Get + Set(ByVal value As List(Of TVDBShowPoster)) + Me._showposters = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._show = New Structures.DBTV + Me._allseason = New Structures.DBTV + Me._episodes = New List(Of Structures.DBTV) + Me._fanart = New List(Of TVDBFanart) + Me._showposters = New List(Of TVDBShowPoster) + Me._seasonposters = New List(Of TVDBSeasonPoster) + Me._posters = New List(Of TVDBPoster) + End Sub + +#End Region 'Methods + + End Class + + <Serializable()> _ + Public Class TVDBShowPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _type As Enums.ShowBannerType + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Type() As Enums.ShowBannerType + Get + Return Me._type + End Get + Set(ByVal value As Enums.ShowBannerType) + Me._type = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._type = Enums.ShowBannerType.None + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVSearchResults + +#Region "Fields" + + Private _aired As String + Private _banner As String + Private _id As Integer + Private _language As Containers.TVLanguage + Private _lev As Integer + Private _name As String + Private _overview As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Aired() As String + Get + Return Me._aired + End Get + Set(ByVal value As String) + Me._aired = value + End Set + End Property + + Public Property Banner() As String + Get + Return Me._banner + End Get + Set(ByVal value As String) + Me._banner = value + End Set + End Property + + Public Property ID() As Integer + Get + Return Me._id + End Get + Set(ByVal value As Integer) + Me._id = value + End Set + End Property + + Public Property Language() As Containers.TVLanguage + Get + Return Me._language + End Get + Set(ByVal value As Containers.TVLanguage) + Me._language = value + End Set + End Property + + Public Property Lev() As Integer + Get + Return Me._lev + End Get + Set(ByVal value As Integer) + Me._lev = value + End Set + End Property + + Public Property Name() As String + Get + Return Me._name + End Get + Set(ByVal value As String) + Me._name = value + End Set + End Property + + Public Property Overview() As String + Get + Return Me._overview + End Get + Set(ByVal value As String) + Me._overview = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._id = 0 + Me._name = String.Empty + Me._aired = String.Empty + Me._language = New Containers.TVLanguage + Me._overview = String.Empty + Me._banner = String.Empty + Me._lev = 0 + End Sub + +#End Region 'Methods + + End Class + +#End Region 'Nested Types + +End Class diff --git a/Addons/scraper.OFDB.Data/TVScraper/dlgTVChangeEp.Designer.vb b/Addons/scraper.OFDB.Data/TVScraper/dlgTVChangeEp.Designer.vb new file mode 100644 index 0000000..dd38c94 --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/dlgTVChangeEp.Designer.vb @@ -0,0 +1,139 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVChangeEp + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lvEpisodes = New System.Windows.Forms.ListView() + Me.colEpisode = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colTitle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.pbPreview = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.txtPlot = New System.Windows.Forms.TextBox() + CType(Me.pbPreview, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Location = New System.Drawing.Point(505, 286) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(575, 286) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lvEpisodes + ' + Me.lvEpisodes.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colEpisode, Me.colTitle}) + Me.lvEpisodes.FullRowSelect = True + Me.lvEpisodes.HideSelection = False + Me.lvEpisodes.Location = New System.Drawing.Point(3, 3) + Me.lvEpisodes.MultiSelect = False + Me.lvEpisodes.Name = "lvEpisodes" + Me.lvEpisodes.Size = New System.Drawing.Size(358, 278) + Me.lvEpisodes.TabIndex = 2 + Me.lvEpisodes.UseCompatibleStateImageBehavior = False + Me.lvEpisodes.View = System.Windows.Forms.View.Details + ' + 'colEpisode + ' + Me.colEpisode.Text = "Episode" + ' + 'colTitle + ' + Me.colTitle.Text = "Title" + Me.colTitle.Width = 276 + ' + 'pbPreview + ' + Me.pbPreview.Location = New System.Drawing.Point(417, 12) + Me.pbPreview.Name = "pbPreview" + Me.pbPreview.Size = New System.Drawing.Size(174, 117) + Me.pbPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPreview.TabIndex = 3 + Me.pbPreview.TabStop = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(367, 140) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(275, 21) + Me.lblTitle.TabIndex = 3 + ' + 'txtPlot + ' + Me.txtPlot.BackColor = System.Drawing.SystemColors.Control + Me.txtPlot.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.txtPlot.Location = New System.Drawing.Point(366, 169) + Me.txtPlot.Multiline = True + Me.txtPlot.Name = "txtPlot" + Me.txtPlot.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtPlot.Size = New System.Drawing.Size(276, 111) + Me.txtPlot.TabIndex = 4 + ' + 'dlgTVChangeEp + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(646, 315) + Me.ControlBox = False + Me.Controls.Add(Me.txtPlot) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPreview) + Me.Controls.Add(Me.lvEpisodes) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTVChangeEp" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Change Episode" + CType(Me.pbPreview, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lvEpisodes As System.Windows.Forms.ListView + Friend WithEvents colEpisode As System.Windows.Forms.ColumnHeader + Friend WithEvents colTitle As System.Windows.Forms.ColumnHeader + Friend WithEvents pbPreview As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents txtPlot As System.Windows.Forms.TextBox + +End Class diff --git a/Addons/scraper.OFDB.Data/TVScraper/dlgTVChangeEp.resx b/Addons/scraper.OFDB.Data/TVScraper/dlgTVChangeEp.resx new file mode 100644 index 0000000..717c885 --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/dlgTVChangeEp.resx @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="txtPlot.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>True</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/TVScraper/dlgTVChangeEp.vb b/Addons/scraper.OFDB.Data/TVScraper/dlgTVChangeEp.vb new file mode 100644 index 0000000..954f58a --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/dlgTVChangeEp.vb @@ -0,0 +1,120 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class dlgTVChangeEp + +#Region "Fields" + + Private _episode As MediaContainers.EpisodeDetails = Nothing + Private _tepisodes As New List(Of MediaContainers.EpisodeDetails) + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal tEpisodes As List(Of MediaContainers.EpisodeDetails)) As MediaContainers.EpisodeDetails + Me._tepisodes = tEpisodes + + If MyBase.ShowDialog = Windows.Forms.DialogResult.OK Then + Return _episode + Else + Return Nothing + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub ClearInfo() + Me.pbPreview.Image = Nothing + Me.lblTitle.Text = String.Empty + Me.txtPlot.Text = String.Empty + End Sub + + Private Sub dlgTVChangeEp_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + + Dim lGroup As New ListViewGroup + Dim lItem As New ListViewItem + Dim tSeason As Integer = Nothing + + For Each Season As Integer In _tepisodes.GroupBy(Function(s) s.Season).Select(Function(group) group.Key) + tSeason = Season + lGroup = New ListViewGroup + lGroup.Header = String.Format(Master.eLang.GetString(726, "Season {0}", True), tSeason) + lvEpisodes.Groups.Add(lGroup) + For Each Episode As MediaContainers.EpisodeDetails In _tepisodes.Where(Function(s) s.Season = tSeason).OrderBy(Function(s) s.Episode) + lItem = lvEpisodes.Items.Add(Episode.Episode.ToString) + lItem.Tag = Episode + lItem.SubItems.Add(Episode.Title) + lGroup.Items.Add(lItem) + Next + Next + End Sub + + Private Sub lvEpisodes_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvEpisodes.SelectedIndexChanged + Me.ClearInfo() + If lvEpisodes.SelectedItems.Count > 0 AndAlso Not IsNothing(lvEpisodes.SelectedItems(0).Tag) Then + Me._episode = DirectCast(lvEpisodes.SelectedItems(0).Tag, MediaContainers.EpisodeDetails) + + If Not IsNothing(Me._episode.Poster.Image) Then + Me.pbPreview.Image = Me._episode.Poster.Image + ElseIf Not String.IsNullOrEmpty(Me._episode.LocalFile) AndAlso File.Exists(Me._episode.LocalFile) Then + Me._episode.Poster.FromFile(Me._episode.LocalFile) + If Not IsNothing(Me._episode.Poster.Image) Then + Me.pbPreview.Image = Me._episode.Poster.Image + End If + ElseIf Not String.IsNullOrEmpty(Me._episode.PosterURL) Then + Me._episode.Poster.FromWeb(Me._episode.PosterURL) + If Not IsNothing(Me._episode.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Me._episode.LocalFile).FullName) + Me._episode.Poster.Save(Me._episode.LocalFile) + Me.pbPreview.Image = Me._episode.Poster.Image + End If + End If + + Me.lblTitle.Text = Me._episode.Title + Me.txtPlot.Text = Me._episode.Plot + End If + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(772, "Change Episode", True) + + Me.lvEpisodes.Columns(0).Text = Master.eLang.GetString(727, "Episode", True) + Me.lvEpisodes.Columns(1).Text = Master.eLang.GetString(21, "Title", True) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/TVScraper/dlgTVDBSearchResults.Designer.vb b/Addons/scraper.OFDB.Data/TVScraper/dlgTVDBSearchResults.Designer.vb new file mode 100644 index 0000000..b05c597 --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/dlgTVDBSearchResults.Designer.vb @@ -0,0 +1,368 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTVDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pbBanner = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblAiredHeader = New System.Windows.Forms.Label() + Me.lblAired = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lvSearchResults = New System.Windows.Forms.ListView() + Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colLang = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colLev = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colSLang = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.txtTVDBID = New System.Windows.Forms.TextBox() + CType(Me.pbBanner, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(485, 335) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(558, 335) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pbBanner + ' + Me.pbBanner.Location = New System.Drawing.Point(325, 69) + Me.pbBanner.Name = "pbBanner" + Me.pbBanner.Size = New System.Drawing.Size(300, 55) + Me.pbBanner.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbBanner.TabIndex = 3 + Me.pbBanner.TabStop = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(325, 132) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(300, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Visible = False + ' + 'lblAiredHeader + ' + Me.lblAiredHeader.AutoSize = True + Me.lblAiredHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblAiredHeader.Location = New System.Drawing.Point(325, 161) + Me.lblAiredHeader.Name = "lblAiredHeader" + Me.lblAiredHeader.Size = New System.Drawing.Size(38, 13) + Me.lblAiredHeader.TabIndex = 10 + Me.lblAiredHeader.Text = "Aired:" + Me.lblAiredHeader.Visible = False + ' + 'lblAired + ' + Me.lblAired.AutoSize = True + Me.lblAired.Location = New System.Drawing.Point(387, 161) + Me.lblAired.Name = "lblAired" + Me.lblAired.Size = New System.Drawing.Size(63, 13) + Me.lblAired.TabIndex = 12 + Me.lblAired.Text = "00/00/0000" + Me.lblAired.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(325, 189) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 13 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtOutline.Location = New System.Drawing.Point(325, 205) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(300, 127) + Me.txtOutline.TabIndex = 14 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lvSearchResults + ' + Me.lvSearchResults.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colName, Me.colLang, Me.colLev, Me.colID, Me.colSLang}) + Me.lvSearchResults.FullRowSelect = True + Me.lvSearchResults.HideSelection = False + Me.lvSearchResults.Location = New System.Drawing.Point(3, 96) + Me.lvSearchResults.MultiSelect = False + Me.lvSearchResults.Name = "lvSearchResults" + Me.lvSearchResults.Size = New System.Drawing.Size(316, 236) + Me.lvSearchResults.TabIndex = 5 + Me.lvSearchResults.UseCompatibleStateImageBehavior = False + Me.lvSearchResults.View = System.Windows.Forms.View.Details + ' + 'colName + ' + Me.colName.Text = "Title" + Me.colName.Width = 223 + ' + 'colLang + ' + Me.colLang.Text = "Language" + Me.colLang.Width = 89 + ' + 'colLev + ' + Me.colLev.Width = 0 + ' + 'colID + ' + Me.colID.Width = 0 + ' + 'colSLang + ' + Me.colSLang.Width = 0 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(380, 154) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 11 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(98, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching TVDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(643, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(287, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper TV show." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(216, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "TV Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(296, 67) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 4 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(3, 68) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(287, 22) + Me.txtSearch.TabIndex = 3 + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(244, 337) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 8 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Enabled = False + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(3, 341) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(127, 17) + Me.chkManual.TabIndex = 6 + Me.chkManual.Text = "Manual TVDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'txtTVDBID + ' + Me.txtTVDBID.Enabled = False + Me.txtTVDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTVDBID.Location = New System.Drawing.Point(138, 337) + Me.txtTVDBID.Name = "txtTVDBID" + Me.txtTVDBID.Size = New System.Drawing.Size(100, 22) + Me.txtTVDBID.TabIndex = 7 + ' + 'dlgTVDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(643, 378) + Me.ControlBox = False + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.txtTVDBID) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.lvSearchResults) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblAiredHeader) + Me.Controls.Add(Me.lblAired) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbBanner) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 406) + Me.Name = "dlgTVDBSearchResults" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "TV Search Results" + CType(Me.pbBanner, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pbBanner As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblAiredHeader As System.Windows.Forms.Label + Friend WithEvents lblAired As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lvSearchResults As System.Windows.Forms.ListView + Friend WithEvents colName As System.Windows.Forms.ColumnHeader + Friend WithEvents colLang As System.Windows.Forms.ColumnHeader + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents colLev As System.Windows.Forms.ColumnHeader + Friend WithEvents colID As System.Windows.Forms.ColumnHeader + Friend WithEvents colSLang As System.Windows.Forms.ColumnHeader + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents txtTVDBID As System.Windows.Forms.TextBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/TVScraper/dlgTVDBSearchResults.resx b/Addons/scraper.OFDB.Data/TVScraper/dlgTVDBSearchResults.resx new file mode 100644 index 0000000..7a332a8 --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/dlgTVDBSearchResults.resx @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + gg== +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA + CukB/XXO0wAAAepJREFUOE+lkktIG1EUhkeFaLQ+UGulgthNEUHRCrqyIHZTdSd0Iyq46cL3Sly50ppV + uywYi2uDiyKK1ioFk0lm7mSmSgymJuIqSkwwCTVpGs3fM0Pa+poWceBj4N5zvnvOuZcDwN2HeyWrB98Q + LFosuRJjz51O6cXmxsaj/1V3RSAx8fVXRQnIsgwVRZHjJHr7L8kfAROFPoWS3G43gicnCIVC8O7vQ11z + StKsnkQTrK6sGCSJBXddLpyfJ5FKpTTUz+f1gvbA22w1t0k0AW3WCYIAv9+PZPIn4vGYRiLxA+HwKRhj + EByOIV2BdWur3mG34/j4iJISiEYjRBSx2BkikQiYKOJQ4ft1BZ/X13NIEHalW1CrUEVACj6fF4yqe2W2 + TegK0m0MiBSoziEQCNAQg/B4PPi2I8Fk+QJucBnZI0vvrkuuXCPP8+PU63dC7RnbTvHi/cKnA2O3GYbu + OeT0ziOv58Na8djHgt+iGw+JHk+pzWrtpMF27cn2Ko7jMnLbTebCl1MoaH+D/I4ZFHbM7FZ0ThtvfYl6 + 913WMjFc2jyGkqZRlNC/om2yXBNk0RFEEfGEqCZqiXriGdGYpoHCHhdXtg6W1fQKD592mQwZ3N8KKCiL + yCaMRB7xgMi/zuXqMinnTi3otfYLj6yxrhdJtZ8AAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/TVScraper/dlgTVDBSearchResults.vb b/Addons/scraper.OFDB.Data/TVScraper/dlgTVDBSearchResults.vb new file mode 100644 index 0000000..cce33d3 --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/dlgTVDBSearchResults.vb @@ -0,0 +1,437 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTVDBSearchResults + +#Region "Fields" + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + + Private lvResultsSorter As New ListViewColumnSorter + Private sHTTP As New HTTP + Private sInfo As Structures.ScrapeInfo + Private _manualresult As Scraper.TVSearchResults = Nothing + Private _skipdownload As Boolean = False + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal _sInfo As Structures.ScrapeInfo) As Windows.Forms.DialogResult + Me.sInfo = _sInfo + Me.Text = String.Concat(Master.eLang.GetString(85, "TV Search Results"), " - ", sInfo.ShowTitle) + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal _sinfo As Structures.ScrapeInfo, ByVal SkipDownload As Boolean) As Structures.ScrapeInfo + Me.sInfo = _sinfo + Me._skipdownload = SkipDownload + + Me.Text = String.Concat(Master.eLang.GetString(85, "TV Search Results"), " - ", sInfo.ShowTitle) + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return Me.sInfo + Else + Return _sinfo + End If + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.lvSearchResults.Enabled = False + Me.sInfo.ShowTitle = Me.txtSearch.Text + Me.ClearInfo() + Me.chkManual.Enabled = False + Me.chkManual.Checked = False + Me.txtSearch.Text = String.Empty + Me.btnVerify.Enabled = False + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + Me.pnlLoading.Visible = True + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + If IsNumeric(Me.txtTVDBID.Text) AndAlso Me.txtTVDBID.Text.Length >= 5 Then + Dim tmpXML As XDocument = Nothing + Dim sLang As String = String.Empty + + Me.ClearInfo() + Me.pnlLoading.Visible = True + Application.DoEvents() + + Dim forceXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/series/{2}/{3}.xml", Master.eSettings.TVDBMirror, Scraper.APIKey, Me.txtTVDBID.Text, Master.eSettings.TVDBLanguage)) + + If Not String.IsNullOrEmpty(forceXML) Then + Try + tmpXML = XDocument.Parse(forceXML) + Catch + End Try + + If Not IsNothing(tmpXML) Then + Dim tSer As XElement = tmpXML.Descendants("Series").FirstOrDefault(Function(s) s.HasElements) + + If Not IsNothing(tSer) Then + Me._manualresult = New Scraper.TVSearchResults + Me._manualresult.ID = Convert.ToInt32(tSer.Element("id").Value) + Me._manualresult.Name = If(Not IsNothing(tSer.Element("SeriesName")), tSer.Element("SeriesName").Value, String.Empty) + If Not IsNothing(tSer.Element("Language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = tSer.Element("Language").Value + Me._manualresult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(tSer.Element("Language")) Then + sLang = tSer.Element("Language").Value + Me._manualresult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + End If + Me._manualresult.Aired = If(Not IsNothing(tSer.Element("FirstAired")), tSer.Element("FirstAired").Value, String.Empty) + Me._manualresult.Overview = If(Not IsNothing(tSer.Element("Overview")), tSer.Element("Overview").Value, String.Empty) + Me._manualresult.Banner = If(Not IsNothing(tSer.Element("banner")), tSer.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(Me._manualresult.Name) AndAlso Not String.IsNullOrEmpty(sLang) Then + If Not String.IsNullOrEmpty(Me._manualresult.Banner) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = Me._manualresult.Banner}) + End If + + Me.OK_Button.Tag = Me._manualresult.ID + Me.lblTitle.Text = Me._manualresult.Name + Me.txtOutline.Text = Me._manualresult.Overview + Me.lblAired.Text = Me._manualresult.Aired + Me.OK_Button.Enabled = True + Me.pnlLoading.Visible = False + Me.ControlsVisible(True) + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + + Else + MsgBox(Master.eLang.GetString(83, "The ID you entered is not a valid TVDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + End If + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + sHTTP.StartDownloadImage(String.Format("http://{0}/banners/_cache/{1}", Master.eSettings.TVDBMirror, Args.pURL)) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image()} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbBanner.Image = Res.Result + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtTVDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.lvSearchResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtTVDBID.Text = String.Empty + Else + If Me.lvSearchResults.SelectedItems.Count > 0 Then Me.lvSearchResults.SelectedItems(0).Selected = False + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblAired.Text = String.Empty + Me.pbBanner.Image = Nothing + Scraper.sObject.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.pbBanner.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblAiredHeader.Visible = areVisible + Me.lblAired.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + End Sub + + Private Sub dlgTVDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + AddHandler ModulesManager.Instance.TVScraperEvent, AddressOf TVScraperEvent + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + + Me.lvSearchResults.ListViewItemSorter = Me.lvResultsSorter + + Me.SetUp() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub lvSearchResults_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lvSearchResults.ColumnClick + ' Determine if the clicked column is already the column that is + ' being sorted. + Try + If (e.Column = Me.lvResultsSorter.SortColumn) Then + ' Reverse the current sort direction for this column. + If (Me.lvResultsSorter.Order = SortOrder.Ascending) Then + Me.lvResultsSorter.Order = SortOrder.Descending + Else + Me.lvResultsSorter.Order = SortOrder.Ascending + End If + Else + ' Set the column number that is to be sorted; default to ascending. + Me.lvResultsSorter.SortColumn = e.Column + Me.lvResultsSorter.Order = SortOrder.Ascending + End If + + ' Perform the sort with these new sort options. + Me.lvSearchResults.Sort() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub lvSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvSearchResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub lvSearchResults_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvSearchResults.SelectedIndexChanged + Me.ClearInfo() + If Me.lvSearchResults.SelectedItems.Count > 0 AndAlso Not Me.chkManual.Checked Then + Dim SelectedShow As Scraper.TVSearchResults = DirectCast(Me.lvSearchResults.SelectedItems(0).Tag, Scraper.TVSearchResults) + If Not String.IsNullOrEmpty(SelectedShow.Banner) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = SelectedShow.Banner}) + End If + + Me.OK_Button.Tag = SelectedShow.ID + Me.lblTitle.Text = SelectedShow.Name + Me.txtOutline.Text = SelectedShow.Overview + Me.lblAired.Text = SelectedShow.Aired + Me.OK_Button.Enabled = True + Me.ControlsVisible(True) + End If + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + If Me.lvSearchResults.SelectedItems.Count > 0 Then + Dim sResults As Scraper.TVSearchResults = DirectCast(Me.lvSearchResults.SelectedItems(0).Tag, Scraper.TVSearchResults) + Me.sInfo.TVDBID = sResults.ID.ToString + Me.sInfo.SelectedLang = sResults.Language.ShortLang + + If Not _skipdownload Then + Me.Label3.Text = Master.eLang.GetString(84, "Downloading show info...") + Me.pnlLoading.Visible = True + Scraper.sObject.DownloadSeriesAsync(sInfo) + Else + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + ElseIf Me.chkManual.Checked AndAlso Not IsNothing(Me._manualresult) Then + Me.sInfo.TVDBID = Me._manualresult.ID.ToString + Me.sInfo.SelectedLang = Me._manualresult.Language.ShortLang + + If Not _skipdownload Then + Me.Label3.Text = Master.eLang.GetString(84, "Downloading show info...") + Me.pnlLoading.Visible = True + Scraper.sObject.DownloadSeriesAsync(sInfo) + Else + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + End Sub + + Private Sub SetUp() + Me.Label1.Text = Master.eLang.GetString(85, "TV Search Results") + Me.Label2.Text = Master.eLang.GetString(86, "View details of each result to find the proper TV show.") + Me.lblAiredHeader.Text = Master.eLang.GetString(658, "Aired:", True) + Me.lblPlotHeader.Text = Master.eLang.GetString(783, "Plot Summary:", True) + + Me.lvSearchResults.Columns(0).Text = Master.eLang.GetString(21, "Title", True) + Me.lvSearchResults.Columns(1).Text = Master.eLang.GetString(610, "Language", True) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + Select Case eType + Case Enums.TVScraperEventType.SearchResultsDownloaded + Dim lItem As ListViewItem + Dim sResults As List(Of Scraper.TVSearchResults) = DirectCast(Parameter, List(Of Scraper.TVSearchResults)) + + Me.lvSearchResults.Items.Clear() + + If Not IsNothing(sResults) AndAlso sResults.Count > 0 Then + For Each sRes As Scraper.TVSearchResults In sResults.OrderBy(Function(r) r.Lev) + lItem = New ListViewItem(sRes.Name) + lItem.SubItems.Add(sRes.Language.LongLang) + lItem.SubItems.Add(sRes.Lev.ToString) + lItem.SubItems.Add(sRes.ID.ToString) + lItem.SubItems.Add(sRes.Language.ShortLang) + lItem.Tag = sRes + Me.lvSearchResults.Items.Add(lItem) + Next + End If + + Me.pnlLoading.Visible = False + + If Me.lvSearchResults.Items.Count > 0 Then + If sResults.Select(Function(s) s.ID).Distinct.Count = 1 Then + 'they're all for the same show... try to find one with the preferred language + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + Else + 'we've got a bunch of different shows... try to find a "best match" title with the preferred language + If sResults.Where(Function(s) s.Lev <= 5).Count > 0 Then + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If Convert.ToInt32(fItem.SubItems(2).Text) <= 5 AndAlso fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + + If Me.lvSearchResults.SelectedItems.Count = 0 Then + 'get the id for the best english match and see if we have one for the preferred language with same id + Dim tID As Integer = sResults.OrderBy(Function(s) s.Lev).FirstOrDefault(Function(s) s.Language.ShortLang = "en").ID + If tID > 0 Then + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If Convert.ToInt32(fItem.SubItems(3).Text) = tID AndAlso fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + End If + End If + End If + End If + + If Me.lvSearchResults.SelectedItems.Count = 0 Then + Me.lvSearchResults.Items(0).Selected = True + End If + Me.lvSearchResults.Select() + End If + + Me.chkManual.Enabled = True + If Not Me.chkManual.Checked Then Me.lvSearchResults.Enabled = True + + Case Enums.TVScraperEventType.ShowDownloaded + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Select + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Sub txtTVDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTVDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtTVDBID_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTVDBID.KeyPress + e.Handled = StringUtils.NumericOnly(e.KeyChar, True) + End Sub + + Private Sub txtTVDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTVDBID.TextChanged + If String.IsNullOrEmpty(Me.txtTVDBID.Text) Then + Me.btnVerify.Enabled = False + Me.OK_Button.Enabled = False + Else + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim pURL As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Image + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class diff --git a/Addons/scraper.OFDB.Data/TVScraper/dlgTVEpisodePoster.Designer.vb b/Addons/scraper.OFDB.Data/TVScraper/dlgTVEpisodePoster.Designer.vb new file mode 100644 index 0000000..a3ebbd8 --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/dlgTVEpisodePoster.Designer.vb @@ -0,0 +1,86 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTVEpisodePoster + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pbPoster = New System.Windows.Forms.PictureBox() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Location = New System.Drawing.Point(292, 287) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(362, 287) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pbPoster + ' + Me.pbPoster.BackColor = System.Drawing.Color.DimGray + Me.pbPoster.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pbPoster.Location = New System.Drawing.Point(6, 6) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(423, 276) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + ' + 'dlgTVEpisodePoster + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(435, 315) + Me.ControlBox = False + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTVEpisodePoster" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Confirm Episode Poster" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.OFDB.Data/TVScraper/dlgTVEpisodePoster.resx b/Addons/scraper.OFDB.Data/TVScraper/dlgTVEpisodePoster.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/dlgTVEpisodePoster.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/TVScraper/dlgTVEpisodePoster.vb b/Addons/scraper.OFDB.Data/TVScraper/dlgTVEpisodePoster.vb new file mode 100644 index 0000000..60ed929 --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/dlgTVEpisodePoster.vb @@ -0,0 +1,48 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTVEpisodePoster + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal Poster As Image) As System.Windows.Forms.DialogResult + Me.pbPoster.Image = Poster + Return MyBase.ShowDialog + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbPoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbPoster.Click + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(Me.pbPoster.Image) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/TVScraper/dlgTVImageSelect.Designer.vb b/Addons/scraper.OFDB.Data/TVScraper/dlgTVImageSelect.Designer.vb new file mode 100644 index 0000000..cf05d15 --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/dlgTVImageSelect.Designer.vb @@ -0,0 +1,213 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVImageSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTVImageSelect)) + Me.tvList = New System.Windows.Forms.TreeView() + Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components) + Me.pnlImages = New System.Windows.Forms.Panel() + Me.pbCurrent = New System.Windows.Forms.PictureBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnOK = New System.Windows.Forms.Button() + Me.btnCancel = New System.Windows.Forms.Button() + Me.pbDelete = New System.Windows.Forms.PictureBox() + Me.pbUndo = New System.Windows.Forms.PictureBox() + Me.lblCurrentImage = New System.Windows.Forms.Label() + CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlStatus.SuspendLayout() + CType(Me.pbDelete, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbUndo, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'tvList + ' + Me.tvList.Enabled = False + Me.tvList.ImageIndex = 0 + Me.tvList.ImageList = Me.ImageList1 + Me.tvList.Location = New System.Drawing.Point(3, 4) + Me.tvList.Name = "tvList" + Me.tvList.SelectedImageIndex = 0 + Me.tvList.Size = New System.Drawing.Size(214, 262) + Me.tvList.TabIndex = 2 + Me.tvList.Visible = False + ' + 'ImageList1 + ' + Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent + Me.ImageList1.Images.SetKeyName(0, "new_page.png") + Me.ImageList1.Images.SetKeyName(1, "image.png") + Me.ImageList1.Images.SetKeyName(2, "artwork.png") + Me.ImageList1.Images.SetKeyName(3, "star_full.png") + ' + 'pnlImages + ' + Me.pnlImages.AutoScroll = True + Me.pnlImages.BackColor = System.Drawing.SystemColors.Control + Me.pnlImages.Location = New System.Drawing.Point(222, 4) + Me.pnlImages.Name = "pnlImages" + Me.pnlImages.Size = New System.Drawing.Size(622, 421) + Me.pnlImages.TabIndex = 3 + ' + 'pbCurrent + ' + Me.pbCurrent.BackColor = System.Drawing.SystemColors.Control + Me.pbCurrent.Location = New System.Drawing.Point(3, 293) + Me.pbCurrent.Name = "pbCurrent" + Me.pbCurrent.Size = New System.Drawing.Size(214, 157) + Me.pbCurrent.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbCurrent.TabIndex = 2 + Me.pbCurrent.TabStop = False + Me.pbCurrent.Visible = False + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(264, 192) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(321, 75) + Me.pnlStatus.TabIndex = 5 + ' + 'lblStatus + ' + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(5, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(310, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Gathering Data..." + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(6, 52) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(309, 19) + Me.pbStatus.Step = 1 + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbStatus.TabIndex = 1 + ' + 'btnOK + ' + Me.btnOK.Enabled = False + Me.btnOK.Location = New System.Drawing.Point(708, 431) + Me.btnOK.Name = "btnOK" + Me.btnOK.Size = New System.Drawing.Size(65, 22) + Me.btnOK.TabIndex = 0 + Me.btnOK.Text = "OK" + Me.btnOK.UseVisualStyleBackColor = True + ' + 'btnCancel + ' + Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.btnCancel.Location = New System.Drawing.Point(779, 431) + Me.btnCancel.Name = "btnCancel" + Me.btnCancel.Size = New System.Drawing.Size(65, 22) + Me.btnCancel.TabIndex = 1 + Me.btnCancel.Text = "Cancel" + Me.btnCancel.UseVisualStyleBackColor = True + ' + 'pbDelete + ' + Me.pbDelete.Image = CType(resources.GetObject("pbDelete.Image"), System.Drawing.Image) + Me.pbDelete.Location = New System.Drawing.Point(3, 293) + Me.pbDelete.Name = "pbDelete" + Me.pbDelete.Size = New System.Drawing.Size(16, 16) + Me.pbDelete.TabIndex = 13 + Me.pbDelete.TabStop = False + Me.pbDelete.Visible = False + ' + 'pbUndo + ' + Me.pbUndo.Image = CType(resources.GetObject("pbUndo.Image"), System.Drawing.Image) + Me.pbUndo.Location = New System.Drawing.Point(201, 293) + Me.pbUndo.Name = "pbUndo" + Me.pbUndo.Size = New System.Drawing.Size(16, 16) + Me.pbUndo.TabIndex = 14 + Me.pbUndo.TabStop = False + Me.pbUndo.Visible = False + ' + 'lblCurrentImage + ' + Me.lblCurrentImage.AutoSize = True + Me.lblCurrentImage.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblCurrentImage.Location = New System.Drawing.Point(0, 274) + Me.lblCurrentImage.Name = "lblCurrentImage" + Me.lblCurrentImage.Size = New System.Drawing.Size(100, 17) + Me.lblCurrentImage.TabIndex = 4 + Me.lblCurrentImage.Text = "Current Image:" + Me.lblCurrentImage.Visible = False + ' + 'dlgTVImageSelect + ' + Me.AcceptButton = Me.btnOK + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.btnCancel + Me.ClientSize = New System.Drawing.Size(849, 481) + Me.ControlBox = False + Me.Controls.Add(Me.lblCurrentImage) + Me.Controls.Add(Me.pbUndo) + Me.Controls.Add(Me.pbDelete) + Me.Controls.Add(Me.btnCancel) + Me.Controls.Add(Me.btnOK) + Me.Controls.Add(Me.pnlStatus) + Me.Controls.Add(Me.pbCurrent) + Me.Controls.Add(Me.pnlImages) + Me.Controls.Add(Me.tvList) + Me.DoubleBuffered = True + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(855, 491) + Me.Name = "dlgTVImageSelect" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "TV Image Selection" + CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlStatus.ResumeLayout(False) + CType(Me.pbDelete, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbUndo, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents tvList As System.Windows.Forms.TreeView + Friend WithEvents pnlImages As System.Windows.Forms.Panel + Friend WithEvents pbCurrent As System.Windows.Forms.PictureBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnOK As System.Windows.Forms.Button + Friend WithEvents btnCancel As System.Windows.Forms.Button + Friend WithEvents pbDelete As System.Windows.Forms.PictureBox + Friend WithEvents pbUndo As System.Windows.Forms.PictureBox + Friend WithEvents ImageList1 As System.Windows.Forms.ImageList + Friend WithEvents lblCurrentImage As System.Windows.Forms.Label +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/TVScraper/dlgTVImageSelect.resx b/Addons/scraper.OFDB.Data/TVScraper/dlgTVImageSelect.resx new file mode 100644 index 0000000..db85c76 --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/dlgTVImageSelect.resx @@ -0,0 +1,210 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="ImageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <data name="ImageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64"> + <value> + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAO + CwAAAk1TRnQBSQFMAgEBBAEAATABAAEwAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8AFgAC/wMA + Bf8DAAH/BAAL/wMAA/8BAAb/AQAD/wMABf8C9AX/AgAC/wHzAfAJvAHzAv8CAAL/AfQB8QH0AfIB8QH0 + AfEB8wL/AwAD/wH0Af8E9AH/AvQC/wMAAf8B8QEHB7wB8gH/AwAB/wG8AfEC8gXzAvIB8AH0AwAD/wGT + AfQB8AGTAQABkwH0Av8DAAL/AfQBUwGZBP8B8AFTAfAC/wQAAfEB8AfxAfIEAAH0AfAB8QHyB/MB8gHx + AfQGAAEaAvMBmQH/AZMIAAH/AXUBMgF1AfQB/wGaAjIB9AYAAvEI8gQAAfQB8AEJCLsBCQHxAfQFAAH/ + AZMBdAGZAXQBmQF0AfQIAAEaAjICUwIyAXUB/wYACfIB8wQAAfQBuwG5AbMGigGyAbkBuwH0BAAB8wGZ + BnQBkwHxAf8GAAH0BjIBGgcAAvIG8wHyAfMEAAH0AbsCuQGsAYoCrAGKAawBswG5AbsB9AQAAvEB8AG7 + AbUBBwEaAfIB8wHwAf8GAAH2AVMFMgEbBwAK8wQAAf8BuwO5AbIDrAGzArkBuwH0BAAB8gG8Aa4BbAFL + AUwBUgGZAfMB8QH/BQAB8wFTBzIBGgYACvMEAAH/AbsDuQGyAqwBsgO5AbsB9AQAAfEB/wEHAW4BUgIy + AY4B9AHyAf8DAAH/ARoKMgF6Af8EAArzBAAB/wEJAroBswGsArIBrAGzAroBuwH0BAAB8gH2AbsCggNM + AvMB/wMAAfQBMgFTAlkBUwMyA1kBMgEaBAAG8wP0AfMEAAH/AQkDugSyA7oBCQH0BAABGwH0AbsB9AGO + AbABkwF1AfQB8wH/BAAE/wEaAjIBegX/BAAF8wH0AfIC7wHyBAAB9AHwA7sBugKyAboDuwEJAfQEAAEb + Af8B8wH/Ab0B8gH0AbcB8wH0Af8IAAH0AjgBGgkABfMB9AEHAewB8AUAAfQB8AoJAfAB9AQAAfMC9AEb + AZkBkwEaAvQBGwH/CAAB/wF6ATgB/wkABfMB9AEHAbwGAAH/AfMBGQnyAfMB/wQABP8BmQF0AfQD/woA + ARoBWQH/CQAB/wX0AfMIAAH0CvMB9AkAAfMBGg4AAf8B9EcAAUIBTQE+BwABPgMAASgDAAFAAwABIAMA + AQEBAAEBBgABARYAA/+BAAL/AZwBHQHgAQMBiAERAcABAwIAAcABAwGAAQEBwAEDAYABAQHAAUMBgAEB + AeABBwGAAQEB+AEfAeABBwHgAQcBgAEBAfABDwHwAQcB4AEHAYABAQHgAQMB8AEPAeABBwGAAQEB4AED + AfABDwHgAQcBgAEBAeABAwHgAQcB4AEHAYABAQHgAQMBgAEBAeABBwGAAQEB4AEDAYABAQHgAQcBgAEB + AeABAwHAAQEB4AEHAYABAQHgAQMB/AE/AeABDwGAAQEB4AEDAfwBPwHgAR8BgAEBAeABBwH+AT8B4AE/ + AcABAwH+AX8B/gF/CP8L +</value> + </data> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="pbDelete.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAGHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3NPsx9OAAAB60lEQVQ4T2P4//8/AyUYRfN9B2Pfu3YGzbgMvGdnkHnP3qgQWR5uwC1X + s4grBqr/L2kp/L9upbsF3ZAbdgaNl3WV/1/WUfp/w96w9//BmYwgNWADrnpYcZ3WUf5/XFEajE+py/2/ + aIkw5LKtQeNpbSWgnBQYn9JU/H/eTNsUbsBOTi7GA4rSPQeUZf6DMVDRITW5/2csdVecszesOaqt+H8/ + UAwuryS9/4CsBDfcAJhzdyrL9O5Qkv6/E4h3KEj93wN0yT4txf/bFSQhYhC5/Us0FVlgejBiYCPQkA1A + hWAMtHU90CAYf6OS9N752iqsWAMRWXCFkvTxFcCwQMPvNpkawG3G6YIFitINCxWk/gDxf3S8QFFqI3rs + oHhhhqJ040ygRhieAWSDMKqY9Jb/T7/D9YEZE1TlGSYqSDVMlJf6D8MTQGwF6c2TFKS7wGxkrCC1ZZKK + HAc8FnrVFLg65SX/o+H9tfqqTCBFXQpSvR1o8l2K0mYo0dihJJvYBLSlSU7yP5De9y3AG6wZhpvlpbrB + ckDcoigz/bGzFViegZkBjAWAFG+cpGh9trTYFm4WZgMgXwcobgzCQDaIr5AiKTo3U1p8IZAtAsR8cBcA + FTEDMdhPYEEGBk4gnxcZA8V4kOTZQHowUiI52RoAvKofAJdcVi8AAAAASUVORK5CYII= +</value> + </data> + <data name="pbUndo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAHHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3MgQ1M0BrLToAAAAihJREFUOE9j+P//PwMlmCLNIIupZwATAwMjOxs7Q8XKkwzFG2+y + GnYd8XOZdprZedopBr9FVxiSNt5jqD3wjGHC6TcMvadegzGKCxgYGFhVdE0Y0ldcYVFt3LeYIWfrO9aS + XZzmU84weC+6ypBMhAEsPoU9nBJV+w4xpG/4z5C//SN/zf4ou1kXDIAGsKRvvsdQfxCPC7jFFIVFc9fu + ZEhb+58hZ9N/hoLt/xlL9/xnqT78X6Ln3D3bRbfaSvc+FZ927g3DpDMQjOIF1ohptxlSgJrTEQYwlOz+ + z1C+/z9D1eH/jM2n/6vOuf06dtsT64ydTxjSdjxBNYApdf1/huSVmAZUHPjPUHPkP0P9if8MLWf/K8y7 + 98lw0T1do0V3UQ0QsoqIZc/e/AXZCwyFuyAuABtw8j9D05n/LF2X/2ssfnTEeOkDVAPYmRgZtLJn2bFk + b/7BkLURFAa/NbuOdUi1HY8QbjsZKtN3Pkl20uUpHD2Xn/FNuf3fYNljF4xotPGLYohacsWOIXPDW4a8 + bW/lmw9yKXedYJDuOs2gO/0Sg/vyOwxZu56yGCy+Xy086/58dAMYxSRlGJq3XWOIWnhBS6hy93rB6r0c + YnX7GWQ6TzJoT7vE4Lz0NkPW7ucMkdufM1mufOJP3aQMMo2ZgYEZiEWBWBaYtKVYOPkNWMRUvYFscSCW + BYqLAzErcu5FyUxASUaQAiDmAGIuIAbLA2l2qBgbSA2yAQAKojORM6Lv5AAAAABJRU5ErkJggg== +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/TVScraper/dlgTVImageSelect.vb b/Addons/scraper.OFDB.Data/TVScraper/dlgTVImageSelect.vb new file mode 100644 index 0000000..288414e --- /dev/null +++ b/Addons/scraper.OFDB.Data/TVScraper/dlgTVImageSelect.vb @@ -0,0 +1,1224 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +'TODO: 1.5 - TV Show renaming (including "dump folder") +'TODO: 1.5 - Support VIDEO_TS/BDMV folders for TV Shows + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgTVImageSelect + +#Region "Fields" + + Friend WithEvents bwDownloadFanart As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwLoadData As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwLoadImages As New System.ComponentModel.BackgroundWorker + + Private DefaultImages As New Scraper.TVImages + Private FanartList As New List(Of Scraper.TVDBFanart) + Private GenericPosterList As New List(Of Scraper.TVDBPoster) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + Private iTop As Integer = 5 + Private lblImage() As Label + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private SeasonList As New List(Of Scraper.TVDBSeasonPoster) + Private SelIsPoster As Boolean = True + Private SelSeason As Integer = -999 + Private ShowPosterList As New List(Of Scraper.TVDBShowPoster) + Private _fanartchanged As Boolean = False + Private _id As Integer = -1 + Private _season As Integer = -999 + Private _type As Enums.TVImageType = Enums.TVImageType.All + Private _withcurrent As Boolean = True + Private _ScrapeType As Enums.ScrapeType + +#End Region 'Fields + +#Region "Methods" + + Public Function SetDefaults() As Boolean + Dim iSeason As Integer = -1 + Dim iEpisode As Integer = -1 + Dim iProgress As Integer = 3 + + Dim tSea As Scraper.TVDBSeasonPoster + + Try + Me.bwLoadImages.ReportProgress(Scraper.TVDBImages.SeasonImageList.Count + Scraper.tmpTVDBShow.Episodes.Count + 3, "defaults") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster) AndAlso IsNothing(Scraper.TVDBImages.ShowPoster.Image.Image) Then + If Master.eSettings.IsShowBanner Then + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredShowBannerType AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If Master.eSettings.OnlyGetTVImagesForSelectedLanguage Then + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + End If + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredShowBannerType) + + 'no preferred size, just get any one of them + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.ShowPoster.Image = tSP.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSP.URL + Else + 'still nothing? try to get from generic posters + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) p.Language = Master.eSettings.TVDBLanguage AndAlso Not IsNothing(p.Image.Image)) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.ShowPoster.Image = tSPg.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSPg.URL + End If + End If + Else + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredShowPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If Master.eSettings.OnlyGetTVImagesForSelectedLanguage Then + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + End If + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredShowPosterSize) + + 'no preferred size, just get any one of them + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.ShowPoster.Image = tSPg.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSPg.URL + Else + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.ShowPoster.Image = tSP.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSP.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(1, "progress") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart) AndAlso IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Dim tSF As Scraper.TVDBFanart = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image) AndAlso Me.GetFanartDims(f.Size) = Master.eSettings.PreferredShowFanartSize AndAlso f.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSF) Then tSF = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image) AndAlso Me.GetFanartDims(f.Size) = Master.eSettings.PreferredShowFanartSize) + + 'no fanart of the preferred size, just get the first available + If IsNothing(tSF) Then tSF = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image)) + + If Not IsNothing(tSF) Then + If Not String.IsNullOrEmpty(tSF.LocalFile) AndAlso File.Exists(tSF.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(tSF.LocalFile) + Scraper.TVDBImages.ShowFanart.LocalFile = tSF.LocalFile + Scraper.TVDBImages.ShowFanart.URL = tSF.URL + ElseIf Not String.IsNullOrEmpty(tSF.LocalFile) AndAlso Not String.IsNullOrEmpty(tSF.URL) Then + Scraper.TVDBImages.ShowFanart.Image.FromWeb(tSF.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(tSF.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(tSF.LocalFile, , , False) + Scraper.TVDBImages.ShowFanart.LocalFile = tSF.LocalFile + Scraper.TVDBImages.ShowFanart.URL = tSF.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(2, "progress") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.AllSeasonPoster) AndAlso Master.eSettings.AllSeasonPosterEnabled AndAlso IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + If Master.eSettings.IsAllSBanner Then + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredAllSBannerType AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredAllSBannerType) + + 'no preferred size, just get any one of them + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSP.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSP.URL + Else + 'still nothing? try to get from generic posters + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSPg.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSPg.URL + End If + End If + Else + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredAllSPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredAllSPosterSize) + + 'no preferred size, just get any one of them + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSPg.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSPg.URL + Else + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSP.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSP.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(3, "progress") + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.SeasonFanart Then + For Each cSeason As Scraper.TVDBSeasonImage In Scraper.TVDBImages.SeasonImageList + Try + iSeason = cSeason.Season + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster) AndAlso IsNothing(cSeason.Poster.Image) Then + tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason AndAlso p.Type = Master.eSettings.PreferredSeasonPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + If IsNothing(tSea) Then tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason AndAlso p.Type = Master.eSettings.PreferredSeasonPosterSize) + If IsNothing(tSea) Then tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason) + If Not IsNothing(tSea) Then cSeason.Poster = tSea.Image + End If + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonFanart) AndAlso Master.eSettings.SeasonFanartEnabled AndAlso IsNothing(cSeason.Fanart.Image.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then cSeason.Fanart.Image = Scraper.TVDBImages.ShowFanart.Image + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All Then + For Each Episode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + If Not String.IsNullOrEmpty(Episode.TVEp.LocalFile) Then + Episode.TVEp.Poster.FromFile(Episode.TVEp.LocalFile) + ElseIf Not String.IsNullOrEmpty(Episode.EpPosterPath) Then + Episode.TVEp.Poster.FromFile(Episode.EpPosterPath) + End If + + If Master.eSettings.EpisodeFanartEnabled Then + If Not String.IsNullOrEmpty(Episode.EpFanartPath) Then + Episode.TVEp.Fanart.FromFile(Episode.EpFanartPath) + ElseIf Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Episode.TVEp.Fanart = Scraper.TVDBImages.ShowFanart.Image + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + DefaultImages = Scraper.TVDBImages.Clone + + Return False + End Function + + Public Overloads Function ShowDialog(ByVal ShowID As Integer, ByVal Type As Enums.TVImageType, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As System.Windows.Forms.DialogResult + Me._id = ShowID + Me._type = Type + Me._withcurrent = WithCurrent + Me._ScrapeType = ScrapeType + Return MyBase.ShowDialog + End Function + + Public Overloads Function ShowDialog(ByVal ShowID As Integer, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal CurrentImage As Images) As Images + Me._id = ShowID + Me._type = Type + Me._season = Season + Me.pbCurrent.Image = CurrentImage.Image + Me.pbCurrent.Tag = CurrentImage + + If MyBase.ShowDialog = Windows.Forms.DialogResult.OK Then + Return CType(Me.pbCurrent.Tag, Images) + Else + Return Nothing + End If + End Function + + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal fTag As ImageTag) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + ReDim Preserve Me.lblImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.lblImage(iIndex) = New Label() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(187, 187) + Me.pbImage(iIndex).Size = New Size(181, 151) + Me.lblImage(iIndex).Size = New Size(181, 30) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblImage(iIndex).Text = sDescription + Me.pbImage(iIndex).Image = fTag.ImageObj.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.lblImage(iIndex).Left = 0 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.lblImage(iIndex).Top = 151 + Me.pnlImage(iIndex).Tag = fTag + Me.pbImage(iIndex).Tag = fTag + Me.lblImage(iIndex).Tag = fTag + Me.pnlImages.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 192 + Else + Me.iLeft += 192 + End If + End Sub + + Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click + If Me.bwLoadData.IsBusy Then Me.bwLoadData.CancelAsync() + If Me.bwLoadImages.IsBusy Then Me.bwLoadImages.CancelAsync() + + While Me.bwLoadData.IsBusy OrElse Me.bwLoadImages.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click + DoneAndClose() + End Sub + + Private Sub DoneAndClose() + If Me._type = Enums.TVImageType.All Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + Master.currShow.ShowPosterPath = Scraper.TVDBImages.ShowPoster.LocalFile + If Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.TVDBImages.ShowFanart.LocalFile) + Master.currShow.ShowFanartPath = Scraper.TVDBImages.ShowFanart.LocalFile + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.Clear() + Scraper.TVDBImages.ShowFanart.Image.FromWeb(Scraper.TVDBImages.ShowFanart.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.ShowFanart.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile, , , False) + Master.currShow.ShowFanartPath = Scraper.TVDBImages.ShowFanart.LocalFile + End If + End If + If Master.eSettings.AllSeasonPosterEnabled AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + Master.currShow.SeasonPosterPath = Scraper.TVDBImages.AllSeasonPoster.LocalFile + End If + ElseIf Me._type = Enums.TVImageType.SeasonFanart AndAlso Me._fanartchanged Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + If Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromFile(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) + Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Clear() + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromWeb(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) + If Not IsNothing(Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile).FullName) + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Save(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile, , , False) + Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image + End If + End If + ElseIf (Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart) AndAlso Me._fanartchanged Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + If Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.TVDBImages.ShowFanart.LocalFile) + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.Clear() + Scraper.TVDBImages.ShowFanart.Image.FromWeb(Scraper.TVDBImages.ShowFanart.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.ShowFanart.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile, , , False) + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + End If + End If + End If + + Me.DialogResult = Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + + Private Sub bwLoadData_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwLoadData.DoWork + Dim cSI As Scraper.TVDBSeasonImage + Dim iProgress As Integer = 1 + Dim iSeason As Integer = -1 + + Me.bwLoadData.ReportProgress(Scraper.tmpTVDBShow.Episodes.Count, "current") + + 'initialize the struct + Scraper.TVDBImages.ShowPoster = New Scraper.TVDBShowPoster + Scraper.TVDBImages.ShowFanart = New Scraper.TVDBFanart + Scraper.TVDBImages.AllSeasonPoster = New Scraper.TVDBShowPoster + Scraper.TVDBImages.SeasonImageList = New List(Of Scraper.TVDBSeasonImage) + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + Select Case Me._type + Case Enums.TVImageType.AllSeasonPoster + Scraper.TVDBImages.AllSeasonPoster.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.SeasonFanart + cSI = New Scraper.TVDBSeasonImage + cSI.Season = Me._season + cSI.Fanart.Image = CType(Me.pbCurrent.Tag, Images) + Scraper.TVDBImages.SeasonImageList.Add(cSI) + Case Enums.TVImageType.SeasonPoster + cSI = New Scraper.TVDBSeasonImage + cSI.Season = Me._season + cSI.Poster = CType(Me.pbCurrent.Tag, Images) + Scraper.TVDBImages.SeasonImageList.Add(cSI) + Case Enums.TVImageType.ShowFanart, Enums.TVImageType.EpisodeFanart + Scraper.TVDBImages.ShowFanart.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.ShowPoster + Scraper.TVDBImages.ShowPoster.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.All + + If _withcurrent Then + If Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.Show.ShowPosterPath) Then + Scraper.TVDBImages.ShowPoster.Image.FromFile(Scraper.tmpTVDBShow.Show.ShowPosterPath) + Scraper.TVDBImages.ShowPoster.LocalFile = Scraper.tmpTVDBShow.Show.ShowPosterPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.Show.ShowFanartPath) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.tmpTVDBShow.Show.ShowFanartPath) + Scraper.TVDBImages.ShowFanart.LocalFile = Scraper.tmpTVDBShow.Show.ShowFanartPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Master.eSettings.AllSeasonPosterEnabled AndAlso Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath) Then + Scraper.TVDBImages.AllSeasonPoster.Image.FromFile(Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath) + Scraper.TVDBImages.AllSeasonPoster.LocalFile = Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + For Each sEpisode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + iSeason = sEpisode.TVEp.Season + If iSeason > -1 Then + If IsNothing(Scraper.TVDBImages.ShowPoster.Image) AndAlso Not String.IsNullOrEmpty(sEpisode.ShowPosterPath) Then + Scraper.TVDBImages.ShowPoster.Image.FromFile(sEpisode.ShowPosterPath) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Master.eSettings.EpisodeFanartEnabled AndAlso IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) AndAlso Not String.IsNullOrEmpty(sEpisode.ShowFanartPath) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(sEpisode.ShowFanartPath) + Scraper.TVDBImages.ShowFanart.LocalFile = sEpisode.ShowFanartPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Scraper.TVDBImages.SeasonImageList.Where(Function(s) s.Season = iSeason).Count = 0 Then + cSI = New Scraper.TVDBSeasonImage + cSI.Season = iSeason + If Not String.IsNullOrEmpty(sEpisode.SeasonPosterPath) Then + cSI.Poster.FromFile(sEpisode.SeasonPosterPath) + End If + If Master.eSettings.SeasonFanartEnabled AndAlso Not String.IsNullOrEmpty(sEpisode.SeasonFanartPath) Then + cSI.Fanart.Image.FromFile(sEpisode.SeasonFanartPath) + cSI.Fanart.LocalFile = sEpisode.SeasonFanartPath + End If + Scraper.TVDBImages.SeasonImageList.Add(cSI) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + End If + Me.bwLoadData.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + Else + For Each sEpisode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + iSeason = sEpisode.TVEp.Season + + If Scraper.TVDBImages.SeasonImageList.Where(Function(s) s.Season = iSeason).Count = 0 Then + cSI = New Scraper.TVDBSeasonImage + cSI.Season = iSeason + Scraper.TVDBImages.SeasonImageList.Add(cSI) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + Me.bwLoadData.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + End Select + End Sub + + Private Sub bwLoadData_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwLoadData.ProgressChanged + Try + If e.UserState.ToString = "progress" Then + Me.pbStatus.Value = e.ProgressPercentage + ElseIf e.UserState.ToString = "current" Then + Me.lblStatus.Text = Master.eLang.GetString(88, "Loading Current Images...") + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + Else + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwLoadData_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwLoadData.RunWorkerCompleted + If Not e.Cancelled Then + Me.GenerateList() + + Me.lblStatus.Text = Master.eLang.GetString(89, "(Down)Loading New Images...") + Me.bwLoadImages.WorkerReportsProgress = True + Me.bwLoadImages.WorkerSupportsCancellation = True + Me.bwLoadImages.RunWorkerAsync() + End If + End Sub + + Private Sub bwLoadImages_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwLoadImages.DoWork + e.Cancel = Me.DownloadAllImages() + End Sub + + Private Sub bwLoadImages_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwLoadImages.ProgressChanged + Try + If e.UserState.ToString = "progress" Then + Me.pbStatus.Value = e.ProgressPercentage + ElseIf e.UserState.ToString = "defaults" Then + Me.lblStatus.Text = Master.eLang.GetString(90, "Setting Defaults...") + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + Else + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwLoadImages_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwLoadImages.RunWorkerCompleted + Me.pnlStatus.Visible = False + If _ScrapeType = Enums.ScrapeType.FullAuto Then + DoneAndClose() + Else + If Not e.Cancelled Then + Me.tvList.Enabled = True + Me.tvList.Visible = True + Me.tvList.SelectedNode = Me.tvList.Nodes(0) + Me.tvList.Focus() + + Me.btnOK.Enabled = True + End If + + Me.pbCurrent.Visible = True + Me.lblCurrentImage.Visible = True + End If + End Sub + + Private Sub CheckCurrentImage() + Me.pbDelete.Visible = Not IsNothing(Me.pbCurrent.Image) AndAlso Me.pbCurrent.Visible + Me.pbUndo.Visible = Me.pbCurrent.Visible + End Sub + + Private Sub ClearImages() + Try + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop = 5 + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Tag = Nothing + + If Me.pnlImages.Controls.Count > 0 Then + For i As Integer = UBound(Me.pnlImage) To 0 Step -1 + If Not IsNothing(Me.pnlImage(i)) Then + If Not IsNothing(Me.lblImage(i)) AndAlso Me.pnlImage(i).Contains(Me.lblImage(i)) Then Me.pnlImage(i).Controls.Remove(Me.lblImage(i)) + If Not IsNothing(Me.pbImage(i)) AndAlso Me.pnlImage(i).Contains(Me.pbImage(i)) Then Me.pnlImage(i).Controls.Remove(Me.pbImage(i)) + If Me.pnlImages.Contains(Me.pnlImage(i)) Then Me.pnlImages.Controls.Remove(Me.pnlImage(i)) + End If + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgTVImageSelect_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + AddHandler pnlImages.MouseWheel, AddressOf MouseWheelEvent + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler tvList.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlImages) + + Me.SetUp() + End Sub + + Private Sub dlgTVImageSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.bwLoadData.WorkerReportsProgress = True + Me.bwLoadData.WorkerSupportsCancellation = True + Me.bwLoadData.RunWorkerAsync() + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, ByVal SelTag As ImageTag) + Try + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + Next + + Me.pnlImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + + SetImage(SelTag) + + Me.CheckCurrentImage() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function DownloadAllImages() As Boolean + Dim iProgress As Integer = 1 + + Try + Me.bwLoadImages.ReportProgress(Scraper.tmpTVDBShow.Episodes.Count + Scraper.tmpTVDBShow.SeasonPosters.Count + Scraper.tmpTVDBShow.ShowPosters.Count + Scraper.tmpTVDBShow.Fanart.Count + Scraper.tmpTVDBShow.Posters.Count, "max") + + If Me._type = Enums.TVImageType.All Then + For Each Epi As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + If Not File.Exists(Epi.TVEp.LocalFile) Then + If Not String.IsNullOrEmpty(Epi.TVEp.PosterURL) Then + Epi.TVEp.Poster.FromWeb(Epi.TVEp.PosterURL) + If Not IsNothing(Epi.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Epi.TVEp.LocalFile).FullName) + Epi.TVEp.Poster.Save(Epi.TVEp.LocalFile) + End If + End If + Else + Epi.TVEp.Poster.FromFile(Epi.TVEp.LocalFile) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each Seas As Scraper.TVDBSeasonPoster In Scraper.tmpTVDBShow.SeasonPosters + Try + If Not File.Exists(Seas.LocalFile) Then + If Not String.IsNullOrEmpty(Seas.URL) Then + Seas.Image.FromWeb(Seas.URL) + If Not IsNothing(Seas.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Seas.LocalFile).FullName) + Seas.Image.Save(Seas.LocalFile, , , False) + SeasonList.Add(Seas) + End If + End If + Else + Seas.Image.FromFile(Seas.LocalFile) + SeasonList.Add(Seas) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each SPost As Scraper.TVDBShowPoster In Scraper.tmpTVDBShow.ShowPosters + Try + If Not File.Exists(SPost.LocalFile) Then + If Not String.IsNullOrEmpty(SPost.URL) Then + SPost.Image.FromWeb(SPost.URL) + If Not IsNothing(SPost.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(SPost.LocalFile).FullName) + SPost.Image.Save(SPost.LocalFile, , , False) + ShowPosterList.Add(SPost) + End If + End If + Else + SPost.Image.FromFile(SPost.LocalFile) + ShowPosterList.Add(SPost) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.SeasonFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart Then + For Each SFan As Scraper.TVDBFanart In Scraper.tmpTVDBShow.Fanart + Try + If Not File.Exists(SFan.LocalThumb) Then + If Not String.IsNullOrEmpty(SFan.ThumbnailURL) Then + SFan.Image.FromWeb(SFan.ThumbnailURL) + If Not IsNothing(SFan.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(SFan.LocalThumb).FullName) + SFan.Image.Save(SFan.LocalThumb, , , False) + FanartList.Add(SFan) + End If + End If + Else + SFan.Image.FromFile(SFan.LocalThumb) + FanartList.Add(SFan) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster OrElse _ + Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each Post As Scraper.TVDBPoster In Scraper.tmpTVDBShow.Posters + Try + If Not File.Exists(Post.LocalFile) Then + If Not String.IsNullOrEmpty(Post.URL) Then + Post.Image.FromWeb(Post.URL) + If Not IsNothing(Post.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Post.LocalFile).FullName) + Post.Image.Save(Post.LocalFile, , , False) + GenericPosterList.Add(Post) + End If + End If + Else + Post.Image.FromFile(Post.LocalFile) + GenericPosterList.Add(Post) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return Me.SetDefaults() + End Function + + Private Function DownloadFanart(ByVal iTag As ImageTag) As Image + Dim sHTTP As New HTTP + + Using tImage As New Images + If Not String.IsNullOrEmpty(iTag.Path) AndAlso File.Exists(iTag.Path) Then + tImage.FromFile(iTag.Path) + ElseIf Not String.IsNullOrEmpty(iTag.Path) AndAlso Not String.IsNullOrEmpty(iTag.URL) Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + + Application.DoEvents() + + tImage.FromWeb(iTag.URL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(iTag.Path).FullName) + tImage.Save(iTag.Path, , , False) + End If + + sHTTP = Nothing + + Me.pnlStatus.Visible = False + End If + + Return tImage.Image + End Using + End Function + + Private Sub GenerateList() + Try + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster Then Me.tvList.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(91, "Show Poster"), .Tag = "showp", .ImageIndex = 0, .SelectedImageIndex = 0}) + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart Then Me.tvList.Nodes.Add(New TreeNode With {.Text = If(Me._type = Enums.TVImageType.EpisodeFanart, Master.eLang.GetString(92, "Episode Fanart"), Master.eLang.GetString(93, "Show Fanart")), .Tag = "showf", .ImageIndex = 1, .SelectedImageIndex = 1}) + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.AllSeasonPoster) AndAlso Master.eSettings.AllSeasonPosterEnabled Then Me.tvList.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(94, "All Seasons Poster"), .Tag = "allp", .ImageIndex = 2, .SelectedImageIndex = 2}) + + Dim TnS As TreeNode + If Me._type = Enums.TVImageType.All Then + For Each cSeason As Scraper.TVDBSeasonImage In Scraper.TVDBImages.SeasonImageList.OrderBy(Function(s) s.Season) + Try + TnS = New TreeNode(String.Format(Master.eLang.GetString(726, "Season {0}", True), cSeason.Season), 3, 3) + TnS.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(95, "Season Posters"), .Tag = String.Concat("p", cSeason.Season.ToString), .ImageIndex = 0, .SelectedImageIndex = 0}) + If Master.eSettings.SeasonFanartEnabled Then TnS.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(96, "Season Fanart"), .Tag = String.Concat("f", cSeason.Season.ToString), .ImageIndex = 1, .SelectedImageIndex = 1}) + Me.tvList.Nodes.Add(TnS) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + ElseIf Me._type = Enums.TVImageType.SeasonPoster Then + Me.tvList.Nodes.Add(New TreeNode With {.Text = String.Format(Master.eLang.GetString(97, "Season {0} Posters"), Me._season), .Tag = String.Concat("p", Me._season)}) + ElseIf Me._type = Enums.TVImageType.SeasonFanart Then + If Master.eSettings.SeasonFanartEnabled Then Me.tvList.Nodes.Add(New TreeNode With {.Text = String.Format(Master.eLang.GetString(99, "Season {0} Fanart"), Me._season), .Tag = String.Concat("f", Me._season)}) + End If + + Me.tvList.ExpandAll() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetFanartDims(ByVal fSize As Size) As Enums.FanartSize + Try + If (fSize.Width > 1000 AndAlso fSize.Height > 750) OrElse (fSize.Height > 1000 AndAlso fSize.Width > 750) Then + Return Enums.FanartSize.Lrg + ElseIf (fSize.Width > 700 AndAlso fSize.Height > 400) OrElse (fSize.Height > 700 AndAlso fSize.Width > 400) Then + Return Enums.FanartSize.Mid + Else + Return Enums.FanartSize.Small + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Function + + Private Function GetPosterDims(ByVal pSize As Size) As Enums.PosterSize + Try + If (pSize.Width > pSize.Height) AndAlso (pSize.Width > (pSize.Height * 2)) AndAlso (pSize.Width > 300) Then + 'at least twice as wide than tall... consider it wide (also make sure it's big enough) + Return Enums.PosterSize.Wide + ElseIf (pSize.Height > 1000 AndAlso pSize.Width > 750) OrElse (pSize.Width > 1000 AndAlso pSize.Height > 750) Then + Return Enums.PosterSize.Xlrg + ElseIf (pSize.Height > 700 AndAlso pSize.Width > 500) OrElse (pSize.Width > 700 AndAlso pSize.Height > 500) Then + Return Enums.PosterSize.Lrg + ElseIf (pSize.Height > 250 AndAlso pSize.Width > 150) OrElse (pSize.Width > 250 AndAlso pSize.Height > 150) Then + Return Enums.PosterSize.Mid + Else + Return Enums.PosterSize.Small + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Function + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Dim iindex As Integer = Convert.ToInt32(DirectCast(sender, Label).Name) + Me.DoSelect(iindex, DirectCast(DirectCast(sender, Label).Tag, ImageTag)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlImages.VerticalScroll.Value + 50) <= pnlImages.VerticalScroll.Maximum Then + pnlImages.VerticalScroll.Value += 50 + Else + pnlImages.VerticalScroll.Value = pnlImages.VerticalScroll.Maximum + End If + Else + If (pnlImages.VerticalScroll.Value - 50) >= pnlImages.VerticalScroll.Minimum Then + pnlImages.VerticalScroll.Value -= 50 + Else + pnlImages.VerticalScroll.Value = pnlImages.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub pbDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbDelete.Click + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Tag = Nothing + Me.SetImage(New ImageTag) + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, ImageTag)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) + Dim tImage As Image = Nothing + Dim iTag As ImageTag = DirectCast(DirectCast(sender, PictureBox).Tag, ImageTag) + If Not IsNothing(iTag) OrElse Not iTag.isFanart Then + tImage = DownloadFanart(iTag) + Else + tImage = DirectCast(sender, PictureBox).Image + End If + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage) + End Sub + + Private Sub pbUndo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbUndo.Click + If Me.SelSeason = -999 Then + If Me.SelIsPoster Then + Scraper.TVDBImages.ShowPoster.Image = DefaultImages.ShowPoster.Image + Scraper.TVDBImages.ShowPoster.LocalFile = DefaultImages.ShowPoster.LocalFile + Scraper.TVDBImages.ShowPoster.URL = DefaultImages.ShowPoster.URL + Me.pbCurrent.Image = Scraper.TVDBImages.ShowPoster.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowPoster.Image + Else + Scraper.TVDBImages.ShowFanart.Image = DefaultImages.ShowFanart.Image + Scraper.TVDBImages.ShowFanart.LocalFile = DefaultImages.ShowFanart.LocalFile + Scraper.TVDBImages.ShowFanart.URL = DefaultImages.ShowFanart.URL + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + End If + ElseIf Me.SelSeason = 999 Then + Scraper.TVDBImages.AllSeasonPoster.Image = DefaultImages.AllSeasonPoster.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = DefaultImages.AllSeasonPoster.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = DefaultImages.AllSeasonPoster.URL + Me.pbCurrent.Image = Scraper.TVDBImages.AllSeasonPoster.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.AllSeasonPoster.Image + Else + If Me.SelIsPoster Then + Dim dSPost As Images = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster + Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster = dSPost + Me.pbCurrent.Image = dSPost.Image + Me.pbCurrent.Tag = dSPost + Else + Dim dSFan As Scraper.TVDBFanart = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + Dim tSFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + tSFan.Image = dSFan.Image + tSFan.LocalFile = dSFan.LocalFile + tSFan.URL = dSFan.URL + Me.pbCurrent.Image = dSFan.Image.Image + Me.pbCurrent.Tag = dSFan.Image + End If + End If + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Dim iIndex As Integer = Convert.ToInt32(DirectCast(sender, Panel).Name) + Me.DoSelect(iIndex, DirectCast(DirectCast(sender, Panel).Tag, ImageTag)) + End Sub + + Private Sub SetImage(ByVal SelTag As ImageTag) + Me.pbCurrent.Image = SelTag.ImageObj.Image + Me.pbCurrent.Tag = SelTag.ImageObj + + Me._fanartchanged = True + + If Me.SelSeason = -999 Then + If Me.SelIsPoster Then + Scraper.TVDBImages.ShowPoster.Image = SelTag.ImageObj + Scraper.TVDBImages.ShowPoster.LocalFile = SelTag.Path + Scraper.TVDBImages.ShowPoster.URL = SelTag.URL + Else + Scraper.TVDBImages.ShowFanart.Image = SelTag.ImageObj + Scraper.TVDBImages.ShowFanart.LocalFile = SelTag.Path + Scraper.TVDBImages.ShowFanart.URL = SelTag.URL + End If + ElseIf Me.SelSeason = 999 Then + Scraper.TVDBImages.AllSeasonPoster.Image = SelTag.ImageObj + Scraper.TVDBImages.AllSeasonPoster.LocalFile = SelTag.Path + Scraper.TVDBImages.AllSeasonPoster.URL = SelTag.URL + Else + If Me.SelIsPoster Then + Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster = SelTag.ImageObj + Else + Dim tFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + If Not IsNothing(tFan) Then + tFan.Image = SelTag.ImageObj + tFan.LocalFile = SelTag.Path + tFan.URL = SelTag.URL + End If + End If + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(99, "TV Image Selection") + Me.btnOK.Text = Master.eLang.GetString(179, "OK", True) + Me.btnCancel.Text = Master.eLang.GetString(167, "Cancel", True) + Me.lblCurrentImage.Text = Master.eLang.GetString(100, "Current Image:") + End Sub + + Private Sub tvList_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvList.AfterSelect + Dim iCount As Integer = 0 + + Try + ClearImages() + If Not IsNothing(e.Node.Tag) AndAlso Not String.IsNullOrEmpty(e.Node.Tag.ToString) Then + Me.pbCurrent.Visible = True + Me.lblCurrentImage.Visible = True + If e.Node.Tag.ToString = "showp" Then + Me.SelSeason = -999 + Me.SelIsPoster = True + If Not IsNothing(Scraper.TVDBImages.ShowPoster) AndAlso Not IsNothing(Scraper.TVDBImages.ShowPoster.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowPoster.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.ShowPoster.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + iCount = ShowPosterList.Count + For i = 0 To iCount - 1 + If Not IsNothing(ShowPosterList(i)) AndAlso Not IsNothing(ShowPosterList(i).Image) AndAlso Not IsNothing(ShowPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False, .ImageObj = ShowPosterList(i).Image}) + End If + Next + + For i = 0 To GenericPosterList.Count - 1 + If Not IsNothing(GenericPosterList(i)) AndAlso Not IsNothing(GenericPosterList(i).Image) AndAlso Not IsNothing(GenericPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False, .ImageObj = GenericPosterList(i).Image}) + End If + Next + + ElseIf e.Node.Tag.ToString = "showf" Then + + Me.SelSeason = -999 + Me.SelIsPoster = False + If Not IsNothing(Scraper.TVDBImages.ShowFanart) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + For i = 0 To FanartList.Count - 1 + If Not IsNothing(FanartList(i)) AndAlso Not IsNothing(FanartList(i).Image) AndAlso Not IsNothing(FanartList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True, .ImageObj = FanartList(i).Image}) + End If + Next + + ElseIf e.Node.Tag.ToString = "allp" Then + Me.SelSeason = 999 + Me.SelIsPoster = True + If Not IsNothing(Scraper.TVDBImages.AllSeasonPoster) AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image) AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.AllSeasonPoster.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + iCount = GenericPosterList.Count + For i = 0 To iCount - 1 + If Not IsNothing(GenericPosterList(i)) AndAlso Not IsNothing(GenericPosterList(i).Image) AndAlso Not IsNothing(GenericPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False, .ImageObj = GenericPosterList(i).Image}) + End If + Next + + For i = 0 To ShowPosterList.Count - 1 + If Not IsNothing(ShowPosterList(i)) AndAlso Not IsNothing(ShowPosterList(i).Image) AndAlso Not IsNothing(ShowPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False, .ImageObj = ShowPosterList(i).Image}) + End If + Next + Else + Dim tMatch As Match = Regex.Match(e.Node.Tag.ToString, "(?<type>f|p)(?<num>[0-9]+)") + If tMatch.Success Then + If tMatch.Groups("type").Value = "f" Then + Me.SelSeason = Convert.ToInt32(tMatch.Groups("num").Value) + Me.SelIsPoster = False + Dim tFanart As Scraper.TVDBSeasonImage = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(f) f.Season = Convert.ToInt32(tMatch.Groups("num").Value)) + If Not IsNothing(tFanart) AndAlso Not IsNothing(tFanart.Fanart) AndAlso Not IsNothing(tFanart.Fanart.Image) AndAlso Not IsNothing(tFanart.Fanart.Image.Image) Then + Me.pbCurrent.Image = tFanart.Fanart.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + For i = 0 To FanartList.Count - 1 + If Not IsNothing(FanartList(i)) AndAlso Not IsNothing(FanartList(i).Image) AndAlso Not IsNothing(FanartList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True, .ImageObj = FanartList(i).Image}) + End If + Next + ElseIf tMatch.Groups("type").Value = "p" Then + Me.SelSeason = Convert.ToInt32(tMatch.Groups("num").Value) + Me.SelIsPoster = True + Dim tPoster As Scraper.TVDBSeasonImage = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(f) f.Season = Me.SelSeason) + If Not IsNothing(tPoster) AndAlso Not IsNothing(tPoster.Poster) AndAlso Not IsNothing(tPoster.Poster.Image) Then + Me.pbCurrent.Image = tPoster.Poster.Image + Else + Me.pbCurrent.Image = Nothing + End If + iCount = 0 + For Each SImage As Scraper.TVDBSeasonPoster In SeasonList.Where(Function(s) s.Season = Convert.ToInt32(tMatch.Groups("num").Value)) + If Not IsNothing(SImage.Image) AndAlso Not IsNothing(SImage.Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", SImage.Image.Image.Width, SImage.Image.Image.Height), iCount, New ImageTag With {.URL = SImage.URL, .Path = SImage.LocalFile, .isFanart = False, .ImageObj = SImage.Image}) + End If + iCount += 1 + Next + End If + End If + End If + Else + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Visible = False + Me.lblCurrentImage.Visible = False + End If + + Me.CheckCurrentImage() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure ImageTag + +#Region "Fields" + + Dim isFanart As Boolean + Dim Path As String + Dim URL As String + Dim ImageObj As Images + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/frmInfoSettingsHolder.Designer.vb b/Addons/scraper.OFDB.Data/frmInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..c3675d6 --- /dev/null +++ b/Addons/scraper.OFDB.Data/frmInfoSettingsHolder.Designer.vb @@ -0,0 +1,632 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtIMDBURL = New System.Windows.Forms.TextBox() + Me.GroupBox15 = New System.Windows.Forms.GroupBox() + Me.chkOFDBGenre = New System.Windows.Forms.CheckBox() + Me.chkOFDBPlot = New System.Windows.Forms.CheckBox() + Me.chkOFDBOutline = New System.Windows.Forms.CheckBox() + Me.chkOFDBTitle = New System.Windows.Forms.CheckBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCertification = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkTop250 = New System.Windows.Forms.CheckBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkMusicBy = New System.Windows.Forms.CheckBox() + Me.chkProducers = New System.Windows.Forms.CheckBox() + Me.chkFullCast = New System.Windows.Forms.CheckBox() + Me.chkWriters = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkFullCrew = New System.Windows.Forms.CheckBox() + Me.chkPlot = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkDirector = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.GroupBox30.SuspendLayout() + Me.GroupBox15.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtIMDBURL) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(213, 69) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "IMDB" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(73, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "IMDB Mirror:" + ' + 'txtIMDBURL + ' + Me.txtIMDBURL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtIMDBURL.Location = New System.Drawing.Point(8, 32) + Me.txtIMDBURL.Name = "txtIMDBURL" + Me.txtIMDBURL.Size = New System.Drawing.Size(192, 22) + Me.txtIMDBURL.TabIndex = 1 + ' + 'GroupBox15 + ' + Me.GroupBox15.Controls.Add(Me.chkOFDBGenre) + Me.GroupBox15.Controls.Add(Me.chkOFDBPlot) + Me.GroupBox15.Controls.Add(Me.chkOFDBOutline) + Me.GroupBox15.Controls.Add(Me.chkOFDBTitle) + Me.GroupBox15.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox15.Location = New System.Drawing.Point(8, 114) + Me.GroupBox15.Name = "GroupBox15" + Me.GroupBox15.Size = New System.Drawing.Size(213, 87) + Me.GroupBox15.TabIndex = 2 + Me.GroupBox15.TabStop = False + Me.GroupBox15.Text = "OFDB (German)" + ' + 'chkOFDBGenre + ' + Me.chkOFDBGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBGenre.Location = New System.Drawing.Point(6, 65) + Me.chkOFDBGenre.Name = "chkOFDBGenre" + Me.chkOFDBGenre.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBGenre.TabIndex = 3 + Me.chkOFDBGenre.Text = "Use OFDB Genre" + Me.chkOFDBGenre.UseVisualStyleBackColor = True + ' + 'chkOFDBPlot + ' + Me.chkOFDBPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBPlot.Location = New System.Drawing.Point(6, 49) + Me.chkOFDBPlot.Name = "chkOFDBPlot" + Me.chkOFDBPlot.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBPlot.TabIndex = 2 + Me.chkOFDBPlot.Text = "Use OFDB Plot" + Me.chkOFDBPlot.UseVisualStyleBackColor = True + ' + 'chkOFDBOutline + ' + Me.chkOFDBOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBOutline.Location = New System.Drawing.Point(6, 33) + Me.chkOFDBOutline.Name = "chkOFDBOutline" + Me.chkOFDBOutline.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBOutline.TabIndex = 1 + Me.chkOFDBOutline.Text = "Use OFDB Outline" + Me.chkOFDBOutline.UseVisualStyleBackColor = True + ' + 'chkOFDBTitle + ' + Me.chkOFDBTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBTitle.Location = New System.Drawing.Point(6, 17) + Me.chkOFDBTitle.Name = "chkOFDBTitle" + Me.chkOFDBTitle.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBTitle.TabIndex = 0 + Me.chkOFDBTitle.Text = "Use OFDB Title" + Me.chkOFDBTitle.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.GroupBox15) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCertification) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkTop250) + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkMusicBy) + Me.gbOptions.Controls.Add(Me.chkProducers) + Me.gbOptions.Controls.Add(Me.chkFullCast) + Me.gbOptions.Controls.Add(Me.chkWriters) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkFullCrew) + Me.gbOptions.Controls.Add(Me.chkPlot) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkDirector) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(227, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(387, 161) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCertification + ' + Me.chkCertification.AutoSize = True + Me.chkCertification.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCertification.Location = New System.Drawing.Point(6, 70) + Me.chkCertification.Name = "chkCertification" + Me.chkCertification.Size = New System.Drawing.Size(89, 17) + Me.chkCertification.TabIndex = 3 + Me.chkCertification.Text = "Certification" + Me.chkCertification.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(237, 53) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkTop250 + ' + Me.chkTop250.AutoSize = True + Me.chkTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTop250.Location = New System.Drawing.Point(237, 19) + Me.chkTop250.Name = "chkTop250" + Me.chkTop250.Size = New System.Drawing.Size(66, 17) + Me.chkTop250.TabIndex = 16 + Me.chkTop250.Text = "Top 250" + Me.chkTop250.UseVisualStyleBackColor = True + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Enabled = False + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(246, 104) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(85, 17) + Me.chkCrew.TabIndex = 21 + Me.chkCrew.Text = "Other Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkMusicBy + ' + Me.chkMusicBy.AutoSize = True + Me.chkMusicBy.Enabled = False + Me.chkMusicBy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMusicBy.Location = New System.Drawing.Point(246, 121) + Me.chkMusicBy.Name = "chkMusicBy" + Me.chkMusicBy.Size = New System.Drawing.Size(71, 17) + Me.chkMusicBy.TabIndex = 22 + Me.chkMusicBy.Text = "Music By" + Me.chkMusicBy.UseVisualStyleBackColor = True + ' + 'chkProducers + ' + Me.chkProducers.AutoSize = True + Me.chkProducers.Enabled = False + Me.chkProducers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkProducers.Location = New System.Drawing.Point(246, 138) + Me.chkProducers.Name = "chkProducers" + Me.chkProducers.Size = New System.Drawing.Size(77, 17) + Me.chkProducers.TabIndex = 23 + Me.chkProducers.Text = "Producers" + Me.chkProducers.UseVisualStyleBackColor = True + ' + 'chkFullCast + ' + Me.chkFullCast.AutoSize = True + Me.chkFullCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCast.Location = New System.Drawing.Point(237, 70) + Me.chkFullCast.Name = "chkFullCast" + Me.chkFullCast.Size = New System.Drawing.Size(107, 17) + Me.chkFullCast.TabIndex = 19 + Me.chkFullCast.Text = "Scrape Full Cast" + Me.chkFullCast.UseVisualStyleBackColor = True + ' + 'chkWriters + ' + Me.chkWriters.AutoSize = True + Me.chkWriters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkWriters.Location = New System.Drawing.Point(131, 121) + Me.chkWriters.Name = "chkWriters" + Me.chkWriters.Size = New System.Drawing.Size(63, 17) + Me.chkWriters.TabIndex = 14 + Me.chkWriters.Text = "Writers" + Me.chkWriters.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 104) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkFullCrew + ' + Me.chkFullCrew.AutoSize = True + Me.chkFullCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCrew.Location = New System.Drawing.Point(237, 87) + Me.chkFullCrew.Name = "chkFullCrew" + Me.chkFullCrew.Size = New System.Drawing.Size(111, 17) + Me.chkFullCrew.TabIndex = 20 + Me.chkFullCrew.Text = "Scrape Full Crew" + Me.chkFullCrew.UseVisualStyleBackColor = True + ' + 'chkPlot + ' + Me.chkPlot.AutoSize = True + Me.chkPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkPlot.Location = New System.Drawing.Point(131, 70) + Me.chkPlot.Name = "chkPlot" + Me.chkPlot.Size = New System.Drawing.Size(46, 17) + Me.chkPlot.TabIndex = 11 + Me.chkPlot.Text = "Plot" + Me.chkPlot.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 138) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkDirector + ' + Me.chkDirector.AutoSize = True + Me.chkDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDirector.Location = New System.Drawing.Point(131, 104) + Me.chkDirector.Name = "chkDirector" + Me.chkDirector.Size = New System.Drawing.Size(67, 17) + Me.chkDirector.TabIndex = 13 + Me.chkDirector.Text = "Director" + Me.chkDirector.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 87) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 138) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(237, 36) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 121) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 87) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'frmInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.GroupBox15.ResumeLayout(False) + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox + Friend WithEvents Label18 As System.Windows.Forms.Label + Friend WithEvents txtIMDBURL As System.Windows.Forms.TextBox + Friend WithEvents GroupBox15 As System.Windows.Forms.GroupBox + Friend WithEvents chkOFDBGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBPlot As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBTitle As System.Windows.Forms.CheckBox + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents gbOptions As System.Windows.Forms.GroupBox + Friend WithEvents chkCertification As System.Windows.Forms.CheckBox + Friend WithEvents chkCountry As System.Windows.Forms.CheckBox + Friend WithEvents chkTop250 As System.Windows.Forms.CheckBox + Friend WithEvents chkCrew As System.Windows.Forms.CheckBox + Friend WithEvents chkMusicBy As System.Windows.Forms.CheckBox + Friend WithEvents chkFullCrew As System.Windows.Forms.CheckBox + Friend WithEvents chkFullCast As System.Windows.Forms.CheckBox + Friend WithEvents chkProducers As System.Windows.Forms.CheckBox + Friend WithEvents chkWriters As System.Windows.Forms.CheckBox + Friend WithEvents chkStudio As System.Windows.Forms.CheckBox + Friend WithEvents chkRuntime As System.Windows.Forms.CheckBox + Friend WithEvents chkPlot As System.Windows.Forms.CheckBox + Friend WithEvents chkOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkDirector As System.Windows.Forms.CheckBox + Friend WithEvents chkTagline As System.Windows.Forms.CheckBox + Friend WithEvents chkCast As System.Windows.Forms.CheckBox + Friend WithEvents chkVotes As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailer As System.Windows.Forms.CheckBox + Friend WithEvents chkRating As System.Windows.Forms.CheckBox + Friend WithEvents chkRelease As System.Windows.Forms.CheckBox + Friend WithEvents chkMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkYear As System.Windows.Forms.CheckBox + Friend WithEvents chkTitle As System.Windows.Forms.CheckBox + +End Class diff --git a/Addons/scraper.OFDB.Data/frmInfoSettingsHolder.resx b/Addons/scraper.OFDB.Data/frmInfoSettingsHolder.resx new file mode 100644 index 0000000..1a3b6b2 --- /dev/null +++ b/Addons/scraper.OFDB.Data/frmInfoSettingsHolder.resx @@ -0,0 +1,193 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/frmInfoSettingsHolder.vb b/Addons/scraper.OFDB.Data/frmInfoSettingsHolder.vb new file mode 100644 index 0000000..21a3d0b --- /dev/null +++ b/Addons/scraper.OFDB.Data/frmInfoSettingsHolder.vb @@ -0,0 +1,237 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCertification_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCertification.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCrew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkDirector_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDirector.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFullCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFullCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFullCrew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFullCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + + Me.chkProducers.Enabled = Me.chkFullCrew.Checked + Me.chkMusicBy.Enabled = Me.chkFullCrew.Checked + Me.chkCrew.Enabled = Me.chkFullCrew.Checked + + If Not Me.chkFullCrew.Checked Then + Me.chkProducers.Checked = False + Me.chkMusicBy.Checked = False + Me.chkCrew.Checked = False + End If + End Sub + + Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMusicBy_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMusicBy.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBPlot.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPlot.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkProducers_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkProducers.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTop250_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTop250.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkWriters_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkWriters.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.chkOFDBGenre.Text = Master.eLang.GetString(1, "Use OFDB Genre") + Me.chkOFDBPlot.Text = Master.eLang.GetString(2, "Use OFDB Plot") + Me.chkOFDBOutline.Text = Master.eLang.GetString(3, "Use OFDB Outline") + Me.chkOFDBTitle.Text = Master.eLang.GetString(4, "Use OFDB Title") + Me.Label18.Text = Master.eLang.GetString(5, "IMDB Mirror:") + Me.gbOptions.Text = Master.eLang.GetString(6, "Scraper Fields - Scraper specific") + Me.chkCrew.Text = Master.eLang.GetString(391, "Other Crew", True) + Me.chkMusicBy.Text = Master.eLang.GetString(392, "Music By", True) + Me.chkProducers.Text = Master.eLang.GetString(393, "Producers", True) + Me.chkWriters.Text = Master.eLang.GetString(394, "Writers", True) + Me.chkStudio.Text = Master.eLang.GetString(395, "Studio", True) + Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime", True) + Me.chkPlot.Text = Master.eLang.GetString(65, "Plot", True) + Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline", True) + Me.chkGenre.Text = Master.eLang.GetString(20, "Genres", True) + Me.chkDirector.Text = Master.eLang.GetString(62, "Director", True) + Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline", True) + Me.chkCast.Text = Master.eLang.GetString(398, "Cast", True) + Me.chkVotes.Text = Master.eLang.GetString(399, "Votes", True) + Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer", True) + Me.chkRating.Text = Master.eLang.GetString(400, "Rating", True) + Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date", True) + Me.chkMPAA.Text = Master.eLang.GetString(401, "MPAA", True) + Me.chkYear.Text = Master.eLang.GetString(278, "Year", True) + Me.chkTitle.Text = Master.eLang.GetString(21, "Title", True) + Me.chkCertification.Text = Master.eLang.GetString(722, "Certification", True) + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + Me.chkCountry.Text = Master.eLang.GetString(301, "Country", True) + Me.chkFullCast.Text = Master.eLang.GetString(512, "Scrape Full Cast", True) + Me.chkFullCrew.Text = Master.eLang.GetString(513, "Scrape Full Crew", True) + Me.chkTop250.Text = Master.eLang.GetString(868, "Top250", True) + Me.GroupBox30.Text = Master.eLang.GetString(106, "IMDB") + Me.GroupBox15.Text = Master.eLang.GetString(107, "OFDB (German)") + End Sub + + Private Sub txtIMDBURL_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtIMDBURL.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/frmMediaSettingsHolder.Designer.vb b/Addons/scraper.OFDB.Data/frmMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..2c09e78 --- /dev/null +++ b/Addons/scraper.OFDB.Data/frmMediaSettingsHolder.Designer.vb @@ -0,0 +1,524 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMediaSettingsHolder)) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.cbActorThumbsSize = New System.Windows.Forms.ComboBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.cbManualETSize = New System.Windows.Forms.ComboBox() + Me.grpSaveFanart = New System.Windows.Forms.GroupBox() + Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() + Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkUseMPDB = New System.Windows.Forms.CheckBox() + Me.chkUseTMDB = New System.Windows.Forms.CheckBox() + Me.chkUseIMPA = New System.Windows.Forms.CheckBox() + Me.chkScrapePoster = New System.Windows.Forms.CheckBox() + Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.txtTimeout = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() + Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() + Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.grpSaveFanart.SuspendLayout() + Me.GroupBox9.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.GroupBox3) + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Panel2) + Me.pnlSettings.Location = New System.Drawing.Point(12, 4) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 94 + Me.PictureBox1.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.GroupBox6) + Me.GroupBox3.Controls.Add(Me.GroupBox4) + Me.GroupBox3.Controls.Add(Me.grpSaveFanart) + Me.GroupBox3.Controls.Add(Me.GroupBox9) + Me.GroupBox3.Controls.Add(Me.chkScrapePoster) + Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(15, 31) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(587, 177) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Images" + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.cbActorThumbsSize) + Me.GroupBox6.Location = New System.Drawing.Point(374, 98) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(160, 73) + Me.GroupBox6.TabIndex = 5 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Actor Thumbs Size:" + ' + 'cbActorThumbsSize + ' + Me.cbActorThumbsSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbActorThumbsSize.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbActorThumbsSize.FormattingEnabled = True + Me.cbActorThumbsSize.Items.AddRange(New Object() {"SY275_SX400", "SY720_SX1080", "SY1080_SX1920"}) + Me.cbActorThumbsSize.Location = New System.Drawing.Point(21, 35) + Me.cbActorThumbsSize.Name = "cbActorThumbsSize" + Me.cbActorThumbsSize.Size = New System.Drawing.Size(121, 21) + Me.cbActorThumbsSize.TabIndex = 0 + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.cbManualETSize) + Me.GroupBox4.Location = New System.Drawing.Point(374, 11) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(160, 80) + Me.GroupBox4.TabIndex = 4 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "TMDB Extrathumbs Size:" + ' + 'cbManualETSize + ' + Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbManualETSize.Enabled = False + Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbManualETSize.FormattingEnabled = True + Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) + Me.cbManualETSize.Location = New System.Drawing.Point(21, 35) + Me.cbManualETSize.Name = "cbManualETSize" + Me.cbManualETSize.Size = New System.Drawing.Size(121, 21) + Me.cbManualETSize.TabIndex = 0 + ' + 'grpSaveFanart + ' + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) + Me.grpSaveFanart.Enabled = False + Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) + Me.grpSaveFanart.Name = "grpSaveFanart" + Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) + Me.grpSaveFanart.TabIndex = 2 + Me.grpSaveFanart.TabStop = False + Me.grpSaveFanart.Text = "Save Fanart In:" + ' + 'optFanartFolderExtraFanart + ' + Me.optFanartFolderExtraFanart.AutoSize = True + Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) + Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" + Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) + Me.optFanartFolderExtraFanart.TabIndex = 1 + Me.optFanartFolderExtraFanart.TabStop = True + Me.optFanartFolderExtraFanart.Text = "\extrafanart" + Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True + ' + 'optFanartFolderExtraThumbs + ' + Me.optFanartFolderExtraThumbs.AutoSize = True + Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) + Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" + Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) + Me.optFanartFolderExtraThumbs.TabIndex = 0 + Me.optFanartFolderExtraThumbs.TabStop = True + Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" + Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkUseMPDB) + Me.GroupBox9.Controls.Add(Me.chkUseTMDB) + Me.GroupBox9.Controls.Add(Me.chkUseIMPA) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(165, 11) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(160, 80) + Me.GroupBox9.TabIndex = 3 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Get Images From:" + ' + 'chkUseMPDB + ' + Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) + Me.chkUseMPDB.Name = "chkUseMPDB" + Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) + Me.chkUseMPDB.TabIndex = 2 + Me.chkUseMPDB.Text = "MoviePosterDB.com" + Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.UseVisualStyleBackColor = True + ' + 'chkUseTMDB + ' + Me.chkUseTMDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseTMDB.Location = New System.Drawing.Point(6, 18) + Me.chkUseTMDB.Name = "chkUseTMDB" + Me.chkUseTMDB.Size = New System.Drawing.Size(149, 19) + Me.chkUseTMDB.TabIndex = 0 + Me.chkUseTMDB.Text = "themoviedb.org" + Me.chkUseTMDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseTMDB.UseVisualStyleBackColor = True + ' + 'chkUseIMPA + ' + Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) + Me.chkUseIMPA.Name = "chkUseIMPA" + Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) + Me.chkUseIMPA.TabIndex = 1 + Me.chkUseIMPA.Text = "IMPAwards.com" + Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.UseVisualStyleBackColor = True + ' + 'chkScrapePoster + ' + Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) + Me.chkScrapePoster.Name = "chkScrapePoster" + Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) + Me.chkScrapePoster.TabIndex = 0 + Me.chkScrapePoster.Text = "Get Posters" + Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.UseVisualStyleBackColor = True + ' + 'chkScrapeFanart + ' + Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) + Me.chkScrapeFanart.Name = "chkScrapeFanart" + Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) + Me.chkScrapeFanart.TabIndex = 1 + Me.chkScrapeFanart.Text = "Get Fanart" + Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.GroupBox5) + Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox1.Controls.Add(Me.Label23) + Me.GroupBox1.Controls.Add(Me.txtTimeout) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(15, 214) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(587, 112) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Trailers" + Me.GroupBox1.UseCompatibleTextRendering = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) + Me.GroupBox5.Controls.Add(Me.Label2) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) + Me.GroupBox5.Location = New System.Drawing.Point(374, 12) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(161, 94) + Me.GroupBox5.TabIndex = 4 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Youtube/TMDB Trailer:" + ' + 'cbTrailerTMDBPref + ' + Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerTMDBPref.Enabled = False + Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTrailerTMDBPref.FormattingEnabled = True + Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) + Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" + Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) + Me.cbTrailerTMDBPref.TabIndex = 1 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label2.Location = New System.Drawing.Point(26, 26) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(111, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Preferred Language:" + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label23.Location = New System.Drawing.Point(21, 43) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(51, 13) + Me.Label23.TabIndex = 1 + Me.Label23.Text = "Timeout:" + ' + 'txtTimeout + ' + Me.txtTimeout.Enabled = False + Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTimeout.Location = New System.Drawing.Point(82, 39) + Me.txtTimeout.Name = "txtTimeout" + Me.txtTimeout.Size = New System.Drawing.Size(50, 22) + Me.txtTimeout.TabIndex = 2 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) + Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(165, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(161, 94) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Supported Sites:" + ' + 'chkTrailerTMDBXBMC + ' + Me.chkTrailerTMDBXBMC.AutoSize = True + Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) + Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" + Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) + Me.chkTrailerTMDBXBMC.TabIndex = 1 + Me.chkTrailerTMDBXBMC.Text = "XBMC Format" + Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True + ' + 'chkTrailerIMDB + ' + Me.chkTrailerIMDB.AutoSize = True + Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) + Me.chkTrailerIMDB.Name = "chkTrailerIMDB" + Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) + Me.chkTrailerIMDB.TabIndex = 2 + Me.chkTrailerIMDB.Text = "IMDB" + Me.chkTrailerIMDB.UseVisualStyleBackColor = True + ' + 'chkTrailerTMDB + ' + Me.chkTrailerTMDB.AutoSize = True + Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) + Me.chkTrailerTMDB.Name = "chkTrailerTMDB" + Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) + Me.chkTrailerTMDB.TabIndex = 0 + Me.chkTrailerTMDB.Text = "Youtube/TMDB" + Me.chkTrailerTMDB.UseVisualStyleBackColor = True + ' + 'Panel2 + ' + Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Controls.Add(Me.btnDown) + Me.Panel2.Controls.Add(Me.btnUp) + Me.Panel2.Controls.Add(Me.cbEnabled) + Me.Panel2.Location = New System.Drawing.Point(0, 0) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(1125, 25) + Me.Panel2.TabIndex = 0 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(500, 7) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 12) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'frmMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.grpSaveFanart.ResumeLayout(False) + Me.grpSaveFanart.PerformLayout() + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents chkScrapeFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkScrapePoster As System.Windows.Forms.CheckBox + Friend WithEvents chkDownloadTrailer As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox9 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseMPDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMPA As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Panel2 As System.Windows.Forms.Panel + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Label23 As System.Windows.Forms.Label + Friend WithEvents txtTimeout As System.Windows.Forms.TextBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents grpSaveFanart As System.Windows.Forms.GroupBox + Friend WithEvents optFanartFolderExtraFanart As System.Windows.Forms.RadioButton + Friend WithEvents optFanartFolderExtraThumbs As System.Windows.Forms.RadioButton + Friend WithEvents chkTrailerIMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDBXBMC As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents cbManualETSize As System.Windows.Forms.ComboBox + Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox + Friend WithEvents cbTrailerTMDBPref As System.Windows.Forms.ComboBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents cbActorThumbsSize As System.Windows.Forms.ComboBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/frmMediaSettingsHolder.resx b/Addons/scraper.OFDB.Data/frmMediaSettingsHolder.resx new file mode 100644 index 0000000..023cf14 --- /dev/null +++ b/Addons/scraper.OFDB.Data/frmMediaSettingsHolder.resx @@ -0,0 +1,237 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + 6bKz54D4Hdc/dStsxIkAAAAAAElFTkSuQmCC +</value> + </data> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/frmMediaSettingsHolder.vb b/Addons/scraper.OFDB.Data/frmMediaSettingsHolder.vb new file mode 100644 index 0000000..401240a --- /dev/null +++ b/Addons/scraper.OFDB.Data/frmMediaSettingsHolder.vb @@ -0,0 +1,172 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order + 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order - 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Sub CheckTrailer() + Me.txtTimeout.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerIMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDBXBMC.Enabled = Me.chkDownloadTrailer.Checked + If Not Me.chkDownloadTrailer.Checked Then + Me.txtTimeout.Text = "2" + Me.chkTrailerTMDB.Checked = False + Me.chkTrailerIMDB.Checked = False + Me.chkTrailerTMDBXBMC.Checked = False + End If + End Sub + + Private Sub chkDownloadTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDownloadTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + CheckTrailer() + End Sub + + Private Sub chkTrailerTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDB.CheckedChanged + chkTrailerTMDBXBMC.Enabled = chkTrailerTMDB.Checked + cbTrailerTMDBPref.Enabled = chkTrailerTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerIMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerIMDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerTMDBXBMC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDBXBMC.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkScrapeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapeFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + grpSaveFanart.Enabled = chkScrapeFanart.Checked + End Sub + + Private Sub chkScrapePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapePoster.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMPA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseIMPA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseMPDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseMPDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseTMDB.CheckedChanged + cbManualETSize.Enabled = chkUseTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Sub SetUp() + Me.txtTimeout.Text = Master.eSettings.TrailerTimeout.ToString + Me.Label23.Text = Master.eLang.GetString(7, "Timeout:") + Me.GroupBox2.Text = Master.eLang.GetString(8, "Supported Sites:") + Me.GroupBox9.Text = Master.eLang.GetString(9, "Get Images From:") + Me.grpSaveFanart.Text = Master.eLang.GetString(8001, "Save Fanart In:") + Me.chkDownloadTrailer.Text = Master.eLang.GetString(529, "Enable Trailer Support", True) + Me.Label3.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkScrapePoster.Text = Master.eLang.GetString(101, "Get Posters") + Me.chkScrapeFanart.Text = Master.eLang.GetString(102, "Get Fanart") + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + Me.GroupBox3.Text = Master.eLang.GetString(497, "Images", True) + Me.GroupBox4.Text = Master.eLang.GetString(108, "TMDB Extrathumbs Size:") + Me.GroupBox1.Text = Master.eLang.GetString(109, "Trailers") + Me.GroupBox5.Text = Master.eLang.GetString(110, "Youtube/TMDB Trailer:") + Me.chkTrailerTMDBXBMC.Text = Master.eLang.GetString(111, "XBMC Format") + Me.Label2.Text = Master.eLang.GetString(112, "Preferred language") + Me.grpSaveFanart.Text = Master.eLang.GetString(113, "Save Fanart In:") + End Sub + + Private Sub txtTimeout_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTimeout.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraThumbs_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraThumbs.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbManualETSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbManualETSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbActorThumbsSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbActorThumbsSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTrailerTMDBPref_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbTrailerTMDBPref.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/frmTVInfoSettingsHolder.Designer.vb b/Addons/scraper.OFDB.Data/frmTVInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..4a8cc4e --- /dev/null +++ b/Addons/scraper.OFDB.Data/frmTVInfoSettingsHolder.Designer.vb @@ -0,0 +1,169 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTVInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTVInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'frmTVInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTVInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.OFDB.Data/frmTVInfoSettingsHolder.resx b/Addons/scraper.OFDB.Data/frmTVInfoSettingsHolder.resx new file mode 100644 index 0000000..0950d0f --- /dev/null +++ b/Addons/scraper.OFDB.Data/frmTVInfoSettingsHolder.resx @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/frmTVInfoSettingsHolder.vb b/Addons/scraper.OFDB.Data/frmTVInfoSettingsHolder.vb new file mode 100644 index 0000000..98761ce --- /dev/null +++ b/Addons/scraper.OFDB.Data/frmTVInfoSettingsHolder.vb @@ -0,0 +1,80 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTVInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + orderChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + 'Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/frmTVMediaSettingsHolder.Designer.vb b/Addons/scraper.OFDB.Data/frmTVMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..f5cb735 --- /dev/null +++ b/Addons/scraper.OFDB.Data/frmTVMediaSettingsHolder.Designer.vb @@ -0,0 +1,170 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTVMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTVMediaSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.InitialImage = CType(resources.GetObject("PictureBox1.InitialImage"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'frmTVMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTVMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.OFDB.Data/frmTVMediaSettingsHolder.resx b/Addons/scraper.OFDB.Data/frmTVMediaSettingsHolder.resx new file mode 100644 index 0000000..d47391f --- /dev/null +++ b/Addons/scraper.OFDB.Data/frmTVMediaSettingsHolder.resx @@ -0,0 +1,197 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.InitialImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEAAA + CxABrSO9dQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/frmTVMediaSettingsHolder.vb b/Addons/scraper.OFDB.Data/frmTVMediaSettingsHolder.vb new file mode 100644 index 0000000..06928ef --- /dev/null +++ b/Addons/scraper.OFDB.Data/frmTVMediaSettingsHolder.vb @@ -0,0 +1,80 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTVMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + orderChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + 'Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/packages.config b/Addons/scraper.OFDB.Data/packages.config new file mode 100644 index 0000000..053d0bc6 --- /dev/null +++ b/Addons/scraper.OFDB.Data/packages.config @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="SharpZipLib" version="0.86.0" /> + <package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net35" /> +</packages> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/scraper.OFDB.Data.vbproj b/Addons/scraper.OFDB.Data/scraper.OFDB.Data.vbproj new file mode 100644 index 0000000..b5d495f --- /dev/null +++ b/Addons/scraper.OFDB.Data/scraper.OFDB.Data.vbproj @@ -0,0 +1,342 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{39C49E1A-75BA-4AD1-9286-58E83D22BC1E}</ProjectGuid> + <OutputType>Library</OutputType> + <RootNamespace>EmberScraperModule</RootNamespace> + <AssemblyName>scraper.OFDB.Data</AssemblyName> + <FileAlignment>512</FileAlignment> + <MyType>Windows</MyType> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <OptionExplicit>On</OptionExplicit> + <OptionCompare>Binary</OptionCompare> + <OptionStrict>On</OptionStrict> + <OptionInfer>On</OptionInfer> + <FileUpgradeFlags> + </FileUpgradeFlags> + <OldToolsVersion>3.5</OldToolsVersion> + <UpgradeBackupLocation /> + <PublishUrl>publish\</PublishUrl> + <Install>true</Install> + <InstallFrom>Disk</InstallFrom> + <UpdateEnabled>false</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>false</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> + <RestorePackages>true</RestorePackages> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> + <DebugSymbols>true</DebugSymbols> + <DefineDebug>true</DefineDebug> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Dev\Modules\</OutputPath> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Deploy\Modules\</OutputPath> + <Optimize>true</Optimize> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <ItemGroup> + <Reference Include="ICSharpCode.SharpZipLib"> + <HintPath>..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Data.SQLite"> + <HintPath>..\..\packages\System.Data.SQLite.1.0.84.0\lib\net20\System.Data.SQLite.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="System.Data.SQLite.Linq"> + <HintPath>..\..\packages\System.Data.SQLite.1.0.84.0\lib\net20\System.Data.SQLite.Linq.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Import Include="Microsoft.VisualBasic" /> + <Import Include="System" /> + <Import Include="System.Collections" /> + <Import Include="System.Collections.Generic" /> + <Import Include="System.Diagnostics" /> + <Import Include="System.Drawing" /> + <Import Include="System.Linq" /> + <Import Include="System.Web" /> + <Import Include="System.Windows.Forms" /> + <Import Include="System.Xml.Linq" /> + </ItemGroup> + <ItemGroup> + <Compile Include="frmTVMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmTVMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTVMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmTVInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmTVInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTVInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperTVNativeModule.vb" /> + <Compile Include="Scraper\clsScrapeTrailers.vb" /> + <Compile Include="Scraper\clsScrapeImages.vb" /> + <Compile Include="Scraper\clsScrapeIMDB.vb" /> + <Compile Include="Scraper\clsScrapeIMPA.vb" /> + <Compile Include="Scraper\clsScrapeMPDB.vb" /> + <Compile Include="Scraper\clsScrapeOFDB.vb" /> + <Compile Include="Scraper\clsScrapeTMDB.vb" /> + <Compile Include="Scraper\clsScrapeYouTube.vb" /> + <Compile Include="Scraper\dlgIMDBSearchResults.Designer.vb"> + <DependentUpon>dlgIMDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgIMDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgImgSelect.Designer.vb"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgImgSelect.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailer.Designer.vb"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailer.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.Designer.vb"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="My Project\AssemblyInfo.vb" /> + <Compile Include="My Project\Application.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Application.myapp</DependentUpon> + </Compile> + <Compile Include="My Project\Resources.Designer.vb"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> + <Compile Include="My Project\Settings.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Settings.settings</DependentUpon> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + </Compile> + <Compile Include="frmInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperMovieNativeModule.vb" /> + <Compile Include="TVScraper\clsScrapeTVDB.vb" /> + <Compile Include="TVScraper\dlgTVChangeEp.Designer.vb"> + <DependentUpon>dlgTVChangeEp.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVChangeEp.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVDBSearchResults.Designer.vb"> + <DependentUpon>dlgTVDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVEpisodePoster.Designer.vb"> + <DependentUpon>dlgTVEpisodePoster.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVEpisodePoster.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVImageSelect.Designer.vb"> + <DependentUpon>dlgTVImageSelect.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVImageSelect.vb"> + <SubType>Form</SubType> + </Compile> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="frmTVMediaSettingsHolder.resx"> + <DependentUpon>frmTVMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTVInfoSettingsHolder.resx"> + <DependentUpon>frmTVInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgIMDBSearchResults.resx"> + <DependentUpon>dlgIMDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgImgSelect.resx"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailer.resx"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailerFormat.resx"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmMediaSettingsHolder.resx"> + <DependentUpon>frmMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmInfoSettingsHolder.resx"> + <DependentUpon>frmInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="My Project\Resources.resx"> + <Generator>VbMyResourcesResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.vb</LastGenOutput> + <CustomToolNamespace>My.Resources</CustomToolNamespace> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVChangeEp.resx"> + <DependentUpon>dlgTVChangeEp.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVDBSearchResults.resx"> + <DependentUpon>dlgTVDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVEpisodePoster.resx"> + <DependentUpon>dlgTVEpisodePoster.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVImageSelect.resx"> + <DependentUpon>dlgTVImageSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <None Include="My Project\Application.myapp"> + <Generator>MyApplicationCodeGenerator</Generator> + <LastGenOutput>Application.Designer.vb</LastGenOutput> + </None> + <None Include="My Project\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <CustomToolNamespace>My</CustomToolNamespace> + <LastGenOutput>Settings.Designer.vb</LastGenOutput> + </None> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\EmberAPI\EmberAPI.vbproj"> + <Project>{208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}</Project> + <Name>EmberAPI</Name> + <Private>False</Private> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="Langs\scraper.EmberCore.Debug_%28db_DB%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.English_%28en_US%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.English_%28en_US%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.German_%28de_DE%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.German_%28de_DE%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.Norwegian_%28no_NO%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.Norwegian_%28no_NO%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="x64\SQLite.Interop.dll"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + <Content Include="x86\SQLite.Interop.dll"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <PropertyGroup> + <PreBuildEvent> + </PreBuildEvent> + </PropertyGroup> + <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> +</Project> \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/scraperMovieNativeModule.vb b/Addons/scraper.OFDB.Data/scraperMovieNativeModule.vb new file mode 100644 index 0000000..6889071 --- /dev/null +++ b/Addons/scraper.OFDB.Data/scraperMovieNativeModule.vb @@ -0,0 +1,702 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO + +Imports EmberAPI + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberNativeScraperModule + Implements Interfaces.EmberMovieScraperModule + + +#Region "Fields" + + Public Shared ConfigOptions As New Structures.ScrapeOptions + Public Shared ConfigScrapeModifier As New Structures.ScrapeModifier + Public Shared _AssemblyName As String + + Private dFImgSelect As dlgImgSelect = Nothing + + ''' <summary> + ''' Scraping Here + ''' </summary> + ''' <remarks></remarks> + Private IMDB As New IMDB.Scraper + Private MySettings As New _MySettings + Private _Name As String = "Ember Native Movie Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmInfoSettingsHolder + Private _setupPost As frmMediaSettingsHolder + +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberMovieScraperModule.ModuleSettingsChanged + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsScraper + Get + Return True + End Get + End Property + + ReadOnly Property ModuleName() As String Implements Interfaces.EmberMovieScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberMovieScraperModule.ModuleVersion + Get + Return FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Property PostScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Property ScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean Implements Interfaces.EmberMovieScraperModule.QueryPostScraperCapabilities + Select Case cap + Case Enums.PostScraperCapabilities.Fanart + If MySettings.UseTMDB Then Return True + Case Enums.PostScraperCapabilities.Poster + If MySettings.UseIMPA OrElse MySettings.UseMPDB OrElse MySettings.UseTMDB Then Return True + Case Enums.PostScraperCapabilities.Trailer + If MySettings.DownloadTrailers Then Return True + End Select + Return False + End Function + + Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.DownloadTrailer + Using dTrailer As New dlgTrailer + dTrailer.IMDBURL = MySettings.IMDBURL + sURL = dTrailer.ShowDialog(DBMovie.Movie.IMDBID, DBMovie.Filename) + End Using + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef studio As List(Of String)) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.GetMovieStudio + Dim IMDB As New IMDB.Scraper + IMDB.UseOFDBTitle = MySettings.UseOFDBTitle + IMDB.UseOFDBOutline = MySettings.UseOFDBOutline + IMDB.UseOFDBPlot = MySettings.UseOFDBPlot + IMDB.UseOFDBGenre = MySettings.UseOFDBGenre + IMDB.IMDBURL = MySettings.IMDBURL + studio = IMDB.GetMovieStudios(DBMovie.Movie.IMDBID) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + + Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberMovieScraperModule.Init + _AssemblyName = sAssemblyName + LoadSettings() + End Sub + + Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupPostScraper + Dim Spanel As New Containers.SettingsPanel + _setupPost = New frmMediaSettingsHolder + LoadSettings() + _setupPost.cbEnabled.Checked = _PostScraperEnabled + _setupPost.chkTrailerIMDB.Checked = MySettings.UseIMDBTrailer + _setupPost.chkTrailerTMDB.Checked = MySettings.UseTMDBTrailer + _setupPost.cbTrailerTMDBPref.Text = MySettings.UseTMDBTrailerPref + _setupPost.chkTrailerTMDBXBMC.Checked = MySettings.UseTMDBTrailerXBMC + _setupPost.chkScrapePoster.Checked = ConfigScrapeModifier.Poster + _setupPost.chkScrapeFanart.Checked = ConfigScrapeModifier.Fanart + _setupPost.chkUseTMDB.Checked = MySettings.UseTMDB + _setupPost.chkUseIMPA.Checked = MySettings.UseIMPA + _setupPost.chkUseMPDB.Checked = MySettings.UseMPDB + _setupPost.cbManualETSize.Text = MySettings.ManualETSize + _setupPost.cbActorThumbsSize.Text = MySettings.ActorThumbsSize + _setupPost.txtTimeout.Text = MySettings.TrailerTimeout.ToString + _setupPost.chkDownloadTrailer.Checked = MySettings.DownloadTrailers + _setupPost.CheckTrailer() + _setupPost.orderChanged() + Spanel.Name = String.Concat(Me._Name, "PostScraper") + Spanel.Text = Master.eLang.GetString(104, "Ember Native Movie Scrapers") + Spanel.Prefix = "NativeMovieMedia_" + Spanel.Order = 110 + Spanel.Parent = "pnlMovieMedia" + Spanel.Type = Master.eLang.GetString(36, "Movies", True) + Spanel.ImageIndex = If(Me._PostScraperEnabled, 9, 10) + Spanel.Panel = Me._setupPost.pnlSettings + + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + Return Spanel + End Function + Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmInfoSettingsHolder + LoadSettings() + _setup.cbEnabled.Checked = _ScraperEnabled + _setup.chkTitle.Checked = ConfigOptions.bTitle + _setup.chkYear.Checked = ConfigOptions.bYear + _setup.chkMPAA.Checked = ConfigOptions.bMPAA + _setup.chkRelease.Checked = ConfigOptions.bRelease + _setup.chkRuntime.Checked = ConfigOptions.bRuntime + _setup.chkRating.Checked = ConfigOptions.bRating + _setup.chkVotes.Checked = ConfigOptions.bVotes + _setup.chkStudio.Checked = ConfigOptions.bStudio + _setup.chkTagline.Checked = ConfigOptions.bTagline + _setup.chkOutline.Checked = ConfigOptions.bOutline + _setup.chkPlot.Checked = ConfigOptions.bPlot + _setup.chkCast.Checked = ConfigOptions.bCast + _setup.chkDirector.Checked = ConfigOptions.bDirector + _setup.chkWriters.Checked = ConfigOptions.bWriters + _setup.chkProducers.Checked = ConfigOptions.bProducers + _setup.chkGenre.Checked = ConfigOptions.bGenre + _setup.chkTrailer.Checked = ConfigOptions.bTrailer + _setup.chkMusicBy.Checked = ConfigOptions.bMusicBy + _setup.chkCrew.Checked = ConfigOptions.bOtherCrew + _setup.chkCountry.Checked = ConfigOptions.bCountry + _setup.chkTop250.Checked = ConfigOptions.bTop250 + _setup.chkCertification.Checked = ConfigOptions.bCert + _setup.chkOFDBTitle.Checked = MySettings.UseOFDBTitle + _setup.chkOFDBOutline.Checked = MySettings.UseOFDBOutline + _setup.chkOFDBPlot.Checked = MySettings.UseOFDBPlot + _setup.chkOFDBGenre.Checked = MySettings.UseOFDBGenre + _setup.chkFullCast.Checked = ConfigOptions.bFullCast + _setup.chkFullCrew.Checked = ConfigOptions.bFullCrew + + If String.IsNullOrEmpty(MySettings.IMDBURL) Then + MySettings.IMDBURL = "akas.imdb.com" + End If + _setup.txtIMDBURL.Text = MySettings.IMDBURL + _setup.orderChanged() + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(104, "Ember Native Movie Scrapers") + SPanel.Prefix = "NativeMovieInfo_" + SPanel.Order = 110 + SPanel.Parent = "pnlMovieData" + SPanel.Type = Master.eLang.GetString(36, "Movies", True) + SPanel.ImageIndex = If(_ScraperEnabled, 9, 10) + SPanel.Panel = _setup.pnlSettings + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + Return SPanel + End Function + Sub LoadSettings() + ConfigOptions.bTitle = AdvancedSettings.GetBooleanSetting("DoTitle", True) + ConfigOptions.bYear = AdvancedSettings.GetBooleanSetting("DoYear", True) + ConfigOptions.bMPAA = AdvancedSettings.GetBooleanSetting("DoMPAA", True) + ConfigOptions.bRelease = AdvancedSettings.GetBooleanSetting("DoRelease", True) + ConfigOptions.bRuntime = AdvancedSettings.GetBooleanSetting("DoRuntime", True) + ConfigOptions.bRating = AdvancedSettings.GetBooleanSetting("DoRating", True) + ConfigOptions.bVotes = AdvancedSettings.GetBooleanSetting("DoVotes", True) + ConfigOptions.bStudio = AdvancedSettings.GetBooleanSetting("DoStudio", True) + ConfigOptions.bTagline = AdvancedSettings.GetBooleanSetting("DoTagline", True) + ConfigOptions.bOutline = AdvancedSettings.GetBooleanSetting("DoOutline", True) + ConfigOptions.bPlot = AdvancedSettings.GetBooleanSetting("DoPlot", True) + ConfigOptions.bCast = AdvancedSettings.GetBooleanSetting("DoCast", True) + ConfigOptions.bDirector = AdvancedSettings.GetBooleanSetting("DoDirector", True) + ConfigOptions.bWriters = AdvancedSettings.GetBooleanSetting("DoWriters", True) + ConfigOptions.bProducers = AdvancedSettings.GetBooleanSetting("DoProducers", True) + ConfigOptions.bGenre = AdvancedSettings.GetBooleanSetting("DoGenres", True) + ConfigOptions.bTrailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + ConfigOptions.bMusicBy = AdvancedSettings.GetBooleanSetting("DoMusic", True) + ConfigOptions.bOtherCrew = AdvancedSettings.GetBooleanSetting("DoOtherCrews", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("DoFullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("DoFullCrews", True) + ConfigOptions.bTop250 = AdvancedSettings.GetBooleanSetting("DoTop250", True) + ConfigOptions.bCountry = AdvancedSettings.GetBooleanSetting("DoCountry", True) + ConfigOptions.bCert = AdvancedSettings.GetBooleanSetting("DoCert", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("FullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("FullCrew", True) + + MySettings.IMDBURL = AdvancedSettings.GetSetting("IMDBURL", "akas.imdb.com") + MySettings.UseOFDBTitle = AdvancedSettings.GetBooleanSetting("UseOFDBTitle", False) + MySettings.UseOFDBOutline = AdvancedSettings.GetBooleanSetting("UseOFDBOutline", False) + MySettings.UseOFDBPlot = AdvancedSettings.GetBooleanSetting("UseOFDBPlot", False) + MySettings.UseOFDBGenre = AdvancedSettings.GetBooleanSetting("UseOFDBGenre", False) + MySettings.DownloadTrailers = AdvancedSettings.GetBooleanSetting("DownloadTraliers", False) + + MySettings.TrailerTimeout = Convert.ToInt32(AdvancedSettings.GetSetting("TrailerTimeout", "10")) + MySettings.UseIMPA = AdvancedSettings.GetBooleanSetting("UseIMPA", False) + MySettings.UseMPDB = AdvancedSettings.GetBooleanSetting("UseMPDB", False) + MySettings.UseTMDB = AdvancedSettings.GetBooleanSetting("UseTMDB", True) + MySettings.UseIMDBTrailer = AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", True) + MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) + MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) + MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + MySettings.ActorThumbsSize = Convert.ToString(AdvancedSettings.GetSetting("ActorThumbsSize", "SY275_SX400")) + MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) + + ConfigScrapeModifier.DoSearch = True + ConfigScrapeModifier.Meta = True + ConfigScrapeModifier.NFO = True + ConfigScrapeModifier.Extra = True + ConfigScrapeModifier.Actors = True + + ConfigScrapeModifier.Poster = AdvancedSettings.GetBooleanSetting("DoPoster", True) + ConfigScrapeModifier.Fanart = AdvancedSettings.GetBooleanSetting("DoFanart", True) + ConfigScrapeModifier.Trailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + End Sub + + Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.PostScraper + 'LoadSettings() + Dim Poster As New Images + Dim Fanart As New Images + Dim pResults As Containers.ImgResult + Dim fResults As Containers.ImgResult + Dim tURL As String = String.Empty + Dim Trailer As New Trailers + LoadSettings() + Dim saveModifier As Structures.ScrapeModifier = Master.GlobalScrapeMod + Master.GlobalScrapeMod = Functions.ScrapeModifierAndAlso(Master.GlobalScrapeMod, ConfigScrapeModifier) + + Trailer.IMDBURL = MySettings.IMDBURL + Dim doSave As Boolean = False + If Master.GlobalScrapeMod.Poster AndAlso (MySettings.UseIMPA OrElse MySettings.UseMPDB OrElse MySettings.UseTMDB) Then + Poster.Clear() + If Poster.IsAllowedToDownload(DBMovie, Enums.ImageType.Posters) Then + pResults = New Containers.ImgResult + If ScrapeImages.GetPreferredImage(Poster, DBMovie.Movie.IMDBID, Enums.ImageType.Posters, pResults, DBMovie.Filename, False, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Poster.Image) Then + pResults.ImagePath = Poster.SaveAsPoster(DBMovie) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(76, "A poster of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size")) + Using dImgSelect As New dlgImgSelect + dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Posters) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + End Using + End If + End If + End If + End If + Dim didEts As Boolean + If Master.GlobalScrapeMod.Fanart AndAlso MySettings.UseTMDB Then + Fanart.Clear() + If Fanart.IsAllowedToDownload(DBMovie, Enums.ImageType.Fanart) Then + fResults = New Containers.ImgResult + didEts = True + If ScrapeImages.GetPreferredImage(Fanart, DBMovie.Movie.IMDBID, Enums.ImageType.Fanart, fResults, DBMovie.Filename, Master.GlobalScrapeMod.Extra, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Fanart.Image) Then + fResults.ImagePath = Fanart.SaveAsFanart(DBMovie) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) ' + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(78, "Fanart of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size:")) + + Using dImgSelect As New dlgImgSelect + dImgSelect.IMDBURL = MySettings.IMDBURL + fResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Fanart) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + End Using + End If + End If + End If + End If + If Master.GlobalScrapeMod.Trailer AndAlso MySettings.DownloadTrailers Then + tURL = Trailer.DownloadSingleTrailer(DBMovie.Filename, DBMovie.Movie.IMDBID, DBMovie.isSingle, DBMovie.Movie.Trailer) + If Not String.IsNullOrEmpty(tURL) Then + If tURL.Substring(0, 22) = "http://www.youtube.com" Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + DBMovie.Movie.Trailer = Replace(tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + DBMovie.Movie.Trailer = tURL + End If + ElseIf tURL.Substring(0, 7) = "http://" Then + DBMovie.Movie.Trailer = tURL + Else + DBMovie.TrailerPath = tURL + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.TrailerItem, True) + End If + End If + End If + If Master.GlobalScrapeMod.Extra Then + If Master.eSettings.AutoET AndAlso DBMovie.isSingle Then + Try + ScrapeImages.GetPreferredFAasET(DBMovie.Movie.IMDBID, DBMovie.Filename) + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.ThumbsItem, True) + Catch ex As Exception + End Try + End If + End If + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then + For Each act As MediaContainers.Person In DBMovie.Movie.Actors + Dim img As New Images + img.FromWeb(act.Thumb) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If + Next + End If + Master.GlobalScrapeMod = saveModifier + Return New Interfaces.ModuleResult With {.breakChain = False, .BoolProperty = didEts} + End Function + + Sub SaveSettings() + AdvancedSettings.SetBooleanSetting("DoFullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("DoFullCrews", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DoTitle", ConfigOptions.bTitle) + AdvancedSettings.SetBooleanSetting("DoYear", ConfigOptions.bYear) + AdvancedSettings.SetBooleanSetting("DoMPAA", ConfigOptions.bMPAA) + AdvancedSettings.SetBooleanSetting("DoRelease", ConfigOptions.bRelease) + AdvancedSettings.SetBooleanSetting("DoRuntime", ConfigOptions.bRuntime) + AdvancedSettings.SetBooleanSetting("DoRating", ConfigOptions.bRating) + AdvancedSettings.SetBooleanSetting("DoVotes", ConfigOptions.bVotes) + AdvancedSettings.SetBooleanSetting("DoStudio", ConfigOptions.bStudio) + AdvancedSettings.SetBooleanSetting("DoTagline", ConfigOptions.bTagline) + AdvancedSettings.SetBooleanSetting("DoOutline", ConfigOptions.bOutline) + AdvancedSettings.SetBooleanSetting("DoPlot", ConfigOptions.bPlot) + AdvancedSettings.SetBooleanSetting("DoCast", ConfigOptions.bCast) + AdvancedSettings.SetBooleanSetting("DoDirector", ConfigOptions.bDirector) + AdvancedSettings.SetBooleanSetting("DoWriters", ConfigOptions.bWriters) + AdvancedSettings.SetBooleanSetting("DoProducers", ConfigOptions.bProducers) + AdvancedSettings.SetBooleanSetting("DoGenres", ConfigOptions.bGenre) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigOptions.bTrailer) + AdvancedSettings.SetBooleanSetting("DoMusic", ConfigOptions.bMusicBy) + AdvancedSettings.SetBooleanSetting("DoOtherCrews", ConfigOptions.bOtherCrew) + AdvancedSettings.SetBooleanSetting("DoCountry", ConfigOptions.bCountry) + AdvancedSettings.SetBooleanSetting("DoTop250", ConfigOptions.bTop250) + AdvancedSettings.SetBooleanSetting("DoCert", ConfigOptions.bCert) + AdvancedSettings.SetSetting("IMDBURL", MySettings.IMDBURL) + + AdvancedSettings.SetBooleanSetting("FullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("FullCrew", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("UseOFDBTitle", MySettings.UseOFDBTitle) + AdvancedSettings.SetBooleanSetting("UseOFDBOutline", MySettings.UseOFDBOutline) + AdvancedSettings.SetBooleanSetting("UseOFDBPlot", MySettings.UseOFDBPlot) + AdvancedSettings.SetBooleanSetting("UseOFDBGenre", MySettings.UseOFDBGenre) + AdvancedSettings.SetBooleanSetting("DownloadTraliers", MySettings.DownloadTrailers) + + AdvancedSettings.SetSetting("TrailerTimeout", MySettings.TrailerTimeout.ToString) + AdvancedSettings.SetBooleanSetting("UseIMPA", MySettings.UseIMPA) + AdvancedSettings.SetBooleanSetting("UseMPDB", MySettings.UseMPDB) + AdvancedSettings.SetBooleanSetting("UseTMDB", MySettings.UseTMDB) + AdvancedSettings.SetBooleanSetting("UseIMDBTrailer", MySettings.UseIMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailer", MySettings.UseTMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", MySettings.UseTMDBTrailerXBMC) + + AdvancedSettings.SetSetting("ManualETSize", MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("ActorThumbsSize", MySettings.ActorThumbsSize.ToString) + AdvancedSettings.SetSetting("UseTMDBTrailerPref", MySettings.UseTMDBTrailerPref.ToString) + + AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) + AdvancedSettings.SetBooleanSetting("DoFanart", ConfigScrapeModifier.Fanart) + 'AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigScrapeModifier.Trailer) + End Sub + + Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupPostScraper + MySettings.DownloadTrailers = _setupPost.chkDownloadTrailer.Checked + MySettings.UseIMDBTrailer = _setupPost.chkTrailerIMDB.Checked + MySettings.UseTMDBTrailer = _setupPost.chkTrailerTMDB.Checked + MySettings.UseTMDBTrailerXBMC = _setupPost.chkTrailerTMDBXBMC.Checked + MySettings.TrailerTimeout = Convert.ToInt32(_setupPost.txtTimeout.Text) + MySettings.UseTMDB = _setupPost.chkUseTMDB.Checked + MySettings.UseIMPA = _setupPost.chkUseIMPA.Checked + MySettings.UseMPDB = _setupPost.chkUseMPDB.Checked + MySettings.ManualETSize = _setupPost.cbManualETSize.Text + MySettings.ActorThumbsSize = _setupPost.cbActorThumbsSize.Text + MySettings.UseTMDBTrailerPref = _setupPost.cbTrailerTMDBPref.Text + ConfigScrapeModifier.Poster = _setupPost.chkScrapePoster.Checked + ConfigScrapeModifier.Fanart = _setupPost.chkScrapeFanart.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + RemoveHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + _setupPost.Dispose() + End If + End Sub + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupScraper + If Not String.IsNullOrEmpty(_setup.txtIMDBURL.Text) Then + MySettings.IMDBURL = Strings.Replace(_setup.txtIMDBURL.Text, "http://", String.Empty) + Else + MySettings.IMDBURL = "akas.imdb.com" + End If + MySettings.UseOFDBTitle = _setup.chkOFDBTitle.Checked + MySettings.UseOFDBOutline = _setup.chkOFDBOutline.Checked + MySettings.UseOFDBPlot = _setup.chkOFDBPlot.Checked + MySettings.UseOFDBGenre = _setup.chkOFDBGenre.Checked + ConfigOptions.bTitle = _setup.chkTitle.Checked + ConfigOptions.bYear = _setup.chkYear.Checked + ConfigOptions.bMPAA = _setup.chkMPAA.Checked + ConfigOptions.bRelease = _setup.chkRelease.Checked + ConfigOptions.bRuntime = _setup.chkRuntime.Checked + ConfigOptions.bRating = _setup.chkRating.Checked + ConfigOptions.bVotes = _setup.chkVotes.Checked + ConfigOptions.bStudio = _setup.chkStudio.Checked + ConfigOptions.bTagline = _setup.chkTagline.Checked + ConfigOptions.bOutline = _setup.chkOutline.Checked + ConfigOptions.bPlot = _setup.chkPlot.Checked + ConfigOptions.bCast = _setup.chkCast.Checked + ConfigOptions.bDirector = _setup.chkDirector.Checked + ConfigOptions.bWriters = _setup.chkWriters.Checked + ConfigOptions.bProducers = _setup.chkProducers.Checked + ConfigOptions.bGenre = _setup.chkGenre.Checked + ConfigOptions.bTrailer = _setup.chkTrailer.Checked + ConfigOptions.bMusicBy = _setup.chkMusicBy.Checked + ConfigOptions.bOtherCrew = _setup.chkCrew.Checked + ConfigOptions.bCountry = _setup.chkCountry.Checked + ConfigOptions.bTop250 = _setup.chkTop250.Checked + ConfigOptions.bCert = _setup.chkCertification.Checked + ConfigOptions.bFullCrew = _setup.chkFullCrew.Checked + ConfigOptions.bFullCast = _setup.chkFullCast.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + RemoveHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + _setup.Dispose() + End If + End Sub + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.Scraper + 'LoadSettings() + IMDB.IMDBURL = MySettings.IMDBURL + IMDB.UseOFDBTitle = MySettings.UseOFDBTitle + IMDB.UseOFDBOutline = MySettings.UseOFDBOutline + IMDB.UseOFDBPlot = MySettings.UseOFDBPlot + IMDB.UseOFDBGenre = MySettings.UseOFDBGenre + Dim tTitle As String = String.Empty + Dim OldTitle As String = DBMovie.Movie.Title + + If Master.GlobalScrapeMod.NFO AndAlso Not Master.GlobalScrapeMod.DoSearch Then + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + IMDB.GetMovieInfo(DBMovie.Movie.IMDBID, DBMovie.Movie, Options.bFullCrew, Options.bFullCast, False, Options, False) + ElseIf Not ScrapeType = Enums.ScrapeType.SingleScrape Then + DBMovie.Movie = IMDB.GetSearchMovieInfo(DBMovie.Movie.Title, DBMovie, ScrapeType, Options) + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + If ScrapeType = Enums.ScrapeType.SingleScrape AndAlso Master.GlobalScrapeMod.DoSearch _ + AndAlso ModulesManager.Instance.externalScrapersModules.OrderBy(Function(y) y.ScraperOrder).FirstOrDefault(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled).AssemblyName = _AssemblyName Then + DBMovie.Movie.IMDBID = String.Empty + DBMovie.ClearExtras = True + DBMovie.PosterPath = String.Empty + DBMovie.FanartPath = String.Empty + DBMovie.TrailerPath = String.Empty + DBMovie.ExtraPath = String.Empty + DBMovie.SubPath = String.Empty + DBMovie.NfoPath = String.Empty + DBMovie.Movie.Clear() + End If + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + Select Case ScrapeType + Case Enums.ScrapeType.FilterAuto, Enums.ScrapeType.FullAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.UpdateAuto + Return New Interfaces.ModuleResult With {.breakChain = False} + End Select + If ScrapeType = Enums.ScrapeType.SingleScrape Then + Using dSearch As New dlgIMDBSearchResults + dSearch.IMDBURL = MySettings.IMDBURL + Dim tmpTitle As String = DBMovie.Movie.Title + If String.IsNullOrEmpty(tmpTitle) Then + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name, False) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name, False) + Else + tmpTitle = StringUtils.FilterName(If(DBMovie.isSingle, Directory.GetParent(DBMovie.Filename).Name, Path.GetFileNameWithoutExtension(DBMovie.Filename))) + End If + End If + Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) + If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID + End If + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + + Master.currMovie.ClearExtras = True + Master.currMovie.PosterPath = String.Empty + Master.currMovie.FanartPath = String.Empty + Master.currMovie.TrailerPath = String.Empty + Master.currMovie.ExtraPath = String.Empty + Master.currMovie.SubPath = String.Empty + Master.currMovie.NfoPath = String.Empty + + + IMDB.GetMovieInfo(DBMovie.Movie.IMDBID, DBMovie.Movie, filterOptions.bFullCrew, filterOptions.bFullCast, False, filterOptions, False) + End If + Else + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End Using + End If + End If + + If Not String.IsNullOrEmpty(DBMovie.Movie.Title) Then + tTitle = StringUtils.FilterTokens(DBMovie.Movie.Title) + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = tTitle + If Master.eSettings.DisplayYear AndAlso Not String.IsNullOrEmpty(DBMovie.Movie.Year) Then + DBMovie.ListTitle = String.Format("{0} ({1})", tTitle, DBMovie.Movie.Year) + Else + DBMovie.ListTitle = tTitle + End If + Else + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name) + Else + If DBMovie.UseFolder AndAlso DBMovie.isSingle Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(DBMovie.Filename).Name) + Else + DBMovie.ListTitle = StringUtils.FilterName(Path.GetFileNameWithoutExtension(DBMovie.Filename)) + End If + End If + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = DBMovie.ListTitle + End If + + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function SelectImageOfType(ByRef mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.SelectImageOfType + If preload AndAlso _DLType = Enums.ImageType.Fanart AndAlso Not IsNothing(dFImgSelect) Then + pResults = dFImgSelect.ShowDialog() + dFImgSelect = Nothing + Else + Using dImgSelect As New dlgImgSelect + If preload Then + dFImgSelect = New dlgImgSelect + dFImgSelect.PreLoad(mMovie, Enums.ImageType.Fanart, _isEdit) + End If + dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(mMovie, _DLType, _isEdit) + End Using + End If + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + Public Sub PostScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.PostScraperOrderChanged + _setup.orderChanged() + End Sub + + Public Sub ScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.ScraperOrderChanged + _setupPost.orderChanged() + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Structure _MySettings + +#Region "Fields" + + Dim DownloadTrailers As Boolean + Dim IMDBURL As String + Dim UseOFDBGenre As Boolean + Dim UseOFDBOutline As Boolean + Dim UseOFDBPlot As Boolean + Dim UseOFDBTitle As Boolean + Dim TrailerTimeout As Integer + Dim UseTMDB As Boolean + Dim UseIMPA As Boolean + Dim UseMPDB As Boolean + Dim UseTMDBTrailer As Boolean + Dim UseIMDBTrailer As Boolean + Dim UseTMDBTrailerXBMC As Boolean + Dim ManualETSize As String + Dim ActorThumbsSize As String + Dim UseTMDBTrailerPref As String +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/scraperTVNativeModule.vb b/Addons/scraper.OFDB.Data/scraperTVNativeModule.vb new file mode 100644 index 0000000..450e6d6 --- /dev/null +++ b/Addons/scraper.OFDB.Data/scraperTVNativeModule.vb @@ -0,0 +1,221 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberNativeTVScraperModule + Implements Interfaces.EmberTVScraperModule + +#Region "Fields" + + Public Shared TVScraper As New Scraper + + Private _Name As String = "Ember Native TV Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmTVInfoSettingsHolder + Private _setupPost As frmTVMediaSettingsHolder +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberTVScraperModule.ModuleSettingsChanged + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberTVScraperModule.SetupPostScraperChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberTVScraperModule.SetupScraperChanged + + Public Event TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) Implements Interfaces.EmberTVScraperModule.TVScraperEvent + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property IsBusy() As Boolean Implements Interfaces.EmberTVScraperModule.IsBusy + Get + Return TVScraper.IsBusy + End Get + End Property + + Public ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberTVScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + Public ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberTVScraperModule.IsScraper + Get + Return True + End Get + End Property + + Public ReadOnly Property ModuleName() As String Implements Interfaces.EmberTVScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + Public ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberTVScraperModule.ModuleVersion + Get + Return FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Public Property PostScraperEnabled() As Boolean Implements Interfaces.EmberTVScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Public Property ScraperEnabled() As Boolean Implements Interfaces.EmberTVScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() Implements Interfaces.EmberTVScraperModule.CancelAsync + TVScraper.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String, ByRef epDet As MediaContainers.EpisodeDetails) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ChangeEpisode + epDet = TVScraper.ChangeEpisode(ShowID, TVDBID, Lang) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function GetLangs(ByVal sMirror As String, ByRef Langs As List(Of Containers.TVLanguage)) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetLangs + Langs = TVScraper.GetLangs(sMirror) + Return New Interfaces.ModuleResult With {.breakChain = True} + End Function + + Public Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByRef epDetails As MediaContainers.EpisodeDetails) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetSingleEpisode + epDetails = TVScraper.GetSingleEpisode(ShowID, TVDBID, Season, Episode, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images, ByRef Image As Images) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetSingleImage + Image = TVScraper.GetSingleImage(Title, ShowID, TVDBID, Type, Season, Episode, Lang, Ordering, CurrentImage) + Return New Interfaces.ModuleResult With {.breakChain = True} + End Function + + Public Sub Handler_ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent TVScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberTVScraperModule.Init + AddHandler TVScraper.ScraperEvent, AddressOf Handler_ScraperEvent + End Sub + + Public Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberTVScraperModule.InjectSetupPostScraper + Dim SPanel As New Containers.SettingsPanel + _setupPost = New frmTVMediaSettingsHolder + _setupPost.cbEnabled.Checked = _PostScraperEnabled + SPanel.Name = String.Concat(Me._Name, "PostScraper") + SPanel.Text = Master.eLang.GetString(0, "Ember Native TV Scrapers") + SPanel.Type = Master.eLang.GetString(698, "TV Shows", True) + SPanel.ImageIndex = If(Me._ScraperEnabled, 9, 10) + SPanel.Order = 100 + SPanel.Panel = Me._setupPost.pnlSettings + SPanel.Parent = "pnlTVMedia" + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + Return SPanel + End Function + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberTVScraperModule.ScraperUpdateMediaList + Public Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberTVScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmTVInfoSettingsHolder + _setup.cbEnabled.Checked = _ScraperEnabled + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(0, "Ember Native TV Scrapers") + SPanel.Prefix = "NativeTV_" + SPanel.Type = Master.eLang.GetString(698, "TV Shows", True) + SPanel.ImageIndex = If(Me._ScraperEnabled, 9, 10) + SPanel.Order = 100 + SPanel.Panel = Me._setup.pnlSettings + SPanel.Parent = "pnlTVData" + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + Return SPanel + End Function + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + Public Function PostScraper(ByRef DBTV As Structures.DBTV, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.PostScraper + End Function + + Public Function SaveImages() As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.SaveImages + TVScraper.SaveImages() + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberTVScraperModule.SaveSetupPostScraper + End Sub + + Public Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberTVScraperModule.SaveSetupScraper + End Sub + + Public Function ScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ScrapeEpisode + TVScraper.ScrapeEpisode(ShowID, ShowTitle, TVDBID, iEpisode, iSeason, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function Scraper(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.Scraper + TVScraper.SingleScrape(ShowID, ShowTitle, TVDBID, Lang, Ordering, Options, ScrapeType, WithCurrent) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function ScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ScrapeSeason + TVScraper.ScrapeSeason(ShowID, ShowTitle, TVDBID, iSeason, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.OFDB.Data/x64/SQLite.Interop.dll b/Addons/scraper.OFDB.Data/x64/SQLite.Interop.dll new file mode 100644 index 0000000..860c0e5 Binary files /dev/null and b/Addons/scraper.OFDB.Data/x64/SQLite.Interop.dll differ diff --git a/Addons/scraper.OFDB.Data/x86/SQLite.Interop.dll b/Addons/scraper.OFDB.Data/x86/SQLite.Interop.dll new file mode 100644 index 0000000..6f6fd4f Binary files /dev/null and b/Addons/scraper.OFDB.Data/x86/SQLite.Interop.dll differ diff --git a/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml new file mode 100644 index 0000000..cb66cd5 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml @@ -0,0 +1,902 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="1">tmdb1</string> + <string id="2">tmdb2</string> + <string id="3">tmdb3</string> + <string id="4">tmdb4</string> + <string id="5">tmdb5</string> + <string id="6">tmdb6</string> + <string id="7">tmdb7</string> + <string id="8">tmdb8</string> + <string id="9">tmdb9</string> + <string id="10">tmdb10</string> + <string id="11">tmdb11</string> + <string id="12">tmdb12</string> + <string id="13">tmdb13</string> + <string id="14">tmdb14</string> + <string id="15">tmdb15</string> + <string id="16">tmdb16</string> + <string id="17">tmdb17</string> + <string id="18">tmdb18</string> + <string id="19">tmdb19</string> + <string id="20">tmdb20</string> + <string id="21">tmdb21</string> + <string id="22">tmdb22</string> + <string id="23">tmdb23</string> + <string id="24">tmdb24</string> + <string id="25">tmdb25</string> + <string id="26">tmdb26</string> + <string id="27">tmdb27</string> + <string id="28">tmdb28</string> + <string id="29">tmdb29</string> + <string id="30">tmdb30</string> + <string id="31">tmdb31</string> + <string id="32">tmdb32</string> + <string id="33">tmdb33</string> + <string id="34">tmdb34</string> + <string id="35">tmdb35</string> + <string id="36">tmdb36</string> + <string id="37">tmdb37</string> + <string id="38">tmdb38</string> + <string id="39">tmdb39</string> + <string id="40">tmdb40</string> + <string id="41">tmdb41</string> + <string id="42">tmdb42</string> + <string id="43">tmdb43</string> + <string id="44">tmdb44</string> + <string id="45">tmdb45</string> + <string id="46">tmdb46</string> + <string id="47">tmdb47</string> + <string id="48">tmdb48</string> + <string id="49">tmdb49</string> + <string id="50">tmdb50</string> + <string id="51">tmdb51</string> + <string id="52">tmdb52</string> + <string id="53">tmdb53</string> + <string id="54">tmdb54</string> + <string id="55">tmdb55</string> + <string id="56">tmdb56</string> + <string id="57">tmdb57</string> + <string id="58">tmdb58</string> + <string id="59">tmdb59</string> + <string id="60">tmdb60</string> + <string id="61">tmdb61</string> + <string id="62">tmdb62</string> + <string id="63">tmdb63</string> + <string id="64">tmdb64</string> + <string id="65">tmdb65</string> + <string id="66">tmdb66</string> + <string id="67">tmdb67</string> + <string id="68">tmdb68</string> + <string id="69">tmdb69</string> + <string id="70">tmdb70</string> + <string id="71">tmdb71</string> + <string id="72">tmdb72</string> + <string id="73">tmdb73</string> + <string id="74">tmdb74</string> + <string id="75">tmdb75</string> + <string id="76">tmdb76</string> + <string id="77">tmdb77</string> + <string id="78">tmdb78</string> + <string id="79">tmdb79</string> + <string id="80">tmdb80</string> + <string id="81">tmdb81</string> + <string id="82">tmdb82</string> + <string id="83">tmdb83</string> + <string id="84">tmdb84</string> + <string id="85">tmdb85</string> + <string id="86">tmdb86</string> + <string id="87">tmdb87</string> + <string id="88">tmdb88</string> + <string id="89">tmdb89</string> + <string id="90">tmdb90</string> + <string id="91">tmdb91</string> + <string id="92">tmdb92</string> + <string id="93">tmdb93</string> + <string id="94">tmdb94</string> + <string id="95">tmdb95</string> + <string id="96">tmdb96</string> + <string id="97">tmdb97</string> + <string id="98">tmdb98</string> + <string id="99">tmdb99</string> + <string id="100">tmdb100</string> + <string id="101">tmdb101</string> + <string id="102">tmdb102</string> + <string id="103">tmdb103</string> + <string id="104">tmdb104</string> + <string id="105">tmdb105</string> + <string id="106">tmdb106</string> + <string id="107">tmdb107</string> + <string id="108">tmdb108</string> + <string id="109">tmdb109</string> + <string id="110">tmdb110</string> + <string id="111">tmdb111</string> + <string id="112">tmdb112</string> + <string id="113">tmdb113</string> + <string id="114">tmdb114</string> + <string id="115">tmdb115</string> + <string id="116">tmdb116</string> + <string id="117">tmdb117</string> + <string id="118">tmdb118</string> + <string id="119">tmdb119</string> + <string id="120">tmdb120</string> + <string id="121">tmdb121</string> + <string id="122">tmdb122</string> + <string id="123">tmdb123</string> + <string id="124">tmdb124</string> + <string id="125">tmdb125</string> + <string id="126">tmdb126</string> + <string id="127">tmdb127</string> + <string id="128">tmdb128</string> + <string id="129">tmdb129</string> + <string id="130">tmdb130</string> + <string id="131">tmdb131</string> + <string id="132">tmdb132</string> + <string id="133">tmdb133</string> + <string id="134">tmdb134</string> + <string id="135">tmdb135</string> + <string id="136">tmdb136</string> + <string id="137">tmdb137</string> + <string id="138">tmdb138</string> + <string id="139">tmdb139</string> + <string id="140">tmdb140</string> + <string id="141">tmdb141</string> + <string id="142">tmdb142</string> + <string id="143">tmdb143</string> + <string id="144">tmdb144</string> + <string id="145">tmdb145</string> + <string id="146">tmdb146</string> + <string id="147">tmdb147</string> + <string id="148">tmdb148</string> + <string id="149">tmdb149</string> + <string id="150">tmdb150</string> + <string id="151">tmdb151</string> + <string id="152">tmdb152</string> + <string id="153">tmdb153</string> + <string id="154">tmdb154</string> + <string id="155">tmdb155</string> + <string id="156">tmdb156</string> + <string id="157">tmdb157</string> + <string id="158">tmdb158</string> + <string id="159">tmdb159</string> + <string id="160">tmdb160</string> + <string id="161">tmdb161</string> + <string id="162">tmdb162</string> + <string id="163">tmdb163</string> + <string id="164">tmdb164</string> + <string id="165">tmdb165</string> + <string id="166">tmdb166</string> + <string id="167">tmdb167</string> + <string id="168">tmdb168</string> + <string id="169">tmdb169</string> + <string id="170">tmdb170</string> + <string id="171">tmdb171</string> + <string id="172">tmdb172</string> + <string id="173">tmdb173</string> + <string id="174">tmdb174</string> + <string id="175">tmdb175</string> + <string id="176">tmdb176</string> + <string id="177">tmdb177</string> + <string id="178">tmdb178</string> + <string id="179">tmdb179</string> + <string id="180">tmdb180</string> + <string id="181">tmdb181</string> + <string id="182">tmdb182</string> + <string id="183">tmdb183</string> + <string id="184">tmdb184</string> + <string id="185">tmdb185</string> + <string id="186">tmdb186</string> + <string id="187">tmdb187</string> + <string id="188">tmdb188</string> + <string id="189">tmdb189</string> + <string id="190">tmdb190</string> + <string id="191">tmdb191</string> + <string id="192">tmdb192</string> + <string id="193">tmdb193</string> + <string id="194">tmdb194</string> + <string id="195">tmdb195</string> + <string id="196">tmdb196</string> + <string id="197">tmdb197</string> + <string id="198">tmdb198</string> + <string id="199">tmdb199</string> + <string id="200">tmdb200</string> + <string id="201">tmdb201</string> + <string id="202">tmdb202</string> + <string id="203">tmdb203</string> + <string id="204">tmdb204</string> + <string id="205">tmdb205</string> + <string id="206">tmdb206</string> + <string id="207">tmdb207</string> + <string id="208">tmdb208</string> + <string id="209">tmdb209</string> + <string id="210">tmdb210</string> + <string id="211">tmdb211</string> + <string id="212">tmdb212</string> + <string id="213">tmdb213</string> + <string id="214">tmdb214</string> + <string id="215">tmdb215</string> + <string id="216">tmdb216</string> + <string id="217">tmdb217</string> + <string id="218">tmdb218</string> + <string id="219">tmdb219</string> + <string id="220">tmdb220</string> + <string id="221">tmdb221</string> + <string id="222">tmdb222</string> + <string id="223">tmdb223</string> + <string id="224">tmdb224</string> + <string id="225">tmdb225</string> + <string id="226">tmdb226</string> + <string id="227">tmdb227</string> + <string id="228">tmdb228</string> + <string id="229">tmdb229</string> + <string id="230">tmdb230</string> + <string id="231">tmdb231</string> + <string id="232">tmdb232</string> + <string id="233">tmdb233</string> + <string id="234">tmdb234</string> + <string id="235">tmdb235</string> + <string id="236">tmdb236</string> + <string id="237">tmdb237</string> + <string id="238">tmdb238</string> + <string id="239">tmdb239</string> + <string id="240">tmdb240</string> + <string id="241">tmdb241</string> + <string id="242">tmdb242</string> + <string id="243">tmdb243</string> + <string id="244">tmdb244</string> + <string id="245">tmdb245</string> + <string id="246">tmdb246</string> + <string id="247">tmdb247</string> + <string id="248">tmdb248</string> + <string id="249">tmdb249</string> + <string id="250">tmdb250</string> + <string id="251">tmdb251</string> + <string id="252">tmdb252</string> + <string id="253">tmdb253</string> + <string id="254">tmdb254</string> + <string id="255">tmdb255</string> + <string id="256">tmdb256</string> + <string id="257">tmdb257</string> + <string id="258">tmdb258</string> + <string id="259">tmdb259</string> + <string id="260">tmdb260</string> + <string id="261">tmdb261</string> + <string id="262">tmdb262</string> + <string id="263">tmdb263</string> + <string id="264">tmdb264</string> + <string id="265">tmdb265</string> + <string id="266">tmdb266</string> + <string id="267">tmdb267</string> + <string id="268">tmdb268</string> + <string id="269">tmdb269</string> + <string id="270">tmdb270</string> + <string id="271">tmdb271</string> + <string id="272">tmdb272</string> + <string id="273">tmdb273</string> + <string id="274">tmdb274</string> + <string id="275">tmdb275</string> + <string id="276">tmdb276</string> + <string id="277">tmdb277</string> + <string id="278">tmdb278</string> + <string id="279">tmdb279</string> + <string id="280">tmdb280</string> + <string id="281">tmdb281</string> + <string id="282">tmdb282</string> + <string id="283">tmdb283</string> + <string id="284">tmdb284</string> + <string id="285">tmdb285</string> + <string id="286">tmdb286</string> + <string id="287">tmdb287</string> + <string id="288">tmdb288</string> + <string id="289">tmdb289</string> + <string id="290">tmdb290</string> + <string id="291">tmdb291</string> + <string id="292">tmdb292</string> + <string id="293">tmdb293</string> + <string id="294">tmdb294</string> + <string id="295">tmdb295</string> + <string id="296">tmdb296</string> + <string id="297">tmdb297</string> + <string id="298">tmdb298</string> + <string id="299">tmdb299</string> + <string id="300">tmdb300</string> + <string id="301">tmdb301</string> + <string id="302">tmdb302</string> + <string id="303">tmdb303</string> + <string id="304">tmdb304</string> + <string id="305">tmdb305</string> + <string id="306">tmdb306</string> + <string id="307">tmdb307</string> + <string id="308">tmdb308</string> + <string id="309">tmdb309</string> + <string id="310">tmdb310</string> + <string id="311">tmdb311</string> + <string id="312">tmdb312</string> + <string id="313">tmdb313</string> + <string id="314">tmdb314</string> + <string id="315">tmdb315</string> + <string id="316">tmdb316</string> + <string id="317">tmdb317</string> + <string id="318">tmdb318</string> + <string id="319">tmdb319</string> + <string id="320">tmdb320</string> + <string id="321">tmdb321</string> + <string id="322">tmdb322</string> + <string id="323">tmdb323</string> + <string id="324">tmdb324</string> + <string id="325">tmdb325</string> + <string id="326">tmdb326</string> + <string id="327">tmdb327</string> + <string id="328">tmdb328</string> + <string id="329">tmdb329</string> + <string id="330">tmdb330</string> + <string id="331">tmdb331</string> + <string id="332">tmdb332</string> + <string id="333">tmdb333</string> + <string id="334">tmdb334</string> + <string id="335">tmdb335</string> + <string id="336">tmdb336</string> + <string id="337">tmdb337</string> + <string id="338">tmdb338</string> + <string id="339">tmdb339</string> + <string id="340">tmdb340</string> + <string id="341">tmdb341</string> + <string id="342">tmdb342</string> + <string id="343">tmdb343</string> + <string id="344">tmdb344</string> + <string id="345">tmdb345</string> + <string id="346">tmdb346</string> + <string id="347">tmdb347</string> + <string id="348">tmdb348</string> + <string id="349">tmdb349</string> + <string id="350">tmdb350</string> + <string id="351">tmdb351</string> + <string id="352">tmdb352</string> + <string id="353">tmdb353</string> + <string id="354">tmdb354</string> + <string id="355">tmdb355</string> + <string id="356">tmdb356</string> + <string id="357">tmdb357</string> + <string id="358">tmdb358</string> + <string id="359">tmdb359</string> + <string id="360">tmdb360</string> + <string id="361">tmdb361</string> + <string id="362">tmdb362</string> + <string id="363">tmdb363</string> + <string id="364">tmdb364</string> + <string id="365">tmdb365</string> + <string id="366">tmdb366</string> + <string id="367">tmdb367</string> + <string id="368">tmdb368</string> + <string id="369">tmdb369</string> + <string id="370">tmdb370</string> + <string id="371">tmdb371</string> + <string id="372">tmdb372</string> + <string id="373">tmdb373</string> + <string id="374">tmdb374</string> + <string id="375">tmdb375</string> + <string id="376">tmdb376</string> + <string id="377">tmdb377</string> + <string id="378">tmdb378</string> + <string id="379">tmdb379</string> + <string id="380">tmdb380</string> + <string id="381">tmdb381</string> + <string id="382">tmdb382</string> + <string id="383">tmdb383</string> + <string id="384">tmdb384</string> + <string id="385">tmdb385</string> + <string id="386">tmdb386</string> + <string id="387">tmdb387</string> + <string id="388">tmdb388</string> + <string id="389">tmdb389</string> + <string id="390">tmdb390</string> + <string id="391">tmdb391</string> + <string id="392">tmdb392</string> + <string id="393">tmdb393</string> + <string id="394">tmdb394</string> + <string id="395">tmdb395</string> + <string id="396">tmdb396</string> + <string id="397">tmdb397</string> + <string id="398">tmdb398</string> + <string id="399">tmdb399</string> + <string id="400">tmdb400</string> + <string id="401">tmdb401</string> + <string id="402">tmdb402</string> + <string id="403">tmdb403</string> + <string id="404">tmdb404</string> + <string id="405">tmdb405</string> + <string id="406">tmdb406</string> + <string id="407">tmdb407</string> + <string id="408">tmdb408</string> + <string id="409">tmdb409</string> + <string id="410">tmdb410</string> + <string id="411">tmdb411</string> + <string id="412">tmdb412</string> + <string id="413">tmdb413</string> + <string id="414">tmdb414</string> + <string id="415">tmdb415</string> + <string id="416">tmdb416</string> + <string id="417">tmdb417</string> + <string id="418">tmdb418</string> + <string id="419">tmdb419</string> + <string id="420">tmdb420</string> + <string id="421">tmdb421</string> + <string id="422">tmdb422</string> + <string id="423">tmdb423</string> + <string id="424">tmdb424</string> + <string id="425">tmdb425</string> + <string id="426">tmdb426</string> + <string id="427">tmdb427</string> + <string id="428">tmdb428</string> + <string id="429">tmdb429</string> + <string id="430">tmdb430</string> + <string id="431">tmdb431</string> + <string id="432">tmdb432</string> + <string id="433">tmdb433</string> + <string id="434">tmdb434</string> + <string id="435">tmdb435</string> + <string id="436">tmdb436</string> + <string id="437">tmdb437</string> + <string id="438">tmdb438</string> + <string id="439">tmdb439</string> + <string id="440">tmdb440</string> + <string id="441">tmdb441</string> + <string id="442">tmdb442</string> + <string id="443">tmdb443</string> + <string id="444">tmdb444</string> + <string id="445">tmdb445</string> + <string id="446">tmdb446</string> + <string id="447">tmdb447</string> + <string id="448">tmdb448</string> + <string id="449">tmdb449</string> + <string id="450">tmdb450</string> + <string id="451">tmdb451</string> + <string id="452">tmdb452</string> + <string id="453">tmdb453</string> + <string id="454">tmdb454</string> + <string id="455">tmdb455</string> + <string id="456">tmdb456</string> + <string id="457">tmdb457</string> + <string id="458">tmdb458</string> + <string id="459">tmdb459</string> + <string id="460">tmdb460</string> + <string id="461">tmdb461</string> + <string id="462">tmdb462</string> + <string id="463">tmdb463</string> + <string id="464">tmdb464</string> + <string id="465">tmdb465</string> + <string id="466">tmdb466</string> + <string id="467">tmdb467</string> + <string id="468">tmdb468</string> + <string id="469">tmdb469</string> + <string id="470">tmdb470</string> + <string id="471">tmdb471</string> + <string id="472">tmdb472</string> + <string id="473">tmdb473</string> + <string id="474">tmdb474</string> + <string id="475">tmdb475</string> + <string id="476">tmdb476</string> + <string id="477">tmdb477</string> + <string id="478">tmdb478</string> + <string id="479">tmdb479</string> + <string id="480">tmdb480</string> + <string id="481">tmdb481</string> + <string id="482">tmdb482</string> + <string id="483">tmdb483</string> + <string id="484">tmdb484</string> + <string id="485">tmdb485</string> + <string id="486">tmdb486</string> + <string id="487">tmdb487</string> + <string id="488">tmdb488</string> + <string id="489">tmdb489</string> + <string id="490">tmdb490</string> + <string id="491">tmdb491</string> + <string id="492">tmdb492</string> + <string id="493">tmdb493</string> + <string id="494">tmdb494</string> + <string id="495">tmdb495</string> + <string id="496">tmdb496</string> + <string id="497">tmdb497</string> + <string id="498">tmdb498</string> + <string id="499">tmdb499</string> + <string id="500">tmdb500</string> + <string id="501">tmdb501</string> + <string id="502">tmdb502</string> + <string id="503">tmdb503</string> + <string id="504">tmdb504</string> + <string id="505">tmdb505</string> + <string id="506">tmdb506</string> + <string id="507">tmdb507</string> + <string id="508">tmdb508</string> + <string id="509">tmdb509</string> + <string id="510">tmdb510</string> + <string id="511">tmdb511</string> + <string id="512">tmdb512</string> + <string id="513">tmdb513</string> + <string id="514">tmdb514</string> + <string id="515">tmdb515</string> + <string id="516">tmdb516</string> + <string id="517">tmdb517</string> + <string id="518">tmdb518</string> + <string id="519">tmdb519</string> + <string id="520">tmdb520</string> + <string id="521">tmdb521</string> + <string id="522">tmdb522</string> + <string id="523">tmdb523</string> + <string id="524">tmdb524</string> + <string id="525">tmdb525</string> + <string id="526">tmdb526</string> + <string id="527">tmdb527</string> + <string id="528">tmdb528</string> + <string id="529">tmdb529</string> + <string id="530">tmdb530</string> + <string id="531">tmdb531</string> + <string id="532">tmdb532</string> + <string id="533">tmdb533</string> + <string id="534">tmdb534</string> + <string id="535">tmdb535</string> + <string id="536">tmdb536</string> + <string id="537">tmdb537</string> + <string id="538">tmdb538</string> + <string id="539">tmdb539</string> + <string id="540">tmdb540</string> + <string id="541">tmdb541</string> + <string id="542">tmdb542</string> + <string id="543">tmdb543</string> + <string id="544">tmdb544</string> + <string id="545">tmdb545</string> + <string id="546">tmdb546</string> + <string id="547">tmdb547</string> + <string id="548">tmdb548</string> + <string id="549">tmdb549</string> + <string id="550">tmdb550</string> + <string id="551">tmdb551</string> + <string id="552">tmdb552</string> + <string id="553">tmdb553</string> + <string id="554">tmdb554</string> + <string id="555">tmdb555</string> + <string id="556">tmdb556</string> + <string id="557">tmdb557</string> + <string id="558">tmdb558</string> + <string id="559">tmdb559</string> + <string id="560">tmdb560</string> + <string id="561">tmdb561</string> + <string id="562">tmdb562</string> + <string id="563">tmdb563</string> + <string id="564">tmdb564</string> + <string id="565">tmdb565</string> + <string id="566">tmdb566</string> + <string id="567">tmdb567</string> + <string id="568">tmdb568</string> + <string id="569">tmdb569</string> + <string id="570">tmdb570</string> + <string id="571">tmdb571</string> + <string id="572">tmdb572</string> + <string id="573">tmdb573</string> + <string id="574">tmdb574</string> + <string id="575">tmdb575</string> + <string id="576">tmdb576</string> + <string id="577">tmdb577</string> + <string id="578">tmdb578</string> + <string id="579">tmdb579</string> + <string id="580">tmdb580</string> + <string id="581">tmdb581</string> + <string id="582">tmdb582</string> + <string id="583">tmdb583</string> + <string id="584">tmdb584</string> + <string id="585">tmdb585</string> + <string id="586">tmdb586</string> + <string id="587">tmdb587</string> + <string id="588">tmdb588</string> + <string id="589">tmdb589</string> + <string id="590">tmdb590</string> + <string id="591">tmdb591</string> + <string id="592">tmdb592</string> + <string id="593">tmdb593</string> + <string id="594">tmdb594</string> + <string id="595">tmdb595</string> + <string id="596">tmdb596</string> + <string id="597">tmdb597</string> + <string id="598">tmdb598</string> + <string id="599">tmdb599</string> + <string id="600">tmdb600</string> + <string id="601">tmdb601</string> + <string id="602">tmdb602</string> + <string id="603">tmdb603</string> + <string id="604">tmdb604</string> + <string id="605">tmdb605</string> + <string id="606">tmdb606</string> + <string id="607">tmdb607</string> + <string id="608">tmdb608</string> + <string id="609">tmdb609</string> + <string id="610">tmdb610</string> + <string id="611">tmdb611</string> + <string id="612">tmdb612</string> + <string id="613">tmdb613</string> + <string id="614">tmdb614</string> + <string id="615">tmdb615</string> + <string id="616">tmdb616</string> + <string id="617">tmdb617</string> + <string id="618">tmdb618</string> + <string id="619">tmdb619</string> + <string id="620">tmdb620</string> + <string id="621">tmdb621</string> + <string id="622">tmdb622</string> + <string id="623">tmdb623</string> + <string id="624">tmdb624</string> + <string id="625">tmdb625</string> + <string id="626">tmdb626</string> + <string id="627">tmdb627</string> + <string id="628">tmdb628</string> + <string id="629">tmdb629</string> + <string id="630">tmdb630</string> + <string id="631">tmdb631</string> + <string id="632">tmdb632</string> + <string id="633">tmdb633</string> + <string id="634">tmdb634</string> + <string id="635">tmdb635</string> + <string id="636">tmdb636</string> + <string id="637">tmdb637</string> + <string id="638">tmdb638</string> + <string id="639">tmdb639</string> + <string id="640">tmdb640</string> + <string id="641">tmdb641</string> + <string id="642">tmdb642</string> + <string id="643">tmdb643</string> + <string id="644">tmdb644</string> + <string id="645">tmdb645</string> + <string id="646">tmdb646</string> + <string id="647">tmdb647</string> + <string id="648">tmdb648</string> + <string id="649">tmdb649</string> + <string id="650">tmdb650</string> + <string id="651">tmdb651</string> + <string id="652">tmdb652</string> + <string id="653">tmdb653</string> + <string id="654">tmdb654</string> + <string id="655">tmdb655</string> + <string id="656">tmdb656</string> + <string id="657">tmdb657</string> + <string id="658">tmdb658</string> + <string id="659">tmdb659</string> + <string id="660">tmdb660</string> + <string id="661">tmdb661</string> + <string id="662">tmdb662</string> + <string id="663">tmdb663</string> + <string id="664">tmdb664</string> + <string id="665">tmdb665</string> + <string id="666">tmdb666</string> + <string id="667">tmdb667</string> + <string id="668">tmdb668</string> + <string id="669">tmdb669</string> + <string id="670">tmdb670</string> + <string id="671">tmdb671</string> + <string id="672">tmdb672</string> + <string id="673">tmdb673</string> + <string id="674">tmdb674</string> + <string id="675">tmdb675</string> + <string id="676">tmdb676</string> + <string id="677">tmdb677</string> + <string id="678">tmdb678</string> + <string id="679">tmdb679</string> + <string id="680">tmdb680</string> + <string id="681">tmdb681</string> + <string id="682">tmdb682</string> + <string id="683">tmdb683</string> + <string id="684">tmdb684</string> + <string id="685">tmdb685</string> + <string id="686">tmdb686</string> + <string id="687">tmdb687</string> + <string id="688">tmdb688</string> + <string id="689">tmdb689</string> + <string id="690">tmdb690</string> + <string id="691">tmdb691</string> + <string id="692">tmdb692</string> + <string id="693">tmdb693</string> + <string id="694">tmdb694</string> + <string id="695">tmdb695</string> + <string id="696">tmdb696</string> + <string id="697">tmdb697</string> + <string id="698">tmdb698</string> + <string id="699">tmdb699</string> + <string id="700">tmdb700</string> + <string id="701">tmdb701</string> + <string id="702">tmdb702</string> + <string id="703">tmdb703</string> + <string id="704">tmdb704</string> + <string id="705">tmdb705</string> + <string id="706">tmdb706</string> + <string id="707">tmdb707</string> + <string id="708">tmdb708</string> + <string id="709">tmdb709</string> + <string id="710">tmdb710</string> + <string id="711">tmdb711</string> + <string id="712">tmdb712</string> + <string id="713">tmdb713</string> + <string id="714">tmdb714</string> + <string id="715">tmdb715</string> + <string id="716">tmdb716</string> + <string id="717">tmdb717</string> + <string id="718">tmdb718</string> + <string id="719">tmdb719</string> + <string id="720">tmdb720</string> + <string id="721">tmdb721</string> + <string id="722">tmdb722</string> + <string id="723">tmdb723</string> + <string id="724">tmdb724</string> + <string id="725">tmdb725</string> + <string id="726">tmdb726</string> + <string id="727">tmdb727</string> + <string id="728">tmdb728</string> + <string id="729">tmdb729</string> + <string id="730">tmdb730</string> + <string id="731">tmdb731</string> + <string id="732">tmdb732</string> + <string id="733">tmdb733</string> + <string id="734">tmdb734</string> + <string id="735">tmdb735</string> + <string id="736">tmdb736</string> + <string id="737">tmdb737</string> + <string id="738">tmdb738</string> + <string id="739">tmdb739</string> + <string id="740">tmdb740</string> + <string id="741">tmdb741</string> + <string id="742">tmdb742</string> + <string id="743">tmdb743</string> + <string id="744">tmdb744</string> + <string id="745">tmdb745</string> + <string id="746">tmdb746</string> + <string id="747">tmdb747</string> + <string id="748">tmdb748</string> + <string id="749">tmdb749</string> + <string id="750">tmdb750</string> + <string id="751">tmdb751</string> + <string id="752">tmdb752</string> + <string id="753">tmdb753</string> + <string id="754">tmdb754</string> + <string id="755">tmdb755</string> + <string id="756">tmdb756</string> + <string id="757">tmdb757</string> + <string id="758">tmdb758</string> + <string id="759">tmdb759</string> + <string id="760">tmdb760</string> + <string id="761">tmdb761</string> + <string id="762">tmdb762</string> + <string id="763">tmdb763</string> + <string id="764">tmdb764</string> + <string id="765">tmdb765</string> + <string id="766">tmdb766</string> + <string id="767">tmdb767</string> + <string id="768">tmdb768</string> + <string id="769">tmdb769</string> + <string id="770">tmdb770</string> + <string id="771">tmdb771</string> + <string id="772">tmdb772</string> + <string id="773">tmdb773</string> + <string id="774">tmdb774</string> + <string id="775">tmdb775</string> + <string id="776">tmdb776</string> + <string id="777">tmdb777</string> + <string id="778">tmdb778</string> + <string id="779">tmdb779</string> + <string id="780">tmdb780</string> + <string id="781">tmdb781</string> + <string id="782">tmdb782</string> + <string id="783">tmdb783</string> + <string id="784">tmdb784</string> + <string id="785">tmdb785</string> + <string id="786">tmdb786</string> + <string id="787">tmdb787</string> + <string id="788">tmdb788</string> + <string id="789">tmdb789</string> + <string id="790">tmdb790</string> + <string id="791">tmdb791</string> + <string id="792">tmdb792</string> + <string id="793">tmdb793</string> + <string id="794">tmdb794</string> + <string id="795">tmdb795</string> + <string id="796">tmdb796</string> + <string id="797">tmdb797</string> + <string id="798">tmdb798</string> + <string id="799">tmdb799</string> + <string id="800">tmdb800</string> + <string id="801">tmdb801</string> + <string id="802">tmdb802</string> + <string id="803">tmdb803</string> + <string id="804">tmdb804</string> + <string id="805">tmdb805</string> + <string id="806">tmdb806</string> + <string id="807">tmdb807</string> + <string id="808">tmdb808</string> + <string id="809">tmdb809</string> + <string id="810">tmdb810</string> + <string id="811">tmdb811</string> + <string id="812">tmdb812</string> + <string id="813">tmdb813</string> + <string id="814">tmdb814</string> + <string id="815">tmdb815</string> + <string id="816">tmdb816</string> + <string id="817">tmdb817</string> + <string id="818">tmdb818</string> + <string id="819">tmdb819</string> + <string id="820">tmdb820</string> + <string id="821">tmdb821</string> + <string id="822">tmdb822</string> + <string id="823">tmdb823</string> + <string id="824">tmdb824</string> + <string id="825">tmdb825</string> + <string id="826">tmdb826</string> + <string id="827">tmdb827</string> + <string id="828">tmdb828</string> + <string id="829">tmdb829</string> + <string id="830">tmdb830</string> + <string id="831">tmdb831</string> + <string id="832">tmdb832</string> + <string id="833">tmdb833</string> + <string id="834">tmdb834</string> + <string id="835">tmdb835</string> + <string id="836">tmdb836</string> + <string id="837">tmdb837</string> + <string id="838">tmdb838</string> + <string id="839">tmdb839</string> + <string id="840">tmdb840</string> + <string id="841">tmdb841</string> + <string id="842">tmdb842</string> + <string id="843">tmdb843</string> + <string id="844">tmdb844</string> + <string id="845">tmdb845</string> + <string id="846">tmdb846</string> + <string id="847">tmdb847</string> + <string id="848">tmdb848</string> + <string id="849">tmdb849</string> + <string id="850">tmdb850</string> + <string id="851">tmdb851</string> + <string id="852">tmdb852</string> + <string id="853">tmdb853</string> + <string id="854">tmdb854</string> + <string id="855">tmdb855</string> + <string id="856">tmdb856</string> + <string id="857">tmdb857</string> + <string id="858">tmdb858</string> + <string id="859">tmdb859</string> + <string id="860">tmdb860</string> + <string id="861">tmdb861</string> + <string id="862">tmdb862</string> + <string id="863">tmdb863</string> + <string id="864">tmdb864</string> + <string id="865">tmdb865</string> + <string id="866">tmdb866</string> + <string id="867">tmdb867</string> + <string id="868">tmdb868</string> + <string id="869">tmdb869</string> + <string id="870">tmdb870</string> + <string id="871">tmdb871</string> + <string id="872">tmdb872</string> + <string id="873">tmdb873</string> + <string id="874">tmdb874</string> + <string id="875">tmdb875</string> + <string id="876">tmdb876</string> + <string id="877">tmdb877</string> + <string id="878">tmdb878</string> + <string id="879">tmdb879</string> + <string id="880">tmdb880</string> + <string id="881">tmdb881</string> + <string id="882">tmdb882</string> + <string id="883">tmdb883</string> + <string id="884">tmdb884</string> + <string id="885">tmdb885</string> + <string id="886">tmdb886</string> + <string id="887">tmdb887</string> + <string id="888">tmdb888</string> + <string id="889">tmdb889</string> + <string id="890">tmdb890</string> + <string id="891">tmdb891</string> + <string id="892">tmdb892</string> + <string id="893">tmdb893</string> + <string id="894">tmdb894</string> + <string id="895">tmdb895</string> + <string id="896">tmdb896</string> + <string id="897">tmdb897</string> + <string id="898">tmdb898</string> + <string id="899">tmdb899</string> + <string id="900">tmdb900</string> +</strings> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml new file mode 100644 index 0000000..5e87256 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Enable or disable this module.</string> + <string control="TMDBMovieInfo_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieInfo_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API Key from the TMDB site. Sharing the API key is forbidden.</string> + <string control="TMDBMovieInfo_chkCertification">Enable scraping movie certification.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Selected language for TMDB searches</string> + <string control="TMDBMovieInfo_chkFallBackEng">If no record is available for selected language try English</string> + <string control="TMDBMovieInfo_chkCrew">Enable scraping movie other crew. (Scrape Full Crew must be enabled)</string> + <string control="TMDBMovieInfo_chkStudio">Enable scraping movie studio.</string> + <string control="TMDBMovieInfo_chkRuntime">Enable scraping movie runtime.</string> + <string control="TMDBMovieInfo_chkPlot">Enable scraping movie plot.</string> + <string control="TMDBMovieInfo_chkOutline">Enable scraping movie outline.</string> + <string control="TMDBMovieInfo_chkGenre">Enable scraping movie genre.</string> + <string control="TMDBMovieInfo_chkTagline">Enable scraping movie tagline.</string> + <string control="TMDBMovieInfo_chkCast">Enable scraping movie cast.</string> + <string control="TMDBMovieInfo_chkVotes">Enable scraping movie votes.</string> + <string control="TMDBMovieInfo_chkRating">Enable scraping movie rating.</string> + <string control="TMDBMovieInfo_chkRelease">Enable scraping movie release date.</string> + <string control="TMDBMovieInfo_chkMPAA">Enable scraping movie MPAA.</string> + <string control="TMDBMovieInfo_chkYear">Enable scraping movie year.</string> + <string control="TMDBMovieInfo_chkTitle">Enable scraping movie title.</string> + <string control="TMDBMovieMedia_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieMedia_cbEnabled">Enable or disable this module.</string> + <string control="TMDBMovieMedia_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Enable scraping posters from this module. (Refer to global poster settings for more options)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Enable scraping fanart from this module. (Refer to global fanart settings for more options)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Enable trailer downloading from this module. (Refer to global trailer settings for more options)</string> + <string control="TMDBMovieMedia_txtTimeout">Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Select the sites from which you would like to retrieve trailer URLs and/or files.</string> +</strings> diff --git a/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.English_(en_US).xml b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.English_(en_US).xml new file mode 100644 index 0000000..cf68bc8 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.English_(en_US).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Native TV Scrapers</string> + <string id="1">Use OFDB Genre</string> + <string id="2">Use OFDB Plot</string> + <string id="3">Use OFDB Outline</string> + <string id="4">Use OFDB Title</string> + <string id="5">TMDB Mirror:</string> + <string id="6">Scraper Fields - Scraper specific</string> + <string id="7">Timeout:</string> + <string id="8">Supported Sites:</string> + <string id="9">Get Images From:</string> + <string id="10">Search Results</string> + <string id="11">Searching TMDB...</string> + <string id="12">The ID you entered is not a valid IMDB ID.</string> + <string id="13">You have manually entered an IMDB ID but have not verified it is correct.</string> + <string id="14">Continue without verification?</string> + <string id="15">Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again.</string> + <string id="16">Verification Failed</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">No Matches Found</string> + <string id="21">View details of each result to find the proper movie.</string> + <string id="22">Movie Search Results</string> + <string id="23">Manual IMDB Entry:</string> + <string id="24">Verify</string> + <string id="25">Searching TMDB...</string> + <string id="26">Downloading details...</string> + <string id="27">Downloading {0}</string> + <string id="28">No Fanart found for this movie.</string> + <string id="29">No Fanart Found</string> + <string id="30">No Posters found for this movie.</string> + <string id="31">No Posters Found</string> + <string id="32">Retrieving data from TheMovieDB.com...</string> + <string id="33">TheMovieDB.com is not enabled</string> + <string id="34">Retrieving data from IMPAwards.com...</string> + <string id="35">IMPAwards.com is not enabled</string> + <string id="36">Retrieving data from MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com is not enabled</string> + <string id="38">Preparing images...</string> + <string id="39">Select Poster</string> + <string id="40">Select Fanart</string> + <string id="41">Check All Thumb</string> + <string id="42">Check All Mid</string> + <string id="43">Check All Original</string> + <string id="44">Selected item will be set as fanart. All checked items will be saved to \extrathumbs.</string> + <string id="45">Performing Preliminary Tasks...</string> + <string id="46">Downloading Selected Image...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Small</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Small ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Multiple</string> + <string id="56">Downloading selected trailer...</string> + <string id="57">Copying specified file to trailer...</string> + <string id="58">The trailer could not be played. This could be due to an invalid URL or you do not have the proper player to play the trailer type.</string> + <string id="59">Error Playing Trailer</string> + <string id="60">Move</string> + <string id="61">Copy</string> + <string id="62">Moving specified file to trailer...</string> + <string id="63">Set To Nfo</string> + <string id="64">Select Trailer</string> + <string id="65">Select Trailer to Download</string> + <string id="66">Manual Trailer Entry</string> + <string id="67">Direct Link or YouTube URL:</string> + <string id="68">Compiling trailer list...</string> + <string id="69">Preview Trailer</string> + <string id="70">Local Trailer:</string> + <string id="71">The video format links could not be retrieved.</string> + <string id="72">Error Retrieving Video Format Links</string> + <string id="73">Select Format</string> + <string id="74">Getting available formats...</string> + <string id="75">Available Formats</string> + <string id="76">A poster of your preferred size could not be found. Please choose another.</string> + <string id="77">No Preferred Size</string> + <string id="78">Fanart of your preferred size could not be found. Please choose another.</string> + <string id="79">There are no known episodes for this show. Scrape the show, season, or episode and try again.</string> + <string id="80">No Known Episodes</string> + <string id="81">There is no poster available for this episode.</string> + <string id="82">Guest Star</string> + <string id="83">The ID you entered is not a valid TVDB ID.</string> + <string id="84">Downloading show info...</string> + <string id="85">TV Search Results</string> + <string id="86">View details of each result to find the proper TV show.</string> + <string id="87">Downloading Fullsize Fanart Image...</string> + <string id="88">Loading Current Images...</string> + <string id="89">(Down)Loading New Images...</string> + <string id="90">Setting Defaults...</string> + <string id="91">Show Poster</string> + <string id="92">Episode Fanart</string> + <string id="93">Show Fanart</string> + <string id="94">All Seasons Poster</string> + <string id="95">Season Posters</string> + <string id="96">Season Fanart</string> + <string id="97">Season {0} Posters</string> + <string id="98">Season {0} Fanart</string> + <string id="99">TV Image Selection</string> + <string id="100">Current Image:</string> + <string id="101">Get Posters</string> + <string id="102">Get Fanart</string> + <string id="103">These settings are specific to this module.{0}Please refer to the global settings for more options.</string> + <string id="104">Ember TMDB Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Size:</string> + <string id="109">Trailers</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Preferred language</string> + <string id="113">Save Fanart In:</string> + <string id="114">Fall back on english</string> + <string id="115">Preferred Language:</string> + <string id="116">TMDBid:</string> + <string id="117">Retrieving data from IMDB.com...</string> + <string id="118">IMDB.com is not enabled</string> + <string id="119">TheMovieDB API is missing or not valid</string> + <string id="120">Retrieving data from Fanart.tv...</string> + <string id="121">Fanart.tv is not enabled</string> + <string id="122">Get your API Key from www.themoviedb.org</string> + <string id="123">Get your API Key from fanart.tv</string> +</strings> diff --git a/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml new file mode 100644 index 0000000..d2a3801 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Aktiviert oder deaktiviert dieses Modul.</string> + <string control="TMDBMovieInfo_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieInfo_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API-Key von der TMDB-Website. Gemeinsame Nutzung des API-Schlüssels ist verboten.</string> + <string control="TMDBMovieInfo_chkCertification">Das Scrapen von Altersbeschränkungen einschalten.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Wähle die Sprache in der auf TMDB gesucht werden soll</string> + <string control="TMDBMovieInfo_chkFallBackEng">Wenn kein Datensatz für die gewählte Sprache verfügbar ist versuche englischen zu nehmen.</string> + <string control="TMDBMovieInfo_chkCrew">Das Scrapen von der restlichen Crew einschalten. ("Gesamte Crew Scrapen" muss eingeschaltet sein)</string> + <string control="TMDBMovieInfo_chkStudio">Das Scrapen von Studios einschalten.</string> + <string control="TMDBMovieInfo_chkRuntime">Das Scrapen von Spielzeiten einschalten.</string> + <string control="TMDBMovieInfo_chkPlot">Das Scrapen von Inhaltsangaben einschalten.</string> + <string control="TMDBMovieInfo_chkOutline">Das Scrapen von Kurzbeschreibungen einschalten.</string> + <string control="TMDBMovieInfo_chkGenre">Das Scrapen von Genres einschalten.</string> + <string control="TMDBMovieInfo_chkTagline">Das Scrapen von Taglines einschalten.</string> + <string control="TMDBMovieInfo_chkCast">Das Scrapen von Schauspielern einschalten.</string> + <string control="TMDBMovieInfo_chkVotes">Das Scrapen von Anzahl Bewertungen einschalten.</string> + <string control="TMDBMovieInfo_chkRating">Das Scrapen von Bewertungen einschalten.</string> + <string control="TMDBMovieInfo_chkRelease">Das Scrapen von Premiere-Daten einschalten.</string> + <string control="TMDBMovieInfo_chkMPAA">Das Scrapen von MPAA-Informationen einschalten.</string> + <string control="TMDBMovieInfo_chkYear">Das Scrapen von Filmjahren einschalten.</string> + <string control="TMDBMovieInfo_chkTitle">Das Scrapen von Filmtiteln einschalten.</string> + <string control="TMDBMovieMedia_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieMedia_cbEnabled">Aktiviert oder deaktiviert dieses Modul.</string> + <string control="TMDBMovieMedia_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Aktiviert das Laden von Fanarts mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Aktiviert das Laden von Trailern mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_txtTimeout">Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Seite in dieser Zeit nicht geantwortet hat wird sie übersprungen)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Wähle die Seite von der Trailer URLs/Dateien geladen werden sollen.</string> +</strings> diff --git a/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml new file mode 100644 index 0000000..9b8e52e --- /dev/null +++ b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Nativer TV Scraper</string> + <string id="1">OFDB Genre benutzen</string> + <string id="2">OFDB Handlung benutzen</string> + <string id="3">OFDB Kurzbeschr. benutzen</string> + <string id="4">OFDB Titel benutzen</string> + <string id="5">TMDB Mirror:</string> + <string id="6">Scraper Felder - Scraper spezifisch</string> + <string id="7">Timeout:</string> + <string id="8">Unterstützte Seiten:</string> + <string id="9">Bilder holen von:</string> + <string id="10">Suchergebnis</string> + <string id="11">Suche in der TMDB...</string> + <string id="12">Die eingegebene ID ist keine gültige IMDB ID.</string> + <string id="13">Die IMDB ID ist noch nicht geprüft.</string> + <string id="14">Ohne Prüfung fortfahren?</string> + <string id="15">Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben.</string> + <string id="16">Prüfung fehlgeschlagen</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">Keine Treffer</string> + <string id="21">Schaue dir die Details an um den richtigen Film zu finden.</string> + <string id="22">Film Suchergebnis</string> + <string id="23">Man. IMDB ID:</string> + <string id="24">Prüfen</string> + <string id="25">Suche in der TMDB...</string> + <string id="26">Lade Details...</string> + <string id="27">Lade {0} herunter</string> + <string id="28">Kein Fanart für diesen Film gefunden.</string> + <string id="29">Kein Fanart gefunden</string> + <string id="30">Kein Poster für diesen Film gefunden.</string> + <string id="31">Kein Poster gefunden</string> + <string id="32">Lade Daten von TheMovieDB.com...</string> + <string id="33">TheMovieDB.com ist nicht aktiviert</string> + <string id="34">Lade Daten von IMPAwards.com...</string> + <string id="35">IMPAwards.com ist nicht aktiviert</string> + <string id="36">Lade Daten von MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com ist nicht aktiviert</string> + <string id="38">Bereite Bilder vor...</string> + <string id="39">Wähle Poster</string> + <string id="40">Wähle Fanart</string> + <string id="41">Wähle alle Thumb</string> + <string id="42">Wähle alle Mittl.</string> + <string id="43">Wähle alle Original</string> + <string id="44">Markiertes Bild wird Fanart. Alle aktivierten werden Extrathumbs.</string> + <string id="45">Vorarbeit läuft...</string> + <string id="46">Lade gewähltes Bild...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Klein</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Klein ({0}x{1})</string> + <string id="54">Mittel ({0}x{1})</string> + <string id="55">Mehrfach</string> + <string id="56">Lade gewählten Trailer...</string> + <string id="57">Kopiere gewählten Trailer...</string> + <string id="58">Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URL liegen oder es ist kein Player für diesen Dateityp vorhanden.</string> + <string id="59">Fehler beim Abspielen des Trailers</string> + <string id="60">Verschieben</string> + <string id="61">Kopieren</string> + <string id="62">Verschiebe gewählten Treiler...</string> + <string id="63">In NFO speichern</string> + <string id="64">Trailer wählen</string> + <string id="65">Trailer zum laden wählen</string> + <string id="66">Manueller Trailer</string> + <string id="67">Direkter Link oder YouTube URL:</string> + <string id="68">Stelle Trailerliste zusammen...</string> + <string id="69">Trailer Vorschau</string> + <string id="70">Loakler trailer:</string> + <string id="71">Fehler beim generieren der Videoformat Linkliste.</string> + <string id="72">Fehler beim Generieren der Videoformat Links.</string> + <string id="73">Wähle Format</string> + <string id="74">Hole verfügbare Formate...</string> + <string id="75">Verfügbare Formate</string> + <string id="76">Es konnte kein Poster in der bevorzugten Größe gefunden werden. Wähle ein anderes.</string> + <string id="77">Keine bevorzugte Größe</string> + <string id="78">Es konnte kein Fanart in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="79">Keine Episoden für diese TV-Serie verfügbar. Scrape diese Serie, Staffel oder Episode und versuche es erneut.</string> + <string id="80">Keine Episoden verfügbar</string> + <string id="81">Kein Poster für diese Episode vorhanden.</string> + <string id="82">Gaststar</string> + <string id="83">Die eingegebene ID ist keine gültige TMDB ID.</string> + <string id="84">Lade Serien Informationen...</string> + <string id="85">Serien Suchergebnis</string> + <string id="86">Betrachte die Details um die richtige TV-Serie zu erkennen.</string> + <string id="87">Lade Fanart in Originalgröße...</string> + <string id="88">Lade aktuelle Bilder...</string> + <string id="89">Lade neue Bilder...</string> + <string id="90">Setze Standardwerte...</string> + <string id="91">Serien Poster</string> + <string id="92">Episoden Fanart</string> + <string id="93">Serien Fanart</string> + <string id="94">Alle-Staffeln Poster</string> + <string id="95">Staffel Poster</string> + <string id="96">Staffel Fanart</string> + <string id="97">Staffel {0} Poster</string> + <string id="98">Staffel {0} Fanart</string> + <string id="99">Bilderwahl TV-Serien</string> + <string id="100">Aktuelles Bild:</string> + <string id="101">Poster laden</string> + <string id="102">Fanart laden</string> + <string id="103">Diese Einstellungen sind Modul-spezifisch. {0} Bitte werfen sie einen Blick in die Globalen Einstellungen für noch mehr Optionen.</string> + <string id="104">Ember TMDB Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Grösse:</string> + <string id="109">Trailer</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Bevorzugte Sprache</string> + <string id="113">Speichere Fanart in:</string> + <string id="114">Verwende Englisch wenn nichts verfügbar</string> + <string id="115">Bevorzugte Sprache:</string> + <string id="116">TMDBid:</string> + <string id="117">Lade Daten von IMDB.com...</string> + <string id="118">IMDB.com ist nicht aktiviert.</string> + <string id="119">Die TheMovieDB API ist nicht vorhanden oder ungültig</string> + <string id="120">Lade Daten von Fanart.tv...</string> + <string id="121">Fanart.tv ist nicht aktiviert</string> + <string id="122">Get your API Key from www.themoviedb.org</string> + <string id="123">Get your API Key from fanart.tv</string> +</strings> diff --git a/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..54809c6 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Slå denne modulen på eller av.</string> + <string control="TMDBMovieInfo_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieInfo_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API-nøkkel fra TMDB-siden. Deling av denne nøkkelen er forbudt.</string> + <string control="TMDBMovieInfo_chkCertification">Slå på detaljhenting av filmsertifisering.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Valgt språk for TMDB-søk.</string> + <string control="TMDBMovieInfo_chkFallBackEng">Hvis valgt språk ikke blir funnet, prøv engelsk.</string> + <string control="TMDBMovieInfo_chkCrew">Slå på detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått)</string> + <string control="TMDBMovieInfo_chkStudio">Slå på detaljhenting av filmstudio.</string> + <string control="TMDBMovieInfo_chkRuntime">Slå på detaljhenting av filmlengde.</string> + <string control="TMDBMovieInfo_chkPlot">Slå på detaljhenting av filmens historie.</string> + <string control="TMDBMovieInfo_chkOutline">Slå på detaljhenting av filmens beskrivelse.</string> + <string control="TMDBMovieInfo_chkGenre">Slå på detaljhenting av filmens sjanger.</string> + <string control="TMDBMovieInfo_chkTagline">Slå på detaljhetning av filmens undertittel.</string> + <string control="TMDBMovieInfo_chkCast">Slå på detaljhetning av filmens skuespillerbeholdning.</string> + <string control="TMDBMovieInfo_chkVotes">Slå på detaljhetning av filmens poeng.</string> + <string control="TMDBMovieInfo_chkRating">Slå på detaljhetning av filmens aldersgrense.</string> + <string control="TMDBMovieInfo_chkRelease">Slå på detaljhetning av filmens premieredato.</string> + <string control="TMDBMovieInfo_chkMPAA">Slå på detaljhetning av filmens MPAA-markering.</string> + <string control="TMDBMovieInfo_chkYear">Slå på detaljhetning av filmens år.</string> + <string control="TMDBMovieInfo_chkTitle">Slå på detaljhetning av filmens tittel.</string> + <string control="TMDBMovieMedia_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieMedia_cbEnabled">Slå denne modulen på eller av.</string> + <string control="TMDBMovieMedia_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Slå på detaljhetning av plakater i denne modulen. (Se globale plakatinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Slå på detaljhetning av fankunst i denne modulen. (Se globale fankunstinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Slå på automatisk henting av trailer fra denne modulen. (Se globale trailerinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_txtTimeout">Før inn tiden (i sekunder) du vil bruke for timeout for trailersider. (Hvis siden ikke svarer innen timeoutfristen, så vil den bli hoppet over)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Velg sidene du vil bruke til trailer URL og/eller filer.</string> +</strings> diff --git a/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml new file mode 100644 index 0000000..3ee8a25 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">EMM TV-detaljhentere</string> + <string id="1">Bruk OFDB-sjangere</string> + <string id="2">Bruk OFDB-filmhistorie</string> + <string id="3">Bruk OFDB-beskrivelse</string> + <string id="4">Bruk OFDB-tittel</string> + <string id="5">TMDB-speilserver:</string> + <string id="6">Detaljhenterområder - Detaljhenterspesifikk</string> + <string id="7">Tidsavbrudd:</string> + <string id="8">Støttede sider:</string> + <string id="9">Hent bilder fra:</string> + <string id="10">Søkeresultater</string> + <string id="11">Søker TMDB...</string> + <string id="12">IDen du førte inn er ikke en riktig IMDB-ID.</string> + <string id="13">Du har ført inn en IMDB-ID, men har ikke verifisert om den er riktig.</string> + <string id="14">Fortsette uten verifisering?</string> + <string id="15">Kunne ikke hente filmdetaljer for den innførte IDen. Vennligst sjekk IDen og prøv igjen.</string> + <string id="16">Verifisering feilet</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">Ingen funnet</string> + <string id="21">Se detaljer fra hvert treff for å finne riktig film.</string> + <string id="22">Filmsøkresultater</string> + <string id="23">Manuell IMDB innføring:</string> + <string id="24">Verifiser</string> + <string id="25">Søker TMDB...</string> + <string id="26">Laster ned detaljer...</string> + <string id="27">Laster ned {0}</string> + <string id="28">Ingen fankunst funnet for denne filmen.</string> + <string id="29">Ingen fankunst funnet</string> + <string id="30">Ingen plakater funnet for denne filmen.</string> + <string id="31">Ingen plakater funnet</string> + <string id="32">Henter data fra TheMovieDB.com...</string> + <string id="33">TheMovieDB.com er ikke påslått</string> + <string id="34">Henter data fra IMPAwards.com...</string> + <string id="35">IMPAwards.com er ikke påslått</string> + <string id="36">Henter data fra MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com er ikke påslått</string> + <string id="38">Forbereder bilder...</string> + <string id="39">Velg plakat</string> + <string id="40">Velg fankunst</string> + <string id="41">Huk av alle tommelbilder</string> + <string id="42">Huk av alle Mid</string> + <string id="43">Huk av alle originale</string> + <string id="44">Valgte objekt vil bli satt som fankunst. Alle hukede objekter vil bli lagret i \extrathumbs.</string> + <string id="45">Utfører forberedende oppgaver...</string> + <string id="46">Laster ned valgte bilde...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Liten</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Liten ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Flere</string> + <string id="56">Laster ned valgt trailer...</string> + <string id="57">Kopierer valgt fil til trailer...</string> + <string id="58">Traileren kunne ikke spilles av. Det kan være at URL ikke er gyldig, eller at du ikke har riktig avspiller for denne filtypen.</string> + <string id="59">Kan ikke spille av trailer</string> + <string id="60">Flytt</string> + <string id="61">Kopiér</string> + <string id="62">Flytter valgt fil til trailer...</string> + <string id="63">Sett i nfo</string> + <string id="64">Velg trailer</string> + <string id="65">Velg trailer til å laste ned</string> + <string id="66">Manuell trailerinnføring</string> + <string id="67">Direkte link eller YouTube URL:</string> + <string id="68">Kompilerer trailerliste...</string> + <string id="69">Sniktitt på trailer</string> + <string id="70">Lokal trailer:</string> + <string id="71">Videoformatlenkene kunne ikke hentes</string> + <string id="72">Kunne ikke hente videoformatlenker</string> + <string id="73">Velg format</string> + <string id="74">Henter tilgjengelige formater...</string> + <string id="75">Tilgjengelige formater</string> + <string id="76">En plakat i din valgte størrelse kunne ikke hentes. Vennligst velg en annen.</string> + <string id="77">Ingen foretrukket størrelse</string> + <string id="78">Fankunst i din foretrukkede størrelse kunne ikke bli funnet. Vennligst velg en annen.</string> + <string id="79">Det er ingen kjente episoder for denne serien. Detaljhent serien, sesongen eller episoden og prøv på nytt.</string> + <string id="80">Ingen kjente episoder</string> + <string id="81">Det er ingen plakater for denne episoden.</string> + <string id="82">Gjesteskuespiller</string> + <string id="83">IDen du innførte er ikke en gyldig TVDB ID.</string> + <string id="84">Laster ned serieinfo...</string> + <string id="85">TVsøk-resultater</string> + <string id="86">Se detaljer fra hvert resultat for å finne riktig serie.</string> + <string id="87">Laster ned fankunst i full størrelse...</string> + <string id="88">Laster inn nåværende bilder...</string> + <string id="89">Laster (ned) nye bilder...</string> + <string id="90">Setter standarder...</string> + <string id="91">Serieplakat</string> + <string id="92">Episode-fankunst</string> + <string id="93">Seriefankunst</string> + <string id="94">Alle sesonger-plakat</string> + <string id="95">Sesongplakat</string> + <string id="96">Sesongfankunst</string> + <string id="97">Sesong {0}-plakater</string> + <string id="98">Sesong {0}-fankunst</string> + <string id="99">TV-bilde valg</string> + <string id="100">Nåværende bilde:</string> + <string id="101">Hent plakater</string> + <string id="102">Hent fankunst</string> + <string id="103">Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg.</string> + <string id="104">EMM TMDB film-detaljhentere</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (Tysk)</string> + <string id="108">TMDB Ekstrakunst-størrelse:</string> + <string id="109">Trailere</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC-format</string> + <string id="112">Foretrukket språk</string> + <string id="113">Lagre fankunst i:</string> + <string id="114">Fall tilbake til engelsk</string> + <string id="115">Foretrukket språk:</string> + <string id="116">TIMDB-ID:</string> + <string id="117">Henter data fra IMDB.com...</string> + <string id="118">IMDB.com er ikke påslått</string> + <string id="119">TheMovieDB API mangler eller er ikke gyldig</string> + <string id="120">Henter data fra Fanart.tv...</string> + <string id="121">Fanart.tv er ikke påslått</string> + <string id="122">Hent din API-nøkkel fra www.themoviedb.org</string> + <string id="123">Hent din API-nøkkel fra fanart.tv</string> +</strings> diff --git a/Addons/scraper.TMDB.Data/My Project/Application.Designer.vb b/Addons/scraper.TMDB.Data/My Project/Application.Designer.vb new file mode 100644 index 0000000..66fb81a --- /dev/null +++ b/Addons/scraper.TMDB.Data/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Addons/scraper.TMDB.Data/My Project/Application.myapp b/Addons/scraper.TMDB.Data/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Addons/scraper.TMDB.Data/My Project/Application.myapp @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <MySubMain>false</MySubMain> + <SingleInstance>false</SingleInstance> + <ShutdownMode>0</ShutdownMode> + <EnableVisualStyles>true</EnableVisualStyles> + <AuthenticationMode>0</AuthenticationMode> + <ApplicationType>1</ApplicationType> + <SaveMySettingsOnExit>true</SaveMySettingsOnExit> +</MyApplicationData> diff --git a/Addons/scraper.TMDB.Data/My Project/AssemblyInfo.vb b/Addons/scraper.TMDB.Data/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..c09b91c --- /dev/null +++ b/Addons/scraper.TMDB.Data/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.TMDB.Data")> +<Assembly: AssemblyDescription("http://forum.xbmc.org/showthread.php?tid=116941")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.TMDB.Data")> +<Assembly: AssemblyCopyright("Copyright © 2013")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("B31D2BA5-CB99-4021-89BF-A8F8F095F089")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.11")> +<Assembly: AssemblyFileVersion("1.3.0.11")> diff --git a/Addons/scraper.TMDB.Data/My Project/Resources.Designer.vb b/Addons/scraper.TMDB.Data/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bb85827 --- /dev/null +++ b/Addons/scraper.TMDB.Data/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''<summary> + ''' A strongly-typed resource class, for looking up localized strings, etc. + '''</summary> + <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + '''<summary> + ''' Returns the cached ResourceManager instance used by this class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EmberScraperModule.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + '''<summary> + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Addons/scraper.TMDB.Data/My Project/Resources.resx b/Addons/scraper.TMDB.Data/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Addons/scraper.TMDB.Data/My Project/Resources.resx @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/My Project/Settings.Designer.vb b/Addons/scraper.TMDB.Data/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f020222 --- /dev/null +++ b/Addons/scraper.TMDB.Data/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _ + Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + <Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _ + Friend Module MySettingsProperty + + <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _ + Friend ReadOnly Property Settings() As Global.EmberScraperModule.My.MySettings + Get + Return Global.EmberScraperModule.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Addons/scraper.TMDB.Data/My Project/Settings.settings b/Addons/scraper.TMDB.Data/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Addons/scraper.TMDB.Data/My Project/Settings.settings @@ -0,0 +1,7 @@ +<?xml version='1.0' encoding='utf-8'?> +<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true"> + <Profiles> + <Profile Name="(Default)" /> + </Profiles> + <Settings /> +</SettingsFile> diff --git a/Addons/scraper.TMDB.Data/Resources/Logo.png b/Addons/scraper.TMDB.Data/Resources/Logo.png new file mode 100644 index 0000000..a89dae1 Binary files /dev/null and b/Addons/scraper.TMDB.Data/Resources/Logo.png differ diff --git a/Addons/scraper.TMDB.Data/Scraper/clsScrapeFANARTTV.vb b/Addons/scraper.TMDB.Data/Scraper/clsScrapeFANARTTV.vb new file mode 100644 index 0000000..13c1748 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/clsScrapeFANARTTV.vb @@ -0,0 +1,173 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ +' # HD Movie Logos -> logo.png (choose this first) +' # ClearLOGOs -> logo.png (use this as a backup if no HD Logo in the lanaguage specified) +' # ClearART -> clearart.png (use this as a backup if no HD ClearArt, in the language specified) +' # HDClearART -> clearart.png (choose this first) +' # cdART -> disc.png +' # Movie Backgrounds -> Fanart (this is the only fanart.tv artwork that might overlap with 'typical' artwork scraping from IMDB/TMDB) +' # Movie Banner -> Banner (not poster - Frodo supports both now, <moviename>-poster.jpg/png and <moviename>-banner.jpg/png or poster.jpg/png and banner.jpg/png) +' # Movie Thumbs -> landscape.png +' # Special note - the Logos and ClearArts are language-specific and should be tagged with the appropriate language. Will want to have a setting allowing users to specify a language so as not to get a bunch of foreign-language artwork. +' # 1) Logo.png - to be added at a later stage, today is not possible to save +' # 2) Clearart.png - to be added at a later stage, today is not possible to save +' # 3) Disc.png - to be added at a later stage, today is not possible to save +' # 4) Landscape.png - to be added at a later stage, today is not possible to save +' # language is in image properties + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports FanartTVAPI + +Namespace FANARTTVs + + Public Class Scraper + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _FanartTV As FanartTV.V1.FanartTV + Friend WithEvents bwFANARTTV As New System.ComponentModel.BackgroundWorker + Private _APIInvalid As Boolean = False +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _FanartTV = New FanartTV.V1.FanartTV(_MySettings.FANARTTVApiKey) + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest("1", "JSON", "all", 1, 1)) + If IsNothing(Result) Then + If Not IsNothing(_FanartTV.Error) Then + Master.eLog.WriteToErrorLog(_FanartTV.Error, "", "Error") + _APIInvalid = True + End If + End If + End Sub + + Public Sub Cancel() + If Me.bwFANARTTV.IsBusy Then Me.bwFANARTTV.CancelAsync() + + While Me.bwFANARTTV.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwFANARTTV.IsBusy Then + bwFANARTTV.WorkerSupportsCancellation = True + bwFANARTTV.WorkerReportsProgress = True + bwFANARTTV.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetFANARTTVImages(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + If _APIInvalid Then + Return Nothing + End If + Try + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest(imdbID, "JSON", "all", 1, 2)) + If bwFANARTTV.CancellationPending Then Return Nothing + If IsNothing(Result) Then Return alPoster + If IsNothing(Result.movieinfo.moviebackground) Then Return alPoster + For Each image In Result.movieinfo.moviebackground + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = image.url}) + alPoster.Add(New MediaContainers.Image With {.Description = "thumb", .URL = image.url & "/preview"}) + Next + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwFANARTTVA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTV.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetFANARTTVImages(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwFANARTTV_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTV.ProgressChanged + If Not bwFANARTTV.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwFANARTTV_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTV.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TMDB.Data/Scraper/clsScrapeIMDB.vb b/Addons/scraper.TMDB.Data/Scraper/clsScrapeIMDB.vb new file mode 100644 index 0000000..ec6d1be --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/clsScrapeIMDB.vb @@ -0,0 +1,174 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Diagnostics +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMDBimg + + Public Class Scraper + +#Region "Fields" + + + + Friend WithEvents bwIMDBimg As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If Me.bwIMDBimg.IsBusy Then Me.bwIMDBimg.CancelAsync() + + While Me.bwIMDBimg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMDBimg.IsBusy Then + bwIMDBimg.WorkerSupportsCancellation = True + bwIMDBimg.WorkerReportsProgress = True + bwIMDBimg.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMDBimg.CancellationPending Then Return Nothing + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", imdbID, "")) + sHTTP = Nothing + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(1) + End If + + + ' check existence of a line like this + ' <a href="/media/rm2995297536/tt0089218?ref_=tt_ov_i" > <img height="317" + ' and then return this one + ' src = "http://ia.media-imdb.com/images/M/MV5BMTY1Mzk3MTg0M15BMl5BanBnXkFtZTcwOTQzODYyMQ@@._V1_SY317_CR3,0,214,317_.jpg" + Dim mcIMDB As MatchCollection = Regex.Matches(HTML, String.Concat("/media/[a-zA-Z0-9]{3,12}/tt", imdbID, "\?ref_=tt_ov_i"), RegexOptions.IgnoreCase) + If mcIMDB.Count > 0 Then + debug.print("GetIMDBPoster 1 - {0}", mcIMDB(0).Value) + 'Dim sUrl1 As String = sHTTP.DownloadData(mcIMDB(0).Value) + mcIMDB = Regex.Matches(HTML, "http://ia.media-imdb.com/images/.{3,80}?.jpg") + If mcIMDB.Count > 0 Then + 'just use the first one if more are found + Debug.Print("GetIMDBPoster 2 - {0}", mcIMDB(0).Value) + alPoster.Add(New MediaContainers.Image With {.Description = "cover", .URL = mcIMDB(0).Value}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(2) + End If + + Dim aSP As String() = Regex.Split(mcIMDB(0).Value, "._V\d+?_SY\d+?_CR\d+?,\d+?,\d+?,\d+?_") + Dim sUrl1 = aSP(0) + aSP(1) + Debug.Print("GetIMDBPoster 3 - {0}", sUrl1) + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = sUrl1}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMDBimg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBimg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMDBimg_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBimg.ProgressChanged + If Not bwIMDBimg.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMDBimg_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBimg.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TMDB.Data/Scraper/clsScrapeIMPA.vb b/Addons/scraper.TMDB.Data/Scraper/clsScrapeIMPA.vb new file mode 100644 index 0000000..cfe43a1 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/clsScrapeIMPA.vb @@ -0,0 +1,189 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMPA + + Public Class Scraper + + #Region "Fields" + + + + Friend WithEvents bwIMPA As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwIMPA.IsBusy Then Me.bwIMPA.CancelAsync() + + While Me.bwIMPA.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMPA.IsBusy Then + bwIMPA.WorkerSupportsCancellation = True + bwIMPA.WorkerReportsProgress = True + bwIMPA.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMPAPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMPA.CancellationPending Then Return Nothing + Dim sURL As String = GetLink(imdbID) + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(1) + End If + + If Not String.IsNullOrEmpty(sURL) Then + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If bwIMPA.CancellationPending Then Return Nothing + + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(2) + End If + + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + + Dim PosterURL As String + + For Each mPoster As Match In mcPoster + If bwIMPA.CancellationPending Then Return Nothing + PosterURL = Strings.Replace(String.Format("{0}/{1}", sURL.Substring(0, sURL.LastIndexOf("/")), mPoster.Value.ToString()).Replace("thumbs", "posters"), "imp_", String.Empty) + + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + + PosterURL = PosterURL.Insert(PosterURL.LastIndexOf("."), "_xlg") + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = PosterURL}) + Next + End If + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMPA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPA.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMPAPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMPA_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPA.ProgressChanged + If Not bwIMPA.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMPA_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPA.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + Private Function GetLink(ByVal IMDBID As String) As String + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) + sHTTP = Nothing + + Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") + If mcIMPA.Count > 0 Then + 'just use the first one if more are found + Return mcIMPA(0).Value.ToString + Else + Return String.Empty + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return String.Empty + End Try + End Function + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + Dim sType As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TMDB.Data/Scraper/clsScrapeImages.vb b/Addons/scraper.TMDB.Data/Scraper/clsScrapeImages.vb new file mode 100644 index 0000000..d335b62 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/clsScrapeImages.vb @@ -0,0 +1,1209 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Public Class ScrapeImages + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private TMDB As TMDB.Scraper + Private IMPA As New IMPA.Scraper + Private MPDB As New MPDB.Scraper + Private IMDB As New IMDBimg.Scraper + Private FANARTTVs As FANARTTVs.Scraper + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Function GetPreferredImage(ByRef Image As Images, ByVal IMDBID As String, ByVal TMDBID As String, ByVal iType As Enums.ImageType, ByRef imgResult As Containers.ImgResult, ByVal sPath As String, ByVal doETs As Boolean, Optional ByVal doAsk As Boolean = False) As Boolean + '// + ' Try to get the best match between what the user selected in settings and the actual posters downloaded + '\\ + + Dim hasImages As Boolean = False + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim tmpListIMPA As New List(Of MediaContainers.Image) + Dim tmpListIMDB As New List(Of MediaContainers.Image) + Dim tmpListMPDB As New List(Of MediaContainers.Image) + Dim tmpIMDBX As Images = Nothing + Dim tmpIMDBL As Images = Nothing + Dim tmpIMDBM As Images = Nothing + Dim tmpIMDBS As Images = Nothing + Dim tmpIMDBW As Images = Nothing + Dim tmpTMDBX As Images = Nothing + Dim tmpTMDBL As Images = Nothing + Dim tmpTMDBM As Images = Nothing + Dim tmpTMDBS As Images = Nothing + Dim tmpTMDBW As Images = Nothing + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) + + Try + + If iType = Enums.ImageType.Posters Then 'posters + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tImage.URL) + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + tmpListTMDB.AddRange(TMDB.GetTMDBImages(TMDBID, "poster")) + + If _MySettings.UseIMPA Then + tmpListTMDB.AddRange(IMPA.GetIMPAPosters(IMDBID)) + End If + + If _MySettings.UseMPDB Then + tmpListMPDB.AddRange(MPDB.GetMPDBPosters(IMDBID)) + End If + + If _MySettings.UseIMDB Then + tmpListTMDB.AddRange(IMDB.GetIMDBPosters(IMDBID)) + End If + + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) + If Not IsNothing(tmdbThumb.WebImage.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) + End If + Image.Clear() + Next + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + End If + Else + 'download all TMBD images + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "poster") + + 'check each one for it's size to see if it matched the preferred size + If tmpListTMDB.Count > 0 Then + hasImages = True + + If Not Master.eSettings.NoSaveImagesToNfo Then + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + imgResult.Posters.Add(tmdbThumb.URL) + Next + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Xlrg + If iMovie.Description.ToLower = "original" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Lrg + If iMovie.Description.ToLower = "mid" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Mid + If iMovie.Description.ToLower = "cover" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Small + If iMovie.Description.ToLower = "thumb" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + 'no "wide" for TMDB + End Select + Image.Clear() + Next + End If + + If _MySettings.UseIMDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB found... try IMPA + + tmpListIMDB = IMDB.GetIMDBPosters(IMDBID) + + If tmpListIMDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMDBX) Then + tmpIMDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMDBL) Then + tmpIMDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMDBM) Then + tmpIMDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMDBS) Then + tmpIMDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMDBW) Then + tmpIMDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseIMPA Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from IMDB found... try IMPA + + tmpListIMPA = IMPA.GetIMPAPosters(IMDBID) + + If tmpListIMPA.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMPA + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMPAX) Then + tmpIMPAX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMPAL) Then + tmpIMPAL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMPAM) Then + tmpIMPAM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMPAS) Then + tmpIMPAS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMPAW) Then + tmpIMPAW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseMPDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB or IMPA found... try MPDB + + tmpListMPDB = MPDB.GetMPDBPosters(IMDBID) + + If tmpListMPDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListMPDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpMPDBX) Then + tmpMPDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpMPDBL) Then + tmpMPDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpMPDBM) Then + tmpMPDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpMPDBS) Then + tmpMPDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpMPDBW) Then + tmpMPDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If IsNothing(Image.Image) AndAlso Not doAsk Then + 'STILL no image found, just get the first available image, starting with the largest + 'check TMDB first + If tmpListTMDB.Count > 0 Then + Dim x = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If x.Count > 0 Then + Image.FromWeb(x(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "cover" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + End If + + Image.Clear() + + If _MySettings.UseIMDB Then + If tmpListIMDB.Count > 0 Then + If Not IsNothing(tmpIMDBX) Then + Image = tmpIMDBX + GoTo foundIT + End If + If Not IsNothing(tmpIMDBL) Then + Image = tmpIMDBL + GoTo foundIT + End If + If Not IsNothing(tmpIMDBM) Then + Image = tmpIMDBM + GoTo foundIT + End If + If Not IsNothing(tmpIMDBS) Then + Image = tmpIMDBS + GoTo foundIT + End If + If Not IsNothing(tmpIMDBW) Then + Image = tmpIMDBW + GoTo foundIT + End If + End If + End If + + If _MySettings.UseIMPA Then + If tmpListIMPA.Count > 0 Then + If Not IsNothing(tmpIMPAX) Then + Image = tmpIMPAX + GoTo foundIT + End If + If Not IsNothing(tmpIMPAL) Then + Image = tmpIMPAL + GoTo foundIT + End If + If Not IsNothing(tmpIMPAM) Then + Image = tmpIMPAM + GoTo foundIT + End If + If Not IsNothing(tmpIMPAS) Then + Image = tmpIMPAS + GoTo foundIT + End If + If Not IsNothing(tmpIMPAW) Then + Image = tmpIMPAW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + If _MySettings.UseMPDB Then + If tmpListMPDB.Count > 0 Then + If Not IsNothing(tmpMPDBX) Then + Image = tmpMPDBX + GoTo foundIT + End If + If Not IsNothing(tmpMPDBL) Then + Image = tmpMPDBL + GoTo foundIT + End If + If Not IsNothing(tmpMPDBM) Then + Image = tmpMPDBM + GoTo foundIT + End If + If Not IsNothing(tmpMPDBS) Then + Image = tmpMPDBS + GoTo foundIT + End If + If Not IsNothing(tmpMPDBW) Then + Image = tmpMPDBW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + End If + + End If + + Else 'fanart + + Dim ETHashes As New List(Of String) + If Master.eSettings.AutoET AndAlso doETs Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + End If + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + Image.Clear() + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + + End If + End If + End If + + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + End If + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + +foundIT: + tmpListTMDB = Nothing + tmpListIMPA = Nothing + tmpListMPDB = Nothing + Return hasImages + End Function + + Public Sub GetPreferredFAasET(ByVal IMDBID As String, ByVal sPath As String) + Dim _Image As Image + + If AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim ETHashes As New List(Of String) + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, "fanart") + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + For Each sFile As FileInfo In lFi + Select Case True + Case sFile.Name.Contains("(original)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Master.eSettings.AutoET Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + End If + Next + End If + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + 'Me.Clear() + Next + + _Image = Nothing + FileUtils.Delete.DeleteDirectory(CachePath) + + End If + End If + End If + End Sub + + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ + AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ + (AdvancedSettings.GetBooleanSetting("tUseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + Public Shared Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + End If + + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) + End Sub + + + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0) + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub + Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo + Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() + + For i As Integer = 0 To UBound(Encoders) + If Encoders(i).FormatID = Format.Guid Then + Return Encoders(i) + End If + Next + + Return Nothing + End Function +#End Region 'Methods + + + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Scraper/clsScrapeMPDB.vb b/Addons/scraper.TMDB.Data/Scraper/clsScrapeMPDB.vb new file mode 100644 index 0000000..cd949ec --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/clsScrapeMPDB.vb @@ -0,0 +1,167 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Namespace MPDB + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwMPDB As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwMPDB.IsBusy Then Me.bwMPDB.CancelAsync() + + While Me.bwMPDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String) + Try + If Not Me.bwMPDB.IsBusy Then + Me.bwMPDB.WorkerSupportsCancellation = True + Me.bwMPDB.WorkerReportsProgress = True + Me.bwMPDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetMPDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + + If Me.bwMPDB.CancellationPending Then Return Nothing + + Try + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.movieposterdb.com/movie/", imdbID)) + sHTTP = Nothing + + If Me.bwMPDB.CancellationPending Then Return Nothing + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(1) + End If + + If Regex.IsMatch(HTML, String.Concat("http://www.imdb.com/title/tt", imdbID), RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline) Then + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "http://www.movieposterdb.com/posters/[0-9_](.*?)/[0-9](.*?)/[0-9](.*?)/[a-z0-9_](.*?).jpg") + + Dim PosterURL As String = String.Empty + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(2) + End If + + For Each mPoster As Match In mcPoster + If Me.bwMPDB.CancellationPending Then Return Nothing + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "l") + alPosters.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "t") + alPosters.Add(New MediaContainers.Image With {.Description = "thumb", .URL = PosterURL}) + Next + End If + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Private Sub bwMPDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetMPDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwMPDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDB.ProgressChanged + If Not bwMPDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwMPDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TMDB.Data/Scraper/clsScrapeOFDB.vb b/Addons/scraper.TMDB.Data/Scraper/clsScrapeOFDB.vb new file mode 100644 index 0000000..2e94cca --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/clsScrapeOFDB.vb @@ -0,0 +1,242 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class OFDB + + #Region "Fields" + + Private imdbID As String + Private OFDBMovie As MediaContainers.Movie + Private _genre As String + Private _outline As String + Private _plot As String + Private _title As String + + #End Region 'Fields + + #Region "Constructors" + + Public Sub New(ByVal sID As String, ByRef mMovie As MediaContainers.Movie) + Clear() + imdbID = sID + OFDBMovie = mMovie + + GetOFDBDetails() + End Sub + + #End Region 'Constructors + + #Region "Properties" + + Public Property Genre() As String + Get + Return _genre + End Get + Set(ByVal value As String) + _genre = value + End Set + End Property + + Public Property Outline() As String + Get + Return _outline + End Get + Set(ByVal value As String) + _outline = value + End Set + End Property + + Public Property Plot() As String + Get + Return _plot + End Get + Set(ByVal value As String) + _plot = value + End Set + End Property + + Public Property Title() As String + Get + Return _title + End Get + Set(ByVal value As String) + _title = value + End Set + End Property + + #End Region 'Properties + + #Region "Methods" + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Sub Clear() + _title = String.Empty + _outline = String.Empty + _plot = String.Empty + _genre = String.Empty + End Sub + + Private Function GetFullPlot(ByVal sURL As String) As String + Dim FullPlot As String = String.Empty + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + Dim D, W, B As Integer + Dim tmpHTML As String + + D = Html.IndexOf("Eine Inhaltsangabe von") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim + W = tmpHTML.IndexOf("</b></b><br><br>") + If W > 0 Then + B = tmpHTML.IndexOf("</font></p>", W + 16) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return FullPlot + End Function + + Private Sub GetOFDBDetails() + Dim sURL As String = GetOFDBUrlFromIMDBID() + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(Html) Then + 'title + If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(Html, "<td width=""99\%""><h2><font face=""Arial,Helvetica,sans-serif"" size=""3""><b>([^<]+)</b></font></h2></td>").Groups(1).Value.ToString)) + _title = OFDBTitle + End If + + Dim D, W, B As Integer + Dim tmpHTML As String + + 'outline + If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then + D = Html.IndexOf("<b>Inhalt:</b>") + + If D > 0 Then + W = Html.IndexOf("<a href=""", D + 14) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(D + 14, W - (D + 14)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + + 'full plot + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then + D = Html.IndexOf("<b>Inhalt:</b>") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 14, L - (D + 14)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + End If + End If + + 'genre + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Genre) OrElse Not Master.eSettings.LockGenre Then + D = HTML.IndexOf("class=""Normal"">Genre(s):</font></td>") + If D > 0 Then + W = HTML.IndexOf("</table>", D) + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), "<a.*?href=[""'](?<url>.*?)[""'].*?>(?<name>.*?)</a>") + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetOFDBUrlFromIMDBID() As String + Dim ofdbURL As String = String.Empty + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.ofdb.de/view.php?SText=", imdbID, "&Kat=IMDb&page=suchergebnis&sourceid=mozilla-search")) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(HTML) Then + Dim mcOFDBURL As MatchCollection = Regex.Matches(HTML, "<a href=""film/([^<]+)"" onmouseover") + If mcOFDBURL.Count > 0 Then + 'just use the first one if more are found + ofdbURL = String.Concat("http://www.ofdb.de/", Regex.Match(mcOFDBURL(0).Value.ToString, """(film/([^<]+))""").Groups(1).Value.ToString) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return ofdbURL + End Function + + #End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Scraper/clsScrapeTMDB.vb b/Addons/scraper.TMDB.Data/Scraper/clsScrapeTMDB.vb new file mode 100644 index 0000000..9db6818 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/clsScrapeTMDB.vb @@ -0,0 +1,282 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDB + + Public Class Scraper + +#Region "Fields" + + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Private backdrop_names(3) As v3Size + Private poster_names(5) As v3Size + + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + ' v3 does not have description anymore + poster_names(0).description = "thumb" + poster_names(0).size = "w92" + poster_names(0).width = 92 + poster_names(1).description = "w154" + poster_names(1).size = "w154" + poster_names(1).width = 154 + poster_names(2).description = "cover" + poster_names(2).size = "w185" + poster_names(2).width = 185 + poster_names(3).description = "w342" + poster_names(3).size = "w342" + poster_names(3).width = 342 + poster_names(4).description = "mid" + poster_names(4).size = "w500" + poster_names(4).width = 500 + poster_names(5).description = "original" + poster_names(5).size = "original" + poster_names(5).width = 0 + backdrop_names(0).description = "thumb" + backdrop_names(0).size = "w300" + backdrop_names(0).width = 300 + backdrop_names(1).description = "poster" + backdrop_names(1).size = "w780" + backdrop_names(1).width = 780 + backdrop_names(2).description = "w1280" + backdrop_names(2).size = "w1280" + backdrop_names(2).width = 1280 + backdrop_names(3).description = "original" + backdrop_names(3).size = "original" + backdrop_names(3).width = 0 + End Sub + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim images As V3.TmdbMovieImages + Dim aW, aH As Integer + + If bwTMDB.CancellationPending Then Return Nothing + Try + images = _TMDBApi.GetMovieImages(CInt(imdbID), _MySettings.TMDBLanguage) + If sType = "poster" Then + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + Return alPosters + End If + End If + Else + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + Return alPosters + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If sType = "poster" Then + For Each tmdbI As V3.Poster In images.posters + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In poster_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + ElseIf sType = "backdrop" Then + For Each tmdbI As V3.Backdrop In images.backdrops + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In backdrop_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As List(Of String) + Dim trailers As V3.TmdbMovieTrailers + Dim YT As New List(Of String) + + Try + If bwTMDB.CancellationPending Then Return Nothing + trailers = _TMDBApi.GetMovieTrailers(CInt(imdbID), _MySettings.TMDBLanguage) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + trailers = _TMDBApiE.GetMovieTrailers(CInt(imdbID)) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + Return Nothing + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + 'If bwTMDB.WorkerReportsProgress Then + ' bwTMDB.ReportProgress(2) + 'End If + + If trailers.youtube.Count > 0 Then + For Each trailer In trailers.youtube + YT.Add(String.Format("http://www.youtube.com/watch?v={0}{1})", trailer.source, CStr(IIf(trailer.size = "HD", "&hd=1", "")))) + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return YT + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure v3Size + +#Region "Fields" + + Dim size As String + Dim description As String + Dim width As Integer + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Scraper/clsScrapeTMDB_old.vb b/Addons/scraper.TMDB.Data/Scraper/clsScrapeTMDB_old.vb new file mode 100644 index 0000000..c5bca0a --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/clsScrapeTMDB_old.vb @@ -0,0 +1,244 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI + +Namespace TMDB_old + + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + + Private Const APIKey As String = "b1ecff8c76278262b27de1569f57f6bd" + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB...<OpenSearchDescription>...<movies>.Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<poster>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<backdrop>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + sHTTP = Nothing + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As String + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + Dim tLang As String + + tLang = AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en") + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/{0}/tt{1}", APIKey, imdbID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + Dim tmdbNode = From xNode In xmlTMDB.Elements + + If tmdbNode.Count > 0 Then + If Not tmdbNode(0).Value = "Your query didn't return any results." Then + Dim movieID As String = xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<id>.Value + Dim i As Integer + + + For i = 0 To 1 Step 1 + sHTTP = New HTTP + ApiXML = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/{0}/xml/{1}/{2}", tLang, APIKey, movieID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + Dim Trailers = From tNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie> Select tNode.<trailer> + If Trailers.Count > 0 AndAlso Not String.IsNullOrEmpty(Trailers(0).Value) Then + If Trailers(0).Value.ToLower.IndexOf("youtube.com") > 0 Then + Return Trailers(0).Value + i += 1 + End If + Else + tLang = "en" + End If + End If + Next + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return String.Empty + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Scraper/clsScrapeTMDBg.vb b/Addons/scraper.TMDB.Data/Scraper/clsScrapeTMDBg.vb new file mode 100644 index 0000000..86f6083 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/clsScrapeTMDBg.vb @@ -0,0 +1,723 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Globalization +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDBg + + Public Class MovieSearchResults + +#Region "Fields" + + Private _Matches As New List(Of MediaContainers.Movie) + +#End Region 'Fields + +#Region "Properties" + + Public Property Matches() As List(Of MediaContainers.Movie) + Get + Return _Matches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _Matches = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class Scraper + +#Region "Fields" + + 'Public IMDBURL As String + 'Private _TMDBId As String + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Friend WithEvents bwTMDBg As New System.ComponentModel.BackgroundWorker + + Private _sPoster As String + +#End Region 'Fields + +#Region "Properties" + Public ReadOnly Property TMDBConf() As V3.TmdbConfiguration + Get + Return _TMDBConf + End Get + End Property +#End Region + +#Region "Enumerations" + + Private Enum SearchType + Movies = 0 + Details = 1 + SearchDetails = 2 + End Enum + +#End Region 'Enumerations + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + + Public Event SearchResultsDownloaded(ByVal mResults As TMDBg.MovieSearchResults) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + End Sub + + Public Sub CancelAsync() + If bwTMDBg.IsBusy Then bwTMDBg.CancelAsync() + + While bwTMDBg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetMovieID(ByRef DBMovie As Structures.DBMovie) + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + + If bwTMDBg.CancellationPending Then Return + + Movie = _TMDBApi.GetMovieByIMDB(DBMovie.Movie.ID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(DBMovie.Movie.ID) + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return + End If + + DBMovie.Movie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End Sub + + Public Function GetMovieInfo(ByVal strID As String, ByRef IMDBMovie As MediaContainers.Movie, ByVal FullCrew As Boolean, ByVal FullCast As Boolean, ByVal GetPoster As Boolean, ByVal Options As Structures.ScrapeOptions, ByVal IsSearch As Boolean) As Boolean + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + Dim tStr As String + + If bwTMDBg.CancellationPending Then Return Nothing + + If Strings.Left(strID.ToLower(), 2) = "tt" Then + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(strID) + Else + Movie = _TMDBApi.GetMovieInfo(CInt(strID), _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieInfo(CInt(strID)) + End If + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return False + End If + + IMDBMovie.ID = CStr(IIf(String.IsNullOrEmpty(Movie.imdb_id) AndAlso _MySettings.FallBackEng, MovieE.imdb_id, Movie.imdb_id)) + IMDBMovie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + If bwTMDBg.CancellationPending Or IsNothing(Movie) Then Return Nothing + + Dim Keywords As WatTmdb.V3.TmdbMovieKeywords + Keywords = _TMDBApi.GetMovieKeywords(Movie.id) + If Not IsNothing(Keywords) AndAlso Not IsNothing(Keywords.keywords) Then + If Keywords.keywords.Count <> 0 AndAlso _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + End If + + ' to be added the tags structure + '' <movie> + '' ... + '' <tag>Name of the tag</tag> + '' ... + '' </movie> + If Options.bTitle Then + IMDBMovie.OriginalTitle = CStr(IIf(String.IsNullOrEmpty(Movie.original_title) AndAlso _MySettings.FallBackEng, MovieE.original_title, Movie.original_title)) + If String.IsNullOrEmpty(IMDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + IMDBMovie.Title = CStr(IIf(String.IsNullOrEmpty(Movie.title) AndAlso _MySettings.FallBackEng, MovieE.title, Movie.title)) + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If GetPoster Then + ' I will add original always. to be updated if size, TMDBConf.images.poster_sizes(0) & + Dim Images As WatTmdb.V3.TmdbMovieImages + Images = _TMDBApi.GetMovieImages(Movie.id, _MySettings.TMDBLanguage) + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If (Images.posters.Count = 0) AndAlso _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + End If + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If Images.posters.Count > 0 Then + _sPoster = _TMDBConf.images.base_url & "w92" & Images.posters(0).file_path + Else + _sPoster = "" + End If + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bYear Then IMDBMovie.Year = Left(CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)), 4) + + Dim Releases As WatTmdb.V3.TmdbMovieReleases = Nothing + If Options.bMPAA Then + IMDBMovie.MPAA = "" + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each Country In Releases.countries + If Country.iso_3166_1.ToUpper = CStr(IIf(Master.eSettings.CertificationLang = "", "US", Master.eSettings.CertificationLang)) Then + IMDBMovie.MPAA = Country.certification + Exit For + End If + Next + End If + IMDBMovie.Certification = IMDBMovie.MPAA + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bRelease Then + IMDBMovie.ReleaseDate = CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)) + End If + + If Options.bRating AndAlso (String.IsNullOrEmpty(IMDBMovie.Rating) OrElse Not Master.eSettings.LockRating) Then + IMDBMovie.Rating = CStr(IIf(IsNothing(Movie.vote_average) AndAlso Movie.vote_average = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_average, Movie.vote_average)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'trailer + If Options.bTrailer AndAlso (String.IsNullOrEmpty(IMDBMovie.Trailer) OrElse Not Master.eSettings.LockTrailer) Then + Dim Trailers As WatTmdb.V3.TmdbMovieTrailers + Trailers = _TMDBApi.GetMovieTrailers(Movie.id) + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If (Trailers.youtube.Count = 0) AndAlso _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + End If + + IMDBMovie.Trailer = "" + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If Trailers.youtube.Count > 0 Then + IMDBMovie.Trailer = "http://www.youtube.com/watch?hd=1&v=" & Trailers.youtube(0).source + End If + End If + + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bVotes Then + IMDBMovie.Votes = CStr(IIf(IsNothing(Movie.vote_count) AndAlso Movie.vote_count = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_count.ToString(), Movie.vote_count.ToString())) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Dim aCast As WatTmdb.V3.TmdbMovieCast = Nothing + If Options.bCast Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.cast.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + + Dim Cast As New List(Of MediaContainers.Person) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + For Each aAc As WatTmdb.V3.Cast In aCast.cast + Dim aPer As New MediaContainers.Person + aPer.Name = aAc.name + aPer.Role = aAc.character + ' to be added / dialog to choose the size of the images + aPer.Thumb = _TMDBConf.images.base_url & "original" & aAc.profile_path + Cast.Add(aPer) + Next + End If + IMDBMovie.Actors = Cast + End If + + If Options.bTagline AndAlso (String.IsNullOrEmpty(IMDBMovie.Tagline) OrElse Not Master.eSettings.LockTagline) Then + IMDBMovie.Tagline = CStr(IIf(String.IsNullOrEmpty(IMDBMovie.Tagline) AndAlso _MySettings.FallBackEng, MovieE.tagline, Movie.tagline)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get countries of the movie + If Options.bCountry Then + If IsNothing(Releases) Then + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + End If + IMDBMovie.Countries.Clear() + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each aCo As WatTmdb.V3.ReleaseCountry In Releases.countries + IMDBMovie.Countries.Add(aCo.iso_3166_1) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get genres of the movie + If Options.bGenre AndAlso (String.IsNullOrEmpty(IMDBMovie.Genre) OrElse Not Master.eSettings.LockGenre) Then + IMDBMovie.Genres.Clear() + Dim tGen As System.Collections.Generic.List(Of WatTmdb.V3.MovieGenre) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tGen = CType(IIf(Movie.genres.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.genres, Movie.genres), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + Else + tGen = CType(IIf(_MySettings.FallBackEng, MovieE.genres, Nothing), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + End If + + + If Not IsNothing(tGen) Then + For Each aGen As WatTmdb.V3.MovieGenre In tGen + IMDBMovie.Genres.Add(aGen.name) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bOutline AndAlso (String.IsNullOrEmpty(IMDBMovie.Outline) OrElse Not Master.eSettings.LockOutline) Then + IMDBMovie.Outline = CStr(IIf(String.IsNullOrEmpty(Movie.overview) AndAlso _MySettings.FallBackEng, MovieE.overview, Movie.overview)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bPlot AndAlso (String.IsNullOrEmpty(IMDBMovie.Plot) OrElse Not Master.eSettings.LockPlot) Then + If Master.eSettings.OutlineForPlot AndAlso String.IsNullOrEmpty(IMDBMovie.Plot) AndAlso Not String.IsNullOrEmpty(IMDBMovie.Outline) Then + IMDBMovie.Plot = IMDBMovie.Outline + Else + IMDBMovie.Plot = "" + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get the movie duration + If Options.bRuntime Then + IMDBMovie.Runtime = CStr(IIf(IsNothing(Movie.runtime) AndAlso Movie.runtime = 0 AndAlso _MySettings.FallBackEng, MovieE.runtime.ToString(), Movie.runtime.ToString())) + End If + + 'Get Production Studio + If Options.bStudio AndAlso (String.IsNullOrEmpty(IMDBMovie.Studio) OrElse Not Master.eSettings.LockStudio) Then + tStr = "" + Dim tPC As System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tPC = CType(IIf(Movie.production_companies.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.production_companies, Movie.production_companies), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + Else + tPC = CType(IIf(_MySettings.FallBackEng, MovieE.production_companies, Nothing), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + End If + + If Not IsNothing(tPC) Then + For Each aPro As WatTmdb.V3.ProductionCompany In tPC + tStr = tStr & " / " & aPro.name + Next + End If + If Len(tStr) > 3 Then + tStr = Trim(Right(tStr, Len(tStr) - 3)) + End If + IMDBMovie.Studio = tStr + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get All Other Info + If FullCrew Or Options.bWriters Or Options.bDirector Then + If IsNothing(aCast) Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.crew.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + End If + IMDBMovie.Credits.Clear() + IMDBMovie.Directors.Clear() + If Not IsNothing(aCast.crew) Then + For Each aAc As WatTmdb.V3.Crew In aCast.crew + If FullCrew Then + IMDBMovie.Credits.Add(aAc.name) + ElseIf Options.bWriters Then + If aAc.department = "Writing" AndAlso aAc.job = "Writer" Then + IMDBMovie.Credits.Add(aAc.name) + End If + End If + If Options.bDirector Then + If aAc.job = "Director" Then + IMDBMovie.Directors.Add(aAc.name) + End If + End If + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Return True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Function GetMovieStudios(ByVal strID As String) As List(Of String) + Dim alStudio As New List(Of String) + Dim Movie As WatTmdb.V3.TmdbMovie + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + If Movie.production_companies.Count = 0 And _MySettings.FallBackEng Then + Movie = _TMDBApi.GetMovieByIMDB(strID, "en") + End If + For Each aComp In Movie.production_companies + alStudio.Add(aComp.name) + Next + + Return alStudio + + End Function + + Public Function GetSearchMovieInfo(ByVal sMovieName As String, ByRef dbMovie As Structures.DBMovie, ByVal iType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As MediaContainers.Movie + Dim r As MovieSearchResults = SearchMovie(sMovieName) + Dim b As Boolean = False + Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie + + Try + Select Case iType + Case Enums.ScrapeType.FullAsk, Enums.ScrapeType.UpdateAsk, Enums.ScrapeType.NewAsk, Enums.ScrapeType.MarkAsk, Enums.ScrapeType.FilterAsk + + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + Master.tmpMovie.Clear() + Using dIMDB As New dlgTMDBSearchResults(_MySettings, Me) + + If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + b = False + Else + b = GetMovieInfo(Master.tmpMovie.ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + Else + b = False + End If + End Using + End If + Case Enums.ScrapeType.FullAuto, Enums.ScrapeType.UpdateAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.SingleScrape, Enums.ScrapeType.FilterAuto + Dim exactHaveYear As Integer = FindYear(dbMovie.Filename, r.Matches) + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + b = GetMovieInfo(r.Matches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + End Select + + If b Then + Return imdbMovie + Else + Return New MediaContainers.Movie + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New MediaContainers.Movie + End Try + End Function + + Private Function FindYear(ByVal tmpname As String, ByVal lst As List(Of MediaContainers.Movie)) As Integer + Dim tmpyear As String = "" + Dim i As Integer + Dim ret As Integer = -1 + tmpname = Path.GetFileNameWithoutExtension(tmpname) + tmpname = tmpname.Replace(".", " ").Trim.Replace("(", " ").Replace(")", "").Trim + i = tmpname.LastIndexOf(" ") + If i >= 0 Then + tmpyear = tmpname.Substring(i + 1, tmpname.Length - i - 1) + If IsNumeric(tmpyear) AndAlso Convert.ToInt32(tmpyear) > 1950 Then 'let's assume there are no movies older then 1950 + For c = 0 To lst.Count - 1 + If lst(c).Year = tmpyear Then + ret = c + Exit For + End If + Next + End If + End If + Return ret + End Function + + Public Sub GetSearchMovieInfoAsync(ByVal imdbID As String, ByVal IMDBMovie As MediaContainers.Movie, ByVal Options As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.SearchDetails, _ + .Parameter = imdbID, .IMDBMovie = IMDBMovie, .Options = Options}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + + Public Sub SearchMovieAsync(ByVal sMovie As String, ByVal filterOptions As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.Movies, _ + .Parameter = sMovie, .Options = filterOptions}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + Select Case Args.Search + Case SearchType.Movies + Dim r As MovieSearchResults = SearchMovie(Args.Parameter) + e.Result = New Results With {.ResultType = SearchType.Movies, .Result = r} + Case SearchType.SearchDetails + Dim s As Boolean = GetMovieInfo(Args.Parameter, Args.IMDBMovie, False, False, True, Args.Options, True) + e.Result = New Results With {.ResultType = SearchType.SearchDetails, .Success = s} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub BW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBg.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.ResultType + Case SearchType.Movies + RaiseEvent SearchResultsDownloaded(DirectCast(Res.Result, MovieSearchResults)) + Case SearchType.SearchDetails + Dim movieInfo As MovieSearchResults = DirectCast(Res.Result, MovieSearchResults) + RaiseEvent SearchMovieInfoDownloaded(_sPoster, Res.Success) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + 'Private Function GetForcedTitle(ByVal strID As String, ByVal oTitle As String) As String + ' Dim fTitle As String = oTitle + ' Dim Movie As WatTmdb.V3.TmdbMovie + + ' Try + ' '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + ' If Left(strID.ToLower(), 4) = "tt" Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), _MySettings.TMDBLanguage) + ' If IsNothing(Movie) And _MySettings.FallBackEng Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), "en") + ' End If + ' Else + ' Movie = _TMDBApi.GetMovieByIMDB(strID) + ' End If + + ' fTitle = Movie.title + + ' Return fTitle + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' Return fTitle + ' End Try + 'End Function + + Private Function SearchMovie(ByVal sMovie As String) As MovieSearchResults + Try + Dim R As New MovieSearchResults + Dim Page As Integer = 1 + Dim Movies As WatTmdb.V3.TmdbMovieSearch + Dim TotP As Integer + Dim aE As Boolean + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + If Movies.total_results = 0 And _MySettings.FallBackEng Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + aE = True + End If + If Movies.total_results > 0 Then + Dim t1 As String + Dim t2 As String + Dim t3 As String + TotP = Movies.total_pages + While Page <= TotP And Page <= 3 + For Each aMovie In Movies.results + Dim aMI As WatTmdb.V3.TmdbMovie + aMI = _TMDBApi.GetMovieInfo(aMovie.id) + If IsNothing(aMI) Then + aMI = _TMDBApiE.GetMovieInfo(aMovie.id) + End If + If IsNothing(aMI.imdb_id) Then + t1 = "" + Else + t1 = aMI.imdb_id.ToString + End If + t2 = CStr(IIf(String.IsNullOrEmpty(aMovie.title), "", aMovie.title)) + t3 = Left(CStr(IIf(String.IsNullOrEmpty(aMovie.release_date), "", aMovie.release_date)), 4) + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(t1, t2, t3, 0) + lNewMovie.TMDBID = aMI.id.ToString + R.Matches.Add(lNewMovie) + Next + Page = Page + 1 + If aE Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + Else + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + End If + + End While + End If + + Return R + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Nothing + End Try + End Function + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim FullCast As Boolean + Dim FullCrew As Boolean + Dim IMDBMovie As MediaContainers.Movie + Dim Options As Structures.ScrapeOptions + Dim Parameter As String + Dim Search As SearchType + 'Dim TMDBConf As V3.TmdbConfiguration + 'Dim TMDBApi As V3.Tmdb + 'Dim FallBackEng As Boolean + 'Dim TMDBLang As String +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultType As SearchType + Dim Success As Boolean + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TMDB.Data/Scraper/clsScrapeTrailers.vb b/Addons/scraper.TMDB.Data/Scraper/clsScrapeTrailers.vb new file mode 100644 index 0000000..72ce5f8 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/clsScrapeTrailers.vb @@ -0,0 +1,265 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System +Imports System.IO +Imports System.Net +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI +Imports WatTmdb + +Public Class Trailers + +#Region "Fields" + + Private WebPage As New HTTP + Private _ImdbID As String = String.Empty + Private _ImdbTrailerPage As String = String.Empty + Private _TrailerList As New List(Of String) + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + Me.Clear() + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + AddHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + Me.WebPage.Cancel() + End Sub + + Public Sub Clear() + Me._TrailerList.Clear() + Me._ImdbID = String.Empty + Me._ImdbTrailerPage = String.Empty + End Sub + + Public Sub DeleteTrailers(ByVal sPath As String, ByVal NewTrailer As String) + Dim parPath As String = Directory.GetParent(sPath).FullName + Dim tmpName As String = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(sPath))) + Dim tmpNameNoStack As String = Path.Combine(parPath, Path.GetFileNameWithoutExtension(sPath)) + For Each t As String In Master.eSettings.ValidExts + If File.Exists(String.Concat(tmpName, "-trailer", t)) AndAlso Not String.Concat(tmpName, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpName, "[trailer]", t)) AndAlso Not String.Concat(tmpName, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "[trailer]", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "-trailer", t)) AndAlso Not String.Concat(tmpNameNoStack, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) + End If + Next + End Sub + + Public Sub DownloadProgressUpdated(ByVal iPercent As Integer) + RaiseEvent ProgressUpdated(iPercent) + End Sub + + Public Function DownloadSingleTrailer(ByVal sPath As String, ByVal ImdbID As String, ByVal isSingle As Boolean, ByVal currNfoTrailer As String) As String + Dim tURL As String = String.Empty + Try + Me._TrailerList.Clear() + + If Not Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, True) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + + Dim tLink As String = String.Empty + If Regex.IsMatch(Me._TrailerList.Item(0).ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Dim YT As New YouTube.Scraper + YT.GetVideoLinks(Me._TrailerList.Item(0).ToString) + If YT.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + tLink = YT.VideoLinks(Master.eSettings.PreferredTrailerQuality).URL + Else + Select Case Master.eSettings.PreferredTrailerQuality + Case Enums.TrailerQuality.HD1080p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720p) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720p).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD1080pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720pVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720pVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HD720p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD720pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HQFLV + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HQVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.SQMP4 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.SQFLV + tLink = String.Empty + Case Enums.TrailerQuality.SQVP8 + tLink = String.Empty + End Select + End If + Else + tLink = Me._TrailerList.Item(0).ToString + End If + + If Not String.IsNullOrEmpty(tLink) Then + tURL = WebPage.DownloadFile(tLink, sPath, False, "trailer") + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + End If + ElseIf Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, False) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + tURL = Me._TrailerList.Item(0).ToString + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return tURL + End Function + + Public Function DownloadTrailer(ByVal sPath As String, ByVal sURL As String) As String + Dim tURL As String = String.Empty + If Not String.IsNullOrEmpty(sURL) Then + tURL = WebPage.DownloadFile(sURL, sPath, True, "trailer") + + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + Return tURL + End Function + + Public Function GetTrailers(ByVal ImdbID As String, Optional ByVal BreakAfterFound As Boolean = True) As List(Of String) + Me._ImdbID = ImdbID + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", False) Then + Me.GetTMDBTrailer() + End If + + Return Me._TrailerList + End Function + + Public Function IsAllowedToDownload(ByVal sPath As String, ByVal isDL As Boolean, ByVal currNfoTrailer As String, Optional ByVal isSS As Boolean = False) As Boolean + Dim fScanner As New Scanner + + If isDL Then + If String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) OrElse Master.eSettings.OverwriteTrailer Then + Return True + Else + If isSS AndAlso String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) Then + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + Else + Return False + End If + End If + Else + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + End If + End Function + + Private Sub GetTMDBTrailer() + Dim TMDB As New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim YT As List(Of String) + + YT = TMDB.GetTrailers(_ImdbID) + + If Not YT.Count = 0 Then + For Each ast In YT + Me._TrailerList.Add(ast) + Next + End If + + TMDB = Nothing + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Scraper/clsScrapeYouTube.vb b/Addons/scraper.TMDB.Data/Scraper/clsScrapeYouTube.vb new file mode 100644 index 0000000..51ed7c4 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/clsScrapeYouTube.vb @@ -0,0 +1,336 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace YouTube + + Public Class Scraper + +#Region "Fields" + + Friend WithEvents bwYT As New System.ComponentModel.BackgroundWorker + + Private _VideoLinks As VideoLinkItemCollection + +#End Region 'Fields + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event VideoLinksRetrieved(ByVal bSuccess As Boolean) + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property VideoLinks() As VideoLinkItemCollection + Get + If _VideoLinks Is Nothing Then + _VideoLinks = New VideoLinkItemCollection + End If + Return _VideoLinks + End Get + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() + If bwYT.IsBusy Then bwYT.CancelAsync() + + While bwYT.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetVideoLinks(ByVal url As String) + Try + _VideoLinks = ParseYTFormats(url, False) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub GetVideoLinksAsync(ByVal url As String) + Try + If Not bwYT.IsBusy Then + _VideoLinks = Nothing + bwYT.WorkerSupportsCancellation = True + bwYT.RunWorkerAsync(url) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwYT.DoWork + Dim Url As String = DirectCast(e.Argument, String) + + Try + e.Result = ParseYTFormats(Url, True) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwYT.RunWorkerCompleted + Try + If e.Cancelled Then + 'user cancelled + RaiseEvent VideoLinksRetrieved(False) + ElseIf e.Error IsNot Nothing Then + 'exception occurred + RaiseEvent Exception(e.Error) + Else + 'all good + If e.Result IsNot Nothing Then + _VideoLinks = DirectCast(e.Result, VideoLinkItemCollection) + RaiseEvent VideoLinksRetrieved(True) + Else + RaiseEvent VideoLinksRetrieved(False) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetVideoTitle(ByVal HTML As String) As String + Dim result As String = "" + 'Dim KeyPattern As String = "'VIDEO_TITLE':\s*'([^']*?)'" + Dim KeyPattern As String = "meta name=\""title\"" content=\s*\""([^']*?)\""" + 'meta name="title" content= + If Regex.IsMatch(HTML, KeyPattern) Then + result = Regex.Match(HTML, KeyPattern).Groups(1).Value + End If + + Return result + End Function + + Private Function ParseYTFormats(ByVal url As String, ByVal doProgress As Boolean) As VideoLinkItemCollection + Dim DownloadLinks As New VideoLinkItemCollection + Dim sHTTP As New HTTP + + Try + If bwYT.CancellationPending Then Return DownloadLinks + + Dim Html As String = sHTTP.DownloadData(url) + If Html.ToLower.Contains("page not found") Then + Html = String.Empty + End If + + If String.IsNullOrEmpty(Html.Trim) Then Return DownloadLinks + If bwYT.CancellationPending Then Return DownloadLinks + + Dim VideoTitle As String = GetVideoTitle(Html) + VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") + + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) + If fmtMatch.Success Then + Dim FormatMap As String = fmtMatch.Groups(1).Value + Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") + + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) + Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) + + For i As Integer = 0 To FormatArray.Length - 1 + Dim yturl As String = rurl.Match(FormatArray(i)).Groups(1).Value + Dim ytitag As String = ritag.Match(FormatArray(i)).Groups(1).Value + Dim ytsig As String = rsig.Match(FormatArray(i)).Groups(1).Value + + 'Console.WriteLine("Trailer Itag: {0}", ytitag) + 'Console.WriteLine("Trailer Url: {0}", yturl) + 'Console.WriteLine("Trailer Sig: {0}", ytsig) + + Dim Link As New VideoLinkItem + Select Case ytitag + ' ********************************************************************** + ' see all itags http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs + ' ********************************************************************** + Case "5" + Link.Description = "240p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "6" + Link.Description = "270p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "13" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "17" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "18" + Link.Description = "360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQMP4 + Case "22" + Link.Description = "720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD720p + Case "34" + Link.Description = "360p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQFLV + Case "35" + Link.Description = "480p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HQFLV + Case "36" + Link.Description = "240p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "37" + Link.Description = "1080p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD1080p + Case "38" + Link.Description = "1536p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "43" + Link.Description = "360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.SQVP8 + Case "44" + Link.Description = "480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HQVP8 + Case "45" + Link.Description = "720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD720pVP8 + Case "46" + Link.Description = "1080p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD1080pVP8 + Case "82" + Link.Description = "3D 360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "83" + Link.Description = "3D 480p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "84" + Link.Description = "3D 720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "85" + Link.Description = "3D 520p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "100" + Link.Description = "3D 360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "101" + Link.Description = "3D 480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "102" + Link.Description = "3D 720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "120" + Link.Description = "720p LiveStream (FLV, AVC)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case Else + Link.Description = "Other" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + 'Continue For + End Select + + Link.URL = Web.HttpUtility.UrlDecode(Web.HttpUtility.UrlDecode(yturl)) & "&signature=" & ytsig & "&title=" & Web.HttpUtility.UrlEncode(VideoTitle) + Link.URL = Link.URL.Replace("sig=", "signature=") ' sig= returns HTTP 403 //oldstyle, keep it + 'Console.WriteLine("Trailer Url decoded: {0}", Link.URL) + + If bwYT.CancellationPending Then Return DownloadLinks + + If Not String.IsNullOrEmpty(Link.URL) AndAlso sHTTP.IsValidURL(Link.URL) Then + DownloadLinks.Add(Link) + End If + + If bwYT.CancellationPending Then Return DownloadLinks + + Next + + End If + Return DownloadLinks + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New VideoLinkItemCollection + Finally + sHTTP = Nothing + End Try + End Function + +#End Region 'Methods + + End Class + + Public Class VideoLinkItem + +#Region "Fields" + + Private _Description As String + Private _FormatQuality As Enums.TrailerQuality + Private _URL As String + +#End Region 'Fields + +#Region "Properties" + + Public Property Description() As String + Get + Return _Description + End Get + Set(ByVal value As String) + _Description = value + End Set + End Property + + Public Property URL() As String + Get + Return _URL + End Get + Set(ByVal value As String) + _URL = value + End Set + End Property + + Friend Property FormatQuality() As Enums.TrailerQuality + Get + Return _FormatQuality + End Get + Set(ByVal value As Enums.TrailerQuality) + _FormatQuality = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class VideoLinkItemCollection + Inherits Generic.SortedList(Of Enums.TrailerQuality, VideoLinkItem) + +#Region "Methods" + + Public Shadows Sub Add(ByVal Link As VideoLinkItem) + If Not MyBase.ContainsKey(Link.FormatQuality) Then MyBase.Add(Link.FormatQuality, Link) + End Sub + +#End Region 'Methods + + End Class + +End Namespace + diff --git a/Addons/scraper.TMDB.Data/Scraper/dlgImgSelect.Designer.vb b/Addons/scraper.TMDB.Data/Scraper/dlgImgSelect.Designer.vb new file mode 100644 index 0000000..3c9254c --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/dlgImgSelect.Designer.vb @@ -0,0 +1,569 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgImgSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgImgSelect)) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.pnlSize = New System.Windows.Forms.Panel() + Me.btnPreview = New System.Windows.Forms.Button() + Me.rbSmall = New System.Windows.Forms.RadioButton() + Me.rbMedium = New System.Windows.Forms.RadioButton() + Me.rbLarge = New System.Windows.Forms.RadioButton() + Me.rbXLarge = New System.Windows.Forms.RadioButton() + Me.pnlFanart = New System.Windows.Forms.Panel() + Me.chkThumb = New System.Windows.Forms.CheckBox() + Me.chkMid = New System.Windows.Forms.CheckBox() + Me.chkOriginal = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlDLStatus = New System.Windows.Forms.Panel() + Me.pnlIMDB = New System.Windows.Forms.Panel() + Me.lblDL6Status = New System.Windows.Forms.Label() + Me.lblDL6 = New System.Windows.Forms.Label() + Me.pbDL6 = New System.Windows.Forms.ProgressBar() + Me.pnlSinglePic = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlFANARTTV = New System.Windows.Forms.Panel() + Me.lblDL3Status = New System.Windows.Forms.Label() + Me.lblDL3 = New System.Windows.Forms.Label() + Me.pbDL3 = New System.Windows.Forms.ProgressBar() + Me.pnlMDB = New System.Windows.Forms.Panel() + Me.lblDL5Status = New System.Windows.Forms.Label() + Me.lblDL5 = New System.Windows.Forms.Label() + Me.pbDL5 = New System.Windows.Forms.ProgressBar() + Me.pnlIMPA = New System.Windows.Forms.Panel() + Me.lblDL4Status = New System.Windows.Forms.Label() + Me.lblDL4 = New System.Windows.Forms.Label() + Me.pbDL4 = New System.Windows.Forms.ProgressBar() + Me.pnlTMDB = New System.Windows.Forms.Panel() + Me.lblDL2Status = New System.Windows.Forms.Label() + Me.lblDL2 = New System.Windows.Forms.Label() + Me.pbDL2 = New System.Windows.Forms.ProgressBar() + Me.TableLayoutPanel1.SuspendLayout() + Me.pnlBottomMain.SuspendLayout() + Me.pnlSize.SuspendLayout() + Me.pnlFanart.SuspendLayout() + Me.pnlDLStatus.SuspendLayout() + Me.pnlIMDB.SuspendLayout() + Me.pnlSinglePic.SuspendLayout() + Me.pnlFANARTTV.SuspendLayout() + Me.pnlMDB.SuspendLayout() + Me.pnlIMPA.SuspendLayout() + Me.pnlTMDB.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(687, 11) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(836, 495) + Me.pnlBG.TabIndex = 1 + Me.pnlBG.Visible = False + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.pnlSize) + Me.pnlBottomMain.Controls.Add(Me.pnlFanart) + Me.pnlBottomMain.Controls.Add(Me.lblInfo) + Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) + Me.pnlBottomMain.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 495) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(836, 50) + Me.pnlBottomMain.TabIndex = 0 + ' + 'pnlSize + ' + Me.pnlSize.BackColor = System.Drawing.Color.White + Me.pnlSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.pnlSize.Controls.Add(Me.btnPreview) + Me.pnlSize.Controls.Add(Me.rbSmall) + Me.pnlSize.Controls.Add(Me.rbMedium) + Me.pnlSize.Controls.Add(Me.rbLarge) + Me.pnlSize.Controls.Add(Me.rbXLarge) + Me.pnlSize.Location = New System.Drawing.Point(8, 8) + Me.pnlSize.Name = "pnlSize" + Me.pnlSize.Size = New System.Drawing.Size(673, 34) + Me.pnlSize.TabIndex = 4 + Me.pnlSize.Visible = False + ' + 'btnPreview + ' + Me.btnPreview.Enabled = False + Me.btnPreview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnPreview.Image = CType(resources.GetObject("btnPreview.Image"), System.Drawing.Image) + Me.btnPreview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPreview.Location = New System.Drawing.Point(593, 5) + Me.btnPreview.Name = "btnPreview" + Me.btnPreview.Size = New System.Drawing.Size(75, 23) + Me.btnPreview.TabIndex = 6 + Me.btnPreview.Text = "Preview" + Me.btnPreview.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPreview.UseVisualStyleBackColor = True + ' + 'rbSmall + ' + Me.rbSmall.AutoSize = True + Me.rbSmall.Enabled = False + Me.rbSmall.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbSmall.Location = New System.Drawing.Point(475, 8) + Me.rbSmall.Name = "rbSmall" + Me.rbSmall.Size = New System.Drawing.Size(53, 17) + Me.rbSmall.TabIndex = 5 + Me.rbSmall.TabStop = True + Me.rbSmall.Text = "Small" + Me.rbSmall.UseVisualStyleBackColor = True + ' + 'rbMedium + ' + Me.rbMedium.AutoSize = True + Me.rbMedium.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbMedium.Location = New System.Drawing.Point(201, 8) + Me.rbMedium.Name = "rbMedium" + Me.rbMedium.Size = New System.Drawing.Size(69, 17) + Me.rbMedium.TabIndex = 4 + Me.rbMedium.TabStop = True + Me.rbMedium.Text = "Medium" + Me.rbMedium.UseVisualStyleBackColor = True + ' + 'rbLarge + ' + Me.rbLarge.AutoSize = True + Me.rbLarge.Enabled = False + Me.rbLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbLarge.Location = New System.Drawing.Point(343, 8) + Me.rbLarge.Name = "rbLarge" + Me.rbLarge.Size = New System.Drawing.Size(55, 17) + Me.rbLarge.TabIndex = 3 + Me.rbLarge.TabStop = True + Me.rbLarge.Text = "Cover" + Me.rbLarge.UseVisualStyleBackColor = True + ' + 'rbXLarge + ' + Me.rbXLarge.AutoSize = True + Me.rbXLarge.Enabled = False + Me.rbXLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbXLarge.Location = New System.Drawing.Point(26, 8) + Me.rbXLarge.Name = "rbXLarge" + Me.rbXLarge.Size = New System.Drawing.Size(66, 17) + Me.rbXLarge.TabIndex = 2 + Me.rbXLarge.TabStop = True + Me.rbXLarge.Text = "Original" + Me.rbXLarge.UseVisualStyleBackColor = True + ' + 'pnlFanart + ' + Me.pnlFanart.BackColor = System.Drawing.Color.White + Me.pnlFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFanart.Controls.Add(Me.chkThumb) + Me.pnlFanart.Controls.Add(Me.chkMid) + Me.pnlFanart.Controls.Add(Me.chkOriginal) + Me.pnlFanart.Location = New System.Drawing.Point(8, 8) + Me.pnlFanart.Name = "pnlFanart" + Me.pnlFanart.Size = New System.Drawing.Size(339, 34) + Me.pnlFanart.TabIndex = 5 + Me.pnlFanart.Visible = False + ' + 'chkThumb + ' + Me.chkThumb.AutoSize = True + Me.chkThumb.Location = New System.Drawing.Point(231, 8) + Me.chkThumb.Name = "chkThumb" + Me.chkThumb.Size = New System.Drawing.Size(111, 17) + Me.chkThumb.TabIndex = 9 + Me.chkThumb.Text = "Check All Thumb" + Me.chkThumb.UseVisualStyleBackColor = True + ' + 'chkMid + ' + Me.chkMid.AutoSize = True + Me.chkMid.Location = New System.Drawing.Point(131, 8) + Me.chkMid.Name = "chkMid" + Me.chkMid.Size = New System.Drawing.Size(96, 17) + Me.chkMid.TabIndex = 7 + Me.chkMid.Text = "Check All Mid" + Me.chkMid.UseVisualStyleBackColor = True + ' + 'chkOriginal + ' + Me.chkOriginal.AutoSize = True + Me.chkOriginal.Location = New System.Drawing.Point(7, 8) + Me.chkOriginal.Name = "chkOriginal" + Me.chkOriginal.Size = New System.Drawing.Size(118, 17) + Me.chkOriginal.TabIndex = 8 + Me.chkOriginal.Text = "Check All Original" + Me.chkOriginal.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.Location = New System.Drawing.Point(402, 10) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(240, 31) + Me.lblInfo.TabIndex = 3 + Me.lblInfo.Text = "Selected item will be set as fanart. All checked items will be saved to \extrathu" & _ + "mbs." + Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblInfo.Visible = False + ' + 'pnlDLStatus + ' + Me.pnlDLStatus.BackColor = System.Drawing.Color.White + Me.pnlDLStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlDLStatus.Controls.Add(Me.pnlIMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlSinglePic) + Me.pnlDLStatus.Controls.Add(Me.pnlFANARTTV) + Me.pnlDLStatus.Controls.Add(Me.pnlMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlIMPA) + Me.pnlDLStatus.Controls.Add(Me.pnlTMDB) + Me.pnlDLStatus.Location = New System.Drawing.Point(253, 98) + Me.pnlDLStatus.Name = "pnlDLStatus" + Me.pnlDLStatus.Size = New System.Drawing.Size(331, 330) + Me.pnlDLStatus.TabIndex = 0 + Me.pnlDLStatus.Visible = False + ' + 'pnlIMDB + ' + Me.pnlIMDB.Controls.Add(Me.lblDL6Status) + Me.pnlIMDB.Controls.Add(Me.lblDL6) + Me.pnlIMDB.Controls.Add(Me.pbDL6) + Me.pnlIMDB.Location = New System.Drawing.Point(3, 84) + Me.pnlIMDB.Name = "pnlIMDB" + Me.pnlIMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlIMDB.TabIndex = 9 + ' + 'lblDL6Status + ' + Me.lblDL6Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL6Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL6Status.Name = "lblDL6Status" + Me.lblDL6Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL6Status.TabIndex = 8 + ' + 'lblDL6 + ' + Me.lblDL6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL6.Location = New System.Drawing.Point(5, 10) + Me.lblDL6.Name = "lblDL6" + Me.lblDL6.Size = New System.Drawing.Size(310, 13) + Me.lblDL6.TabIndex = 7 + Me.lblDL6.Text = "Performing Preliminary Tasks..." + ' + 'pbDL6 + ' + Me.pbDL6.Location = New System.Drawing.Point(6, 52) + Me.pbDL6.Name = "pbDL6" + Me.pbDL6.Size = New System.Drawing.Size(309, 19) + Me.pbDL6.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL6.TabIndex = 6 + ' + 'pnlSinglePic + ' + Me.pnlSinglePic.BackColor = System.Drawing.Color.White + Me.pnlSinglePic.Controls.Add(Me.Label2) + Me.pnlSinglePic.Controls.Add(Me.ProgressBar1) + Me.pnlSinglePic.Location = New System.Drawing.Point(3, 3) + Me.pnlSinglePic.Name = "pnlSinglePic" + Me.pnlSinglePic.Size = New System.Drawing.Size(321, 75) + Me.pnlSinglePic.TabIndex = 9 + Me.pnlSinglePic.Visible = False + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(5, 10) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(310, 13) + Me.Label2.TabIndex = 7 + Me.Label2.Text = "Downloading Selected Image..." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(6, 53) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(309, 19) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 6 + ' + 'pnlFANARTTV + ' + Me.pnlFANARTTV.Controls.Add(Me.lblDL3Status) + Me.pnlFANARTTV.Controls.Add(Me.lblDL3) + Me.pnlFANARTTV.Controls.Add(Me.pbDL3) + Me.pnlFANARTTV.Location = New System.Drawing.Point(3, 84) + Me.pnlFANARTTV.Name = "pnlFANARTTV" + Me.pnlFANARTTV.Size = New System.Drawing.Size(321, 75) + Me.pnlFANARTTV.TabIndex = 11 + ' + 'lblDL3Status + ' + Me.lblDL3Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL3Status.Name = "lblDL3Status" + Me.lblDL3Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL3Status.TabIndex = 8 + ' + 'lblDL3 + ' + Me.lblDL3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3.Location = New System.Drawing.Point(5, 10) + Me.lblDL3.Name = "lblDL3" + Me.lblDL3.Size = New System.Drawing.Size(310, 13) + Me.lblDL3.TabIndex = 7 + Me.lblDL3.Text = "Performing Preliminary Tasks..." + ' + 'pbDL3 + ' + Me.pbDL3.Location = New System.Drawing.Point(6, 53) + Me.pbDL3.Name = "pbDL3" + Me.pbDL3.Size = New System.Drawing.Size(309, 19) + Me.pbDL3.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL3.TabIndex = 6 + ' + 'pnlMDB + ' + Me.pnlMDB.Controls.Add(Me.lblDL5Status) + Me.pnlMDB.Controls.Add(Me.lblDL5) + Me.pnlMDB.Controls.Add(Me.pbDL5) + Me.pnlMDB.Location = New System.Drawing.Point(3, 246) + Me.pnlMDB.Name = "pnlMDB" + Me.pnlMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlMDB.TabIndex = 9 + ' + 'lblDL5Status + ' + Me.lblDL5Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL5Status.Name = "lblDL5Status" + Me.lblDL5Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL5Status.TabIndex = 8 + ' + 'lblDL5 + ' + Me.lblDL5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5.Location = New System.Drawing.Point(5, 10) + Me.lblDL5.Name = "lblDL5" + Me.lblDL5.Size = New System.Drawing.Size(310, 13) + Me.lblDL5.TabIndex = 7 + Me.lblDL5.Text = "Performing Preliminary Tasks..." + ' + 'pbDL5 + ' + Me.pbDL5.Location = New System.Drawing.Point(6, 53) + Me.pbDL5.Name = "pbDL5" + Me.pbDL5.Size = New System.Drawing.Size(309, 19) + Me.pbDL5.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL5.TabIndex = 6 + ' + 'pnlIMPA + ' + Me.pnlIMPA.Controls.Add(Me.lblDL4Status) + Me.pnlIMPA.Controls.Add(Me.lblDL4) + Me.pnlIMPA.Controls.Add(Me.pbDL4) + Me.pnlIMPA.Location = New System.Drawing.Point(3, 165) + Me.pnlIMPA.Name = "pnlIMPA" + Me.pnlIMPA.Size = New System.Drawing.Size(321, 75) + Me.pnlIMPA.TabIndex = 6 + ' + 'lblDL4Status + ' + Me.lblDL4Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL4Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL4Status.Name = "lblDL4Status" + Me.lblDL4Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL4Status.TabIndex = 8 + ' + 'lblDL4 + ' + Me.lblDL4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL4.Location = New System.Drawing.Point(5, 10) + Me.lblDL4.Name = "lblDL4" + Me.lblDL4.Size = New System.Drawing.Size(310, 13) + Me.lblDL4.TabIndex = 7 + Me.lblDL4.Text = "Performing Preliminary Tasks..." + ' + 'pbDL4 + ' + Me.pbDL4.Location = New System.Drawing.Point(6, 52) + Me.pbDL4.Name = "pbDL4" + Me.pbDL4.Size = New System.Drawing.Size(309, 19) + Me.pbDL4.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL4.TabIndex = 6 + ' + 'pnlTMDB + ' + Me.pnlTMDB.Controls.Add(Me.lblDL2Status) + Me.pnlTMDB.Controls.Add(Me.lblDL2) + Me.pnlTMDB.Controls.Add(Me.pbDL2) + Me.pnlTMDB.Location = New System.Drawing.Point(3, 3) + Me.pnlTMDB.Name = "pnlTMDB" + Me.pnlTMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlTMDB.TabIndex = 10 + ' + 'lblDL2Status + ' + Me.lblDL2Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL2Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL2Status.Name = "lblDL2Status" + Me.lblDL2Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL2Status.TabIndex = 8 + ' + 'lblDL2 + ' + Me.lblDL2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL2.Location = New System.Drawing.Point(5, 10) + Me.lblDL2.Name = "lblDL2" + Me.lblDL2.Size = New System.Drawing.Size(310, 13) + Me.lblDL2.TabIndex = 7 + Me.lblDL2.Text = "Performing Preliminary Tasks..." + ' + 'pbDL2 + ' + Me.pbDL2.Location = New System.Drawing.Point(6, 52) + Me.pbDL2.Name = "pbDL2" + Me.pbDL2.Size = New System.Drawing.Size(309, 19) + Me.pbDL2.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL2.TabIndex = 6 + ' + 'dlgImgSelect + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(836, 545) + Me.ControlBox = False + Me.Controls.Add(Me.pnlDLStatus) + Me.Controls.Add(Me.pnlBG) + Me.Controls.Add(Me.pnlBottomMain) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgImgSelect" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Poster" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlSize.ResumeLayout(False) + Me.pnlSize.PerformLayout() + Me.pnlFanart.ResumeLayout(False) + Me.pnlFanart.PerformLayout() + Me.pnlDLStatus.ResumeLayout(False) + Me.pnlIMDB.ResumeLayout(False) + Me.pnlSinglePic.ResumeLayout(False) + Me.pnlFANARTTV.ResumeLayout(False) + Me.pnlMDB.ResumeLayout(False) + Me.pnlIMPA.ResumeLayout(False) + Me.pnlTMDB.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlDLStatus As System.Windows.Forms.Panel + Friend WithEvents pnlIMPA As System.Windows.Forms.Panel + Friend WithEvents lblDL4Status As System.Windows.Forms.Label + Friend WithEvents lblDL4 As System.Windows.Forms.Label + Friend WithEvents pbDL4 As System.Windows.Forms.ProgressBar + Friend WithEvents lblInfo As System.Windows.Forms.Label + Friend WithEvents pnlSize As System.Windows.Forms.Panel + Friend WithEvents rbSmall As System.Windows.Forms.RadioButton + Friend WithEvents rbMedium As System.Windows.Forms.RadioButton + Friend WithEvents rbLarge As System.Windows.Forms.RadioButton + Friend WithEvents rbXLarge As System.Windows.Forms.RadioButton + Friend WithEvents pnlSinglePic As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL5Status As System.Windows.Forms.Label + Friend WithEvents lblDL5 As System.Windows.Forms.Label + Friend WithEvents pbDL5 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlFanart As System.Windows.Forms.Panel + Friend WithEvents chkThumb As System.Windows.Forms.CheckBox + Friend WithEvents chkMid As System.Windows.Forms.CheckBox + Friend WithEvents chkOriginal As System.Windows.Forms.CheckBox + Friend WithEvents btnPreview As System.Windows.Forms.Button + Friend WithEvents pnlFANARTTV As System.Windows.Forms.Panel + Friend WithEvents lblDL3Status As System.Windows.Forms.Label + Friend WithEvents lblDL3 As System.Windows.Forms.Label + Friend WithEvents pbDL3 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlTMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL2Status As System.Windows.Forms.Label + Friend WithEvents lblDL2 As System.Windows.Forms.Label + Friend WithEvents pbDL2 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlIMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL6Status As System.Windows.Forms.Label + Friend WithEvents lblDL6 As System.Windows.Forms.Label + Friend WithEvents pbDL6 As System.Windows.Forms.ProgressBar + +End Class diff --git a/Addons/scraper.TMDB.Data/Scraper/dlgImgSelect.resx b/Addons/scraper.TMDB.Data/Scraper/dlgImgSelect.resx new file mode 100644 index 0000000..3491405 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/dlgImgSelect.resx @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnPreview.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA + Cv8BNGKaggAAAuRJREFUOE+lkltsS3Ecx3+ILAsPFrfEyxJPXkh0bokg4UG78TQNI5FImPBAJKiNhBAy + MTwRMRJ1ibsZ29jc2t00Vrq1p3q6tqft6Tk9t87YeLCHff3/3Sp4dZJPvv/f5fs7///5HwJA/8Nv88jw + 8ApD1y+blnnNtKwGjmXl/qCQMxt+fB9xjI2NEYdGR0dp9OfP6Yph+gOKjpBmMcy8CoxwPi5gok81kDGt + BPOUci+xt1LO0Gy+ZAZuUcbtCe4NpHEtLKNBkHGfrQt5dySNrpSKIcvcbJkmka5pNKhrtrfxFE71RlD3 + UcT5gIjt7THMvhLHTEZlSwz1n0ScZTXe8yKextec6TRNY3zAF0O3tUYl7Ovqh+t9EHs8IRSdC4FO9+WZ + VBfEjlchHPEF8z2PRQnDg9b4AE3L0hA7wqNwDFWvP2Cn1w9Hox90zAc6McFRH9Y97MWuDn++56YwgJEc + G2CwAdmsSkPsCLf6I1jb3IUNL3sY3Zhxxgs67AG5PCg+4YW9uRsbWY33XAp8xrBlOHVdI1IVhb5oWdv1 + QBjLn3qwtqUDq5s6MOd0O2jfizwlx9uwqtGLdazGey76Q/hm6k4tmyXKyDLlVMV29aOApU0erHnWgWmH + noF2NYL2Ph2nuhFF+5uw8okXy1hP/YcghjTVqSgZoqQkkZZK2m58ErDouRfzLjSDKt2grbf+ZpMbJSeb + sPA520FvCINqxinLaaKoKHJsETGK1rCIh+8F3HnTh7vvgrjHbqMAjx/0CGiNDCAqJZGUEk45zQYk4nG+ + i7LPgoBkNIpsOglTzcDSFOQ0FTmdwdRiyvNqKolELAZZlre0t7URLSkro21VVSVdnZ1pSZKQSqXAPizY + /wHDMMCuKg+Ps6oKJZNBsL//6+7q6gWTaPzhWjx31qzF5Xb7Acf69S6mNRV2e22Fw1G7gcGVUcPyro3l + 5Qfnl5auYZ4Zk7l3ClsxuBQGTszNx/9SqHHDVG76BaMnpgu1OH2ZAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Scraper/dlgImgSelect.vb b/Addons/scraper.TMDB.Data/Scraper/dlgImgSelect.vb new file mode 100644 index 0000000..b2e44a9 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/dlgImgSelect.vb @@ -0,0 +1,1582 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports EmberScraperModule.EmberTMDBScraperModule +Imports RestSharp +Imports WatTmdb + +Public Class dlgImgSelect + +#Region "Fields" + + Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwIMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwFANARTTVDownload As New System.ComponentModel.BackgroundWorker + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Private TMDB As TMDB.Scraper + Private TMDBPosters As New List(Of MediaContainers.Image) + + Private MPDB As New MPDB.Scraper + Private MPDBPosters As New List(Of MediaContainers.Image) + + Private IMPA As New IMPA.Scraper + Private IMPAPosters As New List(Of MediaContainers.Image) + + Private IMDB As New IMDBimg.Scraper + Private IMDBPosters As New List(Of MediaContainers.Image) + + Private FANARTTVs As FANARTTVs.Scraper + Private FANARTTVPosters As New List(Of MediaContainers.Image) + + Private CachePath As String = String.Empty + Private chkImage() As CheckBox + Private DLType As Enums.ImageType + Private ETHashes As New List(Of String) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + + Private isEdit As Boolean = False + Private isShown As Boolean = False + Private iTop As Integer = 5 + Private lblImage() As Label + + Private noImages As Boolean = False + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private PreDL As Boolean = False + Private Results As New Containers.ImgResult + Private selIndex As Integer = -1 + + Private tMovie As New Structures.DBMovie + Private tmpImage As New MediaContainers.Image + Private _impaDone As Boolean = True + Private _imdbDone As Boolean = True + Private _fanarttvDone As Boolean = True + Private _mpdbDone As Boolean = True + Private _tmdbDone As Boolean = True + +#End Region 'Fields + +#Region "Events" + + Private Event IMPADone() + + Private Event MPDBDone() + + Private Event TMDBDone() + + Private Event IMDBDone() + + Private Event FANARTTVDone() +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.PreDL = True + Me.SetUp() + Me.StartDownload() + End Sub + + Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult + '// + ' Overload to pass data + '\\ + + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.isShown = True + + MyBase.ShowDialog() + Return Results + End Function + + Public Overloads Function ShowDialog() As Containers.ImgResult + Me.isShown = True + MyBase.ShowDialog() + + Return Results + End Function + + 'Rewrite to simplify + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal isChecked As Boolean, poster As MediaContainers.Image) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(256, 286) + Me.pbImage(iIndex).Size = New Size(250, 250) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.pnlImage(iIndex).Tag = poster + Me.pbImage(iIndex).Tag = poster + Me.pbImage(iIndex).Image = poster.WebImage.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.pnlBG.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If Me.DLType = Enums.ImageType.Fanart Then + ReDim Preserve Me.chkImage(iIndex) + Me.chkImage(iIndex) = New CheckBox() + Me.chkImage(iIndex).Name = iIndex.ToString + Me.chkImage(iIndex).Size = New Size(250, 30) + Me.chkImage(iIndex).AutoSize = False + Me.chkImage(iIndex).BackColor = Color.White + Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + 'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + Me.chkImage(iIndex).Left = 0 + Me.chkImage(iIndex).Top = 250 + Me.chkImage(iIndex).Checked = isChecked + Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve Me.lblImage(iIndex) + Me.lblImage(iIndex) = New Label() + Me.lblImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Size = New Size(250, 30) + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + If IsTMDBURL(poster.URL) Then + Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + Else + Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + End If + Me.lblImage(iIndex).Tag = poster + Me.lblImage(iIndex).Left = 0 + Me.lblImage(iIndex).Top = 250 + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 301 + Else + Me.iLeft += 271 + End If + End Sub + + Private Sub AllDoneDownloading() + If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone AndAlso Me._imdbDone AndAlso Me._fanarttvDone Then + Me.pnlDLStatus.Visible = False + Me.TMDBPosters.AddRange(Me.IMPAPosters) + Me.TMDBPosters.AddRange(Me.MPDBPosters) + Me.TMDBPosters.AddRange(Me.IMDBPosters) + Me.TMDBPosters.AddRange(Me.FANARTTVPosters) + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + End If + End Sub + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + PreviewImage() + End Sub + + Private Sub PreviewImage() + Try + Dim tImage As New Images + Me.pnlTMDB.Visible = False + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = True + Me.pnlDLStatus.Height = 85 + Me.pnlDLStatus.Top = 185 + + Application.DoEvents() + + Select Case True + Case rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + Case rbLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + Case rbMedium.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case rbSmall.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End Select + + Me.pnlSinglePic.Visible = False + + If Not IsNothing(tImage.Image) Then + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image) + + End If + + tImage.Dispose() + tImage = Nothing + + Catch ex As Exception + Me.pnlSinglePic.Visible = False + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.IMDBPosters.Count - 1 + Try + If Me.bwIMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMDBDownload.ReportProgress(i + 1, Me.IMDBPosters.Item(i).URL) + Try + Me.IMDBPosters.Item(i).WebImage.FromWeb(Me.IMDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMDBPosters.Item(i).URL = StringUtils.CleanURL(Me.IMDBPosters.Item(i).URL) + Me.IMDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMDBPosters.Item(i).Description, ")_(url=", Me.IMDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwIMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL6Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL6.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._imdbDone = True + RaiseEvent IMDBDone() + End If + End Sub + + Private Sub bwFANARTTVDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTVDownload.DoWork + '// + ' Thread to download FanartTV images from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.FANARTTVPosters.Count - 1 + Try + If Me.bwFANARTTVDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwFANARTTVDownload.ReportProgress(i + 1, Me.FANARTTVPosters.Item(i).URL) + Try + Me.FANARTTVPosters.Item(i).WebImage.FromWeb(Me.FANARTTVPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.FANARTTVPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.FANARTTVPosters.Item(i).URL = StringUtils.CleanURL(Me.FANARTTVPosters.Item(i).URL) + Me.FANARTTVPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.FANARTTVPosters.Item(i).Description, ")_(url=", Me.FANARTTVPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwFANARTTVDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTVDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL3.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwFANARTTVDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTVDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._fanarttvDone = True + RaiseEvent FANARTTVDone() + End If + End Sub + + Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork + '// + ' Thread to download impa posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + + For i As Integer = 0 To Me.IMPAPosters.Count - 1 + If bwIMPADownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL) + Try + Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL) + Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL4Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL4.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPABownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._impaDone = True + RaiseEvent IMPADone() + End If + End Sub + + Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.MPDBPosters.Count - 1 + Try + If Me.bwMPDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL) + Try + Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL) + Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL5Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL5.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._mpdbDone = True + RaiseEvent MPDBDone() + End If + End Sub + + Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork + '// + ' Thread to download tmdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + Dim thumbLink As String = String.Empty + Dim savePath As String = String.Empty + Dim extrathumbSize As String = String.Empty + + extrathumbSize = _MySettings.ManualETSize + + 'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all. + Dim posters As MediaContainers.Image() + If Me.DLType = Enums.ImageType.Fanart Then + posters = TMDBPosters.Where(Function(s) s.Description = extrathumbSize).ToArray() + Else + posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray() + End If + + For i As Integer = 0 To posters.Count - 1 + Try + If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then + If Me.bwTMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwTMDBDownload.ReportProgress((i + 1), posters(i).URL) + Try + posters(i).WebImage.FromWeb(posters(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then + If Me.DLType = Enums.ImageType.Fanart Then + + + If Not posters(i).URL.Contains("-thumb.") Then + Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org" + thumbLink = RemoveServerURL(posters(i).URL) + 'If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("-poster.", "-thumb.") + thumbLink = thumbLink.Replace("-original.", "-thumb.") + ''Else + 'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb") + 'End If + Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Else + Me.Results.Posters.Add(posters(i).URL) + End If + End If + If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then + Try + posters(i).URL = Me.CleanTMDBURL(posters(i).URL) + + savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg")) + posters(i).WebImage.Save(savePath, , , False) + + If Master.eSettings.AutoET Then + Dim tSize As New Enums.FanartSize + Select Case posters(i).Description.ToLower + Case "original" + tSize = Enums.FanartSize.Lrg + Case "mid" + tSize = Enums.FanartSize.Mid + Case "thumb" + tSize = Enums.FanartSize.Small + End Select + If Master.eSettings.AutoETSize = tSize Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + posters(i).isChecked = True + End If + End If + End If + + Catch + End Try + End If + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL2.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._tmdbDone = True + RaiseEvent TMDBDone() + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + IMPA.Cancel() + MPDB.Cancel() + TMDB.Cancel() + IMDB.Cancel() + FANARTTVs.Cancel() + + If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync() + If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync() + If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync() + If bwIMDBDownload.IsBusy Then bwIMDBDownload.CancelAsync() + If bwFANARTTVDownload.IsBusy Then bwFANARTTVDownload.CancelAsync() + + While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean) + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Text.ToLower.Contains(sType) Then + Me.chkImage(i).Checked = Checked + End If + Next + End Sub + + Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged + Me.CheckAll("(poster)", chkMid.Checked) + End Sub + + Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged + Me.CheckAll("(original)", chkOriginal.Checked) + End Sub + + Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged + Me.CheckAll("(thumb)", chkThumb.Checked) + End Sub + + Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'Me.tmpImage.Dispose() + + IMPA = Nothing + MPDB = Nothing + TMDB = Nothing + IMDB = Nothing + FANARTTVs = Nothing + + IMPAPosters = Nothing + MPDBPosters = Nothing + TMDBPosters = Nothing + IMDBPosters = Nothing + FANARTTVPosters = Nothing + + End Sub + + Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath) + End Sub + + Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not PreDL Then SetUp() + End Sub + + Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Try + Application.DoEvents() + If Not PreDL Then + StartDownload() + ElseIf noImages Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image) + Try + 'set all pnl colors to white first + 'remove all the current genres + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(i).BackColor = Color.White + Me.chkImage(i).ForeColor = Color.Black + Else + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + End If + Next + + 'set selected pnl color to blue + Me.pnlImage(iIndex).BackColor = Color.Blue + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(iIndex).BackColor = Color.Blue + Me.chkImage(iIndex).ForeColor = Color.White + Else + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + End If + + Me.selIndex = iIndex + + Me.pnlSize.Visible = False + + If IsTMDBURL(poster.URL) Then + Me.SetupSizes(poster.ParentID) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + Me.OK_Button.Enabled = False + Else + Me.OK_Button.Focus() + End If + Me.tmpImage.Clear() + Else + Me.rbXLarge.Checked = False + Me.rbLarge.Checked = False + Me.rbMedium.Checked = False + Me.rbSmall.Checked = False + Me.OK_Button.Enabled = True + Me.OK_Button.Focus() + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function IsTMDBURL(ByVal sURL As String) As Boolean + If sURL.ToLower.Contains(_TMDBConf.images.base_url.ToLower) Then + Return True + Else + Return False + End If + End Function + + Private Function CleanTMDBURL(ByVal sURL As String) As String + If IsTMDBURL(sURL) Then + Dim _sURL As New Uri(sURL) + sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped)) + Else + sURL = StringUtils.TruncateURL(sURL, 40, True) + End If + Return sURL.Replace(":", "$c$").Replace("/", "$s$") + End Function + + + Private Sub GetFanart() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim di As New DirectoryInfo(CachePath) + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + If Not IsNothing(tImage.WebImage.Image) Then + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + 'Case sFile.Name.Contains("(mid)") + ' tImage.Description = "mid" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + End If + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "backdrop") + + If _MySettings.UseFANARTTV Then + Me.lblDL3.Text = Master.eLang.GetString(120, "Retrieving data from Fanart.tv...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._fanarttvDone = False + + Me.FANARTTVs.GetImagesAsync(tMovie.Movie.ID) + Else + Me.lblDL3.Text = Master.eLang.GetString(121, "Fanart.tv is not enabled") + End If + + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub GetPosters() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim lFi As New List(Of FileInfo) + Dim di As New DirectoryInfo(CachePath) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 207 + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "poster") + + If _MySettings.UseIMDB Then + Me.lblDL6.Text = Master.eLang.GetString(117, "Retrieving data from IMDB.com...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._imdbDone = False + + Me.IMDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL6.Text = Master.eLang.GetString(118, "IMDB.com is not enabled") + End If + + If _MySettings.UseIMPA Then + Me.lblDL4.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._impaDone = False + + Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL4.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled") + End If + + If _MySettings.UseMPDB Then + Me.lblDL5.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._mpdbDone = False + + Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL5.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVDoneDownloading() + Try + Me._fanarttvDone = True + Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL3.Value = 0 + + 'Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = Posters.Count + + Me.FANARTTVPosters = Posters + + Me.bwFANARTTVDownload.WorkerSupportsCancellation = True + Me.bwFANARTTVDownload.WorkerReportsProgress = True + Me.bwFANARTTVDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVProgressUpdated(ByVal iPercent As Integer) + Me.pbDL3.Value = iPercent + End Sub + + Private Sub IMDBDoneDownloading() + Try + Me._imdbDone = True + Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL6.Value = 0 + + 'Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = Posters.Count + + Me.IMDBPosters = Posters + + Me.bwIMDBDownload.WorkerSupportsCancellation = True + Me.bwIMDBDownload.WorkerReportsProgress = True + Me.bwIMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL6.Value = iPercent + End Sub + + Private Sub IMPADoneDownloading() + Try + Me._impaDone = True + Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL4.Value = 0 + + 'Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = Posters.Count + + Me.IMPAPosters = Posters + + Me.bwIMPADownload.WorkerSupportsCancellation = True + Me.bwIMPADownload.WorkerReportsProgress = True + Me.bwIMPADownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAProgressUpdated(ByVal iPercent As Integer) + Me.pbDL4.Value = iPercent + End Sub + + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then + pnlBG.VerticalScroll.Value += 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum + End If + Else + If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then + pnlBG.VerticalScroll.Value -= 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub MPDBDoneDownloading() + Try + Me._mpdbDone = True + Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL5.Value = 0 + + 'Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = Posters.Count + + Me.MPDBPosters = Posters + + Me.bwMPDBDownload.WorkerSupportsCancellation = True + Me.bwMPDBDownload.WorkerReportsProgress = True + Me.bwMPDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL5.Value = iPercent + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + Dim tmpPathPlus As String = String.Empty + Dim extrathumbSize As String + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + If DLType = Enums.ImageType.Fanart Then + tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") + Else + tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") + End If + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If + + If Me.DLType = Enums.ImageType.Fanart Then + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + Dim isChecked As Boolean = False + + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + isChecked = True + Exit For + End If + Next + + If isChecked Then + Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs") + If isEdit Then + extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName) + Else + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName) + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName) + Else + extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName) + End If + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + End If + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + Dim fsET As FileStream + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) + Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg) + fsET.Close() + iVal += 1 + End If + Next + fsET = Nothing + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + Try + 'If Me.DLType = Enums.ImageType.Fanart OrElse Not IsTMDBURL(DirectCast(sender, PictureBox).Tag.ToString) Then + 'ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(DirectCast(sender, PictureBox).Image) + 'Else + PreviewImage() + 'End If + Catch + End Try + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Panel).Name), DirectCast(DirectCast(sender, Panel).Tag, MediaContainers.Image)) + End Sub + + Private Sub ProcessPics(ByVal posters As List(Of MediaContainers.Image)) + Try + Dim iIndex As Integer = 0 + + 'remove all entries with invalid images + If Master.eSettings.UseImgCache Then + For i As Integer = posters.Count - 1 To 0 Step -1 + If IsNothing(posters.Item(i).WebImage.Image) Then + posters.RemoveAt(i) + End If + Next + End If + + If posters.Count > 0 Then + For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) RemoveServerURL(p.URL)) + If Not IsNothing(xPoster.WebImage.Image) AndAlso (Me.DLType = Enums.ImageType.Fanart OrElse Not (IsTMDBURL(xPoster.URL) AndAlso Not xPoster.Description = "cover")) Then + Me.AddImage(xPoster.Description, iIndex, xPoster.isChecked, xPoster) + iIndex += 1 + End If + Next + Else + If Not Me.PreDL OrElse isShown Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Else + noImages = True + End If + End If + + Me.Activate() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub rbLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbMedium_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbMedium.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbSmall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSmall.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbXLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbXLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub SetUp() + Try + AddHandler TMDB.PostersDownloaded, AddressOf TMDBPostersDownloaded + AddHandler TMDB.ProgressUpdated, AddressOf TMDBProgressUpdated + AddHandler IMPA.PostersDownloaded, AddressOf IMPAPostersDownloaded + AddHandler IMPA.ProgressUpdated, AddressOf IMPAProgressUpdated + AddHandler MPDB.PostersDownloaded, AddressOf MPDBPostersDownloaded + AddHandler MPDB.ProgressUpdated, AddressOf MPDBProgressUpdated + AddHandler IMDB.PostersDownloaded, AddressOf IMDBPostersDownloaded + AddHandler IMDB.ProgressUpdated, AddressOf IMDBProgressUpdated + AddHandler FANARTTVs.PostersDownloaded, AddressOf FANARTTVPostersDownloaded + AddHandler FANARTTVs.ProgressUpdated, AddressOf FANARTTVProgressUpdated + AddHandler IMPADone, AddressOf IMPADoneDownloading + AddHandler TMDBDone, AddressOf TMDBDoneDownloading + AddHandler MPDBDone, AddressOf MPDBDoneDownloading + AddHandler IMDBDone, AddressOf IMDBDoneDownloading + AddHandler FANARTTVDone, AddressOf FANARTTVDoneDownloading + + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlBG.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlBG) + + If Me.DLType = Enums.ImageType.Posters Then + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = True + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = True + Me.pnlMDB.Visible = True + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 328 + Me.pnlDLStatus.Top = 82 + Else + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = True + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 129 + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(tMovie.Filename) + End If + End If + + CachePath = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, tMovie.Movie.IMDBID, Path.DirectorySeparatorChar, If(Me.DLType = Enums.ImageType.Posters, "posters", "fanart")) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview", True) + Me.chkThumb.Text = Master.eLang.GetString(41, "Check All Thumb") + Me.chkMid.Text = Master.eLang.GetString(42, "Check All Mid") + Me.chkOriginal.Text = Master.eLang.GetString(43, "Check All Original") + Me.lblInfo.Text = Master.eLang.GetString(44, "Selected item will be set as fanart. All checked items will be saved to \extrathumbs.") + Me.lblDL5.Text = Master.eLang.GetString(45, "Performing Preliminary Tasks...") + Me.lblDL4.Text = Me.lblDL5.Text + Me.lblDL3.Text = Me.lblDL5.Text + Me.lblDL2.Text = Me.lblDL5.Text + Me.Label2.Text = Master.eLang.GetString(46, "Downloading Selected Image...") + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(0, sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Function RemoveServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Sub SetupSizes(ByVal ParentID As String) + Try + rbXLarge.Checked = False + rbXLarge.Enabled = False + rbXLarge.Text = Master.eLang.GetString(47, "Original") + rbLarge.Checked = False + rbLarge.Enabled = False + rbMedium.Checked = False + rbSmall.Checked = False + rbSmall.Enabled = False + If Me.DLType = Enums.ImageType.Fanart Then + rbLarge.Text = "w1280" + rbMedium.Text = "poster" + rbSmall.Text = "thumb" + Else + rbLarge.Text = Master.eLang.GetString(48, "Cover") + rbMedium.Text = Master.eLang.GetString(49, "Medium") + rbSmall.Text = Master.eLang.GetString(50, "Small") + End If + + For Each TMDBPoster As MediaContainers.Image In TMDBPosters.Where(Function(f) f.ParentID = ParentID) + Select Case TMDBPoster.Description + Case "original" + ' xlarge + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbXLarge.Enabled = True + rbXLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "cover" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "w1280" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format("w1280 ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + End If + Case "thumb" + ' small + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbSmall.Enabled = True + rbSmall.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "mid" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + Case "poster" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format("Poster ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + End Select + Next + + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Small + rbSmall.Checked = rbSmall.Enabled + Case Enums.PosterSize.Mid + rbMedium.Checked = rbMedium.Enabled + Case Enums.PosterSize.Lrg + rbLarge.Checked = rbLarge.Enabled + Case Enums.PosterSize.Xlrg + rbXLarge.Checked = rbXLarge.Enabled + End Select + + pnlSize.Visible = True + + Invalidate() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub StartDownload() + Try + Select Case Me.DLType + Case Enums.ImageType.Posters + Me.GetPosters() + Case Enums.ImageType.Fanart + Me.GetFanart() + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBDoneDownloading() + Try + Me._tmdbDone = True + Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL2.Value = 0 + + 'Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = Posters.Count + + Me.TMDBPosters = Posters + + Me.bwTMDBDownload.WorkerSupportsCancellation = True + Me.bwTMDBDownload.WorkerReportsProgress = True + Me.bwTMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL2.Value = iPercent + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Scraper/dlgTMDBSearchResults.Designer.vb b/Addons/scraper.TMDB.Data/Scraper/dlgTMDBSearchResults.Designer.vb new file mode 100644 index 0000000..edf9f3b --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/dlgTMDBSearchResults.Designer.vb @@ -0,0 +1,460 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTMDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtTMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(497, 401) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(570, 401) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(4, 96) + Me.tvResults.Name = "tvResults" + Me.tvResults.ShowLines = False + Me.tvResults.ShowPlusMinus = False + Me.tvResults.ShowRootLines = False + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 4 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(294, 130) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(291, 70) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(291, 89) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(294, 295) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(472, 130) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(472, 156) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(472, 183) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtTMDBID + ' + Me.txtTMDBID.Enabled = False + Me.txtTMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBID.Location = New System.Drawing.Point(139, 399) + Me.txtTMDBID.Name = "txtTMDBID" + Me.txtTMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtTMDBID.TabIndex = 6 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(643, 64) + Me.pnlTop.TabIndex = 8 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(257, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(4, 403) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(130, 17) + Me.chkManual.TabIndex = 5 + Me.chkManual.Text = "Manual TMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(245, 399) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 7 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(472, 247) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(37, 13) + Me.lblIMDB.TabIndex = 20 + Me.lblIMDB.Text = "TMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(410, 130) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(33, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(410, 156) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(410, 183) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(410, 247) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(56, 13) + Me.lblIMDBHeader.TabIndex = 19 + Me.lblIMDBHeader.Text = "TMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(291, 279) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(262, 70) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 3 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(4, 71) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 2 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(364, 183) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 18 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(100, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching TMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(308, 155) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'dlgTMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(643, 454) + Me.ControlBox = False + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtTMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgTMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents tvResults As System.Windows.Forms.TreeView + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lblYear As System.Windows.Forms.Label + Friend WithEvents lblDirector As System.Windows.Forms.Label + Friend WithEvents lblGenre As System.Windows.Forms.Label + Friend WithEvents txtTMDBID As System.Windows.Forms.TextBox + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents lblIMDB As System.Windows.Forms.Label + Friend WithEvents lblYearHeader As System.Windows.Forms.Label + Friend WithEvents lblDirectorHeader As System.Windows.Forms.Label + Friend WithEvents lblGenreHeader As System.Windows.Forms.Label + Friend WithEvents lblIMDBHeader As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel + Friend WithEvents Label4 As System.Windows.Forms.Label + +End Class diff --git a/Addons/scraper.TMDB.Data/Scraper/dlgTMDBSearchResults.resx b/Addons/scraper.TMDB.Data/Scraper/dlgTMDBSearchResults.resx new file mode 100644 index 0000000..017a5ad --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/dlgTMDBSearchResults.resx @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA + CvYBwq9wAwAACyJJREFUaEPtWAdQVWcWRukgvIcUqRopPlqoooKU0AREUZEOwpP6no/26EqTJiAaKcYS + xBJlVSwJSYhl1bgJiZlZ427cLG4ym92YZFJ2J8lks5vZFO+359w8jEZNzEyScWe4M9+8y3v3/v/5TvnO + +dHSmrqmPDDlgSkPTHlgygNTHpjywIPvATt7hwfPSDuH2XcY5enlbRwcEjLLzcMjxNHJqcfW1q7VwtLq + IanFrGkPDIPvGz4/IMB1nUqVrlQqe7Kyss4vjY//dPHixXBzc4OtrS1mmpu/M8vaesDW1r7T2sam3tfP + r4LeyXN395wzSSo7M0tLajbzJkeJ1OyX4Xur8WXl6tbevv63evv6Pt65c+eXnZ2dKCkpQXJyMoKDg7F8 + +XIhISFBWJ2YiOUJCZjr6ChC5uoqEMGvA4OCPlkUGDRqY2u38G7W2to7uM6TuYVM/mZoZPzTSK1atUqX + jNBPy8gwLikrkyrXqSxzc3Nt/Pz852bn5Lw0OjqKiYkJXL9+XXji4EE0NDSguLgYSUlJCA0NFbFgwQKR + UF5uLtatWweOjK+vL6KiooTS0lIhPT0dFDUkJiZOLA4OSQ0Ne8QpKjp6T0ho6MdRUdEoUiiwZMmSDyys + rLzI+nunYXhE5CQ73eDQsMDdu3eX9Pb2HqqoqDhBi5zfsWPH1a1bH32/qqrq65ycHMTFxcHDw0Pw8/PD + 4cOHceXKFfT19SEjI4ONQTp9yuVy8TMmNhZxS5dCXVEhkmBiTCQtLR3l5eWgNVFRWYm6ujqUlZXfUNEz + FDkmKlhaWgle3t5wdnb+QM/Q0JmM1L6DSFh4hGh8RERUXmNj4/vd3d2fNTQ23KB71NfXY+3atWBP9ff3 + o6OjAwryCqfH/PnzxRy3sLDAmTNncOrUKRQWFSE+fhkZUobU1FRERERgKRkfHh6OxNWrKUqNlGalUKmK + RYJMKGvNGrS0taG9o0PY0tPD3wm0Ptg5NjY2MDQ0FKxtbb8xMDSsJDMNCdPvyKVHIiKzO7u6kJeXJ1Ca + CMW0ydbHD6NYXQX2eGRkJNhgJkTFygTEvx0cHKCjoyPmOKfUgQMHsGx5AmgNrFy5UowGpwi/wyQosjhI + 6cZ7NW/ciJaWFly+fBkXL17E2NgYqmtqUFhYKK7PBNhBenp60NbWgalEsokM50pnEhyJm5dOe3vHuwUF + BWLoOI/zCpXoe/bP6H9uAsqKekQ8Eiaqio+PD4rIy7cSMDAwEKOwb98+MUpMMiY2DpmZmaIxnOtcH8uW + LRP279+PkydP4tChQ0T2CYyPj+PcuXNi9NgBR48eFYWAnr2NwLRp02BiYvKqjq6uO1ltTTAh6IgMSLe9 + aeNPNapB4VVBnleE1iOX0Xj0ddTtv4TE1CzKeXdYWVkhOjpaJDoZASZAi6OLvNpGqVBbW4vklBT4U4TY + GZx2OTlysEqxoUNDQ2LRv/jiizh//jxGRkaIdAPy8vMpcnlYv2ED4omAv7//zQiQmZg5cybc3D1G6N5e + A1ORQFJyysLuzZs/41xlz3JuFimLoep5GoV9LyN7yzjSK/vxsJcXzM3N4eLiQnkeP0lAYAKWlpZobWsT + qqurOUJCRkam4ObuDtL/fzk6OnbRNs4+vr5VjU1NH7DxTKSPotVAdcYOUyoVWE01EhoagnnzZKBeAQ9P + z1sJCGZmZlz812kt7qBzCd82C3dPT9ddu3Z9HBsbK3Do2LuVpArxRd3wUz0Dp5zjmK84Bp+AIJEAL0TS + hoCAAMHe3h5GxsZiDdRq8peLl393cnb5o5m5eRptISXY1NTUVPYPDExwmqnVarBINDc3YyPVAtcIEwgL + CyPDPTCLIi2lfajxiTXAEZBKpbC3d6im+3kaEjNuFgEReI+KTuAoMJKTk7AqpwQy1SicVWNwUpxCQnqB + aLyurq6YRpxCs2fP/o/xDJMiZ2eXFPJY26LAwGcWLFz4eycn5y59A4MA2sCYvvckdXqV6uCr9evroC5X + C3WUZlxLbDQ7jcTjOwIeHqL6TKYmE+AaMDIyvkDFzGu6EWYR9LQmO2tlVVUfe4IME1j62IPyzDRElg/A + u/0luNReRHZ1N6QSiaCtrS0wASrof5AyFNJCiwi88HyCH8Fb4yVJeGTk6nwSBy7s9vZ2YXPfTuwcfhqV + G5qRLV+LFStWiF2bncGRFyOgIaCvrw8TU1NIJFJMnz798xkmM+S0rg/BRRPV25RI+thjj/2XlYMkU4iJ + iQF1YmRnUmNqG4Lvo6+irPNxSExNBYlEwhtepdTJpoV4DOCQsrxZEFgh2DvTg4KDU7kfcDqSc4QNjc04 + cOENPDH+Hva98C56j42juLoRQYELIZPJ4OTkJPaNWwno6esLrqR+FM0DGuOZABexwc30CQkJE+8VSmXK + 4OCg2IS4/bN3srOzsYnUY/O+E6ht3EjekMDa2vqaqalpKr3CHdCDwLo8eXG7Z8woKS19mxWJGp/QQBHY + +Oggdl24jr6xN7D1qWvoPjmBTceuoqq1Dx5uMlEIuKYmGxhFQKB9aHZy+xutt5gQpNmPnXWb97Vk7iyv + Wto0PmwfHh4WNZ00W6AxQThy5AjOnj0DmlFuUM5/RG29hp6NI3DKfCtl37vCo6KWUIH+m3sLd9sKdRna + dj+FrhPX0DL8Gur3X4Gq/xJC1WOYmzWC2BQFOWYWjEkQXF1duQZY3QSaZN80NDJKpuVDCb53eP8ue+ts + 3769/jeHD39y+vRpPP/88yK6urvfppwfJA/J6Z14Ag9PnCp3vVLT0nJaWlu/4tmIi7WyQo2anmHUDV1B + 6cAlRFafwkNkuF3aUTikH0Ww4hBcPbxExbGzs2P5FIjM53q6elmavThVWT6NCHeOEmwFqcFNY+obGmxo + XM5oamrupGGsltQnk35kT6wiBBPsCLeH8RYqmZlZa6iBfZlCDW0NzTqN1IkLypsh3/oKPBWjmJv7JBwL + niKMwjH/SczJHUVaUR0V6zSWaoFViIr3OC25RIOH6VN6T+Pv5UnN91wwrgT2Auc8p80PnrBiYmIjtmzZ + 8jlFQGCp5Ekzt1AFX+UInJTPwKX0OcjUpyGrOIN55RQN5Rjk3WOYYWQosN7b2Np+QXusIKzURMCJPr8r + 3B8x+G4/s8F6P+T1771kQvPVhyQIAqsZN7fycjWCszdCVnUW7vUX4NXyArzbxuHZdBEu1ecQ3XoeC/x9 + RKGg3O+l9VbfEnFWt29nn1/rSklN3bZ9YIAblEBdXmxU3HGDqocRtOM1xAz/BXFH3kT40J/gs+llRHX+ + DpHhIUzgr0ZGRvlkZ4YmCj73E/Vfgtf0pqamT6vpwMJjCh+C+GxRlJ+LtB3PIu/SP6H4w2fIvPghwvdf + E4r2XhKCgxbdIDkdImNyCGsISwl8kNH/JQy855rOMpn4Gxkdtm3bti94YONBkccGbpaKwnzUbh9Ex/hV + VLzyDhJPvCHsOn4ajo5zz5IScXfnCLACcZMSG+OvSoA3U5WUiHsmJiVl7tmzRxigdKJxW+ihUxff79kz + iIPUcw4dOyGMPD2GAoXidXpcQVBqCHARc4P6iaf5n5EqwIOkltYcR8coGp/fp8b4zd69e8WTGzdIPsAc + O34cmzf3fES6v54eLWXuBJZtnq/u7Lo/o333tdTegwcnnzMrLCyqooPPb7f19v6dUusjapBvyeVrz9F5 + t5UeqiCoCZxCMQT+d57ufW3yKz7EuWxNOh9Ip7tUmneKNB4v1qQOD4jcvFj3ues+sBdrupTwEMGHsIDg + T5ic9blpPTj/jvwRN/JIwk2SwcT+bwx/YNNjyrApD0x5YMoD9+eB/wG4NXpfmvI52QAAAABJRU5ErkJg + gg== +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA + CukB/XXO0wAAAepJREFUOE+lkktIG1EUhkeFaLQ+UGulgthNEUHRCrqyIHZTdSd0Iyq46cL3Sly50ppV + uywYi2uDiyKK1ioFk0lm7mSmSgymJuIqSkwwCTVpGs3fM0Pa+poWceBj4N5zvnvOuZcDwN2HeyWrB98Q + LFosuRJjz51O6cXmxsaj/1V3RSAx8fVXRQnIsgwVRZHjJHr7L8kfAROFPoWS3G43gicnCIVC8O7vQ11z + StKsnkQTrK6sGCSJBXddLpyfJ5FKpTTUz+f1gvbA22w1t0k0AW3WCYIAv9+PZPIn4vGYRiLxA+HwKRhj + EByOIV2BdWur3mG34/j4iJISiEYjRBSx2BkikQiYKOJQ4ft1BZ/X13NIEHalW1CrUEVACj6fF4yqe2W2 + TegK0m0MiBSoziEQCNAQg/B4PPi2I8Fk+QJucBnZI0vvrkuuXCPP8+PU63dC7RnbTvHi/cKnA2O3GYbu + OeT0ziOv58Na8djHgt+iGw+JHk+pzWrtpMF27cn2Ko7jMnLbTebCl1MoaH+D/I4ZFHbM7FZ0ThtvfYl6 + 913WMjFc2jyGkqZRlNC/om2yXBNk0RFEEfGEqCZqiXriGdGYpoHCHhdXtg6W1fQKD592mQwZ3N8KKCiL + yCaMRB7xgMi/zuXqMinnTi3otfYLj6yxrhdJtZ8AAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Scraper/dlgTMDBSearchResults.vb b/Addons/scraper.TMDB.Data/Scraper/dlgTMDBSearchResults.vb new file mode 100644 index 0000000..d05fd0b --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/dlgTMDBSearchResults.vb @@ -0,0 +1,462 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb + +Public Class dlgTMDBSearchResults + +#Region "Fields" + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + Friend WithEvents tmrLoad As New System.Windows.Forms.Timer + Friend WithEvents tmrWait As New System.Windows.Forms.Timer + + Private TMDBg As TMDBg.Scraper + Private sHTTP As New HTTP + Private _currnode As Integer = -1 + Private _prevnode As Integer = -2 + Private MySettings As EmberTMDBScraperModule.sMySettings + 'Private TMDBConf As V3.TmdbConfiguration + 'Private TMDBApi As V3.Tmdb + + Private _InfoCache As New Dictionary(Of String, MediaContainers.Movie) + Private _PosterCache As New Dictionary(Of String, System.Drawing.Image) + Private _filterOptions As Structures.ScrapeOptions + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(_MySettings As EmberTMDBScraperModule.sMySettings, _TMDBg As TMDBg.Scraper) + + ' This call is required by the designer. + InitializeComponent() + 'TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + 'TMDBConf = TMDBApi.GetConfiguration() + MySettings = _MySettings + TMDBg = _TMDBg + End Sub + + + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + _filterOptions = filterOptions + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + chkManual.Enabled = False + 'TMDBg.IMDBURL = TMDBId + TMDBg.SearchMovieAsync(sMovieTitle, _filterOptions) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal Res As TMDBg.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + SearchResultsDownloaded(Res) + + Return MyBase.ShowDialog() + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.OK_Button.Enabled = False + pnlPicStatus.Visible = False + _InfoCache.Clear() + _PosterCache.Clear() + Me.ClearInfo() + Me.Label3.Text = Master.eLang.GetString(11, "Searching TMDB...") + Me.pnlLoading.Visible = True + chkManual.Enabled = False + TMDBg.CancelAsync() + 'IMDB.IMDBURL = IMDBURL + TMDBg.SearchMovieAsync(Me.txtSearch.Text, _filterOptions) + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + TMDBg.GetSearchMovieInfoAsync(Me.txtTMDBID.Text, Master.tmpMovie, Master.DefaultOptions) + + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + sHTTP.StartDownloadImage(Args.pURL) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image, .IMDBId = Args.IMDBId} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + '// + ' Thread finished: display pic if it was able to get one + '\\ + + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbPoster.Image = Res.Result + If Not _PosterCache.ContainsKey(Res.IMDBId) Then + _PosterCache.Add(Res.IMDBId, Res.Result) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + pnlPicStatus.Visible = False + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Master.tmpMovie.Clear() + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtTMDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.tvResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtTMDBID.Text = String.Empty + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblTagline.Text = String.Empty + Me.lblYear.Text = String.Empty + Me.lblDirector.Text = String.Empty + Me.lblGenre.Text = String.Empty + Me.txtOutline.Text = String.Empty + Me.lblIMDB.Text = String.Empty + Me.pbPoster.Image = Nothing + + Master.tmpMovie.Clear() + + TMDBg.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.lblYearHeader.Visible = areVisible + Me.lblDirectorHeader.Visible = areVisible + Me.lblGenreHeader.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.lblIMDBHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + Me.lblYear.Visible = areVisible + Me.lblTagline.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblDirector.Visible = areVisible + Me.lblGenre.Visible = areVisible + Me.lblIMDB.Visible = areVisible + Me.pbPoster.Visible = areVisible + End Sub + + Private Sub dlgIMDBSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub dlgIMDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + pnlPicStatus.Visible = False + 'TMDBg.IMDBURL = IMDBURL + AddHandler TMDBg.SearchMovieInfoDownloaded, AddressOf SearchMovieInfoDownloaded + AddHandler TMDBg.SearchResultsDownloaded, AddressOf SearchResultsDownloaded + + Try + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgIMDBSearchResults_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + Me.tvResults.Focus() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + If Me.chkManual.Checked AndAlso Me.btnVerify.Enabled Then + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Master.tmpMovie.IMDBID = Me.txtTMDBID.Text + End If + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.Close() + End Sub + + Private Sub SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + '// + ' Info downloaded... fill form with data + '\\ + + Me.pnlLoading.Visible = False + Me.OK_Button.Enabled = True + + Try + If bSuccess Then + Me.ControlsVisible(True) + Me.lblTitle.Text = Master.tmpMovie.Title + Me.lblTagline.Text = Master.tmpMovie.Tagline + Me.lblYear.Text = Master.tmpMovie.Year + Me.lblDirector.Text = Master.tmpMovie.Director + Me.lblGenre.Text = Master.tmpMovie.Genre + Me.txtOutline.Text = Master.tmpMovie.Outline + Me.lblIMDB.Text = Master.tmpMovie.IMDBID + + If _PosterCache.ContainsKey(Master.tmpMovie.TMDBID) Then + 'just set it + Me.pbPoster.Image = _PosterCache(Master.tmpMovie.TMDBID) + Else + 'go download it, if available + If Not String.IsNullOrEmpty(sPoster) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + pnlPicStatus.Visible = True + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = sPoster, .IMDBId = Master.tmpMovie.TMDBID}) + End If + + End If + + 'store clone of tmpmovie + If Not _InfoCache.ContainsKey(Master.tmpMovie.TMDBID) Then + _InfoCache.Add(Master.tmpMovie.TMDBID, GetMovieClone(Master.tmpMovie)) + End If + + + Me.btnVerify.Enabled = False + Else + If Me.chkManual.Checked Then + MsgBox(Master.eLang.GetString(15, "Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again."), MsgBoxStyle.Exclamation, Master.eLang.GetString(16, "Verification Failed")) + Me.btnVerify.Enabled = True + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SearchResultsDownloaded(ByVal M As TMDBg.MovieSearchResults) + '// + ' Process the results that IMDB gave us + '\\ + 'Dim TnP As New TreeNode + 'Dim selNode As New TreeNode + + Try + Me.tvResults.Nodes.Clear() + Me.ClearInfo() + If Not IsNothing(M) AndAlso M.Matches.Count > 0 Then + + 'M.Matches.Sort() + For Each Movie As MediaContainers.Movie In M.Matches + 'TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Me.tvResults.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.TMDBID}) + Next + 'TnP.Expand() + 'Me.tvResults.Nodes.Add(TnP) + 'selNode = Me.tvResults.Nodes(0) + 'selNode = TnP.FirstNode + 'selNode = Me.tvResults.Nodes(0) + Me.tvResults.SelectedNode = Me.tvResults.Nodes(0) + + Me._prevnode = -2 + + Me.tvResults.Focus() + Else + Me.tvResults.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(20, "No Matches Found")}) + End If + Me.pnlLoading.Visible = False + chkManual.Enabled = True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.Label2.Text = Master.eLang.GetString(21, "View details of each result to find the proper movie.") + Me.Label1.Text = Master.eLang.GetString(22, "Movie Search Results") + Me.chkManual.Text = Master.eLang.GetString(23, "Manual TMDB Entry:") + Me.btnVerify.Text = Master.eLang.GetString(24, "Verify") + Me.lblYearHeader.Text = Master.eLang.GetString(49, "Year:", True) + Me.lblDirectorHeader.Text = Master.eLang.GetString(239, "Director:", True) + Me.lblGenreHeader.Text = Master.eLang.GetString(51, "Genre(s):", True) + Me.lblIMDBHeader.Text = Master.eLang.GetString(116, "TMDB ID:") + Me.lblPlotHeader.Text = Master.eLang.GetString(242, "Plot Outline:", True) + Me.Label3.Text = Master.eLang.GetString(25, "Searching TMDB...") + End Sub + + Private Sub tmrLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoad.Tick + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + Me.pnlLoading.Visible = True + Me.Label3.Text = Master.eLang.GetString(26, "Downloading details...") + + 'IMDB.IMDBURL = IMDBURL + TMDBg.GetSearchMovieInfoAsync(Me.tvResults.SelectedNode.Tag.ToString, Master.tmpMovie, Master.DefaultOptions) + End Sub + + Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrWait.Tick + If Not Me._prevnode = Me._currnode Then + Me._prevnode = Me._currnode + Me.tmrWait.Stop() + Me.tmrLoad.Start() + Else + Me.tmrLoad.Stop() + Me.tmrWait.Stop() + End If + End Sub + + Private Sub tvResults_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvResults.AfterSelect + Try + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + + Me.ClearInfo() + Me.OK_Button.Enabled = False + + If Not IsNothing(Me.tvResults.SelectedNode.Tag) AndAlso Not String.IsNullOrEmpty(Me.tvResults.SelectedNode.Tag.ToString) Then + Me._currnode = Me.tvResults.SelectedNode.Index + + 'check if this movie is in the cache already + If _InfoCache.ContainsKey(Me.tvResults.SelectedNode.Tag.ToString) Then + Master.tmpMovie = GetMovieClone(_InfoCache(Me.tvResults.SelectedNode.Tag.ToString)) + SearchMovieInfoDownloaded(String.Empty, True) + Return + End If + + Me.pnlLoading.Visible = True + Me.tmrWait.Start() + Else + Me.pnlLoading.Visible = False + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub tvResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub txtIMDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTMDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtIMDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBID.TextChanged + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Function GetMovieClone(ByVal original As MediaContainers.Movie) As MediaContainers.Movie + 'have to do this the old-fashioned way because it is not serializable + Dim result As New MediaContainers.Movie + With result + .IMDBID = original.IMDBID + .Genre = original.Genre + .Title = original.Title + .Tagline = original.Tagline + .Year = original.Year + .Director = original.Director + .Genre = original.Genre + .Outline = original.Outline + End With + Return result + 'Using mem As New IO.MemoryStream() + ' Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, New System.Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.Clone)) + ' bin.Serialize(mem, original) + ' mem.Seek(0, IO.SeekOrigin.Begin) + ' Return DirectCast(bin.Deserialize(mem), MediaContainers.Movie) + 'End Using + End Function + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim pURL As String + Dim IMDBId As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Image + Dim IMDBId As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.TMDB.Data/Scraper/dlgTrailer.Designer.vb new file mode 100644 index 0000000..1865dbc --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/dlgTrailer.Designer.vb @@ -0,0 +1,279 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(290, 339) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(74, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(369, 339) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(411, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(424, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(112, 82) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(120, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(411, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(376, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(365, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(72, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(392, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(153, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 339) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(106, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(207, 339) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(77, 23) + Me.btnSetNfo.TabIndex = 4 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(444, 331) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(450, 366) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lbTrailers As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnPlayTrailer As System.Windows.Forms.Button + Friend WithEvents btnSetNfo As System.Windows.Forms.Button + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtYouTube As System.Windows.Forms.TextBox + Friend WithEvents btnBrowse As System.Windows.Forms.Button + Friend WithEvents txtManual As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog + Friend WithEvents btnGetTrailers As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.TMDB.Data/Scraper/dlgTrailer.resx b/Addons/scraper.TMDB.Data/Scraper/dlgTrailer.resx new file mode 100644 index 0000000..2be3cac --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/dlgTrailer.resx @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnGetTrailers.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAGHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3NPsx9OAAAB80lEQVQ4T6XTTWsTQRgH8EGr9GDFm19AseDBgzc9eba0FJqvIOTiRase + RAIKtRo9LbbxpYmtggXR2KRFqGLfDio9tDGbdUMrbvc1+57sioiVv7NDLE3MXnTgz8DsPr95dpglAMj/ + pKVY17QuyzLP2raVoBlybHvIc92EUKmcidukBTBrtasUAC0GLWYJggaWl5dw9056uBPSAtDi8aiYAY4N + 13HwLQyxuLiAW6OjyIyPXW5H2gFuZ/cm4HseNFVFsTCD2WIRHz+8P7cb6Qjs7iDqIkLCMEC97kedZWMB + egasA8s24TsBQm8bob8N3w3YZzUzFgsYus6ZZo0WhPisvMackGQR5Dm2xnDLjAdUVeF0XUPD/Yl31eu4 + sURY3orXaDe/EOGGoccDsrzFKYoMz/yON0IaqYVDLPPCTdTtH6D3BKqixANfNjc5SZJga3XMlm5jeP4w + S6E0AsdoQJFlbElSPMCXy/ekDQUTK1eQzB/B+cJxlmT+KB6sXID61UBVFDOxh7i+tjbCf+KxXl7FpZeD + SOR6WS6+6EepsgpREFHh+XRHYC8hB/r7+k7kshOZ/PSrZ7mn2cnTqd7qqdSxjUdPHk7NPC9OT00+vj84 + MHByDyEH/yA7F4kC+wgh3dGDaDTnHkK6etrWuum7+/8C/vWX/g1N2vpUAmZdeAAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnPlayTrailer.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAACwwAAAsMAT9AIsgAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfZBBoSIQHX+6QX + AAACOElEQVQ4T7WSTWvaQRCHozlYNQSiVXwBNSSKKAhqKogo2hx8OeUQpPVY9OBFId+g0IufoQnegslF + EEG8qAgeiij4hohoDjkphJAIGg/udGepfyLV3rowLDu788zs/GZv73+st7e35NPT069KpfJaLpdnj4+P + nel0+p3mOvhnvoeHh0+j0WieTCbB6XSSYDAIoVAIXC4Xicfj0Ov1IJ/Pf9kKweBisQharZbY7XbweDxg + sVjg7OwM8Ix2enpK7u/v4e7u7ttfEJp5QZ3k8PAQ1Go1hMNhyGazIJFIQKVSMd/R0RHgm2azCQqFQsNB + FovFFZZLHZz5fD7AlU6nmY/H43F3NpsNWq3WLQeYz+d1JL8H4BfW6+bmZgOO77rd7isHqNfrM3Ty+XzY + 399n5vV6WfxqtWL79fX1RiWlUgnPHxlkDRAKhSASiUAsFoPf72eBhBAGeXl5AZlMBgKBgIGoxLirGOD5 + +blL/0iwSVKpFORyOVxcXHAV0HtUhzUUm4yATqezpPsHBphMJj8uLy9BqVSCRqOB4+NjiEQiDICZUU6d + TseUQLjb7YZqtVp6L+UBlREBxGg0soBoNArL5RJQDavVCmazGecAKyTtdhtOTk68G7OQy+W+1mo1MJlM + hE4hA2BV5+fnLKPD4QC9Xk8KhQKkUqmfW6cxk8nE6ERCIpFgkxgIBFgzERCLxWAwGOwOXhPpPzWNRuN2 + PB7P+v0+oA2HwyWVrWIwGD5vzbzDyaN++R+phLsCfwMUR2eb8uMbUAAAAABJRU5ErkJggg== +</value> + </data> + <metadata name="ofdTrailer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>40</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Scraper/dlgTrailer.vb b/Addons/scraper.TMDB.Data/Scraper/dlgTrailer.vb new file mode 100644 index 0000000..d63ea34 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/dlgTrailer.vb @@ -0,0 +1,465 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb +Imports EmberScraperModule.EmberTMDBScraperModule + +Public Class dlgTrailer + +#Region "Fields" + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Friend WithEvents bwCompileList As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwDownloadTrailer As New System.ComponentModel.BackgroundWorker + + Private cTrailer As Trailers + Private imdbID As String = String.Empty + Private prePath As String = String.Empty + Private sPath As String = String.Empty + Private tArray As New List(Of String) + Private tURL As String = String.Empty + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = TMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + cTrailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + End Sub + + Public Overloads Function ShowDialog(ByVal _imdbID As String, ByVal _sPath As String) As String + Me.imdbID = _imdbID + Me.sPath = _sPath + + If MyBase.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + Return Replace(Me.tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + Return Me.tURL + End If + Else + Return String.Empty + End If + End Function + + Protected Overrides Sub Finalize() + cTrailer = Nothing + MyBase.Finalize() + End Sub + + Private Sub BeginDownload(ByVal CloseDialog As Boolean) + Dim didCancel As Boolean = False + + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(56, "Downloading selected trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + If CloseDialog Then + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, Path.GetFileName(Me.prePath)) + FileUtils.Common.MoveFileWithStream(Me.prePath, Me.tURL) + + File.Delete(Me.prePath) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.prePath, """")) + didCancel = True + End If + ElseIf Me.txtManual.Text.Length > 0 Then + Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + If CloseDialog Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.txtManual.Text, """")) + didCancel = True + End If + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + didCancel = True + End If + ElseIf Regex.IsMatch(Me.txtYouTube.Text, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.txtYouTube.Text) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + ElseIf StringUtils.isValidURL(Me.txtYouTube.Text) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = Me.txtYouTube.Text, .bType = CloseDialog}) + Else + If Regex.IsMatch(Me.lbTrailers.SelectedItem.ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.lbTrailers.SelectedItem.ToString) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + Else + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = lbTrailers.SelectedItem.ToString, .bType = CloseDialog}) + End If + End If + + If didCancel Then + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + End Sub + + Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click + Try + With ofdTrailer + .InitialDirectory = Directory.GetParent(Master.currMovie.Filename).FullName + .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.ValidExts.ToArray(), ";*")) + .FilterIndex = 0 + End With + + If ofdTrailer.ShowDialog() = DialogResult.OK Then + txtManual.Text = ofdTrailer.FileName + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub btnGetTrailers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTrailers.Click + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.pnlStatus.Visible = True + + Me.bwCompileList = New System.ComponentModel.BackgroundWorker + Me.bwCompileList.WorkerSupportsCancellation = True + Me.bwCompileList.RunWorkerAsync() + End Sub + + Private Sub btnPlayTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayTrailer.Click + Try + Me.BeginDownload(False) + Catch + MsgBox(Master.eLang.GetString(58, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), MsgBoxStyle.Critical, Master.eLang.GetString(59, "Error Playing Trailer")) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Try + End Sub + + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click + + If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(62, "Moving specified file to trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + File.Move(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + Else + Dim didCancel As Boolean = False + + If StringUtils.isValidURL(Me.txtYouTube.Text) Then + tURL = Me.txtYouTube.Text + ElseIf Me.lbTrailers.SelectedItems.Count > 0 Then + tURL = lbTrailers.SelectedItem.ToString + Else + didCancel = True + End If + + If Not didCancel Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + + End Sub + + Private Sub bwCompileList_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwCompileList.DoWork + Try + tArray = cTrailer.GetTrailers(Me.imdbID, False) + + If Me.bwCompileList.CancellationPending Then + e.Cancel = True + End If + Catch + End Try + End Sub + + Private Sub bwCompileList_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwCompileList.RunWorkerCompleted + If Not e.Cancelled Then + If Me.tArray.Count > 0 Then + For Each tTrail As String In Me.tArray + Me.lbTrailers.Items.Add(tTrail) + Next + + Me.btnGetTrailers.Visible = False + Else + Me.btnGetTrailers.Enabled = False + End If + + End If + + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Sub + + Private Sub bwDownloadTrailer_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTrailer.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + + If Args.bType Then + Me.tURL = cTrailer.DownloadTrailer(Me.sPath, Args.Parameter) + Else + Me.prePath = cTrailer.DownloadTrailer(Path.Combine(Master.TempPath, Path.GetFileName(Me.sPath)), Args.Parameter) + End If + + Catch + End Try + + e.Result = Args.bType + + If Me.bwDownloadTrailer.CancellationPending Then + e.Cancel = True + End If + End Sub + + Private Sub bwDownloadTrailer_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwDownloadTrailer.ProgressChanged + pbStatus.Value = e.ProgressPercentage + End Sub + + Private Sub bwDownloadTrailer_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadTrailer.RunWorkerCompleted + If Not e.Cancelled Then + If Convert.ToBoolean(e.Result) Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + If Not String.IsNullOrEmpty(Me.prePath) Then System.Diagnostics.Process.Start(String.Concat("""", prePath, """")) + End If + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.cTrailer.Cancel() + + If Me.bwCompileList.IsBusy Then Me.bwCompileList.CancelAsync() + If Me.bwDownloadTrailer.IsBusy Then Me.bwDownloadTrailer.CancelAsync() + + While Me.bwCompileList.IsBusy OrElse Me.bwDownloadTrailer.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + AddHandler cTrailer.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + + Private Sub dlgTrailer_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub DownloadProgressUpdated(ByVal iProgress As Integer) + bwDownloadTrailer.ReportProgress(iProgress) + End Sub + + Private Sub lbTrailers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbTrailers.SelectedIndexChanged + Me.SetEnabled(True) + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.BeginDownload(True) + End Sub + + Private Sub SetEnabled(ByVal DeletePre As Boolean) + If DeletePre AndAlso Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + File.Delete(Me.prePath) + Me.prePath = String.Empty + End If + + If StringUtils.isValidURL(Me.txtYouTube.Text) OrElse Me.lbTrailers.SelectedItems.Count > 0 OrElse Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Enabled = True + Me.btnSetNfo.Enabled = True + Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") + Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") + Else + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + Else + Me.OK_Button.Enabled = False + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnPlayTrailer.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(64, "Select Trailer") + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.GroupBox1.Text = Master.eLang.GetString(65, "Select Trailer to Download") + Me.GroupBox2.Text = Master.eLang.GetString(66, "Manual Trailer Entry") + Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") + Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") + Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") + End Sub + + Private Sub txtManual_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtManual.TextChanged + Me.SetEnabled(True) + End Sub + + Private Sub txtYouTube_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtYouTube.TextChanged + Me.SetEnabled(True) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim bType As Boolean + Dim Parameter As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.TMDB.Data/Scraper/dlgTrailerFormat.Designer.vb new file mode 100644 index 0000000..22f1374 --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/dlgTrailerFormat.Designer.vb @@ -0,0 +1,155 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailerFormat + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(84, 117) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(154, 117) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(17, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(78, 69) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(53, 2) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(114, 100) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(10, 29) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.pnlStatus) + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(2, 4) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(220, 111) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 143) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lstFormats As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.TMDB.Data/Scraper/dlgTrailerFormat.resx b/Addons/scraper.TMDB.Data/Scraper/dlgTrailerFormat.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/dlgTrailerFormat.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/Scraper/dlgTrailerFormat.vb b/Addons/scraper.TMDB.Data/Scraper/dlgTrailerFormat.vb new file mode 100644 index 0000000..8f0ad6e --- /dev/null +++ b/Addons/scraper.TMDB.Data/Scraper/dlgTrailerFormat.vb @@ -0,0 +1,114 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTrailerFormat + +#Region "Fields" + + Private WithEvents YouTube As YouTube.Scraper + Private _selectedformaturl As String + Private _yturl As String + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal YTURL As String) As String + Me._yturl = YTURL + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return _selectedformaturl + Else + Return String.Empty + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailerFormat_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + Me.SetUp() + + lstFormats.DataSource = Nothing + + YouTube = New YouTube.Scraper + YouTube.GetVideoLinksAsync(Me._yturl) + + Catch ex As Exception + MsgBox(Master.eLang.GetString(71, "The video format links could not be retrieved."), MsgBoxStyle.Critical, Master.eLang.GetString(72, "Error Retrieving Video Format Links")) + End Try + End Sub + + Private Sub lstFormats_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFormats.SelectedIndexChanged + Try + Me._selectedformaturl = DirectCast(lstFormats.SelectedItem, YouTube.VideoLinkItem).URL + + If Me.lstFormats.SelectedItems.Count > 0 Then + Me.OK_Button.Enabled = True + Else + Me.OK_Button.Enabled = False + End If + Catch + End Try + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(73, "Select Format") + Me.lblStatus.Text = Master.eLang.GetString(74, "Getting available formats...") + Me.GroupBox1.Text = Master.eLang.GetString(75, "Available Formats") + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub YouTube_VideoLinksRetrieved(ByVal bSuccess As Boolean) Handles YouTube.VideoLinksRetrieved + Try + + If bSuccess Then + lstFormats.DataSource = YouTube.VideoLinks.Values.ToList + lstFormats.DisplayMember = "Description" + lstFormats.ValueMember = "URL" + + If YouTube.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + Me.lstFormats.SelectedIndex = YouTube.VideoLinks.IndexOfKey(Master.eSettings.PreferredTrailerQuality) + ElseIf Me.lstFormats.Items.Count = 1 Then + Me.lstFormats.SelectedIndex = 0 + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + Me.pnlStatus.Visible = False + Me.lstFormats.Enabled = True + End Try + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/frmTMDBInfoSettingsHolder.Designer.vb b/Addons/scraper.TMDB.Data/frmTMDBInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..f610c2c --- /dev/null +++ b/Addons/scraper.TMDB.Data/frmTMDBInfoSettingsHolder.Designer.vb @@ -0,0 +1,545 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTMDBInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.chkFallBackEng = New System.Windows.Forms.CheckBox() + Me.cbTMDBPrefLanguage = New System.Windows.Forms.ComboBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtTMDBApiKey = New System.Windows.Forms.TextBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.txtFANARTTVApiKey = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.pbTMDB = New System.Windows.Forms.PictureBox() + Me.pbFANARTTV = New System.Windows.Forms.PictureBox() + Me.GroupBox30.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + Me.GroupBox1.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.pbTMDB) + Me.GroupBox30.Controls.Add(Me.chkFallBackEng) + Me.GroupBox30.Controls.Add(Me.cbTMDBPrefLanguage) + Me.GroupBox30.Controls.Add(Me.Label3) + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtTMDBApiKey) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(309, 123) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "TMDB" + ' + 'chkFallBackEng + ' + Me.chkFallBackEng.AutoSize = True + Me.chkFallBackEng.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFallBackEng.Location = New System.Drawing.Point(8, 100) + Me.chkFallBackEng.Name = "chkFallBackEng" + Me.chkFallBackEng.Size = New System.Drawing.Size(129, 17) + Me.chkFallBackEng.TabIndex = 4 + Me.chkFallBackEng.Text = "Fall back on english" + Me.chkFallBackEng.UseVisualStyleBackColor = True + ' + 'cbTMDBPrefLanguage + ' + Me.cbTMDBPrefLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTMDBPrefLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTMDBPrefLanguage.FormattingEnabled = True + Me.cbTMDBPrefLanguage.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTMDBPrefLanguage.Location = New System.Drawing.Point(123, 65) + Me.cbTMDBPrefLanguage.Name = "cbTMDBPrefLanguage" + Me.cbTMDBPrefLanguage.Size = New System.Drawing.Size(45, 21) + Me.cbTMDBPrefLanguage.TabIndex = 3 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label3.Location = New System.Drawing.Point(6, 68) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(111, 13) + Me.Label3.TabIndex = 2 + Me.Label3.Text = "Preferred Language:" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(79, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "TMDB API Key:" + ' + 'txtTMDBApiKey + ' + Me.txtTMDBApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtTMDBApiKey.Name = "txtTMDBApiKey" + Me.txtTMDBApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtTMDBApiKey.TabIndex = 1 + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pbFANARTTV) + Me.GroupBox1.Controls.Add(Me.Label5) + Me.GroupBox1.Controls.Add(Me.txtFANARTTVApiKey) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(8, 169) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(309, 71) + Me.GroupBox1.TabIndex = 75 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Fanart.tv" + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.Location = New System.Drawing.Point(6, 18) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(94, 13) + Me.Label5.TabIndex = 0 + Me.Label5.Text = "Fanart.tv API Key:" + ' + 'txtFANARTTVApiKey + ' + Me.txtFANARTTVApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtFANARTTVApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtFANARTTVApiKey.Name = "txtFANARTTVApiKey" + Me.txtFANARTTVApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtFANARTTVApiKey.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(323, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(283, 150) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(225, 17) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(52, 17) + Me.chkCrew.TabIndex = 19 + Me.chkCrew.Text = "Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(131, 123) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 89) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 72) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 89) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 123) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(131, 106) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 106) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 72) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'pbTMDB + ' + Me.pbTMDB.Image = CType(resources.GetObject("pbTMDB.Image"), System.Drawing.Image) + Me.pbTMDB.Location = New System.Drawing.Point(287, 34) + Me.pbTMDB.Name = "pbTMDB" + Me.pbTMDB.Size = New System.Drawing.Size(16, 16) + Me.pbTMDB.TabIndex = 5 + Me.pbTMDB.TabStop = False + ' + 'pbFANARTTV + ' + Me.pbFANARTTV.Image = CType(resources.GetObject("pbFANARTTV.Image"), System.Drawing.Image) + Me.pbFANARTTV.Location = New System.Drawing.Point(287, 34) + Me.pbFANARTTV.Name = "pbFANARTTV" + Me.pbFANARTTV.Size = New System.Drawing.Size(16, 16) + Me.pbFANARTTV.TabIndex = 6 + Me.pbFANARTTV.TabStop = False + ' + 'frmTMDBInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox + Friend WithEvents Label18 As System.Windows.Forms.Label + Friend WithEvents txtTMDBApiKey As System.Windows.Forms.TextBox + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents gbOptions As System.Windows.Forms.GroupBox + Friend WithEvents chkCountry As System.Windows.Forms.CheckBox + Friend WithEvents chkStudio As System.Windows.Forms.CheckBox + Friend WithEvents chkRuntime As System.Windows.Forms.CheckBox + Friend WithEvents chkOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkTagline As System.Windows.Forms.CheckBox + Friend WithEvents chkCast As System.Windows.Forms.CheckBox + Friend WithEvents chkVotes As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailer As System.Windows.Forms.CheckBox + Friend WithEvents chkRating As System.Windows.Forms.CheckBox + Friend WithEvents chkRelease As System.Windows.Forms.CheckBox + Friend WithEvents chkMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkYear As System.Windows.Forms.CheckBox + Friend WithEvents chkTitle As System.Windows.Forms.CheckBox + Friend WithEvents chkFallBackEng As System.Windows.Forms.CheckBox + Friend WithEvents cbTMDBPrefLanguage As System.Windows.Forms.ComboBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents chkCrew As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label5 As System.Windows.Forms.Label + Friend WithEvents txtFANARTTVApiKey As System.Windows.Forms.TextBox + Friend WithEvents pbTMDB As System.Windows.Forms.PictureBox + Friend WithEvents pbFANARTTV As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.TMDB.Data/frmTMDBInfoSettingsHolder.resx b/Addons/scraper.TMDB.Data/frmTMDBInfoSettingsHolder.resx new file mode 100644 index 0000000..b1bac92 --- /dev/null +++ b/Addons/scraper.TMDB.Data/frmTMDBInfoSettingsHolder.resx @@ -0,0 +1,223 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="pbFANARTTV.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + RK5CYII= +</value> + </data> + <data name="pbTMDB.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/frmTMDBInfoSettingsHolder.vb b/Addons/scraper.TMDB.Data/frmTMDBInfoSettingsHolder.vb new file mode 100644 index 0000000..39ea9ee --- /dev/null +++ b/Addons/scraper.TMDB.Data/frmTMDBInfoSettingsHolder.vb @@ -0,0 +1,218 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports System.Diagnostics + +Public Class frmTMDBInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + Public Event SetupNeedsRestart() + +#End Region 'Events + +#Region "Fields" + + Private Api1 As String + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalDataScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + 'If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ' ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ' ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order + 1 + ' RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + ' orderChanged() + 'End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalDataScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + 'If order > 0 Then + ' ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ' ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order - 1 + ' RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + ' orderChanged() + 'End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Private Sub chkCrew_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFallBackEng_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkFallBackEng.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTMDBPrefLanguage_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cbTMDBPrefLanguage.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtFANARTTVApiKey_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtFANARTTVApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Enter + Api1 = txtTMDBApiKey.Text + End Sub + + Private Sub txtTMDBApiKey_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextValidated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Validated + If Not (Api1 = txtTMDBApiKey.Text) Then + RaiseEvent SetupNeedsRestart() + End If + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalDataScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalDataScrapersModules.Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label18.Text = Master.eLang.GetString(854, "TMDB API Key:") + Me.gbOptions.Text = Master.eLang.GetString(6, "Scraper Fields - Scraper specific") + Me.chkStudio.Text = Master.eLang.GetString(395, "Studio", True) + Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime", True) + Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline", True) + Me.chkGenre.Text = Master.eLang.GetString(20, "Genres", True) + Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline", True) + Me.chkCast.Text = Master.eLang.GetString(856, "Cast and Crew", True) + Me.chkVotes.Text = Master.eLang.GetString(399, "Votes", True) + Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer", True) + Me.chkRating.Text = Master.eLang.GetString(400, "Rating", True) + Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date", True) + Me.chkMPAA.Text = Master.eLang.GetString(859, "MPAA & Certification", True) + Me.chkYear.Text = Master.eLang.GetString(278, "Year", True) + Me.chkTitle.Text = Master.eLang.GetString(21, "Title", True) + 'Me.chkCertification.Text = Master.eLang.GetString(722, "Certification", True) + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkFallBackEng.Text = Master.eLang.GetString(114, "Fall back on english") + Me.Label3.Text = Master.eLang.GetString(115, "Preferred Language:") + + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + +#End Region 'Methods + + Private Sub PictureBox2_Click(sender As System.Object, e As System.EventArgs) Handles pbTMDB.Click + If Master.isWindows Then + Process.Start("http://docs.themoviedb.apiary.io/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://docs.themoviedb.apiary.io/" + Explorer.Start() + End Using + End If + + End Sub + + Private Sub pbFANARTTV_Click(sender As System.Object, e As System.EventArgs) Handles pbFANARTTV.Click + If Master.isWindows Then + Process.Start("http://fanart.tv/get-an-api-key/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://fanart.tv/get-an-api-key/" + Explorer.Start() + End Using + End If + + End Sub +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/packages.config b/Addons/scraper.TMDB.Data/packages.config new file mode 100644 index 0000000..9d72b1b --- /dev/null +++ b/Addons/scraper.TMDB.Data/packages.config @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="RestSharp" version="104.1" targetFramework="net35" /> + <package id="SharpZipLib" version="0.86.0" /> +</packages> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/scraper.TMDB.Data.vbproj b/Addons/scraper.TMDB.Data/scraper.TMDB.Data.vbproj new file mode 100644 index 0000000..e4b2392 --- /dev/null +++ b/Addons/scraper.TMDB.Data/scraper.TMDB.Data.vbproj @@ -0,0 +1,277 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{A9188CF1-BD07-4D24-BC4A-906A43012F37}</ProjectGuid> + <OutputType>Library</OutputType> + <RootNamespace>EmberScraperModule</RootNamespace> + <AssemblyName>scraper.TMDB.Data</AssemblyName> + <FileAlignment>512</FileAlignment> + <MyType>Windows</MyType> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <OptionExplicit>On</OptionExplicit> + <OptionCompare>Binary</OptionCompare> + <OptionStrict>On</OptionStrict> + <OptionInfer>On</OptionInfer> + <FileUpgradeFlags> + </FileUpgradeFlags> + <OldToolsVersion>3.5</OldToolsVersion> + <UpgradeBackupLocation /> + <PublishUrl>publish\</PublishUrl> + <Install>true</Install> + <InstallFrom>Disk</InstallFrom> + <UpdateEnabled>false</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>false</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> + <RestorePackages>true</RestorePackages> + <SccProjectName> + </SccProjectName> + <SccLocalPath> + </SccLocalPath> + <SccAuxPath> + </SccAuxPath> + <SccProvider> + </SccProvider> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> + <DebugSymbols>true</DebugSymbols> + <DefineDebug>true</DefineDebug> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Dev\Modules\</OutputPath> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Deploy\Modules\</OutputPath> + <Optimize>true</Optimize> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <ItemGroup> + <Reference Include="ICSharpCode.SharpZipLib"> + <HintPath>..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> + </Reference> + <Reference Include="RestSharp"> + <HintPath>..\..\packages\RestSharp.104.1\lib\net35\RestSharp.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Import Include="Microsoft.VisualBasic" /> + <Import Include="System" /> + <Import Include="System.Collections" /> + <Import Include="System.Collections.Generic" /> + <Import Include="System.Drawing" /> + <Import Include="System.Linq" /> + <Import Include="System.Web" /> + <Import Include="System.Windows.Forms" /> + <Import Include="System.Xml.Linq" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Scraper\clsScrapeIMPA.vb" /> + <Compile Include="Scraper\clsScrapeMPDB.vb" /> + <Compile Include="Scraper\clsScrapeOFDB.vb" /> + <Compile Include="Scraper\clsScrapeTMDB.vb" /> + <Compile Include="Scraper\clsScrapeTrailers.vb" /> + <Compile Include="Scraper\clsScrapeImages.vb" /> + <Compile Include="Scraper\clsScrapeTMDBg.vb" /> + <Compile Include="Scraper\clsScrapeYouTube.vb" /> + <Compile Include="Scraper\clsScrapeIMDB.vb" /> + <Compile Include="Scraper\clsScrapeFANARTTV.vb" /> + <Compile Include="Scraper\dlgTMDBSearchResults.Designer.vb"> + <DependentUpon>dlgTMDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTMDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgImgSelect.Designer.vb"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgImgSelect.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailer.Designer.vb"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailer.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.Designer.vb"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="My Project\AssemblyInfo.vb" /> + <Compile Include="My Project\Application.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Application.myapp</DependentUpon> + </Compile> + <Compile Include="My Project\Resources.Designer.vb"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> + <Compile Include="My Project\Settings.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Settings.settings</DependentUpon> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + </Compile> + <Compile Include="frmTMDBInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmTMDBInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTMDBInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperMovieTMDBModule.vb" /> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="Scraper\dlgTMDBSearchResults.resx"> + <DependentUpon>dlgTMDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgImgSelect.resx"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailer.resx"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailerFormat.resx"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTMDBInfoSettingsHolder.resx"> + <DependentUpon>frmTMDBInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="My Project\Resources.resx"> + <Generator>VbMyResourcesResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.vb</LastGenOutput> + <CustomToolNamespace>My.Resources</CustomToolNamespace> + <SubType>Designer</SubType> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <None Include="My Project\Application.myapp"> + <Generator>MyApplicationCodeGenerator</Generator> + <LastGenOutput>Application.Designer.vb</LastGenOutput> + </None> + <None Include="My Project\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <CustomToolNamespace>My</CustomToolNamespace> + <LastGenOutput>Settings.Designer.vb</LastGenOutput> + </None> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\EmberAPI\EmberAPI.vbproj"> + <Project>{208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}</Project> + <Name>EmberAPI</Name> + <Private>False</Private> + </ProjectReference> + <ProjectReference Include="..\..\FanartTVAPI\FanartTVAPI.csproj"> + <Project>{70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}</Project> + <Name>FanartTVAPI</Name> + </ProjectReference> + <ProjectReference Include="..\..\WatTmdb\WatTmdb.csproj"> + <Project>{EFC11645-FAB4-4C30-A498-29F5ECDF77E8}</Project> + <Name>WatTmdb</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="Langs\scraper.EmberCore.TMDB.Debug_%28db_DB%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.English_%28en_US%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.English_%28en_US%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.German_%28de_DE%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.German_%28de_DE%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.Norwegian_%28no_NO%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.Norwegian_%28no_NO%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + </ItemGroup> + <ItemGroup /> + <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <PropertyGroup> + <PreBuildEvent> + </PreBuildEvent> + </PropertyGroup> + <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> +</Project> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Data/scraperMovieTMDBModule.vb b/Addons/scraper.TMDB.Data/scraperMovieTMDBModule.vb new file mode 100644 index 0000000..2aab30a --- /dev/null +++ b/Addons/scraper.TMDB.Data/scraperMovieTMDBModule.vb @@ -0,0 +1,492 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports RestSharp +Imports WatTmdb +Imports EmberScraperModule.TMDBg + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberTMDBScraperModule + Implements Interfaces.EmberMovieScraperModule_Data + + +#Region "Fields" + + Public Shared ConfigOptions As New Structures.ScrapeOptions + Public Shared ConfigScrapeModifier As New Structures.ScrapeModifier + Public Shared _AssemblyName As String + + Private TMDBId As String + 'Private IMDBid As String + + ''' <summary> + ''' Scraping Here + ''' </summary> + ''' <remarks></remarks> + Private _MySettings As New sMySettings + Private _TMDBg As TMDBg.Scraper + Private _Name As String = "Ember TMDB Movie Scrapers - Data" + Private _ScraperEnabled As Boolean = False + Private _setup As frmTMDBInfoSettingsHolder + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberMovieScraperModule_Data.ModuleSettingsChanged + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule_Data.MovieScraperEvent + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule_Data.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule_Data.SetupNeedsRestart + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property ModuleName() As String Implements Interfaces.EmberMovieScraperModule_Data.ModuleName + Get + Return _Name + End Get + End Property + + ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberMovieScraperModule_Data.ModuleVersion + Get + Return System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Property ScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule_Data.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupNeedsRestart() + RaiseEvent SetupNeedsRestart() + End Sub + + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + + Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberMovieScraperModule_Data.Init + _AssemblyName = sAssemblyName + LoadSettings() + 'Must be after Load settings to retrieve the correct API key + _TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Info") + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + End If + End If + _TMDBConf = _TMDBApi.GetConfiguration() + _TMDBApiE = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey) + _TMDBConfE = _TMDBApiE.GetConfiguration() + _TMDBg = New TMDBg.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + End Sub + + Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule_Data.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmTMDBInfoSettingsHolder + LoadSettings() + _setup.cbEnabled.Checked = _ScraperEnabled + _setup.chkTitle.Checked = ConfigOptions.bTitle + _setup.chkYear.Checked = ConfigOptions.bYear + _setup.chkMPAA.Checked = ConfigOptions.bMPAA + _setup.chkRelease.Checked = ConfigOptions.bRelease + _setup.chkRuntime.Checked = ConfigOptions.bRuntime + _setup.chkRating.Checked = ConfigOptions.bRating + _setup.chkVotes.Checked = ConfigOptions.bVotes + _setup.chkStudio.Checked = ConfigOptions.bStudio + _setup.chkTagline.Checked = ConfigOptions.bTagline + _setup.chkOutline.Checked = ConfigOptions.bOutline + _setup.chkCast.Checked = ConfigOptions.bFullCast + _setup.chkGenre.Checked = ConfigOptions.bGenre + _setup.chkTrailer.Checked = ConfigOptions.bTrailer + _setup.chkCountry.Checked = ConfigOptions.bCountry + _setup.chkCrew.Checked = ConfigOptions.bFullCrew + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + + '_setup.chkCertification.Checked = ConfigOptions.bCert + + If String.IsNullOrEmpty(_MySettings.TMDBAPIKey) Then + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + _setup.txtTMDBApiKey.Text = _MySettings.TMDBAPIKey + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.orderChanged() + If String.IsNullOrEmpty(_MySettings.FANARTTVApiKey) Then + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _setup.txtFANARTTVApiKey.Text = _MySettings.FANARTTVApiKey + + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + SPanel.Prefix = "TMDBMovieInfo_" + SPanel.Order = 110 + SPanel.Parent = "pnlMovieData" + SPanel.Type = Master.eLang.GetString(36, "Movies", True) + SPanel.ImageIndex = If(_ScraperEnabled, 9, 10) + SPanel.Panel = _setup.pnlSettings + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return SPanel + End Function + + Sub LoadSettings() + ConfigOptions.bTitle = AdvancedSettings.GetBooleanSetting("DoTitle", True) + ConfigOptions.bYear = AdvancedSettings.GetBooleanSetting("DoYear", True) + ConfigOptions.bMPAA = AdvancedSettings.GetBooleanSetting("DoMPAA", True) + ConfigOptions.bRelease = AdvancedSettings.GetBooleanSetting("DoRelease", True) + ConfigOptions.bRuntime = AdvancedSettings.GetBooleanSetting("DoRuntime", True) + ConfigOptions.bRating = AdvancedSettings.GetBooleanSetting("DoRating", True) + ConfigOptions.bVotes = AdvancedSettings.GetBooleanSetting("DoVotes", True) + ConfigOptions.bStudio = AdvancedSettings.GetBooleanSetting("DoStudio", True) + ConfigOptions.bTagline = AdvancedSettings.GetBooleanSetting("DoTagline", True) + ConfigOptions.bOutline = AdvancedSettings.GetBooleanSetting("DoOutline", True) + ConfigOptions.bPlot = AdvancedSettings.GetBooleanSetting("DoPlot", True) + ConfigOptions.bCast = AdvancedSettings.GetBooleanSetting("DoCast", True) + ConfigOptions.bDirector = AdvancedSettings.GetBooleanSetting("DoDirector", True) + ConfigOptions.bWriters = AdvancedSettings.GetBooleanSetting("DoWriters", True) + ConfigOptions.bProducers = AdvancedSettings.GetBooleanSetting("DoProducers", True) + ConfigOptions.bGenre = AdvancedSettings.GetBooleanSetting("DoGenres", True) + ConfigOptions.bTrailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + ConfigOptions.bMusicBy = AdvancedSettings.GetBooleanSetting("DoMusic", True) + ConfigOptions.bOtherCrew = AdvancedSettings.GetBooleanSetting("DoOtherCrews", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("DoFullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("DoFullCrews", True) + ConfigOptions.bTop250 = AdvancedSettings.GetBooleanSetting("DoTop250", True) + ConfigOptions.bCountry = AdvancedSettings.GetBooleanSetting("DoCountry", True) + ConfigOptions.bCert = AdvancedSettings.GetBooleanSetting("DoCert", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("FullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("FullCrew", True) + + _MySettings.TMDBAPIKey = AdvancedSettings.GetSetting("TMDBAPIKey", "Get your API Key from http://www.themoviedb.org") + _MySettings.FANARTTVApiKey = AdvancedSettings.GetSetting("FANARTTVApiKey", "Get your API Key from http://fanart.tv") + _MySettings.FallBackEng = AdvancedSettings.GetBooleanSetting("FallBackEn", False) + _MySettings.TMDBLanguage = AdvancedSettings.GetSetting("TMDBLanguage", "en") + _MySettings.DownloadTrailers = AdvancedSettings.GetBooleanSetting("DownloadTraliers", False) + + _MySettings.TrailerTimeout = Convert.ToInt32(AdvancedSettings.GetSetting("TrailerTimeout", "10")) + _MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) + _MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) + _MySettings.UseIMPA = AdvancedSettings.GetBooleanSetting("UseIMPA", False) + _MySettings.UseMPDB = AdvancedSettings.GetBooleanSetting("UseMPDB", False) + _MySettings.UseIMDB = AdvancedSettings.GetBooleanSetting("UseIMDB", False) + _MySettings.UseFANARTTV = AdvancedSettings.GetBooleanSetting("UseFANARTTV", False) + _MySettings.UseIMDBTrailer = AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", True) + _MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + _MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) + + ConfigScrapeModifier.DoSearch = True + ConfigScrapeModifier.Meta = True + ConfigScrapeModifier.NFO = True + ConfigScrapeModifier.Extra = True + ConfigScrapeModifier.Actors = True + + ConfigScrapeModifier.Poster = AdvancedSettings.GetBooleanSetting("DoPoster", True) + ConfigScrapeModifier.Fanart = AdvancedSettings.GetBooleanSetting("DoFanart", True) + ConfigScrapeModifier.Trailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + End Sub + + Sub SaveSettings() + AdvancedSettings.SetBooleanSetting("DoFullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("DoFullCrews", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DoTitle", ConfigOptions.bTitle) + AdvancedSettings.SetBooleanSetting("DoYear", ConfigOptions.bYear) + AdvancedSettings.SetBooleanSetting("DoMPAA", ConfigOptions.bMPAA) + AdvancedSettings.SetBooleanSetting("DoRelease", ConfigOptions.bRelease) + AdvancedSettings.SetBooleanSetting("DoRuntime", ConfigOptions.bRuntime) + AdvancedSettings.SetBooleanSetting("DoRating", ConfigOptions.bRating) + AdvancedSettings.SetBooleanSetting("DoVotes", ConfigOptions.bVotes) + AdvancedSettings.SetBooleanSetting("DoStudio", ConfigOptions.bStudio) + AdvancedSettings.SetBooleanSetting("DoTagline", ConfigOptions.bTagline) + AdvancedSettings.SetBooleanSetting("DoOutline", ConfigOptions.bOutline) + AdvancedSettings.SetBooleanSetting("DoPlot", ConfigOptions.bPlot) + AdvancedSettings.SetBooleanSetting("DoCast", ConfigOptions.bCast) + AdvancedSettings.SetBooleanSetting("DoDirector", ConfigOptions.bDirector) + AdvancedSettings.SetBooleanSetting("DoWriters", ConfigOptions.bWriters) + AdvancedSettings.SetBooleanSetting("DoProducers", ConfigOptions.bProducers) + AdvancedSettings.SetBooleanSetting("DoGenres", ConfigOptions.bGenre) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigOptions.bTrailer) + AdvancedSettings.SetBooleanSetting("DoMusic", ConfigOptions.bMusicBy) + AdvancedSettings.SetBooleanSetting("DoOtherCrews", ConfigOptions.bOtherCrew) + AdvancedSettings.SetBooleanSetting("DoCountry", ConfigOptions.bCountry) + AdvancedSettings.SetBooleanSetting("DoTop250", ConfigOptions.bTop250) + AdvancedSettings.SetBooleanSetting("DoCert", ConfigOptions.bCert) + + AdvancedSettings.SetBooleanSetting("FullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("FullCrew", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DownloadTraliers", _MySettings.DownloadTrailers) + + AdvancedSettings.SetSetting("TrailerTimeout", _MySettings.TrailerTimeout.ToString) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailer", _MySettings.UseTMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", _MySettings.UseTMDBTrailerXBMC) + AdvancedSettings.SetBooleanSetting("UseIMDBTrailer", _MySettings.UseIMDBTrailer) + + AdvancedSettings.SetSetting("ManualETSize", _MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("UseTMDBTrailerPref", _MySettings.UseTMDBTrailerPref.ToString) + + AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) + AdvancedSettings.SetBooleanSetting("DoFanart", ConfigScrapeModifier.Fanart) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigScrapeModifier.Trailer) + + AdvancedSettings.SetSetting("TMDBAPIKey", _MySettings.TMDBAPIKey) + AdvancedSettings.SetSetting("FANARTTVApiKey", _MySettings.FANARTTVApiKey) + AdvancedSettings.SetBooleanSetting("FallBackEn", _MySettings.FallBackEng) + AdvancedSettings.SetSetting("TMDBLanguage", _MySettings.TMDBLanguage) + AdvancedSettings.SetBooleanSetting("UseIMPA", _MySettings.UseIMPA) + AdvancedSettings.SetBooleanSetting("UseMPDB", _MySettings.UseMPDB) + AdvancedSettings.SetBooleanSetting("UseIMDB", _MySettings.UseIMDB) + AdvancedSettings.SetBooleanSetting("UseFANARTTV", _MySettings.UseFANARTTV) + End Sub + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule_Data.SaveSetupScraper + If Not String.IsNullOrEmpty(_setup.txtTMDBApiKey.Text) Then + _MySettings.TMDBAPIKey = _setup.txtTMDBApiKey.Text + Else + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + If Not String.IsNullOrEmpty(_setup.txtFANARTTVApiKey.Text) Then + _MySettings.FANARTTVApiKey = _setup.txtFANARTTVApiKey.Text + Else + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + ConfigOptions.bTitle = _setup.chkTitle.Checked + ConfigOptions.bYear = _setup.chkYear.Checked + ConfigOptions.bMPAA = _setup.chkMPAA.Checked + ConfigOptions.bRelease = _setup.chkRelease.Checked + ConfigOptions.bRuntime = _setup.chkRuntime.Checked + ConfigOptions.bRating = _setup.chkRating.Checked + ConfigOptions.bVotes = _setup.chkVotes.Checked + ConfigOptions.bStudio = _setup.chkStudio.Checked + ConfigOptions.bTagline = _setup.chkTagline.Checked + ConfigOptions.bOutline = _setup.chkOutline.Checked + ConfigOptions.bPlot = False + ConfigOptions.bCast = _setup.chkCast.Checked + ConfigOptions.bDirector = _setup.chkCrew.Checked + ConfigOptions.bWriters = _setup.chkCrew.Checked + ConfigOptions.bProducers = _setup.chkCrew.Checked + ConfigOptions.bGenre = _setup.chkGenre.Checked + ConfigOptions.bTrailer = _setup.chkTrailer.Checked + ConfigOptions.bMusicBy = _setup.chkCrew.Checked + ConfigOptions.bOtherCrew = _setup.chkCrew.Checked + ConfigOptions.bCountry = _setup.chkCountry.Checked + ConfigOptions.bTop250 = False + ConfigOptions.bFullCrew = _setup.chkCrew.Checked + ConfigOptions.bFullCast = _setup.chkCast.Checked + ConfigOptions.bCert = ConfigOptions.bMPAA + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + RemoveHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + _setup.Dispose() + End If + End Sub + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef sStudio As List(Of String)) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule_Data.GetMovieStudio + Return Nothing + End Function + + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule_Data.Scraper + 'LoadSettings() + ''TMDBg.IMDBURL = MySettings.IMDBURL + ''TMDBg.UseOFDBTitle = MySettings.UseOFDBTitle + ''TMDBg.UseOFDBOutline = MySettings.UseOFDBOutline + ''TMDBg.UseOFDBPlot = MySettings.UseOFDBPlot + ''TMDBg.UseOFDBGenre = MySettings.UseOFDBGenre + Dim tTitle As String = String.Empty + Dim OldTitle As String = DBMovie.Movie.Title + + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + + If Master.GlobalScrapeMod.NFO AndAlso Not Master.GlobalScrapeMod.DoSearch Then + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, Options.bFullCrew, Options.bFullCast, False, Options, False) + ElseIf Not ScrapeType = Enums.ScrapeType.SingleScrape Then + DBMovie.Movie = _TMDBg.GetSearchMovieInfo(DBMovie.Movie.Title, DBMovie, ScrapeType, Options) + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + If ScrapeType = Enums.ScrapeType.SingleScrape AndAlso Master.GlobalScrapeMod.DoSearch _ + AndAlso ModulesManager.Instance.externalDataScrapersModules.OrderBy(Function(y) y.ScraperOrder).FirstOrDefault(Function(e) e.ProcessorModule.ScraperEnabled).AssemblyName = _AssemblyName Then + DBMovie.Movie.IMDBID = String.Empty + DBMovie.ClearExtras = True + DBMovie.PosterPath = String.Empty + DBMovie.FanartPath = String.Empty + DBMovie.TrailerPath = String.Empty + DBMovie.ExtraPath = String.Empty + DBMovie.SubPath = String.Empty + DBMovie.NfoPath = String.Empty + DBMovie.Movie.Clear() + End If + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + Select Case ScrapeType + Case Enums.ScrapeType.FilterAuto, Enums.ScrapeType.FullAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.UpdateAuto + Return New Interfaces.ModuleResult With {.breakChain = False} + End Select + If ScrapeType = Enums.ScrapeType.SingleScrape Then + Using dSearch As New dlgTMDBSearchResults(_MySettings, Me._TMDBg) + '' dSearch.IMDBURL = MySettings.IMDBURL + Dim tmpTitle As String = DBMovie.Movie.Title + If String.IsNullOrEmpty(tmpTitle) Then + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name, False) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name, False) + Else + tmpTitle = StringUtils.FilterName(If(DBMovie.isSingle, Directory.GetParent(DBMovie.Filename).Name, Path.GetFileNameWithoutExtension(DBMovie.Filename))) + End If + End If + Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) + If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID + End If + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + + Master.currMovie.ClearExtras = True + Master.currMovie.PosterPath = String.Empty + Master.currMovie.FanartPath = String.Empty + Master.currMovie.TrailerPath = String.Empty + Master.currMovie.ExtraPath = String.Empty + Master.currMovie.SubPath = String.Empty + Master.currMovie.NfoPath = String.Empty + + + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, filterOptions.bFullCrew, filterOptions.bFullCast, False, filterOptions, False) + End If + Else + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End Using + End If + End If + + If Not String.IsNullOrEmpty(DBMovie.Movie.Title) Then + tTitle = StringUtils.FilterTokens(DBMovie.Movie.Title) + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = tTitle + If Master.eSettings.DisplayYear AndAlso Not String.IsNullOrEmpty(DBMovie.Movie.Year) Then + DBMovie.ListTitle = String.Format("{0} ({1})", tTitle, DBMovie.Movie.Year) + Else + DBMovie.ListTitle = tTitle + End If + Else + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name) + Else + If DBMovie.UseFolder AndAlso DBMovie.isSingle Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(DBMovie.Filename).Name) + Else + DBMovie.ListTitle = StringUtils.FilterName(Path.GetFileNameWithoutExtension(DBMovie.Filename)) + End If + End If + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = DBMovie.ListTitle + End If + + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Sub ScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule_Data.ScraperOrderChanged + _setup.orderChanged() + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Structure sMySettings + +#Region "Fields" + Dim DownloadTrailers As Boolean + Dim TrailerTimeout As Integer + Dim UseTMDBTrailer As Boolean + Dim UseTMDBTrailerXBMC As Boolean + Dim ManualETSize As String + Dim UseTMDBTrailerPref As String + Dim TMDBAPIKey As String + Dim FANARTTVApiKey As String + Dim TMDBLanguage As String + Dim FallBackEng As Boolean + Dim UseIMDB As Boolean + Dim UseIMPA As Boolean + Dim UseMPDB As Boolean + Dim UseFANARTTV As Boolean + Dim UseIMDBTrailer As Boolean +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml new file mode 100644 index 0000000..cb66cd5 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.Debug_(db_DB).xml @@ -0,0 +1,902 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="1">tmdb1</string> + <string id="2">tmdb2</string> + <string id="3">tmdb3</string> + <string id="4">tmdb4</string> + <string id="5">tmdb5</string> + <string id="6">tmdb6</string> + <string id="7">tmdb7</string> + <string id="8">tmdb8</string> + <string id="9">tmdb9</string> + <string id="10">tmdb10</string> + <string id="11">tmdb11</string> + <string id="12">tmdb12</string> + <string id="13">tmdb13</string> + <string id="14">tmdb14</string> + <string id="15">tmdb15</string> + <string id="16">tmdb16</string> + <string id="17">tmdb17</string> + <string id="18">tmdb18</string> + <string id="19">tmdb19</string> + <string id="20">tmdb20</string> + <string id="21">tmdb21</string> + <string id="22">tmdb22</string> + <string id="23">tmdb23</string> + <string id="24">tmdb24</string> + <string id="25">tmdb25</string> + <string id="26">tmdb26</string> + <string id="27">tmdb27</string> + <string id="28">tmdb28</string> + <string id="29">tmdb29</string> + <string id="30">tmdb30</string> + <string id="31">tmdb31</string> + <string id="32">tmdb32</string> + <string id="33">tmdb33</string> + <string id="34">tmdb34</string> + <string id="35">tmdb35</string> + <string id="36">tmdb36</string> + <string id="37">tmdb37</string> + <string id="38">tmdb38</string> + <string id="39">tmdb39</string> + <string id="40">tmdb40</string> + <string id="41">tmdb41</string> + <string id="42">tmdb42</string> + <string id="43">tmdb43</string> + <string id="44">tmdb44</string> + <string id="45">tmdb45</string> + <string id="46">tmdb46</string> + <string id="47">tmdb47</string> + <string id="48">tmdb48</string> + <string id="49">tmdb49</string> + <string id="50">tmdb50</string> + <string id="51">tmdb51</string> + <string id="52">tmdb52</string> + <string id="53">tmdb53</string> + <string id="54">tmdb54</string> + <string id="55">tmdb55</string> + <string id="56">tmdb56</string> + <string id="57">tmdb57</string> + <string id="58">tmdb58</string> + <string id="59">tmdb59</string> + <string id="60">tmdb60</string> + <string id="61">tmdb61</string> + <string id="62">tmdb62</string> + <string id="63">tmdb63</string> + <string id="64">tmdb64</string> + <string id="65">tmdb65</string> + <string id="66">tmdb66</string> + <string id="67">tmdb67</string> + <string id="68">tmdb68</string> + <string id="69">tmdb69</string> + <string id="70">tmdb70</string> + <string id="71">tmdb71</string> + <string id="72">tmdb72</string> + <string id="73">tmdb73</string> + <string id="74">tmdb74</string> + <string id="75">tmdb75</string> + <string id="76">tmdb76</string> + <string id="77">tmdb77</string> + <string id="78">tmdb78</string> + <string id="79">tmdb79</string> + <string id="80">tmdb80</string> + <string id="81">tmdb81</string> + <string id="82">tmdb82</string> + <string id="83">tmdb83</string> + <string id="84">tmdb84</string> + <string id="85">tmdb85</string> + <string id="86">tmdb86</string> + <string id="87">tmdb87</string> + <string id="88">tmdb88</string> + <string id="89">tmdb89</string> + <string id="90">tmdb90</string> + <string id="91">tmdb91</string> + <string id="92">tmdb92</string> + <string id="93">tmdb93</string> + <string id="94">tmdb94</string> + <string id="95">tmdb95</string> + <string id="96">tmdb96</string> + <string id="97">tmdb97</string> + <string id="98">tmdb98</string> + <string id="99">tmdb99</string> + <string id="100">tmdb100</string> + <string id="101">tmdb101</string> + <string id="102">tmdb102</string> + <string id="103">tmdb103</string> + <string id="104">tmdb104</string> + <string id="105">tmdb105</string> + <string id="106">tmdb106</string> + <string id="107">tmdb107</string> + <string id="108">tmdb108</string> + <string id="109">tmdb109</string> + <string id="110">tmdb110</string> + <string id="111">tmdb111</string> + <string id="112">tmdb112</string> + <string id="113">tmdb113</string> + <string id="114">tmdb114</string> + <string id="115">tmdb115</string> + <string id="116">tmdb116</string> + <string id="117">tmdb117</string> + <string id="118">tmdb118</string> + <string id="119">tmdb119</string> + <string id="120">tmdb120</string> + <string id="121">tmdb121</string> + <string id="122">tmdb122</string> + <string id="123">tmdb123</string> + <string id="124">tmdb124</string> + <string id="125">tmdb125</string> + <string id="126">tmdb126</string> + <string id="127">tmdb127</string> + <string id="128">tmdb128</string> + <string id="129">tmdb129</string> + <string id="130">tmdb130</string> + <string id="131">tmdb131</string> + <string id="132">tmdb132</string> + <string id="133">tmdb133</string> + <string id="134">tmdb134</string> + <string id="135">tmdb135</string> + <string id="136">tmdb136</string> + <string id="137">tmdb137</string> + <string id="138">tmdb138</string> + <string id="139">tmdb139</string> + <string id="140">tmdb140</string> + <string id="141">tmdb141</string> + <string id="142">tmdb142</string> + <string id="143">tmdb143</string> + <string id="144">tmdb144</string> + <string id="145">tmdb145</string> + <string id="146">tmdb146</string> + <string id="147">tmdb147</string> + <string id="148">tmdb148</string> + <string id="149">tmdb149</string> + <string id="150">tmdb150</string> + <string id="151">tmdb151</string> + <string id="152">tmdb152</string> + <string id="153">tmdb153</string> + <string id="154">tmdb154</string> + <string id="155">tmdb155</string> + <string id="156">tmdb156</string> + <string id="157">tmdb157</string> + <string id="158">tmdb158</string> + <string id="159">tmdb159</string> + <string id="160">tmdb160</string> + <string id="161">tmdb161</string> + <string id="162">tmdb162</string> + <string id="163">tmdb163</string> + <string id="164">tmdb164</string> + <string id="165">tmdb165</string> + <string id="166">tmdb166</string> + <string id="167">tmdb167</string> + <string id="168">tmdb168</string> + <string id="169">tmdb169</string> + <string id="170">tmdb170</string> + <string id="171">tmdb171</string> + <string id="172">tmdb172</string> + <string id="173">tmdb173</string> + <string id="174">tmdb174</string> + <string id="175">tmdb175</string> + <string id="176">tmdb176</string> + <string id="177">tmdb177</string> + <string id="178">tmdb178</string> + <string id="179">tmdb179</string> + <string id="180">tmdb180</string> + <string id="181">tmdb181</string> + <string id="182">tmdb182</string> + <string id="183">tmdb183</string> + <string id="184">tmdb184</string> + <string id="185">tmdb185</string> + <string id="186">tmdb186</string> + <string id="187">tmdb187</string> + <string id="188">tmdb188</string> + <string id="189">tmdb189</string> + <string id="190">tmdb190</string> + <string id="191">tmdb191</string> + <string id="192">tmdb192</string> + <string id="193">tmdb193</string> + <string id="194">tmdb194</string> + <string id="195">tmdb195</string> + <string id="196">tmdb196</string> + <string id="197">tmdb197</string> + <string id="198">tmdb198</string> + <string id="199">tmdb199</string> + <string id="200">tmdb200</string> + <string id="201">tmdb201</string> + <string id="202">tmdb202</string> + <string id="203">tmdb203</string> + <string id="204">tmdb204</string> + <string id="205">tmdb205</string> + <string id="206">tmdb206</string> + <string id="207">tmdb207</string> + <string id="208">tmdb208</string> + <string id="209">tmdb209</string> + <string id="210">tmdb210</string> + <string id="211">tmdb211</string> + <string id="212">tmdb212</string> + <string id="213">tmdb213</string> + <string id="214">tmdb214</string> + <string id="215">tmdb215</string> + <string id="216">tmdb216</string> + <string id="217">tmdb217</string> + <string id="218">tmdb218</string> + <string id="219">tmdb219</string> + <string id="220">tmdb220</string> + <string id="221">tmdb221</string> + <string id="222">tmdb222</string> + <string id="223">tmdb223</string> + <string id="224">tmdb224</string> + <string id="225">tmdb225</string> + <string id="226">tmdb226</string> + <string id="227">tmdb227</string> + <string id="228">tmdb228</string> + <string id="229">tmdb229</string> + <string id="230">tmdb230</string> + <string id="231">tmdb231</string> + <string id="232">tmdb232</string> + <string id="233">tmdb233</string> + <string id="234">tmdb234</string> + <string id="235">tmdb235</string> + <string id="236">tmdb236</string> + <string id="237">tmdb237</string> + <string id="238">tmdb238</string> + <string id="239">tmdb239</string> + <string id="240">tmdb240</string> + <string id="241">tmdb241</string> + <string id="242">tmdb242</string> + <string id="243">tmdb243</string> + <string id="244">tmdb244</string> + <string id="245">tmdb245</string> + <string id="246">tmdb246</string> + <string id="247">tmdb247</string> + <string id="248">tmdb248</string> + <string id="249">tmdb249</string> + <string id="250">tmdb250</string> + <string id="251">tmdb251</string> + <string id="252">tmdb252</string> + <string id="253">tmdb253</string> + <string id="254">tmdb254</string> + <string id="255">tmdb255</string> + <string id="256">tmdb256</string> + <string id="257">tmdb257</string> + <string id="258">tmdb258</string> + <string id="259">tmdb259</string> + <string id="260">tmdb260</string> + <string id="261">tmdb261</string> + <string id="262">tmdb262</string> + <string id="263">tmdb263</string> + <string id="264">tmdb264</string> + <string id="265">tmdb265</string> + <string id="266">tmdb266</string> + <string id="267">tmdb267</string> + <string id="268">tmdb268</string> + <string id="269">tmdb269</string> + <string id="270">tmdb270</string> + <string id="271">tmdb271</string> + <string id="272">tmdb272</string> + <string id="273">tmdb273</string> + <string id="274">tmdb274</string> + <string id="275">tmdb275</string> + <string id="276">tmdb276</string> + <string id="277">tmdb277</string> + <string id="278">tmdb278</string> + <string id="279">tmdb279</string> + <string id="280">tmdb280</string> + <string id="281">tmdb281</string> + <string id="282">tmdb282</string> + <string id="283">tmdb283</string> + <string id="284">tmdb284</string> + <string id="285">tmdb285</string> + <string id="286">tmdb286</string> + <string id="287">tmdb287</string> + <string id="288">tmdb288</string> + <string id="289">tmdb289</string> + <string id="290">tmdb290</string> + <string id="291">tmdb291</string> + <string id="292">tmdb292</string> + <string id="293">tmdb293</string> + <string id="294">tmdb294</string> + <string id="295">tmdb295</string> + <string id="296">tmdb296</string> + <string id="297">tmdb297</string> + <string id="298">tmdb298</string> + <string id="299">tmdb299</string> + <string id="300">tmdb300</string> + <string id="301">tmdb301</string> + <string id="302">tmdb302</string> + <string id="303">tmdb303</string> + <string id="304">tmdb304</string> + <string id="305">tmdb305</string> + <string id="306">tmdb306</string> + <string id="307">tmdb307</string> + <string id="308">tmdb308</string> + <string id="309">tmdb309</string> + <string id="310">tmdb310</string> + <string id="311">tmdb311</string> + <string id="312">tmdb312</string> + <string id="313">tmdb313</string> + <string id="314">tmdb314</string> + <string id="315">tmdb315</string> + <string id="316">tmdb316</string> + <string id="317">tmdb317</string> + <string id="318">tmdb318</string> + <string id="319">tmdb319</string> + <string id="320">tmdb320</string> + <string id="321">tmdb321</string> + <string id="322">tmdb322</string> + <string id="323">tmdb323</string> + <string id="324">tmdb324</string> + <string id="325">tmdb325</string> + <string id="326">tmdb326</string> + <string id="327">tmdb327</string> + <string id="328">tmdb328</string> + <string id="329">tmdb329</string> + <string id="330">tmdb330</string> + <string id="331">tmdb331</string> + <string id="332">tmdb332</string> + <string id="333">tmdb333</string> + <string id="334">tmdb334</string> + <string id="335">tmdb335</string> + <string id="336">tmdb336</string> + <string id="337">tmdb337</string> + <string id="338">tmdb338</string> + <string id="339">tmdb339</string> + <string id="340">tmdb340</string> + <string id="341">tmdb341</string> + <string id="342">tmdb342</string> + <string id="343">tmdb343</string> + <string id="344">tmdb344</string> + <string id="345">tmdb345</string> + <string id="346">tmdb346</string> + <string id="347">tmdb347</string> + <string id="348">tmdb348</string> + <string id="349">tmdb349</string> + <string id="350">tmdb350</string> + <string id="351">tmdb351</string> + <string id="352">tmdb352</string> + <string id="353">tmdb353</string> + <string id="354">tmdb354</string> + <string id="355">tmdb355</string> + <string id="356">tmdb356</string> + <string id="357">tmdb357</string> + <string id="358">tmdb358</string> + <string id="359">tmdb359</string> + <string id="360">tmdb360</string> + <string id="361">tmdb361</string> + <string id="362">tmdb362</string> + <string id="363">tmdb363</string> + <string id="364">tmdb364</string> + <string id="365">tmdb365</string> + <string id="366">tmdb366</string> + <string id="367">tmdb367</string> + <string id="368">tmdb368</string> + <string id="369">tmdb369</string> + <string id="370">tmdb370</string> + <string id="371">tmdb371</string> + <string id="372">tmdb372</string> + <string id="373">tmdb373</string> + <string id="374">tmdb374</string> + <string id="375">tmdb375</string> + <string id="376">tmdb376</string> + <string id="377">tmdb377</string> + <string id="378">tmdb378</string> + <string id="379">tmdb379</string> + <string id="380">tmdb380</string> + <string id="381">tmdb381</string> + <string id="382">tmdb382</string> + <string id="383">tmdb383</string> + <string id="384">tmdb384</string> + <string id="385">tmdb385</string> + <string id="386">tmdb386</string> + <string id="387">tmdb387</string> + <string id="388">tmdb388</string> + <string id="389">tmdb389</string> + <string id="390">tmdb390</string> + <string id="391">tmdb391</string> + <string id="392">tmdb392</string> + <string id="393">tmdb393</string> + <string id="394">tmdb394</string> + <string id="395">tmdb395</string> + <string id="396">tmdb396</string> + <string id="397">tmdb397</string> + <string id="398">tmdb398</string> + <string id="399">tmdb399</string> + <string id="400">tmdb400</string> + <string id="401">tmdb401</string> + <string id="402">tmdb402</string> + <string id="403">tmdb403</string> + <string id="404">tmdb404</string> + <string id="405">tmdb405</string> + <string id="406">tmdb406</string> + <string id="407">tmdb407</string> + <string id="408">tmdb408</string> + <string id="409">tmdb409</string> + <string id="410">tmdb410</string> + <string id="411">tmdb411</string> + <string id="412">tmdb412</string> + <string id="413">tmdb413</string> + <string id="414">tmdb414</string> + <string id="415">tmdb415</string> + <string id="416">tmdb416</string> + <string id="417">tmdb417</string> + <string id="418">tmdb418</string> + <string id="419">tmdb419</string> + <string id="420">tmdb420</string> + <string id="421">tmdb421</string> + <string id="422">tmdb422</string> + <string id="423">tmdb423</string> + <string id="424">tmdb424</string> + <string id="425">tmdb425</string> + <string id="426">tmdb426</string> + <string id="427">tmdb427</string> + <string id="428">tmdb428</string> + <string id="429">tmdb429</string> + <string id="430">tmdb430</string> + <string id="431">tmdb431</string> + <string id="432">tmdb432</string> + <string id="433">tmdb433</string> + <string id="434">tmdb434</string> + <string id="435">tmdb435</string> + <string id="436">tmdb436</string> + <string id="437">tmdb437</string> + <string id="438">tmdb438</string> + <string id="439">tmdb439</string> + <string id="440">tmdb440</string> + <string id="441">tmdb441</string> + <string id="442">tmdb442</string> + <string id="443">tmdb443</string> + <string id="444">tmdb444</string> + <string id="445">tmdb445</string> + <string id="446">tmdb446</string> + <string id="447">tmdb447</string> + <string id="448">tmdb448</string> + <string id="449">tmdb449</string> + <string id="450">tmdb450</string> + <string id="451">tmdb451</string> + <string id="452">tmdb452</string> + <string id="453">tmdb453</string> + <string id="454">tmdb454</string> + <string id="455">tmdb455</string> + <string id="456">tmdb456</string> + <string id="457">tmdb457</string> + <string id="458">tmdb458</string> + <string id="459">tmdb459</string> + <string id="460">tmdb460</string> + <string id="461">tmdb461</string> + <string id="462">tmdb462</string> + <string id="463">tmdb463</string> + <string id="464">tmdb464</string> + <string id="465">tmdb465</string> + <string id="466">tmdb466</string> + <string id="467">tmdb467</string> + <string id="468">tmdb468</string> + <string id="469">tmdb469</string> + <string id="470">tmdb470</string> + <string id="471">tmdb471</string> + <string id="472">tmdb472</string> + <string id="473">tmdb473</string> + <string id="474">tmdb474</string> + <string id="475">tmdb475</string> + <string id="476">tmdb476</string> + <string id="477">tmdb477</string> + <string id="478">tmdb478</string> + <string id="479">tmdb479</string> + <string id="480">tmdb480</string> + <string id="481">tmdb481</string> + <string id="482">tmdb482</string> + <string id="483">tmdb483</string> + <string id="484">tmdb484</string> + <string id="485">tmdb485</string> + <string id="486">tmdb486</string> + <string id="487">tmdb487</string> + <string id="488">tmdb488</string> + <string id="489">tmdb489</string> + <string id="490">tmdb490</string> + <string id="491">tmdb491</string> + <string id="492">tmdb492</string> + <string id="493">tmdb493</string> + <string id="494">tmdb494</string> + <string id="495">tmdb495</string> + <string id="496">tmdb496</string> + <string id="497">tmdb497</string> + <string id="498">tmdb498</string> + <string id="499">tmdb499</string> + <string id="500">tmdb500</string> + <string id="501">tmdb501</string> + <string id="502">tmdb502</string> + <string id="503">tmdb503</string> + <string id="504">tmdb504</string> + <string id="505">tmdb505</string> + <string id="506">tmdb506</string> + <string id="507">tmdb507</string> + <string id="508">tmdb508</string> + <string id="509">tmdb509</string> + <string id="510">tmdb510</string> + <string id="511">tmdb511</string> + <string id="512">tmdb512</string> + <string id="513">tmdb513</string> + <string id="514">tmdb514</string> + <string id="515">tmdb515</string> + <string id="516">tmdb516</string> + <string id="517">tmdb517</string> + <string id="518">tmdb518</string> + <string id="519">tmdb519</string> + <string id="520">tmdb520</string> + <string id="521">tmdb521</string> + <string id="522">tmdb522</string> + <string id="523">tmdb523</string> + <string id="524">tmdb524</string> + <string id="525">tmdb525</string> + <string id="526">tmdb526</string> + <string id="527">tmdb527</string> + <string id="528">tmdb528</string> + <string id="529">tmdb529</string> + <string id="530">tmdb530</string> + <string id="531">tmdb531</string> + <string id="532">tmdb532</string> + <string id="533">tmdb533</string> + <string id="534">tmdb534</string> + <string id="535">tmdb535</string> + <string id="536">tmdb536</string> + <string id="537">tmdb537</string> + <string id="538">tmdb538</string> + <string id="539">tmdb539</string> + <string id="540">tmdb540</string> + <string id="541">tmdb541</string> + <string id="542">tmdb542</string> + <string id="543">tmdb543</string> + <string id="544">tmdb544</string> + <string id="545">tmdb545</string> + <string id="546">tmdb546</string> + <string id="547">tmdb547</string> + <string id="548">tmdb548</string> + <string id="549">tmdb549</string> + <string id="550">tmdb550</string> + <string id="551">tmdb551</string> + <string id="552">tmdb552</string> + <string id="553">tmdb553</string> + <string id="554">tmdb554</string> + <string id="555">tmdb555</string> + <string id="556">tmdb556</string> + <string id="557">tmdb557</string> + <string id="558">tmdb558</string> + <string id="559">tmdb559</string> + <string id="560">tmdb560</string> + <string id="561">tmdb561</string> + <string id="562">tmdb562</string> + <string id="563">tmdb563</string> + <string id="564">tmdb564</string> + <string id="565">tmdb565</string> + <string id="566">tmdb566</string> + <string id="567">tmdb567</string> + <string id="568">tmdb568</string> + <string id="569">tmdb569</string> + <string id="570">tmdb570</string> + <string id="571">tmdb571</string> + <string id="572">tmdb572</string> + <string id="573">tmdb573</string> + <string id="574">tmdb574</string> + <string id="575">tmdb575</string> + <string id="576">tmdb576</string> + <string id="577">tmdb577</string> + <string id="578">tmdb578</string> + <string id="579">tmdb579</string> + <string id="580">tmdb580</string> + <string id="581">tmdb581</string> + <string id="582">tmdb582</string> + <string id="583">tmdb583</string> + <string id="584">tmdb584</string> + <string id="585">tmdb585</string> + <string id="586">tmdb586</string> + <string id="587">tmdb587</string> + <string id="588">tmdb588</string> + <string id="589">tmdb589</string> + <string id="590">tmdb590</string> + <string id="591">tmdb591</string> + <string id="592">tmdb592</string> + <string id="593">tmdb593</string> + <string id="594">tmdb594</string> + <string id="595">tmdb595</string> + <string id="596">tmdb596</string> + <string id="597">tmdb597</string> + <string id="598">tmdb598</string> + <string id="599">tmdb599</string> + <string id="600">tmdb600</string> + <string id="601">tmdb601</string> + <string id="602">tmdb602</string> + <string id="603">tmdb603</string> + <string id="604">tmdb604</string> + <string id="605">tmdb605</string> + <string id="606">tmdb606</string> + <string id="607">tmdb607</string> + <string id="608">tmdb608</string> + <string id="609">tmdb609</string> + <string id="610">tmdb610</string> + <string id="611">tmdb611</string> + <string id="612">tmdb612</string> + <string id="613">tmdb613</string> + <string id="614">tmdb614</string> + <string id="615">tmdb615</string> + <string id="616">tmdb616</string> + <string id="617">tmdb617</string> + <string id="618">tmdb618</string> + <string id="619">tmdb619</string> + <string id="620">tmdb620</string> + <string id="621">tmdb621</string> + <string id="622">tmdb622</string> + <string id="623">tmdb623</string> + <string id="624">tmdb624</string> + <string id="625">tmdb625</string> + <string id="626">tmdb626</string> + <string id="627">tmdb627</string> + <string id="628">tmdb628</string> + <string id="629">tmdb629</string> + <string id="630">tmdb630</string> + <string id="631">tmdb631</string> + <string id="632">tmdb632</string> + <string id="633">tmdb633</string> + <string id="634">tmdb634</string> + <string id="635">tmdb635</string> + <string id="636">tmdb636</string> + <string id="637">tmdb637</string> + <string id="638">tmdb638</string> + <string id="639">tmdb639</string> + <string id="640">tmdb640</string> + <string id="641">tmdb641</string> + <string id="642">tmdb642</string> + <string id="643">tmdb643</string> + <string id="644">tmdb644</string> + <string id="645">tmdb645</string> + <string id="646">tmdb646</string> + <string id="647">tmdb647</string> + <string id="648">tmdb648</string> + <string id="649">tmdb649</string> + <string id="650">tmdb650</string> + <string id="651">tmdb651</string> + <string id="652">tmdb652</string> + <string id="653">tmdb653</string> + <string id="654">tmdb654</string> + <string id="655">tmdb655</string> + <string id="656">tmdb656</string> + <string id="657">tmdb657</string> + <string id="658">tmdb658</string> + <string id="659">tmdb659</string> + <string id="660">tmdb660</string> + <string id="661">tmdb661</string> + <string id="662">tmdb662</string> + <string id="663">tmdb663</string> + <string id="664">tmdb664</string> + <string id="665">tmdb665</string> + <string id="666">tmdb666</string> + <string id="667">tmdb667</string> + <string id="668">tmdb668</string> + <string id="669">tmdb669</string> + <string id="670">tmdb670</string> + <string id="671">tmdb671</string> + <string id="672">tmdb672</string> + <string id="673">tmdb673</string> + <string id="674">tmdb674</string> + <string id="675">tmdb675</string> + <string id="676">tmdb676</string> + <string id="677">tmdb677</string> + <string id="678">tmdb678</string> + <string id="679">tmdb679</string> + <string id="680">tmdb680</string> + <string id="681">tmdb681</string> + <string id="682">tmdb682</string> + <string id="683">tmdb683</string> + <string id="684">tmdb684</string> + <string id="685">tmdb685</string> + <string id="686">tmdb686</string> + <string id="687">tmdb687</string> + <string id="688">tmdb688</string> + <string id="689">tmdb689</string> + <string id="690">tmdb690</string> + <string id="691">tmdb691</string> + <string id="692">tmdb692</string> + <string id="693">tmdb693</string> + <string id="694">tmdb694</string> + <string id="695">tmdb695</string> + <string id="696">tmdb696</string> + <string id="697">tmdb697</string> + <string id="698">tmdb698</string> + <string id="699">tmdb699</string> + <string id="700">tmdb700</string> + <string id="701">tmdb701</string> + <string id="702">tmdb702</string> + <string id="703">tmdb703</string> + <string id="704">tmdb704</string> + <string id="705">tmdb705</string> + <string id="706">tmdb706</string> + <string id="707">tmdb707</string> + <string id="708">tmdb708</string> + <string id="709">tmdb709</string> + <string id="710">tmdb710</string> + <string id="711">tmdb711</string> + <string id="712">tmdb712</string> + <string id="713">tmdb713</string> + <string id="714">tmdb714</string> + <string id="715">tmdb715</string> + <string id="716">tmdb716</string> + <string id="717">tmdb717</string> + <string id="718">tmdb718</string> + <string id="719">tmdb719</string> + <string id="720">tmdb720</string> + <string id="721">tmdb721</string> + <string id="722">tmdb722</string> + <string id="723">tmdb723</string> + <string id="724">tmdb724</string> + <string id="725">tmdb725</string> + <string id="726">tmdb726</string> + <string id="727">tmdb727</string> + <string id="728">tmdb728</string> + <string id="729">tmdb729</string> + <string id="730">tmdb730</string> + <string id="731">tmdb731</string> + <string id="732">tmdb732</string> + <string id="733">tmdb733</string> + <string id="734">tmdb734</string> + <string id="735">tmdb735</string> + <string id="736">tmdb736</string> + <string id="737">tmdb737</string> + <string id="738">tmdb738</string> + <string id="739">tmdb739</string> + <string id="740">tmdb740</string> + <string id="741">tmdb741</string> + <string id="742">tmdb742</string> + <string id="743">tmdb743</string> + <string id="744">tmdb744</string> + <string id="745">tmdb745</string> + <string id="746">tmdb746</string> + <string id="747">tmdb747</string> + <string id="748">tmdb748</string> + <string id="749">tmdb749</string> + <string id="750">tmdb750</string> + <string id="751">tmdb751</string> + <string id="752">tmdb752</string> + <string id="753">tmdb753</string> + <string id="754">tmdb754</string> + <string id="755">tmdb755</string> + <string id="756">tmdb756</string> + <string id="757">tmdb757</string> + <string id="758">tmdb758</string> + <string id="759">tmdb759</string> + <string id="760">tmdb760</string> + <string id="761">tmdb761</string> + <string id="762">tmdb762</string> + <string id="763">tmdb763</string> + <string id="764">tmdb764</string> + <string id="765">tmdb765</string> + <string id="766">tmdb766</string> + <string id="767">tmdb767</string> + <string id="768">tmdb768</string> + <string id="769">tmdb769</string> + <string id="770">tmdb770</string> + <string id="771">tmdb771</string> + <string id="772">tmdb772</string> + <string id="773">tmdb773</string> + <string id="774">tmdb774</string> + <string id="775">tmdb775</string> + <string id="776">tmdb776</string> + <string id="777">tmdb777</string> + <string id="778">tmdb778</string> + <string id="779">tmdb779</string> + <string id="780">tmdb780</string> + <string id="781">tmdb781</string> + <string id="782">tmdb782</string> + <string id="783">tmdb783</string> + <string id="784">tmdb784</string> + <string id="785">tmdb785</string> + <string id="786">tmdb786</string> + <string id="787">tmdb787</string> + <string id="788">tmdb788</string> + <string id="789">tmdb789</string> + <string id="790">tmdb790</string> + <string id="791">tmdb791</string> + <string id="792">tmdb792</string> + <string id="793">tmdb793</string> + <string id="794">tmdb794</string> + <string id="795">tmdb795</string> + <string id="796">tmdb796</string> + <string id="797">tmdb797</string> + <string id="798">tmdb798</string> + <string id="799">tmdb799</string> + <string id="800">tmdb800</string> + <string id="801">tmdb801</string> + <string id="802">tmdb802</string> + <string id="803">tmdb803</string> + <string id="804">tmdb804</string> + <string id="805">tmdb805</string> + <string id="806">tmdb806</string> + <string id="807">tmdb807</string> + <string id="808">tmdb808</string> + <string id="809">tmdb809</string> + <string id="810">tmdb810</string> + <string id="811">tmdb811</string> + <string id="812">tmdb812</string> + <string id="813">tmdb813</string> + <string id="814">tmdb814</string> + <string id="815">tmdb815</string> + <string id="816">tmdb816</string> + <string id="817">tmdb817</string> + <string id="818">tmdb818</string> + <string id="819">tmdb819</string> + <string id="820">tmdb820</string> + <string id="821">tmdb821</string> + <string id="822">tmdb822</string> + <string id="823">tmdb823</string> + <string id="824">tmdb824</string> + <string id="825">tmdb825</string> + <string id="826">tmdb826</string> + <string id="827">tmdb827</string> + <string id="828">tmdb828</string> + <string id="829">tmdb829</string> + <string id="830">tmdb830</string> + <string id="831">tmdb831</string> + <string id="832">tmdb832</string> + <string id="833">tmdb833</string> + <string id="834">tmdb834</string> + <string id="835">tmdb835</string> + <string id="836">tmdb836</string> + <string id="837">tmdb837</string> + <string id="838">tmdb838</string> + <string id="839">tmdb839</string> + <string id="840">tmdb840</string> + <string id="841">tmdb841</string> + <string id="842">tmdb842</string> + <string id="843">tmdb843</string> + <string id="844">tmdb844</string> + <string id="845">tmdb845</string> + <string id="846">tmdb846</string> + <string id="847">tmdb847</string> + <string id="848">tmdb848</string> + <string id="849">tmdb849</string> + <string id="850">tmdb850</string> + <string id="851">tmdb851</string> + <string id="852">tmdb852</string> + <string id="853">tmdb853</string> + <string id="854">tmdb854</string> + <string id="855">tmdb855</string> + <string id="856">tmdb856</string> + <string id="857">tmdb857</string> + <string id="858">tmdb858</string> + <string id="859">tmdb859</string> + <string id="860">tmdb860</string> + <string id="861">tmdb861</string> + <string id="862">tmdb862</string> + <string id="863">tmdb863</string> + <string id="864">tmdb864</string> + <string id="865">tmdb865</string> + <string id="866">tmdb866</string> + <string id="867">tmdb867</string> + <string id="868">tmdb868</string> + <string id="869">tmdb869</string> + <string id="870">tmdb870</string> + <string id="871">tmdb871</string> + <string id="872">tmdb872</string> + <string id="873">tmdb873</string> + <string id="874">tmdb874</string> + <string id="875">tmdb875</string> + <string id="876">tmdb876</string> + <string id="877">tmdb877</string> + <string id="878">tmdb878</string> + <string id="879">tmdb879</string> + <string id="880">tmdb880</string> + <string id="881">tmdb881</string> + <string id="882">tmdb882</string> + <string id="883">tmdb883</string> + <string id="884">tmdb884</string> + <string id="885">tmdb885</string> + <string id="886">tmdb886</string> + <string id="887">tmdb887</string> + <string id="888">tmdb888</string> + <string id="889">tmdb889</string> + <string id="890">tmdb890</string> + <string id="891">tmdb891</string> + <string id="892">tmdb892</string> + <string id="893">tmdb893</string> + <string id="894">tmdb894</string> + <string id="895">tmdb895</string> + <string id="896">tmdb896</string> + <string id="897">tmdb897</string> + <string id="898">tmdb898</string> + <string id="899">tmdb899</string> + <string id="900">tmdb900</string> +</strings> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml new file mode 100644 index 0000000..5e87256 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Enable or disable this module.</string> + <string control="TMDBMovieInfo_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieInfo_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API Key from the TMDB site. Sharing the API key is forbidden.</string> + <string control="TMDBMovieInfo_chkCertification">Enable scraping movie certification.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Selected language for TMDB searches</string> + <string control="TMDBMovieInfo_chkFallBackEng">If no record is available for selected language try English</string> + <string control="TMDBMovieInfo_chkCrew">Enable scraping movie other crew. (Scrape Full Crew must be enabled)</string> + <string control="TMDBMovieInfo_chkStudio">Enable scraping movie studio.</string> + <string control="TMDBMovieInfo_chkRuntime">Enable scraping movie runtime.</string> + <string control="TMDBMovieInfo_chkPlot">Enable scraping movie plot.</string> + <string control="TMDBMovieInfo_chkOutline">Enable scraping movie outline.</string> + <string control="TMDBMovieInfo_chkGenre">Enable scraping movie genre.</string> + <string control="TMDBMovieInfo_chkTagline">Enable scraping movie tagline.</string> + <string control="TMDBMovieInfo_chkCast">Enable scraping movie cast.</string> + <string control="TMDBMovieInfo_chkVotes">Enable scraping movie votes.</string> + <string control="TMDBMovieInfo_chkRating">Enable scraping movie rating.</string> + <string control="TMDBMovieInfo_chkRelease">Enable scraping movie release date.</string> + <string control="TMDBMovieInfo_chkMPAA">Enable scraping movie MPAA.</string> + <string control="TMDBMovieInfo_chkYear">Enable scraping movie year.</string> + <string control="TMDBMovieInfo_chkTitle">Enable scraping movie title.</string> + <string control="TMDBMovieMedia_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieMedia_cbEnabled">Enable or disable this module.</string> + <string control="TMDBMovieMedia_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Enable scraping posters from this module. (Refer to global poster settings for more options)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Enable scraping fanart from this module. (Refer to global fanart settings for more options)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Enable trailer downloading from this module. (Refer to global trailer settings for more options)</string> + <string control="TMDBMovieMedia_txtTimeout">Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Select the sites from which you would like to retrieve trailer URLs and/or files.</string> +</strings> diff --git a/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml new file mode 100644 index 0000000..cf68bc8 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.English_(en_US).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Native TV Scrapers</string> + <string id="1">Use OFDB Genre</string> + <string id="2">Use OFDB Plot</string> + <string id="3">Use OFDB Outline</string> + <string id="4">Use OFDB Title</string> + <string id="5">TMDB Mirror:</string> + <string id="6">Scraper Fields - Scraper specific</string> + <string id="7">Timeout:</string> + <string id="8">Supported Sites:</string> + <string id="9">Get Images From:</string> + <string id="10">Search Results</string> + <string id="11">Searching TMDB...</string> + <string id="12">The ID you entered is not a valid IMDB ID.</string> + <string id="13">You have manually entered an IMDB ID but have not verified it is correct.</string> + <string id="14">Continue without verification?</string> + <string id="15">Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again.</string> + <string id="16">Verification Failed</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">No Matches Found</string> + <string id="21">View details of each result to find the proper movie.</string> + <string id="22">Movie Search Results</string> + <string id="23">Manual IMDB Entry:</string> + <string id="24">Verify</string> + <string id="25">Searching TMDB...</string> + <string id="26">Downloading details...</string> + <string id="27">Downloading {0}</string> + <string id="28">No Fanart found for this movie.</string> + <string id="29">No Fanart Found</string> + <string id="30">No Posters found for this movie.</string> + <string id="31">No Posters Found</string> + <string id="32">Retrieving data from TheMovieDB.com...</string> + <string id="33">TheMovieDB.com is not enabled</string> + <string id="34">Retrieving data from IMPAwards.com...</string> + <string id="35">IMPAwards.com is not enabled</string> + <string id="36">Retrieving data from MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com is not enabled</string> + <string id="38">Preparing images...</string> + <string id="39">Select Poster</string> + <string id="40">Select Fanart</string> + <string id="41">Check All Thumb</string> + <string id="42">Check All Mid</string> + <string id="43">Check All Original</string> + <string id="44">Selected item will be set as fanart. All checked items will be saved to \extrathumbs.</string> + <string id="45">Performing Preliminary Tasks...</string> + <string id="46">Downloading Selected Image...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Small</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Small ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Multiple</string> + <string id="56">Downloading selected trailer...</string> + <string id="57">Copying specified file to trailer...</string> + <string id="58">The trailer could not be played. This could be due to an invalid URL or you do not have the proper player to play the trailer type.</string> + <string id="59">Error Playing Trailer</string> + <string id="60">Move</string> + <string id="61">Copy</string> + <string id="62">Moving specified file to trailer...</string> + <string id="63">Set To Nfo</string> + <string id="64">Select Trailer</string> + <string id="65">Select Trailer to Download</string> + <string id="66">Manual Trailer Entry</string> + <string id="67">Direct Link or YouTube URL:</string> + <string id="68">Compiling trailer list...</string> + <string id="69">Preview Trailer</string> + <string id="70">Local Trailer:</string> + <string id="71">The video format links could not be retrieved.</string> + <string id="72">Error Retrieving Video Format Links</string> + <string id="73">Select Format</string> + <string id="74">Getting available formats...</string> + <string id="75">Available Formats</string> + <string id="76">A poster of your preferred size could not be found. Please choose another.</string> + <string id="77">No Preferred Size</string> + <string id="78">Fanart of your preferred size could not be found. Please choose another.</string> + <string id="79">There are no known episodes for this show. Scrape the show, season, or episode and try again.</string> + <string id="80">No Known Episodes</string> + <string id="81">There is no poster available for this episode.</string> + <string id="82">Guest Star</string> + <string id="83">The ID you entered is not a valid TVDB ID.</string> + <string id="84">Downloading show info...</string> + <string id="85">TV Search Results</string> + <string id="86">View details of each result to find the proper TV show.</string> + <string id="87">Downloading Fullsize Fanart Image...</string> + <string id="88">Loading Current Images...</string> + <string id="89">(Down)Loading New Images...</string> + <string id="90">Setting Defaults...</string> + <string id="91">Show Poster</string> + <string id="92">Episode Fanart</string> + <string id="93">Show Fanart</string> + <string id="94">All Seasons Poster</string> + <string id="95">Season Posters</string> + <string id="96">Season Fanart</string> + <string id="97">Season {0} Posters</string> + <string id="98">Season {0} Fanart</string> + <string id="99">TV Image Selection</string> + <string id="100">Current Image:</string> + <string id="101">Get Posters</string> + <string id="102">Get Fanart</string> + <string id="103">These settings are specific to this module.{0}Please refer to the global settings for more options.</string> + <string id="104">Ember TMDB Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Size:</string> + <string id="109">Trailers</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Preferred language</string> + <string id="113">Save Fanart In:</string> + <string id="114">Fall back on english</string> + <string id="115">Preferred Language:</string> + <string id="116">TMDBid:</string> + <string id="117">Retrieving data from IMDB.com...</string> + <string id="118">IMDB.com is not enabled</string> + <string id="119">TheMovieDB API is missing or not valid</string> + <string id="120">Retrieving data from Fanart.tv...</string> + <string id="121">Fanart.tv is not enabled</string> + <string id="122">Get your API Key from www.themoviedb.org</string> + <string id="123">Get your API Key from fanart.tv</string> +</strings> diff --git a/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml new file mode 100644 index 0000000..d2a3801 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Aktiviert oder deaktiviert dieses Modul.</string> + <string control="TMDBMovieInfo_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieInfo_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API-Key von der TMDB-Website. Gemeinsame Nutzung des API-Schlüssels ist verboten.</string> + <string control="TMDBMovieInfo_chkCertification">Das Scrapen von Altersbeschränkungen einschalten.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Wähle die Sprache in der auf TMDB gesucht werden soll</string> + <string control="TMDBMovieInfo_chkFallBackEng">Wenn kein Datensatz für die gewählte Sprache verfügbar ist versuche englischen zu nehmen.</string> + <string control="TMDBMovieInfo_chkCrew">Das Scrapen von der restlichen Crew einschalten. ("Gesamte Crew Scrapen" muss eingeschaltet sein)</string> + <string control="TMDBMovieInfo_chkStudio">Das Scrapen von Studios einschalten.</string> + <string control="TMDBMovieInfo_chkRuntime">Das Scrapen von Spielzeiten einschalten.</string> + <string control="TMDBMovieInfo_chkPlot">Das Scrapen von Inhaltsangaben einschalten.</string> + <string control="TMDBMovieInfo_chkOutline">Das Scrapen von Kurzbeschreibungen einschalten.</string> + <string control="TMDBMovieInfo_chkGenre">Das Scrapen von Genres einschalten.</string> + <string control="TMDBMovieInfo_chkTagline">Das Scrapen von Taglines einschalten.</string> + <string control="TMDBMovieInfo_chkCast">Das Scrapen von Schauspielern einschalten.</string> + <string control="TMDBMovieInfo_chkVotes">Das Scrapen von Anzahl Bewertungen einschalten.</string> + <string control="TMDBMovieInfo_chkRating">Das Scrapen von Bewertungen einschalten.</string> + <string control="TMDBMovieInfo_chkRelease">Das Scrapen von Premiere-Daten einschalten.</string> + <string control="TMDBMovieInfo_chkMPAA">Das Scrapen von MPAA-Informationen einschalten.</string> + <string control="TMDBMovieInfo_chkYear">Das Scrapen von Filmjahren einschalten.</string> + <string control="TMDBMovieInfo_chkTitle">Das Scrapen von Filmtiteln einschalten.</string> + <string control="TMDBMovieMedia_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieMedia_cbEnabled">Aktiviert oder deaktiviert dieses Modul.</string> + <string control="TMDBMovieMedia_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten. (Scraper Module werden von oben nach unten abgearbeitet)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Aktiviert das Laden von Fanarts mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Aktiviert das Laden von Trailern mit diesem Modul. (Schau auch in die Globale Konfiguration)</string> + <string control="TMDBMovieMedia_txtTimeout">Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Seite in dieser Zeit nicht geantwortet hat wird sie übersprungen)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Wähle die Seite von der Trailer URLs/Dateien geladen werden sollen.</string> +</strings> diff --git a/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml new file mode 100644 index 0000000..9b8e52e --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.German_(de_DE).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Nativer TV Scraper</string> + <string id="1">OFDB Genre benutzen</string> + <string id="2">OFDB Handlung benutzen</string> + <string id="3">OFDB Kurzbeschr. benutzen</string> + <string id="4">OFDB Titel benutzen</string> + <string id="5">TMDB Mirror:</string> + <string id="6">Scraper Felder - Scraper spezifisch</string> + <string id="7">Timeout:</string> + <string id="8">Unterstützte Seiten:</string> + <string id="9">Bilder holen von:</string> + <string id="10">Suchergebnis</string> + <string id="11">Suche in der TMDB...</string> + <string id="12">Die eingegebene ID ist keine gültige IMDB ID.</string> + <string id="13">Die IMDB ID ist noch nicht geprüft.</string> + <string id="14">Ohne Prüfung fortfahren?</string> + <string id="15">Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben.</string> + <string id="16">Prüfung fehlgeschlagen</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">Keine Treffer</string> + <string id="21">Schaue dir die Details an um den richtigen Film zu finden.</string> + <string id="22">Film Suchergebnis</string> + <string id="23">Man. IMDB ID:</string> + <string id="24">Prüfen</string> + <string id="25">Suche in der TMDB...</string> + <string id="26">Lade Details...</string> + <string id="27">Lade {0} herunter</string> + <string id="28">Kein Fanart für diesen Film gefunden.</string> + <string id="29">Kein Fanart gefunden</string> + <string id="30">Kein Poster für diesen Film gefunden.</string> + <string id="31">Kein Poster gefunden</string> + <string id="32">Lade Daten von TheMovieDB.com...</string> + <string id="33">TheMovieDB.com ist nicht aktiviert</string> + <string id="34">Lade Daten von IMPAwards.com...</string> + <string id="35">IMPAwards.com ist nicht aktiviert</string> + <string id="36">Lade Daten von MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com ist nicht aktiviert</string> + <string id="38">Bereite Bilder vor...</string> + <string id="39">Wähle Poster</string> + <string id="40">Wähle Fanart</string> + <string id="41">Wähle alle Thumb</string> + <string id="42">Wähle alle Mittl.</string> + <string id="43">Wähle alle Original</string> + <string id="44">Markiertes Bild wird Fanart. Alle aktivierten werden Extrathumbs.</string> + <string id="45">Vorarbeit läuft...</string> + <string id="46">Lade gewähltes Bild...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Klein</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Klein ({0}x{1})</string> + <string id="54">Mittel ({0}x{1})</string> + <string id="55">Mehrfach</string> + <string id="56">Lade gewählten Trailer...</string> + <string id="57">Kopiere gewählten Trailer...</string> + <string id="58">Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URL liegen oder es ist kein Player für diesen Dateityp vorhanden.</string> + <string id="59">Fehler beim Abspielen des Trailers</string> + <string id="60">Verschieben</string> + <string id="61">Kopieren</string> + <string id="62">Verschiebe gewählten Treiler...</string> + <string id="63">In NFO speichern</string> + <string id="64">Trailer wählen</string> + <string id="65">Trailer zum laden wählen</string> + <string id="66">Manueller Trailer</string> + <string id="67">Direkter Link oder YouTube URL:</string> + <string id="68">Stelle Trailerliste zusammen...</string> + <string id="69">Trailer Vorschau</string> + <string id="70">Loakler trailer:</string> + <string id="71">Fehler beim generieren der Videoformat Linkliste.</string> + <string id="72">Fehler beim Generieren der Videoformat Links.</string> + <string id="73">Wähle Format</string> + <string id="74">Hole verfügbare Formate...</string> + <string id="75">Verfügbare Formate</string> + <string id="76">Es konnte kein Poster in der bevorzugten Größe gefunden werden. Wähle ein anderes.</string> + <string id="77">Keine bevorzugte Größe</string> + <string id="78">Es konnte kein Fanart in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="79">Keine Episoden für diese TV-Serie verfügbar. Scrape diese Serie, Staffel oder Episode und versuche es erneut.</string> + <string id="80">Keine Episoden verfügbar</string> + <string id="81">Kein Poster für diese Episode vorhanden.</string> + <string id="82">Gaststar</string> + <string id="83">Die eingegebene ID ist keine gültige TMDB ID.</string> + <string id="84">Lade Serien Informationen...</string> + <string id="85">Serien Suchergebnis</string> + <string id="86">Betrachte die Details um die richtige TV-Serie zu erkennen.</string> + <string id="87">Lade Fanart in Originalgröße...</string> + <string id="88">Lade aktuelle Bilder...</string> + <string id="89">Lade neue Bilder...</string> + <string id="90">Setze Standardwerte...</string> + <string id="91">Serien Poster</string> + <string id="92">Episoden Fanart</string> + <string id="93">Serien Fanart</string> + <string id="94">Alle-Staffeln Poster</string> + <string id="95">Staffel Poster</string> + <string id="96">Staffel Fanart</string> + <string id="97">Staffel {0} Poster</string> + <string id="98">Staffel {0} Fanart</string> + <string id="99">Bilderwahl TV-Serien</string> + <string id="100">Aktuelles Bild:</string> + <string id="101">Poster laden</string> + <string id="102">Fanart laden</string> + <string id="103">Diese Einstellungen sind Modul-spezifisch. {0} Bitte werfen sie einen Blick in die Globalen Einstellungen für noch mehr Optionen.</string> + <string id="104">Ember TMDB Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Grösse:</string> + <string id="109">Trailer</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Bevorzugte Sprache</string> + <string id="113">Speichere Fanart in:</string> + <string id="114">Verwende Englisch wenn nichts verfügbar</string> + <string id="115">Bevorzugte Sprache:</string> + <string id="116">TMDBid:</string> + <string id="117">Lade Daten von IMDB.com...</string> + <string id="118">IMDB.com ist nicht aktiviert.</string> + <string id="119">Die TheMovieDB API ist nicht vorhanden oder ungültig</string> + <string id="120">Lade Daten von Fanart.tv...</string> + <string id="121">Fanart.tv ist nicht aktiviert</string> + <string id="122">Get your API Key from www.themoviedb.org</string> + <string id="123">Get your API Key from fanart.tv</string> +</strings> diff --git a/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..54809c6 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,31 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="TMDBMovieInfo_cbEnabled">Slå denne modulen på eller av.</string> + <string control="TMDBMovieInfo_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieInfo_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieInfo_txtTMDBApiKey">API-nøkkel fra TMDB-siden. Deling av denne nøkkelen er forbudt.</string> + <string control="TMDBMovieInfo_chkCertification">Slå på detaljhenting av filmsertifisering.</string> + <string control="TMDBMovieInfo_cbTMDBPrefLanguage">Valgt språk for TMDB-søk.</string> + <string control="TMDBMovieInfo_chkFallBackEng">Hvis valgt språk ikke blir funnet, prøv engelsk.</string> + <string control="TMDBMovieInfo_chkCrew">Slå på detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått)</string> + <string control="TMDBMovieInfo_chkStudio">Slå på detaljhenting av filmstudio.</string> + <string control="TMDBMovieInfo_chkRuntime">Slå på detaljhenting av filmlengde.</string> + <string control="TMDBMovieInfo_chkPlot">Slå på detaljhenting av filmens historie.</string> + <string control="TMDBMovieInfo_chkOutline">Slå på detaljhenting av filmens beskrivelse.</string> + <string control="TMDBMovieInfo_chkGenre">Slå på detaljhenting av filmens sjanger.</string> + <string control="TMDBMovieInfo_chkTagline">Slå på detaljhetning av filmens undertittel.</string> + <string control="TMDBMovieInfo_chkCast">Slå på detaljhetning av filmens skuespillerbeholdning.</string> + <string control="TMDBMovieInfo_chkVotes">Slå på detaljhetning av filmens poeng.</string> + <string control="TMDBMovieInfo_chkRating">Slå på detaljhetning av filmens aldersgrense.</string> + <string control="TMDBMovieInfo_chkRelease">Slå på detaljhetning av filmens premieredato.</string> + <string control="TMDBMovieInfo_chkMPAA">Slå på detaljhetning av filmens MPAA-markering.</string> + <string control="TMDBMovieInfo_chkYear">Slå på detaljhetning av filmens år.</string> + <string control="TMDBMovieInfo_chkTitle">Slå på detaljhetning av filmens tittel.</string> + <string control="TMDBMovieMedia_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieMedia_cbEnabled">Slå denne modulen på eller av.</string> + <string control="TMDBMovieMedia_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="TMDBMovieMedia_chkScrapePoster">Slå på detaljhetning av plakater i denne modulen. (Se globale plakatinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_chkScrapeFanart">Slå på detaljhetning av fankunst i denne modulen. (Se globale fankunstinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_chkDownloadTrailer">Slå på automatisk henting av trailer fra denne modulen. (Se globale trailerinnstillinger for flere valg)</string> + <string control="TMDBMovieMedia_txtTimeout">Før inn tiden (i sekunder) du vil bruke for timeout for trailersider. (Hvis siden ikke svarer innen timeoutfristen, så vil den bli hoppet over)</string> + <string control="TMDBMovieMedia_lbTrailerSites">Velg sidene du vil bruke til trailer URL og/eller filer.</string> +</strings> diff --git a/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml new file mode 100644 index 0000000..3ee8a25 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Langs/scraper.EmberCore.TMDB.Norwegian_(no_NO).xml @@ -0,0 +1,126 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">EMM TV-detaljhentere</string> + <string id="1">Bruk OFDB-sjangere</string> + <string id="2">Bruk OFDB-filmhistorie</string> + <string id="3">Bruk OFDB-beskrivelse</string> + <string id="4">Bruk OFDB-tittel</string> + <string id="5">TMDB-speilserver:</string> + <string id="6">Detaljhenterområder - Detaljhenterspesifikk</string> + <string id="7">Tidsavbrudd:</string> + <string id="8">Støttede sider:</string> + <string id="9">Hent bilder fra:</string> + <string id="10">Søkeresultater</string> + <string id="11">Søker TMDB...</string> + <string id="12">IDen du førte inn er ikke en riktig IMDB-ID.</string> + <string id="13">Du har ført inn en IMDB-ID, men har ikke verifisert om den er riktig.</string> + <string id="14">Fortsette uten verifisering?</string> + <string id="15">Kunne ikke hente filmdetaljer for den innførte IDen. Vennligst sjekk IDen og prøv igjen.</string> + <string id="16">Verifisering feilet</string> + <string id="17"/> + <string id="18"/> + <string id="19"/> + <string id="20">Ingen funnet</string> + <string id="21">Se detaljer fra hvert treff for å finne riktig film.</string> + <string id="22">Filmsøkresultater</string> + <string id="23">Manuell IMDB innføring:</string> + <string id="24">Verifiser</string> + <string id="25">Søker TMDB...</string> + <string id="26">Laster ned detaljer...</string> + <string id="27">Laster ned {0}</string> + <string id="28">Ingen fankunst funnet for denne filmen.</string> + <string id="29">Ingen fankunst funnet</string> + <string id="30">Ingen plakater funnet for denne filmen.</string> + <string id="31">Ingen plakater funnet</string> + <string id="32">Henter data fra TheMovieDB.com...</string> + <string id="33">TheMovieDB.com er ikke påslått</string> + <string id="34">Henter data fra IMPAwards.com...</string> + <string id="35">IMPAwards.com er ikke påslått</string> + <string id="36">Henter data fra MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com er ikke påslått</string> + <string id="38">Forbereder bilder...</string> + <string id="39">Velg plakat</string> + <string id="40">Velg fankunst</string> + <string id="41">Huk av alle tommelbilder</string> + <string id="42">Huk av alle Mid</string> + <string id="43">Huk av alle originale</string> + <string id="44">Valgte objekt vil bli satt som fankunst. Alle hukede objekter vil bli lagret i \extrathumbs.</string> + <string id="45">Utfører forberedende oppgaver...</string> + <string id="46">Laster ned valgte bilde...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Liten</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Liten ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Flere</string> + <string id="56">Laster ned valgt trailer...</string> + <string id="57">Kopierer valgt fil til trailer...</string> + <string id="58">Traileren kunne ikke spilles av. Det kan være at URL ikke er gyldig, eller at du ikke har riktig avspiller for denne filtypen.</string> + <string id="59">Kan ikke spille av trailer</string> + <string id="60">Flytt</string> + <string id="61">Kopiér</string> + <string id="62">Flytter valgt fil til trailer...</string> + <string id="63">Sett i nfo</string> + <string id="64">Velg trailer</string> + <string id="65">Velg trailer til å laste ned</string> + <string id="66">Manuell trailerinnføring</string> + <string id="67">Direkte link eller YouTube URL:</string> + <string id="68">Kompilerer trailerliste...</string> + <string id="69">Sniktitt på trailer</string> + <string id="70">Lokal trailer:</string> + <string id="71">Videoformatlenkene kunne ikke hentes</string> + <string id="72">Kunne ikke hente videoformatlenker</string> + <string id="73">Velg format</string> + <string id="74">Henter tilgjengelige formater...</string> + <string id="75">Tilgjengelige formater</string> + <string id="76">En plakat i din valgte størrelse kunne ikke hentes. Vennligst velg en annen.</string> + <string id="77">Ingen foretrukket størrelse</string> + <string id="78">Fankunst i din foretrukkede størrelse kunne ikke bli funnet. Vennligst velg en annen.</string> + <string id="79">Det er ingen kjente episoder for denne serien. Detaljhent serien, sesongen eller episoden og prøv på nytt.</string> + <string id="80">Ingen kjente episoder</string> + <string id="81">Det er ingen plakater for denne episoden.</string> + <string id="82">Gjesteskuespiller</string> + <string id="83">IDen du innførte er ikke en gyldig TVDB ID.</string> + <string id="84">Laster ned serieinfo...</string> + <string id="85">TVsøk-resultater</string> + <string id="86">Se detaljer fra hvert resultat for å finne riktig serie.</string> + <string id="87">Laster ned fankunst i full størrelse...</string> + <string id="88">Laster inn nåværende bilder...</string> + <string id="89">Laster (ned) nye bilder...</string> + <string id="90">Setter standarder...</string> + <string id="91">Serieplakat</string> + <string id="92">Episode-fankunst</string> + <string id="93">Seriefankunst</string> + <string id="94">Alle sesonger-plakat</string> + <string id="95">Sesongplakat</string> + <string id="96">Sesongfankunst</string> + <string id="97">Sesong {0}-plakater</string> + <string id="98">Sesong {0}-fankunst</string> + <string id="99">TV-bilde valg</string> + <string id="100">Nåværende bilde:</string> + <string id="101">Hent plakater</string> + <string id="102">Hent fankunst</string> + <string id="103">Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg.</string> + <string id="104">EMM TMDB film-detaljhentere</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (Tysk)</string> + <string id="108">TMDB Ekstrakunst-størrelse:</string> + <string id="109">Trailere</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC-format</string> + <string id="112">Foretrukket språk</string> + <string id="113">Lagre fankunst i:</string> + <string id="114">Fall tilbake til engelsk</string> + <string id="115">Foretrukket språk:</string> + <string id="116">TIMDB-ID:</string> + <string id="117">Henter data fra IMDB.com...</string> + <string id="118">IMDB.com er ikke påslått</string> + <string id="119">TheMovieDB API mangler eller er ikke gyldig</string> + <string id="120">Henter data fra Fanart.tv...</string> + <string id="121">Fanart.tv er ikke påslått</string> + <string id="122">Hent din API-nøkkel fra www.themoviedb.org</string> + <string id="123">Hent din API-nøkkel fra fanart.tv</string> +</strings> diff --git a/Addons/scraper.TMDB.Poster/My Project/Application.Designer.vb b/Addons/scraper.TMDB.Poster/My Project/Application.Designer.vb new file mode 100644 index 0000000..66fb81a --- /dev/null +++ b/Addons/scraper.TMDB.Poster/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Addons/scraper.TMDB.Poster/My Project/Application.myapp b/Addons/scraper.TMDB.Poster/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Addons/scraper.TMDB.Poster/My Project/Application.myapp @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <MySubMain>false</MySubMain> + <SingleInstance>false</SingleInstance> + <ShutdownMode>0</ShutdownMode> + <EnableVisualStyles>true</EnableVisualStyles> + <AuthenticationMode>0</AuthenticationMode> + <ApplicationType>1</ApplicationType> + <SaveMySettingsOnExit>true</SaveMySettingsOnExit> +</MyApplicationData> diff --git a/Addons/scraper.TMDB.Poster/My Project/AssemblyInfo.vb b/Addons/scraper.TMDB.Poster/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..381eddf --- /dev/null +++ b/Addons/scraper.TMDB.Poster/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.TMDB.Poster")> +<Assembly: AssemblyDescription("http://forum.xbmc.org/showthread.php?tid=116941")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.TMDB.Poster")> +<Assembly: AssemblyCopyright("Copyright © 2013")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("D4439C07-7B39-4E2E-8AF6-CD67BBE36F9F")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.11")> +<Assembly: AssemblyFileVersion("1.3.0.11")> diff --git a/Addons/scraper.TMDB.Poster/My Project/Resources.Designer.vb b/Addons/scraper.TMDB.Poster/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bb85827 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''<summary> + ''' A strongly-typed resource class, for looking up localized strings, etc. + '''</summary> + <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + '''<summary> + ''' Returns the cached ResourceManager instance used by this class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EmberScraperModule.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + '''<summary> + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Addons/scraper.TMDB.Poster/My Project/Resources.resx b/Addons/scraper.TMDB.Poster/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Addons/scraper.TMDB.Poster/My Project/Resources.resx @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/My Project/Settings.Designer.vb b/Addons/scraper.TMDB.Poster/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f020222 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _ + Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + <Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _ + Friend Module MySettingsProperty + + <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _ + Friend ReadOnly Property Settings() As Global.EmberScraperModule.My.MySettings + Get + Return Global.EmberScraperModule.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Addons/scraper.TMDB.Poster/My Project/Settings.settings b/Addons/scraper.TMDB.Poster/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Addons/scraper.TMDB.Poster/My Project/Settings.settings @@ -0,0 +1,7 @@ +<?xml version='1.0' encoding='utf-8'?> +<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true"> + <Profiles> + <Profile Name="(Default)" /> + </Profiles> + <Settings /> +</SettingsFile> diff --git a/Addons/scraper.TMDB.Poster/Resources/Logo.png b/Addons/scraper.TMDB.Poster/Resources/Logo.png new file mode 100644 index 0000000..a89dae1 Binary files /dev/null and b/Addons/scraper.TMDB.Poster/Resources/Logo.png differ diff --git a/Addons/scraper.TMDB.Poster/Scraper/clsScrapeFANARTTV.vb b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeFANARTTV.vb new file mode 100644 index 0000000..13c1748 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeFANARTTV.vb @@ -0,0 +1,173 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ +' # HD Movie Logos -> logo.png (choose this first) +' # ClearLOGOs -> logo.png (use this as a backup if no HD Logo in the lanaguage specified) +' # ClearART -> clearart.png (use this as a backup if no HD ClearArt, in the language specified) +' # HDClearART -> clearart.png (choose this first) +' # cdART -> disc.png +' # Movie Backgrounds -> Fanart (this is the only fanart.tv artwork that might overlap with 'typical' artwork scraping from IMDB/TMDB) +' # Movie Banner -> Banner (not poster - Frodo supports both now, <moviename>-poster.jpg/png and <moviename>-banner.jpg/png or poster.jpg/png and banner.jpg/png) +' # Movie Thumbs -> landscape.png +' # Special note - the Logos and ClearArts are language-specific and should be tagged with the appropriate language. Will want to have a setting allowing users to specify a language so as not to get a bunch of foreign-language artwork. +' # 1) Logo.png - to be added at a later stage, today is not possible to save +' # 2) Clearart.png - to be added at a later stage, today is not possible to save +' # 3) Disc.png - to be added at a later stage, today is not possible to save +' # 4) Landscape.png - to be added at a later stage, today is not possible to save +' # language is in image properties + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports FanartTVAPI + +Namespace FANARTTVs + + Public Class Scraper + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _FanartTV As FanartTV.V1.FanartTV + Friend WithEvents bwFANARTTV As New System.ComponentModel.BackgroundWorker + Private _APIInvalid As Boolean = False +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _FanartTV = New FanartTV.V1.FanartTV(_MySettings.FANARTTVApiKey) + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest("1", "JSON", "all", 1, 1)) + If IsNothing(Result) Then + If Not IsNothing(_FanartTV.Error) Then + Master.eLog.WriteToErrorLog(_FanartTV.Error, "", "Error") + _APIInvalid = True + End If + End If + End Sub + + Public Sub Cancel() + If Me.bwFANARTTV.IsBusy Then Me.bwFANARTTV.CancelAsync() + + While Me.bwFANARTTV.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwFANARTTV.IsBusy Then + bwFANARTTV.WorkerSupportsCancellation = True + bwFANARTTV.WorkerReportsProgress = True + bwFANARTTV.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetFANARTTVImages(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + If _APIInvalid Then + Return Nothing + End If + Try + Dim Result As FanartTV.V1.FanartTVMovie = _FanartTV.GetMovieInfo(New FanartTV.V1.FanartTVRequest(imdbID, "JSON", "all", 1, 2)) + If bwFANARTTV.CancellationPending Then Return Nothing + If IsNothing(Result) Then Return alPoster + If IsNothing(Result.movieinfo.moviebackground) Then Return alPoster + For Each image In Result.movieinfo.moviebackground + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = image.url}) + alPoster.Add(New MediaContainers.Image With {.Description = "thumb", .URL = image.url & "/preview"}) + Next + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwFANARTTVA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTV.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetFANARTTVImages(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwFANARTTV_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTV.ProgressChanged + If Not bwFANARTTV.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwFANARTTV_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTV.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TMDB.Poster/Scraper/clsScrapeIMDB.vb b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeIMDB.vb new file mode 100644 index 0000000..ec6d1be --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeIMDB.vb @@ -0,0 +1,174 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Diagnostics +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMDBimg + + Public Class Scraper + +#Region "Fields" + + + + Friend WithEvents bwIMDBimg As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If Me.bwIMDBimg.IsBusy Then Me.bwIMDBimg.CancelAsync() + + While Me.bwIMDBimg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMDBimg.IsBusy Then + bwIMDBimg.WorkerSupportsCancellation = True + bwIMDBimg.WorkerReportsProgress = True + bwIMDBimg.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMDBimg.CancellationPending Then Return Nothing + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", imdbID, "")) + sHTTP = Nothing + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(1) + End If + + + ' check existence of a line like this + ' <a href="/media/rm2995297536/tt0089218?ref_=tt_ov_i" > <img height="317" + ' and then return this one + ' src = "http://ia.media-imdb.com/images/M/MV5BMTY1Mzk3MTg0M15BMl5BanBnXkFtZTcwOTQzODYyMQ@@._V1_SY317_CR3,0,214,317_.jpg" + Dim mcIMDB As MatchCollection = Regex.Matches(HTML, String.Concat("/media/[a-zA-Z0-9]{3,12}/tt", imdbID, "\?ref_=tt_ov_i"), RegexOptions.IgnoreCase) + If mcIMDB.Count > 0 Then + debug.print("GetIMDBPoster 1 - {0}", mcIMDB(0).Value) + 'Dim sUrl1 As String = sHTTP.DownloadData(mcIMDB(0).Value) + mcIMDB = Regex.Matches(HTML, "http://ia.media-imdb.com/images/.{3,80}?.jpg") + If mcIMDB.Count > 0 Then + 'just use the first one if more are found + Debug.Print("GetIMDBPoster 2 - {0}", mcIMDB(0).Value) + alPoster.Add(New MediaContainers.Image With {.Description = "cover", .URL = mcIMDB(0).Value}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(2) + End If + + Dim aSP As String() = Regex.Split(mcIMDB(0).Value, "._V\d+?_SY\d+?_CR\d+?,\d+?,\d+?,\d+?_") + Dim sUrl1 = aSP(0) + aSP(1) + Debug.Print("GetIMDBPoster 3 - {0}", sUrl1) + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = sUrl1}) + End If + + If bwIMDBimg.WorkerReportsProgress Then + bwIMDBimg.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMDBimg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBimg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMDBimg_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBimg.ProgressChanged + If Not bwIMDBimg.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMDBimg_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBimg.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TMDB.Poster/Scraper/clsScrapeIMPA.vb b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeIMPA.vb new file mode 100644 index 0000000..cfe43a1 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeIMPA.vb @@ -0,0 +1,189 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMPA + + Public Class Scraper + + #Region "Fields" + + + + Friend WithEvents bwIMPA As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwIMPA.IsBusy Then Me.bwIMPA.CancelAsync() + + While Me.bwIMPA.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMPA.IsBusy Then + bwIMPA.WorkerSupportsCancellation = True + bwIMPA.WorkerReportsProgress = True + bwIMPA.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMPAPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMPA.CancellationPending Then Return Nothing + Dim sURL As String = GetLink(imdbID) + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(1) + End If + + If Not String.IsNullOrEmpty(sURL) Then + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If bwIMPA.CancellationPending Then Return Nothing + + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(2) + End If + + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + + Dim PosterURL As String + + For Each mPoster As Match In mcPoster + If bwIMPA.CancellationPending Then Return Nothing + PosterURL = Strings.Replace(String.Format("{0}/{1}", sURL.Substring(0, sURL.LastIndexOf("/")), mPoster.Value.ToString()).Replace("thumbs", "posters"), "imp_", String.Empty) + + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + + PosterURL = PosterURL.Insert(PosterURL.LastIndexOf("."), "_xlg") + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = PosterURL}) + Next + End If + If bwIMPA.WorkerReportsProgress Then + bwIMPA.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMPA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPA.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMPAPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMPA_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPA.ProgressChanged + If Not bwIMPA.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMPA_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPA.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + Private Function GetLink(ByVal IMDBID As String) As String + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) + sHTTP = Nothing + + Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") + If mcIMPA.Count > 0 Then + 'just use the first one if more are found + Return mcIMPA(0).Value.ToString + Else + Return String.Empty + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return String.Empty + End Try + End Function + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + Dim sType As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TMDB.Poster/Scraper/clsScrapeImages.vb b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeImages.vb new file mode 100644 index 0000000..d335b62 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeImages.vb @@ -0,0 +1,1209 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Public Class ScrapeImages + +#Region "Fields" + + Private _MySettings As EmberTMDBScraperModule.sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private TMDB As TMDB.Scraper + Private IMPA As New IMPA.Scraper + Private MPDB As New MPDB.Scraper + Private IMDB As New IMDBimg.Scraper + Private FANARTTVs As FANARTTVs.Scraper + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Function GetPreferredImage(ByRef Image As Images, ByVal IMDBID As String, ByVal TMDBID As String, ByVal iType As Enums.ImageType, ByRef imgResult As Containers.ImgResult, ByVal sPath As String, ByVal doETs As Boolean, Optional ByVal doAsk As Boolean = False) As Boolean + '// + ' Try to get the best match between what the user selected in settings and the actual posters downloaded + '\\ + + Dim hasImages As Boolean = False + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim tmpListIMPA As New List(Of MediaContainers.Image) + Dim tmpListIMDB As New List(Of MediaContainers.Image) + Dim tmpListMPDB As New List(Of MediaContainers.Image) + Dim tmpIMDBX As Images = Nothing + Dim tmpIMDBL As Images = Nothing + Dim tmpIMDBM As Images = Nothing + Dim tmpIMDBS As Images = Nothing + Dim tmpIMDBW As Images = Nothing + Dim tmpTMDBX As Images = Nothing + Dim tmpTMDBL As Images = Nothing + Dim tmpTMDBM As Images = Nothing + Dim tmpTMDBS As Images = Nothing + Dim tmpTMDBW As Images = Nothing + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) + + Try + + If iType = Enums.ImageType.Posters Then 'posters + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tImage.URL) + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + tmpListTMDB.AddRange(TMDB.GetTMDBImages(TMDBID, "poster")) + + If _MySettings.UseIMPA Then + tmpListTMDB.AddRange(IMPA.GetIMPAPosters(IMDBID)) + End If + + If _MySettings.UseMPDB Then + tmpListMPDB.AddRange(MPDB.GetMPDBPosters(IMDBID)) + End If + + If _MySettings.UseIMDB Then + tmpListTMDB.AddRange(IMDB.GetIMDBPosters(IMDBID)) + End If + + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) + If Not IsNothing(tmdbThumb.WebImage.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) + End If + Image.Clear() + Next + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + End If + Else + 'download all TMBD images + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "poster") + + 'check each one for it's size to see if it matched the preferred size + If tmpListTMDB.Count > 0 Then + hasImages = True + + If Not Master.eSettings.NoSaveImagesToNfo Then + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + imgResult.Posters.Add(tmdbThumb.URL) + Next + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Xlrg + If iMovie.Description.ToLower = "original" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Lrg + If iMovie.Description.ToLower = "mid" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Mid + If iMovie.Description.ToLower = "cover" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Small + If iMovie.Description.ToLower = "thumb" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + 'no "wide" for TMDB + End Select + Image.Clear() + Next + End If + + If _MySettings.UseIMDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB found... try IMPA + + tmpListIMDB = IMDB.GetIMDBPosters(IMDBID) + + If tmpListIMDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMDBX) Then + tmpIMDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMDBL) Then + tmpIMDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMDBM) Then + tmpIMDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMDBS) Then + tmpIMDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMDBW) Then + tmpIMDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseIMPA Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from IMDB found... try IMPA + + tmpListIMPA = IMPA.GetIMPAPosters(IMDBID) + + If tmpListIMPA.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMPA + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMPAX) Then + tmpIMPAX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMPAL) Then + tmpIMPAL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMPAM) Then + tmpIMPAM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMPAS) Then + tmpIMPAS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMPAW) Then + tmpIMPAW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If _MySettings.UseMPDB Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB or IMPA found... try MPDB + + tmpListMPDB = MPDB.GetMPDBPosters(IMDBID) + + If tmpListMPDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListMPDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpMPDBX) Then + tmpMPDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpMPDBL) Then + tmpMPDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpMPDBM) Then + tmpMPDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpMPDBS) Then + tmpMPDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpMPDBW) Then + tmpMPDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If IsNothing(Image.Image) AndAlso Not doAsk Then + 'STILL no image found, just get the first available image, starting with the largest + 'check TMDB first + If tmpListTMDB.Count > 0 Then + Dim x = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If x.Count > 0 Then + Image.FromWeb(x(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "cover" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + End If + + Image.Clear() + + If _MySettings.UseIMDB Then + If tmpListIMDB.Count > 0 Then + If Not IsNothing(tmpIMDBX) Then + Image = tmpIMDBX + GoTo foundIT + End If + If Not IsNothing(tmpIMDBL) Then + Image = tmpIMDBL + GoTo foundIT + End If + If Not IsNothing(tmpIMDBM) Then + Image = tmpIMDBM + GoTo foundIT + End If + If Not IsNothing(tmpIMDBS) Then + Image = tmpIMDBS + GoTo foundIT + End If + If Not IsNothing(tmpIMDBW) Then + Image = tmpIMDBW + GoTo foundIT + End If + End If + End If + + If _MySettings.UseIMPA Then + If tmpListIMPA.Count > 0 Then + If Not IsNothing(tmpIMPAX) Then + Image = tmpIMPAX + GoTo foundIT + End If + If Not IsNothing(tmpIMPAL) Then + Image = tmpIMPAL + GoTo foundIT + End If + If Not IsNothing(tmpIMPAM) Then + Image = tmpIMPAM + GoTo foundIT + End If + If Not IsNothing(tmpIMPAS) Then + Image = tmpIMPAS + GoTo foundIT + End If + If Not IsNothing(tmpIMPAW) Then + Image = tmpIMPAW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + If _MySettings.UseMPDB Then + If tmpListMPDB.Count > 0 Then + If Not IsNothing(tmpMPDBX) Then + Image = tmpMPDBX + GoTo foundIT + End If + If Not IsNothing(tmpMPDBL) Then + Image = tmpMPDBL + GoTo foundIT + End If + If Not IsNothing(tmpMPDBM) Then + Image = tmpMPDBM + GoTo foundIT + End If + If Not IsNothing(tmpMPDBS) Then + Image = tmpMPDBS + GoTo foundIT + End If + If Not IsNothing(tmpMPDBW) Then + Image = tmpMPDBW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + End If + + End If + + Else 'fanart + + Dim ETHashes As New List(Of String) + If Master.eSettings.AutoET AndAlso doETs Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + End If + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + Image.Clear() + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + + End If + End If + End If + + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(TMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + Else + If _MySettings.UseFANARTTV Then + tmpListTMDB = FANARTTVs.GetFANARTTVImages(IMDBID) + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://fanart.tv" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://fanart.tv", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + End If + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + +foundIT: + tmpListTMDB = Nothing + tmpListIMPA = Nothing + tmpListMPDB = Nothing + Return hasImages + End Function + + Public Sub GetPreferredFAasET(ByVal IMDBID As String, ByVal sPath As String) + Dim _Image As Image + + If AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim ETHashes As New List(Of String) + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, "fanart") + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + For Each sFile As FileInfo In lFi + Select Case True + Case sFile.Name.Contains("(original)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Master.eSettings.AutoET Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + End If + Next + End If + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + 'Me.Clear() + Next + + _Image = Nothing + FileUtils.Delete.DeleteDirectory(CachePath) + + End If + End If + End If + End Sub + + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ + AdvancedSettings.GetBooleanSetting("tUseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ + (AdvancedSettings.GetBooleanSetting("tUseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + Public Shared Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + End If + + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) + End Sub + + + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0) + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub + Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo + Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() + + For i As Integer = 0 To UBound(Encoders) + If Encoders(i).FormatID = Format.Guid Then + Return Encoders(i) + End If + Next + + Return Nothing + End Function +#End Region 'Methods + + + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Scraper/clsScrapeMPDB.vb b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeMPDB.vb new file mode 100644 index 0000000..cd949ec --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeMPDB.vb @@ -0,0 +1,167 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Namespace MPDB + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwMPDB As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwMPDB.IsBusy Then Me.bwMPDB.CancelAsync() + + While Me.bwMPDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String) + Try + If Not Me.bwMPDB.IsBusy Then + Me.bwMPDB.WorkerSupportsCancellation = True + Me.bwMPDB.WorkerReportsProgress = True + Me.bwMPDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetMPDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + + If Me.bwMPDB.CancellationPending Then Return Nothing + + Try + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.movieposterdb.com/movie/", imdbID)) + sHTTP = Nothing + + If Me.bwMPDB.CancellationPending Then Return Nothing + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(1) + End If + + If Regex.IsMatch(HTML, String.Concat("http://www.imdb.com/title/tt", imdbID), RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline) Then + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "http://www.movieposterdb.com/posters/[0-9_](.*?)/[0-9](.*?)/[0-9](.*?)/[a-z0-9_](.*?).jpg") + + Dim PosterURL As String = String.Empty + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(2) + End If + + For Each mPoster As Match In mcPoster + If Me.bwMPDB.CancellationPending Then Return Nothing + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "l") + alPosters.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "t") + alPosters.Add(New MediaContainers.Image With {.Description = "thumb", .URL = PosterURL}) + Next + End If + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Private Sub bwMPDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetMPDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwMPDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDB.ProgressChanged + If Not bwMPDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwMPDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TMDB.Poster/Scraper/clsScrapeOFDB.vb b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeOFDB.vb new file mode 100644 index 0000000..2e94cca --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeOFDB.vb @@ -0,0 +1,242 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class OFDB + + #Region "Fields" + + Private imdbID As String + Private OFDBMovie As MediaContainers.Movie + Private _genre As String + Private _outline As String + Private _plot As String + Private _title As String + + #End Region 'Fields + + #Region "Constructors" + + Public Sub New(ByVal sID As String, ByRef mMovie As MediaContainers.Movie) + Clear() + imdbID = sID + OFDBMovie = mMovie + + GetOFDBDetails() + End Sub + + #End Region 'Constructors + + #Region "Properties" + + Public Property Genre() As String + Get + Return _genre + End Get + Set(ByVal value As String) + _genre = value + End Set + End Property + + Public Property Outline() As String + Get + Return _outline + End Get + Set(ByVal value As String) + _outline = value + End Set + End Property + + Public Property Plot() As String + Get + Return _plot + End Get + Set(ByVal value As String) + _plot = value + End Set + End Property + + Public Property Title() As String + Get + Return _title + End Get + Set(ByVal value As String) + _title = value + End Set + End Property + + #End Region 'Properties + + #Region "Methods" + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Sub Clear() + _title = String.Empty + _outline = String.Empty + _plot = String.Empty + _genre = String.Empty + End Sub + + Private Function GetFullPlot(ByVal sURL As String) As String + Dim FullPlot As String = String.Empty + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + Dim D, W, B As Integer + Dim tmpHTML As String + + D = Html.IndexOf("Eine Inhaltsangabe von") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim + W = tmpHTML.IndexOf("</b></b><br><br>") + If W > 0 Then + B = tmpHTML.IndexOf("</font></p>", W + 16) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return FullPlot + End Function + + Private Sub GetOFDBDetails() + Dim sURL As String = GetOFDBUrlFromIMDBID() + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(Html) Then + 'title + If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(Html, "<td width=""99\%""><h2><font face=""Arial,Helvetica,sans-serif"" size=""3""><b>([^<]+)</b></font></h2></td>").Groups(1).Value.ToString)) + _title = OFDBTitle + End If + + Dim D, W, B As Integer + Dim tmpHTML As String + + 'outline + If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then + D = Html.IndexOf("<b>Inhalt:</b>") + + If D > 0 Then + W = Html.IndexOf("<a href=""", D + 14) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(D + 14, W - (D + 14)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + + 'full plot + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then + D = Html.IndexOf("<b>Inhalt:</b>") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 14, L - (D + 14)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + End If + End If + + 'genre + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Genre) OrElse Not Master.eSettings.LockGenre Then + D = HTML.IndexOf("class=""Normal"">Genre(s):</font></td>") + If D > 0 Then + W = HTML.IndexOf("</table>", D) + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), "<a.*?href=[""'](?<url>.*?)[""'].*?>(?<name>.*?)</a>") + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetOFDBUrlFromIMDBID() As String + Dim ofdbURL As String = String.Empty + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.ofdb.de/view.php?SText=", imdbID, "&Kat=IMDb&page=suchergebnis&sourceid=mozilla-search")) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(HTML) Then + Dim mcOFDBURL As MatchCollection = Regex.Matches(HTML, "<a href=""film/([^<]+)"" onmouseover") + If mcOFDBURL.Count > 0 Then + 'just use the first one if more are found + ofdbURL = String.Concat("http://www.ofdb.de/", Regex.Match(mcOFDBURL(0).Value.ToString, """(film/([^<]+))""").Groups(1).Value.ToString) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return ofdbURL + End Function + + #End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Scraper/clsScrapeTMDB.vb b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeTMDB.vb new file mode 100644 index 0000000..9db6818 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeTMDB.vb @@ -0,0 +1,282 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDB + + Public Class Scraper + +#Region "Fields" + + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Private backdrop_names(3) As v3Size + Private poster_names(5) As v3Size + + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + ' v3 does not have description anymore + poster_names(0).description = "thumb" + poster_names(0).size = "w92" + poster_names(0).width = 92 + poster_names(1).description = "w154" + poster_names(1).size = "w154" + poster_names(1).width = 154 + poster_names(2).description = "cover" + poster_names(2).size = "w185" + poster_names(2).width = 185 + poster_names(3).description = "w342" + poster_names(3).size = "w342" + poster_names(3).width = 342 + poster_names(4).description = "mid" + poster_names(4).size = "w500" + poster_names(4).width = 500 + poster_names(5).description = "original" + poster_names(5).size = "original" + poster_names(5).width = 0 + backdrop_names(0).description = "thumb" + backdrop_names(0).size = "w300" + backdrop_names(0).width = 300 + backdrop_names(1).description = "poster" + backdrop_names(1).size = "w780" + backdrop_names(1).width = 780 + backdrop_names(2).description = "w1280" + backdrop_names(2).size = "w1280" + backdrop_names(2).width = 1280 + backdrop_names(3).description = "original" + backdrop_names(3).size = "original" + backdrop_names(3).width = 0 + End Sub + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim images As V3.TmdbMovieImages + Dim aW, aH As Integer + + If bwTMDB.CancellationPending Then Return Nothing + Try + images = _TMDBApi.GetMovieImages(CInt(imdbID), _MySettings.TMDBLanguage) + If sType = "poster" Then + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.posters) OrElse images.posters.Count = 0 Then + Return alPosters + End If + End If + Else + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + images = _TMDBApiE.GetMovieImages(CInt(imdbID)) + If IsNothing(images.backdrops) OrElse images.backdrops.Count = 0 Then + Return alPosters + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If sType = "poster" Then + For Each tmdbI As V3.Poster In images.posters + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In poster_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + ElseIf sType = "backdrop" Then + For Each tmdbI As V3.Backdrop In images.backdrops + If bwTMDB.CancellationPending Then Return Nothing + For Each aSize In backdrop_names + Select Case aSize.size + Case "original" + aW = tmdbI.width + aH = tmdbI.width + Case Else + aW = aSize.width + aH = CInt(aW / tmdbI.aspect_ratio) + End Select + Dim tmpPoster As New MediaContainers.Image With {.URL = _TMDBConf.images.base_url & aSize.size & tmdbI.file_path, .Description = aSize.description, .Width = CStr(aW), .Height = CStr(aH), .ParentID = tmdbI.file_path} + alPosters.Add(tmpPoster) + Next + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As List(Of String) + Dim trailers As V3.TmdbMovieTrailers + Dim YT As New List(Of String) + + Try + If bwTMDB.CancellationPending Then Return Nothing + trailers = _TMDBApi.GetMovieTrailers(CInt(imdbID), _MySettings.TMDBLanguage) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + trailers = _TMDBApiE.GetMovieTrailers(CInt(imdbID)) + If IsNothing(trailers.youtube) OrElse trailers.youtube.Count = 0 Then + Return Nothing + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + 'If bwTMDB.WorkerReportsProgress Then + ' bwTMDB.ReportProgress(2) + 'End If + + If trailers.youtube.Count > 0 Then + For Each trailer In trailers.youtube + YT.Add(String.Format("http://www.youtube.com/watch?v={0}{1})", trailer.source, CStr(IIf(trailer.size = "HD", "&hd=1", "")))) + Next + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return YT + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + + Private Structure v3Size + +#Region "Fields" + + Dim size As String + Dim description As String + Dim width As Integer + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Scraper/clsScrapeTMDB_old.vb b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeTMDB_old.vb new file mode 100644 index 0000000..c5bca0a --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeTMDB_old.vb @@ -0,0 +1,244 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI + +Namespace TMDB_old + + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + + Private Const APIKey As String = "b1ecff8c76278262b27de1569f57f6bd" + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB...<OpenSearchDescription>...<movies>.Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<poster>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<backdrop>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + sHTTP = Nothing + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As String + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + Dim tLang As String + + tLang = AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en") + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/{0}/tt{1}", APIKey, imdbID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + Dim tmdbNode = From xNode In xmlTMDB.Elements + + If tmdbNode.Count > 0 Then + If Not tmdbNode(0).Value = "Your query didn't return any results." Then + Dim movieID As String = xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<id>.Value + Dim i As Integer + + + For i = 0 To 1 Step 1 + sHTTP = New HTTP + ApiXML = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/{0}/xml/{1}/{2}", tLang, APIKey, movieID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + Dim Trailers = From tNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie> Select tNode.<trailer> + If Trailers.Count > 0 AndAlso Not String.IsNullOrEmpty(Trailers(0).Value) Then + If Trailers(0).Value.ToLower.IndexOf("youtube.com") > 0 Then + Return Trailers(0).Value + i += 1 + End If + Else + tLang = "en" + End If + End If + Next + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return String.Empty + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Scraper/clsScrapeTMDBg.vb b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeTMDBg.vb new file mode 100644 index 0000000..86f6083 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeTMDBg.vb @@ -0,0 +1,723 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Globalization +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports RestSharp +Imports WatTmdb + + +Namespace TMDBg + + Public Class MovieSearchResults + +#Region "Fields" + + Private _Matches As New List(Of MediaContainers.Movie) + +#End Region 'Fields + +#Region "Properties" + + Public Property Matches() As List(Of MediaContainers.Movie) + Get + Return _Matches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _Matches = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class Scraper + +#Region "Fields" + + 'Public IMDBURL As String + 'Private _TMDBId As String + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + + Friend WithEvents bwTMDBg As New System.ComponentModel.BackgroundWorker + + Private _sPoster As String + +#End Region 'Fields + +#Region "Properties" + Public ReadOnly Property TMDBConf() As V3.TmdbConfiguration + Get + Return _TMDBConf + End Get + End Property +#End Region + +#Region "Enumerations" + + Private Enum SearchType + Movies = 0 + Details = 1 + SearchDetails = 2 + End Enum + +#End Region 'Enumerations + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + + Public Event SearchResultsDownloaded(ByVal mResults As TMDBg.MovieSearchResults) + +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + End Sub + + Public Sub CancelAsync() + If bwTMDBg.IsBusy Then bwTMDBg.CancelAsync() + + While bwTMDBg.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetMovieID(ByRef DBMovie As Structures.DBMovie) + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + + If bwTMDBg.CancellationPending Then Return + + Movie = _TMDBApi.GetMovieByIMDB(DBMovie.Movie.ID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(DBMovie.Movie.ID) + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return + End If + + DBMovie.Movie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End Sub + + Public Function GetMovieInfo(ByVal strID As String, ByRef IMDBMovie As MediaContainers.Movie, ByVal FullCrew As Boolean, ByVal FullCast As Boolean, ByVal GetPoster As Boolean, ByVal Options As Structures.ScrapeOptions, ByVal IsSearch As Boolean) As Boolean + Try + Dim Movie As WatTmdb.V3.TmdbMovie + Dim MovieE As WatTmdb.V3.TmdbMovie + Dim tStr As String + + If bwTMDBg.CancellationPending Then Return Nothing + + If Strings.Left(strID.ToLower(), 2) = "tt" Then + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieByIMDB(strID) + Else + Movie = _TMDBApi.GetMovieInfo(CInt(strID), _MySettings.TMDBLanguage) + MovieE = _TMDBApiE.GetMovieInfo(CInt(strID)) + End If + If IsNothing(Movie) AndAlso Not _MySettings.FallBackEng Then + Return False + End If + + IMDBMovie.ID = CStr(IIf(String.IsNullOrEmpty(Movie.imdb_id) AndAlso _MySettings.FallBackEng, MovieE.imdb_id, Movie.imdb_id)) + IMDBMovie.TMDBID = CStr(IIf(String.IsNullOrEmpty(Movie.id.ToString) AndAlso _MySettings.FallBackEng, MovieE.id.ToString, Movie.id.ToString)) + + If bwTMDBg.CancellationPending Or IsNothing(Movie) Then Return Nothing + + Dim Keywords As WatTmdb.V3.TmdbMovieKeywords + Keywords = _TMDBApi.GetMovieKeywords(Movie.id) + If Not IsNothing(Keywords) AndAlso Not IsNothing(Keywords.keywords) Then + If Keywords.keywords.Count <> 0 AndAlso _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Keywords = _TMDBApiE.GetMovieKeywords(Movie.id) + End If + End If + + ' to be added the tags structure + '' <movie> + '' ... + '' <tag>Name of the tag</tag> + '' ... + '' </movie> + If Options.bTitle Then + IMDBMovie.OriginalTitle = CStr(IIf(String.IsNullOrEmpty(Movie.original_title) AndAlso _MySettings.FallBackEng, MovieE.original_title, Movie.original_title)) + If String.IsNullOrEmpty(IMDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + IMDBMovie.Title = CStr(IIf(String.IsNullOrEmpty(Movie.title) AndAlso _MySettings.FallBackEng, MovieE.title, Movie.title)) + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If GetPoster Then + ' I will add original always. to be updated if size, TMDBConf.images.poster_sizes(0) & + Dim Images As WatTmdb.V3.TmdbMovieImages + Images = _TMDBApi.GetMovieImages(Movie.id, _MySettings.TMDBLanguage) + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If (Images.posters.Count = 0) AndAlso _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Images = _TMDBApiE.GetMovieImages(Movie.id) + End If + End If + If Not IsNothing(Images) AndAlso Not IsNothing(Images.posters) Then + If Images.posters.Count > 0 Then + _sPoster = _TMDBConf.images.base_url & "w92" & Images.posters(0).file_path + Else + _sPoster = "" + End If + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bYear Then IMDBMovie.Year = Left(CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)), 4) + + Dim Releases As WatTmdb.V3.TmdbMovieReleases = Nothing + If Options.bMPAA Then + IMDBMovie.MPAA = "" + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each Country In Releases.countries + If Country.iso_3166_1.ToUpper = CStr(IIf(Master.eSettings.CertificationLang = "", "US", Master.eSettings.CertificationLang)) Then + IMDBMovie.MPAA = Country.certification + Exit For + End If + Next + End If + IMDBMovie.Certification = IMDBMovie.MPAA + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bRelease Then + IMDBMovie.ReleaseDate = CStr(IIf(String.IsNullOrEmpty(Movie.release_date) AndAlso _MySettings.FallBackEng, MovieE.release_date, Movie.release_date)) + End If + + If Options.bRating AndAlso (String.IsNullOrEmpty(IMDBMovie.Rating) OrElse Not Master.eSettings.LockRating) Then + IMDBMovie.Rating = CStr(IIf(IsNothing(Movie.vote_average) AndAlso Movie.vote_average = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_average, Movie.vote_average)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'trailer + If Options.bTrailer AndAlso (String.IsNullOrEmpty(IMDBMovie.Trailer) OrElse Not Master.eSettings.LockTrailer) Then + Dim Trailers As WatTmdb.V3.TmdbMovieTrailers + Trailers = _TMDBApi.GetMovieTrailers(Movie.id) + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If (Trailers.youtube.Count = 0) AndAlso _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Trailers = _TMDBApiE.GetMovieTrailers(Movie.id) + End If + End If + + IMDBMovie.Trailer = "" + If Not IsNothing(Trailers) AndAlso Not IsNothing(Trailers.youtube) Then + If Trailers.youtube.Count > 0 Then + IMDBMovie.Trailer = "http://www.youtube.com/watch?hd=1&v=" & Trailers.youtube(0).source + End If + End If + + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bVotes Then + IMDBMovie.Votes = CStr(IIf(IsNothing(Movie.vote_count) AndAlso Movie.vote_count = 0 AndAlso _MySettings.FallBackEng, MovieE.vote_count.ToString(), Movie.vote_count.ToString())) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Dim aCast As WatTmdb.V3.TmdbMovieCast = Nothing + If Options.bCast Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.cast.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + + Dim Cast As New List(Of MediaContainers.Person) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + For Each aAc As WatTmdb.V3.Cast In aCast.cast + Dim aPer As New MediaContainers.Person + aPer.Name = aAc.name + aPer.Role = aAc.character + ' to be added / dialog to choose the size of the images + aPer.Thumb = _TMDBConf.images.base_url & "original" & aAc.profile_path + Cast.Add(aPer) + Next + End If + IMDBMovie.Actors = Cast + End If + + If Options.bTagline AndAlso (String.IsNullOrEmpty(IMDBMovie.Tagline) OrElse Not Master.eSettings.LockTagline) Then + IMDBMovie.Tagline = CStr(IIf(String.IsNullOrEmpty(IMDBMovie.Tagline) AndAlso _MySettings.FallBackEng, MovieE.tagline, Movie.tagline)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get countries of the movie + If Options.bCountry Then + If IsNothing(Releases) Then + Releases = _TMDBApi.GetMovieReleases(Movie.id) + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + If (Releases.countries.Count = 0) AndAlso _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + Releases = _TMDBApiE.GetMovieReleases(Movie.id) + End If + End If + End If + IMDBMovie.Countries.Clear() + If Not IsNothing(Releases) AndAlso Not IsNothing(Releases.countries) Then + For Each aCo As WatTmdb.V3.ReleaseCountry In Releases.countries + IMDBMovie.Countries.Add(aCo.iso_3166_1) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get genres of the movie + If Options.bGenre AndAlso (String.IsNullOrEmpty(IMDBMovie.Genre) OrElse Not Master.eSettings.LockGenre) Then + IMDBMovie.Genres.Clear() + Dim tGen As System.Collections.Generic.List(Of WatTmdb.V3.MovieGenre) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tGen = CType(IIf(Movie.genres.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.genres, Movie.genres), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + Else + tGen = CType(IIf(_MySettings.FallBackEng, MovieE.genres, Nothing), Global.System.Collections.Generic.List(Of Global.WatTmdb.V3.MovieGenre)) + End If + + + If Not IsNothing(tGen) Then + For Each aGen As WatTmdb.V3.MovieGenre In tGen + IMDBMovie.Genres.Add(aGen.name) + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bOutline AndAlso (String.IsNullOrEmpty(IMDBMovie.Outline) OrElse Not Master.eSettings.LockOutline) Then + IMDBMovie.Outline = CStr(IIf(String.IsNullOrEmpty(Movie.overview) AndAlso _MySettings.FallBackEng, MovieE.overview, Movie.overview)) + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + If Options.bPlot AndAlso (String.IsNullOrEmpty(IMDBMovie.Plot) OrElse Not Master.eSettings.LockPlot) Then + If Master.eSettings.OutlineForPlot AndAlso String.IsNullOrEmpty(IMDBMovie.Plot) AndAlso Not String.IsNullOrEmpty(IMDBMovie.Outline) Then + IMDBMovie.Plot = IMDBMovie.Outline + Else + IMDBMovie.Plot = "" + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get the movie duration + If Options.bRuntime Then + IMDBMovie.Runtime = CStr(IIf(IsNothing(Movie.runtime) AndAlso Movie.runtime = 0 AndAlso _MySettings.FallBackEng, MovieE.runtime.ToString(), Movie.runtime.ToString())) + End If + + 'Get Production Studio + If Options.bStudio AndAlso (String.IsNullOrEmpty(IMDBMovie.Studio) OrElse Not Master.eSettings.LockStudio) Then + tStr = "" + Dim tPC As System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany) + If Not IsNothing(Movie) AndAlso Not IsNothing(Movie.genres) Then + tPC = CType(IIf(Movie.production_companies.Count = 0 AndAlso _MySettings.FallBackEng, MovieE.production_companies, Movie.production_companies), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + Else + tPC = CType(IIf(_MySettings.FallBackEng, MovieE.production_companies, Nothing), Global.System.Collections.Generic.List(Of WatTmdb.V3.ProductionCompany)) + End If + + If Not IsNothing(tPC) Then + For Each aPro As WatTmdb.V3.ProductionCompany In tPC + tStr = tStr & " / " & aPro.name + Next + End If + If Len(tStr) > 3 Then + tStr = Trim(Right(tStr, Len(tStr) - 3)) + End If + IMDBMovie.Studio = tStr + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + 'Get All Other Info + If FullCrew Or Options.bWriters Or Options.bDirector Then + If IsNothing(aCast) Then + aCast = _TMDBApi.GetMovieCast(Movie.id) + If Not IsNothing(aCast) AndAlso Not IsNothing(aCast.cast) Then + If (aCast.crew.Count = 0) AndAlso _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + Else + If _MySettings.FallBackEng Then + aCast = _TMDBApiE.GetMovieCast(Movie.id) + End If + End If + End If + IMDBMovie.Credits.Clear() + IMDBMovie.Directors.Clear() + If Not IsNothing(aCast.crew) Then + For Each aAc As WatTmdb.V3.Crew In aCast.crew + If FullCrew Then + IMDBMovie.Credits.Add(aAc.name) + ElseIf Options.bWriters Then + If aAc.department = "Writing" AndAlso aAc.job = "Writer" Then + IMDBMovie.Credits.Add(aAc.name) + End If + End If + If Options.bDirector Then + If aAc.job = "Director" Then + IMDBMovie.Directors.Add(aAc.name) + End If + End If + Next + End If + End If + + If bwTMDBg.CancellationPending Then Return Nothing + + Return True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Function GetMovieStudios(ByVal strID As String) As List(Of String) + Dim alStudio As New List(Of String) + Dim Movie As WatTmdb.V3.TmdbMovie + Movie = _TMDBApi.GetMovieByIMDB(strID, _MySettings.TMDBLanguage) + If Movie.production_companies.Count = 0 And _MySettings.FallBackEng Then + Movie = _TMDBApi.GetMovieByIMDB(strID, "en") + End If + For Each aComp In Movie.production_companies + alStudio.Add(aComp.name) + Next + + Return alStudio + + End Function + + Public Function GetSearchMovieInfo(ByVal sMovieName As String, ByRef dbMovie As Structures.DBMovie, ByVal iType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As MediaContainers.Movie + Dim r As MovieSearchResults = SearchMovie(sMovieName) + Dim b As Boolean = False + Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie + + Try + Select Case iType + Case Enums.ScrapeType.FullAsk, Enums.ScrapeType.UpdateAsk, Enums.ScrapeType.NewAsk, Enums.ScrapeType.MarkAsk, Enums.ScrapeType.FilterAsk + + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + Master.tmpMovie.Clear() + Using dIMDB As New dlgTMDBSearchResults(_MySettings, Me) + + If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + b = False + Else + b = GetMovieInfo(Master.tmpMovie.ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + Else + b = False + End If + End Using + End If + Case Enums.ScrapeType.FullAuto, Enums.ScrapeType.UpdateAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.SingleScrape, Enums.ScrapeType.FilterAuto + Dim exactHaveYear As Integer = FindYear(dbMovie.Filename, r.Matches) + If r.Matches.Count = 1 Then 'redirected to imdb info page + b = GetMovieInfo(r.Matches.Item(0).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + b = GetMovieInfo(r.Matches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).ID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + End Select + + If b Then + Return imdbMovie + Else + Return New MediaContainers.Movie + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New MediaContainers.Movie + End Try + End Function + + Private Function FindYear(ByVal tmpname As String, ByVal lst As List(Of MediaContainers.Movie)) As Integer + Dim tmpyear As String = "" + Dim i As Integer + Dim ret As Integer = -1 + tmpname = Path.GetFileNameWithoutExtension(tmpname) + tmpname = tmpname.Replace(".", " ").Trim.Replace("(", " ").Replace(")", "").Trim + i = tmpname.LastIndexOf(" ") + If i >= 0 Then + tmpyear = tmpname.Substring(i + 1, tmpname.Length - i - 1) + If IsNumeric(tmpyear) AndAlso Convert.ToInt32(tmpyear) > 1950 Then 'let's assume there are no movies older then 1950 + For c = 0 To lst.Count - 1 + If lst(c).Year = tmpyear Then + ret = c + Exit For + End If + Next + End If + End If + Return ret + End Function + + Public Sub GetSearchMovieInfoAsync(ByVal imdbID As String, ByVal IMDBMovie As MediaContainers.Movie, ByVal Options As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.SearchDetails, _ + .Parameter = imdbID, .IMDBMovie = IMDBMovie, .Options = Options}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + + Public Sub SearchMovieAsync(ByVal sMovie As String, ByVal filterOptions As Structures.ScrapeOptions) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + If Not bwTMDBg.IsBusy Then + bwTMDBg.WorkerReportsProgress = False + bwTMDBg.WorkerSupportsCancellation = True + bwTMDBg.RunWorkerAsync(New Arguments With {.Search = SearchType.Movies, _ + .Parameter = sMovie, .Options = filterOptions}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBg_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBg.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Try + Select Case Args.Search + Case SearchType.Movies + Dim r As MovieSearchResults = SearchMovie(Args.Parameter) + e.Result = New Results With {.ResultType = SearchType.Movies, .Result = r} + Case SearchType.SearchDetails + Dim s As Boolean = GetMovieInfo(Args.Parameter, Args.IMDBMovie, False, False, True, Args.Options, True) + e.Result = New Results With {.ResultType = SearchType.SearchDetails, .Success = s} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub BW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBg.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.ResultType + Case SearchType.Movies + RaiseEvent SearchResultsDownloaded(DirectCast(Res.Result, MovieSearchResults)) + Case SearchType.SearchDetails + Dim movieInfo As MovieSearchResults = DirectCast(Res.Result, MovieSearchResults) + RaiseEvent SearchMovieInfoDownloaded(_sPoster, Res.Success) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + 'Private Function GetForcedTitle(ByVal strID As String, ByVal oTitle As String) As String + ' Dim fTitle As String = oTitle + ' Dim Movie As WatTmdb.V3.TmdbMovie + + ' Try + ' '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + ' If Left(strID.ToLower(), 4) = "tt" Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), _MySettings.TMDBLanguage) + ' If IsNothing(Movie) And _MySettings.FallBackEng Then + ' Movie = _TMDBApi.GetMovieInfo(CInt(Right(strID, Len(strID) - 4)), "en") + ' End If + ' Else + ' Movie = _TMDBApi.GetMovieByIMDB(strID) + ' End If + + ' fTitle = Movie.title + + ' Return fTitle + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' Return fTitle + ' End Try + 'End Function + + Private Function SearchMovie(ByVal sMovie As String) As MovieSearchResults + Try + Dim R As New MovieSearchResults + Dim Page As Integer = 1 + Dim Movies As WatTmdb.V3.TmdbMovieSearch + Dim TotP As Integer + Dim aE As Boolean + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + If Movies.total_results = 0 And _MySettings.FallBackEng Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + aE = True + End If + If Movies.total_results > 0 Then + Dim t1 As String + Dim t2 As String + Dim t3 As String + TotP = Movies.total_pages + While Page <= TotP And Page <= 3 + For Each aMovie In Movies.results + Dim aMI As WatTmdb.V3.TmdbMovie + aMI = _TMDBApi.GetMovieInfo(aMovie.id) + If IsNothing(aMI) Then + aMI = _TMDBApiE.GetMovieInfo(aMovie.id) + End If + If IsNothing(aMI.imdb_id) Then + t1 = "" + Else + t1 = aMI.imdb_id.ToString + End If + t2 = CStr(IIf(String.IsNullOrEmpty(aMovie.title), "", aMovie.title)) + t3 = Left(CStr(IIf(String.IsNullOrEmpty(aMovie.release_date), "", aMovie.release_date)), 4) + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(t1, t2, t3, 0) + lNewMovie.TMDBID = aMI.id.ToString + R.Matches.Add(lNewMovie) + Next + Page = Page + 1 + If aE Then + Movies = _TMDBApiE.SearchMovie(sMovie, Page) + Else + Movies = _TMDBApi.SearchMovie(sMovie, Page, _MySettings.TMDBLanguage) + End If + + End While + End If + + Return R + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Nothing + End Try + End Function + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim FullCast As Boolean + Dim FullCrew As Boolean + Dim IMDBMovie As MediaContainers.Movie + Dim Options As Structures.ScrapeOptions + Dim Parameter As String + Dim Search As SearchType + 'Dim TMDBConf As V3.TmdbConfiguration + 'Dim TMDBApi As V3.Tmdb + 'Dim FallBackEng As Boolean + 'Dim TMDBLang As String +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultType As SearchType + Dim Success As Boolean + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TMDB.Poster/Scraper/clsScrapeTrailers.vb b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeTrailers.vb new file mode 100644 index 0000000..72ce5f8 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeTrailers.vb @@ -0,0 +1,265 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System +Imports System.IO +Imports System.Net +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI +Imports WatTmdb + +Public Class Trailers + +#Region "Fields" + + Private WebPage As New HTTP + Private _ImdbID As String = String.Empty + Private _ImdbTrailerPage As String = String.Empty + Private _TrailerList As New List(Of String) + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + Private _MySettings As EmberTMDBScraperModule.sMySettings + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + Me.Clear() + _TMDBConf = tTMDBConf + _TMDBConfE = tTMDBConfE + _TMDBApi = tTMDBApi + _TMDBApiE = tTMDBApiE + _MySettings = tMySettings + AddHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + Me.WebPage.Cancel() + End Sub + + Public Sub Clear() + Me._TrailerList.Clear() + Me._ImdbID = String.Empty + Me._ImdbTrailerPage = String.Empty + End Sub + + Public Sub DeleteTrailers(ByVal sPath As String, ByVal NewTrailer As String) + Dim parPath As String = Directory.GetParent(sPath).FullName + Dim tmpName As String = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(sPath))) + Dim tmpNameNoStack As String = Path.Combine(parPath, Path.GetFileNameWithoutExtension(sPath)) + For Each t As String In Master.eSettings.ValidExts + If File.Exists(String.Concat(tmpName, "-trailer", t)) AndAlso Not String.Concat(tmpName, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpName, "[trailer]", t)) AndAlso Not String.Concat(tmpName, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "[trailer]", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "-trailer", t)) AndAlso Not String.Concat(tmpNameNoStack, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) + End If + Next + End Sub + + Public Sub DownloadProgressUpdated(ByVal iPercent As Integer) + RaiseEvent ProgressUpdated(iPercent) + End Sub + + Public Function DownloadSingleTrailer(ByVal sPath As String, ByVal ImdbID As String, ByVal isSingle As Boolean, ByVal currNfoTrailer As String) As String + Dim tURL As String = String.Empty + Try + Me._TrailerList.Clear() + + If Not Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, True) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + + Dim tLink As String = String.Empty + If Regex.IsMatch(Me._TrailerList.Item(0).ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Dim YT As New YouTube.Scraper + YT.GetVideoLinks(Me._TrailerList.Item(0).ToString) + If YT.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + tLink = YT.VideoLinks(Master.eSettings.PreferredTrailerQuality).URL + Else + Select Case Master.eSettings.PreferredTrailerQuality + Case Enums.TrailerQuality.HD1080p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720p) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720p).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD1080pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720pVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720pVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HD720p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD720pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HQFLV + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HQVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.SQMP4 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.SQFLV + tLink = String.Empty + Case Enums.TrailerQuality.SQVP8 + tLink = String.Empty + End Select + End If + Else + tLink = Me._TrailerList.Item(0).ToString + End If + + If Not String.IsNullOrEmpty(tLink) Then + tURL = WebPage.DownloadFile(tLink, sPath, False, "trailer") + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + End If + ElseIf Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, False) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + tURL = Me._TrailerList.Item(0).ToString + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return tURL + End Function + + Public Function DownloadTrailer(ByVal sPath As String, ByVal sURL As String) As String + Dim tURL As String = String.Empty + If Not String.IsNullOrEmpty(sURL) Then + tURL = WebPage.DownloadFile(sURL, sPath, True, "trailer") + + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + Return tURL + End Function + + Public Function GetTrailers(ByVal ImdbID As String, Optional ByVal BreakAfterFound As Boolean = True) As List(Of String) + Me._ImdbID = ImdbID + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", False) Then + Me.GetTMDBTrailer() + End If + + Return Me._TrailerList + End Function + + Public Function IsAllowedToDownload(ByVal sPath As String, ByVal isDL As Boolean, ByVal currNfoTrailer As String, Optional ByVal isSS As Boolean = False) As Boolean + Dim fScanner As New Scanner + + If isDL Then + If String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) OrElse Master.eSettings.OverwriteTrailer Then + Return True + Else + If isSS AndAlso String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) Then + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + Else + Return False + End If + End If + Else + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + End If + End Function + + Private Sub GetTMDBTrailer() + Dim TMDB As New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim YT As List(Of String) + + YT = TMDB.GetTrailers(_ImdbID) + + If Not YT.Count = 0 Then + For Each ast In YT + Me._TrailerList.Add(ast) + Next + End If + + TMDB = Nothing + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Scraper/clsScrapeYouTube.vb b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeYouTube.vb new file mode 100644 index 0000000..51ed7c4 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/clsScrapeYouTube.vb @@ -0,0 +1,336 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace YouTube + + Public Class Scraper + +#Region "Fields" + + Friend WithEvents bwYT As New System.ComponentModel.BackgroundWorker + + Private _VideoLinks As VideoLinkItemCollection + +#End Region 'Fields + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event VideoLinksRetrieved(ByVal bSuccess As Boolean) + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property VideoLinks() As VideoLinkItemCollection + Get + If _VideoLinks Is Nothing Then + _VideoLinks = New VideoLinkItemCollection + End If + Return _VideoLinks + End Get + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() + If bwYT.IsBusy Then bwYT.CancelAsync() + + While bwYT.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetVideoLinks(ByVal url As String) + Try + _VideoLinks = ParseYTFormats(url, False) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub GetVideoLinksAsync(ByVal url As String) + Try + If Not bwYT.IsBusy Then + _VideoLinks = Nothing + bwYT.WorkerSupportsCancellation = True + bwYT.RunWorkerAsync(url) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwYT.DoWork + Dim Url As String = DirectCast(e.Argument, String) + + Try + e.Result = ParseYTFormats(Url, True) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwYT.RunWorkerCompleted + Try + If e.Cancelled Then + 'user cancelled + RaiseEvent VideoLinksRetrieved(False) + ElseIf e.Error IsNot Nothing Then + 'exception occurred + RaiseEvent Exception(e.Error) + Else + 'all good + If e.Result IsNot Nothing Then + _VideoLinks = DirectCast(e.Result, VideoLinkItemCollection) + RaiseEvent VideoLinksRetrieved(True) + Else + RaiseEvent VideoLinksRetrieved(False) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetVideoTitle(ByVal HTML As String) As String + Dim result As String = "" + 'Dim KeyPattern As String = "'VIDEO_TITLE':\s*'([^']*?)'" + Dim KeyPattern As String = "meta name=\""title\"" content=\s*\""([^']*?)\""" + 'meta name="title" content= + If Regex.IsMatch(HTML, KeyPattern) Then + result = Regex.Match(HTML, KeyPattern).Groups(1).Value + End If + + Return result + End Function + + Private Function ParseYTFormats(ByVal url As String, ByVal doProgress As Boolean) As VideoLinkItemCollection + Dim DownloadLinks As New VideoLinkItemCollection + Dim sHTTP As New HTTP + + Try + If bwYT.CancellationPending Then Return DownloadLinks + + Dim Html As String = sHTTP.DownloadData(url) + If Html.ToLower.Contains("page not found") Then + Html = String.Empty + End If + + If String.IsNullOrEmpty(Html.Trim) Then Return DownloadLinks + If bwYT.CancellationPending Then Return DownloadLinks + + Dim VideoTitle As String = GetVideoTitle(Html) + VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") + + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) + If fmtMatch.Success Then + Dim FormatMap As String = fmtMatch.Groups(1).Value + Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") + + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) + Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) + + For i As Integer = 0 To FormatArray.Length - 1 + Dim yturl As String = rurl.Match(FormatArray(i)).Groups(1).Value + Dim ytitag As String = ritag.Match(FormatArray(i)).Groups(1).Value + Dim ytsig As String = rsig.Match(FormatArray(i)).Groups(1).Value + + 'Console.WriteLine("Trailer Itag: {0}", ytitag) + 'Console.WriteLine("Trailer Url: {0}", yturl) + 'Console.WriteLine("Trailer Sig: {0}", ytsig) + + Dim Link As New VideoLinkItem + Select Case ytitag + ' ********************************************************************** + ' see all itags http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs + ' ********************************************************************** + Case "5" + Link.Description = "240p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "6" + Link.Description = "270p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "13" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "17" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "18" + Link.Description = "360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQMP4 + Case "22" + Link.Description = "720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD720p + Case "34" + Link.Description = "360p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQFLV + Case "35" + Link.Description = "480p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HQFLV + Case "36" + Link.Description = "240p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "37" + Link.Description = "1080p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD1080p + Case "38" + Link.Description = "1536p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "43" + Link.Description = "360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.SQVP8 + Case "44" + Link.Description = "480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HQVP8 + Case "45" + Link.Description = "720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD720pVP8 + Case "46" + Link.Description = "1080p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD1080pVP8 + Case "82" + Link.Description = "3D 360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "83" + Link.Description = "3D 480p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "84" + Link.Description = "3D 720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "85" + Link.Description = "3D 520p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "100" + Link.Description = "3D 360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "101" + Link.Description = "3D 480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "102" + Link.Description = "3D 720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "120" + Link.Description = "720p LiveStream (FLV, AVC)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case Else + Link.Description = "Other" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + 'Continue For + End Select + + Link.URL = Web.HttpUtility.UrlDecode(Web.HttpUtility.UrlDecode(yturl)) & "&signature=" & ytsig & "&title=" & Web.HttpUtility.UrlEncode(VideoTitle) + Link.URL = Link.URL.Replace("sig=", "signature=") ' sig= returns HTTP 403 //oldstyle, keep it + 'Console.WriteLine("Trailer Url decoded: {0}", Link.URL) + + If bwYT.CancellationPending Then Return DownloadLinks + + If Not String.IsNullOrEmpty(Link.URL) AndAlso sHTTP.IsValidURL(Link.URL) Then + DownloadLinks.Add(Link) + End If + + If bwYT.CancellationPending Then Return DownloadLinks + + Next + + End If + Return DownloadLinks + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New VideoLinkItemCollection + Finally + sHTTP = Nothing + End Try + End Function + +#End Region 'Methods + + End Class + + Public Class VideoLinkItem + +#Region "Fields" + + Private _Description As String + Private _FormatQuality As Enums.TrailerQuality + Private _URL As String + +#End Region 'Fields + +#Region "Properties" + + Public Property Description() As String + Get + Return _Description + End Get + Set(ByVal value As String) + _Description = value + End Set + End Property + + Public Property URL() As String + Get + Return _URL + End Get + Set(ByVal value As String) + _URL = value + End Set + End Property + + Friend Property FormatQuality() As Enums.TrailerQuality + Get + Return _FormatQuality + End Get + Set(ByVal value As Enums.TrailerQuality) + _FormatQuality = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class VideoLinkItemCollection + Inherits Generic.SortedList(Of Enums.TrailerQuality, VideoLinkItem) + +#Region "Methods" + + Public Shadows Sub Add(ByVal Link As VideoLinkItem) + If Not MyBase.ContainsKey(Link.FormatQuality) Then MyBase.Add(Link.FormatQuality, Link) + End Sub + +#End Region 'Methods + + End Class + +End Namespace + diff --git a/Addons/scraper.TMDB.Poster/Scraper/dlgImgSelect.Designer.vb b/Addons/scraper.TMDB.Poster/Scraper/dlgImgSelect.Designer.vb new file mode 100644 index 0000000..3c9254c --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/dlgImgSelect.Designer.vb @@ -0,0 +1,569 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgImgSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgImgSelect)) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.pnlSize = New System.Windows.Forms.Panel() + Me.btnPreview = New System.Windows.Forms.Button() + Me.rbSmall = New System.Windows.Forms.RadioButton() + Me.rbMedium = New System.Windows.Forms.RadioButton() + Me.rbLarge = New System.Windows.Forms.RadioButton() + Me.rbXLarge = New System.Windows.Forms.RadioButton() + Me.pnlFanart = New System.Windows.Forms.Panel() + Me.chkThumb = New System.Windows.Forms.CheckBox() + Me.chkMid = New System.Windows.Forms.CheckBox() + Me.chkOriginal = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlDLStatus = New System.Windows.Forms.Panel() + Me.pnlIMDB = New System.Windows.Forms.Panel() + Me.lblDL6Status = New System.Windows.Forms.Label() + Me.lblDL6 = New System.Windows.Forms.Label() + Me.pbDL6 = New System.Windows.Forms.ProgressBar() + Me.pnlSinglePic = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlFANARTTV = New System.Windows.Forms.Panel() + Me.lblDL3Status = New System.Windows.Forms.Label() + Me.lblDL3 = New System.Windows.Forms.Label() + Me.pbDL3 = New System.Windows.Forms.ProgressBar() + Me.pnlMDB = New System.Windows.Forms.Panel() + Me.lblDL5Status = New System.Windows.Forms.Label() + Me.lblDL5 = New System.Windows.Forms.Label() + Me.pbDL5 = New System.Windows.Forms.ProgressBar() + Me.pnlIMPA = New System.Windows.Forms.Panel() + Me.lblDL4Status = New System.Windows.Forms.Label() + Me.lblDL4 = New System.Windows.Forms.Label() + Me.pbDL4 = New System.Windows.Forms.ProgressBar() + Me.pnlTMDB = New System.Windows.Forms.Panel() + Me.lblDL2Status = New System.Windows.Forms.Label() + Me.lblDL2 = New System.Windows.Forms.Label() + Me.pbDL2 = New System.Windows.Forms.ProgressBar() + Me.TableLayoutPanel1.SuspendLayout() + Me.pnlBottomMain.SuspendLayout() + Me.pnlSize.SuspendLayout() + Me.pnlFanart.SuspendLayout() + Me.pnlDLStatus.SuspendLayout() + Me.pnlIMDB.SuspendLayout() + Me.pnlSinglePic.SuspendLayout() + Me.pnlFANARTTV.SuspendLayout() + Me.pnlMDB.SuspendLayout() + Me.pnlIMPA.SuspendLayout() + Me.pnlTMDB.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(687, 11) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(836, 495) + Me.pnlBG.TabIndex = 1 + Me.pnlBG.Visible = False + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.pnlSize) + Me.pnlBottomMain.Controls.Add(Me.pnlFanart) + Me.pnlBottomMain.Controls.Add(Me.lblInfo) + Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) + Me.pnlBottomMain.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 495) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(836, 50) + Me.pnlBottomMain.TabIndex = 0 + ' + 'pnlSize + ' + Me.pnlSize.BackColor = System.Drawing.Color.White + Me.pnlSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.pnlSize.Controls.Add(Me.btnPreview) + Me.pnlSize.Controls.Add(Me.rbSmall) + Me.pnlSize.Controls.Add(Me.rbMedium) + Me.pnlSize.Controls.Add(Me.rbLarge) + Me.pnlSize.Controls.Add(Me.rbXLarge) + Me.pnlSize.Location = New System.Drawing.Point(8, 8) + Me.pnlSize.Name = "pnlSize" + Me.pnlSize.Size = New System.Drawing.Size(673, 34) + Me.pnlSize.TabIndex = 4 + Me.pnlSize.Visible = False + ' + 'btnPreview + ' + Me.btnPreview.Enabled = False + Me.btnPreview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnPreview.Image = CType(resources.GetObject("btnPreview.Image"), System.Drawing.Image) + Me.btnPreview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPreview.Location = New System.Drawing.Point(593, 5) + Me.btnPreview.Name = "btnPreview" + Me.btnPreview.Size = New System.Drawing.Size(75, 23) + Me.btnPreview.TabIndex = 6 + Me.btnPreview.Text = "Preview" + Me.btnPreview.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPreview.UseVisualStyleBackColor = True + ' + 'rbSmall + ' + Me.rbSmall.AutoSize = True + Me.rbSmall.Enabled = False + Me.rbSmall.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbSmall.Location = New System.Drawing.Point(475, 8) + Me.rbSmall.Name = "rbSmall" + Me.rbSmall.Size = New System.Drawing.Size(53, 17) + Me.rbSmall.TabIndex = 5 + Me.rbSmall.TabStop = True + Me.rbSmall.Text = "Small" + Me.rbSmall.UseVisualStyleBackColor = True + ' + 'rbMedium + ' + Me.rbMedium.AutoSize = True + Me.rbMedium.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbMedium.Location = New System.Drawing.Point(201, 8) + Me.rbMedium.Name = "rbMedium" + Me.rbMedium.Size = New System.Drawing.Size(69, 17) + Me.rbMedium.TabIndex = 4 + Me.rbMedium.TabStop = True + Me.rbMedium.Text = "Medium" + Me.rbMedium.UseVisualStyleBackColor = True + ' + 'rbLarge + ' + Me.rbLarge.AutoSize = True + Me.rbLarge.Enabled = False + Me.rbLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbLarge.Location = New System.Drawing.Point(343, 8) + Me.rbLarge.Name = "rbLarge" + Me.rbLarge.Size = New System.Drawing.Size(55, 17) + Me.rbLarge.TabIndex = 3 + Me.rbLarge.TabStop = True + Me.rbLarge.Text = "Cover" + Me.rbLarge.UseVisualStyleBackColor = True + ' + 'rbXLarge + ' + Me.rbXLarge.AutoSize = True + Me.rbXLarge.Enabled = False + Me.rbXLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbXLarge.Location = New System.Drawing.Point(26, 8) + Me.rbXLarge.Name = "rbXLarge" + Me.rbXLarge.Size = New System.Drawing.Size(66, 17) + Me.rbXLarge.TabIndex = 2 + Me.rbXLarge.TabStop = True + Me.rbXLarge.Text = "Original" + Me.rbXLarge.UseVisualStyleBackColor = True + ' + 'pnlFanart + ' + Me.pnlFanart.BackColor = System.Drawing.Color.White + Me.pnlFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFanart.Controls.Add(Me.chkThumb) + Me.pnlFanart.Controls.Add(Me.chkMid) + Me.pnlFanart.Controls.Add(Me.chkOriginal) + Me.pnlFanart.Location = New System.Drawing.Point(8, 8) + Me.pnlFanart.Name = "pnlFanart" + Me.pnlFanart.Size = New System.Drawing.Size(339, 34) + Me.pnlFanart.TabIndex = 5 + Me.pnlFanart.Visible = False + ' + 'chkThumb + ' + Me.chkThumb.AutoSize = True + Me.chkThumb.Location = New System.Drawing.Point(231, 8) + Me.chkThumb.Name = "chkThumb" + Me.chkThumb.Size = New System.Drawing.Size(111, 17) + Me.chkThumb.TabIndex = 9 + Me.chkThumb.Text = "Check All Thumb" + Me.chkThumb.UseVisualStyleBackColor = True + ' + 'chkMid + ' + Me.chkMid.AutoSize = True + Me.chkMid.Location = New System.Drawing.Point(131, 8) + Me.chkMid.Name = "chkMid" + Me.chkMid.Size = New System.Drawing.Size(96, 17) + Me.chkMid.TabIndex = 7 + Me.chkMid.Text = "Check All Mid" + Me.chkMid.UseVisualStyleBackColor = True + ' + 'chkOriginal + ' + Me.chkOriginal.AutoSize = True + Me.chkOriginal.Location = New System.Drawing.Point(7, 8) + Me.chkOriginal.Name = "chkOriginal" + Me.chkOriginal.Size = New System.Drawing.Size(118, 17) + Me.chkOriginal.TabIndex = 8 + Me.chkOriginal.Text = "Check All Original" + Me.chkOriginal.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.Location = New System.Drawing.Point(402, 10) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(240, 31) + Me.lblInfo.TabIndex = 3 + Me.lblInfo.Text = "Selected item will be set as fanart. All checked items will be saved to \extrathu" & _ + "mbs." + Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblInfo.Visible = False + ' + 'pnlDLStatus + ' + Me.pnlDLStatus.BackColor = System.Drawing.Color.White + Me.pnlDLStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlDLStatus.Controls.Add(Me.pnlIMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlSinglePic) + Me.pnlDLStatus.Controls.Add(Me.pnlFANARTTV) + Me.pnlDLStatus.Controls.Add(Me.pnlMDB) + Me.pnlDLStatus.Controls.Add(Me.pnlIMPA) + Me.pnlDLStatus.Controls.Add(Me.pnlTMDB) + Me.pnlDLStatus.Location = New System.Drawing.Point(253, 98) + Me.pnlDLStatus.Name = "pnlDLStatus" + Me.pnlDLStatus.Size = New System.Drawing.Size(331, 330) + Me.pnlDLStatus.TabIndex = 0 + Me.pnlDLStatus.Visible = False + ' + 'pnlIMDB + ' + Me.pnlIMDB.Controls.Add(Me.lblDL6Status) + Me.pnlIMDB.Controls.Add(Me.lblDL6) + Me.pnlIMDB.Controls.Add(Me.pbDL6) + Me.pnlIMDB.Location = New System.Drawing.Point(3, 84) + Me.pnlIMDB.Name = "pnlIMDB" + Me.pnlIMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlIMDB.TabIndex = 9 + ' + 'lblDL6Status + ' + Me.lblDL6Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL6Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL6Status.Name = "lblDL6Status" + Me.lblDL6Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL6Status.TabIndex = 8 + ' + 'lblDL6 + ' + Me.lblDL6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL6.Location = New System.Drawing.Point(5, 10) + Me.lblDL6.Name = "lblDL6" + Me.lblDL6.Size = New System.Drawing.Size(310, 13) + Me.lblDL6.TabIndex = 7 + Me.lblDL6.Text = "Performing Preliminary Tasks..." + ' + 'pbDL6 + ' + Me.pbDL6.Location = New System.Drawing.Point(6, 52) + Me.pbDL6.Name = "pbDL6" + Me.pbDL6.Size = New System.Drawing.Size(309, 19) + Me.pbDL6.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL6.TabIndex = 6 + ' + 'pnlSinglePic + ' + Me.pnlSinglePic.BackColor = System.Drawing.Color.White + Me.pnlSinglePic.Controls.Add(Me.Label2) + Me.pnlSinglePic.Controls.Add(Me.ProgressBar1) + Me.pnlSinglePic.Location = New System.Drawing.Point(3, 3) + Me.pnlSinglePic.Name = "pnlSinglePic" + Me.pnlSinglePic.Size = New System.Drawing.Size(321, 75) + Me.pnlSinglePic.TabIndex = 9 + Me.pnlSinglePic.Visible = False + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(5, 10) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(310, 13) + Me.Label2.TabIndex = 7 + Me.Label2.Text = "Downloading Selected Image..." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(6, 53) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(309, 19) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 6 + ' + 'pnlFANARTTV + ' + Me.pnlFANARTTV.Controls.Add(Me.lblDL3Status) + Me.pnlFANARTTV.Controls.Add(Me.lblDL3) + Me.pnlFANARTTV.Controls.Add(Me.pbDL3) + Me.pnlFANARTTV.Location = New System.Drawing.Point(3, 84) + Me.pnlFANARTTV.Name = "pnlFANARTTV" + Me.pnlFANARTTV.Size = New System.Drawing.Size(321, 75) + Me.pnlFANARTTV.TabIndex = 11 + ' + 'lblDL3Status + ' + Me.lblDL3Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL3Status.Name = "lblDL3Status" + Me.lblDL3Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL3Status.TabIndex = 8 + ' + 'lblDL3 + ' + Me.lblDL3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3.Location = New System.Drawing.Point(5, 10) + Me.lblDL3.Name = "lblDL3" + Me.lblDL3.Size = New System.Drawing.Size(310, 13) + Me.lblDL3.TabIndex = 7 + Me.lblDL3.Text = "Performing Preliminary Tasks..." + ' + 'pbDL3 + ' + Me.pbDL3.Location = New System.Drawing.Point(6, 53) + Me.pbDL3.Name = "pbDL3" + Me.pbDL3.Size = New System.Drawing.Size(309, 19) + Me.pbDL3.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL3.TabIndex = 6 + ' + 'pnlMDB + ' + Me.pnlMDB.Controls.Add(Me.lblDL5Status) + Me.pnlMDB.Controls.Add(Me.lblDL5) + Me.pnlMDB.Controls.Add(Me.pbDL5) + Me.pnlMDB.Location = New System.Drawing.Point(3, 246) + Me.pnlMDB.Name = "pnlMDB" + Me.pnlMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlMDB.TabIndex = 9 + ' + 'lblDL5Status + ' + Me.lblDL5Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL5Status.Name = "lblDL5Status" + Me.lblDL5Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL5Status.TabIndex = 8 + ' + 'lblDL5 + ' + Me.lblDL5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL5.Location = New System.Drawing.Point(5, 10) + Me.lblDL5.Name = "lblDL5" + Me.lblDL5.Size = New System.Drawing.Size(310, 13) + Me.lblDL5.TabIndex = 7 + Me.lblDL5.Text = "Performing Preliminary Tasks..." + ' + 'pbDL5 + ' + Me.pbDL5.Location = New System.Drawing.Point(6, 53) + Me.pbDL5.Name = "pbDL5" + Me.pbDL5.Size = New System.Drawing.Size(309, 19) + Me.pbDL5.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL5.TabIndex = 6 + ' + 'pnlIMPA + ' + Me.pnlIMPA.Controls.Add(Me.lblDL4Status) + Me.pnlIMPA.Controls.Add(Me.lblDL4) + Me.pnlIMPA.Controls.Add(Me.pbDL4) + Me.pnlIMPA.Location = New System.Drawing.Point(3, 165) + Me.pnlIMPA.Name = "pnlIMPA" + Me.pnlIMPA.Size = New System.Drawing.Size(321, 75) + Me.pnlIMPA.TabIndex = 6 + ' + 'lblDL4Status + ' + Me.lblDL4Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL4Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL4Status.Name = "lblDL4Status" + Me.lblDL4Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL4Status.TabIndex = 8 + ' + 'lblDL4 + ' + Me.lblDL4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL4.Location = New System.Drawing.Point(5, 10) + Me.lblDL4.Name = "lblDL4" + Me.lblDL4.Size = New System.Drawing.Size(310, 13) + Me.lblDL4.TabIndex = 7 + Me.lblDL4.Text = "Performing Preliminary Tasks..." + ' + 'pbDL4 + ' + Me.pbDL4.Location = New System.Drawing.Point(6, 52) + Me.pbDL4.Name = "pbDL4" + Me.pbDL4.Size = New System.Drawing.Size(309, 19) + Me.pbDL4.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL4.TabIndex = 6 + ' + 'pnlTMDB + ' + Me.pnlTMDB.Controls.Add(Me.lblDL2Status) + Me.pnlTMDB.Controls.Add(Me.lblDL2) + Me.pnlTMDB.Controls.Add(Me.pbDL2) + Me.pnlTMDB.Location = New System.Drawing.Point(3, 3) + Me.pnlTMDB.Name = "pnlTMDB" + Me.pnlTMDB.Size = New System.Drawing.Size(321, 75) + Me.pnlTMDB.TabIndex = 10 + ' + 'lblDL2Status + ' + Me.lblDL2Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL2Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL2Status.Name = "lblDL2Status" + Me.lblDL2Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL2Status.TabIndex = 8 + ' + 'lblDL2 + ' + Me.lblDL2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL2.Location = New System.Drawing.Point(5, 10) + Me.lblDL2.Name = "lblDL2" + Me.lblDL2.Size = New System.Drawing.Size(310, 13) + Me.lblDL2.TabIndex = 7 + Me.lblDL2.Text = "Performing Preliminary Tasks..." + ' + 'pbDL2 + ' + Me.pbDL2.Location = New System.Drawing.Point(6, 52) + Me.pbDL2.Name = "pbDL2" + Me.pbDL2.Size = New System.Drawing.Size(309, 19) + Me.pbDL2.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL2.TabIndex = 6 + ' + 'dlgImgSelect + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(836, 545) + Me.ControlBox = False + Me.Controls.Add(Me.pnlDLStatus) + Me.Controls.Add(Me.pnlBG) + Me.Controls.Add(Me.pnlBottomMain) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgImgSelect" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Poster" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlSize.ResumeLayout(False) + Me.pnlSize.PerformLayout() + Me.pnlFanart.ResumeLayout(False) + Me.pnlFanart.PerformLayout() + Me.pnlDLStatus.ResumeLayout(False) + Me.pnlIMDB.ResumeLayout(False) + Me.pnlSinglePic.ResumeLayout(False) + Me.pnlFANARTTV.ResumeLayout(False) + Me.pnlMDB.ResumeLayout(False) + Me.pnlIMPA.ResumeLayout(False) + Me.pnlTMDB.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlDLStatus As System.Windows.Forms.Panel + Friend WithEvents pnlIMPA As System.Windows.Forms.Panel + Friend WithEvents lblDL4Status As System.Windows.Forms.Label + Friend WithEvents lblDL4 As System.Windows.Forms.Label + Friend WithEvents pbDL4 As System.Windows.Forms.ProgressBar + Friend WithEvents lblInfo As System.Windows.Forms.Label + Friend WithEvents pnlSize As System.Windows.Forms.Panel + Friend WithEvents rbSmall As System.Windows.Forms.RadioButton + Friend WithEvents rbMedium As System.Windows.Forms.RadioButton + Friend WithEvents rbLarge As System.Windows.Forms.RadioButton + Friend WithEvents rbXLarge As System.Windows.Forms.RadioButton + Friend WithEvents pnlSinglePic As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL5Status As System.Windows.Forms.Label + Friend WithEvents lblDL5 As System.Windows.Forms.Label + Friend WithEvents pbDL5 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlFanart As System.Windows.Forms.Panel + Friend WithEvents chkThumb As System.Windows.Forms.CheckBox + Friend WithEvents chkMid As System.Windows.Forms.CheckBox + Friend WithEvents chkOriginal As System.Windows.Forms.CheckBox + Friend WithEvents btnPreview As System.Windows.Forms.Button + Friend WithEvents pnlFANARTTV As System.Windows.Forms.Panel + Friend WithEvents lblDL3Status As System.Windows.Forms.Label + Friend WithEvents lblDL3 As System.Windows.Forms.Label + Friend WithEvents pbDL3 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlTMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL2Status As System.Windows.Forms.Label + Friend WithEvents lblDL2 As System.Windows.Forms.Label + Friend WithEvents pbDL2 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlIMDB As System.Windows.Forms.Panel + Friend WithEvents lblDL6Status As System.Windows.Forms.Label + Friend WithEvents lblDL6 As System.Windows.Forms.Label + Friend WithEvents pbDL6 As System.Windows.Forms.ProgressBar + +End Class diff --git a/Addons/scraper.TMDB.Poster/Scraper/dlgImgSelect.resx b/Addons/scraper.TMDB.Poster/Scraper/dlgImgSelect.resx new file mode 100644 index 0000000..3491405 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/dlgImgSelect.resx @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnPreview.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA + Cv8BNGKaggAAAuRJREFUOE+lkltsS3Ecx3+ILAsPFrfEyxJPXkh0bokg4UG78TQNI5FImPBAJKiNhBAy + MTwRMRJ1ibsZ29jc2t00Vrq1p3q6tqft6Tk9t87YeLCHff3/3Sp4dZJPvv/f5fs7///5HwJA/8Nv88jw + 8ApD1y+blnnNtKwGjmXl/qCQMxt+fB9xjI2NEYdGR0dp9OfP6Yph+gOKjpBmMcy8CoxwPi5gok81kDGt + BPOUci+xt1LO0Gy+ZAZuUcbtCe4NpHEtLKNBkHGfrQt5dySNrpSKIcvcbJkmka5pNKhrtrfxFE71RlD3 + UcT5gIjt7THMvhLHTEZlSwz1n0ScZTXe8yKextec6TRNY3zAF0O3tUYl7Ovqh+t9EHs8IRSdC4FO9+WZ + VBfEjlchHPEF8z2PRQnDg9b4AE3L0hA7wqNwDFWvP2Cn1w9Hox90zAc6McFRH9Y97MWuDn++56YwgJEc + G2CwAdmsSkPsCLf6I1jb3IUNL3sY3Zhxxgs67AG5PCg+4YW9uRsbWY33XAp8xrBlOHVdI1IVhb5oWdv1 + QBjLn3qwtqUDq5s6MOd0O2jfizwlx9uwqtGLdazGey76Q/hm6k4tmyXKyDLlVMV29aOApU0erHnWgWmH + noF2NYL2Ph2nuhFF+5uw8okXy1hP/YcghjTVqSgZoqQkkZZK2m58ErDouRfzLjSDKt2grbf+ZpMbJSeb + sPA520FvCINqxinLaaKoKHJsETGK1rCIh+8F3HnTh7vvgrjHbqMAjx/0CGiNDCAqJZGUEk45zQYk4nG+ + i7LPgoBkNIpsOglTzcDSFOQ0FTmdwdRiyvNqKolELAZZlre0t7URLSkro21VVSVdnZ1pSZKQSqXAPizY + /wHDMMCuKg+Ps6oKJZNBsL//6+7q6gWTaPzhWjx31qzF5Xb7Acf69S6mNRV2e22Fw1G7gcGVUcPyro3l + 5Qfnl5auYZ4Zk7l3ClsxuBQGTszNx/9SqHHDVG76BaMnpgu1OH2ZAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Scraper/dlgImgSelect.vb b/Addons/scraper.TMDB.Poster/Scraper/dlgImgSelect.vb new file mode 100644 index 0000000..b2e44a9 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/dlgImgSelect.vb @@ -0,0 +1,1582 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports EmberScraperModule.EmberTMDBScraperModule +Imports RestSharp +Imports WatTmdb + +Public Class dlgImgSelect + +#Region "Fields" + + Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwIMDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwFANARTTVDownload As New System.ComponentModel.BackgroundWorker + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Private TMDB As TMDB.Scraper + Private TMDBPosters As New List(Of MediaContainers.Image) + + Private MPDB As New MPDB.Scraper + Private MPDBPosters As New List(Of MediaContainers.Image) + + Private IMPA As New IMPA.Scraper + Private IMPAPosters As New List(Of MediaContainers.Image) + + Private IMDB As New IMDBimg.Scraper + Private IMDBPosters As New List(Of MediaContainers.Image) + + Private FANARTTVs As FANARTTVs.Scraper + Private FANARTTVPosters As New List(Of MediaContainers.Image) + + Private CachePath As String = String.Empty + Private chkImage() As CheckBox + Private DLType As Enums.ImageType + Private ETHashes As New List(Of String) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + + Private isEdit As Boolean = False + Private isShown As Boolean = False + Private iTop As Integer = 5 + Private lblImage() As Label + + Private noImages As Boolean = False + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private PreDL As Boolean = False + Private Results As New Containers.ImgResult + Private selIndex As Integer = -1 + + Private tMovie As New Structures.DBMovie + Private tmpImage As New MediaContainers.Image + Private _impaDone As Boolean = True + Private _imdbDone As Boolean = True + Private _fanarttvDone As Boolean = True + Private _mpdbDone As Boolean = True + Private _tmdbDone As Boolean = True + +#End Region 'Fields + +#Region "Events" + + Private Event IMPADone() + + Private Event MPDBDone() + + Private Event TMDBDone() + + Private Event IMDBDone() + + Private Event FANARTTVDone() +#End Region 'Events + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = tMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + TMDB = New TMDB.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + FANARTTVs = New FANARTTVs.Scraper(_MySettings) + End Sub + + Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.PreDL = True + Me.SetUp() + Me.StartDownload() + End Sub + + Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult + '// + ' Overload to pass data + '\\ + + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.isShown = True + + MyBase.ShowDialog() + Return Results + End Function + + Public Overloads Function ShowDialog() As Containers.ImgResult + Me.isShown = True + MyBase.ShowDialog() + + Return Results + End Function + + 'Rewrite to simplify + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal isChecked As Boolean, poster As MediaContainers.Image) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(256, 286) + Me.pbImage(iIndex).Size = New Size(250, 250) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.pnlImage(iIndex).Tag = poster + Me.pbImage(iIndex).Tag = poster + Me.pbImage(iIndex).Image = poster.WebImage.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.pnlBG.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If Me.DLType = Enums.ImageType.Fanart Then + ReDim Preserve Me.chkImage(iIndex) + Me.chkImage(iIndex) = New CheckBox() + Me.chkImage(iIndex).Name = iIndex.ToString + Me.chkImage(iIndex).Size = New Size(250, 30) + Me.chkImage(iIndex).AutoSize = False + Me.chkImage(iIndex).BackColor = Color.White + Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + 'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + Me.chkImage(iIndex).Left = 0 + Me.chkImage(iIndex).Top = 250 + Me.chkImage(iIndex).Checked = isChecked + Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve Me.lblImage(iIndex) + Me.lblImage(iIndex) = New Label() + Me.lblImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Size = New Size(250, 30) + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + If IsTMDBURL(poster.URL) Then + Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + Else + Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + End If + Me.lblImage(iIndex).Tag = poster + Me.lblImage(iIndex).Left = 0 + Me.lblImage(iIndex).Top = 250 + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 301 + Else + Me.iLeft += 271 + End If + End Sub + + Private Sub AllDoneDownloading() + If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone AndAlso Me._imdbDone AndAlso Me._fanarttvDone Then + Me.pnlDLStatus.Visible = False + Me.TMDBPosters.AddRange(Me.IMPAPosters) + Me.TMDBPosters.AddRange(Me.MPDBPosters) + Me.TMDBPosters.AddRange(Me.IMDBPosters) + Me.TMDBPosters.AddRange(Me.FANARTTVPosters) + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + End If + End Sub + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + PreviewImage() + End Sub + + Private Sub PreviewImage() + Try + Dim tImage As New Images + Me.pnlTMDB.Visible = False + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = True + Me.pnlDLStatus.Height = 85 + Me.pnlDLStatus.Top = 185 + + Application.DoEvents() + + Select Case True + Case rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + Case rbLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + Case rbMedium.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case rbSmall.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End Select + + Me.pnlSinglePic.Visible = False + + If Not IsNothing(tImage.Image) Then + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image) + + End If + + tImage.Dispose() + tImage = Nothing + + Catch ex As Exception + Me.pnlSinglePic.Visible = False + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.IMDBPosters.Count - 1 + Try + If Me.bwIMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMDBDownload.ReportProgress(i + 1, Me.IMDBPosters.Item(i).URL) + Try + Me.IMDBPosters.Item(i).WebImage.FromWeb(Me.IMDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMDBPosters.Item(i).URL = StringUtils.CleanURL(Me.IMDBPosters.Item(i).URL) + Me.IMDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMDBPosters.Item(i).Description, ")_(url=", Me.IMDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwIMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL6Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL6.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._imdbDone = True + RaiseEvent IMDBDone() + End If + End Sub + + Private Sub bwFANARTTVDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwFANARTTVDownload.DoWork + '// + ' Thread to download FanartTV images from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.FANARTTVPosters.Count - 1 + Try + If Me.bwFANARTTVDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwFANARTTVDownload.ReportProgress(i + 1, Me.FANARTTVPosters.Item(i).URL) + Try + Me.FANARTTVPosters.Item(i).WebImage.FromWeb(Me.FANARTTVPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.FANARTTVPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.FANARTTVPosters.Item(i).URL = StringUtils.CleanURL(Me.FANARTTVPosters.Item(i).URL) + Me.FANARTTVPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.FANARTTVPosters.Item(i).Description, ")_(url=", Me.FANARTTVPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwFANARTTVDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwFANARTTVDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL3.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwFANARTTVDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwFANARTTVDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._fanarttvDone = True + RaiseEvent FANARTTVDone() + End If + End Sub + + Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork + '// + ' Thread to download impa posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + + For i As Integer = 0 To Me.IMPAPosters.Count - 1 + If bwIMPADownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL) + Try + Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL) + Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL4Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL4.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPABownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._impaDone = True + RaiseEvent IMPADone() + End If + End Sub + + Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.MPDBPosters.Count - 1 + Try + If Me.bwMPDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL) + Try + Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL) + Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg")), , , False) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL5Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL5.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._mpdbDone = True + RaiseEvent MPDBDone() + End If + End Sub + + Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork + '// + ' Thread to download tmdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + Dim thumbLink As String = String.Empty + Dim savePath As String = String.Empty + Dim extrathumbSize As String = String.Empty + + extrathumbSize = _MySettings.ManualETSize + + 'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all. + Dim posters As MediaContainers.Image() + If Me.DLType = Enums.ImageType.Fanart Then + posters = TMDBPosters.Where(Function(s) s.Description = extrathumbSize).ToArray() + Else + posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray() + End If + + For i As Integer = 0 To posters.Count - 1 + Try + If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then + If Me.bwTMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwTMDBDownload.ReportProgress((i + 1), posters(i).URL) + Try + posters(i).WebImage.FromWeb(posters(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then + If Me.DLType = Enums.ImageType.Fanart Then + + + If Not posters(i).URL.Contains("-thumb.") Then + Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org" + thumbLink = RemoveServerURL(posters(i).URL) + 'If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("-poster.", "-thumb.") + thumbLink = thumbLink.Replace("-original.", "-thumb.") + ''Else + 'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb") + 'End If + Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Else + Me.Results.Posters.Add(posters(i).URL) + End If + End If + If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then + Try + posters(i).URL = Me.CleanTMDBURL(posters(i).URL) + + savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg")) + posters(i).WebImage.Save(savePath, , , False) + + If Master.eSettings.AutoET Then + Dim tSize As New Enums.FanartSize + Select Case posters(i).Description.ToLower + Case "original" + tSize = Enums.FanartSize.Lrg + Case "mid" + tSize = Enums.FanartSize.Mid + Case "thumb" + tSize = Enums.FanartSize.Small + End Select + If Master.eSettings.AutoETSize = tSize Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + posters(i).isChecked = True + End If + End If + End If + + Catch + End Try + End If + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL2.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._tmdbDone = True + RaiseEvent TMDBDone() + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + IMPA.Cancel() + MPDB.Cancel() + TMDB.Cancel() + IMDB.Cancel() + FANARTTVs.Cancel() + + If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync() + If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync() + If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync() + If bwIMDBDownload.IsBusy Then bwIMDBDownload.CancelAsync() + If bwFANARTTVDownload.IsBusy Then bwFANARTTVDownload.CancelAsync() + + While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean) + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Text.ToLower.Contains(sType) Then + Me.chkImage(i).Checked = Checked + End If + Next + End Sub + + Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged + Me.CheckAll("(poster)", chkMid.Checked) + End Sub + + Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged + Me.CheckAll("(original)", chkOriginal.Checked) + End Sub + + Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged + Me.CheckAll("(thumb)", chkThumb.Checked) + End Sub + + Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'Me.tmpImage.Dispose() + + IMPA = Nothing + MPDB = Nothing + TMDB = Nothing + IMDB = Nothing + FANARTTVs = Nothing + + IMPAPosters = Nothing + MPDBPosters = Nothing + TMDBPosters = Nothing + IMDBPosters = Nothing + FANARTTVPosters = Nothing + + End Sub + + Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath) + End Sub + + Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not PreDL Then SetUp() + End Sub + + Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Try + Application.DoEvents() + If Not PreDL Then + StartDownload() + ElseIf noImages Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image) + Try + 'set all pnl colors to white first + 'remove all the current genres + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(i).BackColor = Color.White + Me.chkImage(i).ForeColor = Color.Black + Else + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + End If + Next + + 'set selected pnl color to blue + Me.pnlImage(iIndex).BackColor = Color.Blue + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(iIndex).BackColor = Color.Blue + Me.chkImage(iIndex).ForeColor = Color.White + Else + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + End If + + Me.selIndex = iIndex + + Me.pnlSize.Visible = False + + If IsTMDBURL(poster.URL) Then + Me.SetupSizes(poster.ParentID) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + Me.OK_Button.Enabled = False + Else + Me.OK_Button.Focus() + End If + Me.tmpImage.Clear() + Else + Me.rbXLarge.Checked = False + Me.rbLarge.Checked = False + Me.rbMedium.Checked = False + Me.rbSmall.Checked = False + Me.OK_Button.Enabled = True + Me.OK_Button.Focus() + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function IsTMDBURL(ByVal sURL As String) As Boolean + If sURL.ToLower.Contains(_TMDBConf.images.base_url.ToLower) Then + Return True + Else + Return False + End If + End Function + + Private Function CleanTMDBURL(ByVal sURL As String) As String + If IsTMDBURL(sURL) Then + Dim _sURL As New Uri(sURL) + sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped)) + Else + sURL = StringUtils.TruncateURL(sURL, 40, True) + End If + Return sURL.Replace(":", "$c$").Replace("/", "$s$") + End Function + + + Private Sub GetFanart() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim di As New DirectoryInfo(CachePath) + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + If Not IsNothing(tImage.WebImage.Image) Then + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + 'Case sFile.Name.Contains("(mid)") + ' tImage.Description = "mid" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + End If + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "backdrop") + + If _MySettings.UseFANARTTV Then + Me.lblDL3.Text = Master.eLang.GetString(120, "Retrieving data from Fanart.tv...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._fanarttvDone = False + + Me.FANARTTVs.GetImagesAsync(tMovie.Movie.ID) + Else + Me.lblDL3.Text = Master.eLang.GetString(121, "Fanart.tv is not enabled") + End If + + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub GetPosters() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim lFi As New List(Of FileInfo) + Dim di As New DirectoryInfo(CachePath) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 207 + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + Next + Me.ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + Me.lblDL2.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.TMDBID, "poster") + + If _MySettings.UseIMDB Then + Me.lblDL6.Text = Master.eLang.GetString(117, "Retrieving data from IMDB.com...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._imdbDone = False + + Me.IMDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL6.Text = Master.eLang.GetString(118, "IMDB.com is not enabled") + End If + + If _MySettings.UseIMPA Then + Me.lblDL4.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._impaDone = False + + Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL4.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled") + End If + + If _MySettings.UseMPDB Then + Me.lblDL5.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._mpdbDone = False + + Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL5.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVDoneDownloading() + Try + Me._fanarttvDone = True + Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL3.Value = 0 + + 'Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = Posters.Count + + Me.FANARTTVPosters = Posters + + Me.bwFANARTTVDownload.WorkerSupportsCancellation = True + Me.bwFANARTTVDownload.WorkerReportsProgress = True + Me.bwFANARTTVDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub FANARTTVProgressUpdated(ByVal iPercent As Integer) + Me.pbDL3.Value = iPercent + End Sub + + Private Sub IMDBDoneDownloading() + Try + Me._imdbDone = True + Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL6.Value = 0 + + 'Me.lblDL6.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL6Status.Text = String.Empty + Me.pbDL6.Maximum = Posters.Count + + Me.IMDBPosters = Posters + + Me.bwIMDBDownload.WorkerSupportsCancellation = True + Me.bwIMDBDownload.WorkerReportsProgress = True + Me.bwIMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL6.Value = iPercent + End Sub + + Private Sub IMPADoneDownloading() + Try + Me._impaDone = True + Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL4.Value = 0 + + 'Me.lblDL4.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL4Status.Text = String.Empty + Me.pbDL4.Maximum = Posters.Count + + Me.IMPAPosters = Posters + + Me.bwIMPADownload.WorkerSupportsCancellation = True + Me.bwIMPADownload.WorkerReportsProgress = True + Me.bwIMPADownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAProgressUpdated(ByVal iPercent As Integer) + Me.pbDL4.Value = iPercent + End Sub + + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then + pnlBG.VerticalScroll.Value += 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum + End If + Else + If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then + pnlBG.VerticalScroll.Value -= 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub MPDBDoneDownloading() + Try + Me._mpdbDone = True + Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL5.Value = 0 + + 'Me.lblDL5.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL5Status.Text = String.Empty + Me.pbDL5.Maximum = Posters.Count + + Me.MPDBPosters = Posters + + Me.bwMPDBDownload.WorkerSupportsCancellation = True + Me.bwMPDBDownload.WorkerReportsProgress = True + Me.bwMPDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL5.Value = iPercent + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + Dim tmpPathPlus As String = String.Empty + Dim extrathumbSize As String + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + If DLType = Enums.ImageType.Fanart Then + tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") + Else + tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") + End If + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If + + If Me.DLType = Enums.ImageType.Fanart Then + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + Dim isChecked As Boolean = False + + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + isChecked = True + Exit For + End If + Next + + If isChecked Then + Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs") + If isEdit Then + extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName) + Else + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName) + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName) + Else + extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName) + End If + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + End If + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + Dim fsET As FileStream + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) + Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg) + fsET.Close() + iVal += 1 + End If + Next + fsET = Nothing + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + Try + 'If Me.DLType = Enums.ImageType.Fanart OrElse Not IsTMDBURL(DirectCast(sender, PictureBox).Tag.ToString) Then + 'ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(DirectCast(sender, PictureBox).Image) + 'Else + PreviewImage() + 'End If + Catch + End Try + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Panel).Name), DirectCast(DirectCast(sender, Panel).Tag, MediaContainers.Image)) + End Sub + + Private Sub ProcessPics(ByVal posters As List(Of MediaContainers.Image)) + Try + Dim iIndex As Integer = 0 + + 'remove all entries with invalid images + If Master.eSettings.UseImgCache Then + For i As Integer = posters.Count - 1 To 0 Step -1 + If IsNothing(posters.Item(i).WebImage.Image) Then + posters.RemoveAt(i) + End If + Next + End If + + If posters.Count > 0 Then + For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) RemoveServerURL(p.URL)) + If Not IsNothing(xPoster.WebImage.Image) AndAlso (Me.DLType = Enums.ImageType.Fanart OrElse Not (IsTMDBURL(xPoster.URL) AndAlso Not xPoster.Description = "cover")) Then + Me.AddImage(xPoster.Description, iIndex, xPoster.isChecked, xPoster) + iIndex += 1 + End If + Next + Else + If Not Me.PreDL OrElse isShown Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Else + noImages = True + End If + End If + + Me.Activate() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub rbLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbMedium_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbMedium.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbSmall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSmall.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbXLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbXLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub SetUp() + Try + AddHandler TMDB.PostersDownloaded, AddressOf TMDBPostersDownloaded + AddHandler TMDB.ProgressUpdated, AddressOf TMDBProgressUpdated + AddHandler IMPA.PostersDownloaded, AddressOf IMPAPostersDownloaded + AddHandler IMPA.ProgressUpdated, AddressOf IMPAProgressUpdated + AddHandler MPDB.PostersDownloaded, AddressOf MPDBPostersDownloaded + AddHandler MPDB.ProgressUpdated, AddressOf MPDBProgressUpdated + AddHandler IMDB.PostersDownloaded, AddressOf IMDBPostersDownloaded + AddHandler IMDB.ProgressUpdated, AddressOf IMDBProgressUpdated + AddHandler FANARTTVs.PostersDownloaded, AddressOf FANARTTVPostersDownloaded + AddHandler FANARTTVs.ProgressUpdated, AddressOf FANARTTVProgressUpdated + AddHandler IMPADone, AddressOf IMPADoneDownloading + AddHandler TMDBDone, AddressOf TMDBDoneDownloading + AddHandler MPDBDone, AddressOf MPDBDoneDownloading + AddHandler IMDBDone, AddressOf IMDBDoneDownloading + AddHandler FANARTTVDone, AddressOf FANARTTVDoneDownloading + + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlBG.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlBG) + + If Me.DLType = Enums.ImageType.Posters Then + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = True + Me.pnlFANARTTV.Visible = False + Me.pnlIMPA.Visible = True + Me.pnlMDB.Visible = True + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 328 + Me.pnlDLStatus.Top = 82 + Else + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlTMDB.Visible = True + Me.pnlIMDB.Visible = False + Me.pnlFANARTTV.Visible = True + Me.pnlIMPA.Visible = False + Me.pnlMDB.Visible = False + Me.pnlSinglePic.Visible = False + Me.pnlDLStatus.Height = 165 + Me.pnlDLStatus.Top = 129 + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(tMovie.Filename) + End If + End If + + CachePath = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, tMovie.Movie.IMDBID, Path.DirectorySeparatorChar, If(Me.DLType = Enums.ImageType.Posters, "posters", "fanart")) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview", True) + Me.chkThumb.Text = Master.eLang.GetString(41, "Check All Thumb") + Me.chkMid.Text = Master.eLang.GetString(42, "Check All Mid") + Me.chkOriginal.Text = Master.eLang.GetString(43, "Check All Original") + Me.lblInfo.Text = Master.eLang.GetString(44, "Selected item will be set as fanart. All checked items will be saved to \extrathumbs.") + Me.lblDL5.Text = Master.eLang.GetString(45, "Performing Preliminary Tasks...") + Me.lblDL4.Text = Me.lblDL5.Text + Me.lblDL3.Text = Me.lblDL5.Text + Me.lblDL2.Text = Me.lblDL5.Text + Me.Label2.Text = Master.eLang.GetString(46, "Downloading Selected Image...") + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(0, sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Function RemoveServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Sub SetupSizes(ByVal ParentID As String) + Try + rbXLarge.Checked = False + rbXLarge.Enabled = False + rbXLarge.Text = Master.eLang.GetString(47, "Original") + rbLarge.Checked = False + rbLarge.Enabled = False + rbMedium.Checked = False + rbSmall.Checked = False + rbSmall.Enabled = False + If Me.DLType = Enums.ImageType.Fanart Then + rbLarge.Text = "w1280" + rbMedium.Text = "poster" + rbSmall.Text = "thumb" + Else + rbLarge.Text = Master.eLang.GetString(48, "Cover") + rbMedium.Text = Master.eLang.GetString(49, "Medium") + rbSmall.Text = Master.eLang.GetString(50, "Small") + End If + + For Each TMDBPoster As MediaContainers.Image In TMDBPosters.Where(Function(f) f.ParentID = ParentID) + Select Case TMDBPoster.Description + Case "original" + ' xlarge + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbXLarge.Enabled = True + rbXLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "cover" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "w1280" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format("w1280 ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + End If + Case "thumb" + ' small + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbSmall.Enabled = True + rbSmall.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "mid" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + Case "poster" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format("Poster ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + End Select + Next + + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Small + rbSmall.Checked = rbSmall.Enabled + Case Enums.PosterSize.Mid + rbMedium.Checked = rbMedium.Enabled + Case Enums.PosterSize.Lrg + rbLarge.Checked = rbLarge.Enabled + Case Enums.PosterSize.Xlrg + rbXLarge.Checked = rbXLarge.Enabled + End Select + + pnlSize.Visible = True + + Invalidate() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub StartDownload() + Try + Select Case Me.DLType + Case Enums.ImageType.Posters + Me.GetPosters() + Case Enums.ImageType.Fanart + Me.GetFanart() + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBDoneDownloading() + Try + Me._tmdbDone = True + Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Application.DoEvents() + + Me.AllDoneDownloading() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL2.Value = 0 + + 'Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = Posters.Count + + Me.TMDBPosters = Posters + + Me.bwTMDBDownload.WorkerSupportsCancellation = True + Me.bwTMDBDownload.WorkerReportsProgress = True + Me.bwTMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL2.Value = iPercent + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Scraper/dlgTMDBSearchResults.Designer.vb b/Addons/scraper.TMDB.Poster/Scraper/dlgTMDBSearchResults.Designer.vb new file mode 100644 index 0000000..edf9f3b --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/dlgTMDBSearchResults.Designer.vb @@ -0,0 +1,460 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTMDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtTMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(497, 401) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(570, 401) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(4, 96) + Me.tvResults.Name = "tvResults" + Me.tvResults.ShowLines = False + Me.tvResults.ShowPlusMinus = False + Me.tvResults.ShowRootLines = False + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 4 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(294, 130) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(291, 70) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(291, 89) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(294, 295) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(472, 130) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(472, 156) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(472, 183) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtTMDBID + ' + Me.txtTMDBID.Enabled = False + Me.txtTMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBID.Location = New System.Drawing.Point(139, 399) + Me.txtTMDBID.Name = "txtTMDBID" + Me.txtTMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtTMDBID.TabIndex = 6 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(643, 64) + Me.pnlTop.TabIndex = 8 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(257, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(4, 403) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(130, 17) + Me.chkManual.TabIndex = 5 + Me.chkManual.Text = "Manual TMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(245, 399) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 7 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(472, 247) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(37, 13) + Me.lblIMDB.TabIndex = 20 + Me.lblIMDB.Text = "TMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(410, 130) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(33, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(410, 156) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(410, 183) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(410, 247) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(56, 13) + Me.lblIMDBHeader.TabIndex = 19 + Me.lblIMDBHeader.Text = "TMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(291, 279) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(262, 70) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 3 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(4, 71) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 2 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(364, 183) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 18 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(100, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching TMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(308, 155) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'dlgTMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(643, 454) + Me.ControlBox = False + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtTMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgTMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents tvResults As System.Windows.Forms.TreeView + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lblYear As System.Windows.Forms.Label + Friend WithEvents lblDirector As System.Windows.Forms.Label + Friend WithEvents lblGenre As System.Windows.Forms.Label + Friend WithEvents txtTMDBID As System.Windows.Forms.TextBox + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents lblIMDB As System.Windows.Forms.Label + Friend WithEvents lblYearHeader As System.Windows.Forms.Label + Friend WithEvents lblDirectorHeader As System.Windows.Forms.Label + Friend WithEvents lblGenreHeader As System.Windows.Forms.Label + Friend WithEvents lblIMDBHeader As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel + Friend WithEvents Label4 As System.Windows.Forms.Label + +End Class diff --git a/Addons/scraper.TMDB.Poster/Scraper/dlgTMDBSearchResults.resx b/Addons/scraper.TMDB.Poster/Scraper/dlgTMDBSearchResults.resx new file mode 100644 index 0000000..017a5ad --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/dlgTMDBSearchResults.resx @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + gg== +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA + CukB/XXO0wAAAepJREFUOE+lkktIG1EUhkeFaLQ+UGulgthNEUHRCrqyIHZTdSd0Iyq46cL3Sly50ppV + uywYi2uDiyKK1ioFk0lm7mSmSgymJuIqSkwwCTVpGs3fM0Pa+poWceBj4N5zvnvOuZcDwN2HeyWrB98Q + LFosuRJjz51O6cXmxsaj/1V3RSAx8fVXRQnIsgwVRZHjJHr7L8kfAROFPoWS3G43gicnCIVC8O7vQ11z + StKsnkQTrK6sGCSJBXddLpyfJ5FKpTTUz+f1gvbA22w1t0k0AW3WCYIAv9+PZPIn4vGYRiLxA+HwKRhj + EByOIV2BdWur3mG34/j4iJISiEYjRBSx2BkikQiYKOJQ4ft1BZ/X13NIEHalW1CrUEVACj6fF4yqe2W2 + TegK0m0MiBSoziEQCNAQg/B4PPi2I8Fk+QJucBnZI0vvrkuuXCPP8+PU63dC7RnbTvHi/cKnA2O3GYbu + OeT0ziOv58Na8djHgt+iGw+JHk+pzWrtpMF27cn2Ko7jMnLbTebCl1MoaH+D/I4ZFHbM7FZ0ThtvfYl6 + 913WMjFc2jyGkqZRlNC/om2yXBNk0RFEEfGEqCZqiXriGdGYpoHCHhdXtg6W1fQKD592mQwZ3N8KKCiL + yCaMRB7xgMi/zuXqMinnTi3otfYLj6yxrhdJtZ8AAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Scraper/dlgTMDBSearchResults.vb b/Addons/scraper.TMDB.Poster/Scraper/dlgTMDBSearchResults.vb new file mode 100644 index 0000000..d05fd0b --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/dlgTMDBSearchResults.vb @@ -0,0 +1,462 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb + +Public Class dlgTMDBSearchResults + +#Region "Fields" + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + Friend WithEvents tmrLoad As New System.Windows.Forms.Timer + Friend WithEvents tmrWait As New System.Windows.Forms.Timer + + Private TMDBg As TMDBg.Scraper + Private sHTTP As New HTTP + Private _currnode As Integer = -1 + Private _prevnode As Integer = -2 + Private MySettings As EmberTMDBScraperModule.sMySettings + 'Private TMDBConf As V3.TmdbConfiguration + 'Private TMDBApi As V3.Tmdb + + Private _InfoCache As New Dictionary(Of String, MediaContainers.Movie) + Private _PosterCache As New Dictionary(Of String, System.Drawing.Image) + Private _filterOptions As Structures.ScrapeOptions + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(_MySettings As EmberTMDBScraperModule.sMySettings, _TMDBg As TMDBg.Scraper) + + ' This call is required by the designer. + InitializeComponent() + 'TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + 'TMDBConf = TMDBApi.GetConfiguration() + MySettings = _MySettings + TMDBg = _TMDBg + End Sub + + + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + _filterOptions = filterOptions + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + chkManual.Enabled = False + 'TMDBg.IMDBURL = TMDBId + TMDBg.SearchMovieAsync(sMovieTitle, _filterOptions) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal Res As TMDBg.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + SearchResultsDownloaded(Res) + + Return MyBase.ShowDialog() + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.OK_Button.Enabled = False + pnlPicStatus.Visible = False + _InfoCache.Clear() + _PosterCache.Clear() + Me.ClearInfo() + Me.Label3.Text = Master.eLang.GetString(11, "Searching TMDB...") + Me.pnlLoading.Visible = True + chkManual.Enabled = False + TMDBg.CancelAsync() + 'IMDB.IMDBURL = IMDBURL + TMDBg.SearchMovieAsync(Me.txtSearch.Text, _filterOptions) + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + TMDBg.GetSearchMovieInfoAsync(Me.txtTMDBID.Text, Master.tmpMovie, Master.DefaultOptions) + + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + sHTTP.StartDownloadImage(Args.pURL) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image, .IMDBId = Args.IMDBId} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + '// + ' Thread finished: display pic if it was able to get one + '\\ + + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbPoster.Image = Res.Result + If Not _PosterCache.ContainsKey(Res.IMDBId) Then + _PosterCache.Add(Res.IMDBId, Res.Result) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + pnlPicStatus.Visible = False + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Master.tmpMovie.Clear() + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtTMDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.tvResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtTMDBID.Text = String.Empty + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblTagline.Text = String.Empty + Me.lblYear.Text = String.Empty + Me.lblDirector.Text = String.Empty + Me.lblGenre.Text = String.Empty + Me.txtOutline.Text = String.Empty + Me.lblIMDB.Text = String.Empty + Me.pbPoster.Image = Nothing + + Master.tmpMovie.Clear() + + TMDBg.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.lblYearHeader.Visible = areVisible + Me.lblDirectorHeader.Visible = areVisible + Me.lblGenreHeader.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.lblIMDBHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + Me.lblYear.Visible = areVisible + Me.lblTagline.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblDirector.Visible = areVisible + Me.lblGenre.Visible = areVisible + Me.lblIMDB.Visible = areVisible + Me.pbPoster.Visible = areVisible + End Sub + + Private Sub dlgIMDBSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub dlgIMDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + pnlPicStatus.Visible = False + 'TMDBg.IMDBURL = IMDBURL + AddHandler TMDBg.SearchMovieInfoDownloaded, AddressOf SearchMovieInfoDownloaded + AddHandler TMDBg.SearchResultsDownloaded, AddressOf SearchResultsDownloaded + + Try + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgIMDBSearchResults_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + Me.tvResults.Focus() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + If Me.chkManual.Checked AndAlso Me.btnVerify.Enabled Then + '' The rule is that if there is a tt is an IMDB otherwise is a TMDB + Master.tmpMovie.IMDBID = Me.txtTMDBID.Text + End If + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.Close() + End Sub + + Private Sub SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + '// + ' Info downloaded... fill form with data + '\\ + + Me.pnlLoading.Visible = False + Me.OK_Button.Enabled = True + + Try + If bSuccess Then + Me.ControlsVisible(True) + Me.lblTitle.Text = Master.tmpMovie.Title + Me.lblTagline.Text = Master.tmpMovie.Tagline + Me.lblYear.Text = Master.tmpMovie.Year + Me.lblDirector.Text = Master.tmpMovie.Director + Me.lblGenre.Text = Master.tmpMovie.Genre + Me.txtOutline.Text = Master.tmpMovie.Outline + Me.lblIMDB.Text = Master.tmpMovie.IMDBID + + If _PosterCache.ContainsKey(Master.tmpMovie.TMDBID) Then + 'just set it + Me.pbPoster.Image = _PosterCache(Master.tmpMovie.TMDBID) + Else + 'go download it, if available + If Not String.IsNullOrEmpty(sPoster) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + pnlPicStatus.Visible = True + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = sPoster, .IMDBId = Master.tmpMovie.TMDBID}) + End If + + End If + + 'store clone of tmpmovie + If Not _InfoCache.ContainsKey(Master.tmpMovie.TMDBID) Then + _InfoCache.Add(Master.tmpMovie.TMDBID, GetMovieClone(Master.tmpMovie)) + End If + + + Me.btnVerify.Enabled = False + Else + If Me.chkManual.Checked Then + MsgBox(Master.eLang.GetString(15, "Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again."), MsgBoxStyle.Exclamation, Master.eLang.GetString(16, "Verification Failed")) + Me.btnVerify.Enabled = True + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SearchResultsDownloaded(ByVal M As TMDBg.MovieSearchResults) + '// + ' Process the results that IMDB gave us + '\\ + 'Dim TnP As New TreeNode + 'Dim selNode As New TreeNode + + Try + Me.tvResults.Nodes.Clear() + Me.ClearInfo() + If Not IsNothing(M) AndAlso M.Matches.Count > 0 Then + + 'M.Matches.Sort() + For Each Movie As MediaContainers.Movie In M.Matches + 'TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Me.tvResults.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.TMDBID}) + Next + 'TnP.Expand() + 'Me.tvResults.Nodes.Add(TnP) + 'selNode = Me.tvResults.Nodes(0) + 'selNode = TnP.FirstNode + 'selNode = Me.tvResults.Nodes(0) + Me.tvResults.SelectedNode = Me.tvResults.Nodes(0) + + Me._prevnode = -2 + + Me.tvResults.Focus() + Else + Me.tvResults.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(20, "No Matches Found")}) + End If + Me.pnlLoading.Visible = False + chkManual.Enabled = True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.Label2.Text = Master.eLang.GetString(21, "View details of each result to find the proper movie.") + Me.Label1.Text = Master.eLang.GetString(22, "Movie Search Results") + Me.chkManual.Text = Master.eLang.GetString(23, "Manual TMDB Entry:") + Me.btnVerify.Text = Master.eLang.GetString(24, "Verify") + Me.lblYearHeader.Text = Master.eLang.GetString(49, "Year:", True) + Me.lblDirectorHeader.Text = Master.eLang.GetString(239, "Director:", True) + Me.lblGenreHeader.Text = Master.eLang.GetString(51, "Genre(s):", True) + Me.lblIMDBHeader.Text = Master.eLang.GetString(116, "TMDB ID:") + Me.lblPlotHeader.Text = Master.eLang.GetString(242, "Plot Outline:", True) + Me.Label3.Text = Master.eLang.GetString(25, "Searching TMDB...") + End Sub + + Private Sub tmrLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoad.Tick + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + Me.pnlLoading.Visible = True + Me.Label3.Text = Master.eLang.GetString(26, "Downloading details...") + + 'IMDB.IMDBURL = IMDBURL + TMDBg.GetSearchMovieInfoAsync(Me.tvResults.SelectedNode.Tag.ToString, Master.tmpMovie, Master.DefaultOptions) + End Sub + + Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrWait.Tick + If Not Me._prevnode = Me._currnode Then + Me._prevnode = Me._currnode + Me.tmrWait.Stop() + Me.tmrLoad.Start() + Else + Me.tmrLoad.Stop() + Me.tmrWait.Stop() + End If + End Sub + + Private Sub tvResults_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvResults.AfterSelect + Try + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + + Me.ClearInfo() + Me.OK_Button.Enabled = False + + If Not IsNothing(Me.tvResults.SelectedNode.Tag) AndAlso Not String.IsNullOrEmpty(Me.tvResults.SelectedNode.Tag.ToString) Then + Me._currnode = Me.tvResults.SelectedNode.Index + + 'check if this movie is in the cache already + If _InfoCache.ContainsKey(Me.tvResults.SelectedNode.Tag.ToString) Then + Master.tmpMovie = GetMovieClone(_InfoCache(Me.tvResults.SelectedNode.Tag.ToString)) + SearchMovieInfoDownloaded(String.Empty, True) + Return + End If + + Me.pnlLoading.Visible = True + Me.tmrWait.Start() + Else + Me.pnlLoading.Visible = False + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub tvResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub txtIMDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTMDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtIMDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBID.TextChanged + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Function GetMovieClone(ByVal original As MediaContainers.Movie) As MediaContainers.Movie + 'have to do this the old-fashioned way because it is not serializable + Dim result As New MediaContainers.Movie + With result + .IMDBID = original.IMDBID + .Genre = original.Genre + .Title = original.Title + .Tagline = original.Tagline + .Year = original.Year + .Director = original.Director + .Genre = original.Genre + .Outline = original.Outline + End With + Return result + 'Using mem As New IO.MemoryStream() + ' Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, New System.Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.Clone)) + ' bin.Serialize(mem, original) + ' mem.Seek(0, IO.SeekOrigin.Begin) + ' Return DirectCast(bin.Deserialize(mem), MediaContainers.Movie) + 'End Using + End Function + + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim pURL As String + Dim IMDBId As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Image + Dim IMDBId As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.TMDB.Poster/Scraper/dlgTrailer.Designer.vb new file mode 100644 index 0000000..1865dbc --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/dlgTrailer.Designer.vb @@ -0,0 +1,279 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(290, 339) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(74, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(369, 339) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(411, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(424, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(112, 82) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(120, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(411, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(376, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(365, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(72, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(392, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(153, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 339) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(106, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(207, 339) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(77, 23) + Me.btnSetNfo.TabIndex = 4 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(444, 331) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(450, 366) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lbTrailers As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnPlayTrailer As System.Windows.Forms.Button + Friend WithEvents btnSetNfo As System.Windows.Forms.Button + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtYouTube As System.Windows.Forms.TextBox + Friend WithEvents btnBrowse As System.Windows.Forms.Button + Friend WithEvents txtManual As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog + Friend WithEvents btnGetTrailers As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.TMDB.Poster/Scraper/dlgTrailer.resx b/Addons/scraper.TMDB.Poster/Scraper/dlgTrailer.resx new file mode 100644 index 0000000..2be3cac --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/dlgTrailer.resx @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnGetTrailers.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAGHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3NPsx9OAAAB80lEQVQ4T6XTTWsTQRgH8EGr9GDFm19AseDBgzc9eba0FJqvIOTiRase + RAIKtRo9LbbxpYmtggXR2KRFqGLfDio9tDGbdUMrbvc1+57sioiVv7NDLE3MXnTgz8DsPr95dpglAMj/ + pKVY17QuyzLP2raVoBlybHvIc92EUKmcidukBTBrtasUAC0GLWYJggaWl5dw9056uBPSAtDi8aiYAY4N + 13HwLQyxuLiAW6OjyIyPXW5H2gFuZ/cm4HseNFVFsTCD2WIRHz+8P7cb6Qjs7iDqIkLCMEC97kedZWMB + egasA8s24TsBQm8bob8N3w3YZzUzFgsYus6ZZo0WhPisvMackGQR5Dm2xnDLjAdUVeF0XUPD/Yl31eu4 + sURY3orXaDe/EOGGoccDsrzFKYoMz/yON0IaqYVDLPPCTdTtH6D3BKqixANfNjc5SZJga3XMlm5jeP4w + S6E0AsdoQJFlbElSPMCXy/ekDQUTK1eQzB/B+cJxlmT+KB6sXID61UBVFDOxh7i+tjbCf+KxXl7FpZeD + SOR6WS6+6EepsgpREFHh+XRHYC8hB/r7+k7kshOZ/PSrZ7mn2cnTqd7qqdSxjUdPHk7NPC9OT00+vj84 + MHByDyEH/yA7F4kC+wgh3dGDaDTnHkK6etrWuum7+/8C/vWX/g1N2vpUAmZdeAAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnPlayTrailer.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAACwwAAAsMAT9AIsgAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfZBBoSIQHX+6QX + AAACOElEQVQ4T7WSTWvaQRCHozlYNQSiVXwBNSSKKAhqKogo2hx8OeUQpPVY9OBFId+g0IufoQnegslF + EEG8qAgeiij4hohoDjkphJAIGg/udGepfyLV3rowLDu788zs/GZv73+st7e35NPT069KpfJaLpdnj4+P + nel0+p3mOvhnvoeHh0+j0WieTCbB6XSSYDAIoVAIXC4Xicfj0Ov1IJ/Pf9kKweBisQharZbY7XbweDxg + sVjg7OwM8Ix2enpK7u/v4e7u7ttfEJp5QZ3k8PAQ1Go1hMNhyGazIJFIQKVSMd/R0RHgm2azCQqFQsNB + FovFFZZLHZz5fD7AlU6nmY/H43F3NpsNWq3WLQeYz+d1JL8H4BfW6+bmZgOO77rd7isHqNfrM3Ty+XzY + 399n5vV6WfxqtWL79fX1RiWlUgnPHxlkDRAKhSASiUAsFoPf72eBhBAGeXl5AZlMBgKBgIGoxLirGOD5 + +blL/0iwSVKpFORyOVxcXHAV0HtUhzUUm4yATqezpPsHBphMJj8uLy9BqVSCRqOB4+NjiEQiDICZUU6d + TseUQLjb7YZqtVp6L+UBlREBxGg0soBoNArL5RJQDavVCmazGecAKyTtdhtOTk68G7OQy+W+1mo1MJlM + hE4hA2BV5+fnLKPD4QC9Xk8KhQKkUqmfW6cxk8nE6ERCIpFgkxgIBFgzERCLxWAwGOwOXhPpPzWNRuN2 + PB7P+v0+oA2HwyWVrWIwGD5vzbzDyaN++R+phLsCfwMUR2eb8uMbUAAAAABJRU5ErkJggg== +</value> + </data> + <metadata name="ofdTrailer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>40</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Scraper/dlgTrailer.vb b/Addons/scraper.TMDB.Poster/Scraper/dlgTrailer.vb new file mode 100644 index 0000000..d63ea34 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/dlgTrailer.vb @@ -0,0 +1,465 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI +Imports WatTmdb +Imports EmberScraperModule.EmberTMDBScraperModule + +Public Class dlgTrailer + +#Region "Fields" + + Private _MySettings As New sMySettings + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + + Friend WithEvents bwCompileList As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwDownloadTrailer As New System.ComponentModel.BackgroundWorker + + Private cTrailer As Trailers + Private imdbID As String = String.Empty + Private prePath As String = String.Empty + Private sPath As String = String.Empty + Private tArray As New List(Of String) + Private tURL As String = String.Empty + +#End Region 'Fields + +#Region "Methods" + + Public Sub New(ByRef tTMDBConf As V3.TmdbConfiguration, ByRef tTMDBConfE As V3.TmdbConfiguration, ByRef tTMDBApi As V3.Tmdb, ByRef tTMDBApiE As V3.Tmdb, ByRef tMySettings As EmberTMDBScraperModule.sMySettings) + + ' This call is required by the designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + _MySettings = TMySettings + _TMDBApi = tTMDBApi + _TMDBConf = tTMDBConf + _TMDBApiE = tTMDBApiE + _TMDBConfE = tTMDBConfE + cTrailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + End Sub + + Public Overloads Function ShowDialog(ByVal _imdbID As String, ByVal _sPath As String) As String + Me.imdbID = _imdbID + Me.sPath = _sPath + + If MyBase.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + Return Replace(Me.tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + Return Me.tURL + End If + Else + Return String.Empty + End If + End Function + + Protected Overrides Sub Finalize() + cTrailer = Nothing + MyBase.Finalize() + End Sub + + Private Sub BeginDownload(ByVal CloseDialog As Boolean) + Dim didCancel As Boolean = False + + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(56, "Downloading selected trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + If CloseDialog Then + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, Path.GetFileName(Me.prePath)) + FileUtils.Common.MoveFileWithStream(Me.prePath, Me.tURL) + + File.Delete(Me.prePath) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.prePath, """")) + didCancel = True + End If + ElseIf Me.txtManual.Text.Length > 0 Then + Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + If CloseDialog Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.txtManual.Text, """")) + didCancel = True + End If + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + didCancel = True + End If + ElseIf Regex.IsMatch(Me.txtYouTube.Text, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.txtYouTube.Text) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + ElseIf StringUtils.isValidURL(Me.txtYouTube.Text) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = Me.txtYouTube.Text, .bType = CloseDialog}) + Else + If Regex.IsMatch(Me.lbTrailers.SelectedItem.ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.lbTrailers.SelectedItem.ToString) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + Else + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = lbTrailers.SelectedItem.ToString, .bType = CloseDialog}) + End If + End If + + If didCancel Then + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + End Sub + + Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click + Try + With ofdTrailer + .InitialDirectory = Directory.GetParent(Master.currMovie.Filename).FullName + .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.ValidExts.ToArray(), ";*")) + .FilterIndex = 0 + End With + + If ofdTrailer.ShowDialog() = DialogResult.OK Then + txtManual.Text = ofdTrailer.FileName + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub btnGetTrailers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTrailers.Click + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.pnlStatus.Visible = True + + Me.bwCompileList = New System.ComponentModel.BackgroundWorker + Me.bwCompileList.WorkerSupportsCancellation = True + Me.bwCompileList.RunWorkerAsync() + End Sub + + Private Sub btnPlayTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayTrailer.Click + Try + Me.BeginDownload(False) + Catch + MsgBox(Master.eLang.GetString(58, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), MsgBoxStyle.Critical, Master.eLang.GetString(59, "Error Playing Trailer")) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Try + End Sub + + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click + + If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(62, "Moving specified file to trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + File.Move(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + Else + Dim didCancel As Boolean = False + + If StringUtils.isValidURL(Me.txtYouTube.Text) Then + tURL = Me.txtYouTube.Text + ElseIf Me.lbTrailers.SelectedItems.Count > 0 Then + tURL = lbTrailers.SelectedItem.ToString + Else + didCancel = True + End If + + If Not didCancel Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + + End Sub + + Private Sub bwCompileList_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwCompileList.DoWork + Try + tArray = cTrailer.GetTrailers(Me.imdbID, False) + + If Me.bwCompileList.CancellationPending Then + e.Cancel = True + End If + Catch + End Try + End Sub + + Private Sub bwCompileList_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwCompileList.RunWorkerCompleted + If Not e.Cancelled Then + If Me.tArray.Count > 0 Then + For Each tTrail As String In Me.tArray + Me.lbTrailers.Items.Add(tTrail) + Next + + Me.btnGetTrailers.Visible = False + Else + Me.btnGetTrailers.Enabled = False + End If + + End If + + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Sub + + Private Sub bwDownloadTrailer_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTrailer.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + + If Args.bType Then + Me.tURL = cTrailer.DownloadTrailer(Me.sPath, Args.Parameter) + Else + Me.prePath = cTrailer.DownloadTrailer(Path.Combine(Master.TempPath, Path.GetFileName(Me.sPath)), Args.Parameter) + End If + + Catch + End Try + + e.Result = Args.bType + + If Me.bwDownloadTrailer.CancellationPending Then + e.Cancel = True + End If + End Sub + + Private Sub bwDownloadTrailer_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwDownloadTrailer.ProgressChanged + pbStatus.Value = e.ProgressPercentage + End Sub + + Private Sub bwDownloadTrailer_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadTrailer.RunWorkerCompleted + If Not e.Cancelled Then + If Convert.ToBoolean(e.Result) Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + If Not String.IsNullOrEmpty(Me.prePath) Then System.Diagnostics.Process.Start(String.Concat("""", prePath, """")) + End If + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.cTrailer.Cancel() + + If Me.bwCompileList.IsBusy Then Me.bwCompileList.CancelAsync() + If Me.bwDownloadTrailer.IsBusy Then Me.bwDownloadTrailer.CancelAsync() + + While Me.bwCompileList.IsBusy OrElse Me.bwDownloadTrailer.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + AddHandler cTrailer.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + + Private Sub dlgTrailer_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub DownloadProgressUpdated(ByVal iProgress As Integer) + bwDownloadTrailer.ReportProgress(iProgress) + End Sub + + Private Sub lbTrailers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbTrailers.SelectedIndexChanged + Me.SetEnabled(True) + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.BeginDownload(True) + End Sub + + Private Sub SetEnabled(ByVal DeletePre As Boolean) + If DeletePre AndAlso Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + File.Delete(Me.prePath) + Me.prePath = String.Empty + End If + + If StringUtils.isValidURL(Me.txtYouTube.Text) OrElse Me.lbTrailers.SelectedItems.Count > 0 OrElse Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Enabled = True + Me.btnSetNfo.Enabled = True + Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") + Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") + Else + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + Else + Me.OK_Button.Enabled = False + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnPlayTrailer.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(64, "Select Trailer") + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.GroupBox1.Text = Master.eLang.GetString(65, "Select Trailer to Download") + Me.GroupBox2.Text = Master.eLang.GetString(66, "Manual Trailer Entry") + Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") + Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") + Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") + End Sub + + Private Sub txtManual_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtManual.TextChanged + Me.SetEnabled(True) + End Sub + + Private Sub txtYouTube_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtYouTube.TextChanged + Me.SetEnabled(True) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim bType As Boolean + Dim Parameter As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.TMDB.Poster/Scraper/dlgTrailerFormat.Designer.vb new file mode 100644 index 0000000..22f1374 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/dlgTrailerFormat.Designer.vb @@ -0,0 +1,155 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailerFormat + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(84, 117) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(154, 117) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(17, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(78, 69) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(53, 2) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(114, 100) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(10, 29) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.pnlStatus) + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(2, 4) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(220, 111) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 143) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lstFormats As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.TMDB.Poster/Scraper/dlgTrailerFormat.resx b/Addons/scraper.TMDB.Poster/Scraper/dlgTrailerFormat.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/dlgTrailerFormat.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/Scraper/dlgTrailerFormat.vb b/Addons/scraper.TMDB.Poster/Scraper/dlgTrailerFormat.vb new file mode 100644 index 0000000..8f0ad6e --- /dev/null +++ b/Addons/scraper.TMDB.Poster/Scraper/dlgTrailerFormat.vb @@ -0,0 +1,114 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTrailerFormat + +#Region "Fields" + + Private WithEvents YouTube As YouTube.Scraper + Private _selectedformaturl As String + Private _yturl As String + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal YTURL As String) As String + Me._yturl = YTURL + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return _selectedformaturl + Else + Return String.Empty + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailerFormat_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + Me.SetUp() + + lstFormats.DataSource = Nothing + + YouTube = New YouTube.Scraper + YouTube.GetVideoLinksAsync(Me._yturl) + + Catch ex As Exception + MsgBox(Master.eLang.GetString(71, "The video format links could not be retrieved."), MsgBoxStyle.Critical, Master.eLang.GetString(72, "Error Retrieving Video Format Links")) + End Try + End Sub + + Private Sub lstFormats_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFormats.SelectedIndexChanged + Try + Me._selectedformaturl = DirectCast(lstFormats.SelectedItem, YouTube.VideoLinkItem).URL + + If Me.lstFormats.SelectedItems.Count > 0 Then + Me.OK_Button.Enabled = True + Else + Me.OK_Button.Enabled = False + End If + Catch + End Try + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(73, "Select Format") + Me.lblStatus.Text = Master.eLang.GetString(74, "Getting available formats...") + Me.GroupBox1.Text = Master.eLang.GetString(75, "Available Formats") + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub YouTube_VideoLinksRetrieved(ByVal bSuccess As Boolean) Handles YouTube.VideoLinksRetrieved + Try + + If bSuccess Then + lstFormats.DataSource = YouTube.VideoLinks.Values.ToList + lstFormats.DisplayMember = "Description" + lstFormats.ValueMember = "URL" + + If YouTube.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + Me.lstFormats.SelectedIndex = YouTube.VideoLinks.IndexOfKey(Master.eSettings.PreferredTrailerQuality) + ElseIf Me.lstFormats.Items.Count = 1 Then + Me.lstFormats.SelectedIndex = 0 + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + Me.pnlStatus.Visible = False + Me.lstFormats.Enabled = True + End Try + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/frmTMDBInfoSettingsHolder.Designer.vb b/Addons/scraper.TMDB.Poster/frmTMDBInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..f610c2c --- /dev/null +++ b/Addons/scraper.TMDB.Poster/frmTMDBInfoSettingsHolder.Designer.vb @@ -0,0 +1,545 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTMDBInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.chkFallBackEng = New System.Windows.Forms.CheckBox() + Me.cbTMDBPrefLanguage = New System.Windows.Forms.ComboBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtTMDBApiKey = New System.Windows.Forms.TextBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.txtFANARTTVApiKey = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.pbTMDB = New System.Windows.Forms.PictureBox() + Me.pbFANARTTV = New System.Windows.Forms.PictureBox() + Me.GroupBox30.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + Me.GroupBox1.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.pbTMDB) + Me.GroupBox30.Controls.Add(Me.chkFallBackEng) + Me.GroupBox30.Controls.Add(Me.cbTMDBPrefLanguage) + Me.GroupBox30.Controls.Add(Me.Label3) + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtTMDBApiKey) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(309, 123) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "TMDB" + ' + 'chkFallBackEng + ' + Me.chkFallBackEng.AutoSize = True + Me.chkFallBackEng.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFallBackEng.Location = New System.Drawing.Point(8, 100) + Me.chkFallBackEng.Name = "chkFallBackEng" + Me.chkFallBackEng.Size = New System.Drawing.Size(129, 17) + Me.chkFallBackEng.TabIndex = 4 + Me.chkFallBackEng.Text = "Fall back on english" + Me.chkFallBackEng.UseVisualStyleBackColor = True + ' + 'cbTMDBPrefLanguage + ' + Me.cbTMDBPrefLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTMDBPrefLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTMDBPrefLanguage.FormattingEnabled = True + Me.cbTMDBPrefLanguage.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTMDBPrefLanguage.Location = New System.Drawing.Point(123, 65) + Me.cbTMDBPrefLanguage.Name = "cbTMDBPrefLanguage" + Me.cbTMDBPrefLanguage.Size = New System.Drawing.Size(45, 21) + Me.cbTMDBPrefLanguage.TabIndex = 3 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label3.Location = New System.Drawing.Point(6, 68) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(111, 13) + Me.Label3.TabIndex = 2 + Me.Label3.Text = "Preferred Language:" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(79, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "TMDB API Key:" + ' + 'txtTMDBApiKey + ' + Me.txtTMDBApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTMDBApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtTMDBApiKey.Name = "txtTMDBApiKey" + Me.txtTMDBApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtTMDBApiKey.TabIndex = 1 + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pbFANARTTV) + Me.GroupBox1.Controls.Add(Me.Label5) + Me.GroupBox1.Controls.Add(Me.txtFANARTTVApiKey) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(8, 169) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(309, 71) + Me.GroupBox1.TabIndex = 75 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Fanart.tv" + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.Location = New System.Drawing.Point(6, 18) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(94, 13) + Me.Label5.TabIndex = 0 + Me.Label5.Text = "Fanart.tv API Key:" + ' + 'txtFANARTTVApiKey + ' + Me.txtFANARTTVApiKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtFANARTTVApiKey.Location = New System.Drawing.Point(8, 32) + Me.txtFANARTTVApiKey.Name = "txtFANARTTVApiKey" + Me.txtFANARTTVApiKey.Size = New System.Drawing.Size(273, 22) + Me.txtFANARTTVApiKey.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(323, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(283, 150) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(225, 17) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(52, 17) + Me.chkCrew.TabIndex = 19 + Me.chkCrew.Text = "Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(131, 123) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 89) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 72) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 89) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 123) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(131, 106) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 106) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 72) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'pbTMDB + ' + Me.pbTMDB.Image = CType(resources.GetObject("pbTMDB.Image"), System.Drawing.Image) + Me.pbTMDB.Location = New System.Drawing.Point(287, 34) + Me.pbTMDB.Name = "pbTMDB" + Me.pbTMDB.Size = New System.Drawing.Size(16, 16) + Me.pbTMDB.TabIndex = 5 + Me.pbTMDB.TabStop = False + ' + 'pbFANARTTV + ' + Me.pbFANARTTV.Image = CType(resources.GetObject("pbFANARTTV.Image"), System.Drawing.Image) + Me.pbFANARTTV.Location = New System.Drawing.Point(287, 34) + Me.pbFANARTTV.Name = "pbFANARTTV" + Me.pbFANARTTV.Size = New System.Drawing.Size(16, 16) + Me.pbFANARTTV.TabIndex = 6 + Me.pbFANARTTV.TabStop = False + ' + 'frmTMDBInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + CType(Me.pbTMDB, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbFANARTTV, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox + Friend WithEvents Label18 As System.Windows.Forms.Label + Friend WithEvents txtTMDBApiKey As System.Windows.Forms.TextBox + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents gbOptions As System.Windows.Forms.GroupBox + Friend WithEvents chkCountry As System.Windows.Forms.CheckBox + Friend WithEvents chkStudio As System.Windows.Forms.CheckBox + Friend WithEvents chkRuntime As System.Windows.Forms.CheckBox + Friend WithEvents chkOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkTagline As System.Windows.Forms.CheckBox + Friend WithEvents chkCast As System.Windows.Forms.CheckBox + Friend WithEvents chkVotes As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailer As System.Windows.Forms.CheckBox + Friend WithEvents chkRating As System.Windows.Forms.CheckBox + Friend WithEvents chkRelease As System.Windows.Forms.CheckBox + Friend WithEvents chkMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkYear As System.Windows.Forms.CheckBox + Friend WithEvents chkTitle As System.Windows.Forms.CheckBox + Friend WithEvents chkFallBackEng As System.Windows.Forms.CheckBox + Friend WithEvents cbTMDBPrefLanguage As System.Windows.Forms.ComboBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents chkCrew As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label5 As System.Windows.Forms.Label + Friend WithEvents txtFANARTTVApiKey As System.Windows.Forms.TextBox + Friend WithEvents pbTMDB As System.Windows.Forms.PictureBox + Friend WithEvents pbFANARTTV As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.TMDB.Poster/frmTMDBInfoSettingsHolder.resx b/Addons/scraper.TMDB.Poster/frmTMDBInfoSettingsHolder.resx new file mode 100644 index 0000000..b1bac92 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/frmTMDBInfoSettingsHolder.resx @@ -0,0 +1,223 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="pbFANARTTV.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + RK5CYII= +</value> + </data> + <data name="pbTMDB.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T2P4//8/AyUYp2bhrrN6gl1nkgS7z6QLdZ21xWUJhgHS0++x8rWfXsXRfOI/S8Ox/yz1R/+zNx3/ + z9N++qxI13kpdIMwDOBpPDKHpfrgf4ayvf8ZK/bdZKzYf4ihfO9/psoD/7kajhxJPIPqZRQDhKp2C7AX + b//PnLf5P2v+lq0w21gLtvYy5235z1a07T9fxS4UV6AYIFi4mYctfdUztrSV/znTVujADGBPWzkLKP4f + KP6PK3utMLI3MLzAFTNXhCthoSZMEUfsvFaOuAX/OeLm/+eMmz+ZYBggK+AKnTKZK2zaf+7QKf+5wqYu + xxYTOKORz7dbm9e35z+vb/d/Xr/u2URHI0whn3NDIL9Lw38QlrQoYCfZAEHnej4hu8q1gnaVFfhSKk4v + iOpnyIoaZu0SMchaLmKQyUOyC0T1M4tE9dL+i+ql/xc3zHEkygBmBgZhIFZmYmBQ5RLR9RLWjL0hrBF1 + ko1bwhQorgHEKkAsBsRwl6N4ASjBDsR8QCwEVMMLxBxAzA7EAiAxIOYHYg6cBpCTrQErRGvnAPNv7gAA + AABJRU5ErkJggg== +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/frmTMDBInfoSettingsHolder.vb b/Addons/scraper.TMDB.Poster/frmTMDBInfoSettingsHolder.vb new file mode 100644 index 0000000..d17768a --- /dev/null +++ b/Addons/scraper.TMDB.Poster/frmTMDBInfoSettingsHolder.vb @@ -0,0 +1,218 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports System.Diagnostics + +Public Class frmTMDBInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + Public Event SetupNeedsRestart() + +#End Region 'Events + +#Region "Fields" + + Private Api1 As String + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Private Sub chkCrew_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFallBackEng_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkFallBackEng.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTMDBPrefLanguage_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cbTMDBPrefLanguage.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtFANARTTVApiKey_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtFANARTTVApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Enter + Api1 = txtTMDBApiKey.Text + End Sub + + Private Sub txtTMDBApiKey_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub txtTMDBApiKey_TextValidated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTMDBApiKey.Validated + If Not (Api1 = txtTMDBApiKey.Text) Then + RaiseEvent SetupNeedsRestart() + End If + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label18.Text = Master.eLang.GetString(854, "TMDB API Key:") + Me.gbOptions.Text = Master.eLang.GetString(6, "Scraper Fields - Scraper specific") + Me.chkStudio.Text = Master.eLang.GetString(395, "Studio", True) + Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime", True) + Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline", True) + Me.chkGenre.Text = Master.eLang.GetString(20, "Genres", True) + Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline", True) + Me.chkCast.Text = Master.eLang.GetString(856, "Cast and Crew", True) + Me.chkVotes.Text = Master.eLang.GetString(399, "Votes", True) + Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer", True) + Me.chkRating.Text = Master.eLang.GetString(400, "Rating", True) + Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date", True) + Me.chkMPAA.Text = Master.eLang.GetString(859, "MPAA & Certification", True) + Me.chkYear.Text = Master.eLang.GetString(278, "Year", True) + Me.chkTitle.Text = Master.eLang.GetString(21, "Title", True) + 'Me.chkCertification.Text = Master.eLang.GetString(722, "Certification", True) + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkFallBackEng.Text = Master.eLang.GetString(114, "Fall back on english") + Me.Label3.Text = Master.eLang.GetString(115, "Preferred Language:") + + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + +#End Region 'Methods + + Private Sub PictureBox2_Click(sender As System.Object, e As System.EventArgs) Handles pbTMDB.Click + If Master.isWindows Then + Process.Start("http://docs.themoviedb.apiary.io/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://docs.themoviedb.apiary.io/" + Explorer.Start() + End Using + End If + + End Sub + + Private Sub pbFANARTTV_Click(sender As System.Object, e As System.EventArgs) Handles pbFANARTTV.Click + If Master.isWindows Then + Process.Start("http://fanart.tv/get-an-api-key/") + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = "http://fanart.tv/get-an-api-key/" + Explorer.Start() + End Using + End If + + End Sub +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/frmTMDBMediaSettingsHolder.Designer.vb b/Addons/scraper.TMDB.Poster/frmTMDBMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..68e3c03 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/frmTMDBMediaSettingsHolder.Designer.vb @@ -0,0 +1,525 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTMDBMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTMDBMediaSettingsHolder)) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.chkUseFANARTTV = New System.Windows.Forms.CheckBox() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkUseMPDB = New System.Windows.Forms.CheckBox() + Me.chkUseIMDBp = New System.Windows.Forms.CheckBox() + Me.chkUseIMPA = New System.Windows.Forms.CheckBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.cbManualETSize = New System.Windows.Forms.ComboBox() + Me.grpSaveFanart = New System.Windows.Forms.GroupBox() + Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() + Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() + Me.chkScrapePoster = New System.Windows.Forms.CheckBox() + Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.txtTimeout = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() + Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox9.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.grpSaveFanart.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.GroupBox3) + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Panel2) + Me.pnlSettings.Location = New System.Drawing.Point(12, 4) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 94 + Me.PictureBox1.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.GroupBox6) + Me.GroupBox3.Controls.Add(Me.GroupBox9) + Me.GroupBox3.Controls.Add(Me.GroupBox4) + Me.GroupBox3.Controls.Add(Me.grpSaveFanart) + Me.GroupBox3.Controls.Add(Me.chkScrapePoster) + Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(15, 31) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(505, 154) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Images" + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.chkUseFANARTTV) + Me.GroupBox6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox6.Location = New System.Drawing.Point(331, 21) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(160, 55) + Me.GroupBox6.TabIndex = 96 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Get Fanart From:" + ' + 'chkUseFANARTTV + ' + Me.chkUseFANARTTV.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseFANARTTV.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseFANARTTV.Location = New System.Drawing.Point(6, 21) + Me.chkUseFANARTTV.Name = "chkUseFANARTTV" + Me.chkUseFANARTTV.Size = New System.Drawing.Size(150, 22) + Me.chkUseFANARTTV.TabIndex = 2 + Me.chkUseFANARTTV.Text = "fanart.tv" + Me.chkUseFANARTTV.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseFANARTTV.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkUseMPDB) + Me.GroupBox9.Controls.Add(Me.chkUseIMDBp) + Me.GroupBox9.Controls.Add(Me.chkUseIMPA) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(165, 19) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(160, 78) + Me.GroupBox9.TabIndex = 5 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Get Poster From:" + ' + 'chkUseMPDB + ' + Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) + Me.chkUseMPDB.Name = "chkUseMPDB" + Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) + Me.chkUseMPDB.TabIndex = 2 + Me.chkUseMPDB.Text = "MoviePosterDB.com" + Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.UseVisualStyleBackColor = True + ' + 'chkUseIMDBp + ' + Me.chkUseIMDBp.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMDBp.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMDBp.Location = New System.Drawing.Point(6, 18) + Me.chkUseIMDBp.Name = "chkUseIMDBp" + Me.chkUseIMDBp.Size = New System.Drawing.Size(149, 19) + Me.chkUseIMDBp.TabIndex = 0 + Me.chkUseIMDBp.Text = "IMDB.com" + Me.chkUseIMDBp.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMDBp.UseVisualStyleBackColor = True + ' + 'chkUseIMPA + ' + Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) + Me.chkUseIMPA.Name = "chkUseIMPA" + Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) + Me.chkUseIMPA.TabIndex = 1 + Me.chkUseIMPA.Text = "IMPAwards.com" + Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.UseVisualStyleBackColor = True + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.cbManualETSize) + Me.GroupBox4.Location = New System.Drawing.Point(331, 94) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(160, 55) + Me.GroupBox4.TabIndex = 4 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "TMDB Extrathumbs Size:" + ' + 'cbManualETSize + ' + Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbManualETSize.FormattingEnabled = True + Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) + Me.cbManualETSize.Location = New System.Drawing.Point(12, 21) + Me.cbManualETSize.Name = "cbManualETSize" + Me.cbManualETSize.Size = New System.Drawing.Size(131, 21) + Me.cbManualETSize.TabIndex = 0 + ' + 'grpSaveFanart + ' + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) + Me.grpSaveFanart.Enabled = False + Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) + Me.grpSaveFanart.Name = "grpSaveFanart" + Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) + Me.grpSaveFanart.TabIndex = 2 + Me.grpSaveFanart.TabStop = False + Me.grpSaveFanart.Text = "Save Fanart In:" + ' + 'optFanartFolderExtraFanart + ' + Me.optFanartFolderExtraFanart.AutoSize = True + Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) + Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" + Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) + Me.optFanartFolderExtraFanart.TabIndex = 1 + Me.optFanartFolderExtraFanart.TabStop = True + Me.optFanartFolderExtraFanart.Text = "\extrafanart" + Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True + ' + 'optFanartFolderExtraThumbs + ' + Me.optFanartFolderExtraThumbs.AutoSize = True + Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) + Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" + Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) + Me.optFanartFolderExtraThumbs.TabIndex = 0 + Me.optFanartFolderExtraThumbs.TabStop = True + Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" + Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True + ' + 'chkScrapePoster + ' + Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) + Me.chkScrapePoster.Name = "chkScrapePoster" + Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) + Me.chkScrapePoster.TabIndex = 0 + Me.chkScrapePoster.Text = "Get Posters" + Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.UseVisualStyleBackColor = True + ' + 'chkScrapeFanart + ' + Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) + Me.chkScrapeFanart.Name = "chkScrapeFanart" + Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) + Me.chkScrapeFanart.TabIndex = 1 + Me.chkScrapeFanart.Text = "Get Fanart" + Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox1.Controls.Add(Me.Label23) + Me.GroupBox1.Controls.Add(Me.txtTimeout) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(15, 203) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(464, 126) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Trailers" + Me.GroupBox1.UseCompatibleTextRendering = True + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label23.Location = New System.Drawing.Point(21, 43) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(51, 13) + Me.Label23.TabIndex = 1 + Me.Label23.Text = "Timeout:" + ' + 'txtTimeout + ' + Me.txtTimeout.Enabled = False + Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTimeout.Location = New System.Drawing.Point(82, 39) + Me.txtTimeout.Name = "txtTimeout" + Me.txtTimeout.Size = New System.Drawing.Size(50, 22) + Me.txtTimeout.TabIndex = 2 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) + Me.GroupBox2.Controls.Add(Me.GroupBox5) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(165, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(291, 104) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Supported Sites:" + ' + 'chkTrailerIMDB + ' + Me.chkTrailerIMDB.AutoSize = True + Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) + Me.chkTrailerIMDB.Name = "chkTrailerIMDB" + Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) + Me.chkTrailerIMDB.TabIndex = 5 + Me.chkTrailerIMDB.Text = "IMDB" + Me.chkTrailerIMDB.UseVisualStyleBackColor = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) + Me.GroupBox5.Controls.Add(Me.Label2) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) + Me.GroupBox5.Location = New System.Drawing.Point(123, 12) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(161, 83) + Me.GroupBox5.TabIndex = 4 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Youtube/TMDB Trailer:" + ' + 'cbTrailerTMDBPref + ' + Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerTMDBPref.Enabled = False + Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTrailerTMDBPref.FormattingEnabled = True + Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) + Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" + Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) + Me.cbTrailerTMDBPref.TabIndex = 1 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label2.Location = New System.Drawing.Point(26, 26) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(111, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Preferred Language:" + ' + 'chkTrailerTMDBXBMC + ' + Me.chkTrailerTMDBXBMC.AutoSize = True + Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) + Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" + Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) + Me.chkTrailerTMDBXBMC.TabIndex = 1 + Me.chkTrailerTMDBXBMC.Text = "XBMC Format" + Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True + ' + 'chkTrailerTMDB + ' + Me.chkTrailerTMDB.AutoSize = True + Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) + Me.chkTrailerTMDB.Name = "chkTrailerTMDB" + Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) + Me.chkTrailerTMDB.TabIndex = 0 + Me.chkTrailerTMDB.Text = "Youtube/TMDB" + Me.chkTrailerTMDB.UseVisualStyleBackColor = True + ' + 'Panel2 + ' + Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Controls.Add(Me.btnDown) + Me.Panel2.Controls.Add(Me.btnUp) + Me.Panel2.Controls.Add(Me.cbEnabled) + Me.Panel2.Location = New System.Drawing.Point(0, 0) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(1125, 25) + Me.Panel2.TabIndex = 0 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(500, 7) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 12) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'frmTMDBMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTMDBMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.grpSaveFanart.ResumeLayout(False) + Me.grpSaveFanart.PerformLayout() + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents chkScrapeFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkScrapePoster As System.Windows.Forms.CheckBox + Friend WithEvents chkDownloadTrailer As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Panel2 As System.Windows.Forms.Panel + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Label23 As System.Windows.Forms.Label + Friend WithEvents txtTimeout As System.Windows.Forms.TextBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents grpSaveFanart As System.Windows.Forms.GroupBox + Friend WithEvents optFanartFolderExtraFanart As System.Windows.Forms.RadioButton + Friend WithEvents optFanartFolderExtraThumbs As System.Windows.Forms.RadioButton + Friend WithEvents chkTrailerTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDBXBMC As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents cbManualETSize As System.Windows.Forms.ComboBox + Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox + Friend WithEvents cbTrailerTMDBPref As System.Windows.Forms.ComboBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox9 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseMPDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMDBp As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMPA As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerIMDB As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseFANARTTV As System.Windows.Forms.CheckBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/frmTMDBMediaSettingsHolder.resx b/Addons/scraper.TMDB.Poster/frmTMDBMediaSettingsHolder.resx new file mode 100644 index 0000000..3c46229 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/frmTMDBMediaSettingsHolder.resx @@ -0,0 +1,238 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/frmTMDBMediaSettingsHolder.vb b/Addons/scraper.TMDB.Poster/frmTMDBMediaSettingsHolder.vb new file mode 100644 index 0000000..6ccca98 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/frmTMDBMediaSettingsHolder.vb @@ -0,0 +1,165 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTMDBMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order + 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order - 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Sub CheckTrailer() + Me.txtTimeout.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDBXBMC.Enabled = Me.chkDownloadTrailer.Checked + If Not Me.chkDownloadTrailer.Checked Then + Me.txtTimeout.Text = "2" + Me.chkTrailerTMDB.Checked = False + Me.chkTrailerTMDBXBMC.Checked = False + End If + End Sub + + Private Sub chkDownloadTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDownloadTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + CheckTrailer() + End Sub + + Private Sub chkTrailerTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDB.CheckedChanged + chkTrailerTMDBXBMC.Enabled = chkTrailerTMDB.Checked + cbTrailerTMDBPref.Enabled = chkTrailerTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerIMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerTMDBXBMC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDBXBMC.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkScrapeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapeFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + grpSaveFanart.Enabled = chkScrapeFanart.Checked + End Sub + + Private Sub chkScrapePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapePoster.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseFANARTTV_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkUseFANARTTV.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMDBp_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkUseIMDBp.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMDBf_CheckedChanged(sender As System.Object, e As System.EventArgs) + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMPA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseIMPA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseMPDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseMPDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberTMDBScraperModule._AssemblyName).PostScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Sub SetUp() + Me.txtTimeout.Text = Master.eSettings.TrailerTimeout.ToString + Me.Label23.Text = Master.eLang.GetString(7, "Timeout:") + Me.GroupBox2.Text = Master.eLang.GetString(8, "Supported Sites:") + Me.grpSaveFanart.Text = Master.eLang.GetString(8001, "Save Fanart In:") + Me.chkDownloadTrailer.Text = Master.eLang.GetString(529, "Enable Trailer Support", True) + Me.Label3.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkScrapePoster.Text = Master.eLang.GetString(101, "Get Posters") + Me.chkScrapeFanart.Text = Master.eLang.GetString(102, "Get Fanart") + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + + Private Sub txtTimeout_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTimeout.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraThumbs_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraThumbs.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbManualETSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbManualETSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTrailerTMDBPref_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbTrailerTMDBPref.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/packages.config b/Addons/scraper.TMDB.Poster/packages.config new file mode 100644 index 0000000..9d72b1b --- /dev/null +++ b/Addons/scraper.TMDB.Poster/packages.config @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="RestSharp" version="104.1" targetFramework="net35" /> + <package id="SharpZipLib" version="0.86.0" /> +</packages> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/scraper.TMDB.Poster.vbproj b/Addons/scraper.TMDB.Poster/scraper.TMDB.Poster.vbproj new file mode 100644 index 0000000..c31d3a8 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/scraper.TMDB.Poster.vbproj @@ -0,0 +1,287 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{2B684C20-7E1A-4DA0-8C26-96DA1407B2C3}</ProjectGuid> + <OutputType>Library</OutputType> + <RootNamespace>EmberScraperModule</RootNamespace> + <AssemblyName>scraper.TMDB.Poster</AssemblyName> + <FileAlignment>512</FileAlignment> + <MyType>Windows</MyType> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <OptionExplicit>On</OptionExplicit> + <OptionCompare>Binary</OptionCompare> + <OptionStrict>On</OptionStrict> + <OptionInfer>On</OptionInfer> + <FileUpgradeFlags> + </FileUpgradeFlags> + <OldToolsVersion>3.5</OldToolsVersion> + <UpgradeBackupLocation /> + <PublishUrl>publish\</PublishUrl> + <Install>true</Install> + <InstallFrom>Disk</InstallFrom> + <UpdateEnabled>false</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>false</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> + <RestorePackages>true</RestorePackages> + <SccProjectName> + </SccProjectName> + <SccLocalPath> + </SccLocalPath> + <SccAuxPath> + </SccAuxPath> + <SccProvider> + </SccProvider> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> + <DebugSymbols>true</DebugSymbols> + <DefineDebug>true</DefineDebug> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Dev\Modules\</OutputPath> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Deploy\Modules\</OutputPath> + <Optimize>true</Optimize> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <ItemGroup> + <Reference Include="ICSharpCode.SharpZipLib"> + <HintPath>..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> + </Reference> + <Reference Include="RestSharp"> + <HintPath>..\..\packages\RestSharp.104.1\lib\net35\RestSharp.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Import Include="Microsoft.VisualBasic" /> + <Import Include="System" /> + <Import Include="System.Collections" /> + <Import Include="System.Collections.Generic" /> + <Import Include="System.Drawing" /> + <Import Include="System.Linq" /> + <Import Include="System.Web" /> + <Import Include="System.Windows.Forms" /> + <Import Include="System.Xml.Linq" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Scraper\clsScrapeIMPA.vb" /> + <Compile Include="Scraper\clsScrapeMPDB.vb" /> + <Compile Include="Scraper\clsScrapeOFDB.vb" /> + <Compile Include="Scraper\clsScrapeTMDB.vb" /> + <Compile Include="Scraper\clsScrapeTrailers.vb" /> + <Compile Include="Scraper\clsScrapeImages.vb" /> + <Compile Include="Scraper\clsScrapeTMDBg.vb" /> + <Compile Include="Scraper\clsScrapeYouTube.vb" /> + <Compile Include="Scraper\clsScrapeIMDB.vb" /> + <Compile Include="Scraper\clsScrapeFANARTTV.vb" /> + <Compile Include="Scraper\dlgTMDBSearchResults.Designer.vb"> + <DependentUpon>dlgTMDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTMDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgImgSelect.Designer.vb"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgImgSelect.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailer.Designer.vb"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailer.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.Designer.vb"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmTMDBMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmTMDBMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTMDBMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="My Project\AssemblyInfo.vb" /> + <Compile Include="My Project\Application.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Application.myapp</DependentUpon> + </Compile> + <Compile Include="My Project\Resources.Designer.vb"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> + <Compile Include="My Project\Settings.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Settings.settings</DependentUpon> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + </Compile> + <Compile Include="frmTMDBInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmTMDBInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTMDBInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperMovieTMDBModule.vb" /> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="Scraper\dlgTMDBSearchResults.resx"> + <DependentUpon>dlgTMDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgImgSelect.resx"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailer.resx"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailerFormat.resx"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTMDBMediaSettingsHolder.resx"> + <DependentUpon>frmTMDBMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTMDBInfoSettingsHolder.resx"> + <DependentUpon>frmTMDBInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="My Project\Resources.resx"> + <Generator>VbMyResourcesResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.vb</LastGenOutput> + <CustomToolNamespace>My.Resources</CustomToolNamespace> + <SubType>Designer</SubType> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <None Include="My Project\Application.myapp"> + <Generator>MyApplicationCodeGenerator</Generator> + <LastGenOutput>Application.Designer.vb</LastGenOutput> + </None> + <None Include="My Project\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <CustomToolNamespace>My</CustomToolNamespace> + <LastGenOutput>Settings.Designer.vb</LastGenOutput> + </None> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\EmberAPI\EmberAPI.vbproj"> + <Project>{208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}</Project> + <Name>EmberAPI</Name> + <Private>False</Private> + </ProjectReference> + <ProjectReference Include="..\..\FanartTVAPI\FanartTVAPI.csproj"> + <Project>{70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}</Project> + <Name>FanartTVAPI</Name> + </ProjectReference> + <ProjectReference Include="..\..\WatTmdb\WatTmdb.csproj"> + <Project>{EFC11645-FAB4-4C30-A498-29F5ECDF77E8}</Project> + <Name>WatTmdb</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="Langs\scraper.EmberCore.TMDB.Debug_%28db_DB%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.English_%28en_US%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.English_%28en_US%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.German_%28de_DE%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.German_%28de_DE%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.Norwegian_%28no_NO%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.TMDB.Norwegian_%28no_NO%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + </ItemGroup> + <ItemGroup /> + <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <PropertyGroup> + <PreBuildEvent> + </PreBuildEvent> + </PropertyGroup> + <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> +</Project> \ No newline at end of file diff --git a/Addons/scraper.TMDB.Poster/scraperMovieTMDBModule.vb b/Addons/scraper.TMDB.Poster/scraperMovieTMDBModule.vb new file mode 100644 index 0000000..7ac1344 --- /dev/null +++ b/Addons/scraper.TMDB.Poster/scraperMovieTMDBModule.vb @@ -0,0 +1,761 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI +Imports RestSharp +Imports WatTmdb +Imports EmberScraperModule.TMDBg + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberTMDBScraperModule + Implements Interfaces.EmberMovieScraperModule + + +#Region "Fields" + + Public Shared ConfigOptions As New Structures.ScrapeOptions + Public Shared ConfigScrapeModifier As New Structures.ScrapeModifier + Public Shared _AssemblyName As String + + Private dFImgSelect As dlgImgSelect = Nothing + + Private TMDBId As String + 'Private IMDBid As String + + ''' <summary> + ''' Scraping Here + ''' </summary> + ''' <remarks></remarks> + Private _MySettings As New sMySettings + Private _TMDBg As TMDBg.Scraper + Private _Name As String = "Ember TMDB Movie Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmTMDBInfoSettingsHolder + Private _setupPost As frmTMDBMediaSettingsHolder + Private _TMDBConf As V3.TmdbConfiguration + Private _TMDBConfE As V3.TmdbConfiguration + Private _TMDBApi As V3.Tmdb + Private _TMDBApiE As V3.Tmdb + +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberMovieScraperModule.ModuleSettingsChanged + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsScraper + Get + Return True + End Get + End Property + + ReadOnly Property ModuleName() As String Implements Interfaces.EmberMovieScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberMovieScraperModule.ModuleVersion + Get + Return System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Property PostScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Property ScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean Implements Interfaces.EmberMovieScraperModule.QueryPostScraperCapabilities + Select Case cap + Case Enums.PostScraperCapabilities.Fanart + Return True + Case Enums.PostScraperCapabilities.Poster + Return True + Case Enums.PostScraperCapabilities.Trailer + If _MySettings.DownloadTrailers Then Return True + End Select + Return False + End Function + + Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.DownloadTrailer + Using dTrailer As New dlgTrailer(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + sURL = dTrailer.ShowDialog(DBMovie.Movie.TMDBID, DBMovie.Filename) + End Using + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef studio As List(Of String)) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.GetMovieStudio + '' perche' lo crea? + + ''Dim TMDBg As New TMDBg.Scraper + ''TMDBg.IMDBURL = MySettings.IMDBURL + studio = _TMDBg.GetMovieStudios(DBMovie.Movie.ID) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupNeedsRestart() + RaiseEvent SetupNeedsRestart() + End Sub + + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + + Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberMovieScraperModule.Init + _AssemblyName = sAssemblyName + LoadSettings() + 'Must be after Load settings to retrieve the correct API key + _TMDBApi = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey, _MySettings.TMDBLanguage) + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Info") + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + End If + End If + _TMDBConf = _TMDBApi.GetConfiguration() + _TMDBApiE = New WatTmdb.V3.Tmdb(_MySettings.TMDBAPIKey) + _TMDBConfE = _TMDBApiE.GetConfiguration() + _TMDBg = New TMDBg.Scraper(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + + End Sub + + Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupPostScraper + Dim Spanel As New Containers.SettingsPanel + _setupPost = New frmTMDBMediaSettingsHolder + LoadSettings() + _setupPost.cbEnabled.Checked = _PostScraperEnabled + _setupPost.chkTrailerIMDB.Checked = _MySettings.UseIMDBTrailer + _setupPost.chkTrailerTMDB.Checked = _MySettings.UseTMDBTrailer + _setupPost.cbTrailerTMDBPref.Text = _MySettings.UseTMDBTrailerPref + _setupPost.chkTrailerTMDBXBMC.Checked = _MySettings.UseTMDBTrailerXBMC + _setupPost.chkScrapePoster.Checked = ConfigScrapeModifier.Poster + _setupPost.chkScrapeFanart.Checked = ConfigScrapeModifier.Fanart + _setupPost.chkUseIMDBp.Checked = _MySettings.UseIMDB + _setupPost.chkUseIMPA.Checked = _MySettings.UseIMPA + _setupPost.chkUseMPDB.Checked = _MySettings.UseMPDB + _setupPost.chkUseFANARTTV.Checked = _MySettings.UseFANARTTV + + ' ad size from TMDB + '_setupPost.cbManualETSize.Items.Clear() + 'If Not IsNothing(_TMDBg.TMDBConf.images) Then + ' For Each aSi In _TMDBg.TMDBConf.images.poster_sizes + ' _setupPost.cbManualETSize.Items.Add(aSi) + ' Next + ' + 'End If + _setupPost.cbManualETSize.Text = _MySettings.ManualETSize + + _setupPost.txtTimeout.Text = _MySettings.TrailerTimeout.ToString + _setupPost.chkDownloadTrailer.Checked = _MySettings.DownloadTrailers + _setupPost.CheckTrailer() + _setupPost.orderChanged() + Spanel.Name = String.Concat(Me._Name, "PostScraper") + Spanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + Spanel.Prefix = "TMDBMovieMedia_" + Spanel.Order = 110 + Spanel.Parent = "pnlMovieMedia" + Spanel.Type = Master.eLang.GetString(36, "Movies", True) + Spanel.ImageIndex = If(Me._PostScraperEnabled, 9, 10) + Spanel.Panel = Me._setupPost.pnlSettings + + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return Spanel + End Function + + Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmTMDBInfoSettingsHolder + LoadSettings() + _setup.cbEnabled.Checked = _ScraperEnabled + _setup.chkTitle.Checked = ConfigOptions.bTitle + _setup.chkYear.Checked = ConfigOptions.bYear + _setup.chkMPAA.Checked = ConfigOptions.bMPAA + _setup.chkRelease.Checked = ConfigOptions.bRelease + _setup.chkRuntime.Checked = ConfigOptions.bRuntime + _setup.chkRating.Checked = ConfigOptions.bRating + _setup.chkVotes.Checked = ConfigOptions.bVotes + _setup.chkStudio.Checked = ConfigOptions.bStudio + _setup.chkTagline.Checked = ConfigOptions.bTagline + _setup.chkOutline.Checked = ConfigOptions.bOutline + _setup.chkCast.Checked = ConfigOptions.bFullCast + _setup.chkGenre.Checked = ConfigOptions.bGenre + _setup.chkTrailer.Checked = ConfigOptions.bTrailer + _setup.chkCountry.Checked = ConfigOptions.bCountry + _setup.chkCrew.Checked = ConfigOptions.bFullCrew + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + + '_setup.chkCertification.Checked = ConfigOptions.bCert + + If String.IsNullOrEmpty(_MySettings.TMDBAPIKey) Then + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + _setup.txtTMDBApiKey.Text = _MySettings.TMDBAPIKey + _setup.cbTMDBPrefLanguage.Text = _MySettings.TMDBLanguage + _setup.chkFallBackEng.Checked = _MySettings.FallBackEng + _setup.orderChanged() + If String.IsNullOrEmpty(_MySettings.FANARTTVApiKey) Then + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _setup.txtFANARTTVApiKey.Text = _MySettings.FANARTTVApiKey + + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(104, "Ember TMDB Movie Scrapers") + SPanel.Prefix = "TMDBMovieInfo_" + SPanel.Order = 110 + SPanel.Parent = "pnlMovieData" + SPanel.Type = Master.eLang.GetString(36, "Movies", True) + SPanel.ImageIndex = If(_ScraperEnabled, 9, 10) + SPanel.Panel = _setup.pnlSettings + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + AddHandler _setup.SetupNeedsRestart, AddressOf Handle_SetupNeedsRestart + Return SPanel + End Function + + Sub LoadSettings() + ConfigOptions.bTitle = AdvancedSettings.GetBooleanSetting("DoTitle", True) + ConfigOptions.bYear = AdvancedSettings.GetBooleanSetting("DoYear", True) + ConfigOptions.bMPAA = AdvancedSettings.GetBooleanSetting("DoMPAA", True) + ConfigOptions.bRelease = AdvancedSettings.GetBooleanSetting("DoRelease", True) + ConfigOptions.bRuntime = AdvancedSettings.GetBooleanSetting("DoRuntime", True) + ConfigOptions.bRating = AdvancedSettings.GetBooleanSetting("DoRating", True) + ConfigOptions.bVotes = AdvancedSettings.GetBooleanSetting("DoVotes", True) + ConfigOptions.bStudio = AdvancedSettings.GetBooleanSetting("DoStudio", True) + ConfigOptions.bTagline = AdvancedSettings.GetBooleanSetting("DoTagline", True) + ConfigOptions.bOutline = AdvancedSettings.GetBooleanSetting("DoOutline", True) + ConfigOptions.bPlot = AdvancedSettings.GetBooleanSetting("DoPlot", True) + ConfigOptions.bCast = AdvancedSettings.GetBooleanSetting("DoCast", True) + ConfigOptions.bDirector = AdvancedSettings.GetBooleanSetting("DoDirector", True) + ConfigOptions.bWriters = AdvancedSettings.GetBooleanSetting("DoWriters", True) + ConfigOptions.bProducers = AdvancedSettings.GetBooleanSetting("DoProducers", True) + ConfigOptions.bGenre = AdvancedSettings.GetBooleanSetting("DoGenres", True) + ConfigOptions.bTrailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + ConfigOptions.bMusicBy = AdvancedSettings.GetBooleanSetting("DoMusic", True) + ConfigOptions.bOtherCrew = AdvancedSettings.GetBooleanSetting("DoOtherCrews", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("DoFullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("DoFullCrews", True) + ConfigOptions.bTop250 = AdvancedSettings.GetBooleanSetting("DoTop250", True) + ConfigOptions.bCountry = AdvancedSettings.GetBooleanSetting("DoCountry", True) + ConfigOptions.bCert = AdvancedSettings.GetBooleanSetting("DoCert", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("FullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("FullCrew", True) + + _MySettings.TMDBAPIKey = AdvancedSettings.GetSetting("TMDBAPIKey", "Get your API Key from http://www.themoviedb.org") + _MySettings.FANARTTVApiKey = AdvancedSettings.GetSetting("FANARTTVApiKey", "Get your API Key from http://fanart.tv") + _MySettings.FallBackEng = AdvancedSettings.GetBooleanSetting("FallBackEn", False) + _MySettings.TMDBLanguage = AdvancedSettings.GetSetting("TMDBLanguage", "en") + _MySettings.DownloadTrailers = AdvancedSettings.GetBooleanSetting("DownloadTraliers", False) + + _MySettings.TrailerTimeout = Convert.ToInt32(AdvancedSettings.GetSetting("TrailerTimeout", "10")) + _MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) + _MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) + _MySettings.UseIMPA = AdvancedSettings.GetBooleanSetting("UseIMPA", False) + _MySettings.UseMPDB = AdvancedSettings.GetBooleanSetting("UseMPDB", False) + _MySettings.UseIMDB = AdvancedSettings.GetBooleanSetting("UseIMDB", False) + _MySettings.UseFANARTTV = AdvancedSettings.GetBooleanSetting("UseFANARTTV", False) + _MySettings.UseIMDBTrailer = AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", True) + _MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + _MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) + + ConfigScrapeModifier.DoSearch = True + ConfigScrapeModifier.Meta = True + ConfigScrapeModifier.NFO = True + ConfigScrapeModifier.Extra = True + ConfigScrapeModifier.Actors = True + + ConfigScrapeModifier.Poster = AdvancedSettings.GetBooleanSetting("DoPoster", True) + ConfigScrapeModifier.Fanart = AdvancedSettings.GetBooleanSetting("DoFanart", True) + ConfigScrapeModifier.Trailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + End Sub + + Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.PostScraper + 'LoadSettings() + Dim Poster As New Images + Dim Fanart As New Images + Dim pResults As Containers.ImgResult + Dim fResults As Containers.ImgResult + Dim tURL As String = String.Empty + Dim Trailer As Trailers + Dim aScrapeImages As ScrapeImages + + LoadSettings() + If String.IsNullOrEmpty(DBMovie.Movie.TMDBID) Then + _TMDBg.GetMovieID(DBMovie) + End If + Trailer = New Trailers(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + Dim saveModifier As Structures.ScrapeModifier = Master.GlobalScrapeMod + Master.GlobalScrapeMod = Functions.ScrapeModifierAndAlso(Master.GlobalScrapeMod, ConfigScrapeModifier) + + Dim doSave As Boolean = False + + aScrapeImages = New ScrapeImages(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + If Master.GlobalScrapeMod.Poster Then + Poster.Clear() + If Poster.IsAllowedToDownload(DBMovie, Enums.ImageType.Posters) Then + pResults = New Containers.ImgResult + If aScrapeImages.GetPreferredImage(Poster, DBMovie.Movie.ID, DBMovie.Movie.TMDBID, Enums.ImageType.Posters, pResults, DBMovie.Filename, False, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Poster.Image) Then + pResults.ImagePath = Poster.SaveAsPoster(DBMovie) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(76, "A poster of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size")) + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApi, _MySettings) + pResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Posters) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + End Using + End If + End If + End If + End If + Dim didEts As Boolean + If Master.GlobalScrapeMod.Fanart Then + Fanart.Clear() + If Fanart.IsAllowedToDownload(DBMovie, Enums.ImageType.Fanart) Then + fResults = New Containers.ImgResult + didEts = True + If aScrapeImages.GetPreferredImage(Fanart, DBMovie.Movie.IMDBID, DBMovie.Movie.TMDBID, Enums.ImageType.Fanart, fResults, DBMovie.Filename, Master.GlobalScrapeMod.Extra, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Fanart.Image) Then + fResults.ImagePath = Fanart.SaveAsFanart(DBMovie) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) ' + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(78, "Fanart of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size:")) + + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApi, _MySettings) + fResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Fanart) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + End Using + End If + End If + End If + End If + If Master.GlobalScrapeMod.Trailer AndAlso _MySettings.DownloadTrailers Then + tURL = Trailer.DownloadSingleTrailer(DBMovie.Filename, DBMovie.Movie.TMDBID, DBMovie.isSingle, DBMovie.Movie.Trailer) + If Not String.IsNullOrEmpty(tURL) Then + If tURL.Substring(0, 22) = "http://www.youtube.com" Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + DBMovie.Movie.Trailer = Replace(tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + DBMovie.Movie.Trailer = tURL + End If + ElseIf tURL.Substring(0, 7) = "http://" Then + DBMovie.Movie.Trailer = tURL + Else + DBMovie.TrailerPath = tURL + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.TrailerItem, True) + End If + End If + End If + If Master.GlobalScrapeMod.Extra Then + If Master.eSettings.AutoET AndAlso DBMovie.isSingle Then + Try + aScrapeImages.GetPreferredFAasET(DBMovie.Movie.TMDBID, DBMovie.Filename) + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.ThumbsItem, True) + Catch ex As Exception + End Try + End If + End If + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then + For Each act As MediaContainers.Person In DBMovie.Movie.Actors + Dim img As New Images + img.FromWeb(act.Thumb) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If + Next + End If + Master.GlobalScrapeMod = saveModifier + Return New Interfaces.ModuleResult With {.breakChain = False, .BoolProperty = didEts} + End Function + + Sub SaveSettings() + AdvancedSettings.SetBooleanSetting("DoFullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("DoFullCrews", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DoTitle", ConfigOptions.bTitle) + AdvancedSettings.SetBooleanSetting("DoYear", ConfigOptions.bYear) + AdvancedSettings.SetBooleanSetting("DoMPAA", ConfigOptions.bMPAA) + AdvancedSettings.SetBooleanSetting("DoRelease", ConfigOptions.bRelease) + AdvancedSettings.SetBooleanSetting("DoRuntime", ConfigOptions.bRuntime) + AdvancedSettings.SetBooleanSetting("DoRating", ConfigOptions.bRating) + AdvancedSettings.SetBooleanSetting("DoVotes", ConfigOptions.bVotes) + AdvancedSettings.SetBooleanSetting("DoStudio", ConfigOptions.bStudio) + AdvancedSettings.SetBooleanSetting("DoTagline", ConfigOptions.bTagline) + AdvancedSettings.SetBooleanSetting("DoOutline", ConfigOptions.bOutline) + AdvancedSettings.SetBooleanSetting("DoPlot", ConfigOptions.bPlot) + AdvancedSettings.SetBooleanSetting("DoCast", ConfigOptions.bCast) + AdvancedSettings.SetBooleanSetting("DoDirector", ConfigOptions.bDirector) + AdvancedSettings.SetBooleanSetting("DoWriters", ConfigOptions.bWriters) + AdvancedSettings.SetBooleanSetting("DoProducers", ConfigOptions.bProducers) + AdvancedSettings.SetBooleanSetting("DoGenres", ConfigOptions.bGenre) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigOptions.bTrailer) + AdvancedSettings.SetBooleanSetting("DoMusic", ConfigOptions.bMusicBy) + AdvancedSettings.SetBooleanSetting("DoOtherCrews", ConfigOptions.bOtherCrew) + AdvancedSettings.SetBooleanSetting("DoCountry", ConfigOptions.bCountry) + AdvancedSettings.SetBooleanSetting("DoTop250", ConfigOptions.bTop250) + AdvancedSettings.SetBooleanSetting("DoCert", ConfigOptions.bCert) + + AdvancedSettings.SetBooleanSetting("FullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("FullCrew", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DownloadTraliers", _MySettings.DownloadTrailers) + + AdvancedSettings.SetSetting("TrailerTimeout", _MySettings.TrailerTimeout.ToString) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailer", _MySettings.UseTMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", _MySettings.UseTMDBTrailerXBMC) + AdvancedSettings.SetBooleanSetting("UseIMDBTrailer", _MySettings.UseIMDBTrailer) + + AdvancedSettings.SetSetting("ManualETSize", _MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("UseTMDBTrailerPref", _MySettings.UseTMDBTrailerPref.ToString) + + AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) + AdvancedSettings.SetBooleanSetting("DoFanart", ConfigScrapeModifier.Fanart) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigScrapeModifier.Trailer) + + AdvancedSettings.SetSetting("TMDBAPIKey", _MySettings.TMDBAPIKey) + AdvancedSettings.SetSetting("FANARTTVApiKey", _MySettings.FANARTTVApiKey) + AdvancedSettings.SetBooleanSetting("FallBackEn", _MySettings.FallBackEng) + AdvancedSettings.SetSetting("TMDBLanguage", _MySettings.TMDBLanguage) + AdvancedSettings.SetBooleanSetting("UseIMPA", _MySettings.UseIMPA) + AdvancedSettings.SetBooleanSetting("UseMPDB", _MySettings.UseMPDB) + AdvancedSettings.SetBooleanSetting("UseIMDB", _MySettings.UseIMDB) + AdvancedSettings.SetBooleanSetting("UseFANARTTV", _MySettings.UseFANARTTV) + End Sub + + Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupPostScraper + _MySettings.DownloadTrailers = _setupPost.chkDownloadTrailer.Checked + _MySettings.UseIMDBTrailer = _setupPost.chkTrailerIMDB.Checked + _MySettings.UseTMDBTrailer = _setupPost.chkTrailerTMDB.Checked + _MySettings.UseTMDBTrailerXBMC = _setupPost.chkTrailerTMDBXBMC.Checked + _MySettings.TrailerTimeout = Convert.ToInt32(_setupPost.txtTimeout.Text) + _MySettings.ManualETSize = _setupPost.cbManualETSize.Text + _MySettings.UseTMDBTrailerPref = _setupPost.cbTrailerTMDBPref.Text + _MySettings.UseIMDB = _setupPost.chkUseIMDBp.Checked + _MySettings.UseIMPA = _setupPost.chkUseIMPA.Checked + _MySettings.UseMPDB = _setupPost.chkUseMPDB.Checked + _MySettings.UseFANARTTV = _setupPost.chkUseFANARTTV.Checked + ConfigScrapeModifier.Poster = _setupPost.chkScrapePoster.Checked + ConfigScrapeModifier.Fanart = _setupPost.chkScrapeFanart.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + RemoveHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + _setupPost.Dispose() + End If + End Sub + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupScraper + If Not String.IsNullOrEmpty(_setup.txtTMDBApiKey.Text) Then + _MySettings.TMDBAPIKey = _setup.txtTMDBApiKey.Text + Else + _MySettings.TMDBAPIKey = Master.eLang.GetString(122, "Get your API Key from www.themoviedb.org") + End If + If Not String.IsNullOrEmpty(_setup.txtFANARTTVApiKey.Text) Then + _MySettings.FANARTTVApiKey = _setup.txtFANARTTVApiKey.Text + Else + _MySettings.FANARTTVApiKey = Master.eLang.GetString(123, "Get your API Key from fanart.tv") + End If + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + ConfigOptions.bTitle = _setup.chkTitle.Checked + ConfigOptions.bYear = _setup.chkYear.Checked + ConfigOptions.bMPAA = _setup.chkMPAA.Checked + ConfigOptions.bRelease = _setup.chkRelease.Checked + ConfigOptions.bRuntime = _setup.chkRuntime.Checked + ConfigOptions.bRating = _setup.chkRating.Checked + ConfigOptions.bVotes = _setup.chkVotes.Checked + ConfigOptions.bStudio = _setup.chkStudio.Checked + ConfigOptions.bTagline = _setup.chkTagline.Checked + ConfigOptions.bOutline = _setup.chkOutline.Checked + ConfigOptions.bPlot = False + ConfigOptions.bCast = _setup.chkCast.Checked + ConfigOptions.bDirector = _setup.chkCrew.Checked + ConfigOptions.bWriters = _setup.chkCrew.Checked + ConfigOptions.bProducers = _setup.chkCrew.Checked + ConfigOptions.bGenre = _setup.chkGenre.Checked + ConfigOptions.bTrailer = _setup.chkTrailer.Checked + ConfigOptions.bMusicBy = _setup.chkCrew.Checked + ConfigOptions.bOtherCrew = _setup.chkCrew.Checked + ConfigOptions.bCountry = _setup.chkCountry.Checked + ConfigOptions.bTop250 = False + ConfigOptions.bFullCrew = _setup.chkCrew.Checked + ConfigOptions.bFullCast = _setup.chkCast.Checked + ConfigOptions.bCert = ConfigOptions.bMPAA + _MySettings.FallBackEng = _setup.chkFallBackEng.Checked + _MySettings.TMDBLanguage = _setup.cbTMDBPrefLanguage.Text + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + RemoveHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + _setup.Dispose() + End If + End Sub + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.Scraper + 'LoadSettings() + ''TMDBg.IMDBURL = MySettings.IMDBURL + ''TMDBg.UseOFDBTitle = MySettings.UseOFDBTitle + ''TMDBg.UseOFDBOutline = MySettings.UseOFDBOutline + ''TMDBg.UseOFDBPlot = MySettings.UseOFDBPlot + ''TMDBg.UseOFDBGenre = MySettings.UseOFDBGenre + Dim tTitle As String = String.Empty + Dim OldTitle As String = DBMovie.Movie.Title + + If IsNothing(_TMDBApi) Then + Master.eLog.WriteToErrorLog(Master.eLang.GetString(119, "TheMovieDB API is missing or not valid"), _TMDBApi.Error.status_message, "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + Else + If Not IsNothing(_TMDBApi.Error) AndAlso _TMDBApi.Error.status_message.Length > 0 Then + Master.eLog.WriteToErrorLog(_TMDBApi.Error.status_message, _TMDBApi.Error.status_code.ToString(), "Error") + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + + If Master.GlobalScrapeMod.NFO AndAlso Not Master.GlobalScrapeMod.DoSearch Then + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, Options.bFullCrew, Options.bFullCast, False, Options, False) + ElseIf Not ScrapeType = Enums.ScrapeType.SingleScrape Then + DBMovie.Movie = _TMDBg.GetSearchMovieInfo(DBMovie.Movie.Title, DBMovie, ScrapeType, Options) + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + If ScrapeType = Enums.ScrapeType.SingleScrape AndAlso Master.GlobalScrapeMod.DoSearch _ + AndAlso ModulesManager.Instance.externalScrapersModules.OrderBy(Function(y) y.ScraperOrder).FirstOrDefault(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled).AssemblyName = _AssemblyName Then + DBMovie.Movie.IMDBID = String.Empty + DBMovie.ClearExtras = True + DBMovie.PosterPath = String.Empty + DBMovie.FanartPath = String.Empty + DBMovie.TrailerPath = String.Empty + DBMovie.ExtraPath = String.Empty + DBMovie.SubPath = String.Empty + DBMovie.NfoPath = String.Empty + DBMovie.Movie.Clear() + End If + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + Select Case ScrapeType + Case Enums.ScrapeType.FilterAuto, Enums.ScrapeType.FullAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.UpdateAuto + Return New Interfaces.ModuleResult With {.breakChain = False} + End Select + If ScrapeType = Enums.ScrapeType.SingleScrape Then + Using dSearch As New dlgTMDBSearchResults(_MySettings, Me._TMDBg) + '' dSearch.IMDBURL = MySettings.IMDBURL + Dim tmpTitle As String = DBMovie.Movie.Title + If String.IsNullOrEmpty(tmpTitle) Then + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name, False) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name, False) + Else + tmpTitle = StringUtils.FilterName(If(DBMovie.isSingle, Directory.GetParent(DBMovie.Filename).Name, Path.GetFileNameWithoutExtension(DBMovie.Filename))) + End If + End If + Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) + If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID + End If + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + + Master.currMovie.ClearExtras = True + Master.currMovie.PosterPath = String.Empty + Master.currMovie.FanartPath = String.Empty + Master.currMovie.TrailerPath = String.Empty + Master.currMovie.ExtraPath = String.Empty + Master.currMovie.SubPath = String.Empty + Master.currMovie.NfoPath = String.Empty + + + _TMDBg.GetMovieInfo(DBMovie.Movie.ID, DBMovie.Movie, filterOptions.bFullCrew, filterOptions.bFullCast, False, filterOptions, False) + End If + Else + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End Using + End If + End If + + If Not String.IsNullOrEmpty(DBMovie.Movie.Title) Then + tTitle = StringUtils.FilterTokens(DBMovie.Movie.Title) + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = tTitle + If Master.eSettings.DisplayYear AndAlso Not String.IsNullOrEmpty(DBMovie.Movie.Year) Then + DBMovie.ListTitle = String.Format("{0} ({1})", tTitle, DBMovie.Movie.Year) + Else + DBMovie.ListTitle = tTitle + End If + Else + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name) + Else + If DBMovie.UseFolder AndAlso DBMovie.isSingle Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(DBMovie.Filename).Name) + Else + DBMovie.ListTitle = StringUtils.FilterName(Path.GetFileNameWithoutExtension(DBMovie.Filename)) + End If + End If + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = DBMovie.ListTitle + End If + + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function SelectImageOfType(ByRef mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.SelectImageOfType + If String.IsNullOrEmpty(mMovie.Movie.TMDBID) Then + _TMDBg.GetMovieID(mMovie) + End If + If preload AndAlso _DLType = Enums.ImageType.Fanart AndAlso Not IsNothing(dFImgSelect) Then + pResults = dFImgSelect.ShowDialog() + dFImgSelect = Nothing + Else + Using dImgSelect As New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + If preload Then + dFImgSelect = New dlgImgSelect(_TMDBConf, _TMDBConfE, _TMDBApi, _TMDBApiE, _MySettings) + dFImgSelect.PreLoad(mMovie, Enums.ImageType.Fanart, _isEdit) + End If + '' dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(mMovie, _DLType, _isEdit) + End Using + End If + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + Public Sub PostScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.PostScraperOrderChanged + _setup.orderChanged() + End Sub + + Public Sub ScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.ScraperOrderChanged + _setupPost.orderChanged() + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Structure sMySettings + +#Region "Fields" + Dim DownloadTrailers As Boolean + Dim TrailerTimeout As Integer + Dim UseTMDBTrailer As Boolean + Dim UseTMDBTrailerXBMC As Boolean + Dim ManualETSize As String + Dim UseTMDBTrailerPref As String + Dim TMDBAPIKey As String + Dim FANARTTVApiKey As String + Dim TMDBLanguage As String + Dim FallBackEng As Boolean + Dim UseIMDB As Boolean + Dim UseIMPA As Boolean + Dim UseMPDB As Boolean + Dim UseFANARTTV As Boolean + Dim UseIMDBTrailer As Boolean +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/AssemblyInfo.vb b/Addons/scraper.TVDB.Data/AssemblyInfo.vb new file mode 100644 index 0000000..1b59a44 --- /dev/null +++ b/Addons/scraper.TVDB.Data/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.EmberCore")> +<Assembly: AssemblyDescription("www.embermm.com")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.EmberCore")> +<Assembly: AssemblyCopyright("Copyright © 2011")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("4c4e9cbd-06e2-44ed-bbed-0f51f6c3f4ef")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.5")> +<Assembly: AssemblyFileVersion("1.3.0.5")> diff --git a/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.Debug_(db_DB).xml b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.Debug_(db_DB).xml new file mode 100644 index 0000000..0fba5b0 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.Debug_(db_DB).xml @@ -0,0 +1,902 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="1">native1</string> + <string id="2">native2</string> + <string id="3">native3</string> + <string id="4">native4</string> + <string id="5">native5</string> + <string id="6">native6</string> + <string id="7">native7</string> + <string id="8">native8</string> + <string id="9">native9</string> + <string id="10">native10</string> + <string id="11">native11</string> + <string id="12">native12</string> + <string id="13">native13</string> + <string id="14">native14</string> + <string id="15">native15</string> + <string id="16">native16</string> + <string id="17">native17</string> + <string id="18">native18</string> + <string id="19">native19</string> + <string id="20">native20</string> + <string id="21">native21</string> + <string id="22">native22</string> + <string id="23">native23</string> + <string id="24">native24</string> + <string id="25">native25</string> + <string id="26">native26</string> + <string id="27">native27</string> + <string id="28">native28</string> + <string id="29">native29</string> + <string id="30">native30</string> + <string id="31">native31</string> + <string id="32">native32</string> + <string id="33">native33</string> + <string id="34">native34</string> + <string id="35">native35</string> + <string id="36">native36</string> + <string id="37">native37</string> + <string id="38">native38</string> + <string id="39">native39</string> + <string id="40">native40</string> + <string id="41">native41</string> + <string id="42">native42</string> + <string id="43">native43</string> + <string id="44">native44</string> + <string id="45">native45</string> + <string id="46">native46</string> + <string id="47">native47</string> + <string id="48">native48</string> + <string id="49">native49</string> + <string id="50">native50</string> + <string id="51">native51</string> + <string id="52">native52</string> + <string id="53">native53</string> + <string id="54">native54</string> + <string id="55">native55</string> + <string id="56">native56</string> + <string id="57">native57</string> + <string id="58">native58</string> + <string id="59">native59</string> + <string id="60">native60</string> + <string id="61">native61</string> + <string id="62">native62</string> + <string id="63">native63</string> + <string id="64">native64</string> + <string id="65">native65</string> + <string id="66">native66</string> + <string id="67">native67</string> + <string id="68">native68</string> + <string id="69">native69</string> + <string id="70">native70</string> + <string id="71">native71</string> + <string id="72">native72</string> + <string id="73">native73</string> + <string id="74">native74</string> + <string id="75">native75</string> + <string id="76">native76</string> + <string id="77">native77</string> + <string id="78">native78</string> + <string id="79">native79</string> + <string id="80">native80</string> + <string id="81">native81</string> + <string id="82">native82</string> + <string id="83">native83</string> + <string id="84">native84</string> + <string id="85">native85</string> + <string id="86">native86</string> + <string id="87">native87</string> + <string id="88">native88</string> + <string id="89">native89</string> + <string id="90">native90</string> + <string id="91">native91</string> + <string id="92">native92</string> + <string id="93">native93</string> + <string id="94">native94</string> + <string id="95">native95</string> + <string id="96">native96</string> + <string id="97">native97</string> + <string id="98">native98</string> + <string id="99">native99</string> + <string id="100">native100</string> + <string id="101">native101</string> + <string id="102">native102</string> + <string id="103">native103</string> + <string id="104">native104</string> + <string id="105">native105</string> + <string id="106">native106</string> + <string id="107">native107</string> + <string id="108">native108</string> + <string id="109">native109</string> + <string id="110">native110</string> + <string id="111">native111</string> + <string id="112">native112</string> + <string id="113">native113</string> + <string id="114">native114</string> + <string id="115">native115</string> + <string id="116">native116</string> + <string id="117">native117</string> + <string id="118">native118</string> + <string id="119">native119</string> + <string id="120">native120</string> + <string id="121">native121</string> + <string id="122">native122</string> + <string id="123">native123</string> + <string id="124">native124</string> + <string id="125">native125</string> + <string id="126">native126</string> + <string id="127">native127</string> + <string id="128">native128</string> + <string id="129">native129</string> + <string id="130">native130</string> + <string id="131">native131</string> + <string id="132">native132</string> + <string id="133">native133</string> + <string id="134">native134</string> + <string id="135">native135</string> + <string id="136">native136</string> + <string id="137">native137</string> + <string id="138">native138</string> + <string id="139">native139</string> + <string id="140">native140</string> + <string id="141">native141</string> + <string id="142">native142</string> + <string id="143">native143</string> + <string id="144">native144</string> + <string id="145">native145</string> + <string id="146">native146</string> + <string id="147">native147</string> + <string id="148">native148</string> + <string id="149">native149</string> + <string id="150">native150</string> + <string id="151">native151</string> + <string id="152">native152</string> + <string id="153">native153</string> + <string id="154">native154</string> + <string id="155">native155</string> + <string id="156">native156</string> + <string id="157">native157</string> + <string id="158">native158</string> + <string id="159">native159</string> + <string id="160">native160</string> + <string id="161">native161</string> + <string id="162">native162</string> + <string id="163">native163</string> + <string id="164">native164</string> + <string id="165">native165</string> + <string id="166">native166</string> + <string id="167">native167</string> + <string id="168">native168</string> + <string id="169">native169</string> + <string id="170">native170</string> + <string id="171">native171</string> + <string id="172">native172</string> + <string id="173">native173</string> + <string id="174">native174</string> + <string id="175">native175</string> + <string id="176">native176</string> + <string id="177">native177</string> + <string id="178">native178</string> + <string id="179">native179</string> + <string id="180">native180</string> + <string id="181">native181</string> + <string id="182">native182</string> + <string id="183">native183</string> + <string id="184">native184</string> + <string id="185">native185</string> + <string id="186">native186</string> + <string id="187">native187</string> + <string id="188">native188</string> + <string id="189">native189</string> + <string id="190">native190</string> + <string id="191">native191</string> + <string id="192">native192</string> + <string id="193">native193</string> + <string id="194">native194</string> + <string id="195">native195</string> + <string id="196">native196</string> + <string id="197">native197</string> + <string id="198">native198</string> + <string id="199">native199</string> + <string id="200">native200</string> + <string id="201">native201</string> + <string id="202">native202</string> + <string id="203">native203</string> + <string id="204">native204</string> + <string id="205">native205</string> + <string id="206">native206</string> + <string id="207">native207</string> + <string id="208">native208</string> + <string id="209">native209</string> + <string id="210">native210</string> + <string id="211">native211</string> + <string id="212">native212</string> + <string id="213">native213</string> + <string id="214">native214</string> + <string id="215">native215</string> + <string id="216">native216</string> + <string id="217">native217</string> + <string id="218">native218</string> + <string id="219">native219</string> + <string id="220">native220</string> + <string id="221">native221</string> + <string id="222">native222</string> + <string id="223">native223</string> + <string id="224">native224</string> + <string id="225">native225</string> + <string id="226">native226</string> + <string id="227">native227</string> + <string id="228">native228</string> + <string id="229">native229</string> + <string id="230">native230</string> + <string id="231">native231</string> + <string id="232">native232</string> + <string id="233">native233</string> + <string id="234">native234</string> + <string id="235">native235</string> + <string id="236">native236</string> + <string id="237">native237</string> + <string id="238">native238</string> + <string id="239">native239</string> + <string id="240">native240</string> + <string id="241">native241</string> + <string id="242">native242</string> + <string id="243">native243</string> + <string id="244">native244</string> + <string id="245">native245</string> + <string id="246">native246</string> + <string id="247">native247</string> + <string id="248">native248</string> + <string id="249">native249</string> + <string id="250">native250</string> + <string id="251">native251</string> + <string id="252">native252</string> + <string id="253">native253</string> + <string id="254">native254</string> + <string id="255">native255</string> + <string id="256">native256</string> + <string id="257">native257</string> + <string id="258">native258</string> + <string id="259">native259</string> + <string id="260">native260</string> + <string id="261">native261</string> + <string id="262">native262</string> + <string id="263">native263</string> + <string id="264">native264</string> + <string id="265">native265</string> + <string id="266">native266</string> + <string id="267">native267</string> + <string id="268">native268</string> + <string id="269">native269</string> + <string id="270">native270</string> + <string id="271">native271</string> + <string id="272">native272</string> + <string id="273">native273</string> + <string id="274">native274</string> + <string id="275">native275</string> + <string id="276">native276</string> + <string id="277">native277</string> + <string id="278">native278</string> + <string id="279">native279</string> + <string id="280">native280</string> + <string id="281">native281</string> + <string id="282">native282</string> + <string id="283">native283</string> + <string id="284">native284</string> + <string id="285">native285</string> + <string id="286">native286</string> + <string id="287">native287</string> + <string id="288">native288</string> + <string id="289">native289</string> + <string id="290">native290</string> + <string id="291">native291</string> + <string id="292">native292</string> + <string id="293">native293</string> + <string id="294">native294</string> + <string id="295">native295</string> + <string id="296">native296</string> + <string id="297">native297</string> + <string id="298">native298</string> + <string id="299">native299</string> + <string id="300">native300</string> + <string id="301">native301</string> + <string id="302">native302</string> + <string id="303">native303</string> + <string id="304">native304</string> + <string id="305">native305</string> + <string id="306">native306</string> + <string id="307">native307</string> + <string id="308">native308</string> + <string id="309">native309</string> + <string id="310">native310</string> + <string id="311">native311</string> + <string id="312">native312</string> + <string id="313">native313</string> + <string id="314">native314</string> + <string id="315">native315</string> + <string id="316">native316</string> + <string id="317">native317</string> + <string id="318">native318</string> + <string id="319">native319</string> + <string id="320">native320</string> + <string id="321">native321</string> + <string id="322">native322</string> + <string id="323">native323</string> + <string id="324">native324</string> + <string id="325">native325</string> + <string id="326">native326</string> + <string id="327">native327</string> + <string id="328">native328</string> + <string id="329">native329</string> + <string id="330">native330</string> + <string id="331">native331</string> + <string id="332">native332</string> + <string id="333">native333</string> + <string id="334">native334</string> + <string id="335">native335</string> + <string id="336">native336</string> + <string id="337">native337</string> + <string id="338">native338</string> + <string id="339">native339</string> + <string id="340">native340</string> + <string id="341">native341</string> + <string id="342">native342</string> + <string id="343">native343</string> + <string id="344">native344</string> + <string id="345">native345</string> + <string id="346">native346</string> + <string id="347">native347</string> + <string id="348">native348</string> + <string id="349">native349</string> + <string id="350">native350</string> + <string id="351">native351</string> + <string id="352">native352</string> + <string id="353">native353</string> + <string id="354">native354</string> + <string id="355">native355</string> + <string id="356">native356</string> + <string id="357">native357</string> + <string id="358">native358</string> + <string id="359">native359</string> + <string id="360">native360</string> + <string id="361">native361</string> + <string id="362">native362</string> + <string id="363">native363</string> + <string id="364">native364</string> + <string id="365">native365</string> + <string id="366">native366</string> + <string id="367">native367</string> + <string id="368">native368</string> + <string id="369">native369</string> + <string id="370">native370</string> + <string id="371">native371</string> + <string id="372">native372</string> + <string id="373">native373</string> + <string id="374">native374</string> + <string id="375">native375</string> + <string id="376">native376</string> + <string id="377">native377</string> + <string id="378">native378</string> + <string id="379">native379</string> + <string id="380">native380</string> + <string id="381">native381</string> + <string id="382">native382</string> + <string id="383">native383</string> + <string id="384">native384</string> + <string id="385">native385</string> + <string id="386">native386</string> + <string id="387">native387</string> + <string id="388">native388</string> + <string id="389">native389</string> + <string id="390">native390</string> + <string id="391">native391</string> + <string id="392">native392</string> + <string id="393">native393</string> + <string id="394">native394</string> + <string id="395">native395</string> + <string id="396">native396</string> + <string id="397">native397</string> + <string id="398">native398</string> + <string id="399">native399</string> + <string id="400">native400</string> + <string id="401">native401</string> + <string id="402">native402</string> + <string id="403">native403</string> + <string id="404">native404</string> + <string id="405">native405</string> + <string id="406">native406</string> + <string id="407">native407</string> + <string id="408">native408</string> + <string id="409">native409</string> + <string id="410">native410</string> + <string id="411">native411</string> + <string id="412">native412</string> + <string id="413">native413</string> + <string id="414">native414</string> + <string id="415">native415</string> + <string id="416">native416</string> + <string id="417">native417</string> + <string id="418">native418</string> + <string id="419">native419</string> + <string id="420">native420</string> + <string id="421">native421</string> + <string id="422">native422</string> + <string id="423">native423</string> + <string id="424">native424</string> + <string id="425">native425</string> + <string id="426">native426</string> + <string id="427">native427</string> + <string id="428">native428</string> + <string id="429">native429</string> + <string id="430">native430</string> + <string id="431">native431</string> + <string id="432">native432</string> + <string id="433">native433</string> + <string id="434">native434</string> + <string id="435">native435</string> + <string id="436">native436</string> + <string id="437">native437</string> + <string id="438">native438</string> + <string id="439">native439</string> + <string id="440">native440</string> + <string id="441">native441</string> + <string id="442">native442</string> + <string id="443">native443</string> + <string id="444">native444</string> + <string id="445">native445</string> + <string id="446">native446</string> + <string id="447">native447</string> + <string id="448">native448</string> + <string id="449">native449</string> + <string id="450">native450</string> + <string id="451">native451</string> + <string id="452">native452</string> + <string id="453">native453</string> + <string id="454">native454</string> + <string id="455">native455</string> + <string id="456">native456</string> + <string id="457">native457</string> + <string id="458">native458</string> + <string id="459">native459</string> + <string id="460">native460</string> + <string id="461">native461</string> + <string id="462">native462</string> + <string id="463">native463</string> + <string id="464">native464</string> + <string id="465">native465</string> + <string id="466">native466</string> + <string id="467">native467</string> + <string id="468">native468</string> + <string id="469">native469</string> + <string id="470">native470</string> + <string id="471">native471</string> + <string id="472">native472</string> + <string id="473">native473</string> + <string id="474">native474</string> + <string id="475">native475</string> + <string id="476">native476</string> + <string id="477">native477</string> + <string id="478">native478</string> + <string id="479">native479</string> + <string id="480">native480</string> + <string id="481">native481</string> + <string id="482">native482</string> + <string id="483">native483</string> + <string id="484">native484</string> + <string id="485">native485</string> + <string id="486">native486</string> + <string id="487">native487</string> + <string id="488">native488</string> + <string id="489">native489</string> + <string id="490">native490</string> + <string id="491">native491</string> + <string id="492">native492</string> + <string id="493">native493</string> + <string id="494">native494</string> + <string id="495">native495</string> + <string id="496">native496</string> + <string id="497">native497</string> + <string id="498">native498</string> + <string id="499">native499</string> + <string id="500">native500</string> + <string id="501">native501</string> + <string id="502">native502</string> + <string id="503">native503</string> + <string id="504">native504</string> + <string id="505">native505</string> + <string id="506">native506</string> + <string id="507">native507</string> + <string id="508">native508</string> + <string id="509">native509</string> + <string id="510">native510</string> + <string id="511">native511</string> + <string id="512">native512</string> + <string id="513">native513</string> + <string id="514">native514</string> + <string id="515">native515</string> + <string id="516">native516</string> + <string id="517">native517</string> + <string id="518">native518</string> + <string id="519">native519</string> + <string id="520">native520</string> + <string id="521">native521</string> + <string id="522">native522</string> + <string id="523">native523</string> + <string id="524">native524</string> + <string id="525">native525</string> + <string id="526">native526</string> + <string id="527">native527</string> + <string id="528">native528</string> + <string id="529">native529</string> + <string id="530">native530</string> + <string id="531">native531</string> + <string id="532">native532</string> + <string id="533">native533</string> + <string id="534">native534</string> + <string id="535">native535</string> + <string id="536">native536</string> + <string id="537">native537</string> + <string id="538">native538</string> + <string id="539">native539</string> + <string id="540">native540</string> + <string id="541">native541</string> + <string id="542">native542</string> + <string id="543">native543</string> + <string id="544">native544</string> + <string id="545">native545</string> + <string id="546">native546</string> + <string id="547">native547</string> + <string id="548">native548</string> + <string id="549">native549</string> + <string id="550">native550</string> + <string id="551">native551</string> + <string id="552">native552</string> + <string id="553">native553</string> + <string id="554">native554</string> + <string id="555">native555</string> + <string id="556">native556</string> + <string id="557">native557</string> + <string id="558">native558</string> + <string id="559">native559</string> + <string id="560">native560</string> + <string id="561">native561</string> + <string id="562">native562</string> + <string id="563">native563</string> + <string id="564">native564</string> + <string id="565">native565</string> + <string id="566">native566</string> + <string id="567">native567</string> + <string id="568">native568</string> + <string id="569">native569</string> + <string id="570">native570</string> + <string id="571">native571</string> + <string id="572">native572</string> + <string id="573">native573</string> + <string id="574">native574</string> + <string id="575">native575</string> + <string id="576">native576</string> + <string id="577">native577</string> + <string id="578">native578</string> + <string id="579">native579</string> + <string id="580">native580</string> + <string id="581">native581</string> + <string id="582">native582</string> + <string id="583">native583</string> + <string id="584">native584</string> + <string id="585">native585</string> + <string id="586">native586</string> + <string id="587">native587</string> + <string id="588">native588</string> + <string id="589">native589</string> + <string id="590">native590</string> + <string id="591">native591</string> + <string id="592">native592</string> + <string id="593">native593</string> + <string id="594">native594</string> + <string id="595">native595</string> + <string id="596">native596</string> + <string id="597">native597</string> + <string id="598">native598</string> + <string id="599">native599</string> + <string id="600">native600</string> + <string id="601">native601</string> + <string id="602">native602</string> + <string id="603">native603</string> + <string id="604">native604</string> + <string id="605">native605</string> + <string id="606">native606</string> + <string id="607">native607</string> + <string id="608">native608</string> + <string id="609">native609</string> + <string id="610">native610</string> + <string id="611">native611</string> + <string id="612">native612</string> + <string id="613">native613</string> + <string id="614">native614</string> + <string id="615">native615</string> + <string id="616">native616</string> + <string id="617">native617</string> + <string id="618">native618</string> + <string id="619">native619</string> + <string id="620">native620</string> + <string id="621">native621</string> + <string id="622">native622</string> + <string id="623">native623</string> + <string id="624">native624</string> + <string id="625">native625</string> + <string id="626">native626</string> + <string id="627">native627</string> + <string id="628">native628</string> + <string id="629">native629</string> + <string id="630">native630</string> + <string id="631">native631</string> + <string id="632">native632</string> + <string id="633">native633</string> + <string id="634">native634</string> + <string id="635">native635</string> + <string id="636">native636</string> + <string id="637">native637</string> + <string id="638">native638</string> + <string id="639">native639</string> + <string id="640">native640</string> + <string id="641">native641</string> + <string id="642">native642</string> + <string id="643">native643</string> + <string id="644">native644</string> + <string id="645">native645</string> + <string id="646">native646</string> + <string id="647">native647</string> + <string id="648">native648</string> + <string id="649">native649</string> + <string id="650">native650</string> + <string id="651">native651</string> + <string id="652">native652</string> + <string id="653">native653</string> + <string id="654">native654</string> + <string id="655">native655</string> + <string id="656">native656</string> + <string id="657">native657</string> + <string id="658">native658</string> + <string id="659">native659</string> + <string id="660">native660</string> + <string id="661">native661</string> + <string id="662">native662</string> + <string id="663">native663</string> + <string id="664">native664</string> + <string id="665">native665</string> + <string id="666">native666</string> + <string id="667">native667</string> + <string id="668">native668</string> + <string id="669">native669</string> + <string id="670">native670</string> + <string id="671">native671</string> + <string id="672">native672</string> + <string id="673">native673</string> + <string id="674">native674</string> + <string id="675">native675</string> + <string id="676">native676</string> + <string id="677">native677</string> + <string id="678">native678</string> + <string id="679">native679</string> + <string id="680">native680</string> + <string id="681">native681</string> + <string id="682">native682</string> + <string id="683">native683</string> + <string id="684">native684</string> + <string id="685">native685</string> + <string id="686">native686</string> + <string id="687">native687</string> + <string id="688">native688</string> + <string id="689">native689</string> + <string id="690">native690</string> + <string id="691">native691</string> + <string id="692">native692</string> + <string id="693">native693</string> + <string id="694">native694</string> + <string id="695">native695</string> + <string id="696">native696</string> + <string id="697">native697</string> + <string id="698">native698</string> + <string id="699">native699</string> + <string id="700">native700</string> + <string id="701">native701</string> + <string id="702">native702</string> + <string id="703">native703</string> + <string id="704">native704</string> + <string id="705">native705</string> + <string id="706">native706</string> + <string id="707">native707</string> + <string id="708">native708</string> + <string id="709">native709</string> + <string id="710">native710</string> + <string id="711">native711</string> + <string id="712">native712</string> + <string id="713">native713</string> + <string id="714">native714</string> + <string id="715">native715</string> + <string id="716">native716</string> + <string id="717">native717</string> + <string id="718">native718</string> + <string id="719">native719</string> + <string id="720">native720</string> + <string id="721">native721</string> + <string id="722">native722</string> + <string id="723">native723</string> + <string id="724">native724</string> + <string id="725">native725</string> + <string id="726">native726</string> + <string id="727">native727</string> + <string id="728">native728</string> + <string id="729">native729</string> + <string id="730">native730</string> + <string id="731">native731</string> + <string id="732">native732</string> + <string id="733">native733</string> + <string id="734">native734</string> + <string id="735">native735</string> + <string id="736">native736</string> + <string id="737">native737</string> + <string id="738">native738</string> + <string id="739">native739</string> + <string id="740">native740</string> + <string id="741">native741</string> + <string id="742">native742</string> + <string id="743">native743</string> + <string id="744">native744</string> + <string id="745">native745</string> + <string id="746">native746</string> + <string id="747">native747</string> + <string id="748">native748</string> + <string id="749">native749</string> + <string id="750">native750</string> + <string id="751">native751</string> + <string id="752">native752</string> + <string id="753">native753</string> + <string id="754">native754</string> + <string id="755">native755</string> + <string id="756">native756</string> + <string id="757">native757</string> + <string id="758">native758</string> + <string id="759">native759</string> + <string id="760">native760</string> + <string id="761">native761</string> + <string id="762">native762</string> + <string id="763">native763</string> + <string id="764">native764</string> + <string id="765">native765</string> + <string id="766">native766</string> + <string id="767">native767</string> + <string id="768">native768</string> + <string id="769">native769</string> + <string id="770">native770</string> + <string id="771">native771</string> + <string id="772">native772</string> + <string id="773">native773</string> + <string id="774">native774</string> + <string id="775">native775</string> + <string id="776">native776</string> + <string id="777">native777</string> + <string id="778">native778</string> + <string id="779">native779</string> + <string id="780">native780</string> + <string id="781">native781</string> + <string id="782">native782</string> + <string id="783">native783</string> + <string id="784">native784</string> + <string id="785">native785</string> + <string id="786">native786</string> + <string id="787">native787</string> + <string id="788">native788</string> + <string id="789">native789</string> + <string id="790">native790</string> + <string id="791">native791</string> + <string id="792">native792</string> + <string id="793">native793</string> + <string id="794">native794</string> + <string id="795">native795</string> + <string id="796">native796</string> + <string id="797">native797</string> + <string id="798">native798</string> + <string id="799">native799</string> + <string id="800">native800</string> + <string id="801">native801</string> + <string id="802">native802</string> + <string id="803">native803</string> + <string id="804">native804</string> + <string id="805">native805</string> + <string id="806">native806</string> + <string id="807">native807</string> + <string id="808">native808</string> + <string id="809">native809</string> + <string id="810">native810</string> + <string id="811">native811</string> + <string id="812">native812</string> + <string id="813">native813</string> + <string id="814">native814</string> + <string id="815">native815</string> + <string id="816">native816</string> + <string id="817">native817</string> + <string id="818">native818</string> + <string id="819">native819</string> + <string id="820">native820</string> + <string id="821">native821</string> + <string id="822">native822</string> + <string id="823">native823</string> + <string id="824">native824</string> + <string id="825">native825</string> + <string id="826">native826</string> + <string id="827">native827</string> + <string id="828">native828</string> + <string id="829">native829</string> + <string id="830">native830</string> + <string id="831">native831</string> + <string id="832">native832</string> + <string id="833">native833</string> + <string id="834">native834</string> + <string id="835">native835</string> + <string id="836">native836</string> + <string id="837">native837</string> + <string id="838">native838</string> + <string id="839">native839</string> + <string id="840">native840</string> + <string id="841">native841</string> + <string id="842">native842</string> + <string id="843">native843</string> + <string id="844">native844</string> + <string id="845">native845</string> + <string id="846">native846</string> + <string id="847">native847</string> + <string id="848">native848</string> + <string id="849">native849</string> + <string id="850">native850</string> + <string id="851">native851</string> + <string id="852">native852</string> + <string id="853">native853</string> + <string id="854">native854</string> + <string id="855">native855</string> + <string id="856">native856</string> + <string id="857">native857</string> + <string id="858">native858</string> + <string id="859">native859</string> + <string id="860">native860</string> + <string id="861">native861</string> + <string id="862">native862</string> + <string id="863">native863</string> + <string id="864">native864</string> + <string id="865">native865</string> + <string id="866">native866</string> + <string id="867">native867</string> + <string id="868">native868</string> + <string id="869">native869</string> + <string id="870">native870</string> + <string id="871">native871</string> + <string id="872">native872</string> + <string id="873">native873</string> + <string id="874">native874</string> + <string id="875">native875</string> + <string id="876">native876</string> + <string id="877">native877</string> + <string id="878">native878</string> + <string id="879">native879</string> + <string id="880">native880</string> + <string id="881">native881</string> + <string id="882">native882</string> + <string id="883">native883</string> + <string id="884">native884</string> + <string id="885">native885</string> + <string id="886">native886</string> + <string id="887">native887</string> + <string id="888">native888</string> + <string id="889">native889</string> + <string id="890">native890</string> + <string id="891">native891</string> + <string id="892">native892</string> + <string id="893">native893</string> + <string id="894">native894</string> + <string id="895">native895</string> + <string id="896">native896</string> + <string id="897">native897</string> + <string id="898">native898</string> + <string id="899">native899</string> + <string id="900">native900</string> +</strings> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.English_(en_US)-Help.xml b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.English_(en_US)-Help.xml new file mode 100644 index 0000000..1705beb --- /dev/null +++ b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.English_(en_US)-Help.xml @@ -0,0 +1,45 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="NativeMovieInfo_cbEnabled">Enable or disable this module.</string> + <string control="NativeMovieInfo_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieInfo_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieInfo_txtIMDBURL">Enter the mirror to use when retrieving information from IMDB.</string> + <string control="NativeMovieInfo_chkOFDBTitle">If enabled, Ember will attempt to retreive the movie title from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkOFDBOutline">If enabled, Ember will attempt to retreive the movie outline from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkOFDBPlot">If enabled, Ember will attempt to retreive the movie plot from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkOFDBGenre">If enabled, Ember will attempt to retreive the movie genre from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkCertification">Enable scraping movie certification.</string> + <string control="NativeMovieInfo_chkTop250">Enable scraping movie Top 250 ranking.</string> + <string control="NativeMovieInfo_txtGenreLimit">Limit the number of scraped genres to the entered value.</string> + <string control="NativeMovieInfo_txtActorLimit">Limit the number of scraped actors to the entered value.</string> + <string control="NativeMovieInfo_chkCrew">Enable scraping movie other crew. (Scrape Full Crew must be enabled)</string> + <string control="NativeMovieInfo_chkMusicBy">Enable scraping movie musicians. (Scrape Full Crew must be enabled)</string> + <string control="NativeMovieInfo_chkProducers">Enable scraping movie producers. (Scrape Full Crew must be enabled)</string> + <string control="NativeMovieInfo_chkWriters">Enable scraping movie writers.</string> + <string control="NativeMovieInfo_chkStudio">Enable scraping movie studio.</string> + <string control="NativeMovieInfo_chkRuntime">Enable scraping movie runtime.</string> + <string control="NativeMovieInfo_chkPlot">Enable scraping movie plot.</string> + <string control="NativeMovieInfo_chkOutline">Enable scraping movie outline.</string> + <string control="NativeMovieInfo_chkGenre">Enable scraping movie genre.</string> + <string control="NativeMovieInfo_chkDirector">Enable scraping movie director.</string> + <string control="NativeMovieInfo_chkTagline">Enable scraping movie tagline.</string> + <string control="NativeMovieInfo_chkCast">Enable scraping movie cast.</string> + <string control="NativeMovieInfo_chkVotes">Enable scraping movie votes.</string> + <string control="NativeMovieInfo_chkTrailer">Enable scraping movie trailer url.</string> + <string control="NativeMovieInfo_chkRating">Enable scraping movie rating.</string> + <string control="NativeMovieInfo_chkRelease">Enable scraping movie release date.</string> + <string control="NativeMovieInfo_chkMPAA">Enable scraping movie MPAA.</string> + <string control="NativeMovieInfo_chkYear">Enable scraping movie year.</string> + <string control="NativeMovieInfo_chkTitle">Enable scraping movie title.</string> + <string control="NativeMovieMedia_cbEnabled">Enable or disable this module.</string> + <string control="NativeMovieMedia_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieMedia_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieMedia_chkScrapePoster">Enable scraping posters from this module. (Refer to global poster settings for more options)</string> + <string control="NativeMovieMedia_chkScrapeFanart">Enable scraping fanart from this module. (Refer to global fanart settings for more options)</string> + <string control="NativeMovieMedia_chkUseTMDB">Enable retrieving images from theMovieDB.org.</string> + <string control="NativeMovieMedia_chkUseIMPA">Enable retrieving images from</string> + <string control="NativeMovieMedia_chkUseMPDB">Enable retrieving images from MoviePosterDB.com.</string> + <string control="NativeMovieMedia_chkAutoThumbs">Enable automatic extraction of extrathumbs from this module. (Refer to global extrathumb settings for more options)</string> + <string control="NativeMovieMedia_chkDownloadTrailer">Enable trailer downloading from this module. (Refer to global trailer settings for more options)</string> + <string control="NativeMovieMedia_txtTimeout">Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.)</string> + <string control="NativeMovieMedia_lbTrailerSites">Select the sites from which you would like to retrieve trailer URLs and/or files.</string> +</strings> diff --git a/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.English_(en_US).xml b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.English_(en_US).xml new file mode 100644 index 0000000..87a19b5 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.English_(en_US).xml @@ -0,0 +1,117 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Native TV Scrapers</string> + <string id="1">Use OFDB Genre</string> + <string id="2">Use OFDB Plot</string> + <string id="3">Use OFDB Outline</string> + <string id="4">Use OFDB Title</string> + <string id="5">IMDB Mirror:</string> + <string id="6">Scraper Fields - Scraper specific</string> + <string id="7">Timeout:</string> + <string id="8">Supported Sites:</string> + <string id="9">Get Images From:</string> + <string id="10">Search Results</string> + <string id="11">Searching IMDB...</string> + <string id="12">The ID you entered is not a valid IMDB ID.</string> + <string id="13">You have manually entered an IMDB ID but have not verified it is correct.</string> + <string id="14">Continue without verification?</string> + <string id="15">Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again.</string> + <string id="16">Verification Failed</string> + <string id="17">Partial Matches ({0})</string> + <string id="18">Exact Matches ({0})</string> + <string id="19">Popular Titles ({0})</string> + <string id="20">No Matches Found</string> + <string id="21">View details of each result to find the proper movie.</string> + <string id="22">Movie Search Results</string> + <string id="23">Manual IMDB Entry:</string> + <string id="24">Verify</string> + <string id="25">Searching IMDB...</string> + <string id="26">Downloading details...</string> + <string id="27">Downloading {0}</string> + <string id="28">No Fanart found for this movie.</string> + <string id="29">No Fanart Found</string> + <string id="30">No Posters found for this movie.</string> + <string id="31">No Posters Found</string> + <string id="32">Retrieving data from TheMovieDB.com...</string> + <string id="33">TheMovieDB.com is not enabled</string> + <string id="34">Retrieving data from IMPAwards.com...</string> + <string id="35">IMPAwards.com is not enabled</string> + <string id="36">Retrieving data from MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com is not enabled</string> + <string id="38">Preparing images...</string> + <string id="39">Select Poster</string> + <string id="40">Select Fanart</string> + <string id="41">Check All Thumb</string> + <string id="42">Check All Mid</string> + <string id="43">Check All Original</string> + <string id="44">Selected item will be set as fanart. All checked items will be saved to \extrathumbs.</string> + <string id="45">Performing Preliminary Tasks...</string> + <string id="46">Downloading Selected Image...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Small</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Small ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Multiple</string> + <string id="56">Downloading selected trailer...</string> + <string id="57">Copying specified file to trailer...</string> + <string id="58">The trailer could not be played. This could be due to an invalid URL or you do not have the proper player to play the trailer type.</string> + <string id="59">Error Playing Trailer</string> + <string id="60">Move</string> + <string id="61">Copy</string> + <string id="62">Moving specified file to trailer...</string> + <string id="63">Set To Nfo</string> + <string id="64">Select Trailer</string> + <string id="65">Select Trailer to Download</string> + <string id="66">Manual Trailer Entry</string> + <string id="67">Direct Link or YouTube URL:</string> + <string id="68">Compiling trailer list...</string> + <string id="69">Preview Trailer</string> + <string id="70">Local Trailer:</string> + <string id="71">The video format links could not be retrieved.</string> + <string id="72">Error Retrieving Video Format Links</string> + <string id="73">Select Format</string> + <string id="74">Getting available formats...</string> + <string id="75">Available Formats</string> + <string id="76">A poster of your preferred size could not be found. Please choose another.</string> + <string id="77">No Preferred Size</string> + <string id="78">Fanart of your preferred size could not be found. Please choose another.</string> + <string id="79">There are no known episodes for this show. Scrape the show, season, or episode and try again.</string> + <string id="80">No Known Episodes</string> + <string id="81">There is no poster available for this episode.</string> + <string id="82">Guest Star</string> + <string id="83">The ID you entered is not a valid TVDB ID.</string> + <string id="84">Downloading show info...</string> + <string id="85">TV Search Results</string> + <string id="86">View details of each result to find the proper TV show.</string> + <string id="87">Downloading Fullsize Fanart Image...</string> + <string id="88">Loading Current Images...</string> + <string id="89">(Down)Loading New Images...</string> + <string id="90">Setting Defaults...</string> + <string id="91">Show Poster</string> + <string id="92">Episode Fanart</string> + <string id="93">Show Fanart</string> + <string id="94">All Seasons Poster</string> + <string id="95">Season Posters</string> + <string id="96">Season Fanart</string> + <string id="97">Season {0} Posters</string> + <string id="98">Season {0} Fanart</string> + <string id="99">TV Image Selection</string> + <string id="100">Current Image:</string> + <string id="101">Get Posters</string> + <string id="102">Get Fanart</string> + <string id="103">These settings are specific to this module.{0}Please refer to the global settings for more options.</string> + <string id="104">Ember Native Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Size:</string> + <string id="109">Trailers</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Preferred language</string> + <string id="113">Save Fanart In:</string> + <string id="114">Open In Browser</string> +</strings> diff --git a/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.German_(de_DE)-Help.xml b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.German_(de_DE)-Help.xml new file mode 100644 index 0000000..f4c930d --- /dev/null +++ b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.German_(de_DE)-Help.xml @@ -0,0 +1,45 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="NativeMovieInfo_cbEnabled">Aktiviert dieses Modul.</string> + <string control="NativeMovieInfo_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieInfo_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieInfo_txtIMDBURL">Gib den Mirror ein über den Ember mit der IMDB kommunizieren soll.</string> + <string control="NativeMovieInfo_chkOFDBTitle">Wenn aktiviert versucht Ember den Titel von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkOFDBOutline">Wenn aktiviert versucht Ember die Kurzebschreibung von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkOFDBPlot">Wenn aktiviert versucht Ember die Inhaltsangabe von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkOFDBGenre">Wenn aktiviert versucht Ember die Genres von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkCertification">Aktiviert das Scrapen der Altersbeschränkung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTop250">Aktiviert das Scrapen der IMDB Top250 mit diesem Modul.</string> + <string control="NativeMovieInfo_txtGenreLimit">Die Anzahl der gescrapten Genres limitieren.</string> + <string control="NativeMovieInfo_txtActorLimit">Die Anzahl der gescrapten Schauspieler limitieren.</string> + <string control="NativeMovieInfo_chkCrew">Aktiviert das Scrapen der Sonstigen Crew mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!)</string> + <string control="NativeMovieInfo_chkMusicBy">Aktiviert das Scrapen der Musiker mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!)</string> + <string control="NativeMovieInfo_chkProducers">Aktiviert das Scrapen der Produzenten mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!)</string> + <string control="NativeMovieInfo_chkWriters">Aktiviert das Scrapen der Autoren mit diesem Modul.</string> + <string control="NativeMovieInfo_chkStudio">Aktiviert das Scrapen des Studios mit diesem Modul.</string> + <string control="NativeMovieInfo_chkRuntime">Aktiviert das Scrapen der Spielzeit mit diesem Modul.</string> + <string control="NativeMovieInfo_chkPlot">Aktiviert das Scrapen des Inhalts mit diesem Modul.</string> + <string control="NativeMovieInfo_chkOutline">Aktiviert das Scrapen der Kurzbeschreibung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkGenre">Aktiviert das Scrapen von Genre mit diesem Modul.</string> + <string control="NativeMovieInfo_chkDirector">Aktiviert das Scrapen des Regisseurs mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTagline">Aktiviert das Scrapen der Tagline mit diesem Modul.</string> + <string control="NativeMovieInfo_chkCast">Aktiviert das Scrapen der Schauspieler mit diesem Modul.</string> + <string control="NativeMovieInfo_chkVotes">Aktiviert das Scrapen der Anzahl Bewertungen mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTrailer">Aktiviert das Scrapen von Trailern mit diesem Modul.</string> + <string control="NativeMovieInfo_chkRating">Aktiviert das Scrapen der Bewertung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkRelease">Aktiviert das Scrapen des Premiere Datums mit diesem Modul.</string> + <string control="NativeMovieInfo_chkMPAA">Aktiviert das Scrapen der MPAA Bewertung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkYear">Aktiviert das Scrapen des Jahres mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTitle">Aktiviert das Scrapen des Titels mit diesem Modul.</string> + <string control="NativeMovieMedia_cbEnabled">Aktiviert dieses Modul.</string> + <string control="NativeMovieMedia_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieMedia_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieMedia_chkScrapePoster">Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_chkScrapeFanart">Aktiviert das Laden von Fanart mit diesem Modul. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_chkUseTMDB">Aktiviert das Laden von Bildern von TheMovieDB.org.</string> + <string control="NativeMovieMedia_chkUseIMPA">Aktiviert das Laden von Bildern von IMPA</string> + <string control="NativeMovieMedia_chkUseMPDB">Aktiviert das Laden von Bildern von MoviePosterDB.com.</string> + <string control="NativeMovieMedia_chkAutoThumbs">Automatische Frame extraktion mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_chkDownloadTrailer">Trailer laden mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_txtTimeout">Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Zeite in dieser Zeit nicht geantwortet hat wird sie übersprungen)</string> + <string control="NativeMovieMedia_lbTrailerSites">Wähle die Seite von der Trailer URLs/Dateien geladen werden sollen.</string> +</strings> diff --git a/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.German_(de_DE).xml b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.German_(de_DE).xml new file mode 100644 index 0000000..0349557 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.German_(de_DE).xml @@ -0,0 +1,117 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Nativer TV Scraper</string> + <string id="1">OFDB Genre benutzen</string> + <string id="2">OFDB Handlung benutzen</string> + <string id="3">OFDB Kurzbeschr. benutzen</string> + <string id="4">OFDB Titel benutzen</string> + <string id="5">IMDB Mirror:</string> + <string id="6">Scraper Felder - Scraper spezifisch</string> + <string id="7">Timeout:</string> + <string id="8">Unterstützte Seiten:</string> + <string id="9">Bilder holen von:</string> + <string id="10">Suchergebnis</string> + <string id="11">Suche in der IMDB...</string> + <string id="12">Die eingegebene ID ist keine gültige IMDB ID.</string> + <string id="13">Die IMDB ID ist noch nicht geprüft.</string> + <string id="14">Ohne Prüfung fortfahren?</string> + <string id="15">Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben.</string> + <string id="16">Prüfung fehlgeschlagen</string> + <string id="17">Teil Treffer ({0})</string> + <string id="18">Exakte Treffer({0})</string> + <string id="19">Populäre Titel ({0})</string> + <string id="20">Keine Treffer</string> + <string id="21">Schaue dir die Details an um den richtigen Film zu finden.</string> + <string id="22">Film Suchergebnis</string> + <string id="23">Man. IMDB ID:</string> + <string id="24">Prüfen</string> + <string id="25">Suche in der IMDB...</string> + <string id="26">Lade Details...</string> + <string id="27">Lade {0} herunter</string> + <string id="28">Kein Fanart für diesen Film gefunden</string> + <string id="29">Kein Fanart gefunden</string> + <string id="30">Kein Poster für diesen Film gefunden</string> + <string id="31">Kein Poster gefunden</string> + <string id="32">Lade Daten von TheMovieDB.com...</string> + <string id="33">TheMovieDB.com ist nicht aktiviert.</string> + <string id="34">Lade Daten von IMPAwards.com...</string> + <string id="35">IMPAwards.com ist nicht aktiviert.</string> + <string id="36">Lade Daten von MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com ist nicht aktiviert.</string> + <string id="38">Bereite Bilder vor...</string> + <string id="39">Wähle Poster</string> + <string id="40">Wähle Fanart</string> + <string id="41">Alle Thumbs</string> + <string id="42">Alle Mittl.</string> + <string id="43">Alle Original</string> + <string id="44">Markiertes Bild wird Fanart. Alle aktivierten werden Extrathumbs.</string> + <string id="45">Vorarbeit läuft...</string> + <string id="46">Lade gewähltes Bild...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">mittel</string> + <string id="50">klein</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">klein ({0}x{1})</string> + <string id="54">mittel ({0}x{1})</string> + <string id="55">Mehrfach</string> + <string id="56">Lade gewählten Trailer...</string> + <string id="57">Kopiere gewählten Trailer...</string> + <string id="58">Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URL liegen oder es ist kein Player für diesen Dateityp vorhanden.</string> + <string id="59">Fehler beim Abspielen des Trailers</string> + <string id="60">Verschieben</string> + <string id="61">Kopieren</string> + <string id="62">Verschiebe gewählten Trailer...</string> + <string id="63">In NFO speichern</string> + <string id="64">Trailer wählen</string> + <string id="65">Trailer zum laden wählen</string> + <string id="66">Man. Trailer</string> + <string id="67">Direktlink oder YouTube URL:</string> + <string id="68">Stelle Trailerliste zusammen...</string> + <string id="69">Trailer Vorschau</string> + <string id="70">Lokaler Trailer:</string> + <string id="71">Die Videoformat Linkliste konnte nicht generiert werden.</string> + <string id="72">Fehler beim generieren der Videoformat Linkliste</string> + <string id="73">Format wählen</string> + <string id="74">Hole verfügbare Formate...</string> + <string id="75">Verfügbare Formate</string> + <string id="76">Es konnte kein Poster in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="77">Keine gewünschte Größe</string> + <string id="78">Es konnte kein Fanart in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="79">Keine Episoden für diese TV-Serie verfügbar. Scrape diese Serie, Staffel oder Episode und versuche es erneut.</string> + <string id="80">Keine Episoden verfügbar</string> + <string id="81">Kein Poster für diese Episode vorhanden.</string> + <string id="82">Gast Star</string> + <string id="83">Die eingegebene ID ist keine gültige TVDB ID.</string> + <string id="84">Lade Serien Informationen...</string> + <string id="85">Serien Suchergebnis</string> + <string id="86">Betrachte die Details um die richtige TV-Serie zu erkennen.</string> + <string id="87">Lade Fanart in Originalgröße...</string> + <string id="88">Lade aktuelle Bilder...</string> + <string id="89">Lade neue Bilder...</string> + <string id="90">Setze Standardwerte...</string> + <string id="91">Serien Poster</string> + <string id="92">Episoden Fanart</string> + <string id="93">Serien Fanart</string> + <string id="94">Alle-Staffeln Poster</string> + <string id="95">Staffel Posters</string> + <string id="96">Staffel Fanart</string> + <string id="97">Staffel {0} Poster</string> + <string id="98">Staffel {0} Fanart</string> + <string id="99">Bilderwahl TV-Serien</string> + <string id="100">Aktuelles Bild:</string> + <string id="101">Poster laden</string> + <string id="102">Fanart laden</string> + <string id="103">Diese Einstellungen sind Modul-spezifisch. {0} Bitte werfen sie einen blick in die Globalen Einstellungen für noch mehr Optionen.</string> + <string id="104">Ember Nativer Film Scraper</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Grösse:</string> + <string id="109">Trailer</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Bevorzugte Sprache</string> + <string id="113">Speichere Fanart in:</string> + <string id="114">Im Browser öffnen</string> +</strings> diff --git a/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..79a98bf --- /dev/null +++ b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,45 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="NativeMovieInfo_cbEnabled">Slå modulen av eller på.</string> + <string control="NativeMovieInfo_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieInfo_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieInfo_txtIMDBURL">Før inn speilserver til IMDB.</string> + <string control="NativeMovieInfo_chkOFDBTitle">Hvis påslått, EMM vil å prøve å finne filmtittel fra OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkOFDBOutline">Hvis påslått, EMM vil prøve å finne beskrivelse av filmen på OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkOFDBPlot">Hvis påslått, EMM vil hente filmhistorien fra OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkOFDBGenre">Hvis påslått, EMM vil hente filmsjanger fra OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkCertification">Slå på detaljhenting av filmsertifisering.</string> + <string control="NativeMovieInfo_chkTop250">Slå på detaljhenting av IMDB Top 250-plassering.</string> + <string control="NativeMovieInfo_txtGenreLimit">Begrens antall detaljhentede sjangre.</string> + <string control="NativeMovieInfo_txtActorLimit">Begrens antall skuespillere.</string> + <string control="NativeMovieInfo_chkCrew">Slå på detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått)</string> + <string control="NativeMovieInfo_chkMusicBy">Slå på detaljhenting av musikere. (Detaljhenting av fullt crew må være påslått)</string> + <string control="NativeMovieInfo_chkProducers">Slå på detaljhenting av filmprodusenter. (Detaljhenting av full crew må være påslått)</string> + <string control="NativeMovieInfo_chkWriters">Slå på detaljhenting av manusforfattere.</string> + <string control="NativeMovieInfo_chkStudio">Slå på detaljhenting av studio.</string> + <string control="NativeMovieInfo_chkRuntime">Slå på detaljhenting av filmlengde.</string> + <string control="NativeMovieInfo_chkPlot">Slå på detaljhenting av filmens historie.</string> + <string control="NativeMovieInfo_chkOutline">Slå på detaljhenting av filmens beskrivelse.</string> + <string control="NativeMovieInfo_chkGenre">Slå på detaljhenting av filmens sjanger.</string> + <string control="NativeMovieInfo_chkDirector">Slå på detaljhetning av filmens regissør.</string> + <string control="NativeMovieInfo_chkTagline">Slå på detaljhetning av filmens undertittel.</string> + <string control="NativeMovieInfo_chkCast">Slå på detaljhetning av filmens skuespillerbeholdning.</string> + <string control="NativeMovieInfo_chkVotes">Slå på detaljhetning av filmens poeng.</string> + <string control="NativeMovieInfo_chkTrailer">Slå på detaljhetning av filmens trailer URL.</string> + <string control="NativeMovieInfo_chkRating">Slå på detaljhetning av filmens aldersgrense.</string> + <string control="NativeMovieInfo_chkRelease">Slå på detaljhetning av filmens premieredato.</string> + <string control="NativeMovieInfo_chkMPAA">Slå på detaljhetning av filmens MPAA-markering.</string> + <string control="NativeMovieInfo_chkYear">Slå på detaljhetning av filmens år.</string> + <string control="NativeMovieInfo_chkTitle">Slå på detaljhetning av filmens tittel.</string> + <string control="NativeMovieMedia_cbEnabled">Slå modulen av eller på.</string> + <string control="NativeMovieMedia_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieMedia_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieMedia_chkScrapePoster">Slå på detaljhetning av plakater i denne modulen. (Se globale plakatinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_chkScrapeFanart">Slå på detaljhetning av fankunst i denne modulen. (Se globale fankunstinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_chkUseTMDB">Slå på bildehenting fra theMovieDB.org.</string> + <string control="NativeMovieMedia_chkUseIMPA">Slå på bildehenting fra</string> + <string control="NativeMovieMedia_chkUseMPDB">Slå på bildehenting fra MoviePosterDB.com</string> + <string control="NativeMovieMedia_chkAutoThumbs">Slå på automatisk henting av ekstrakunst fra denne modulen. (Se globale ekstrakunstinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_chkDownloadTrailer">Slå på automatisk henting av trailer fra denne modulen. (Se globale trailerinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_txtTimeout">Før inn tiden (i sekunder) du vil bruke for timeout for trailersider. (Hvis siden ikke svarer innen timeoutfristen, så vil den bli hoppet over)</string> + <string control="NativeMovieMedia_lbTrailerSites">Velg sidene du vil bruke til trailer URL og/eller filer.</string> +</strings> diff --git a/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO).xml b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO).xml new file mode 100644 index 0000000..52370c3 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Langs/scraper.EmberCore.Norwegian_(no_NO).xml @@ -0,0 +1,117 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">EMM TV-detaljhentere</string> + <string id="1">Bruk OFDB-sjangere</string> + <string id="2">Bruk OFDB-filmhistorie</string> + <string id="3">Bruk OFDB-beskrivelse</string> + <string id="4">Bruk OFDB-tittel</string> + <string id="5">IMDB-speilserver:</string> + <string id="6">Detaljhenterområder - Detaljhenterspesifikk</string> + <string id="7">Tidsavbrudd:</string> + <string id="8">Støttede sider:</string> + <string id="9">Hent bilder fra:</string> + <string id="10">Søkeresultater</string> + <string id="11">Søker TMDB...</string> + <string id="12">IDen du førte inn er ikke en riktig IMDB-ID.</string> + <string id="13">Du har ført inn en IMDB-ID, men har ikke verifisert om den er riktig.</string> + <string id="14">Fortsette uten verifisering?</string> + <string id="15">Kunne ikke hente filmdetaljer for den innførte IDen. Vennligst sjekk IDen og prøv igjen.</string> + <string id="16">Verifisering feilet</string> + <string id="17">Delvise treff ({0})</string> + <string id="18">Eksakte treff ({0})</string> + <string id="19">Populære titler ({0})</string> + <string id="20">Ingen funnet</string> + <string id="21">Se detaljer fra hvert treff for å finne riktig film.</string> + <string id="22">Filmsøkresultater</string> + <string id="23">Manuell IMDB innføring:</string> + <string id="24">Verifiser</string> + <string id="25">Søker TMDB...</string> + <string id="26">Laster ned detaljer...</string> + <string id="27">Laster ned {0}</string> + <string id="28">Ingen fankunst funnet for denne filmen.</string> + <string id="29">Ingen fankunst funnet</string> + <string id="30">Ingen plakater funnet for denne filmen.</string> + <string id="31">Ingen plakater funnet</string> + <string id="32">Henter data fra TheMovieDB.com...</string> + <string id="33">TheMovieDB.com er ikke påslått</string> + <string id="34">Henter data fra IMPAwards.com...</string> + <string id="35">IMPAwards.com er ikke påslått</string> + <string id="36">Henter data fra MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com er ikke påslått</string> + <string id="38">Forbereder bilder...</string> + <string id="39">Velg plakat</string> + <string id="40">Velg fankunst</string> + <string id="41">Huk av alle tommelbilder</string> + <string id="42">Huk av alle Mid</string> + <string id="43">Huk av alle originale</string> + <string id="44">Valgte objekt vil bli satt som fankunst. Alle hukede objekter vil bli lagret i \extrathumbs.</string> + <string id="45">Utfører forberedende oppgaver...</string> + <string id="46">Laster ned valgte bilde...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Liten</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover {0}x{1}</string> + <string id="53">Liten ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Flere</string> + <string id="56">Laster ned valgt trailer...</string> + <string id="57">Kopierer valgt fil til trailer...</string> + <string id="58">Traileren kunne ikke spilles av. Det kan være at URL ikke er gyldig, eller at du ikke har riktig avspiller for denne filtypen.</string> + <string id="59">Kunne spille av trailer.</string> + <string id="60">Flytt</string> + <string id="61">Kopiér</string> + <string id="62">Flytter valgt fil til trailer...</string> + <string id="63">Sett i nfo</string> + <string id="64">Velg trailer</string> + <string id="65">Velg trailer til å laste ned</string> + <string id="66">Manuell trailerinnføring</string> + <string id="67">Direkte link eller YouTube URL:</string> + <string id="68">Kompilerer trailerliste...</string> + <string id="69">Sniktitt på trailer</string> + <string id="70">Lokal trailer:</string> + <string id="71">Videoformatlenkene kunne ikke hentes</string> + <string id="72">Kunne ikke hente videoformatlenker</string> + <string id="73">Velg format</string> + <string id="74">Henter tilgjengelige formater...</string> + <string id="75">Tilgjengelige formater</string> + <string id="76">En plakat i din valgte størrelse kunne ikke hentes. Vennligst velg en annen.</string> + <string id="77">Ingen foretrukket størrelse</string> + <string id="78">Fankunst i din foretrukkede størrelse kunne ikke bli funnet. Vennligst velg en annen.</string> + <string id="79">Det er ingen kjente episoder for denne serien. Detaljhent serien, sesongen eller episoden og prøv på nytt.</string> + <string id="80">Ingen kjente episoder</string> + <string id="81">Det er ingen plakater for denne episoden.</string> + <string id="82">Gjesteskuespiller</string> + <string id="83">IDen du innførte er ikke en gyldig TVDB ID.</string> + <string id="84">Laster ned serieinfo...</string> + <string id="85">TVsøk-resultater</string> + <string id="86">Se detaljer fra hvert resultat for å finne riktig serie.</string> + <string id="87">Laster ned fankunst i full størrelse...</string> + <string id="88">Laster inn nåværende bilder...</string> + <string id="89">Laster (ned) nye bilder...</string> + <string id="90">Setter standarder...</string> + <string id="91">Serieplakat</string> + <string id="92">Episodefankunst</string> + <string id="93">Vis fankunst</string> + <string id="94">Alle sesonger-plakat</string> + <string id="95">Sesongplakater</string> + <string id="96">Sesongfankunst</string> + <string id="97">Sesong {0}-plakater</string> + <string id="98">Sesong {0}-fankunst</string> + <string id="99">TV-bilde valg</string> + <string id="100">Nåværende bilde:</string> + <string id="101">Hent plakater</string> + <string id="102">Hent fankunst</string> + <string id="103">Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg.</string> + <string id="104">EMM film-detaljhentere</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (Tysk)</string> + <string id="108">TMDB Ekstrakunst-størrelse:</string> + <string id="109">Trailere</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC-format</string> + <string id="112">Foretrukket språk</string> + <string id="113">Lagre fankunst i:</string> + <string id="114">Åpne i nettleser</string> +</strings> diff --git a/Addons/scraper.TVDB.Data/My Project/Application.Designer.vb b/Addons/scraper.TVDB.Data/My Project/Application.Designer.vb new file mode 100644 index 0000000..66fb81a --- /dev/null +++ b/Addons/scraper.TVDB.Data/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Addons/scraper.TVDB.Data/My Project/Application.myapp b/Addons/scraper.TVDB.Data/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Addons/scraper.TVDB.Data/My Project/Application.myapp @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <MySubMain>false</MySubMain> + <SingleInstance>false</SingleInstance> + <ShutdownMode>0</ShutdownMode> + <EnableVisualStyles>true</EnableVisualStyles> + <AuthenticationMode>0</AuthenticationMode> + <ApplicationType>1</ApplicationType> + <SaveMySettingsOnExit>true</SaveMySettingsOnExit> +</MyApplicationData> diff --git a/Addons/scraper.TVDB.Data/My Project/AssemblyInfo.vb b/Addons/scraper.TVDB.Data/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..44ff0ed --- /dev/null +++ b/Addons/scraper.TVDB.Data/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.TVDB.Data")> +<Assembly: AssemblyDescription("http://forum.xbmc.org/showthread.php?tid=116941")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.TVDB.Data")> +<Assembly: AssemblyCopyright("Copyright © 2013")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("89AE2F8F-C679-4797-9BE8-58E82002A006")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.11")> +<Assembly: AssemblyFileVersion("1.3.0.11")> diff --git a/Addons/scraper.TVDB.Data/My Project/Resources.Designer.vb b/Addons/scraper.TVDB.Data/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bb85827 --- /dev/null +++ b/Addons/scraper.TVDB.Data/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''<summary> + ''' A strongly-typed resource class, for looking up localized strings, etc. + '''</summary> + <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + '''<summary> + ''' Returns the cached ResourceManager instance used by this class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EmberScraperModule.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + '''<summary> + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Addons/scraper.TVDB.Data/My Project/Resources.resx b/Addons/scraper.TVDB.Data/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Addons/scraper.TVDB.Data/My Project/Resources.resx @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/My Project/Settings.Designer.vb b/Addons/scraper.TVDB.Data/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f020222 --- /dev/null +++ b/Addons/scraper.TVDB.Data/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _ + Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + <Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _ + Friend Module MySettingsProperty + + <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _ + Friend ReadOnly Property Settings() As Global.EmberScraperModule.My.MySettings + Get + Return Global.EmberScraperModule.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Addons/scraper.TVDB.Data/My Project/Settings.settings b/Addons/scraper.TVDB.Data/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Addons/scraper.TVDB.Data/My Project/Settings.settings @@ -0,0 +1,7 @@ +<?xml version='1.0' encoding='utf-8'?> +<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true"> + <Profiles> + <Profile Name="(Default)" /> + </Profiles> + <Settings /> +</SettingsFile> diff --git a/Addons/scraper.TVDB.Data/Resources/Logo.png b/Addons/scraper.TVDB.Data/Resources/Logo.png new file mode 100644 index 0000000..a89dae1 Binary files /dev/null and b/Addons/scraper.TVDB.Data/Resources/Logo.png differ diff --git a/Addons/scraper.TVDB.Data/Scraper/clsScrapeIMDB.vb b/Addons/scraper.TVDB.Data/Scraper/clsScrapeIMDB.vb new file mode 100644 index 0000000..06e23c6 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/clsScrapeIMDB.vb @@ -0,0 +1,1126 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Globalization +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMDB + + Public Class MovieSearchResults + +#Region "Fields" + + Private _ExactMatches As New List(Of MediaContainers.Movie) + Private _PartialMatches As New List(Of MediaContainers.Movie) + Private _PopularTitles As New List(Of MediaContainers.Movie) + +#End Region 'Fields + +#Region "Properties" + + Public Property ExactMatches() As List(Of MediaContainers.Movie) + Get + Return _ExactMatches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _ExactMatches = value + End Set + End Property + + Public Property PartialMatches() As List(Of MediaContainers.Movie) + Get + Return _PartialMatches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _PartialMatches = value + End Set + End Property + + Public Property PopularTitles() As List(Of MediaContainers.Movie) + Get + Return _PopularTitles + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _PopularTitles = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + Public UseOFDBGenre As Boolean + Public UseOFDBOutline As Boolean + Public UseOFDBPlot As Boolean + Public UseOFDBTitle As Boolean + + Friend WithEvents bwIMDB As New System.ComponentModel.BackgroundWorker + + Private Const LINK_PATTERN As String = "<a[\s]+[^>]*?href[\s]?=[\s\""\']*(?<url>.*?)[\""\']*.*?>(?<name>[^<]+|.*?)?<\/a>" + + Private Const ACTORTABLE_PATTERN As String = "<table class=""cast"">(.*?)</table>" + Private Const HREF_PATTERN As String = "<a.*?href=[""'](?<url>.*?)[""'].*?>(?<name>.*?)</a>" + Private Const HREF_PATTERN_2 As String = "<a\shref=[""""'](?<url>.*?)[""""'].*?>(?<name>.*?)</a>" + Private Const HREF_PATTERN_3 As String = "<a href=""/search/title\?certificates=[^""]*"">([^<]*):([^<]*)</a>[^<]*(<i>([^<]*)</i>)?" + Private Const HREF_PATTERN_4 As String = "<a.*?href=[""']/(title/tt\d{7}/|name/nm\d{7}/)[""'].*?>(?<text>.*?)</a>" + Private Const IMDB_ID_REGEX As String = "tt\d\d\d\d\d\d\d" + Private Const IMG_PATTERN As String = "<img src=""(?<thumb>.*?)"" width=""\d{1,3}"" height=""\d{1,3}"" border="".{1,3}"">" + Private Const MOVIE_TITLE_PATTERN As String = "(?<=<(title)>).*(?=<\/\1>)" + Private Const TABLE_PATTERN As String = "<table.*?>\n?(.*?)</table>" + Private Const TD_PATTERN_1 As String = "<td\sclass=""nm"">(.*?)</td>" + Private Const TD_PATTERN_2 As String = "(?<=<td\sclass=""char"">)(.*?)(?=</td>)(\s\(.*?\))?" + Private Const TD_PATTERN_3 As String = "<td\sclass=""hs"">(.*?)</td>" + Private Const TD_PATTERN_4 As String = "<td>(?<title>.*?)</td>" + Private Const TITLE_PATTERN As String = "<a\shref=[""""'](?<url>.*?)[""""'].*?>(?<name>.*?)</a>((\s)+?(\((?<year>\d{4})(\/.*?)?\)))?((\s)+?(\((?<type>.*?)\)))?" + Private Const TR_PATTERN As String = "<tr\sclass="".*?"">(.*?)</tr>" + + Private sPoster As String + +#End Region 'Fields + +#Region "Enumerations" + + Private Enum SearchType + Movies = 0 + Details = 1 + SearchDetails = 2 + End Enum + +#End Region 'Enumerations + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + + Public Event SearchResultsDownloaded(ByVal mResults As IMDB.MovieSearchResults) + +#End Region 'Events + +#Region "Methods" + + Public Sub CancelAsync() + If bwIMDB.IsBusy Then bwIMDB.CancelAsync() + + While bwIMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Function GetMovieInfo(ByVal strID As String, ByRef IMDBMovie As MediaContainers.Movie, ByVal FullCrew As Boolean, ByVal FullCast As Boolean, ByVal GetPoster As Boolean, ByVal Options As Structures.ScrapeOptions, ByVal IsSearch As Boolean) As Boolean + Try + Dim ofdbTitle As String = String.Empty + Dim ofdbOutline As String = String.Empty + Dim ofdbPlot As String = String.Empty + Dim ofdbGenre As String = String.Empty + + If bwIMDB.CancellationPending Then Return Nothing + + If (UseOFDBTitle AndAlso Options.bTitle) OrElse (UseOFDBOutline AndAlso Options.bOutline) OrElse _ + (UseOFDBPlot AndAlso Options.bPlot) OrElse (UseOFDBGenre AndAlso Options.bGenre) Then + Dim OFDBScrape As New OFDB(strID, IMDBMovie) + If UseOFDBTitle AndAlso Options.bTitle Then ofdbTitle = OFDBScrape.Title + If UseOFDBOutline AndAlso Options.bOutline Then ofdbOutline = OFDBScrape.Outline + If UseOFDBPlot AndAlso Options.bPlot Then ofdbPlot = OFDBScrape.Plot + If UseOFDBGenre AndAlso Options.bGenre Then ofdbGenre = OFDBScrape.Genre + End If + + If bwIMDB.CancellationPending Then Return Nothing + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/combined")) + sHTTP = Nothing + + If bwIMDB.CancellationPending Then Return Nothing + + Dim sPlot As New HTTP + Dim PlotHtml As String = sPlot.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/plotsummary")) + sPlot = Nothing + + IMDBMovie.IMDBID = strID + + If bwIMDB.CancellationPending Then Return Nothing + + Dim OriginalTitle As String = Regex.Match(HTML, MOVIE_TITLE_PATTERN).ToString + If Options.bTitle Then + Dim oldOTitle As String = IMDBMovie.OriginalTitle + IMDBMovie.OriginalTitle = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(OriginalTitle, ".*(?=\s\(\d+.*?\))").ToString)).Trim + If String.IsNullOrEmpty(IMDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + If Not String.IsNullOrEmpty(ofdbTitle) Then + IMDBMovie.Title = ofdbTitle.Trim + Else + If Not String.IsNullOrEmpty(Master.eSettings.ForceTitle) Then + IMDBMovie.Title = GetForcedTitle(strID, IMDBMovie.OriginalTitle) + Else + IMDBMovie.Title = IMDBMovie.OriginalTitle.Trim + End If + End If + If String.IsNullOrEmpty(oldOTitle) OrElse Not oldOTitle = IMDBMovie.OriginalTitle Then + IMDBMovie.SortTitle = String.Empty + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If GetPoster Then + sPoster = Regex.Match(Regex.Match(HTML, "(?<=\b(name=""poster"")).*\b[</a>]\b").ToString, "(?<=\b(src=)).*\b(?=[</a>])").ToString.Replace("""", String.Empty).Replace("/></", String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bYear Then IMDBMovie.Year = Regex.Match(OriginalTitle, "(?<=\()\d+(?=.*\))", RegexOptions.RightToLeft).ToString + + Dim D, W, tempD As Integer + + If Options.bMPAA AndAlso (String.IsNullOrEmpty(IMDBMovie.MPAA) OrElse Not Master.eSettings.LockMPAA) Then + tempD = If(HTML.IndexOf("<h5><a href=""/mpaa"">MPAA</a>:</h5>") > 0, HTML.IndexOf("<h5><a href=""/mpaa"">MPAA</a>:</h5>"), 0) + + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + + W = If(D > 0, HTML.IndexOf("</div", D), 0) + + IMDBMovie.MPAA = If(D > 0 AndAlso W > 0, Web.HttpUtility.HtmlDecode(HTML.Substring(D, W - D).Remove(0, 26)).Trim(), String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bCert AndAlso (String.IsNullOrEmpty(IMDBMovie.Certification) OrElse Not Master.eSettings.LockMPAA) Then + 'get certifications + D = HTML.IndexOf("<h5>Certification:</h5>") + + If D > 0 Then + W = HTML.IndexOf("</div>", D) + Dim rCert As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN_3) + + If rCert.Count > 0 Then + Dim Cert = From M In rCert Select N = String.Format("{0}:{1}", DirectCast(M, Match).Groups(1).ToString.Trim, DirectCast(M, Match).Groups(2).ToString.Trim) Order By N Descending Where N.Contains(Master.eSettings.CertificationLang) + + If Not String.IsNullOrEmpty(Master.eSettings.CertificationLang) Then + If Cert.Count > 0 Then + IMDBMovie.Certification = Cert(0).ToString.Replace("West", String.Empty).Trim + If Options.bMPAA AndAlso Master.eSettings.UseCertForMPAA AndAlso (Not Master.eSettings.CertificationLang = "USA" OrElse (Master.eSettings.CertificationLang = "USA" AndAlso String.IsNullOrEmpty(IMDBMovie.MPAA))) Then + IMDBMovie.MPAA = If(Master.eSettings.CertificationLang = "USA", StringUtils.USACertToMPAA(IMDBMovie.Certification), If(Master.eSettings.OnlyValueForCert, IMDBMovie.Certification.Split(Convert.ToChar(":"))(1), IMDBMovie.Certification)) + End If + + + Else + 'No FSK Rating was found -> Alternative: Set USA Rating instead as fallback, MPAA will be converted to FSK, Certification from USA will be used, so people can see that US info was used! + If Master.eSettings.UseMPAAForFSK Then + Try + If Master.eSettings.CertificationLang = "Germany" AndAlso (IMDBMovie.MPAA.ToLower.Contains("usa") Or IMDBMovie.MPAA.ToLower.Contains("rated")) Then + Dim LANGRATING As String = "USA" + Dim Cert2 = From M In rCert Select N = String.Format("{0}:{1}", DirectCast(M, Match).Groups(1).ToString.Trim, DirectCast(M, Match).Groups(2).ToString.Trim) Order By N Descending Where N.Contains(LANGRATING) + If Cert2.Count > 0 Then + IMDBMovie.Certification = Cert2(0).ToString.Replace("West", String.Empty).Trim + If Options.bMPAA AndAlso Master.eSettings.UseCertForMPAA Then + If IMDBMovie.MPAA.ToLower.Contains("usa:g") Or IMDBMovie.MPAA.ToLower.Contains("rated g") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:0" + Else + IMDBMovie.MPAA = "0" + End If + + ElseIf IMDBMovie.MPAA.ToLower.Contains("usa:pg-13") Or IMDBMovie.MPAA.ToLower.Contains("rated pg-13") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:16" + Else + IMDBMovie.MPAA = "16" + End If + + ElseIf IMDBMovie.MPAA.ToLower.Contains("usa:pg") Or IMDBMovie.MPAA.ToLower.Contains("rated pg") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:12" + Else + IMDBMovie.MPAA = "12" + End If + + ElseIf IMDBMovie.Certification.ToLower.Contains("usa:r") Or IMDBMovie.Certification.ToLower.Contains("rated r") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:18" + Else + IMDBMovie.MPAA = "18" + End If + + ElseIf IMDBMovie.Certification.ToLower.Contains("usa:nc-17") Or IMDBMovie.Certification.ToLower.Contains("rated nc") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:18" + Else + IMDBMovie.MPAA = "18" + End If + + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End If + End If + + + Else + + IMDBMovie.Certification = Strings.Join(Cert.ToArray, " / ").Trim + + + End If + End If + End If + + If String.IsNullOrEmpty(IMDBMovie.Certification) AndAlso Not String.IsNullOrEmpty(IMDBMovie.MPAA) Then + IMDBMovie.Certification = IMDBMovie.MPAA + End If + + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bRelease Then + Dim RelDate As Date + Dim sRelDate As String = Regex.Match(HTML, "\d+\s\w+\s\d\d\d\d\s").ToString.Trim + If Not sRelDate = String.Empty Then + If Date.TryParse(sRelDate, RelDate) Then + IMDBMovie.ReleaseDate = Strings.FormatDateTime(RelDate, DateFormat.ShortDate).ToString + End If + Else + IMDBMovie.ReleaseDate = Nothing + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bRating AndAlso (String.IsNullOrEmpty(IMDBMovie.Rating) OrElse Not Master.eSettings.LockRating) Then + Dim RegexRating As String = Regex.Match(HTML, "\b\d\W\d/\d\d").ToString + If String.IsNullOrEmpty(RegexRating) Then + IMDBMovie.Rating = String.Empty + Else + IMDBMovie.Rating = RegexRating.Split(Convert.ToChar("/")).First.Trim + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'trailer + If Options.bTrailer AndAlso (String.IsNullOrEmpty(IMDBMovie.Trailer) OrElse Not Master.eSettings.LockTrailer) Then + 'Get first IMDB trailer if possible + Dim trailers As List(Of String) = GetTrailers(IMDBMovie.IMDBID) + 'Dim TMDB As New TMDB.Scraper + 'Dim YT As String = TMDB.GetTrailers(IMDBMovie.IMDBID) + + 'Dim sTrailerUrl As String = Regex.Match(HTML, "href=""(.*?/video/imdb/vi.*?)""").Groups(1).Value.Trim + 'If Not sTrailerUrl = String.Empty Then + 'Dim sTrailerURL2 As String = String.Empty + 'sTrailerUrl = String.Concat("http://", IMDBURL, sTrailerUrl, "player") + 'Dim HTTPTrailer As New HTTP + 'Dim HtmlTrailer As String = HTTPTrailer.DownloadData(sTrailerUrl) + 'HTTPTrailer = Nothing + + 'sTrailerUrl = Regex.Match(HtmlTrailer, "so.addVariable\(""id"", ""(.*?)""\);").Groups(1).Value.Trim + 'If sTrailerUrl = String.Empty Then + 'sTrailerURL2 = Regex.Match(HtmlTrailer, "so.addVariable\(""file"", ""(.*?)""\);").Groups(1).Value.Trim + 'Else + 'sTrailerURL2 = String.Concat(Regex.Match(HtmlTrailer, "so.addVariable\(""file"", ""(.*?)""\);").Groups(1).Value.Trim, sTrailerUrl) + 'End If + 'IMDBMovie.Trailer = Web.HttpUtility.UrlDecode(sTrailerURL2) + 'End If + IMDBMovie.Trailer = trailers.FirstOrDefault() + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bVotes Then IMDBMovie.Votes = Regex.Match(HTML, "class=""tn15more"">([0-9,]+) votes</a>").Groups(1).Value.Trim + + 'Top250 + 'ie: <a href="/chart/top?tt0167260">Top 250: #13</a> + If Options.bTop250 Then IMDBMovie.Top250 = Regex.Match(HTML, String.Concat("/chart/top\?tt", IMDBMovie.IMDBID, """>Top 250: #([0-9]+)</a>")).Groups(1).Value.Trim + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bCast Then + 'Find all cast of the movie + 'Match the table only 1 time + Dim ActorsTable As String = Regex.Match(HTML, ACTORTABLE_PATTERN).ToString + Dim ThumbsSize = AdvancedSettings.GetSetting("ActorThumbsSize", "SY275_SX400") + + Dim rCast As MatchCollection = Regex.Matches(ActorsTable, TR_PATTERN) + + Dim Cast1 = From M In rCast _ + Let m1 = Regex.Match(Regex.Match(M.ToString, TD_PATTERN_1).ToString, HREF_PATTERN) _ + Let m2 = Regex.Match(M.ToString, TD_PATTERN_2).ToString _ + Let m3 = Regex.Match(Regex.Match(M.ToString, TD_PATTERN_3).ToString, IMG_PATTERN) _ + Select New MediaContainers.Person(Web.HttpUtility.HtmlDecode(m1.Groups("name").ToString.Trim), _ + Web.HttpUtility.HtmlDecode(m2.ToString.Trim), _ + If(m3.Groups("thumb").ToString.IndexOf("addtiny") > 0 OrElse m3.Groups("thumb").ToString.IndexOf("no_photo") > 0, String.Empty, Strings.Replace(Web.HttpUtility.HtmlDecode(m3.Groups("thumb").ToString.Trim), _ + "._SX23_SY30_.jpg", String.Concat("._", ThumbsSize, "_.jpg")))) Take If(Master.eSettings.ActorLimit > 0, Master.eSettings.ActorLimit, 999999) + + If Master.eSettings.CastImagesOnly Then + Cast1 = Cast1.Where(Function(p As MediaContainers.Person) (Not String.IsNullOrEmpty(p.Thumb))) + End If + + Dim Cast As List(Of MediaContainers.Person) = Cast1.ToList + + 'Clean up the actors list + For Each Ps As MediaContainers.Person In Cast + For Each sMatch As Match In Regex.Matches(Ps.Role, HREF_PATTERN) + Ps.Role = Ps.Role.Replace(sMatch.Value, sMatch.Groups("name").Value.ToString.Trim) + Next + ' Dim a_patterRegex = Regex.Match(Ps.Role, HREF_PATTERN) + ' If a_patterRegex.Success Then Ps.Role = a_patterRegex.Groups("name").ToString.Trim + Next + + IMDBMovie.Actors = Cast + End If + + If bwIMDB.CancellationPending Then Return Nothing + + D = 0 : W = 0 + + If Options.bTagline AndAlso (String.IsNullOrEmpty(IMDBMovie.Tagline) OrElse Not Master.eSettings.LockTagline) Then + + tempD = If(HTML.IndexOf("<h5>Tagline:</h5>") > 0, HTML.IndexOf("<h5>Tagline:</h5>"), 0) + + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + + Dim lHtmlIndexOf As Integer = If(D > 0, HTML.IndexOf("<a class=""tn15more inline""", D), 0) + Dim TagLineEnd As Integer = If(lHtmlIndexOf > 0, lHtmlIndexOf, 0) + If D > 0 Then W = If(TagLineEnd > 0, TagLineEnd, HTML.IndexOf("</div>", D)) + + IMDBMovie.Tagline = If(D > 0 AndAlso W > 0, Web.HttpUtility.HtmlDecode(HTML.Substring(D, W - D).Replace("<h5>Tagline:</h5>", String.Empty).Split(vbCrLf.ToCharArray)(1)).Trim, String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bDirector Then + 'Get the directors + D = If(HTML.IndexOf("<h5>Director:</h5>") > 0, HTML.IndexOf("<h5>Director:</h5>"), HTML.IndexOf("<h5>Directors:</h5>")) + W = If(D > 0, HTML.IndexOf("</div>", D), 0) + 'got any director(s) ? + If D > 0 AndAlso Not W <= 0 Then + 'get only the first director's name + Dim rDir As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + Dim Dir = From M In rDir Where Not DirectCast(M, Match).Groups("name").ToString.Contains("more") _ + Select Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + + If Dir.Count > 0 Then + IMDBMovie.Director = Strings.Join(Dir.ToArray, " / ").Trim + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get countries of the movie + If Options.bCountry Then + 'Get the countries + D = If(HTML.IndexOf("<h5>Country:</h5>") > 0, HTML.IndexOf("<h5>Country:</h5>"), HTML.IndexOf("<h5>Countries:</h5>")) + W = If(D > 0, HTML.IndexOf("</div>", D), 0) + 'got any country ? + If D > 0 AndAlso Not W <= 0 Then + 'get only the first country's name + Dim rCou As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + Dim Cou = From M In rCou Where Not DirectCast(M, Match).Groups("name").ToString.Contains("more") _ + Select Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + + If Cou.Count > 0 Then + + 'fix for display country flag in XBMC! + If Strings.Join(Cou.ToArray, " / ").Trim.ToUpper.Contains("USA") Then + IMDBMovie.Country = "United States of America" + ElseIf Strings.Join(Cou.ToArray, " / ").Trim.ToUpper.Contains("UK") Then + IMDBMovie.Country = "United Kingdom" + Else + IMDBMovie.Country = Strings.Join(Cou.ToArray, " / ").Trim() + End If + + End If + End If + + + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get genres of the movie + If Options.bGenre AndAlso (String.IsNullOrEmpty(IMDBMovie.Genre) OrElse Not Master.eSettings.LockGenre) Then + If Not String.IsNullOrEmpty(ofdbGenre) Then + IMDBMovie.Genre = ofdbGenre + Else + D = 0 : W = 0 + D = HTML.IndexOf("<h5>Genre:</h5>") + 'Check if doesnt find genres + If D > 0 Then + W = HTML.IndexOf("</div>", D) + + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) Where Not N.Contains("more") Take If(Master.eSettings.GenreLimit > 0, Master.eSettings.GenreLimit, 999999) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + tGenre = StringUtils.GenreFilter(tGenre) + If Not String.IsNullOrEmpty(tGenre) Then + IMDBMovie.Genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bOutline AndAlso (String.IsNullOrEmpty(IMDBMovie.Outline) OrElse Not Master.eSettings.LockOutline) Then + + If Not String.IsNullOrEmpty(ofdbOutline) Then + IMDBMovie.Outline = ofdbOutline + Else + 'Get the Plot Outline + D = 0 : W = 0 + + Try + If IMDBMovie.Title.Contains("(VG)") Then + D = If(HTML.IndexOf("<h5>Plot Summary:</h5>") > 0, HTML.IndexOf("<h5>Plot Summary:</h5>"), HTML.IndexOf("<h5>Tagline:</h5>")) + If D > 0 Then W = HTML.IndexOf("</div>", D) + Else + tempD = If(HTML.IndexOf("<h5>Plot:</h5>") > 0, HTML.IndexOf("<h5>Plot:</h5>"), HTML.IndexOf("<h5>Plot Summary:</h5>")) + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + If D <= 0 Then D = HTML.IndexOf("<h5>Plot Synopsis:</h5>") + If D > 0 Then + W = HTML.IndexOf("<a class=", D) + If W > 0 Then + W = HTML.IndexOf("</div>", D) + Else + IMDBMovie.Outline = String.Empty + GoTo mplot + End If + Else + IMDBMovie.Outline = String.Empty + GoTo mPlot 'This plot synopsis is empty + End If + End If + Dim PlotOutline As String = HTML.Substring(D, W - D).Remove(0, 26) + + PlotOutline = Web.HttpUtility.HtmlDecode(If(PlotOutline.Contains("is empty") OrElse PlotOutline.Contains("View full synopsis") _ + , String.Empty, PlotOutline.Replace("|", String.Empty).Replace("»", String.Empty)).Trim) + 'check if outline has links to other IMDB entry + If Not String.IsNullOrEmpty(PlotOutline) Then + For Each rMatch As Match In Regex.Matches(PlotOutline, HREF_PATTERN_4) + PlotOutline = PlotOutline.Replace(rMatch.Value, rMatch.Groups("text").Value.Trim) + Next + IMDBMovie.Outline = Regex.Replace(PlotOutline, HREF_PATTERN, String.Empty).Trim + Else + IMDBMovie.Outline = String.Empty + End If + + Catch ex As Exception + IMDBMovie.Outline = String.Empty + End Try + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + +mPlot: + 'Get the full Plot + If Options.bPlot AndAlso (String.IsNullOrEmpty(IMDBMovie.Plot) OrElse Not Master.eSettings.LockPlot) Then + If Not String.IsNullOrEmpty(ofdbPlot) Then + IMDBMovie.Plot = ofdbPlot + Else + Dim FullPlotP As String = Regex.Match(PlotHtml, "<p class=.plotpar.>(.*?)</p>", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline).Groups(1).Value.ToString.Trim + Dim FullPlotI As String = Regex.Match(PlotHtml, "<p class=.plotpar.>(.*?)<i>", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline).Groups(1).Value.ToString.Trim + Dim FullPlot As String = If(FullPlotI.Length < FullPlotP.Length, FullPlotI, FullPlotP) + If Not String.IsNullOrEmpty(FullPlot) Then + For Each rMatch As Match In Regex.Matches(FullPlot, HREF_PATTERN_4) + FullPlot = FullPlot.Replace(rMatch.Value, rMatch.Groups("text").Value.Trim) + Next + IMDBMovie.Plot = Web.HttpUtility.HtmlDecode(FullPlot.Replace("|", String.Empty)).Trim + End If + + End If + + If Master.eSettings.OutlineForPlot AndAlso String.IsNullOrEmpty(IMDBMovie.Plot) AndAlso Not String.IsNullOrEmpty(IMDBMovie.Outline) Then + IMDBMovie.Plot = IMDBMovie.Outline + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get the movie duration + If Options.bRuntime Then IMDBMovie.Runtime = Web.HttpUtility.HtmlDecode(Regex.Match(HTML, "<h5>Runtime:</h5>[^0-9]*([^<]*)").Groups(1).Value.Trim) + + 'Get Production Studio + If Options.bStudio AndAlso (String.IsNullOrEmpty(IMDBMovie.Studio) OrElse Not Master.eSettings.LockStudio) Then + D = 0 : W = 0 + If FullCrew Then + D = HTML.IndexOf("<b class=""blackcatheader"">Production Companies</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + 'only get the first one + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(P1, Match).Groups("name").ToString = String.Empty _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) Take 1 + IMDBMovie.Studio = Ps(0).ToString.Trim + End If + Else + D = HTML.IndexOf("<h5>Company:</h5>") + If D > 0 Then W = HTML.IndexOf("</div>", D) + If D > 0 AndAlso W > 0 Then + IMDBMovie.Studio = Web.HttpUtility.HtmlDecode(Regex.Match(HTML.Substring(D, W - D), HREF_PATTERN).Groups("name").ToString.Trim) + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get Writers + If Options.bWriters Then + D = 0 : W = 0 + D = HTML.IndexOf("<h5>Writer") + If D > 0 Then W = HTML.IndexOf("</div>", D) + If D > 0 AndAlso W > 0 Then + Dim q = From M In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(M, Match).Groups("name").ToString.Trim = "more" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim = "(more)" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim = "WGA" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim.Contains("see more") _ + Select Writer = Web.HttpUtility.HtmlDecode(String.Concat(DirectCast(M, Match).Groups("name").ToString, If(FullCrew, " (writer)", String.Empty))) + + If q.Count > 0 Then + IMDBMovie.OldCredits = Strings.Join(q.ToArray, " / ").Trim + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get All Other Info + If FullCrew Then + + D = 0 : W = 0 + D = HTML.IndexOf("Directed by</a></h5>") + If D > 0 Then W = HTML.IndexOf("</body>", D) + If D > 0 AndAlso W > 0 Then + Dim qTables As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), TABLE_PATTERN) + + For Each M As Match In qTables + + If bwIMDB.CancellationPending Then Return Nothing + + 'Producers + If Options.bProducers AndAlso M.ToString.Contains("Produced by</a></h5>") Then + Dim Pr = From Po In Regex.Matches(M.ToString, "<td\svalign=""top"">(.*?)</td>") _ + Where Not Po.ToString.Contains(String.Concat("http://", IMDBURL, "/Glossary/")) _ + Let P1 = Regex.Match(Po.ToString, HREF_PATTERN_2) _ + Where Not String.IsNullOrEmpty(P1.Groups("name").ToString) _ + Select Producer = Web.HttpUtility.HtmlDecode(String.Concat(P1.Groups("name").ToString, " (producer)")) + + If Pr.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Pr.ToArray, " / ").Trim) + End If + End If + + 'Music by + If Options.bMusicBy AndAlso M.ToString.Contains("Original Music by</a></h5>") Then + Dim Mu = From Mo In Regex.Matches(M.ToString, "<td\svalign=""top"">(.*?)</td>") _ + Let M1 = Regex.Match(Mo.ToString, HREF_PATTERN) _ + Where Not String.IsNullOrEmpty(M1.Groups("name").ToString) _ + Select Musician = Web.HttpUtility.HtmlDecode(String.Concat(M1.Groups("name").ToString, " (music by)")) + + If Mu.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Mu.ToArray, " / ").Trim) + End If + End If + + Next + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Special Effects + If Options.bOtherCrew Then + D = HTML.IndexOf("<b class=""blackcatheader"">Special Effects</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not String.IsNullOrEmpty(DirectCast(P1, Match).Groups("name").ToString) _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) + If Ps.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Ps.ToArray, " / ").Trim) + End If + End If + End If + End If + + Return True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Function GetMovieStudios(ByVal strID As String) As List(Of String) + Dim alStudio As New List(Of String) + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/combined")) + sHTTP = Nothing + + Dim D, W As Integer + + D = HTML.IndexOf("<b class=""blackcatheader"">Production Companies</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(P1, Match).Groups("name").ToString = String.Empty _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) + alStudio.AddRange(Ps.ToArray) + End If + + Return alStudio + End Function + + Public Function GetSearchMovieInfo(ByVal sMovieName As String, ByRef dbMovie As Structures.DBMovie, ByVal iType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As MediaContainers.Movie + Dim r As MovieSearchResults = SearchMovie(sMovieName) + Dim b As Boolean = False + Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie + + 'r.PopularTitles.Sort() + 'r.ExactMatches.Sort() + 'r.PartialMatches.Sort() + + Try + Select Case iType + Case Enums.ScrapeType.FullAsk, Enums.ScrapeType.UpdateAsk, Enums.ScrapeType.NewAsk, Enums.ScrapeType.MarkAsk, Enums.ScrapeType.FilterAsk + + If r.ExactMatches.Count = 1 Then 'AndAlso r.PopularTitles.Count = 0 AndAlso r.PartialMatches.Count = 0 Then 'redirected to imdb info page + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count = 1 AndAlso r.PopularTitles(0).Lev <= 5 Then + b = GetMovieInfo(r.PopularTitles.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.ExactMatches.Count = 1 AndAlso r.ExactMatches(0).Lev <= 5 Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + Master.tmpMovie.Clear() + Using dIMDB As New dlgIMDBSearchResults + dIMDB.IMDBURL = IMDBURL + If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + b = False + Else + b = GetMovieInfo(Master.tmpMovie.IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + Else + b = False + End If + End Using + End If + Case Enums.ScrapeType.FullAuto, Enums.ScrapeType.UpdateAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.SingleScrape, Enums.ScrapeType.FilterAuto + + 'check if ALL results are over lev value + Dim useAnyway As Boolean = False + If ((r.PopularTitles.Count > 0 AndAlso r.PopularTitles(0).Lev > 5) OrElse r.PopularTitles.Count = 0) AndAlso _ + ((r.ExactMatches.Count > 0 AndAlso r.ExactMatches(0).Lev > 5) OrElse r.ExactMatches.Count = 0) AndAlso _ + ((r.PartialMatches.Count > 0 AndAlso r.PartialMatches(0).Lev > 5) OrElse r.PartialMatches.Count = 0) Then + useAnyway = True + End If + Dim exactHaveYear As Integer = FindYear(dbMovie.Filename, r.ExactMatches) + Dim popularHaveYear As Integer = FindYear(dbMovie.Filename, r.PopularTitles) + 'it seems "popular matches" is a better result than "exact matches" ..... nope + 'If r.ExactMatches.Count = 1 AndAlso r.PopularTitles.Count = 0 AndAlso r.PartialMatches.Count = 0 Then 'redirected to imdb info page + ' b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf (popularHaveYear >= 0 OrElse exactHaveYear = -1) AndAlso r.PopularTitles.Count > 0 AndAlso (r.PopularTitles(If(popularHaveYear >= 0, popularHaveYear, 0)).Lev <= 5 OrElse useAnyway) Then + ' b = GetMovieInfo(r.PopularTitles.Item(If(popularHaveYear >= 0, popularHaveYear, 0)).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf r.ExactMatches.Count > 0 AndAlso (r.ExactMatches(If(exactHaveYear >= 0, exactHaveYear, 0)).Lev <= 5 OrElse useAnyway) Then + ' b = GetMovieInfo(r.ExactMatches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf r.PartialMatches.Count > 0 Then + ' b = GetMovieInfo(r.PartialMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'End If + If r.ExactMatches.Count = 1 Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.ExactMatches.Count > 1 AndAlso exactHaveYear >= 0 Then + b = GetMovieInfo(r.ExactMatches.Item(exactHaveYear).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count > 0 AndAlso popularHaveYear >= 0 Then + b = GetMovieInfo(r.PopularTitles.Item(popularHaveYear).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCrew, False, Options, True) + ElseIf r.ExactMatches.Count > 0 AndAlso (r.ExactMatches(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count > 0 AndAlso (r.PopularTitles(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.PopularTitles.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PartialMatches.Count > 0 AndAlso (r.PartialMatches(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.PartialMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + End Select + + If b Then + Return imdbMovie + Else + Return New MediaContainers.Movie + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New MediaContainers.Movie + End Try + End Function + + Private Function FindYear(ByVal tmpname As String, ByVal lst As List(Of MediaContainers.Movie)) As Integer + Dim tmpyear As String = "" + Dim i As Integer + Dim ret As Integer = -1 + tmpname = Path.GetFileNameWithoutExtension(tmpname) + tmpname = tmpname.Replace(".", " ").Trim.Replace("(", " ").Replace(")", "").Trim + i = tmpname.LastIndexOf(" ") + If i >= 0 Then + tmpyear = tmpname.Substring(i + 1, tmpname.Length - i - 1) + If IsNumeric(tmpyear) AndAlso Convert.ToInt32(tmpyear) > 1950 Then 'let's assume there are no movies older then 1950 + For c = 0 To lst.Count - 1 + If lst(c).Year = tmpyear Then + ret = c + Exit For + End If + Next + End If + End If + Return ret + End Function + + Public Sub GetSearchMovieInfoAsync(ByVal imdbID As String, ByVal IMDBMovie As MediaContainers.Movie, ByVal Options As Structures.ScrapeOptions) + Try + If Not bwIMDB.IsBusy Then + bwIMDB.WorkerReportsProgress = False + bwIMDB.WorkerSupportsCancellation = True + bwIMDB.RunWorkerAsync(New Arguments With {.Search = SearchType.SearchDetails, _ + .Parameter = imdbID, .IMDBMovie = IMDBMovie, .Options = Options}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + + Public Sub SearchMovieAsync(ByVal sMovie As String, ByVal filterOptions As Structures.ScrapeOptions) + Try + If Not bwIMDB.IsBusy Then + bwIMDB.WorkerReportsProgress = False + bwIMDB.WorkerSupportsCancellation = True + bwIMDB.RunWorkerAsync(New Arguments With {.Search = SearchType.Movies, .Parameter = sMovie, .Options = filterOptions}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + Try + Select Case Args.Search + Case SearchType.Movies + Dim r As MovieSearchResults = SearchMovie(Args.Parameter) + e.Result = New Results With {.ResultType = SearchType.Movies, .Result = r} + Case SearchType.SearchDetails + Dim s As Boolean = GetMovieInfo(Args.Parameter, Args.IMDBMovie, False, False, True, Args.Options, True) + e.Result = New Results With {.ResultType = SearchType.SearchDetails, .Success = s} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub BW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDB.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.ResultType + Case SearchType.Movies + RaiseEvent SearchResultsDownloaded(DirectCast(Res.Result, MovieSearchResults)) + Case SearchType.SearchDetails + Dim movieInfo As MovieSearchResults = DirectCast(Res.Result, MovieSearchResults) + RaiseEvent SearchMovieInfoDownloaded(sPoster, Res.Success) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Function GetForcedTitle(ByVal strID As String, ByVal oTitle As String) As String + Dim fTitle As String = oTitle + + Try + If bwIMDB.CancellationPending Then Return Nothing + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/releaseinfo#akas")) + sHTTP = Nothing + + Dim D, W As Integer + + D = HTML.IndexOf("<h5><a name=""akas"">Also Known As (AKA)</a></h5>") + + If D > 0 Then + W = HTML.IndexOf("</table>", D) + Dim rTitles As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), TD_PATTERN_4, RegexOptions.Multiline Or RegexOptions.IgnorePatternWhitespace) + + If rTitles.Count > 0 Then + For i As Integer = 1 To rTitles.Count - 1 Step 2 + If rTitles(i).Value.ToString.Contains(Master.eSettings.ForceTitle) AndAlso Not rTitles(i).Value.ToString.Contains(String.Concat(Master.eSettings.ForceTitle, " (working title)")) AndAlso Not rTitles(i).Value.ToString.Contains(String.Concat(Master.eSettings.ForceTitle, " (fake working title)")) Then + fTitle = CleanTitle(Web.HttpUtility.HtmlDecode(rTitles(i - 1).Groups("title").Value.ToString.Trim)) + Exit For + End If + Next + End If + + End If + + Return fTitle + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return fTitle + End Try + End Function + + Private Function GetMovieID(ByVal strObj As String) As String + Return Regex.Match(strObj, IMDB_ID_REGEX).ToString.Replace("tt", String.Empty) + End Function + + Private Function SearchMovie(ByVal sMovie As String) As MovieSearchResults + Try + + Dim D, W As Integer + Dim R As New MovieSearchResults + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft")) + Dim HTMLp As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&ref_=fn_tt_pop")) + Dim HTMLm As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&ref_=fn_ft")) + Dim HTMLe As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&exact=true&ref_=fn_tt_ex")) + Dim rUri As String = sHTTP.ResponseUri + sHTTP = Nothing + + 'Check if we've been redirected straight to the movie page + If Regex.IsMatch(rUri, IMDB_ID_REGEX) Then + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(Regex.Match(rUri, IMDB_ID_REGEX).ToString, _ + StringUtils.ProperCase(sMovie), Regex.Match(Regex.Match(HTML, MOVIE_TITLE_PATTERN).ToString, "(?<=\()\d+(?=.*\))").ToString, 0) + R.ExactMatches.Add(lNewMovie) + Return R + End If + + 'popular titles + D = HTMLp.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mPartial + W = HTMLp.IndexOf("</table>", D) + 8 + + Dim Table As String = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString + + Dim qPopular = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.PopularTitles = qPopular.ToList +mPartial: + + D = HTMLm.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mExact + W = HTMLm.IndexOf("</table>", D) + 8 + + Table = Regex.Match(HTMLm.Substring(D, W - D), TABLE_PATTERN).ToString + Dim qpartial = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.PartialMatches = qpartial.ToList + 'mApprox: + + ' 'Now process "Approx Matches" and merge both Partial and Approx matches + ' D = HTML.IndexOf("Titles (Approx Matches)") + ' If D <= 0 Then GoTo mExact + ' W = HTML.IndexOf("</table>", D) + 8 + + ' Table = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString + + ' Dim qApprox = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + ' Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + ' Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + ' Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + ' If Not IsNothing(R.PartialMatches) Then + ' R.PartialMatches = R.PartialMatches.Union(qApprox.ToList).ToList + ' Else + ' R.PartialMatches = qApprox.ToList + ' End If + +mExact: + + D = HTMLe.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mResult + W = HTMLe.IndexOf("</table>", D) + 8 + + Table = String.Empty + Table = Regex.Match(HTMLe.Substring(D, W - D), TABLE_PATTERN).ToString + + Dim qExact = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString.ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.ExactMatches = qExact.ToList + +mResult: + Return R + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Nothing + End Try + End Function + + Public Function GetTrailers(imdbID As String) As List(Of String) + Dim TrailerList As New List(Of String) + Dim TrailerNumber As Integer = 0 + Dim Links As MatchCollection + Dim trailerPage As String + Dim trailerUrl As String + Dim Link As Match + Dim currPage As Integer = 0 + + Dim WebPage As New HTTP + Dim _ImdbTrailerPage As String = String.Empty + + _ImdbTrailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", imdbID, "/videogallery/content_type-Trailer")) + If _ImdbTrailerPage.ToLower.Contains("page not found") Then + _ImdbTrailerPage = String.Empty + End If + + If Not String.IsNullOrEmpty(_ImdbTrailerPage) Then + Link = Regex.Match(_ImdbTrailerPage, "of [0-9]{1,3}") + + If Link.Success Then + TrailerNumber = Convert.ToInt32(Link.Value.Substring(3)) + + If TrailerNumber > 0 Then + currPage = Convert.ToInt32(Math.Ceiling(TrailerNumber / 10)) + + For i As Integer = 1 To currPage + If Not i = 1 Then + _ImdbTrailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", imdbID, "/videogallery/content_type-Trailer?page=", i)) + End If + + Links = Regex.Matches(_ImdbTrailerPage, "screenplay/(vi[0-9]+)/") + Dim linksCollection As String() = From m As Object In Links Select CType(m, Match).Value Distinct.ToArray() + + Links = Regex.Matches(_ImdbTrailerPage, "imdb/(vi[0-9]+)/") + linksCollection = linksCollection.Concat(From m As Object In Links Select CType(m, Match).Value Distinct.ToArray()).ToArray + + For Each value As String In linksCollection + If value.Contains("screenplay") Then + trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player")) + trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + TrailerList.Add(trailerUrl) + End If + Else + ''480p Trailer + 'trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player?uff=2")) + 'trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + 'If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + ' Me._TrailerList.Add(trailerUrl) + 'End If + + ''720p Trailer + 'trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player?uff=3")) + 'trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + 'If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + ' Me._TrailerList.Add(trailerUrl) + 'End If + End If + Next + Next + End If + End If + End If + Return TrailerList + End Function + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim FullCast As Boolean + Dim FullCrew As Boolean + Dim IMDBMovie As MediaContainers.Movie + Dim Options As Structures.ScrapeOptions + Dim Parameter As String + Dim Search As SearchType + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultType As SearchType + Dim Success As Boolean + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TVDB.Data/Scraper/clsScrapeIMPA.vb b/Addons/scraper.TVDB.Data/Scraper/clsScrapeIMPA.vb new file mode 100644 index 0000000..5f052ed --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/clsScrapeIMPA.vb @@ -0,0 +1,179 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMPA + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwIMPA As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwIMPA.IsBusy Then Me.bwIMPA.CancelAsync() + + While Me.bwIMPA.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMPA.IsBusy Then + bwIMPA.WorkerSupportsCancellation = True + bwIMPA.WorkerReportsProgress = True + bwIMPA.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMPAPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMPA.CancellationPending Then Return Nothing + Dim sURL As String = GetLink(imdbID) + + If Not String.IsNullOrEmpty(sURL) Then + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If bwIMPA.CancellationPending Then Return Nothing + + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + + Dim PosterURL As String + + For Each mPoster As Match In mcPoster + If bwIMPA.CancellationPending Then Return Nothing + PosterURL = Strings.Replace(String.Format("{0}/{1}", sURL.Substring(0, sURL.LastIndexOf("/")), mPoster.Value.ToString()).Replace("thumbs", "posters"), "imp_", String.Empty) + + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + + PosterURL = PosterURL.Insert(PosterURL.LastIndexOf("."), "_xlg") + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = PosterURL}) + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMPA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPA.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMPAPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMPA_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPA.ProgressChanged + If Not bwIMPA.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMPA_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPA.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + Private Function GetLink(ByVal IMDBID As String) As String + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) + sHTTP = Nothing + + Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") + If mcIMPA.Count > 0 Then + 'just use the first one if more are found + Return mcIMPA(0).Value.ToString + Else + Return String.Empty + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return String.Empty + End Try + End Function + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + Dim sType As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TVDB.Data/Scraper/clsScrapeImages.vb b/Addons/scraper.TVDB.Data/Scraper/clsScrapeImages.vb new file mode 100644 index 0000000..7bdb821 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/clsScrapeImages.vb @@ -0,0 +1,940 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class ScrapeImages + +#Region "Methods" + + Public Shared Function GetPreferredImage(ByRef Image As Images, ByVal IMDBID As String, ByVal iType As Enums.ImageType, ByRef imgResult As Containers.ImgResult, ByVal sPath As String, ByVal doETs As Boolean, Optional ByVal doAsk As Boolean = False) As Boolean + '// + ' Try to get the best match between what the user selected in settings and the actual posters downloaded + '\\ + + Dim hasImages As Boolean = False + Dim TMDB As New TMDB.Scraper + Dim IMPA As New IMPA.Scraper + Dim MPDB As New MPDB.Scraper + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim tmpListIMPA As New List(Of MediaContainers.Image) + Dim tmpListMPDB As New List(Of MediaContainers.Image) + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) + + Try + + If iType = Enums.ImageType.Posters Then 'posters + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tImage.URL) + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + tmpListTMDB.AddRange(TMDB.GetTMDBImages(IMDBID, "poster")) + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + tmpListTMDB.AddRange(IMPA.GetIMPAPosters(IMDBID)) + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + tmpListTMDB.AddRange(MPDB.GetMPDBPosters(IMDBID)) + End If + + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) + If Not IsNothing(tmdbThumb.WebImage.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) + End If + Image.Clear() + Next + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + End If + Else + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + 'download all TMBD images + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "poster") + + 'check each one for it's size to see if it matched the preferred size + If tmpListTMDB.Count > 0 Then + hasImages = True + + If Not Master.eSettings.NoSaveImagesToNfo Then + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + imgResult.Posters.Add(tmdbThumb.URL) + Next + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Xlrg + If iMovie.Description.ToLower = "original" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Lrg + If iMovie.Description.ToLower = "mid" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Mid + If iMovie.Description.ToLower = "cover" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Small + If iMovie.Description.ToLower = "thumb" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + 'no "wide" for TMDB + End Select + Image.Clear() + Next + End If + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB found... try IMPA + + tmpListIMPA = IMPA.GetIMPAPosters(IMDBID) + + If tmpListIMPA.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMPA + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMPAX) Then + tmpIMPAX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMPAL) Then + tmpIMPAL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMPAM) Then + tmpIMPAM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMPAS) Then + tmpIMPAS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMPAW) Then + tmpIMPAW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB or IMPA found... try MPDB + + tmpListMPDB = MPDB.GetMPDBPosters(IMDBID) + + If tmpListMPDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListMPDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpMPDBX) Then + tmpMPDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpMPDBL) Then + tmpMPDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpMPDBM) Then + tmpMPDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpMPDBS) Then + tmpMPDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpMPDBW) Then + tmpMPDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If IsNothing(Image.Image) AndAlso Not doAsk Then + 'STILL no image found, just get the first available image, starting with the largest + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + 'check TMDB first + If tmpListTMDB.Count > 0 Then + Dim x = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If x.Count > 0 Then + Image.FromWeb(x(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "cover" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + End If + End If + + Image.Clear() + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + If tmpListIMPA.Count > 0 Then + If Not IsNothing(tmpIMPAX) Then + Image = tmpIMPAX + GoTo foundIT + End If + If Not IsNothing(tmpIMPAL) Then + Image = tmpIMPAL + GoTo foundIT + End If + If Not IsNothing(tmpIMPAM) Then + Image = tmpIMPAM + GoTo foundIT + End If + If Not IsNothing(tmpIMPAS) Then + Image = tmpIMPAS + GoTo foundIT + End If + If Not IsNothing(tmpIMPAW) Then + Image = tmpIMPAW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + If tmpListMPDB.Count > 0 Then + If Not IsNothing(tmpMPDBX) Then + Image = tmpMPDBX + GoTo foundIT + End If + If Not IsNothing(tmpMPDBL) Then + Image = tmpMPDBL + GoTo foundIT + End If + If Not IsNothing(tmpMPDBM) Then + Image = tmpMPDBM + GoTo foundIT + End If + If Not IsNothing(tmpMPDBS) Then + Image = tmpMPDBS + GoTo foundIT + End If + If Not IsNothing(tmpMPDBW) Then + Image = tmpMPDBW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + End If + + End If + + Else 'fanart + + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + + Dim ETHashes As New List(Of String) + If Master.eSettings.AutoET AndAlso doETs Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + End If + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + Image.Clear() + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + +foundIT: + TMDB = Nothing + IMPA = Nothing + MPDB = Nothing + tmpListTMDB = Nothing + tmpListIMPA = Nothing + tmpListMPDB = Nothing + Return hasImages + End Function + + Public Shared Sub GetPreferredFAasET(ByVal IMDBID As String, ByVal sPath As String) + Dim _Image As Image + Dim TMDB As New TMDB.Scraper + Dim IMPA As New IMPA.Scraper + Dim MPDB As New MPDB.Scraper + + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim ETHashes As New List(Of String) + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, "fanart") + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + For Each sFile As FileInfo In lFi + Select Case True + Case sFile.Name.Contains("(original)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Master.eSettings.AutoET Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + End If + Next + End If + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + 'Me.Clear() + Next + + _Image = Nothing + FileUtils.Delete.DeleteDirectory(CachePath) + + End If + End If + End If + End Sub + + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ + AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ + (AdvancedSettings.GetBooleanSetting("UseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Shared Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + End If + + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) + End Sub + + ' Duplicate of clsImage + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0, Optional ByVal sUrl As String = "") + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' If Not sUrl = "" Then + ' Dim stroriginalurl As String = sUrl + + ' 'Image Download from tmdb is special, need original size + ' If Not sUrl.Contains("impawards") AndAlso Not sUrl.Contains("movieposterdb") Then + ' 'Always get original image... + ' 'links to images (tmdb) have following structure: 'example: http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w92/x65b4vsFKYuA878pLN1mJiAsgIP.jpg + ' Dim stringArray() As String = Split(stroriginalurl, "/") + ' If stringArray.Length > 4 Then + ' ' stringArray(5) contains values like "w185","original", "w154"...-->size -> we want original! + ' stringArray(5) = "original" + ' stroriginalurl = Join(stringArray, "/") + ' End If + ' End If + ' Dim webclient As New Net.WebClient + ' webclient.DownloadFile(stroriginalurl, sPath) + ' Else + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + ' End If + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub + + Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo + Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() + + For i As Integer = 0 To UBound(Encoders) + If Encoders(i).FormatID = Format.Guid Then + Return Encoders(i) + End If + Next + + Return Nothing + End Function +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/Scraper/clsScrapeMPDB.vb b/Addons/scraper.TVDB.Data/Scraper/clsScrapeMPDB.vb new file mode 100644 index 0000000..7a7e13b --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/clsScrapeMPDB.vb @@ -0,0 +1,160 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Namespace MPDB + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwMPDB As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwMPDB.IsBusy Then Me.bwMPDB.CancelAsync() + + While Me.bwMPDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String) + Try + If Not Me.bwMPDB.IsBusy Then + Me.bwMPDB.WorkerSupportsCancellation = True + Me.bwMPDB.WorkerReportsProgress = True + Me.bwMPDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetMPDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + + If Me.bwMPDB.CancellationPending Then Return Nothing + + Try + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.movieposterdb.com/movie/", imdbID)) + sHTTP = Nothing + + If Me.bwMPDB.CancellationPending Then Return Nothing + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(1) + End If + + If Regex.IsMatch(HTML, String.Concat("http://www.imdb.com/title/tt", imdbID), RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline) Then + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "http://www.movieposterdb.com/posters/[0-9_](.*?)/[0-9](.*?)/[0-9](.*?)/[a-z0-9_](.*?).jpg") + + Dim PosterURL As String = String.Empty + + For Each mPoster As Match In mcPoster + If Me.bwMPDB.CancellationPending Then Return Nothing + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "l") + alPosters.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + Next + End If + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Private Sub bwMPDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetMPDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwMPDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDB.ProgressChanged + If Not bwMPDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwMPDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TVDB.Data/Scraper/clsScrapeOFDB.vb b/Addons/scraper.TVDB.Data/Scraper/clsScrapeOFDB.vb new file mode 100644 index 0000000..a220a06 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/clsScrapeOFDB.vb @@ -0,0 +1,280 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class OFDB + + #Region "Fields" + + Private imdbID As String + Private OFDBMovie As MediaContainers.Movie + Private _genre As String + Private _outline As String + Private _plot As String + Private _title As String + + #End Region 'Fields + + #Region "Constructors" + + Public Sub New(ByVal sID As String, ByRef mMovie As MediaContainers.Movie) + Clear() + imdbID = sID + OFDBMovie = mMovie + + GetOFDBDetails() + End Sub + + #End Region 'Constructors + + #Region "Properties" + + Public Property Genre() As String + Get + Return _genre + End Get + Set(ByVal value As String) + _genre = value + End Set + End Property + + Public Property Outline() As String + Get + Return _outline + End Get + Set(ByVal value As String) + _outline = value + End Set + End Property + + Public Property Plot() As String + Get + Return _plot + End Get + Set(ByVal value As String) + _plot = value + End Set + End Property + + Public Property Title() As String + Get + Return _title + End Get + Set(ByVal value As String) + _title = value + End Set + End Property + + #End Region 'Properties + + #Region "Methods" + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Sub Clear() + _title = String.Empty + _outline = String.Empty + _plot = String.Empty + _genre = String.Empty + End Sub + + Private Function GetFullPlot(ByVal sURL As String) As String + Dim FullPlot As String = String.Empty + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + Dim D, W, Wq, Wqq, B As Integer + Dim tmpHTML As String + + D = HTML.IndexOf("Eine Inhaltsangabe von") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim + W = tmpHTML.IndexOf("</b></b><br><br>") + Wq = tmpHTML.IndexOf("<b>Quelle:</b>") + If Wq > 0 Then + Wqq = tmpHTML.IndexOf("<br><br>", Wq) + B = tmpHTML.IndexOf("</font></p>", Wqq + 8) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(Wqq + 8, B - (Wqq + 8)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + ElseIf W > 0 Then + B = tmpHTML.IndexOf("</font></p>", W + 16) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return FullPlot + End Function + + Private Sub GetOFDBDetails() + Dim sURL As String = GetOFDBUrlFromIMDBID() + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(Html) Then + 'title + If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(HTML, "<td width=""99\%""><h1 itemprop=""name""><font face=""Arial,Helvetica,sans-serif"" size=""3""><b>([^<]+)</b></font></h1></td>").Groups(1).Value.ToString)) + If OFDBTitle.EndsWith(", Der") Then + _title = String.Concat("Der ", OFDBTitle.Replace(", Der", " ")).Trim + ElseIf OFDBTitle.EndsWith(", Die") Then + _title = String.Concat("Die ", OFDBTitle.Replace(", Die", " ")).Trim + ElseIf OFDBTitle.EndsWith(", Das") Then + _title = String.Concat("Das ", OFDBTitle.Replace(", Das", " ")).Trim + ElseIf OFDBTitle.EndsWith(", The") Then + _title = String.Concat("The ", OFDBTitle.Replace(", The", " ")).Trim + Else + _title = OFDBTitle + End If + End If + + Dim D, Dq, W, Wq, B As Integer + Dim tmpHTML As String + + 'outline + If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then + D = HTML.IndexOf("<b>Inhalt:</b>") + Dq = HTML.IndexOf("<b>Inhalt:</b> <font style=") + + If Dq > 0 Then + Wq = HTML.IndexOf("<span itemprop=""description"">", Dq) + W = HTML.IndexOf("<a href=""plot", Wq + 29) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(Wq + 29, W - (Wq + 29)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + ElseIf D > 0 Then + W = HTML.IndexOf("<a href=""", D + 44) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(D + 44, W - (D + 44)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + + 'full plot + D = 0 : Dq = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then + D = HTML.IndexOf("<b>Inhalt:</b>") + Dq = HTML.IndexOf("<b>Inhalt:</b> <font style=") + + If Dq > 0 Then + Dim L As Integer = HTML.Length + tmpHTML = HTML.Substring(D + 197, L - (D + 197)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + ElseIf D > 0 Then + Dim L As Integer = HTML.Length + tmpHTML = HTML.Substring(D + 44, L - (D + 44)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + End If + End If + + 'genre + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Genre) OrElse Not Master.eSettings.LockGenre Then + D = HTML.IndexOf("class=""Normal"">Genre(s):</font></td>") + If D > 0 Then + W = HTML.IndexOf("</table>", D) + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), "<a.*?href=[""'](?<url>.*?)[""'].*?><span itemprop=""genre"">(?<name>.*?)</span></a>") + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + tGenre = StringUtils.GenreFilter(tGenre) + If Not String.IsNullOrEmpty(tGenre) Then + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + End If + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetOFDBUrlFromIMDBID() As String + Dim ofdbURL As String = String.Empty + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.ofdb.de/view.php?SText=", imdbID, "&Kat=IMDb&page=suchergebnis&sourceid=mozilla-search")) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(HTML) Then + Dim mcOFDBURL As MatchCollection = Regex.Matches(HTML, "<a href=""film/([^<]+)"" onmouseover") + If mcOFDBURL.Count > 0 Then + 'just use the first one if more are found + ofdbURL = String.Concat("http://www.ofdb.de/", Regex.Match(mcOFDBURL(0).Value.ToString, """(film/([^<]+))""").Groups(1).Value.ToString) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return ofdbURL + End Function + + #End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/Scraper/clsScrapeTMDB.vb b/Addons/scraper.TVDB.Data/Scraper/clsScrapeTMDB.vb new file mode 100644 index 0000000..d40e628 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/clsScrapeTMDB.vb @@ -0,0 +1,243 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI + +Namespace TMDB + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + + Private Const APIKey As String = "b1ecff8c76278262b27de1569f57f6bd" + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB...<OpenSearchDescription>...<movies>.Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<poster>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<backdrop>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Debug.Print("{0}/t{1}", tmdbI.@size, tmdbI.@url) + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + sHTTP = Nothing + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As String + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + Dim tLang As String + + tLang = AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en") + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/{0}/tt{1}", APIKey, imdbID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + Dim tmdbNode = From xNode In xmlTMDB.Elements + + If tmdbNode.Count > 0 Then + If Not tmdbNode(0).Value = "Your query didn't return any results." Then + Dim movieID As String = xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<id>.Value + Dim i As Integer + + + For i = 0 To 1 Step 1 + sHTTP = New HTTP + ApiXML = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/{0}/xml/{1}/{2}", tLang, APIKey, movieID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + Dim Trailers = From tNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie> Select tNode.<trailer> + If Trailers.Count > 0 AndAlso Not String.IsNullOrEmpty(Trailers(0).Value) Then + If Trailers(0).Value.ToLower.IndexOf("youtube.com") > 0 Then + Return Trailers(0).Value + i += 1 + End If + Else + tLang = "en" + End If + End If + Next + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return String.Empty + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/Scraper/clsScrapeTrailers.vb b/Addons/scraper.TVDB.Data/Scraper/clsScrapeTrailers.vb new file mode 100644 index 0000000..19327b4 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/clsScrapeTrailers.vb @@ -0,0 +1,265 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System +Imports System.IO +Imports System.Net +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Public Class Trailers + +#Region "Fields" + + Public IMDBURL As String + + Private WebPage As New HTTP + Private _ImdbID As String = String.Empty + Private _ImdbTrailerPage As String = String.Empty + Private _TrailerList As New List(Of String) + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + AddHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + Me.WebPage.Cancel() + End Sub + + Public Sub Clear() + Me._TrailerList.Clear() + Me._ImdbID = String.Empty + Me._ImdbTrailerPage = String.Empty + End Sub + + Public Sub DeleteTrailers(ByVal sPath As String, ByVal NewTrailer As String) + Dim parPath As String = Directory.GetParent(sPath).FullName + Dim tmpName As String = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(sPath))) + Dim tmpNameNoStack As String = Path.Combine(parPath, Path.GetFileNameWithoutExtension(sPath)) + For Each t As String In Master.eSettings.ValidExts + If File.Exists(String.Concat(tmpName, "-trailer", t)) AndAlso Not String.Concat(tmpName, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpName, "[trailer]", t)) AndAlso Not String.Concat(tmpName, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "[trailer]", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "-trailer", t)) AndAlso Not String.Concat(tmpNameNoStack, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) + End If + Next + End Sub + + Public Sub DownloadProgressUpdated(ByVal iPercent As Integer) + RaiseEvent ProgressUpdated(iPercent) + End Sub + + Public Function DownloadSingleTrailer(ByVal sPath As String, ByVal ImdbID As String, ByVal isSingle As Boolean, ByVal currNfoTrailer As String) As String + Dim tURL As String = String.Empty + Try + Me._TrailerList.Clear() + + If Not Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, True) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + + Dim tLink As String = String.Empty + If Regex.IsMatch(Me._TrailerList.Item(0).ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Dim YT As New YouTube.Scraper + YT.GetVideoLinks(Me._TrailerList.Item(0).ToString) + If YT.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + tLink = YT.VideoLinks(Master.eSettings.PreferredTrailerQuality).URL + Else + Select Case Master.eSettings.PreferredTrailerQuality + Case Enums.TrailerQuality.HD1080p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720p) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720p).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD1080pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720pVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720pVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HD720p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD720pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HQFLV + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HQVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.SQMP4 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.SQFLV + tLink = String.Empty + Case Enums.TrailerQuality.SQVP8 + tLink = String.Empty + End Select + End If + Else + tLink = Me._TrailerList.Item(0).ToString + End If + + If Not String.IsNullOrEmpty(tLink) Then + tURL = WebPage.DownloadFile(tLink, sPath, False, "trailer") + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + End If + ElseIf Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, False) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + tURL = Me._TrailerList.Item(0).ToString + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return tURL + End Function + + Public Function DownloadTrailer(ByVal sPath As String, ByVal sURL As String) As String + Dim tURL As String = String.Empty + If Not String.IsNullOrEmpty(sURL) Then + tURL = WebPage.DownloadFile(sURL, sPath, True, "trailer") + + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + Return tURL + End Function + + Public Function GetTrailers(ByVal ImdbID As String, Optional ByVal BreakAfterFound As Boolean = True) As List(Of String) + Me._ImdbID = ImdbID + If AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", False) Then + Me.GetImdbTrailer() + End If + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", False) Then + Me.GetTMDBTrailer() + End If + + Return Me._TrailerList + End Function + + Public Function IsAllowedToDownload(ByVal sPath As String, ByVal isDL As Boolean, ByVal currNfoTrailer As String, Optional ByVal isSS As Boolean = False) As Boolean + Dim fScanner As New Scanner + + If isDL Then + If String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) OrElse Master.eSettings.OverwriteTrailer Then + Return True + Else + If isSS AndAlso String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) Then + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + Else + Return False + End If + End If + Else + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + End If + End Function + + Private Sub GetIMDBTrailer() + Dim IMDB As New IMDB.Scraper + IMDB.IMDBURL = AdvancedSettings.GetSetting("IMDBURL", "akas.imdb.com") + Dim results As List(Of String) = IMDB.GetTrailers(_ImdbID) + + Me._TrailerList.AddRange(results) + + IMDB = Nothing + End Sub + + Private Sub GetTMDBTrailer() + Dim TMDB As New TMDB.Scraper + Dim YT As String = TMDB.GetTrailers(_ImdbID) + + If Not String.IsNullOrEmpty(YT) Then + Me._TrailerList.Add(YT) + End If + + TMDB = Nothing + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/Scraper/clsScrapeYouTube.vb b/Addons/scraper.TVDB.Data/Scraper/clsScrapeYouTube.vb new file mode 100644 index 0000000..b4603fd --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/clsScrapeYouTube.vb @@ -0,0 +1,335 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace YouTube + + Public Class Scraper + +#Region "Fields" + + Friend WithEvents bwYT As New System.ComponentModel.BackgroundWorker + + Private _VideoLinks As VideoLinkItemCollection + +#End Region 'Fields + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event VideoLinksRetrieved(ByVal bSuccess As Boolean) + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property VideoLinks() As VideoLinkItemCollection + Get + If _VideoLinks Is Nothing Then + _VideoLinks = New VideoLinkItemCollection + End If + Return _VideoLinks + End Get + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() + If bwYT.IsBusy Then bwYT.CancelAsync() + + While bwYT.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetVideoLinks(ByVal url As String) + Try + _VideoLinks = ParseYTFormats(url, False) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub GetVideoLinksAsync(ByVal url As String) + Try + If Not bwYT.IsBusy Then + _VideoLinks = Nothing + bwYT.WorkerSupportsCancellation = True + bwYT.RunWorkerAsync(url) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwYT.DoWork + Dim Url As String = DirectCast(e.Argument, String) + + Try + e.Result = ParseYTFormats(Url, True) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwYT.RunWorkerCompleted + Try + If e.Cancelled Then + 'user cancelled + RaiseEvent VideoLinksRetrieved(False) + ElseIf e.Error IsNot Nothing Then + 'exception occurred + RaiseEvent Exception(e.Error) + Else + 'all good + If e.Result IsNot Nothing Then + _VideoLinks = DirectCast(e.Result, VideoLinkItemCollection) + RaiseEvent VideoLinksRetrieved(True) + Else + RaiseEvent VideoLinksRetrieved(False) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetVideoTitle(ByVal HTML As String) As String + Dim result As String = "" + 'Dim KeyPattern As String = "'VIDEO_TITLE':\s*'([^']*?)'" + Dim KeyPattern As String = "meta name=\""title\"" content=\s*\""([^']*?)\""" + 'meta name="title" content= + If Regex.IsMatch(HTML, KeyPattern) Then + result = Regex.Match(HTML, KeyPattern).Groups(1).Value + End If + + Return result + End Function + + Private Function ParseYTFormats(ByVal url As String, ByVal doProgress As Boolean) As VideoLinkItemCollection + Dim DownloadLinks As New VideoLinkItemCollection + Dim sHTTP As New HTTP + + Try + If bwYT.CancellationPending Then Return DownloadLinks + + Dim Html As String = sHTTP.DownloadData(url) + If Html.ToLower.Contains("page not found") Then + Html = String.Empty + End If + + If String.IsNullOrEmpty(Html.Trim) Then Return DownloadLinks + If bwYT.CancellationPending Then Return DownloadLinks + + Dim VideoTitle As String = GetVideoTitle(Html) + VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") + + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) + If fmtMatch.Success Then + Dim FormatMap As String = fmtMatch.Groups(1).Value + Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") + + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) + Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) + + For i As Integer = 0 To FormatArray.Length - 1 + Dim yturl As String = rurl.Match(FormatArray(i)).Groups(1).Value + Dim ytitag As String = ritag.Match(FormatArray(i)).Groups(1).Value + Dim ytsig As String = rsig.Match(FormatArray(i)).Groups(1).Value + + 'Console.WriteLine("Trailer Itag: {0}", ytitag) + 'Console.WriteLine("Trailer Url: {0}", yturl) + 'Console.WriteLine("Trailer Sig: {0}", ytsig) + + Dim Link As New VideoLinkItem + Select Case ytitag + ' ********************************************************************** + ' see all itags http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs + ' ********************************************************************** + Case "5" + Link.Description = "240p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "6" + Link.Description = "270p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "13" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "17" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "18" + Link.Description = "360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQMP4 + Case "22" + Link.Description = "720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD720p + Case "34" + Link.Description = "360p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQFLV + Case "35" + Link.Description = "480p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HQFLV + Case "36" + Link.Description = "240p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "37" + Link.Description = "1080p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD1080p + Case "38" + Link.Description = "1536p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "43" + Link.Description = "360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.SQVP8 + Case "44" + Link.Description = "480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HQVP8 + Case "45" + Link.Description = "720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD720pVP8 + Case "46" + Link.Description = "1080p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD1080pVP8 + Case "82" + Link.Description = "3D 360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "83" + Link.Description = "3D 480p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "84" + Link.Description = "3D 720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "85" + Link.Description = "3D 520p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "100" + Link.Description = "3D 360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "101" + Link.Description = "3D 480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "102" + Link.Description = "3D 720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "120" + Link.Description = "720p LiveStream (FLV, AVC)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case Else + Link.Description = "Other" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + 'Continue For + End Select + + Link.URL = Web.HttpUtility.UrlDecode(Web.HttpUtility.UrlDecode(yturl)) & "&signature=" & ytsig & "&title=" & Web.HttpUtility.UrlEncode(VideoTitle) + Link.URL = Link.URL.Replace("sig=", "signature=") ' sig= returns HTTP 403 //oldstyle, keep it + 'Console.WriteLine("Trailer Url decoded: {0}", Link.URL) + + If bwYT.CancellationPending Then Return DownloadLinks + + If Not String.IsNullOrEmpty(Link.URL) AndAlso sHTTP.IsValidURL(Link.URL) Then + DownloadLinks.Add(Link) + End If + + If bwYT.CancellationPending Then Return DownloadLinks + + Next + + End If + Return DownloadLinks + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New VideoLinkItemCollection + Finally + sHTTP = Nothing + End Try + End Function + +#End Region 'Methods + + End Class + + Public Class VideoLinkItem + +#Region "Fields" + + Private _Description As String + Private _FormatQuality As Enums.TrailerQuality + Private _URL As String + +#End Region 'Fields + +#Region "Properties" + + Public Property Description() As String + Get + Return _Description + End Get + Set(ByVal value As String) + _Description = value + End Set + End Property + + Public Property URL() As String + Get + Return _URL + End Get + Set(ByVal value As String) + _URL = value + End Set + End Property + + Friend Property FormatQuality() As Enums.TrailerQuality + Get + Return _FormatQuality + End Get + Set(ByVal value As Enums.TrailerQuality) + _FormatQuality = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class VideoLinkItemCollection + Inherits Generic.SortedList(Of Enums.TrailerQuality, VideoLinkItem) + +#Region "Methods" + + Public Shadows Sub Add(ByVal Link As VideoLinkItem) + If Not MyBase.ContainsKey(Link.FormatQuality) Then MyBase.Add(Link.FormatQuality, Link) + End Sub + +#End Region 'Methods + + End Class + +End Namespace diff --git a/Addons/scraper.TVDB.Data/Scraper/dlgIMDBSearchResults.Designer.vb b/Addons/scraper.TVDB.Data/Scraper/dlgIMDBSearchResults.Designer.vb new file mode 100644 index 0000000..6d0924e --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/dlgIMDBSearchResults.Designer.vb @@ -0,0 +1,480 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgIMDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgIMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtIMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + Me.txtFileName = New System.Windows.Forms.TextBox() + Me.btnOpenFolder = New System.Windows.Forms.Button() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(501, 431) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(574, 431) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(8, 126) + Me.tvResults.Name = "tvResults" + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 5 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(298, 160) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(295, 100) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(295, 119) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(298, 325) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(476, 160) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(476, 186) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(476, 213) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtIMDBID + ' + Me.txtIMDBID.Enabled = False + Me.txtIMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtIMDBID.Location = New System.Drawing.Point(143, 429) + Me.txtIMDBID.Name = "txtIMDBID" + Me.txtIMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtIMDBID.TabIndex = 7 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(647, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(256, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(8, 433) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(128, 17) + Me.chkManual.TabIndex = 6 + Me.chkManual.Text = "Manual IMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(249, 429) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 8 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(476, 277) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(35, 13) + Me.lblIMDB.TabIndex = 19 + Me.lblIMDB.Text = "IMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(414, 160) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(32, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(414, 186) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(414, 213) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(414, 277) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(53, 13) + Me.lblIMDBHeader.TabIndex = 18 + Me.lblIMDBHeader.Text = "IMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(295, 309) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(266, 100) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 4 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(8, 101) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 3 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(368, 213) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 20 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(98, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching IMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(312, 185) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'txtFileName + ' + Me.txtFileName.Enabled = False + Me.txtFileName.Location = New System.Drawing.Point(8, 73) + Me.txtFileName.Name = "txtFileName" + Me.txtFileName.Size = New System.Drawing.Size(598, 22) + Me.txtFileName.TabIndex = 3 + ' + 'btnOpenFolder + ' + Me.btnOpenFolder.Location = New System.Drawing.Point(612, 73) + Me.btnOpenFolder.Name = "btnOpenFolder" + Me.btnOpenFolder.Size = New System.Drawing.Size(29, 23) + Me.btnOpenFolder.TabIndex = 23 + Me.btnOpenFolder.Text = "..." + Me.btnOpenFolder.UseVisualStyleBackColor = True + ' + 'dlgIMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(647, 492) + Me.ControlBox = False + Me.Controls.Add(Me.btnOpenFolder) + Me.Controls.Add(Me.txtFileName) + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtIMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgIMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents tvResults As System.Windows.Forms.TreeView + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lblYear As System.Windows.Forms.Label + Friend WithEvents lblDirector As System.Windows.Forms.Label + Friend WithEvents lblGenre As System.Windows.Forms.Label + Friend WithEvents txtIMDBID As System.Windows.Forms.TextBox + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents lblIMDB As System.Windows.Forms.Label + Friend WithEvents lblYearHeader As System.Windows.Forms.Label + Friend WithEvents lblDirectorHeader As System.Windows.Forms.Label + Friend WithEvents lblGenreHeader As System.Windows.Forms.Label + Friend WithEvents lblIMDBHeader As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel + Friend WithEvents Label4 As System.Windows.Forms.Label + Friend WithEvents txtFileName As System.Windows.Forms.TextBox + Friend WithEvents btnOpenFolder As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.TVDB.Data/Scraper/dlgIMDBSearchResults.resx b/Addons/scraper.TVDB.Data/Scraper/dlgIMDBSearchResults.resx new file mode 100644 index 0000000..fc0d614 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/dlgIMDBSearchResults.resx @@ -0,0 +1,190 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB9ElE + QVQ4T6XSTWgTQRQH8E0LaZPaD9oaxULRi0igJSroqYLoxaa3gpfSFrx4sGp7Kj31pDYnPQpG8dzgQcSg + 1orQZJPd2exWSYOxiXhKQz5oEjQxpubvm6WN2zUe1IXf7OzMe2/fLCsA+C9NF//GbwtPfD67wti5SES5 + +GZ19ZB532zfg8Lkq+uallFVFZymqRUqdNcYY9aYMFma1igpFoshl80in88jsbkJvhZRlAfGJCN9eOH3 + WxWF5TaiUezs1FCv13X8SiYSoD2IwaCTx5rpA20OS5KEVCqFWu07KpWyrlr9hkJhG4wxSOHwdXMypw+B + tTVXOBRCOr1FSVWUSkVSQrn8FcViEUyW8VkTr5iTOX14vbLSTgUK0d0j8C54IaCOZDIBRt1d9gYXjIl7 + GhM6xjWZAvl3yGQy9BFziMfj+Phegcf3FsLMc7TdfHbPmMztexBFcZ7O+oXwM+NdRP5xf/nVJ9uEF9aJ + h2ifeoyOyUcve+eedjUtwNHP0x8MBMaoo/EPauioIAgW+6jH233pFrpG76DTvYRu99LGwNhtW9MCf+IY + WbjRf3YOfWdm0Uf3gQuLh/m60EqvID3kGDlBhoiLnCKnd52ksCO9g+dnHM4p6eDxcY/VIvzqgAJaSRux + kQ5ygHSa7XXDtVBOo8C/g/ATj6yxruTRIKcAAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/Scraper/dlgIMDBSearchResults.vb b/Addons/scraper.TVDB.Data/Scraper/dlgIMDBSearchResults.vb new file mode 100644 index 0000000..6fde061 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/dlgIMDBSearchResults.vb @@ -0,0 +1,520 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports System.IO +Imports EmberAPI + +Public Class dlgIMDBSearchResults + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + Friend WithEvents tmrLoad As New System.Windows.Forms.Timer + Friend WithEvents tmrWait As New System.Windows.Forms.Timer + + Private IMDB As New IMDB.Scraper + Private sHTTP As New HTTP + Dim UseOFDBGenre As Boolean + Dim UseOFDBOutline As Boolean + Dim UseOFDBPlot As Boolean + Dim UseOFDBTitle As Boolean + Private _currnode As Integer = -1 + Private _prevnode As Integer = -2 + + Private _InfoCache As New Dictionary(Of String, MediaContainers.Movie) + Private _PosterCache As New Dictionary(Of String, System.Drawing.Image) + Private _filterOptions As Structures.ScrapeOptions + +#End Region 'Fields + + #Region "Methods" + + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + _filterOptions = filterOptions + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + chkManual.Enabled = False + IMDB.IMDBURL = IMDBURL + IMDB.SearchMovieAsync(sMovieTitle, _filterOptions) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal Res As IMDB.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + SearchResultsDownloaded(Res) + + Return MyBase.ShowDialog() + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.OK_Button.Enabled = False + pnlPicStatus.Visible = False + _InfoCache.Clear() + _PosterCache.Clear() + Me.ClearInfo() + Me.Label3.Text = Master.eLang.GetString(11, "Searching IMDB...") + Me.pnlLoading.Visible = True + chkManual.Enabled = False + IMDB.CancelAsync() + IMDB.IMDBURL = IMDBURL + IMDB.SearchMovieAsync(Me.txtSearch.Text, _filterOptions) + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + If Regex.IsMatch(Me.txtIMDBID.Text.Replace("tt", String.Empty), "\d\d\d\d\d\d\d") Then + IMDB.IMDBURL = IMDBURL + IMDB.GetSearchMovieInfoAsync(Me.txtIMDBID.Text.Replace("tt", String.Empty), Master.tmpMovie, Master.DefaultOptions) + Else + MsgBox(Master.eLang.GetString(12, "The ID you entered is not a valid IMDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + End If + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + sHTTP.StartDownloadImage(Args.pURL) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image, .IMDBId = Args.IMDBId} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + '// + ' Thread finished: display pic if it was able to get one + '\\ + + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbPoster.Image = Res.Result + If Not _PosterCache.ContainsKey(Res.IMDBId) Then + _PosterCache.Add(Res.IMDBId, Res.Result) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + pnlPicStatus.Visible = False + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Master.tmpMovie.Clear() + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub btnOpenFolder_Click(sender As Object, e As EventArgs) Handles btnOpenFolder.Click + Dim fPath As String = Directory.GetParent(Master.currMovie.Filename).FullName + + If Not String.IsNullOrEmpty(fPath) Then + Shell("Explorer.exe " & fPath, vbNormalFocus) + End If + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtIMDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.tvResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtIMDBID.Text = String.Empty + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblTagline.Text = String.Empty + Me.lblYear.Text = String.Empty + Me.lblDirector.Text = String.Empty + Me.lblGenre.Text = String.Empty + Me.txtOutline.Text = String.Empty + Me.lblIMDB.Text = String.Empty + Me.pbPoster.Image = Nothing + + Master.tmpMovie.Clear() + + IMDB.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.lblYearHeader.Visible = areVisible + Me.lblDirectorHeader.Visible = areVisible + Me.lblGenreHeader.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.lblIMDBHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + Me.lblYear.Visible = areVisible + Me.lblTagline.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblDirector.Visible = areVisible + Me.lblGenre.Visible = areVisible + Me.lblIMDB.Visible = areVisible + Me.pbPoster.Visible = areVisible + End Sub + + Private Sub dlgIMDBSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub dlgIMDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + pnlPicStatus.Visible = False + IMDB.IMDBURL = IMDBURL + IMDB.UseOFDBTitle = UseOFDBTitle + IMDB.UseOFDBOutline = UseOFDBOutline + IMDB.UseOFDBPlot = UseOFDBPlot + IMDB.UseOFDBGenre = UseOFDBGenre + AddHandler IMDB.SearchMovieInfoDownloaded, AddressOf SearchMovieInfoDownloaded + AddHandler IMDB.SearchResultsDownloaded, AddressOf SearchResultsDownloaded + + Try + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgIMDBSearchResults_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + Me.tvResults.Focus() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + If Me.chkManual.Checked AndAlso Me.btnVerify.Enabled Then + If Not Regex.IsMatch(Me.txtIMDBID.Text.Replace("tt", String.Empty), "\d\d\d\d\d\d\d") Then + MsgBox(Master.eLang.GetString(12, "The ID you entered is not a valid IMDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + Exit Sub + Else + If MsgBox(String.Concat(Master.eLang.GetString(13, "You have manually entered an IMDB ID but have not verified it is correct."), vbNewLine, vbNewLine, Master.eLang.GetString(101, "Are you sure you want to continue?", True)), MsgBoxStyle.YesNo, Master.eLang.GetString(14, "Continue without verification?")) = MsgBoxResult.No Then + Exit Sub + Else + Master.tmpMovie.IMDBID = Me.txtIMDBID.Text.Replace("tt", String.Empty) + End If + End If + End If + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.Close() + End Sub + + Private Sub SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + '// + ' Info downloaded... fill form with data + '\\ + + Me.pnlLoading.Visible = False + Me.OK_Button.Enabled = True + + Try + If bSuccess Then + Me.ControlsVisible(True) + Me.lblTitle.Text = Master.tmpMovie.Title + Me.lblTagline.Text = Master.tmpMovie.Tagline + Me.lblYear.Text = Master.tmpMovie.Year + Me.lblDirector.Text = Master.tmpMovie.Director + Me.lblGenre.Text = Master.tmpMovie.Genre + Me.txtOutline.Text = Master.tmpMovie.Outline + Me.lblIMDB.Text = Master.tmpMovie.IMDBID + + If _PosterCache.ContainsKey(Master.tmpMovie.IMDBID) Then + 'just set it + Me.pbPoster.Image = _PosterCache(Master.tmpMovie.IMDBID) + Else + 'go download it, if available + If Not String.IsNullOrEmpty(sPoster) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + pnlPicStatus.Visible = True + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = sPoster, .IMDBId = Master.tmpMovie.IMDBID}) + End If + + End If + + 'store clone of tmpmovie + If Not _InfoCache.ContainsKey(Master.tmpMovie.IMDBID) Then + _InfoCache.Add(Master.tmpMovie.IMDBID, GetMovieClone(Master.tmpMovie)) + End If + + + Me.btnVerify.Enabled = False + Else + If Me.chkManual.Checked Then + MsgBox(Master.eLang.GetString(15, "Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again."), MsgBoxStyle.Exclamation, Master.eLang.GetString(16, "Verification Failed")) + Me.btnVerify.Enabled = True + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SearchResultsDownloaded(ByVal M As IMDB.MovieSearchResults) + '// + ' Process the results that IMDB gave us + '\\ + + Try + Me.tvResults.Nodes.Clear() + Me.ClearInfo() + If Not IsNothing(M) Then + If M.PartialMatches.Count > 0 OrElse M.PopularTitles.Count > 0 OrElse M.ExactMatches.Count > 0 Then + Dim TnP As New TreeNode(String.Format(Master.eLang.GetString(17, "Partial Matches ({0})"), M.PartialMatches.Count)) + Dim selNode As New TreeNode + + If M.PartialMatches.Count > 0 Then + M.PartialMatches.Sort() + For Each Movie As MediaContainers.Movie In M.PartialMatches + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + selNode = TnP.FirstNode + End If + + If M.PopularTitles.Count > 0 Then + M.PopularTitles.Sort() + If M.PartialMatches.Count > 0 OrElse M.ExactMatches.Count > 0 Then + Me.tvResults.Nodes(TnP.Index).Collapse() + End If + + TnP = New TreeNode(String.Format(Master.eLang.GetString(19, "Popular Titles ({0})"), M.PopularTitles.Count)) + + For Each Movie As MediaContainers.Movie In M.PopularTitles + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + + selNode = TnP.FirstNode + End If + + If M.ExactMatches.Count > 0 Then + M.ExactMatches.Sort() + If M.PartialMatches.Count > 0 Then + Me.tvResults.Nodes(TnP.Index).Collapse() + End If + TnP = New TreeNode(String.Format(Master.eLang.GetString(18, "Exact Matches ({0})"), M.ExactMatches.Count)) + For Each Movie As MediaContainers.Movie In M.ExactMatches + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + + selNode = TnP.FirstNode + + End If + Me._prevnode = -2 + + 'determine if we automatically start downloading info for selected node + If M.ExactMatches.Count > 0 Then + Me.tvResults.SelectedNode = selNode + ElseIf M.PopularTitles.Count > 0 Then + Me.tvResults.SelectedNode = selNode + ElseIf M.PartialMatches.Count > 0 Then + Me.tvResults.SelectedNode = selNode + Else + Me.tvResults.SelectedNode = Nothing + End If + Me.tvResults.Focus() + Else + Me.tvResults.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(20, "No Matches Found")}) + End If + End If + Me.pnlLoading.Visible = False + chkManual.Enabled = True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.Label2.Text = Master.eLang.GetString(21, "View details of each result to find the proper movie.") + Me.Label1.Text = Master.eLang.GetString(22, "Movie Search Results") + Me.chkManual.Text = Master.eLang.GetString(23, "Manual IMDB Entry:") + Me.btnVerify.Text = Master.eLang.GetString(24, "Verify") + Me.lblYearHeader.Text = Master.eLang.GetString(49, "Year:", True) + Me.lblDirectorHeader.Text = Master.eLang.GetString(239, "Director:", True) + Me.lblGenreHeader.Text = Master.eLang.GetString(51, "Genre(s):", True) + Me.lblIMDBHeader.Text = Master.eLang.GetString(289, "IMDB ID:", True) + Me.lblPlotHeader.Text = Master.eLang.GetString(242, "Plot Outline:", True) + Me.Label3.Text = Master.eLang.GetString(25, "Searching IMDB...") + Me.txtFileName.Text = Master.currMovie.Filename + End Sub + + Private Sub tmrLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoad.Tick + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + Me.pnlLoading.Visible = True + Me.Label3.Text = Master.eLang.GetString(26, "Downloading details...") + + IMDB.IMDBURL = IMDBURL + IMDB.GetSearchMovieInfoAsync(Me.tvResults.SelectedNode.Tag.ToString, Master.tmpMovie, Master.DefaultOptions) + End Sub + + Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrWait.Tick + If Not Me._prevnode = Me._currnode Then + Me._prevnode = Me._currnode + Me.tmrWait.Stop() + Me.tmrLoad.Start() + Else + Me.tmrLoad.Stop() + Me.tmrWait.Stop() + End If + End Sub + Private Sub tvResults_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvResults.AfterSelect + Try + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + + Me.ClearInfo() + Me.OK_Button.Enabled = False + + If Not IsNothing(Me.tvResults.SelectedNode.Tag) AndAlso Not String.IsNullOrEmpty(Me.tvResults.SelectedNode.Tag.ToString) Then + Me._currnode = Me.tvResults.SelectedNode.Index + + 'check if this movie is in the cache already + If _InfoCache.ContainsKey(Me.tvResults.SelectedNode.Tag.ToString) Then + Master.tmpMovie = GetMovieClone(_InfoCache(Me.tvResults.SelectedNode.Tag.ToString)) + SearchMovieInfoDownloaded(String.Empty, True) + Return + End If + + Me.pnlLoading.Visible = True + Me.tmrWait.Start() + Else + Me.pnlLoading.Visible = False + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub tvResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub txtIMDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtIMDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtIMDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtIMDBID.TextChanged + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Function GetMovieClone(ByVal original As MediaContainers.Movie) As MediaContainers.Movie + 'have to do this the old-fashioned way because it is not serializable + Dim result As New MediaContainers.Movie + With result + .IMDBID = original.IMDBID + .Genre = original.Genre + .Title = original.Title + .Tagline = original.Tagline + .Year = original.Year + .Director = original.Director + .Genre = original.Genre + .Outline = original.Outline + End With + Return result + 'Using mem As New IO.MemoryStream() + ' Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, New System.Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.Clone)) + ' bin.Serialize(mem, original) + ' mem.Seek(0, IO.SeekOrigin.Begin) + ' Return DirectCast(bin.Deserialize(mem), MediaContainers.Movie) + 'End Using + End Function + + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim pURL As String + Dim IMDBId As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Image + Dim IMDBId As String + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/Scraper/dlgImgSelect.Designer.vb b/Addons/scraper.TVDB.Data/Scraper/dlgImgSelect.Designer.vb new file mode 100644 index 0000000..213f00e --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/dlgImgSelect.Designer.vb @@ -0,0 +1,466 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgImgSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgImgSelect)) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.pnlSize = New System.Windows.Forms.Panel() + Me.btnPreview = New System.Windows.Forms.Button() + Me.rbSmall = New System.Windows.Forms.RadioButton() + Me.rbMedium = New System.Windows.Forms.RadioButton() + Me.rbLarge = New System.Windows.Forms.RadioButton() + Me.rbXLarge = New System.Windows.Forms.RadioButton() + Me.pnlFanart = New System.Windows.Forms.Panel() + Me.chkThumb = New System.Windows.Forms.CheckBox() + Me.chkMid = New System.Windows.Forms.CheckBox() + Me.chkOriginal = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlDLStatus = New System.Windows.Forms.Panel() + Me.pnlMPDB = New System.Windows.Forms.Panel() + Me.lblDL3Status = New System.Windows.Forms.Label() + Me.lblDL3 = New System.Windows.Forms.Label() + Me.pbDL3 = New System.Windows.Forms.ProgressBar() + Me.pnlIMPA = New System.Windows.Forms.Panel() + Me.lblDL2Status = New System.Windows.Forms.Label() + Me.lblDL2 = New System.Windows.Forms.Label() + Me.pbDL2 = New System.Windows.Forms.ProgressBar() + Me.lblDL1Status = New System.Windows.Forms.Label() + Me.lblDL1 = New System.Windows.Forms.Label() + Me.pbDL1 = New System.Windows.Forms.ProgressBar() + Me.pnlSinglePic = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.TableLayoutPanel1.SuspendLayout() + Me.pnlBottomMain.SuspendLayout() + Me.pnlSize.SuspendLayout() + Me.pnlFanart.SuspendLayout() + Me.pnlDLStatus.SuspendLayout() + Me.pnlMPDB.SuspendLayout() + Me.pnlIMPA.SuspendLayout() + Me.pnlSinglePic.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(687, 11) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(836, 495) + Me.pnlBG.TabIndex = 1 + Me.pnlBG.Visible = False + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.pnlSize) + Me.pnlBottomMain.Controls.Add(Me.pnlFanart) + Me.pnlBottomMain.Controls.Add(Me.lblInfo) + Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) + Me.pnlBottomMain.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 495) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(836, 50) + Me.pnlBottomMain.TabIndex = 0 + ' + 'pnlSize + ' + Me.pnlSize.BackColor = System.Drawing.Color.White + Me.pnlSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.pnlSize.Controls.Add(Me.btnPreview) + Me.pnlSize.Controls.Add(Me.rbSmall) + Me.pnlSize.Controls.Add(Me.rbMedium) + Me.pnlSize.Controls.Add(Me.rbLarge) + Me.pnlSize.Controls.Add(Me.rbXLarge) + Me.pnlSize.Location = New System.Drawing.Point(8, 8) + Me.pnlSize.Name = "pnlSize" + Me.pnlSize.Size = New System.Drawing.Size(673, 34) + Me.pnlSize.TabIndex = 1 + Me.pnlSize.Visible = False + ' + 'btnPreview + ' + Me.btnPreview.Enabled = False + Me.btnPreview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnPreview.Image = CType(resources.GetObject("btnPreview.Image"), System.Drawing.Image) + Me.btnPreview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPreview.Location = New System.Drawing.Point(593, 5) + Me.btnPreview.Name = "btnPreview" + Me.btnPreview.Size = New System.Drawing.Size(75, 23) + Me.btnPreview.TabIndex = 4 + Me.btnPreview.Text = "Preview" + Me.btnPreview.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPreview.UseVisualStyleBackColor = True + ' + 'rbSmall + ' + Me.rbSmall.AutoSize = True + Me.rbSmall.Enabled = False + Me.rbSmall.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbSmall.Location = New System.Drawing.Point(475, 8) + Me.rbSmall.Name = "rbSmall" + Me.rbSmall.Size = New System.Drawing.Size(53, 17) + Me.rbSmall.TabIndex = 3 + Me.rbSmall.TabStop = True + Me.rbSmall.Text = "Small" + Me.rbSmall.UseVisualStyleBackColor = True + ' + 'rbMedium + ' + Me.rbMedium.AutoSize = True + Me.rbMedium.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbMedium.Location = New System.Drawing.Point(201, 8) + Me.rbMedium.Name = "rbMedium" + Me.rbMedium.Size = New System.Drawing.Size(69, 17) + Me.rbMedium.TabIndex = 1 + Me.rbMedium.TabStop = True + Me.rbMedium.Text = "Medium" + Me.rbMedium.UseVisualStyleBackColor = True + ' + 'rbLarge + ' + Me.rbLarge.AutoSize = True + Me.rbLarge.Enabled = False + Me.rbLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbLarge.Location = New System.Drawing.Point(343, 8) + Me.rbLarge.Name = "rbLarge" + Me.rbLarge.Size = New System.Drawing.Size(55, 17) + Me.rbLarge.TabIndex = 2 + Me.rbLarge.TabStop = True + Me.rbLarge.Text = "Cover" + Me.rbLarge.UseVisualStyleBackColor = True + ' + 'rbXLarge + ' + Me.rbXLarge.AutoSize = True + Me.rbXLarge.Enabled = False + Me.rbXLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbXLarge.Location = New System.Drawing.Point(26, 8) + Me.rbXLarge.Name = "rbXLarge" + Me.rbXLarge.Size = New System.Drawing.Size(66, 17) + Me.rbXLarge.TabIndex = 0 + Me.rbXLarge.TabStop = True + Me.rbXLarge.Text = "Original" + Me.rbXLarge.UseVisualStyleBackColor = True + ' + 'pnlFanart + ' + Me.pnlFanart.BackColor = System.Drawing.Color.White + Me.pnlFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFanart.Controls.Add(Me.chkThumb) + Me.pnlFanart.Controls.Add(Me.chkMid) + Me.pnlFanart.Controls.Add(Me.chkOriginal) + Me.pnlFanart.Location = New System.Drawing.Point(8, 8) + Me.pnlFanart.Name = "pnlFanart" + Me.pnlFanart.Size = New System.Drawing.Size(339, 34) + Me.pnlFanart.TabIndex = 5 + Me.pnlFanart.Visible = False + ' + 'chkThumb + ' + Me.chkThumb.AutoSize = True + Me.chkThumb.Location = New System.Drawing.Point(231, 8) + Me.chkThumb.Name = "chkThumb" + Me.chkThumb.Size = New System.Drawing.Size(111, 17) + Me.chkThumb.TabIndex = 2 + Me.chkThumb.Text = "Check All Thumb" + Me.chkThumb.UseVisualStyleBackColor = True + ' + 'chkMid + ' + Me.chkMid.AutoSize = True + Me.chkMid.Location = New System.Drawing.Point(131, 8) + Me.chkMid.Name = "chkMid" + Me.chkMid.Size = New System.Drawing.Size(96, 17) + Me.chkMid.TabIndex = 1 + Me.chkMid.Text = "Check All Mid" + Me.chkMid.UseVisualStyleBackColor = True + ' + 'chkOriginal + ' + Me.chkOriginal.AutoSize = True + Me.chkOriginal.Location = New System.Drawing.Point(7, 8) + Me.chkOriginal.Name = "chkOriginal" + Me.chkOriginal.Size = New System.Drawing.Size(118, 17) + Me.chkOriginal.TabIndex = 0 + Me.chkOriginal.Text = "Check All Original" + Me.chkOriginal.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.Location = New System.Drawing.Point(402, 10) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(240, 31) + Me.lblInfo.TabIndex = 1 + Me.lblInfo.Text = "Selected item will be set as fanart. All checked items will be saved to \extrathu" & _ + "mbs." + Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblInfo.Visible = False + ' + 'pnlDLStatus + ' + Me.pnlDLStatus.BackColor = System.Drawing.Color.White + Me.pnlDLStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlDLStatus.Controls.Add(Me.pnlMPDB) + Me.pnlDLStatus.Controls.Add(Me.pnlIMPA) + Me.pnlDLStatus.Controls.Add(Me.lblDL1Status) + Me.pnlDLStatus.Controls.Add(Me.lblDL1) + Me.pnlDLStatus.Controls.Add(Me.pbDL1) + Me.pnlDLStatus.Location = New System.Drawing.Point(257, 132) + Me.pnlDLStatus.Name = "pnlDLStatus" + Me.pnlDLStatus.Size = New System.Drawing.Size(321, 223) + Me.pnlDLStatus.TabIndex = 2 + Me.pnlDLStatus.Visible = False + ' + 'pnlMPDB + ' + Me.pnlMPDB.Controls.Add(Me.lblDL3Status) + Me.pnlMPDB.Controls.Add(Me.lblDL3) + Me.pnlMPDB.Controls.Add(Me.pbDL3) + Me.pnlMPDB.Location = New System.Drawing.Point(0, 147) + Me.pnlMPDB.Name = "pnlMPDB" + Me.pnlMPDB.Size = New System.Drawing.Size(321, 75) + Me.pnlMPDB.TabIndex = 4 + ' + 'lblDL3Status + ' + Me.lblDL3Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL3Status.Name = "lblDL3Status" + Me.lblDL3Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL3Status.TabIndex = 1 + ' + 'lblDL3 + ' + Me.lblDL3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3.Location = New System.Drawing.Point(5, 10) + Me.lblDL3.Name = "lblDL3" + Me.lblDL3.Size = New System.Drawing.Size(310, 13) + Me.lblDL3.TabIndex = 0 + Me.lblDL3.Text = "Performing Preliminary Tasks..." + ' + 'pbDL3 + ' + Me.pbDL3.Location = New System.Drawing.Point(6, 53) + Me.pbDL3.Name = "pbDL3" + Me.pbDL3.Size = New System.Drawing.Size(309, 19) + Me.pbDL3.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL3.TabIndex = 2 + ' + 'pnlIMPA + ' + Me.pnlIMPA.Controls.Add(Me.pnlSinglePic) + Me.pnlIMPA.Controls.Add(Me.lblDL2Status) + Me.pnlIMPA.Controls.Add(Me.lblDL2) + Me.pnlIMPA.Controls.Add(Me.pbDL2) + Me.pnlIMPA.Location = New System.Drawing.Point(0, 73) + Me.pnlIMPA.Name = "pnlIMPA" + Me.pnlIMPA.Size = New System.Drawing.Size(321, 75) + Me.pnlIMPA.TabIndex = 3 + ' + 'lblDL2Status + ' + Me.lblDL2Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL2Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL2Status.Name = "lblDL2Status" + Me.lblDL2Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL2Status.TabIndex = 1 + ' + 'lblDL2 + ' + Me.lblDL2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL2.Location = New System.Drawing.Point(5, 10) + Me.lblDL2.Name = "lblDL2" + Me.lblDL2.Size = New System.Drawing.Size(310, 13) + Me.lblDL2.TabIndex = 0 + Me.lblDL2.Text = "Performing Preliminary Tasks..." + ' + 'pbDL2 + ' + Me.pbDL2.Location = New System.Drawing.Point(6, 52) + Me.pbDL2.Name = "pbDL2" + Me.pbDL2.Size = New System.Drawing.Size(309, 19) + Me.pbDL2.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL2.TabIndex = 2 + ' + 'lblDL1Status + ' + Me.lblDL1Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL1Status.Location = New System.Drawing.Point(5, 29) + Me.lblDL1Status.Name = "lblDL1Status" + Me.lblDL1Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL1Status.TabIndex = 1 + ' + 'lblDL1 + ' + Me.lblDL1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL1.Location = New System.Drawing.Point(5, 6) + Me.lblDL1.Name = "lblDL1" + Me.lblDL1.Size = New System.Drawing.Size(310, 13) + Me.lblDL1.TabIndex = 0 + Me.lblDL1.Text = "Performing Preliminary Tasks..." + ' + 'pbDL1 + ' + Me.pbDL1.Location = New System.Drawing.Point(6, 49) + Me.pbDL1.Name = "pbDL1" + Me.pbDL1.Size = New System.Drawing.Size(309, 19) + Me.pbDL1.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL1.TabIndex = 2 + ' + 'pnlSinglePic + ' + Me.pnlSinglePic.BackColor = System.Drawing.Color.White + Me.pnlSinglePic.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlSinglePic.Controls.Add(Me.Label2) + Me.pnlSinglePic.Controls.Add(Me.ProgressBar1) + Me.pnlSinglePic.Location = New System.Drawing.Point(0, 1) + Me.pnlSinglePic.Name = "pnlSinglePic" + Me.pnlSinglePic.Size = New System.Drawing.Size(321, 75) + Me.pnlSinglePic.TabIndex = 1 + Me.pnlSinglePic.Visible = False + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(5, 10) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(310, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Downloading Selected Image..." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(6, 53) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(309, 19) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'dlgImgSelect + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(836, 545) + Me.ControlBox = False + Me.Controls.Add(Me.pnlDLStatus) + Me.Controls.Add(Me.pnlBG) + Me.Controls.Add(Me.pnlBottomMain) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgImgSelect" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Poster" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlSize.ResumeLayout(False) + Me.pnlSize.PerformLayout() + Me.pnlFanart.ResumeLayout(False) + Me.pnlFanart.PerformLayout() + Me.pnlDLStatus.ResumeLayout(False) + Me.pnlMPDB.ResumeLayout(False) + Me.pnlIMPA.ResumeLayout(False) + Me.pnlSinglePic.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlDLStatus As System.Windows.Forms.Panel + Friend WithEvents lblDL1Status As System.Windows.Forms.Label + Friend WithEvents lblDL1 As System.Windows.Forms.Label + Friend WithEvents pbDL1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlIMPA As System.Windows.Forms.Panel + Friend WithEvents lblDL2Status As System.Windows.Forms.Label + Friend WithEvents lblDL2 As System.Windows.Forms.Label + Friend WithEvents pbDL2 As System.Windows.Forms.ProgressBar + Friend WithEvents lblInfo As System.Windows.Forms.Label + Friend WithEvents pnlSize As System.Windows.Forms.Panel + Friend WithEvents rbSmall As System.Windows.Forms.RadioButton + Friend WithEvents rbMedium As System.Windows.Forms.RadioButton + Friend WithEvents rbLarge As System.Windows.Forms.RadioButton + Friend WithEvents rbXLarge As System.Windows.Forms.RadioButton + Friend WithEvents pnlSinglePic As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlMPDB As System.Windows.Forms.Panel + Friend WithEvents lblDL3Status As System.Windows.Forms.Label + Friend WithEvents lblDL3 As System.Windows.Forms.Label + Friend WithEvents pbDL3 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlFanart As System.Windows.Forms.Panel + Friend WithEvents chkThumb As System.Windows.Forms.CheckBox + Friend WithEvents chkMid As System.Windows.Forms.CheckBox + Friend WithEvents chkOriginal As System.Windows.Forms.CheckBox + Friend WithEvents btnPreview As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.TVDB.Data/Scraper/dlgImgSelect.resx b/Addons/scraper.TVDB.Data/Scraper/dlgImgSelect.resx new file mode 100644 index 0000000..e4a4f58 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/dlgImgSelect.resx @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnPreview.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA + CwAB5DetvwAAAuRJREFUOE+lkltsS3Ecx3+ILAsPFrfEyxJPXkh0bokg4UG78TQNI5FImPBAJKiNhBAy + MTwRMRJ1ibsZ29jc2t00Vrq1p3q6tqft6Tk9t87YeLCHff3/3Sp4dZJPvv/f5fs7///5HwJA/8Nv88jw + 8ApD1y+blnnNtKwGjmXl/qCQMxt+fB9xjI2NEYdGR0dp9OfP6Yph+gOKjpBmMcy8CoxwPi5gok81kDGt + BPOUci+xt1LO0Gy+ZAZuUcbtCe4NpHEtLKNBkHGfrQt5dySNrpSKIcvcbJkmka5pNKhrtrfxFE71RlD3 + UcT5gIjt7THMvhLHTEZlSwz1n0ScZTXe8yKextec6TRNY3zAF0O3tUYl7Ovqh+t9EHs8IRSdC4FO9+WZ + VBfEjlchHPEF8z2PRQnDg9b4AE3L0hA7wqNwDFWvP2Cn1w9Hox90zAc6McFRH9Y97MWuDn++56YwgJEc + G2CwAdmsSkPsCLf6I1jb3IUNL3sY3Zhxxgs67AG5PCg+4YW9uRsbWY33XAp8xrBlOHVdI1IVhb5oWdv1 + QBjLn3qwtqUDq5s6MOd0O2jfizwlx9uwqtGLdazGey76Q/hm6k4tmyXKyDLlVMV29aOApU0erHnWgWmH + noF2NYL2Ph2nuhFF+5uw8okXy1hP/YcghjTVqSgZoqQkkZZK2m58ErDouRfzLjSDKt2grbf+ZpMbJSeb + sPA520FvCINqxinLaaKoKHJsETGK1rCIh+8F3HnTh7vvgrjHbqMAjx/0CGiNDCAqJZGUEk45zQYk4nG+ + i7LPgoBkNIpsOglTzcDSFOQ0FTmdwdRiyvNqKolELAZZlre0t7URLSkro21VVSVdnZ1pSZKQSqXAPizY + /wHDMMCuKg+Ps6oKJZNBsL//6+7q6gWTaPzhWjx31qzF5Xb7Acf69S6mNRV2e22Fw1G7gcGVUcPyro3l + 5Qfnl5auYZ4Zk7l3ClsxuBQGTszNx/9SqHHDVG76BaMnpgu1OH2ZAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/Scraper/dlgImgSelect.vb b/Addons/scraper.TVDB.Data/Scraper/dlgImgSelect.vb new file mode 100644 index 0000000..7e37076 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/dlgImgSelect.vb @@ -0,0 +1,1309 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgImgSelect + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker + + Private CachePath As String = String.Empty + Private chkImage() As CheckBox + Private DLType As Enums.ImageType + Private ETHashes As New List(Of String) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + Private IMPA As New IMPA.Scraper + Private IMPAPosters As New List(Of MediaContainers.Image) + Private isEdit As Boolean = False + Private isShown As Boolean = False + Private iTop As Integer = 5 + Private lblImage() As Label + Private MPDB As New MPDB.Scraper + Private MPDBPosters As New List(Of MediaContainers.Image) + Private noImages As Boolean = False + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private PreDL As Boolean = False + Private Results As New Containers.ImgResult + Private selIndex As Integer = -1 + Private TMDB As New TMDB.Scraper + Private TMDBPosters As New List(Of MediaContainers.Image) + Private tMovie As New Structures.DBMovie + Private tmpImage As New MediaContainers.Image + Private _impaDone As Boolean = True + Private _mpdbDone As Boolean = True + Private _tmdbDone As Boolean = True + Private selURL As String = "" + +#End Region 'Fields + +#Region "Events" + + Private Event IMPADone() + + Private Event MPDBDone() + + Private Event TMDBDone() + +#End Region 'Events + +#Region "Methods" + + Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.PreDL = True + Me.SetUp() + Me.StartDownload() + End Sub + + Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult + '// + ' Overload to pass data + '\\ + + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.isShown = True + + MyBase.ShowDialog() + Return Results + End Function + + Public Overloads Function ShowDialog() As Containers.ImgResult + Me.isShown = True + MyBase.ShowDialog() + + Return Results + End Function + + 'Rewrite to simplify + Private Sub AddImage(ByVal iImage As Image, ByVal sDescription As String, ByVal iIndex As Integer, ByVal sURL As String, ByVal isChecked As Boolean, poster As MediaContainers.Image) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(256, 286) + Me.pbImage(iIndex).Size = New Size(250, 250) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.pnlImage(iIndex).Tag = poster + Me.pbImage(iIndex).Tag = poster + Me.pbImage(iIndex).Image = iImage + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.pnlBG.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If Me.DLType = Enums.ImageType.Fanart Then + ReDim Preserve Me.chkImage(iIndex) + Me.chkImage(iIndex) = New CheckBox() + Me.chkImage(iIndex).Name = iIndex.ToString + Me.chkImage(iIndex).Size = New Size(250, 30) + Me.chkImage(iIndex).AutoSize = False + Me.chkImage(iIndex).BackColor = Color.White + Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + 'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + Me.chkImage(iIndex).Left = 0 + Me.chkImage(iIndex).Top = 250 + Me.chkImage(iIndex).Checked = isChecked + Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve Me.lblImage(iIndex) + Me.lblImage(iIndex) = New Label() + Me.lblImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Size = New Size(250, 30) + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + If IsTMDBURL(sURL) Then + Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + Else + Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + End If + Me.lblImage(iIndex).Tag = poster + Me.lblImage(iIndex).Left = 0 + Me.lblImage(iIndex).Top = 250 + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 301 + Else + Me.iLeft += 271 + End If + End Sub + + Private Sub AllDoneDownloading() + If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone Then + Me.pnlDLStatus.Visible = False + Me.TMDBPosters.AddRange(Me.IMPAPosters) + Me.TMDBPosters.AddRange(Me.MPDBPosters) + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + End If + End Sub + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + PreviewImage() + End Sub + Private Sub PreviewImage() + Try + Dim tImage As New Images + + Me.pnlSinglePic.Visible = True + Application.DoEvents() + + Select Case True + Case rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + Case rbLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + Case rbMedium.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case rbSmall.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End Select + + Me.pnlSinglePic.Visible = False + + If Not IsNothing(tImage.Image) Then + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image) + + End If + + tImage.Dispose() + tImage = Nothing + + Catch ex As Exception + Me.pnlSinglePic.Visible = False + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork + '// + ' Thread to download impa posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + + For i As Integer = 0 To Me.IMPAPosters.Count - 1 + If bwIMPADownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL) + Try + Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL) + Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg"))) + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL2.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPADownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._impaDone = True + RaiseEvent IMPADone() + End If + End Sub + + Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.MPDBPosters.Count - 1 + Try + If Me.bwMPDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL) + Try + Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL) + Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg"))) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL3.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._mpdbDone = True + RaiseEvent MPDBDone() + End If + End Sub + + Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork + '// + ' Thread to download tmdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + Dim thumbLink As String = String.Empty + Dim savePath As String = String.Empty + Dim extrathumbSize As String = String.Empty + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + 'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all. + Dim posters As MediaContainers.Image() + If Me.DLType = Enums.ImageType.Fanart Then + posters = TMDBPosters.Where(Function(s) s.Description = extrathumbSize).ToArray() + Else + posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray() + End If + + Dim percent = 100 / posters.Count + For i As Integer = 0 To posters.Count - 1 + Try + If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then + If Me.bwTMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwTMDBDownload.ReportProgress(Convert.ToInt32((i + 1) * percent), posters(i).URL) + Try + posters(i).WebImage.FromWeb(posters(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then + If Me.DLType = Enums.ImageType.Fanart Then + + + If Not posters(i).URL.Contains("-thumb.") Then + Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org" + thumbLink = RemoveServerURL(posters(i).URL) + 'If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("-poster.", "-thumb.") + thumbLink = thumbLink.Replace("-original.", "-thumb.") + ''Else + 'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb") + 'End If + Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Else + Me.Results.Posters.Add(posters(i).URL) + End If + End If + If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then + Try + posters(i).URL = Me.CleanTMDBURL(posters(i).URL) + + savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg")) + posters(i).WebImage.Save(savePath) + + If Master.eSettings.AutoET Then + Dim tSize As New Enums.FanartSize + Select Case posters(i).Description.ToLower + Case "original" + tSize = Enums.FanartSize.Lrg + Case "mid" + tSize = Enums.FanartSize.Mid + Case "thumb" + tSize = Enums.FanartSize.Small + End Select + If Master.eSettings.AutoETSize = tSize Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + posters(i).isChecked = True + End If + End If + End If + + Catch + End Try + End If + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL1Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL1.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._tmdbDone = True + RaiseEvent TMDBDone() + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + IMPA.Cancel() + MPDB.Cancel() + TMDB.Cancel() + + If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync() + If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync() + If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync() + + While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean) + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Text.ToLower.Contains(sType) Then + Me.chkImage(i).Checked = Checked + End If + Next + End Sub + + Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged + Me.CheckAll("(poster)", chkMid.Checked) + End Sub + + Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged + Me.CheckAll("(original)", chkOriginal.Checked) + End Sub + + Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged + Me.CheckAll("(thumb)", chkThumb.Checked) + End Sub + + Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'Me.tmpImage.Dispose() + + IMPA = Nothing + MPDB = Nothing + TMDB = Nothing + + IMPAPosters = Nothing + MPDBPosters = Nothing + TMDBPosters = Nothing + End Sub + + Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath) + End Sub + + Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not PreDL Then SetUp() + End Sub + + Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Try + Application.DoEvents() + If Not PreDL Then + StartDownload() + ElseIf noImages Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image) + Try + 'set all pnl colors to white first + 'remove all the current genres + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(i).BackColor = Color.White + Me.chkImage(i).ForeColor = Color.Black + Else + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + End If + Next + + 'set selected pnl color to blue + Me.pnlImage(iIndex).BackColor = Color.Blue + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(iIndex).BackColor = Color.Blue + Me.chkImage(iIndex).ForeColor = Color.White + Else + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + End If + + Me.selIndex = iIndex + Me.selURL = poster.URL + + Me.pnlSize.Visible = False + + If IsTMDBURL(poster.URL) Then + Me.SetupSizes(poster.ParentID) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + Me.OK_Button.Enabled = False + Else + Me.OK_Button.Focus() + End If + Me.tmpImage.Clear() + Else + Me.rbXLarge.Checked = False + Me.rbLarge.Checked = False + Me.rbMedium.Checked = False + Me.rbSmall.Checked = False + Me.OK_Button.Enabled = True + Me.OK_Button.Focus() + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function IsTMDBURL(ByVal sURL As String) As Boolean + If sURL.ToLower.Contains("themoviedb.org") OrElse sURL.ToLower.Contains("d3gtl9l2a4fn1j.cloudfront.net") OrElse sURL.ToLower.Contains("cf1.imgobject.com") OrElse sURL.ToLower.Contains("cf2.imgobject.com") Then + Return True + Else + Return False + End If + End Function + + Private Function CleanTMDBURL(ByVal sURL As String) As String + If IsTMDBURL(sURL) Then + Dim _sURL As New Uri(sURL) + sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped)) + Else + sURL = StringUtils.TruncateURL(sURL, 40, True) + End If + Return sURL.Replace(":", "$c$").Replace("/", "$s$") + End Function + + + Private Sub GetFanart() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim di As New DirectoryInfo(CachePath) + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + If Not IsNothing(tImage.WebImage.Image) Then + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + 'Case sFile.Name.Contains("(mid)") + ' tImage.Description = "mid" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + End If + Next + ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Me.lblDL1.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL1Status.Text = String.Empty + Me.pbDL1.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me.TMDB.GetImagesAsync(tMovie.Movie.IMDBID, "backdrop") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub GetPosters() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim lFi As New List(Of FileInfo) + Dim di As New DirectoryInfo(CachePath) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Height = 75 + Me.pnlDLStatus.Top = 207 + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + Next + ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + Me.lblDL1.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL1Status.Text = String.Empty + Me.pbDL1.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.IMDBID, "poster") + Else + Me.lblDL1.Text = Master.eLang.GetString(33, "TheMovieDB.com is not enabled") + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + Me.lblDL2.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._impaDone = False + + Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL2.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled") + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + Me.lblDL3.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._mpdbDone = False + + Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL3.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPADoneDownloading() + Try + Me._impaDone = True + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL2.Value = 0 + + Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = Posters.Count + + Me.IMPAPosters = Posters + + Me.bwIMPADownload.WorkerSupportsCancellation = True + Me.bwIMPADownload.WorkerReportsProgress = True + Me.bwIMPADownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAProgressUpdated(ByVal iPercent As Integer) + Me.pbDL2.Value = iPercent + End Sub + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then + pnlBG.VerticalScroll.Value += 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum + End If + Else + If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then + pnlBG.VerticalScroll.Value -= 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub MPDBDoneDownloading() + Try + Me._mpdbDone = True + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL3.Value = 0 + + Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = Posters.Count + + Me.MPDBPosters = Posters + + Me.bwMPDBDownload.WorkerSupportsCancellation = True + Me.bwMPDBDownload.WorkerReportsProgress = True + Me.bwMPDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL3.Value = iPercent + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + Dim tmpPathPlus As String = String.Empty + Dim extrathumbSize As String + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + If DLType = Enums.ImageType.Fanart Then + tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") + Else + tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") + End If + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + 'Me.tmpImage.Save(tmpPathPlus, 100, selURL) + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + 'Me.tmpImage.Save(tmpPathPlus, 100, selURL) + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If + + If Me.DLType = Enums.ImageType.Fanart Then + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + Dim isChecked As Boolean = False + + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + isChecked = True + Exit For + End If + Next + + If isChecked Then + Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs") + If isEdit Then + extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName) + Else + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName) + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName) + Else + extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName) + End If + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + End If + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + Dim fsET As FileStream + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) + Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg) + fsET.Close() + iVal += 1 + End If + Next + fsET = Nothing + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + Try + 'If Me.DLType = Enums.ImageType.Fanart OrElse Not IsTMDBURL(DirectCast(sender, PictureBox).Tag.ToString) Then + 'ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(DirectCast(sender, PictureBox).Image) + 'Else + PreviewImage() + 'End If + Catch + End Try + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Panel).Name), DirectCast(DirectCast(sender, Panel).Tag, MediaContainers.Image)) + End Sub + + Private Sub ProcessPics(ByVal posters As List(Of MediaContainers.Image)) + Try + Dim iIndex As Integer = 0 + + 'remove all entries with invalid images + If Master.eSettings.UseImgCache Then + For i As Integer = posters.Count - 1 To 0 Step -1 + If IsNothing(posters.Item(i).WebImage.Image) Then + posters.RemoveAt(i) + End If + Next + End If + + If posters.Count > 0 Then + For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) RemoveServerURL(p.URL)) + If Not IsNothing(xPoster.WebImage.Image) AndAlso (Me.DLType = Enums.ImageType.Fanart OrElse Not (IsTMDBURL(xPoster.URL) AndAlso Not xPoster.Description = "cover")) Then + Me.AddImage(xPoster.WebImage.Image, xPoster.Description, iIndex, xPoster.URL, xPoster.isChecked, xPoster) + iIndex += 1 + End If + Next + Else + If Not Me.PreDL OrElse isShown Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Else + noImages = True + End If + End If + + Me.Activate() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub rbLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbMedium_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbMedium.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbSmall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSmall.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbXLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbXLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub SetUp() + Try + IMPA.IMDBURL = IMDBURL + TMDB.IMDBURL = IMDBURL + MPDB.IMDBURL = IMDBURL + AddHandler TMDB.PostersDownloaded, AddressOf TMDBPostersDownloaded + AddHandler TMDB.ProgressUpdated, AddressOf TMDBProgressUpdated + AddHandler IMPA.PostersDownloaded, AddressOf IMPAPostersDownloaded + AddHandler IMPA.ProgressUpdated, AddressOf IMPAProgressUpdated + AddHandler MPDB.PostersDownloaded, AddressOf MPDBPostersDownloaded + AddHandler MPDB.ProgressUpdated, AddressOf MPDBProgressUpdated + AddHandler IMPADone, AddressOf IMPADoneDownloading + AddHandler TMDBDone, AddressOf TMDBDoneDownloading + AddHandler MPDBDone, AddressOf MPDBDoneDownloading + + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlBG.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlBG) + + If Me.DLType = Enums.ImageType.Posters Then + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Else + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlDLStatus.Height = 75 + Me.pnlDLStatus.Top = 207 + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(tMovie.Filename) + End If + End If + + CachePath = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, tMovie.Movie.IMDBID, Path.DirectorySeparatorChar, If(Me.DLType = Enums.ImageType.Posters, "posters", "fanart")) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview", True) + Me.chkThumb.Text = Master.eLang.GetString(41, "Check All Thumb") + Me.chkMid.Text = Master.eLang.GetString(42, "Check All Mid") + Me.chkOriginal.Text = Master.eLang.GetString(43, "Check All Original") + Me.lblInfo.Text = Master.eLang.GetString(44, "Selected item will be set as fanart. All checked items will be saved to \extrathumbs.") + Me.lblDL3.Text = Master.eLang.GetString(45, "Performing Preliminary Tasks...") + Me.lblDL2.Text = Me.lblDL3.Text + Me.lblDL1.Text = Me.lblDL3.Text + Me.Label2.Text = Master.eLang.GetString(46, "Downloading Selected Image...") + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(0, sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Function RemoveServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Sub SetupSizes(ByVal ParentID As String) + Try + rbXLarge.Checked = False + rbXLarge.Enabled = False + rbXLarge.Text = Master.eLang.GetString(47, "Original") + rbLarge.Checked = False + rbLarge.Enabled = False + rbMedium.Checked = False + rbSmall.Checked = False + rbSmall.Enabled = False + If Me.DLType = Enums.ImageType.Fanart Then + rbLarge.Text = "w1280" + rbMedium.Text = "poster" + rbSmall.Text = "thumb" + Else + rbLarge.Text = Master.eLang.GetString(48, "Cover") + rbMedium.Text = Master.eLang.GetString(49, "Medium") + rbSmall.Text = Master.eLang.GetString(50, "Small") + End If + + For Each TMDBPoster As MediaContainers.Image In TMDBPosters.Where(Function(f) f.ParentID = ParentID) + Select Case TMDBPoster.Description + Case "original" + ' xlarge + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbXLarge.Enabled = True + rbXLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "cover" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "w1280" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format("w1280 ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + End If + Case "thumb" + ' small + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbSmall.Enabled = True + rbSmall.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "mid" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + Case "poster" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format("Poster ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + End Select + Next + + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Small + rbSmall.Checked = rbSmall.Enabled + Case Enums.PosterSize.Mid + rbMedium.Checked = rbMedium.Enabled + Case Enums.PosterSize.Lrg + rbLarge.Checked = rbLarge.Enabled + Case Enums.PosterSize.Xlrg + rbXLarge.Checked = rbXLarge.Enabled + End Select + + pnlSize.Visible = True + + Invalidate() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub StartDownload() + Try + Select Case Me.DLType + Case Enums.ImageType.Posters + Me.GetPosters() + Case Enums.ImageType.Fanart + Me.GetFanart() + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBDoneDownloading() + Try + If Me.DLType = Enums.ImageType.Posters Then + Me._tmdbDone = True + Me.AllDoneDownloading() + Else + Me.pnlDLStatus.Visible = False + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL1.Value = 0 + + Me.lblDL1.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL1Status.Text = String.Empty + + TMDBPosters = Posters + Me.pbDL1.Maximum = 100 + + Me.bwTMDBDownload.WorkerSupportsCancellation = True + Me.bwTMDBDownload.WorkerReportsProgress = True + Me.bwTMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL1.Value = iPercent + End Sub + +#End Region 'Methods +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.TVDB.Data/Scraper/dlgTrailer.Designer.vb new file mode 100644 index 0000000..2871b29 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/dlgTrailer.Designer.vb @@ -0,0 +1,292 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.btnPlayBrowser = New System.Windows.Forms.Button() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(350, 340) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(120, 23) + Me.OK_Button.TabIndex = 6 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(350, 369) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(120, 23) + Me.Cancel_Button.TabIndex = 7 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(445, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(458, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(122, 60) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(130, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(445, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(410, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(395, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(71, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(426, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(151, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 369) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(120, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(224, 340) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(120, 23) + Me.btnSetNfo.TabIndex = 5 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(478, 331) + Me.Panel1.TabIndex = 2 + ' + 'btnPlayBrowser + ' + Me.btnPlayBrowser.Enabled = False + Me.btnPlayBrowser.Location = New System.Drawing.Point(12, 340) + Me.btnPlayBrowser.Name = "btnPlayBrowser" + Me.btnPlayBrowser.Size = New System.Drawing.Size(120, 23) + Me.btnPlayBrowser.TabIndex = 4 + Me.btnPlayBrowser.Text = "Open In Browser" + Me.btnPlayBrowser.UseVisualStyleBackColor = True + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(484, 398) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Controls.Add(Me.btnPlayBrowser) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lbTrailers As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnPlayTrailer As System.Windows.Forms.Button + Friend WithEvents btnSetNfo As System.Windows.Forms.Button + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtYouTube As System.Windows.Forms.TextBox + Friend WithEvents btnBrowse As System.Windows.Forms.Button + Friend WithEvents txtManual As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog + Friend WithEvents btnGetTrailers As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents btnPlayBrowser As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.TVDB.Data/Scraper/dlgTrailer.resx b/Addons/scraper.TVDB.Data/Scraper/dlgTrailer.resx new file mode 100644 index 0000000..f08e020 --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/dlgTrailer.resx @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnGetTrailers.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAK + 6QAACukB/XXO0wAAABh0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzT7MfTgAAAfdJREFUOE+lkk1r + E1EUhi9apQsr7vwDigUXLtzpyrWlpdD8BSEbN1p1IRJQqNXoarCNH03aKlgQjU1ahCr2a6HSRRszGSe0 + 4nQ+M9/JjIhYeb25JGVGmo0OPMw5h/M+9zIMAfBfxBpd07osyzxv21aCMuTY9pDnugmhUjkX3YsSa8xa + 7ToVgIZBw4wgaGBlZRn376WHo7ttYg0NjzfDTODYcB0H38MQS0uLuDM6isz42NXofpNYQwXc7uktge95 + 0FQVxcIs5opFfPr44UI0s6cgeoO2JAwD1Ot+c56NZmIC+g2YwLJN+E6A0NtB6O/AdwMmbTEWzcQEhq5z + plmjgRBflDeYF5IMQZ5nMya3zM4CVVU4XdfQcH/hffUmbi0TxjvxBr3NbzTlhqF3FsjyNqcoMjzzB94K + aaQWjzAWhNuo2z9B/xOoitJZ8HVri5MkCbZWx1zpLoYXjjIKpRE4RgOKLGNbkjoL+HL5gbSpYGL1GpL5 + Y7hYOMlI5o/j0eolqN8MVEUxE83EBBvr6yP8Zx4b5TVceTWIRK6XcfllP0qVNYiCiArPp6OZ3WI/IYf6 + +/pO5bITmfzM6+e5Z9mps6ne6pnUic0nTx9Pz74ozkxPTT4cHBg4vY+Qw3sJDhBCutmQPq13DyFdPX/N + uunuwWbN+nbxb4D8AU3a+lQSEAyqAAAAAElFTkSuQmCC +</value> + </data> + <data name="btnPlayTrailer.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9kEGhIhAdf7pBcAAAJDSURBVDhPtVJLa5pBFPWxsGoQNI2oAY1ogigI + GitIULQufKxcBGmzLLpwo9B/UOgmv6GKuxDdCCKIGyOBLIpE8IWIaBauFEQSwcfCuZ07PkIogW564HDn + m7nnzHxzhvNfsFwuE5PJ5HelUnm5u7ubDYfD5ng8/kGXDjYd7+Dp6elTv9+fJxIJcDgcJBAIQDAYhIuL + CxKLxaDdbkOhUPiybX8LFJdKJdBoNOT8/BxcLheYzWaw2WyA30i9Xk+y2SxkMplvW9kr6M4LWohEIoHj + 42MIh8OQy+VAJpOBSqVic1KpFLCnVquBQqFQMyFisVh8x+PS4Z4ejwcQ6XSafXO53P2a1WqFer1+Q8cb + zOfzKi2Ect+Ev7BDKpXaz+/YarVeaN2gWq3OaAEejwd8Pp/R7XYz8Xq9ZjWZTDLh7iTlchnrR8pXA6FQ + CCKRCMRiMfh8PiYkhDCT5+dnODo6AoFAwAxoxFhVqOdMp9MWdSZ4SYeHhyCXyyEUCjEDFNN1TIddKF4y + GjSbzRWtH5jBaDT6eXl5CUqlEtRqNWi1Wri6umIGuDPGeXJywpJAc6fTCff392Um3uKAxogGxGAwMEEk + EoHVasXSsFgsYDKZ8B3gCUmj0QCdTufeajfI5/NfHx4ewGg0EvoKmQGeyuv1sh3tdjucnp6SYrEI19fX + v7ayt7i9vY3SFwnxeJzF6Pf72WWiQTQahW63+754B/qf6sfHx5vBYDDrdDqA7PV6Kxpb5ezs7PO27Z/A + pZRTYlRCnPgbHM4fFEdnm0hssg4AAAAASUVORK5CYII= +</value> + </data> + <metadata name="ofdTrailer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>40</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/Scraper/dlgTrailer.vb b/Addons/scraper.TVDB.Data/Scraper/dlgTrailer.vb new file mode 100644 index 0000000..67c25ca --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/dlgTrailer.vb @@ -0,0 +1,480 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgTrailer + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwCompileList As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwDownloadTrailer As New System.ComponentModel.BackgroundWorker + + Private cTrailer As New Trailers + Private imdbID As String = String.Empty + Private prePath As String = String.Empty + Private sPath As String = String.Empty + Private tArray As New List(Of String) + Private tURL As String = String.Empty + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal _imdbID As String, ByVal _sPath As String) As String + Me.imdbID = _imdbID + Me.sPath = _sPath + + If MyBase.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + Return Replace(Me.tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + Return Me.tURL + End If + Else + Return String.Empty + End If + End Function + + Protected Overrides Sub Finalize() + cTrailer = Nothing + MyBase.Finalize() + End Sub + + Private Sub BeginDownload(ByVal CloseDialog As Boolean) + Dim didCancel As Boolean = False + + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(56, "Downloading selected trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + If CloseDialog Then + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, Path.GetFileName(Me.prePath)) + FileUtils.Common.MoveFileWithStream(Me.prePath, Me.tURL) + + File.Delete(Me.prePath) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.prePath, """")) + didCancel = True + End If + ElseIf Me.txtManual.Text.Length > 0 Then + Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + If CloseDialog Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.txtManual.Text, """")) + didCancel = True + End If + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + didCancel = True + End If + ElseIf Regex.IsMatch(Me.txtYouTube.Text, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.txtYouTube.Text) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + ElseIf StringUtils.isValidURL(Me.txtYouTube.Text) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = Me.txtYouTube.Text, .bType = CloseDialog}) + Else + If Regex.IsMatch(Me.lbTrailers.SelectedItem.ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.lbTrailers.SelectedItem.ToString) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + Else + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = lbTrailers.SelectedItem.ToString, .bType = CloseDialog}) + End If + End If + + If didCancel Then + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + End Sub + + Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click + Try + With ofdTrailer + .InitialDirectory = Directory.GetParent(Master.currMovie.Filename).FullName + .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.ValidExts.ToArray(), ";*")) + .FilterIndex = 0 + End With + + If ofdTrailer.ShowDialog() = DialogResult.OK Then + txtManual.Text = ofdTrailer.FileName + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub btnGetTrailers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTrailers.Click + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.pnlStatus.Visible = True + + Me.bwCompileList = New System.ComponentModel.BackgroundWorker + Me.bwCompileList.WorkerSupportsCancellation = True + Me.bwCompileList.RunWorkerAsync() + End Sub + + Private Sub btnPlayTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayTrailer.Click + Try + Me.BeginDownload(False) + Catch + MsgBox(Master.eLang.GetString(58, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), MsgBoxStyle.Critical, Master.eLang.GetString(59, "Error Playing Trailer")) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Try + End Sub + + Private Sub btnPlayBrowser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayBrowser.Click + If Not String.IsNullOrEmpty(Me.txtYouTube.Text) Then + If Master.isWindows Then + Process.Start(Me.txtYouTube.Text) + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = Me.txtYouTube.Text + Explorer.Start() + End Using + End If + Else + If Master.isWindows Then + Process.Start(Me.lbTrailers.SelectedItem.ToString) + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = Me.lbTrailers.SelectedItem.ToString + Explorer.Start() + End Using + End If + End If + End Sub + + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click + + If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(62, "Moving specified file to trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + File.Move(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + Else + Dim didCancel As Boolean = False + + If StringUtils.isValidURL(Me.txtYouTube.Text) Then + tURL = Me.txtYouTube.Text + ElseIf Me.lbTrailers.SelectedItems.Count > 0 Then + tURL = lbTrailers.SelectedItem.ToString + Else + didCancel = True + End If + + If Not didCancel Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + + End Sub + + Private Sub bwCompileList_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwCompileList.DoWork + Try + tArray = cTrailer.GetTrailers(Me.imdbID, False) + + If Me.bwCompileList.CancellationPending Then + e.Cancel = True + End If + Catch + End Try + End Sub + + Private Sub bwCompileList_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwCompileList.RunWorkerCompleted + If Not e.Cancelled Then + If Me.tArray.Count > 0 Then + For Each tTrail As String In Me.tArray + Me.lbTrailers.Items.Add(tTrail) + Next + + Me.btnGetTrailers.Visible = False + Else + Me.btnGetTrailers.Enabled = False + End If + + End If + + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Sub + + Private Sub bwDownloadTrailer_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTrailer.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + + If Args.bType Then + Me.tURL = cTrailer.DownloadTrailer(Me.sPath, Args.Parameter) + Else + Me.prePath = cTrailer.DownloadTrailer(Path.Combine(Master.TempPath, Path.GetFileName(Me.sPath)), Args.Parameter) + End If + + Catch + End Try + + e.Result = Args.bType + + If Me.bwDownloadTrailer.CancellationPending Then + e.Cancel = True + End If + End Sub + + Private Sub bwDownloadTrailer_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwDownloadTrailer.ProgressChanged + pbStatus.Value = e.ProgressPercentage + End Sub + + Private Sub bwDownloadTrailer_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadTrailer.RunWorkerCompleted + If Not e.Cancelled Then + If Convert.ToBoolean(e.Result) Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + If Not String.IsNullOrEmpty(Me.prePath) Then System.Diagnostics.Process.Start(String.Concat("""", prePath, """")) + End If + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.cTrailer.Cancel() + + If Me.bwCompileList.IsBusy Then Me.bwCompileList.CancelAsync() + If Me.bwDownloadTrailer.IsBusy Then Me.bwDownloadTrailer.CancelAsync() + + While Me.bwCompileList.IsBusy OrElse Me.bwDownloadTrailer.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + cTrailer.IMDBURL = IMDBURL + AddHandler cTrailer.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + + Private Sub dlgTrailer_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub DownloadProgressUpdated(ByVal iProgress As Integer) + bwDownloadTrailer.ReportProgress(iProgress) + End Sub + + Private Sub lbTrailers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbTrailers.SelectedIndexChanged + Me.SetEnabled(True) + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.BeginDownload(True) + End Sub + + Private Sub SetEnabled(ByVal DeletePre As Boolean) + If DeletePre AndAlso Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + File.Delete(Me.prePath) + Me.prePath = String.Empty + End If + + If StringUtils.isValidURL(Me.txtYouTube.Text) OrElse Me.lbTrailers.SelectedItems.Count > 0 OrElse Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Enabled = True + Me.btnSetNfo.Enabled = True + Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.btnPlayBrowser.Enabled = False + Else + Me.btnPlayBrowser.Enabled = True + End If + If Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") + Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") + Else + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + Else + Me.OK_Button.Enabled = False + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(64, "Select Trailer") + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.GroupBox1.Text = Master.eLang.GetString(65, "Select Trailer to Download") + Me.GroupBox2.Text = Master.eLang.GetString(66, "Manual Trailer Entry") + Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") + Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") + Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnPlayBrowser.Text = Master.eLang.GetString(114, "Open In Browser") + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") + End Sub + + Private Sub txtManual_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtManual.TextChanged + Me.SetEnabled(True) + End Sub + + Private Sub txtYouTube_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtYouTube.TextChanged + Me.SetEnabled(True) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim bType As Boolean + Dim Parameter As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.TVDB.Data/Scraper/dlgTrailerFormat.Designer.vb new file mode 100644 index 0000000..8d135fa --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/dlgTrailerFormat.Designer.vb @@ -0,0 +1,155 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailerFormat + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(72, 187) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(145, 187) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(4, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(170, 121) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(10, 8) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(180, 151) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(12, 75) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(12, 12) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(200, 169) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 217) + Me.Controls.Add(Me.pnlStatus) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lstFormats As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.TVDB.Data/Scraper/dlgTrailerFormat.resx b/Addons/scraper.TVDB.Data/Scraper/dlgTrailerFormat.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/dlgTrailerFormat.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/Scraper/dlgTrailerFormat.vb b/Addons/scraper.TVDB.Data/Scraper/dlgTrailerFormat.vb new file mode 100644 index 0000000..8f0ad6e --- /dev/null +++ b/Addons/scraper.TVDB.Data/Scraper/dlgTrailerFormat.vb @@ -0,0 +1,114 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTrailerFormat + +#Region "Fields" + + Private WithEvents YouTube As YouTube.Scraper + Private _selectedformaturl As String + Private _yturl As String + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal YTURL As String) As String + Me._yturl = YTURL + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return _selectedformaturl + Else + Return String.Empty + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailerFormat_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + Me.SetUp() + + lstFormats.DataSource = Nothing + + YouTube = New YouTube.Scraper + YouTube.GetVideoLinksAsync(Me._yturl) + + Catch ex As Exception + MsgBox(Master.eLang.GetString(71, "The video format links could not be retrieved."), MsgBoxStyle.Critical, Master.eLang.GetString(72, "Error Retrieving Video Format Links")) + End Try + End Sub + + Private Sub lstFormats_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFormats.SelectedIndexChanged + Try + Me._selectedformaturl = DirectCast(lstFormats.SelectedItem, YouTube.VideoLinkItem).URL + + If Me.lstFormats.SelectedItems.Count > 0 Then + Me.OK_Button.Enabled = True + Else + Me.OK_Button.Enabled = False + End If + Catch + End Try + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(73, "Select Format") + Me.lblStatus.Text = Master.eLang.GetString(74, "Getting available formats...") + Me.GroupBox1.Text = Master.eLang.GetString(75, "Available Formats") + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub YouTube_VideoLinksRetrieved(ByVal bSuccess As Boolean) Handles YouTube.VideoLinksRetrieved + Try + + If bSuccess Then + lstFormats.DataSource = YouTube.VideoLinks.Values.ToList + lstFormats.DisplayMember = "Description" + lstFormats.ValueMember = "URL" + + If YouTube.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + Me.lstFormats.SelectedIndex = YouTube.VideoLinks.IndexOfKey(Master.eSettings.PreferredTrailerQuality) + ElseIf Me.lstFormats.Items.Count = 1 Then + Me.lstFormats.SelectedIndex = 0 + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + Me.pnlStatus.Visible = False + Me.lstFormats.Enabled = True + End Try + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/TVScraper/clsScrapeTVDB.vb b/Addons/scraper.TVDB.Data/TVScraper/clsScrapeTVDB.vb new file mode 100644 index 0000000..b0f8531 --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/clsScrapeTVDB.vb @@ -0,0 +1,1911 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Data +Imports System.IO +Imports System.Text + +Imports ICSharpCode.SharpZipLib.Zip +Imports EmberAPI + +Public Class Scraper + +#Region "Fields" + + Public Const APIKey As String = "7B090234F418D074" + + Public Shared WithEvents sObject As New ScraperObject + Public Shared tEpisodes As New List(Of MediaContainers.EpisodeDetails) + Public Shared tmpTVDBShow As New TVDBShow + Public Shared TVDBImages As New TVImages + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + AddHandler sObject.ScraperEvent, AddressOf InnerEvent + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + +#End Region 'Events + +#Region "Methods" + + Public Sub CancelAsync() + sObject.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String) As MediaContainers.EpisodeDetails + Return sObject.ChangeEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .TVDBID = TVDBID, .SelectedLang = Lang, .iSeason = -999}) + End Function + + Public Function GetLangs(ByVal sMirror As String) As List(Of Containers.TVLanguage) + Dim tvdbLangs As New List(Of Containers.TVLanguage) + Dim cLang As Containers.TVLanguage + Dim xmlTVDB As XDocument + Dim sHTTP As New HTTP + + Dim apiXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/languages.xml", sMirror, APIKey)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(apiXML) Then + Try + xmlTVDB = XDocument.Parse(apiXML) + Catch + Return tvdbLangs + End Try + + Dim xLangs = From xLanguages In xmlTVDB.Descendants("Language") + + For Each xL As XElement In xLangs + cLang = New Containers.TVLanguage + cLang.LongLang = xL.Element("name").Value + cLang.ShortLang = xL.Element("abbreviation").Value + tvdbLangs.Add(cLang) + Next + End If + Return tvdbLangs + End Function + + Public Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As MediaContainers.EpisodeDetails + Return sObject.GetSingleEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .TVDBID = TVDBID, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Function + + Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images) As Images + Return sObject.GetSingleImage(New Structures.ScrapeInfo With {.ShowTitle = Title, .ShowID = ShowID, .TVDBID = TVDBID, .ImageType = Type, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .CurrentImage = CurrentImage}) + End Function + + Public Sub InnerEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent ScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Function IsBusy() As Boolean + Return sObject.IsBusy + End Function + + Public Sub SaveImages() + sObject.SaveImages() + End Sub + + Public Sub ScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) + sObject.ScrapeEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .iEpisode = iEpisode, .iSeason = iSeason, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Sub + + Public Sub ScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) + sObject.ScrapeSeason(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .iSeason = iSeason, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Sub + + Public Sub SingleScrape(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) + sObject.SingleScrape(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options, .ScrapeType = ScrapeType, .WithCurrent = WithCurrent, .iSeason = -999}) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + <Serializable()> _ + Public Structure TVImages + +#Region "Fields" + + Dim AllSeasonPoster As TVDBShowPoster + Dim SeasonImageList As List(Of TVDBSeasonImage) + Dim ShowFanart As TVDBFanart + Dim ShowPoster As TVDBShowPoster + +#End Region 'Fields + +#Region "Methods" + + Public Function Clone() As TVImages + Dim newTVI As New TVImages + Try + Using ms As New IO.MemoryStream() + Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter() + bf.Serialize(ms, Me) + ms.Position = 0 + newTVI = DirectCast(bf.Deserialize(ms), TVImages) + ms.Close() + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return newTVI + End Function + +#End Region 'Methods + + End Structure + + Public Class ScraperObject + +#Region "Fields" + + Friend WithEvents bwTVDB As New System.ComponentModel.BackgroundWorker + + Private aXML As String = String.Empty + Private bXML As String = String.Empty + Private sXML As String = String.Empty + +#End Region 'Fields + +#Region "Events" + + Public Event ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + +#End Region 'Events + +#Region "Methods" + + Public Shared Sub LoadAllEpisodes(ByVal _ID As Integer, ByVal OnlySeason As Integer) + Try + + tmpTVDBShow = New TVDBShow + + tmpTVDBShow.Show = Master.DB.LoadTVFullShowFromDB(_ID) + tmpTVDBShow.AllSeason = Master.DB.LoadTVAllSeasonFromDB(_ID) + + Using SQLCount As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + If OnlySeason = 999 Then + SQLCount.CommandText = String.Concat("SELECT COUNT(ID) AS eCount FROM TVEps WHERE TVShowID = ", _ID, " AND Missing = 0;") + Else + SQLCount.CommandText = String.Concat("SELECT COUNT(ID) AS eCount FROM TVEps WHERE TVShowID = ", _ID, " AND Season = ", OnlySeason, " AND Missing = 0;") + End If + Using SQLRCount As SQLite.SQLiteDataReader = SQLCount.ExecuteReader + If Convert.ToInt32(SQLRCount("eCount")) > 0 Then + Using SQLCommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + If OnlySeason = 999 Then + SQLCommand.CommandText = String.Concat("SELECT ID, Lock FROM TVEps WHERE TVShowID = ", _ID, " AND Missing = 0;") + Else + SQLCommand.CommandText = String.Concat("SELECT ID, Lock FROM TVEps WHERE TVShowID = ", _ID, " AND Season = ", OnlySeason, " AND Missing = 0;") + End If + Using SQLReader As SQLite.SQLiteDataReader = SQLCommand.ExecuteReader + While SQLReader.Read + tmpTVDBShow.Episodes.Add(Master.DB.LoadTVEpFromDB(Convert.ToInt64(SQLReader("ID")), True)) + End While + End Using + End Using + End If + End Using + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub CancelAsync() + If bwTVDB.IsBusy Then bwTVDB.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal sInfo As Structures.ScrapeInfo) As MediaContainers.EpisodeDetails + Try + Dim tEpisodes As List(Of MediaContainers.EpisodeDetails) = Me.GetListOfKnownEpisodes(sInfo) + If tEpisodes.Count > 0 Then + Using dChangeEp As New dlgTVChangeEp + Return dChangeEp.ShowDialog(tEpisodes) + End Using + Else + MsgBox(Master.eLang.GetString(79, "There are no known episodes for this show. Scrape the show, season, or episode and try again."), MsgBoxStyle.OkOnly, Master.eLang.GetString(80, "No Known Episodes")) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return Nothing + End Function + + Public Sub DownloadSeries(ByVal sInfo As Structures.ScrapeInfo, Optional ByVal ImagesOnly As Boolean = False) + Try + Dim fPath As String = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, sInfo.SelectedLang, ".zip")) + Dim fExists As Boolean = File.Exists(fPath) + Dim doDownload As Boolean = False + + Select Case Master.eSettings.TVUpdateTime + Case Enums.TVUpdateTime.Always + doDownload = True + Case Enums.TVUpdateTime.Never + doDownload = False + Case Enums.TVUpdateTime.Week + If fExists AndAlso File.GetCreationTime(fPath).AddDays(7) < Now Then doDownload = True + Case Enums.TVUpdateTime.BiWeekly + If fExists AndAlso File.GetCreationTime(fPath).AddDays(14) < Now Then doDownload = True + Case Enums.TVUpdateTime.Month + If fExists AndAlso File.GetCreationTime(fPath).AddMonths(1) < Now Then doDownload = True + End Select + + If doDownload OrElse Not fExists Then + Dim sHTTP As New HTTP + Dim xZip As Byte() = sHTTP.DownloadZip(String.Format("http://{0}/api/{1}/series/{2}/all/{3}.zip", Master.eSettings.TVDBMirror, APIKey, sInfo.TVDBID, sInfo.SelectedLang)) + sHTTP = Nothing + + If Not IsNothing(xZip) AndAlso xZip.Length > 0 Then + 'save it to the temp dir + Directory.CreateDirectory(Directory.GetParent(fPath).FullName) + Using fStream As FileStream = New FileStream(fPath, FileMode.Create, FileAccess.Write) + fStream.Write(xZip, 0, xZip.Length) + End Using + + Me.ProcessTVDBZip(xZip, sInfo) + Me.ShowFromXML(sInfo, ImagesOnly) + End If + Else + Using fStream As FileStream = New FileStream(fPath, FileMode.Open, FileAccess.Read) + Dim fZip As Byte() = Functions.ReadStreamToEnd(fStream) + + Me.ProcessTVDBZip(fZip, sInfo) + Me.ShowFromXML(sInfo, ImagesOnly) + End Using + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub DownloadSeriesAsync(ByVal sInfo As Structures.ScrapeInfo) + Try + If Not bwTVDB.IsBusy Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.StartingDownload, 0, Nothing) + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 1, .Parameter = sInfo}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetListOfKnownEpisodes(ByVal sInfo As Structures.ScrapeInfo) As List(Of MediaContainers.EpisodeDetails) + Dim Actors As New List(Of MediaContainers.Person) + Dim tEpisodes As New List(Of MediaContainers.EpisodeDetails) + Dim tEpisode As New MediaContainers.EpisodeDetails + Dim fPath As String = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, sInfo.SelectedLang, ".zip")) + Dim tSeas As Integer = -1 + Dim tOrdering As Enums.Ordering = Enums.Ordering.Standard + + Try + If File.Exists(fPath) Then + Using fStream As FileStream = New FileStream(fPath, FileMode.Open, FileAccess.Read) + Dim fZip As Byte() = Functions.ReadStreamToEnd(fStream) + Me.ProcessTVDBZip(fZip, sInfo) + + 'get the actors first + Try + If Not String.IsNullOrEmpty(aXML) Then + Dim xdActors As XDocument = XDocument.Parse(aXML) + For Each Actor As XElement In xdActors.Descendants("Actor") + If Not IsNothing(Actor.Element("Name")) AndAlso Not String.IsNullOrEmpty(Actor.Element("Name").Value) Then + Actors.Add(New MediaContainers.Person With {.Name = Actor.Element("Name").Value, .Role = If(IsNothing(Actor.Element("Role")), String.Empty, Actor.Element("Role").Value), .Thumb = If(IsNothing(Actor.Element("Image")) OrElse String.IsNullOrEmpty(Actor.Element("Image").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Actor.Element("Image").Value))}) + End If + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + If Not String.IsNullOrEmpty(sXML) Then + Dim xdEps As XDocument = XDocument.Parse(sXML) + + For Each Episode As XElement In xdEps.Descendants("Episode") + If Not IsNothing(Episode.Element("EpisodeName").Value) AndAlso Not String.IsNullOrEmpty(Episode.Element("EpisodeName").Value) Then + tEpisode = New MediaContainers.EpisodeDetails + + tOrdering = Enums.Ordering.Standard + + If sInfo.Ordering = Enums.Ordering.DVD Then + If Not IsNothing(Episode.Element("SeasonNumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("SeasonNumber").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_season").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_episodenumber").Value.ToString) Then + tSeas = Convert.ToInt32(Episode.Element("SeasonNumber").Value) + If sInfo.iSeason >= 0 AndAlso Not tSeas = sInfo.iSeason Then Continue For + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) = tSeas AndAlso (IsNothing(e.Element("DVD_season")) OrElse String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) OrElse IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + ElseIf Not IsNothing(Episode.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_season").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_episodenumber").Value.ToString) Then + tSeas = Convert.ToInt32(Episode.Element("DVD_season").Value) + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("DVD_season").Value) = tSeas AndAlso (IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + End If + ElseIf sInfo.Ordering = Enums.Ordering.Absolute Then + If Not IsNothing(Episode.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(Episode.Element("absolute_number").Value.ToString) Then + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) > 0 AndAlso (IsNothing(e.Element("absolute_number")) OrElse String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.Absolute + End If + End If + Else + If sInfo.iSeason >= 0 AndAlso Not Convert.ToInt32(Episode.Element("SeasonNumber").Value) = sInfo.iSeason Then Continue For + End If + + With tEpisode + .Title = Episode.Element("EpisodeName").Value + If tOrdering = Enums.Ordering.DVD Then + .Season = Convert.ToInt32(Episode.Element("DVD_season").Value) + .Episode = Convert.ToInt32(CLng(Episode.Element("DVD_episodenumber").Value)) + ElseIf tOrdering = Enums.Ordering.Absolute Then + .Season = 1 + .Episode = Convert.ToInt32(Episode.Element("absolute_number").Value) + Else + .Season = If(IsNothing(Episode.Element("SeasonNumber")) OrElse String.IsNullOrEmpty(Episode.Element("SeasonNumber").Value), 0, Convert.ToInt32(Episode.Element("SeasonNumber").Value)) + .Episode = If(IsNothing(Episode.Element("EpisodeNumber")) OrElse String.IsNullOrEmpty(Episode.Element("EpisodeNumber").Value), 0, Convert.ToInt32(Episode.Element("EpisodeNumber").Value)) + End If + .Aired = If(IsNothing(Episode.Element("FirstAired")), String.Empty, Episode.Element("FirstAired").Value) + .Rating = If(IsNothing(Episode.Element("Rating")), String.Empty, Episode.Element("Rating").Value) + .Plot = If(IsNothing(Episode.Element("Overview")), String.Empty, Episode.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + .Director = If(IsNothing(Episode.Element("Director")), String.Empty, Strings.Join(Episode.Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + .Credits = CreditsString(If(IsNothing(Episode.Element("GuestStars")), String.Empty, Episode.Element("GuestStars").Value), If(IsNothing(Episode.Element("Writer")), String.Empty, Episode.Element("Writer").Value)) + .Actors = Actors + .PosterURL = If(IsNothing(Episode.Element("filename")), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Episode.Element("filename").Value)) + .LocalFile = If(IsNothing(Episode.Element("filename")), String.Empty, Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, "episodeposters", Path.DirectorySeparatorChar, Episode.Element("filename").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar)))) + End With + + tEpisodes.Add(tEpisode) + End If + Next + + End If + End Using + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return tEpisodes + End Function + + Public Sub GetSearchResultsAsync(ByVal sInfo As Structures.ScrapeInfo) + Try + If Not bwTVDB.IsBusy Then + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 0, .Parameter = sInfo}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetSingleEpisode(ByVal sInfo As Structures.ScrapeInfo) As MediaContainers.EpisodeDetails + Dim tEp As New MediaContainers.EpisodeDetails + Try + + tEp = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Season = sInfo.iSeason AndAlso e.Episode = sInfo.iEpisode) + + If Not IsNothing(tEp) Then + Return tEp + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return New MediaContainers.EpisodeDetails + End Function + + Public Function GetSingleImage(ByVal sInfo As Structures.ScrapeInfo) As Images + tmpTVDBShow = New TVDBShow + + If sInfo.ImageType = Enums.TVImageType.EpisodePoster Then + + If String.IsNullOrEmpty(sInfo.TVDBID) Then + Using dTVDBSearch As New dlgTVDBSearchResults + sInfo = dTVDBSearch.ShowDialog(sInfo, True) + If Not String.IsNullOrEmpty(sInfo.TVDBID) Then + Master.currShow.TVShow.ID = sInfo.TVDBID + + Using tImage As New Images + Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) + If Not IsNothing(tmpEp) Then + + If File.Exists(tmpEp.LocalFile) Then + tImage.FromFile(tmpEp.LocalFile) + Else + tImage.FromWeb(tmpEp.PosterURL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) + tImage.Save(tmpEp.LocalFile, , , False) + End If + End If + + If Not IsNothing(tImage.Image) Then + Using dPosterConfirm As New dlgTVEpisodePoster + If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Using + Else + MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) + Return Nothing + End If + Else + Return Nothing + End If + End Using + Else + Return Nothing + End If + End Using + Else + Using tImage As New Images + Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) + If Not IsNothing(tmpEp) Then + + If File.Exists(tmpEp.LocalFile) Then + tImage.FromFile(tmpEp.LocalFile) + Else + tImage.FromWeb(tmpEp.PosterURL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) + tImage.Save(tmpEp.LocalFile, , , False) + End If + End If + + If Not IsNothing(tImage.Image) Then + Using dPosterConfirm As New dlgTVEpisodePoster + If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Using + Else + MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) + Return Nothing + End If + Else + Return Nothing + End If + End Using + End If + Else + If String.IsNullOrEmpty(sInfo.TVDBID) Then + Using dTVDBSearch As New dlgTVDBSearchResults + sInfo = dTVDBSearch.ShowDialog(sInfo, True) + If Not String.IsNullOrEmpty(sInfo.TVDBID) Then + Master.currShow.TVShow.ID = sInfo.TVDBID + Me.DownloadSeries(sInfo, True) + Using dImageSelect As New dlgTVImageSelect + Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) + End Using + Else + Return Nothing + End If + End Using + Else + Me.DownloadSeries(sInfo, True) + Using dImageSelect As New dlgTVImageSelect + Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) + End Using + End If + End If + End Function + + Public Function IsBusy() As Boolean + Return bwTVDB.IsBusy + End Function + + Public Sub PassEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent ScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Sub ProcessTVDBZip(ByVal tvZip As Byte(), ByVal sInfo As Structures.ScrapeInfo) + sXML = String.Empty + bXML = String.Empty + aXML = String.Empty + + Try + Using zStream As ZipInputStream = New ZipInputStream(New MemoryStream(tvZip)) + Dim zEntry As ZipEntry = zStream.GetNextEntry + + While Not IsNothing(zEntry) + Dim zBuffer As Byte() = Functions.ReadStreamToEnd(zStream) + + Select Case True + Case zEntry.Name.Equals(String.Concat(sInfo.SelectedLang, ".xml")) + sXML = System.Text.Encoding.UTF8.GetString(zBuffer) + Case zEntry.Name.Equals("banners.xml") + bXML = System.Text.Encoding.UTF8.GetString(zBuffer) + Case zEntry.Name.Equals("actors.xml") + aXML = System.Text.Encoding.UTF8.GetString(zBuffer) + End Select + + zEntry = zStream.GetNextEntry + End While + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub SaveImages() + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SavingStarted, 0, Nothing) + Me.bwTVDB = New System.ComponentModel.BackgroundWorker + Me.bwTVDB.WorkerReportsProgress = True + Me.bwTVDB.WorkerSupportsCancellation = True + Me.bwTVDB.RunWorkerAsync(New Arguments With {.Type = 3}) + End Sub + + Public Sub ScrapeEpisode(ByVal sInfo As Structures.ScrapeInfo) + Try + tmpTVDBShow = New TVDBShow + tmpTVDBShow.Episodes.Add(Master.currShow) + + If String.IsNullOrEmpty(sInfo.TVDBID) Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + DownloadSeries(sInfo) + If tmpTVDBShow.Episodes(0).TVShow.ID.Length > 0 Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso Not File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso Not File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub ScrapeSeason(ByVal sInfo As Structures.ScrapeInfo) + RaiseEvent ScraperEvent(Enums.TVScraperEventType.LoadingEpisodes, 0, Nothing) + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 4, .Parameter = sInfo}) + End Sub + + Public Sub SingleScrape(ByVal sInfo As Structures.ScrapeInfo) + RaiseEvent ScraperEvent(Enums.TVScraperEventType.LoadingEpisodes, 0, Nothing) + bwTVDB.WorkerReportsProgress = False + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 2, .Parameter = sInfo}) + While bwTVDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub StartSingleScraper(ByVal sInfo As Structures.ScrapeInfo) + Try + If String.IsNullOrEmpty(sInfo.TVDBID) AndAlso sInfo.ScrapeType = Enums.ScrapeType.FullAsk Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + DownloadSeries(sInfo) + If tmpTVDBShow.Show.TVShow.ID.Length > 0 Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + If sInfo.ScrapeType = Enums.ScrapeType.FullAuto Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SaveAuto, 0, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + ElseIf sInfo.ScrapeType = Enums.ScrapeType.FullAsk Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + 'Ignore Show scrape if ScrapeAuto and show don't have ID + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwtvDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTVDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + Try + Select Case Args.Type + Case 0 'search + e.Result = New Results With {.Type = 0, .Result = SearchSeries(DirectCast(Args.Parameter, Structures.ScrapeInfo))} + Case 1 'show download + Me.DownloadSeries(DirectCast(Args.Parameter, Structures.ScrapeInfo)) + e.Result = New Results With {.Type = 1} + Case 2 'load episodes + LoadAllEpisodes(DirectCast(Args.Parameter, Structures.ScrapeInfo).ShowID, 999) + e.Result = New Results With {.Type = 2, .Result = Args.Parameter} + Case 3 'save + Me.SaveAllTVInfo() + e.Result = New Results With {.Type = 3} + Case 4 + Dim sInfo As Structures.ScrapeInfo = DirectCast(Args.Parameter, Structures.ScrapeInfo) + LoadAllEpisodes(sInfo.ShowID, sInfo.iSeason) + e.Result = New Results With {.Type = 2, .Result = Args.Parameter} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTVDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTVDB.ProgressChanged + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Progress, e.ProgressPercentage, e.UserState.ToString) + End Sub + + Private Sub bwTVDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTVDB.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.Type + Case 0 'search + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SearchResultsDownloaded, 0, DirectCast(Res.Result, List(Of TVSearchResults))) + Case 1 'show download + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ShowDownloaded, 0, Nothing) + Case 2 'load episodes + If Not e.Cancelled Then + StartSingleScraper(DirectCast(Res.Result, Structures.ScrapeInfo)) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ScraperDone, 0, Nothing) + End If + Case 3 'save + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ScraperDone, 0, Nothing) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CreditsString(ByVal sGStars As String, ByVal sWriters As String) As String + Dim cString As New List(Of String) + Dim gString As String = Master.eLang.GetString(82, "Guest Star") + Dim wString As String = Master.eLang.GetString(777, "Writer", True) + + If Not String.IsNullOrEmpty(sGStars) Then + For Each gStar In sGStars.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")) + If Not String.IsNullOrEmpty(gStar) Then cString.Add(String.Concat(gStar, String.Format(" ({0})", gString))) + Next + End If + + If Not String.IsNullOrEmpty(sWriters) Then + For Each Writer In sWriters.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")) + If Not String.IsNullOrEmpty(Writer) Then cString.Add(String.Concat(Writer, String.Format(" ({0})", wString))) + Next + End If + + Return Strings.Join(cString.ToArray, " / ") + End Function + + Private Sub SaveAllTVInfo() + Dim iEp As Integer = -1 + Dim iSea As Integer = -1 + Dim iProgress As Integer = 1 + + Dim tShow As New Structures.DBTV + Dim tEpisode As New MediaContainers.EpisodeDetails + + Me.bwTVDB.ReportProgress(tmpTVDBShow.Episodes.Count, "max") + + Using SQLTrans As SQLite.SQLiteTransaction = Master.DB.MediaDBConn.BeginTransaction() + If Master.eSettings.DisplayMissingEpisodes Then + 'clear old missing episode from db + Using SQLCommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + SQLCommand.CommandText = String.Concat("DELETE FROM TVEps WHERE Missing = 1 AND TVShowID = ", Master.currShow.ShowID, ";") + SQLCommand.ExecuteNonQuery() + End Using + End If + + Try + For Each Episode As Structures.DBTV In tmpTVDBShow.Episodes + + Try + If Me.bwTVDB.CancellationPending Then Return + + Episode.ShowID = Master.currShow.ShowID + + iEp = Episode.TVEp.Episode + iSea = Episode.TVEp.Season + + 'remove it from tepisodes since it's a real episode + If Master.eSettings.DisplayMissingEpisodes Then + tEpisode = tEpisodes.FirstOrDefault(Function(e) e.Episode = iEp AndAlso e.Season = iSea) + If Not IsNothing(tEpisode) Then tEpisodes.Remove(tEpisode) + tShow = Episode + End If + + If Me.bwTVDB.CancellationPending Then Return + + If Episode.TVEp.Season > -1 AndAlso Episode.TVEp.Episode > -1 AndAlso Not Episode.IsLockEp Then + If Not IsNothing(Episode.TVEp.Poster.Image) Then Episode.EpPosterPath = Episode.TVEp.Poster.SaveAsEpPoster(Episode, Episode.TVEp.PosterURL) + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.EpisodeFanartEnabled AndAlso Not IsNothing(Episode.TVEp.Fanart.Image) Then Episode.EpFanartPath = Episode.TVEp.Fanart.SaveAsEpFanart(Episode, ) + + If Me.bwTVDB.CancellationPending Then Return + + Dim cSea = From cSeason As TVDBSeasonImage In TVDBImages.SeasonImageList Where cSeason.Season = iSea Take 1 + If cSea.Count > 0 Then + If Not IsNothing(cSea(0).Poster.Image) Then Episode.SeasonPosterPath = cSea(0).Poster.SaveAsSeasonPoster(Episode) + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.SeasonFanartEnabled Then + If Not String.IsNullOrEmpty(cSea(0).Fanart.LocalFile) AndAlso File.Exists(cSea(0).Fanart.LocalFile) Then + cSea(0).Fanart.Image.FromFile(cSea(0).Fanart.LocalFile) + Episode.SeasonFanartPath = cSea(0).Fanart.Image.SaveAsSeasonFanart(Episode) + ElseIf Not String.IsNullOrEmpty(cSea(0).Fanart.URL) AndAlso Not String.IsNullOrEmpty(cSea(0).Fanart.LocalFile) Then + cSea(0).Fanart.Image.Clear() + cSea(0).Fanart.Image.FromWeb(cSea(0).Fanart.URL) + If Not IsNothing(cSea(0).Fanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(cSea(0).Fanart.LocalFile).FullName) + cSea(0).Fanart.Image.Save(cSea(0).Fanart.LocalFile, , , False) + Episode.SeasonFanartPath = cSea(0).Fanart.Image.SaveAsSeasonFanart(Episode) + End If + End If + End If + End If + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Episode) + + Master.DB.SaveTVEpToDB(Episode, False, True, True, True) + + If Me.bwTVDB.CancellationPending Then Return + End If + Me.bwTVDB.ReportProgress(iProgress, "progress") + + 'If AdvancedSettings.GetBooleanSetting("ScrapeActorsThumbs", False) Then + 'For Each act As MediaContainers.Person In Episode.TVEp.Actors + 'Dim img As New Images + 'img.FromWeb(act.Thumb) + 'img.SaveAsActorThumb(act, Directory.GetParent(Episode.Filename).FullName) + 'Next + 'End If + + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + + 'now save all missing episodes + If Master.eSettings.DisplayMissingEpisodes Then + tShow.Filename = String.Empty + tShow.EpFanartPath = String.Empty + tShow.EpPosterPath = String.Empty + tShow.EpNfoPath = String.Empty + tShow.SeasonFanartPath = String.Empty + tShow.SeasonPosterPath = String.Empty + tShow.ShowFanartPath = String.Empty + tShow.IsLockEp = False + tShow.IsMarkEp = False + tShow.EpID = -1 + If tEpisodes.Count > 0 Then + For Each Episode As MediaContainers.EpisodeDetails In tEpisodes + tShow.TVEp = Episode + Master.DB.SaveTVEpToDB(tShow, True, True, True) + Next + End If + End If + + If Me.bwTVDB.CancellationPending Then Return + + SQLTrans.Commit() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End Using + End Sub + + Private Sub SaveToCache(ByVal sID As String, ByVal sURL As String, ByVal sPath As String) + Dim sImage As New Images + + sImage.FromWeb(sURL) + + If Not IsNothing(sImage.Image) Then + sImage.Save(Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, sPath.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), , , True) + End If + sImage = Nothing + End Sub + + Private Function SearchSeries(ByVal sInfo As Structures.ScrapeInfo) As List(Of TVSearchResults) + Dim tvdbResults As New List(Of TVSearchResults) + Dim cResult As New TVSearchResults + Dim xmlTVDB As XDocument + Dim tmpXML As XDocument + Dim sHTTP As New HTTP + Dim sLang As String = String.Empty + Dim tmpID As String = String.Empty + + Try + Dim apiXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/GetSeries.php?seriesname={1}&language={2}", Master.eSettings.TVDBMirror, sInfo.ShowTitle, Master.eSettings.TVDBLanguage)) + + If Not String.IsNullOrEmpty(apiXML) Then + Try + xmlTVDB = XDocument.Parse(apiXML) + Catch + Return tvdbResults + End Try + + Dim xSer = From xSeries In xmlTVDB.Descendants("Series") Where xSeries.HasElements + + 'check each unique showid to see if we have an entry for the preferred languages. If not, try to force download it + For Each tID As String In xSer.GroupBy(Function(s) s.Element("seriesid").Value.ToString).Select(Function(group) group.Key) + tmpID = tID + If xSer.Where(Function(s) s.Element("seriesid").Value.ToString = tmpID AndAlso s.Element("language").Value.ToString = Master.eSettings.TVDBLanguage).Count = 0 Then + 'no preferred language in this series, force it + Dim forceXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/series/{2}/{3}.xml", Master.eSettings.TVDBMirror, APIKey, tmpID, Master.eSettings.TVDBLanguage)) + If Not String.IsNullOrEmpty(forceXML) Then + Try + tmpXML = XDocument.Parse(forceXML) + Catch + Continue For + End Try + + For Each tSer As XElement In tmpXML.Descendants("Series").Where(Function(s) s.HasElements) + sLang = String.Empty + cResult = New TVSearchResults + cResult.ID = Convert.ToInt32(tSer.Element("id").Value) + cResult.Name = If(Not IsNothing(tSer.Element("SeriesName")), tSer.Element("SeriesName").Value, String.Empty) + If Not IsNothing(tSer.Element("Language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = tSer.Element("Language").Value + cResult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(tSer.Element("Language")) Then + sLang = tSer.Element("Language").Value + cResult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + Else + 'no language info available... don't bother adding it + Continue For + End If + cResult.Aired = If(Not IsNothing(tSer.Element("FirstAired")), tSer.Element("FirstAired").Value, String.Empty) + cResult.Overview = If(Not IsNothing(tSer.Element("Overview")), tSer.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf), String.Empty) + cResult.Banner = If(Not IsNothing(tSer.Element("banner")), tSer.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(cResult.Name) AndAlso Not String.IsNullOrEmpty(sLang) AndAlso xSer.Where(Function(s) s.Element("seriesid").Value.ToString = cResult.ID.ToString AndAlso s.Element("language").Value.ToString = sLang).Count = 0 Then + cResult.Lev = StringUtils.ComputeLevenshtein(sInfo.ShowTitle, cResult.Name) + tvdbResults.Add(cResult) + End If + Next + End If + End If + Next + sHTTP = Nothing + + For Each xS As XElement In xSer + sLang = String.Empty + cResult = New TVSearchResults + cResult.ID = Convert.ToInt32(xS.Element("seriesid").Value) + cResult.Name = If(Not IsNothing(xS.Element("SeriesName")), xS.Element("SeriesName").Value, String.Empty) + If Not IsNothing(xS.Element("language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = xS.Element("language").Value + cResult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(xS.Element("language")) Then + sLang = xS.Element("language").Value + cResult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + Else + 'no language info available... don't bother adding it + Continue For + End If + cResult.Aired = If(Not IsNothing(xS.Element("FirstAired")), xS.Element("FirstAired").Value, String.Empty) + cResult.Overview = If(Not IsNothing(xS.Element("Overview")), xS.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf), String.Empty) + cResult.Banner = If(Not IsNothing(xS.Element("banner")), xS.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(cResult.Name) AndAlso Not String.IsNullOrEmpty(sLang) Then + cResult.Lev = StringUtils.ComputeLevenshtein(sInfo.ShowTitle, cResult.Name) + tvdbResults.Add(cResult) + End If + Next + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return tvdbResults + End Function + + Private Sub ShowFromXML(ByVal sInfo As Structures.ScrapeInfo, ByVal ImagesOnly As Boolean) + Dim Actors As New List(Of MediaContainers.Person) + Dim sID As String = String.Empty + Dim iEp As Integer = -1 + Dim iSeas As Integer = -1 + Dim sTitle As String = String.Empty + Dim byTitle As Boolean = False + Dim xE As XElement = Nothing + Dim tShow As Structures.DBTV = tmpTVDBShow.Show + Dim tOrdering As Enums.Ordering = Enums.Ordering.Standard + + If Not ImagesOnly Then + If Master.eSettings.DisplayMissingEpisodes Then tEpisodes = Me.GetListOfKnownEpisodes(sInfo) + + 'get the actors first + Try + If sInfo.Options.bShowActors OrElse sInfo.Options.bEpActors Then + If Not String.IsNullOrEmpty(aXML) Then + Dim xdActors As XDocument = XDocument.Parse(aXML) + For Each Actor As XElement In xdActors.Descendants("Actor") + If Not IsNothing(Actor.Element("Name")) AndAlso Not String.IsNullOrEmpty(Actor.Element("Name").Value) Then + Actors.Add(New MediaContainers.Person With {.Name = Actor.Element("Name").Value, .Role = Actor.Element("Role").Value, .Thumb = If(IsNothing(Actor.Element("Image")) OrElse String.IsNullOrEmpty(Actor.Element("Image").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Actor.Element("Image").Value))}) + End If + Next + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + 'now let's get the show info and all the episodes + Try + If Not String.IsNullOrEmpty(sXML) Then + Dim xdShow As XDocument = XDocument.Parse(sXML) + Dim xS = From xShow In xdShow.Descendants("Series") + If xS.Count > 0 Then + tShow.ShowLanguage = sInfo.SelectedLang + If Not IsNothing(tShow.TVShow) Then + With tShow.TVShow + sID = xS(0).Element("id").Value + .ID = sID + If sInfo.Options.bShowTitle AndAlso (String.IsNullOrEmpty(.Title) OrElse Not Master.eSettings.ShowLockTitle) Then .Title = If(IsNothing(xS(0).Element("SeriesName")), .Title, xS(0).Element("SeriesName").Value) + If sInfo.Options.bShowEpisodeGuide Then .EpisodeGuideURL = If(Not String.IsNullOrEmpty(Master.eSettings.ExternalTVDBAPIKey), String.Format("http://{0}/api/{1}/series/{2}/all/{3}.zip", Master.eSettings.TVDBMirror, Master.eSettings.ExternalTVDBAPIKey, sID, Master.eSettings.TVDBLanguage), String.Empty) + If sInfo.Options.bShowGenre AndAlso (String.IsNullOrEmpty(.Genre) OrElse Not Master.eSettings.ShowLockGenre) Then .Genre = If(IsNothing(xS(0).Element("Genre")), .Genre, Strings.Join(xS(0).Element("Genre").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bShowMPAA Then .MPAA = If(IsNothing(xS(0).Element("ContentRating")), .MPAA, xS(0).Element("ContentRating").Value) + If sInfo.Options.bShowPlot AndAlso (String.IsNullOrEmpty(.Plot) OrElse Not Master.eSettings.ShowLockPlot) Then .Plot = If(IsNothing(xS(0).Element("Overview")), .Plot, xS(0).Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + If sInfo.Options.bShowPremiered Then .Premiered = If(IsNothing(xS(0).Element("FirstAired")), .Premiered, xS(0).Element("FirstAired").Value) + If sInfo.Options.bShowRating AndAlso (String.IsNullOrEmpty(.Rating) OrElse Not Master.eSettings.ShowLockRating) Then .Rating = If(IsNothing(xS(0).Element("Rating")), .Rating, xS(0).Element("Rating").Value) + If sInfo.Options.bShowStudio AndAlso (String.IsNullOrEmpty(.Studio) OrElse Not Master.eSettings.ShowLockStudio) Then .Studio = If(IsNothing(xS(0).Element("Network")), .Studio, xS(0).Element("Network").Value) + If sInfo.Options.bShowActors Then .Actors = Actors + End With + End If + + 'set it back + tmpTVDBShow.Show = tShow + + For Each Episode As Structures.DBTV In tmpTVDBShow.Episodes + + Episode.ShowLanguage = sInfo.SelectedLang + + iEp = Episode.TVEp.Episode + iSeas = Episode.TVEp.Season + sTitle = Episode.TVEp.Title + byTitle = False + tOrdering = Enums.Ordering.Standard + + If Not IsNothing(tShow.TVShow) Then Episode.TVShow = tShow.TVShow + + If sInfo.Ordering = Enums.Ordering.DVD Then + 'first we need to check if dvd order is specified for every episode in the season + 'we'll use the regular season number as an indicator even though there are some cases + 'where this will not work (season 1 episode 1 = dvd_season 2 dvd_episode 1) but it + 'should work in most cases and is the best solution I could come up with + + If xdShow.Descendants("Episode").Where(Function(e) Not IsNothing(e.Element("SeasonNumber")) AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas AndAlso (IsNothing(e.Element("DVD_season")) OrElse String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) OrElse IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + ElseIf sInfo.Ordering = Enums.Ordering.Absolute Then + If xdShow.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) > 0 AndAlso (IsNothing(e.Element("absolute_number")) OrElse String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.Absolute + End If + End If + + If tOrdering = Enums.Ordering.DVD Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString) AndAlso Convert.ToInt32(CLng(e.Element("DVD_episodenumber").Value.ToString)) = iEp AndAlso Not IsNothing(e.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) AndAlso Convert.ToInt32(e.Element("DVD_season").Value) = iSeas) + ElseIf tOrdering = Enums.Ordering.Absolute Then + If iSeas = 1 Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString) AndAlso Convert.ToInt32(e.Element("absolute_number").Value.ToString) = iEp) + Else + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString) AndAlso Convert.ToInt32(e.Element("EpisodeNumber").Value.ToString) = iEp AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas) + End If + Else + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Convert.ToInt32(e.Element("EpisodeNumber").Value) = iEp AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas) + End If + + If IsNothing(xE) Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) StringUtils.ComputeLevenshtein(e.Element("EpisodeName").Value, sTitle) < 5) + byTitle = True + End If + + If Not IsNothing(xE) Then + With Episode.TVEp + If sInfo.Options.bEpTitle AndAlso (String.IsNullOrEmpty(.Title) OrElse Not Master.eSettings.EpLockTitle) AndAlso Not String.IsNullOrEmpty(xE.Element("EpisodeName").Value) Then .Title = xE.Element("EpisodeName").Value + If byTitle Then + If tOrdering = Enums.Ordering.DVD Then + If sInfo.Options.bEpSeason Then .Season = If(IsNothing(xE.Element("DVD_season")) OrElse String.IsNullOrEmpty(xE.Element("DVD_season").Value), 0, Convert.ToInt32(xE.Element("DVD_season").Value)) + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(xE.Element("DVD_episodenumber").Value), 0, Convert.ToInt32(xE.Element("DVD_episodenumber").Value)) + ElseIf tOrdering = Enums.Ordering.Absolute Then + If sInfo.Options.bEpSeason Then .Season = 1 + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("absolute_number")) OrElse String.IsNullOrEmpty(xE.Element("absolute_number").Value), 0, Convert.ToInt32(xE.Element("absolute_number").Value)) + Else + If sInfo.Options.bEpSeason Then .Season = If(IsNothing(xE.Element("SeasonNumber")) OrElse String.IsNullOrEmpty(xE.Element("SeasonNumber").Value), 0, Convert.ToInt32(xE.Element("SeasonNumber").Value)) + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("EpisodeNumber")) OrElse String.IsNullOrEmpty(xE.Element("EpisodeNumber").Value), 0, Convert.ToInt32(xE.Element("EpisodeNumber").Value)) + End If + End If + If sInfo.Options.bEpAired Then .Aired = If(IsNothing(xE.Element("FirstAired")), .Aired, xE.Element("FirstAired").Value) + If sInfo.Options.bEpRating AndAlso (String.IsNullOrEmpty(.Rating) OrElse Not Master.eSettings.EpLockRating) Then .Rating = If(IsNothing(xE.Element("Rating")), .Rating, xE.Element("Rating").Value) + If sInfo.Options.bEpPlot AndAlso (String.IsNullOrEmpty(.Plot) OrElse Not Master.eSettings.EpLockPlot) Then .Plot = If(IsNothing(xE.Element("Overview")), .Plot, xE.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + 'If sInfo.Options.bEpDirector Then .Director = If(IsNothing(xS(0).Element("Director")), .Director, Strings.Join(xS(0).Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bEpDirector Then .Director = If(IsNothing(xE.Element("Director")), .Director, Strings.Join(xE.Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bEpCredits Then .Credits = CreditsString(If(IsNothing(xE.Element("GuestStars")), String.Empty, xE.Element("GuestStars").Value), If(IsNothing(xE.Element("Writer")), String.Empty, xE.Element("Writer").Value)) + If sInfo.Options.bEpActors Then .Actors = Actors + .PosterURL = If(IsNothing(xE.Element("filename")) OrElse String.IsNullOrEmpty(xE.Element("filename").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, xE.Element("filename").Value)) + .LocalFile = If(IsNothing(xE.Element("filename")) OrElse String.IsNullOrEmpty(xE.Element("filename").Value), String.Empty, Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "episodeposters", Path.DirectorySeparatorChar, xE.Element("filename").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar)))) + End With + End If + Next + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Else + sID = sInfo.TVDBID + End If + 'and finally the images + Try + If ImagesOnly OrElse Not IsNothing(tShow.TVShow) Then + If Not String.IsNullOrEmpty(bXML) Then + Dim xdImage As XDocument = XDocument.Parse(bXML) + For Each tImage As XElement In xdImage.Descendants("Banner") + If (Not IsNothing(tImage.Element("BannerPath")) AndAlso Not String.IsNullOrEmpty(tImage.Element("BannerPath").Value)) AndAlso _ + (Not Master.eSettings.OnlyGetTVImagesForSelectedLanguage OrElse ((Not IsNothing(tImage.Element("Language")) AndAlso tImage.Element("Language").Value = Master.eSettings.TVDBLanguage) OrElse _ + ((IsNothing(tImage.Element("Language")) OrElse tImage.Element("Language").Value = "en") AndAlso Master.eSettings.AlwaysGetEnglishTVImages))) Then + Select Case tImage.Element("BannerType").Value + Case "fanart" + tmpTVDBShow.Fanart.Add(New TVDBFanart With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .ThumbnailURL = If(IsNothing(tImage.Element("ThumbnailPath")) OrElse String.IsNullOrEmpty(tImage.Element("ThumbnailPath").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("ThumbnailPath").Value)), _ + .Size = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), New Size With {.Width = 0, .Height = 0}, StringUtils.StringToSize(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "fanart", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .LocalThumb = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "fanart", Path.DirectorySeparatorChar, tImage.Element("ThumbnailPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "poster" + tmpTVDBShow.Posters.Add(New TVDBPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Size = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), New Size With {.Width = 0, .Height = 0}, StringUtils.StringToSize(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "posters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "season" + tmpTVDBShow.SeasonPosters.Add(New TVDBSeasonPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Season = If(IsNothing(tImage.Element("Season")) OrElse String.IsNullOrEmpty(tImage.Element("Season").Value), 0, Convert.ToInt32(tImage.Element("Season").Value)), _ + .Type = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), Enums.SeasonPosterType.None, StringToSeasonPosterType(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "seasonposters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "series" + tmpTVDBShow.ShowPosters.Add(New TVDBShowPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Type = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), Enums.ShowBannerType.None, StringToShowPosterType(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "seriesposters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + End Select + End If + Next + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function StringToSeasonPosterType(ByVal sType As String) As Enums.SeasonPosterType + Select Case sType.ToLower + Case "season" + Return Enums.SeasonPosterType.Poster + Case "seasonwide" + Return Enums.SeasonPosterType.Wide + Case Else + Return Enums.SeasonPosterType.None + End Select + End Function + + Private Function StringToShowPosterType(ByVal sType As String) As Enums.ShowBannerType + Select Case sType.ToLower + Case "blank" + Return Enums.ShowBannerType.Blank + Case "graphical" + Return Enums.ShowBannerType.Graphical + Case "text" + Return Enums.ShowBannerType.Text + Case Else + Return Enums.ShowBannerType.None + End Select + End Function + +#End Region 'Methods + +#Region "Other" + + Private Structure Arguments + + Dim Parameter As Object + Dim Type As Integer + + End Structure + + Private Structure Results + + Dim Result As Object + Dim Type As Integer '0 = search, 1 = show download, 2 = load eps, 3 = save + + End Structure + +#End Region 'Other + + End Class + + <Serializable()> _ + Public Class TVDBFanart + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _localthumb As String + Private _size As Size + Private _thumbnailurl As String + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property LocalThumb() As String + Get + Return Me._localthumb + End Get + Set(ByVal value As String) + Me._localthumb = value + End Set + End Property + + Public Property Size() As Size + Get + Return Me._size + End Get + Set(ByVal value As Size) + Me._size = value + End Set + End Property + + Public Property ThumbnailURL() As String + Get + Return Me._thumbnailurl + End Get + Set(ByVal value As String) + Me._thumbnailurl = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._thumbnailurl = String.Empty + Me._size = New Size + Me._localfile = String.Empty + Me._localthumb = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _size As Size + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Size() As Size + Get + Return Me._size + End Get + Set(ByVal value As Size) + Me._size = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._size = New Size + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + <Serializable()> _ + Public Class TVDBSeasonImage + +#Region "Fields" + + Private _fanart As TVDBFanart + Private _poster As Images + Private _season As Integer + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Fanart() As TVDBFanart + Get + Return Me._fanart + End Get + Set(ByVal value As TVDBFanart) + Me._fanart = value + End Set + End Property + + Public Property Poster() As Images + Get + Return Me._poster + End Get + Set(ByVal value As Images) + Me._poster = value + End Set + End Property + + Public Property Season() As Integer + Get + Return Me._season + End Get + Set(ByVal value As Integer) + Me._season = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._season = -1 + Me._poster = New Images + Me._fanart = New TVDBFanart + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBSeasonPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _season As Integer + Private _type As Enums.SeasonPosterType + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Season() As Integer + Get + Return Me._season + End Get + Set(ByVal value As Integer) + Me._season = value + End Set + End Property + + Public Property Type() As Enums.SeasonPosterType + Get + Return Me._type + End Get + Set(ByVal value As Enums.SeasonPosterType) + Me._type = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._season = 0 + Me._type = Enums.SeasonPosterType.None + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBShow + +#Region "Fields" + + Private _allseason As Structures.DBTV + Private _episodes As New List(Of Structures.DBTV) + Private _fanart As New List(Of TVDBFanart) + Private _posters As New List(Of TVDBPoster) + Private _seasonposters As New List(Of TVDBSeasonPoster) + Private _show As Structures.DBTV + Private _showposters As New List(Of TVDBShowPoster) + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property AllSeason() As Structures.DBTV + Get + Return Me._allseason + End Get + Set(ByVal value As Structures.DBTV) + Me._allseason = value + End Set + End Property + + Public Property Episodes() As List(Of Structures.DBTV) + Get + Return Me._episodes + End Get + Set(ByVal value As List(Of Structures.DBTV)) + Me._episodes = value + End Set + End Property + + Public Property Fanart() As List(Of TVDBFanart) + Get + Return Me._fanart + End Get + Set(ByVal value As List(Of TVDBFanart)) + Me._fanart = value + End Set + End Property + + Public Property Posters() As List(Of TVDBPoster) + Get + Return Me._posters + End Get + Set(ByVal value As List(Of TVDBPoster)) + Me._posters = value + End Set + End Property + + Public Property SeasonPosters() As List(Of TVDBSeasonPoster) + Get + Return Me._seasonposters + End Get + Set(ByVal value As List(Of TVDBSeasonPoster)) + Me._seasonposters = value + End Set + End Property + + Public Property Show() As Structures.DBTV + Get + Return Me._show + End Get + Set(ByVal value As Structures.DBTV) + Me._show = value + End Set + End Property + + Public Property ShowPosters() As List(Of TVDBShowPoster) + Get + Return Me._showposters + End Get + Set(ByVal value As List(Of TVDBShowPoster)) + Me._showposters = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._show = New Structures.DBTV + Me._allseason = New Structures.DBTV + Me._episodes = New List(Of Structures.DBTV) + Me._fanart = New List(Of TVDBFanart) + Me._showposters = New List(Of TVDBShowPoster) + Me._seasonposters = New List(Of TVDBSeasonPoster) + Me._posters = New List(Of TVDBPoster) + End Sub + +#End Region 'Methods + + End Class + + <Serializable()> _ + Public Class TVDBShowPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _type As Enums.ShowBannerType + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Type() As Enums.ShowBannerType + Get + Return Me._type + End Get + Set(ByVal value As Enums.ShowBannerType) + Me._type = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._type = Enums.ShowBannerType.None + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVSearchResults + +#Region "Fields" + + Private _aired As String + Private _banner As String + Private _id As Integer + Private _language As Containers.TVLanguage + Private _lev As Integer + Private _name As String + Private _overview As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Aired() As String + Get + Return Me._aired + End Get + Set(ByVal value As String) + Me._aired = value + End Set + End Property + + Public Property Banner() As String + Get + Return Me._banner + End Get + Set(ByVal value As String) + Me._banner = value + End Set + End Property + + Public Property ID() As Integer + Get + Return Me._id + End Get + Set(ByVal value As Integer) + Me._id = value + End Set + End Property + + Public Property Language() As Containers.TVLanguage + Get + Return Me._language + End Get + Set(ByVal value As Containers.TVLanguage) + Me._language = value + End Set + End Property + + Public Property Lev() As Integer + Get + Return Me._lev + End Get + Set(ByVal value As Integer) + Me._lev = value + End Set + End Property + + Public Property Name() As String + Get + Return Me._name + End Get + Set(ByVal value As String) + Me._name = value + End Set + End Property + + Public Property Overview() As String + Get + Return Me._overview + End Get + Set(ByVal value As String) + Me._overview = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._id = 0 + Me._name = String.Empty + Me._aired = String.Empty + Me._language = New Containers.TVLanguage + Me._overview = String.Empty + Me._banner = String.Empty + Me._lev = 0 + End Sub + +#End Region 'Methods + + End Class + +#End Region 'Nested Types + +End Class diff --git a/Addons/scraper.TVDB.Data/TVScraper/dlgTVChangeEp.Designer.vb b/Addons/scraper.TVDB.Data/TVScraper/dlgTVChangeEp.Designer.vb new file mode 100644 index 0000000..dd38c94 --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/dlgTVChangeEp.Designer.vb @@ -0,0 +1,139 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVChangeEp + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lvEpisodes = New System.Windows.Forms.ListView() + Me.colEpisode = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colTitle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.pbPreview = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.txtPlot = New System.Windows.Forms.TextBox() + CType(Me.pbPreview, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Location = New System.Drawing.Point(505, 286) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(575, 286) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lvEpisodes + ' + Me.lvEpisodes.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colEpisode, Me.colTitle}) + Me.lvEpisodes.FullRowSelect = True + Me.lvEpisodes.HideSelection = False + Me.lvEpisodes.Location = New System.Drawing.Point(3, 3) + Me.lvEpisodes.MultiSelect = False + Me.lvEpisodes.Name = "lvEpisodes" + Me.lvEpisodes.Size = New System.Drawing.Size(358, 278) + Me.lvEpisodes.TabIndex = 2 + Me.lvEpisodes.UseCompatibleStateImageBehavior = False + Me.lvEpisodes.View = System.Windows.Forms.View.Details + ' + 'colEpisode + ' + Me.colEpisode.Text = "Episode" + ' + 'colTitle + ' + Me.colTitle.Text = "Title" + Me.colTitle.Width = 276 + ' + 'pbPreview + ' + Me.pbPreview.Location = New System.Drawing.Point(417, 12) + Me.pbPreview.Name = "pbPreview" + Me.pbPreview.Size = New System.Drawing.Size(174, 117) + Me.pbPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPreview.TabIndex = 3 + Me.pbPreview.TabStop = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(367, 140) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(275, 21) + Me.lblTitle.TabIndex = 3 + ' + 'txtPlot + ' + Me.txtPlot.BackColor = System.Drawing.SystemColors.Control + Me.txtPlot.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.txtPlot.Location = New System.Drawing.Point(366, 169) + Me.txtPlot.Multiline = True + Me.txtPlot.Name = "txtPlot" + Me.txtPlot.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtPlot.Size = New System.Drawing.Size(276, 111) + Me.txtPlot.TabIndex = 4 + ' + 'dlgTVChangeEp + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(646, 315) + Me.ControlBox = False + Me.Controls.Add(Me.txtPlot) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPreview) + Me.Controls.Add(Me.lvEpisodes) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTVChangeEp" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Change Episode" + CType(Me.pbPreview, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lvEpisodes As System.Windows.Forms.ListView + Friend WithEvents colEpisode As System.Windows.Forms.ColumnHeader + Friend WithEvents colTitle As System.Windows.Forms.ColumnHeader + Friend WithEvents pbPreview As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents txtPlot As System.Windows.Forms.TextBox + +End Class diff --git a/Addons/scraper.TVDB.Data/TVScraper/dlgTVChangeEp.resx b/Addons/scraper.TVDB.Data/TVScraper/dlgTVChangeEp.resx new file mode 100644 index 0000000..717c885 --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/dlgTVChangeEp.resx @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="txtPlot.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>True</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/TVScraper/dlgTVChangeEp.vb b/Addons/scraper.TVDB.Data/TVScraper/dlgTVChangeEp.vb new file mode 100644 index 0000000..954f58a --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/dlgTVChangeEp.vb @@ -0,0 +1,120 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class dlgTVChangeEp + +#Region "Fields" + + Private _episode As MediaContainers.EpisodeDetails = Nothing + Private _tepisodes As New List(Of MediaContainers.EpisodeDetails) + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal tEpisodes As List(Of MediaContainers.EpisodeDetails)) As MediaContainers.EpisodeDetails + Me._tepisodes = tEpisodes + + If MyBase.ShowDialog = Windows.Forms.DialogResult.OK Then + Return _episode + Else + Return Nothing + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub ClearInfo() + Me.pbPreview.Image = Nothing + Me.lblTitle.Text = String.Empty + Me.txtPlot.Text = String.Empty + End Sub + + Private Sub dlgTVChangeEp_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + + Dim lGroup As New ListViewGroup + Dim lItem As New ListViewItem + Dim tSeason As Integer = Nothing + + For Each Season As Integer In _tepisodes.GroupBy(Function(s) s.Season).Select(Function(group) group.Key) + tSeason = Season + lGroup = New ListViewGroup + lGroup.Header = String.Format(Master.eLang.GetString(726, "Season {0}", True), tSeason) + lvEpisodes.Groups.Add(lGroup) + For Each Episode As MediaContainers.EpisodeDetails In _tepisodes.Where(Function(s) s.Season = tSeason).OrderBy(Function(s) s.Episode) + lItem = lvEpisodes.Items.Add(Episode.Episode.ToString) + lItem.Tag = Episode + lItem.SubItems.Add(Episode.Title) + lGroup.Items.Add(lItem) + Next + Next + End Sub + + Private Sub lvEpisodes_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvEpisodes.SelectedIndexChanged + Me.ClearInfo() + If lvEpisodes.SelectedItems.Count > 0 AndAlso Not IsNothing(lvEpisodes.SelectedItems(0).Tag) Then + Me._episode = DirectCast(lvEpisodes.SelectedItems(0).Tag, MediaContainers.EpisodeDetails) + + If Not IsNothing(Me._episode.Poster.Image) Then + Me.pbPreview.Image = Me._episode.Poster.Image + ElseIf Not String.IsNullOrEmpty(Me._episode.LocalFile) AndAlso File.Exists(Me._episode.LocalFile) Then + Me._episode.Poster.FromFile(Me._episode.LocalFile) + If Not IsNothing(Me._episode.Poster.Image) Then + Me.pbPreview.Image = Me._episode.Poster.Image + End If + ElseIf Not String.IsNullOrEmpty(Me._episode.PosterURL) Then + Me._episode.Poster.FromWeb(Me._episode.PosterURL) + If Not IsNothing(Me._episode.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Me._episode.LocalFile).FullName) + Me._episode.Poster.Save(Me._episode.LocalFile) + Me.pbPreview.Image = Me._episode.Poster.Image + End If + End If + + Me.lblTitle.Text = Me._episode.Title + Me.txtPlot.Text = Me._episode.Plot + End If + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(772, "Change Episode", True) + + Me.lvEpisodes.Columns(0).Text = Master.eLang.GetString(727, "Episode", True) + Me.lvEpisodes.Columns(1).Text = Master.eLang.GetString(21, "Title", True) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/TVScraper/dlgTVDBSearchResults.Designer.vb b/Addons/scraper.TVDB.Data/TVScraper/dlgTVDBSearchResults.Designer.vb new file mode 100644 index 0000000..b05c597 --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/dlgTVDBSearchResults.Designer.vb @@ -0,0 +1,368 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTVDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pbBanner = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblAiredHeader = New System.Windows.Forms.Label() + Me.lblAired = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lvSearchResults = New System.Windows.Forms.ListView() + Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colLang = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colLev = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colSLang = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.txtTVDBID = New System.Windows.Forms.TextBox() + CType(Me.pbBanner, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(485, 335) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(558, 335) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pbBanner + ' + Me.pbBanner.Location = New System.Drawing.Point(325, 69) + Me.pbBanner.Name = "pbBanner" + Me.pbBanner.Size = New System.Drawing.Size(300, 55) + Me.pbBanner.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbBanner.TabIndex = 3 + Me.pbBanner.TabStop = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(325, 132) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(300, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Visible = False + ' + 'lblAiredHeader + ' + Me.lblAiredHeader.AutoSize = True + Me.lblAiredHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblAiredHeader.Location = New System.Drawing.Point(325, 161) + Me.lblAiredHeader.Name = "lblAiredHeader" + Me.lblAiredHeader.Size = New System.Drawing.Size(38, 13) + Me.lblAiredHeader.TabIndex = 10 + Me.lblAiredHeader.Text = "Aired:" + Me.lblAiredHeader.Visible = False + ' + 'lblAired + ' + Me.lblAired.AutoSize = True + Me.lblAired.Location = New System.Drawing.Point(387, 161) + Me.lblAired.Name = "lblAired" + Me.lblAired.Size = New System.Drawing.Size(63, 13) + Me.lblAired.TabIndex = 12 + Me.lblAired.Text = "00/00/0000" + Me.lblAired.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(325, 189) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 13 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtOutline.Location = New System.Drawing.Point(325, 205) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(300, 127) + Me.txtOutline.TabIndex = 14 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lvSearchResults + ' + Me.lvSearchResults.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colName, Me.colLang, Me.colLev, Me.colID, Me.colSLang}) + Me.lvSearchResults.FullRowSelect = True + Me.lvSearchResults.HideSelection = False + Me.lvSearchResults.Location = New System.Drawing.Point(3, 96) + Me.lvSearchResults.MultiSelect = False + Me.lvSearchResults.Name = "lvSearchResults" + Me.lvSearchResults.Size = New System.Drawing.Size(316, 236) + Me.lvSearchResults.TabIndex = 5 + Me.lvSearchResults.UseCompatibleStateImageBehavior = False + Me.lvSearchResults.View = System.Windows.Forms.View.Details + ' + 'colName + ' + Me.colName.Text = "Title" + Me.colName.Width = 223 + ' + 'colLang + ' + Me.colLang.Text = "Language" + Me.colLang.Width = 89 + ' + 'colLev + ' + Me.colLev.Width = 0 + ' + 'colID + ' + Me.colID.Width = 0 + ' + 'colSLang + ' + Me.colSLang.Width = 0 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(380, 154) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 11 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(98, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching TVDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(643, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(287, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper TV show." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(216, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "TV Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(296, 67) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 4 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(3, 68) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(287, 22) + Me.txtSearch.TabIndex = 3 + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(244, 337) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 8 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Enabled = False + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(3, 341) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(127, 17) + Me.chkManual.TabIndex = 6 + Me.chkManual.Text = "Manual TVDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'txtTVDBID + ' + Me.txtTVDBID.Enabled = False + Me.txtTVDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTVDBID.Location = New System.Drawing.Point(138, 337) + Me.txtTVDBID.Name = "txtTVDBID" + Me.txtTVDBID.Size = New System.Drawing.Size(100, 22) + Me.txtTVDBID.TabIndex = 7 + ' + 'dlgTVDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(643, 378) + Me.ControlBox = False + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.txtTVDBID) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.lvSearchResults) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblAiredHeader) + Me.Controls.Add(Me.lblAired) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbBanner) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 406) + Me.Name = "dlgTVDBSearchResults" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "TV Search Results" + CType(Me.pbBanner, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pbBanner As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblAiredHeader As System.Windows.Forms.Label + Friend WithEvents lblAired As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lvSearchResults As System.Windows.Forms.ListView + Friend WithEvents colName As System.Windows.Forms.ColumnHeader + Friend WithEvents colLang As System.Windows.Forms.ColumnHeader + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents colLev As System.Windows.Forms.ColumnHeader + Friend WithEvents colID As System.Windows.Forms.ColumnHeader + Friend WithEvents colSLang As System.Windows.Forms.ColumnHeader + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents txtTVDBID As System.Windows.Forms.TextBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/TVScraper/dlgTVDBSearchResults.resx b/Addons/scraper.TVDB.Data/TVScraper/dlgTVDBSearchResults.resx new file mode 100644 index 0000000..7a332a8 --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/dlgTVDBSearchResults.resx @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + gg== +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA + CukB/XXO0wAAAepJREFUOE+lkktIG1EUhkeFaLQ+UGulgthNEUHRCrqyIHZTdSd0Iyq46cL3Sly50ppV + uywYi2uDiyKK1ioFk0lm7mSmSgymJuIqSkwwCTVpGs3fM0Pa+poWceBj4N5zvnvOuZcDwN2HeyWrB98Q + LFosuRJjz51O6cXmxsaj/1V3RSAx8fVXRQnIsgwVRZHjJHr7L8kfAROFPoWS3G43gicnCIVC8O7vQ11z + StKsnkQTrK6sGCSJBXddLpyfJ5FKpTTUz+f1gvbA22w1t0k0AW3WCYIAv9+PZPIn4vGYRiLxA+HwKRhj + EByOIV2BdWur3mG34/j4iJISiEYjRBSx2BkikQiYKOJQ4ft1BZ/X13NIEHalW1CrUEVACj6fF4yqe2W2 + TegK0m0MiBSoziEQCNAQg/B4PPi2I8Fk+QJucBnZI0vvrkuuXCPP8+PU63dC7RnbTvHi/cKnA2O3GYbu + OeT0ziOv58Na8djHgt+iGw+JHk+pzWrtpMF27cn2Ko7jMnLbTebCl1MoaH+D/I4ZFHbM7FZ0ThtvfYl6 + 913WMjFc2jyGkqZRlNC/om2yXBNk0RFEEfGEqCZqiXriGdGYpoHCHhdXtg6W1fQKD592mQwZ3N8KKCiL + yCaMRB7xgMi/zuXqMinnTi3otfYLj6yxrhdJtZ8AAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/TVScraper/dlgTVDBSearchResults.vb b/Addons/scraper.TVDB.Data/TVScraper/dlgTVDBSearchResults.vb new file mode 100644 index 0000000..cce33d3 --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/dlgTVDBSearchResults.vb @@ -0,0 +1,437 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTVDBSearchResults + +#Region "Fields" + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + + Private lvResultsSorter As New ListViewColumnSorter + Private sHTTP As New HTTP + Private sInfo As Structures.ScrapeInfo + Private _manualresult As Scraper.TVSearchResults = Nothing + Private _skipdownload As Boolean = False + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal _sInfo As Structures.ScrapeInfo) As Windows.Forms.DialogResult + Me.sInfo = _sInfo + Me.Text = String.Concat(Master.eLang.GetString(85, "TV Search Results"), " - ", sInfo.ShowTitle) + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal _sinfo As Structures.ScrapeInfo, ByVal SkipDownload As Boolean) As Structures.ScrapeInfo + Me.sInfo = _sinfo + Me._skipdownload = SkipDownload + + Me.Text = String.Concat(Master.eLang.GetString(85, "TV Search Results"), " - ", sInfo.ShowTitle) + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return Me.sInfo + Else + Return _sinfo + End If + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.lvSearchResults.Enabled = False + Me.sInfo.ShowTitle = Me.txtSearch.Text + Me.ClearInfo() + Me.chkManual.Enabled = False + Me.chkManual.Checked = False + Me.txtSearch.Text = String.Empty + Me.btnVerify.Enabled = False + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + Me.pnlLoading.Visible = True + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + If IsNumeric(Me.txtTVDBID.Text) AndAlso Me.txtTVDBID.Text.Length >= 5 Then + Dim tmpXML As XDocument = Nothing + Dim sLang As String = String.Empty + + Me.ClearInfo() + Me.pnlLoading.Visible = True + Application.DoEvents() + + Dim forceXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/series/{2}/{3}.xml", Master.eSettings.TVDBMirror, Scraper.APIKey, Me.txtTVDBID.Text, Master.eSettings.TVDBLanguage)) + + If Not String.IsNullOrEmpty(forceXML) Then + Try + tmpXML = XDocument.Parse(forceXML) + Catch + End Try + + If Not IsNothing(tmpXML) Then + Dim tSer As XElement = tmpXML.Descendants("Series").FirstOrDefault(Function(s) s.HasElements) + + If Not IsNothing(tSer) Then + Me._manualresult = New Scraper.TVSearchResults + Me._manualresult.ID = Convert.ToInt32(tSer.Element("id").Value) + Me._manualresult.Name = If(Not IsNothing(tSer.Element("SeriesName")), tSer.Element("SeriesName").Value, String.Empty) + If Not IsNothing(tSer.Element("Language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = tSer.Element("Language").Value + Me._manualresult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(tSer.Element("Language")) Then + sLang = tSer.Element("Language").Value + Me._manualresult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + End If + Me._manualresult.Aired = If(Not IsNothing(tSer.Element("FirstAired")), tSer.Element("FirstAired").Value, String.Empty) + Me._manualresult.Overview = If(Not IsNothing(tSer.Element("Overview")), tSer.Element("Overview").Value, String.Empty) + Me._manualresult.Banner = If(Not IsNothing(tSer.Element("banner")), tSer.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(Me._manualresult.Name) AndAlso Not String.IsNullOrEmpty(sLang) Then + If Not String.IsNullOrEmpty(Me._manualresult.Banner) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = Me._manualresult.Banner}) + End If + + Me.OK_Button.Tag = Me._manualresult.ID + Me.lblTitle.Text = Me._manualresult.Name + Me.txtOutline.Text = Me._manualresult.Overview + Me.lblAired.Text = Me._manualresult.Aired + Me.OK_Button.Enabled = True + Me.pnlLoading.Visible = False + Me.ControlsVisible(True) + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + + Else + MsgBox(Master.eLang.GetString(83, "The ID you entered is not a valid TVDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + End If + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + sHTTP.StartDownloadImage(String.Format("http://{0}/banners/_cache/{1}", Master.eSettings.TVDBMirror, Args.pURL)) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image()} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbBanner.Image = Res.Result + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtTVDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.lvSearchResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtTVDBID.Text = String.Empty + Else + If Me.lvSearchResults.SelectedItems.Count > 0 Then Me.lvSearchResults.SelectedItems(0).Selected = False + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblAired.Text = String.Empty + Me.pbBanner.Image = Nothing + Scraper.sObject.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.pbBanner.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblAiredHeader.Visible = areVisible + Me.lblAired.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + End Sub + + Private Sub dlgTVDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + AddHandler ModulesManager.Instance.TVScraperEvent, AddressOf TVScraperEvent + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + + Me.lvSearchResults.ListViewItemSorter = Me.lvResultsSorter + + Me.SetUp() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub lvSearchResults_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lvSearchResults.ColumnClick + ' Determine if the clicked column is already the column that is + ' being sorted. + Try + If (e.Column = Me.lvResultsSorter.SortColumn) Then + ' Reverse the current sort direction for this column. + If (Me.lvResultsSorter.Order = SortOrder.Ascending) Then + Me.lvResultsSorter.Order = SortOrder.Descending + Else + Me.lvResultsSorter.Order = SortOrder.Ascending + End If + Else + ' Set the column number that is to be sorted; default to ascending. + Me.lvResultsSorter.SortColumn = e.Column + Me.lvResultsSorter.Order = SortOrder.Ascending + End If + + ' Perform the sort with these new sort options. + Me.lvSearchResults.Sort() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub lvSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvSearchResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub lvSearchResults_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvSearchResults.SelectedIndexChanged + Me.ClearInfo() + If Me.lvSearchResults.SelectedItems.Count > 0 AndAlso Not Me.chkManual.Checked Then + Dim SelectedShow As Scraper.TVSearchResults = DirectCast(Me.lvSearchResults.SelectedItems(0).Tag, Scraper.TVSearchResults) + If Not String.IsNullOrEmpty(SelectedShow.Banner) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = SelectedShow.Banner}) + End If + + Me.OK_Button.Tag = SelectedShow.ID + Me.lblTitle.Text = SelectedShow.Name + Me.txtOutline.Text = SelectedShow.Overview + Me.lblAired.Text = SelectedShow.Aired + Me.OK_Button.Enabled = True + Me.ControlsVisible(True) + End If + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + If Me.lvSearchResults.SelectedItems.Count > 0 Then + Dim sResults As Scraper.TVSearchResults = DirectCast(Me.lvSearchResults.SelectedItems(0).Tag, Scraper.TVSearchResults) + Me.sInfo.TVDBID = sResults.ID.ToString + Me.sInfo.SelectedLang = sResults.Language.ShortLang + + If Not _skipdownload Then + Me.Label3.Text = Master.eLang.GetString(84, "Downloading show info...") + Me.pnlLoading.Visible = True + Scraper.sObject.DownloadSeriesAsync(sInfo) + Else + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + ElseIf Me.chkManual.Checked AndAlso Not IsNothing(Me._manualresult) Then + Me.sInfo.TVDBID = Me._manualresult.ID.ToString + Me.sInfo.SelectedLang = Me._manualresult.Language.ShortLang + + If Not _skipdownload Then + Me.Label3.Text = Master.eLang.GetString(84, "Downloading show info...") + Me.pnlLoading.Visible = True + Scraper.sObject.DownloadSeriesAsync(sInfo) + Else + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + End Sub + + Private Sub SetUp() + Me.Label1.Text = Master.eLang.GetString(85, "TV Search Results") + Me.Label2.Text = Master.eLang.GetString(86, "View details of each result to find the proper TV show.") + Me.lblAiredHeader.Text = Master.eLang.GetString(658, "Aired:", True) + Me.lblPlotHeader.Text = Master.eLang.GetString(783, "Plot Summary:", True) + + Me.lvSearchResults.Columns(0).Text = Master.eLang.GetString(21, "Title", True) + Me.lvSearchResults.Columns(1).Text = Master.eLang.GetString(610, "Language", True) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + Select Case eType + Case Enums.TVScraperEventType.SearchResultsDownloaded + Dim lItem As ListViewItem + Dim sResults As List(Of Scraper.TVSearchResults) = DirectCast(Parameter, List(Of Scraper.TVSearchResults)) + + Me.lvSearchResults.Items.Clear() + + If Not IsNothing(sResults) AndAlso sResults.Count > 0 Then + For Each sRes As Scraper.TVSearchResults In sResults.OrderBy(Function(r) r.Lev) + lItem = New ListViewItem(sRes.Name) + lItem.SubItems.Add(sRes.Language.LongLang) + lItem.SubItems.Add(sRes.Lev.ToString) + lItem.SubItems.Add(sRes.ID.ToString) + lItem.SubItems.Add(sRes.Language.ShortLang) + lItem.Tag = sRes + Me.lvSearchResults.Items.Add(lItem) + Next + End If + + Me.pnlLoading.Visible = False + + If Me.lvSearchResults.Items.Count > 0 Then + If sResults.Select(Function(s) s.ID).Distinct.Count = 1 Then + 'they're all for the same show... try to find one with the preferred language + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + Else + 'we've got a bunch of different shows... try to find a "best match" title with the preferred language + If sResults.Where(Function(s) s.Lev <= 5).Count > 0 Then + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If Convert.ToInt32(fItem.SubItems(2).Text) <= 5 AndAlso fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + + If Me.lvSearchResults.SelectedItems.Count = 0 Then + 'get the id for the best english match and see if we have one for the preferred language with same id + Dim tID As Integer = sResults.OrderBy(Function(s) s.Lev).FirstOrDefault(Function(s) s.Language.ShortLang = "en").ID + If tID > 0 Then + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If Convert.ToInt32(fItem.SubItems(3).Text) = tID AndAlso fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + End If + End If + End If + End If + + If Me.lvSearchResults.SelectedItems.Count = 0 Then + Me.lvSearchResults.Items(0).Selected = True + End If + Me.lvSearchResults.Select() + End If + + Me.chkManual.Enabled = True + If Not Me.chkManual.Checked Then Me.lvSearchResults.Enabled = True + + Case Enums.TVScraperEventType.ShowDownloaded + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Select + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Sub txtTVDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTVDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtTVDBID_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTVDBID.KeyPress + e.Handled = StringUtils.NumericOnly(e.KeyChar, True) + End Sub + + Private Sub txtTVDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTVDBID.TextChanged + If String.IsNullOrEmpty(Me.txtTVDBID.Text) Then + Me.btnVerify.Enabled = False + Me.OK_Button.Enabled = False + Else + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim pURL As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Image + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class diff --git a/Addons/scraper.TVDB.Data/TVScraper/dlgTVEpisodePoster.Designer.vb b/Addons/scraper.TVDB.Data/TVScraper/dlgTVEpisodePoster.Designer.vb new file mode 100644 index 0000000..a3ebbd8 --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/dlgTVEpisodePoster.Designer.vb @@ -0,0 +1,86 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTVEpisodePoster + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pbPoster = New System.Windows.Forms.PictureBox() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Location = New System.Drawing.Point(292, 287) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(362, 287) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pbPoster + ' + Me.pbPoster.BackColor = System.Drawing.Color.DimGray + Me.pbPoster.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pbPoster.Location = New System.Drawing.Point(6, 6) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(423, 276) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + ' + 'dlgTVEpisodePoster + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(435, 315) + Me.ControlBox = False + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTVEpisodePoster" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Confirm Episode Poster" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.TVDB.Data/TVScraper/dlgTVEpisodePoster.resx b/Addons/scraper.TVDB.Data/TVScraper/dlgTVEpisodePoster.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/dlgTVEpisodePoster.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/TVScraper/dlgTVEpisodePoster.vb b/Addons/scraper.TVDB.Data/TVScraper/dlgTVEpisodePoster.vb new file mode 100644 index 0000000..60ed929 --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/dlgTVEpisodePoster.vb @@ -0,0 +1,48 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTVEpisodePoster + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal Poster As Image) As System.Windows.Forms.DialogResult + Me.pbPoster.Image = Poster + Return MyBase.ShowDialog + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbPoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbPoster.Click + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(Me.pbPoster.Image) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/TVScraper/dlgTVImageSelect.Designer.vb b/Addons/scraper.TVDB.Data/TVScraper/dlgTVImageSelect.Designer.vb new file mode 100644 index 0000000..cf05d15 --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/dlgTVImageSelect.Designer.vb @@ -0,0 +1,213 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVImageSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTVImageSelect)) + Me.tvList = New System.Windows.Forms.TreeView() + Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components) + Me.pnlImages = New System.Windows.Forms.Panel() + Me.pbCurrent = New System.Windows.Forms.PictureBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnOK = New System.Windows.Forms.Button() + Me.btnCancel = New System.Windows.Forms.Button() + Me.pbDelete = New System.Windows.Forms.PictureBox() + Me.pbUndo = New System.Windows.Forms.PictureBox() + Me.lblCurrentImage = New System.Windows.Forms.Label() + CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlStatus.SuspendLayout() + CType(Me.pbDelete, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbUndo, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'tvList + ' + Me.tvList.Enabled = False + Me.tvList.ImageIndex = 0 + Me.tvList.ImageList = Me.ImageList1 + Me.tvList.Location = New System.Drawing.Point(3, 4) + Me.tvList.Name = "tvList" + Me.tvList.SelectedImageIndex = 0 + Me.tvList.Size = New System.Drawing.Size(214, 262) + Me.tvList.TabIndex = 2 + Me.tvList.Visible = False + ' + 'ImageList1 + ' + Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent + Me.ImageList1.Images.SetKeyName(0, "new_page.png") + Me.ImageList1.Images.SetKeyName(1, "image.png") + Me.ImageList1.Images.SetKeyName(2, "artwork.png") + Me.ImageList1.Images.SetKeyName(3, "star_full.png") + ' + 'pnlImages + ' + Me.pnlImages.AutoScroll = True + Me.pnlImages.BackColor = System.Drawing.SystemColors.Control + Me.pnlImages.Location = New System.Drawing.Point(222, 4) + Me.pnlImages.Name = "pnlImages" + Me.pnlImages.Size = New System.Drawing.Size(622, 421) + Me.pnlImages.TabIndex = 3 + ' + 'pbCurrent + ' + Me.pbCurrent.BackColor = System.Drawing.SystemColors.Control + Me.pbCurrent.Location = New System.Drawing.Point(3, 293) + Me.pbCurrent.Name = "pbCurrent" + Me.pbCurrent.Size = New System.Drawing.Size(214, 157) + Me.pbCurrent.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbCurrent.TabIndex = 2 + Me.pbCurrent.TabStop = False + Me.pbCurrent.Visible = False + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(264, 192) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(321, 75) + Me.pnlStatus.TabIndex = 5 + ' + 'lblStatus + ' + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(5, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(310, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Gathering Data..." + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(6, 52) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(309, 19) + Me.pbStatus.Step = 1 + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbStatus.TabIndex = 1 + ' + 'btnOK + ' + Me.btnOK.Enabled = False + Me.btnOK.Location = New System.Drawing.Point(708, 431) + Me.btnOK.Name = "btnOK" + Me.btnOK.Size = New System.Drawing.Size(65, 22) + Me.btnOK.TabIndex = 0 + Me.btnOK.Text = "OK" + Me.btnOK.UseVisualStyleBackColor = True + ' + 'btnCancel + ' + Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.btnCancel.Location = New System.Drawing.Point(779, 431) + Me.btnCancel.Name = "btnCancel" + Me.btnCancel.Size = New System.Drawing.Size(65, 22) + Me.btnCancel.TabIndex = 1 + Me.btnCancel.Text = "Cancel" + Me.btnCancel.UseVisualStyleBackColor = True + ' + 'pbDelete + ' + Me.pbDelete.Image = CType(resources.GetObject("pbDelete.Image"), System.Drawing.Image) + Me.pbDelete.Location = New System.Drawing.Point(3, 293) + Me.pbDelete.Name = "pbDelete" + Me.pbDelete.Size = New System.Drawing.Size(16, 16) + Me.pbDelete.TabIndex = 13 + Me.pbDelete.TabStop = False + Me.pbDelete.Visible = False + ' + 'pbUndo + ' + Me.pbUndo.Image = CType(resources.GetObject("pbUndo.Image"), System.Drawing.Image) + Me.pbUndo.Location = New System.Drawing.Point(201, 293) + Me.pbUndo.Name = "pbUndo" + Me.pbUndo.Size = New System.Drawing.Size(16, 16) + Me.pbUndo.TabIndex = 14 + Me.pbUndo.TabStop = False + Me.pbUndo.Visible = False + ' + 'lblCurrentImage + ' + Me.lblCurrentImage.AutoSize = True + Me.lblCurrentImage.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblCurrentImage.Location = New System.Drawing.Point(0, 274) + Me.lblCurrentImage.Name = "lblCurrentImage" + Me.lblCurrentImage.Size = New System.Drawing.Size(100, 17) + Me.lblCurrentImage.TabIndex = 4 + Me.lblCurrentImage.Text = "Current Image:" + Me.lblCurrentImage.Visible = False + ' + 'dlgTVImageSelect + ' + Me.AcceptButton = Me.btnOK + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.btnCancel + Me.ClientSize = New System.Drawing.Size(849, 481) + Me.ControlBox = False + Me.Controls.Add(Me.lblCurrentImage) + Me.Controls.Add(Me.pbUndo) + Me.Controls.Add(Me.pbDelete) + Me.Controls.Add(Me.btnCancel) + Me.Controls.Add(Me.btnOK) + Me.Controls.Add(Me.pnlStatus) + Me.Controls.Add(Me.pbCurrent) + Me.Controls.Add(Me.pnlImages) + Me.Controls.Add(Me.tvList) + Me.DoubleBuffered = True + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(855, 491) + Me.Name = "dlgTVImageSelect" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "TV Image Selection" + CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlStatus.ResumeLayout(False) + CType(Me.pbDelete, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbUndo, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents tvList As System.Windows.Forms.TreeView + Friend WithEvents pnlImages As System.Windows.Forms.Panel + Friend WithEvents pbCurrent As System.Windows.Forms.PictureBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnOK As System.Windows.Forms.Button + Friend WithEvents btnCancel As System.Windows.Forms.Button + Friend WithEvents pbDelete As System.Windows.Forms.PictureBox + Friend WithEvents pbUndo As System.Windows.Forms.PictureBox + Friend WithEvents ImageList1 As System.Windows.Forms.ImageList + Friend WithEvents lblCurrentImage As System.Windows.Forms.Label +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/TVScraper/dlgTVImageSelect.resx b/Addons/scraper.TVDB.Data/TVScraper/dlgTVImageSelect.resx new file mode 100644 index 0000000..db85c76 --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/dlgTVImageSelect.resx @@ -0,0 +1,210 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="ImageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <data name="ImageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64"> + <value> + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAO + CwAAAk1TRnQBSQFMAgEBBAEAATABAAEwAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8AFgAC/wMA + Bf8DAAH/BAAL/wMAA/8BAAb/AQAD/wMABf8C9AX/AgAC/wHzAfAJvAHzAv8CAAL/AfQB8QH0AfIB8QH0 + AfEB8wL/AwAD/wH0Af8E9AH/AvQC/wMAAf8B8QEHB7wB8gH/AwAB/wG8AfEC8gXzAvIB8AH0AwAD/wGT + AfQB8AGTAQABkwH0Av8DAAL/AfQBUwGZBP8B8AFTAfAC/wQAAfEB8AfxAfIEAAH0AfAB8QHyB/MB8gHx + AfQGAAEaAvMBmQH/AZMIAAH/AXUBMgF1AfQB/wGaAjIB9AYAAvEI8gQAAfQB8AEJCLsBCQHxAfQFAAH/ + AZMBdAGZAXQBmQF0AfQIAAEaAjICUwIyAXUB/wYACfIB8wQAAfQBuwG5AbMGigGyAbkBuwH0BAAB8wGZ + BnQBkwHxAf8GAAH0BjIBGgcAAvIG8wHyAfMEAAH0AbsCuQGsAYoCrAGKAawBswG5AbsB9AQAAvEB8AG7 + AbUBBwEaAfIB8wHwAf8GAAH2AVMFMgEbBwAK8wQAAf8BuwO5AbIDrAGzArkBuwH0BAAB8gG8Aa4BbAFL + AUwBUgGZAfMB8QH/BQAB8wFTBzIBGgYACvMEAAH/AbsDuQGyAqwBsgO5AbsB9AQAAfEB/wEHAW4BUgIy + AY4B9AHyAf8DAAH/ARoKMgF6Af8EAArzBAAB/wEJAroBswGsArIBrAGzAroBuwH0BAAB8gH2AbsCggNM + AvMB/wMAAfQBMgFTAlkBUwMyA1kBMgEaBAAG8wP0AfMEAAH/AQkDugSyA7oBCQH0BAABGwH0AbsB9AGO + AbABkwF1AfQB8wH/BAAE/wEaAjIBegX/BAAF8wH0AfIC7wHyBAAB9AHwA7sBugKyAboDuwEJAfQEAAEb + Af8B8wH/Ab0B8gH0AbcB8wH0Af8IAAH0AjgBGgkABfMB9AEHAewB8AUAAfQB8AoJAfAB9AQAAfMC9AEb + AZkBkwEaAvQBGwH/CAAB/wF6ATgB/wkABfMB9AEHAbwGAAH/AfMBGQnyAfMB/wQABP8BmQF0AfQD/woA + ARoBWQH/CQAB/wX0AfMIAAH0CvMB9AkAAfMBGg4AAf8B9EcAAUIBTQE+BwABPgMAASgDAAFAAwABIAMA + AQEBAAEBBgABARYAA/+BAAL/AZwBHQHgAQMBiAERAcABAwIAAcABAwGAAQEBwAEDAYABAQHAAUMBgAEB + AeABBwGAAQEB+AEfAeABBwHgAQcBgAEBAfABDwHwAQcB4AEHAYABAQHgAQMB8AEPAeABBwGAAQEB4AED + AfABDwHgAQcBgAEBAeABAwHgAQcB4AEHAYABAQHgAQMBgAEBAeABBwGAAQEB4AEDAYABAQHgAQcBgAEB + AeABAwHAAQEB4AEHAYABAQHgAQMB/AE/AeABDwGAAQEB4AEDAfwBPwHgAR8BgAEBAeABBwH+AT8B4AE/ + AcABAwH+AX8B/gF/CP8L +</value> + </data> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="pbDelete.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAGHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3NPsx9OAAAB60lEQVQ4T2P4//8/AyUYRfN9B2Pfu3YGzbgMvGdnkHnP3qgQWR5uwC1X + s4grBqr/L2kp/L9upbsF3ZAbdgaNl3WV/1/WUfp/w96w9//BmYwgNWADrnpYcZ3WUf5/XFEajE+py/2/ + aIkw5LKtQeNpbSWgnBQYn9JU/H/eTNsUbsBOTi7GA4rSPQeUZf6DMVDRITW5/2csdVecszesOaqt+H8/ + UAwuryS9/4CsBDfcAJhzdyrL9O5Qkv6/E4h3KEj93wN0yT4txf/bFSQhYhC5/Us0FVlgejBiYCPQkA1A + hWAMtHU90CAYf6OS9N752iqsWAMRWXCFkvTxFcCwQMPvNpkawG3G6YIFitINCxWk/gDxf3S8QFFqI3rs + oHhhhqJ040ygRhieAWSDMKqY9Jb/T7/D9YEZE1TlGSYqSDVMlJf6D8MTQGwF6c2TFKS7wGxkrCC1ZZKK + HAc8FnrVFLg65SX/o+H9tfqqTCBFXQpSvR1o8l2K0mYo0dihJJvYBLSlSU7yP5De9y3AG6wZhpvlpbrB + ckDcoigz/bGzFViegZkBjAWAFG+cpGh9trTYFm4WZgMgXwcobgzCQDaIr5AiKTo3U1p8IZAtAsR8cBcA + FTEDMdhPYEEGBk4gnxcZA8V4kOTZQHowUiI52RoAvKofAJdcVi8AAAAASUVORK5CYII= +</value> + </data> + <data name="pbUndo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAHHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3MgQ1M0BrLToAAAAihJREFUOE9j+P//PwMlmCLNIIupZwATAwMjOxs7Q8XKkwzFG2+y + GnYd8XOZdprZedopBr9FVxiSNt5jqD3wjGHC6TcMvadegzGKCxgYGFhVdE0Y0ldcYVFt3LeYIWfrO9aS + XZzmU84weC+6ypBMhAEsPoU9nBJV+w4xpG/4z5C//SN/zf4ou1kXDIAGsKRvvsdQfxCPC7jFFIVFc9fu + ZEhb+58hZ9N/hoLt/xlL9/xnqT78X6Ln3D3bRbfaSvc+FZ927g3DpDMQjOIF1ohptxlSgJrTEQYwlOz+ + z1C+/z9D1eH/jM2n/6vOuf06dtsT64ydTxjSdjxBNYApdf1/huSVmAZUHPjPUHPkP0P9if8MLWf/K8y7 + 98lw0T1do0V3UQ0QsoqIZc/e/AXZCwyFuyAuABtw8j9D05n/LF2X/2ssfnTEeOkDVAPYmRgZtLJn2bFk + b/7BkLURFAa/NbuOdUi1HY8QbjsZKtN3Pkl20uUpHD2Xn/FNuf3fYNljF4xotPGLYohacsWOIXPDW4a8 + bW/lmw9yKXedYJDuOs2gO/0Sg/vyOwxZu56yGCy+Xy086/58dAMYxSRlGJq3XWOIWnhBS6hy93rB6r0c + YnX7GWQ6TzJoT7vE4Lz0NkPW7ucMkdufM1mufOJP3aQMMo2ZgYEZiEWBWBaYtKVYOPkNWMRUvYFscSCW + BYqLAzErcu5FyUxASUaQAiDmAGIuIAbLA2l2qBgbSA2yAQAKojORM6Lv5AAAAABJRU5ErkJggg== +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/TVScraper/dlgTVImageSelect.vb b/Addons/scraper.TVDB.Data/TVScraper/dlgTVImageSelect.vb new file mode 100644 index 0000000..288414e --- /dev/null +++ b/Addons/scraper.TVDB.Data/TVScraper/dlgTVImageSelect.vb @@ -0,0 +1,1224 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +'TODO: 1.5 - TV Show renaming (including "dump folder") +'TODO: 1.5 - Support VIDEO_TS/BDMV folders for TV Shows + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgTVImageSelect + +#Region "Fields" + + Friend WithEvents bwDownloadFanart As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwLoadData As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwLoadImages As New System.ComponentModel.BackgroundWorker + + Private DefaultImages As New Scraper.TVImages + Private FanartList As New List(Of Scraper.TVDBFanart) + Private GenericPosterList As New List(Of Scraper.TVDBPoster) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + Private iTop As Integer = 5 + Private lblImage() As Label + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private SeasonList As New List(Of Scraper.TVDBSeasonPoster) + Private SelIsPoster As Boolean = True + Private SelSeason As Integer = -999 + Private ShowPosterList As New List(Of Scraper.TVDBShowPoster) + Private _fanartchanged As Boolean = False + Private _id As Integer = -1 + Private _season As Integer = -999 + Private _type As Enums.TVImageType = Enums.TVImageType.All + Private _withcurrent As Boolean = True + Private _ScrapeType As Enums.ScrapeType + +#End Region 'Fields + +#Region "Methods" + + Public Function SetDefaults() As Boolean + Dim iSeason As Integer = -1 + Dim iEpisode As Integer = -1 + Dim iProgress As Integer = 3 + + Dim tSea As Scraper.TVDBSeasonPoster + + Try + Me.bwLoadImages.ReportProgress(Scraper.TVDBImages.SeasonImageList.Count + Scraper.tmpTVDBShow.Episodes.Count + 3, "defaults") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster) AndAlso IsNothing(Scraper.TVDBImages.ShowPoster.Image.Image) Then + If Master.eSettings.IsShowBanner Then + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredShowBannerType AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If Master.eSettings.OnlyGetTVImagesForSelectedLanguage Then + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + End If + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredShowBannerType) + + 'no preferred size, just get any one of them + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.ShowPoster.Image = tSP.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSP.URL + Else + 'still nothing? try to get from generic posters + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) p.Language = Master.eSettings.TVDBLanguage AndAlso Not IsNothing(p.Image.Image)) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.ShowPoster.Image = tSPg.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSPg.URL + End If + End If + Else + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredShowPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If Master.eSettings.OnlyGetTVImagesForSelectedLanguage Then + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + End If + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredShowPosterSize) + + 'no preferred size, just get any one of them + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.ShowPoster.Image = tSPg.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSPg.URL + Else + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.ShowPoster.Image = tSP.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSP.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(1, "progress") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart) AndAlso IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Dim tSF As Scraper.TVDBFanart = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image) AndAlso Me.GetFanartDims(f.Size) = Master.eSettings.PreferredShowFanartSize AndAlso f.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSF) Then tSF = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image) AndAlso Me.GetFanartDims(f.Size) = Master.eSettings.PreferredShowFanartSize) + + 'no fanart of the preferred size, just get the first available + If IsNothing(tSF) Then tSF = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image)) + + If Not IsNothing(tSF) Then + If Not String.IsNullOrEmpty(tSF.LocalFile) AndAlso File.Exists(tSF.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(tSF.LocalFile) + Scraper.TVDBImages.ShowFanart.LocalFile = tSF.LocalFile + Scraper.TVDBImages.ShowFanart.URL = tSF.URL + ElseIf Not String.IsNullOrEmpty(tSF.LocalFile) AndAlso Not String.IsNullOrEmpty(tSF.URL) Then + Scraper.TVDBImages.ShowFanart.Image.FromWeb(tSF.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(tSF.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(tSF.LocalFile, , , False) + Scraper.TVDBImages.ShowFanart.LocalFile = tSF.LocalFile + Scraper.TVDBImages.ShowFanart.URL = tSF.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(2, "progress") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.AllSeasonPoster) AndAlso Master.eSettings.AllSeasonPosterEnabled AndAlso IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + If Master.eSettings.IsAllSBanner Then + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredAllSBannerType AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredAllSBannerType) + + 'no preferred size, just get any one of them + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSP.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSP.URL + Else + 'still nothing? try to get from generic posters + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSPg.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSPg.URL + End If + End If + Else + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredAllSPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredAllSPosterSize) + + 'no preferred size, just get any one of them + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSPg.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSPg.URL + Else + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSP.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSP.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(3, "progress") + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.SeasonFanart Then + For Each cSeason As Scraper.TVDBSeasonImage In Scraper.TVDBImages.SeasonImageList + Try + iSeason = cSeason.Season + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster) AndAlso IsNothing(cSeason.Poster.Image) Then + tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason AndAlso p.Type = Master.eSettings.PreferredSeasonPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + If IsNothing(tSea) Then tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason AndAlso p.Type = Master.eSettings.PreferredSeasonPosterSize) + If IsNothing(tSea) Then tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason) + If Not IsNothing(tSea) Then cSeason.Poster = tSea.Image + End If + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonFanart) AndAlso Master.eSettings.SeasonFanartEnabled AndAlso IsNothing(cSeason.Fanart.Image.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then cSeason.Fanart.Image = Scraper.TVDBImages.ShowFanart.Image + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All Then + For Each Episode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + If Not String.IsNullOrEmpty(Episode.TVEp.LocalFile) Then + Episode.TVEp.Poster.FromFile(Episode.TVEp.LocalFile) + ElseIf Not String.IsNullOrEmpty(Episode.EpPosterPath) Then + Episode.TVEp.Poster.FromFile(Episode.EpPosterPath) + End If + + If Master.eSettings.EpisodeFanartEnabled Then + If Not String.IsNullOrEmpty(Episode.EpFanartPath) Then + Episode.TVEp.Fanart.FromFile(Episode.EpFanartPath) + ElseIf Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Episode.TVEp.Fanart = Scraper.TVDBImages.ShowFanart.Image + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + DefaultImages = Scraper.TVDBImages.Clone + + Return False + End Function + + Public Overloads Function ShowDialog(ByVal ShowID As Integer, ByVal Type As Enums.TVImageType, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As System.Windows.Forms.DialogResult + Me._id = ShowID + Me._type = Type + Me._withcurrent = WithCurrent + Me._ScrapeType = ScrapeType + Return MyBase.ShowDialog + End Function + + Public Overloads Function ShowDialog(ByVal ShowID As Integer, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal CurrentImage As Images) As Images + Me._id = ShowID + Me._type = Type + Me._season = Season + Me.pbCurrent.Image = CurrentImage.Image + Me.pbCurrent.Tag = CurrentImage + + If MyBase.ShowDialog = Windows.Forms.DialogResult.OK Then + Return CType(Me.pbCurrent.Tag, Images) + Else + Return Nothing + End If + End Function + + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal fTag As ImageTag) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + ReDim Preserve Me.lblImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.lblImage(iIndex) = New Label() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(187, 187) + Me.pbImage(iIndex).Size = New Size(181, 151) + Me.lblImage(iIndex).Size = New Size(181, 30) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblImage(iIndex).Text = sDescription + Me.pbImage(iIndex).Image = fTag.ImageObj.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.lblImage(iIndex).Left = 0 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.lblImage(iIndex).Top = 151 + Me.pnlImage(iIndex).Tag = fTag + Me.pbImage(iIndex).Tag = fTag + Me.lblImage(iIndex).Tag = fTag + Me.pnlImages.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 192 + Else + Me.iLeft += 192 + End If + End Sub + + Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click + If Me.bwLoadData.IsBusy Then Me.bwLoadData.CancelAsync() + If Me.bwLoadImages.IsBusy Then Me.bwLoadImages.CancelAsync() + + While Me.bwLoadData.IsBusy OrElse Me.bwLoadImages.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click + DoneAndClose() + End Sub + + Private Sub DoneAndClose() + If Me._type = Enums.TVImageType.All Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + Master.currShow.ShowPosterPath = Scraper.TVDBImages.ShowPoster.LocalFile + If Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.TVDBImages.ShowFanart.LocalFile) + Master.currShow.ShowFanartPath = Scraper.TVDBImages.ShowFanart.LocalFile + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.Clear() + Scraper.TVDBImages.ShowFanart.Image.FromWeb(Scraper.TVDBImages.ShowFanart.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.ShowFanart.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile, , , False) + Master.currShow.ShowFanartPath = Scraper.TVDBImages.ShowFanart.LocalFile + End If + End If + If Master.eSettings.AllSeasonPosterEnabled AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + Master.currShow.SeasonPosterPath = Scraper.TVDBImages.AllSeasonPoster.LocalFile + End If + ElseIf Me._type = Enums.TVImageType.SeasonFanart AndAlso Me._fanartchanged Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + If Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromFile(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) + Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Clear() + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromWeb(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) + If Not IsNothing(Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile).FullName) + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Save(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile, , , False) + Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image + End If + End If + ElseIf (Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart) AndAlso Me._fanartchanged Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + If Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.TVDBImages.ShowFanart.LocalFile) + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.Clear() + Scraper.TVDBImages.ShowFanart.Image.FromWeb(Scraper.TVDBImages.ShowFanart.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.ShowFanart.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile, , , False) + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + End If + End If + End If + + Me.DialogResult = Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + + Private Sub bwLoadData_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwLoadData.DoWork + Dim cSI As Scraper.TVDBSeasonImage + Dim iProgress As Integer = 1 + Dim iSeason As Integer = -1 + + Me.bwLoadData.ReportProgress(Scraper.tmpTVDBShow.Episodes.Count, "current") + + 'initialize the struct + Scraper.TVDBImages.ShowPoster = New Scraper.TVDBShowPoster + Scraper.TVDBImages.ShowFanart = New Scraper.TVDBFanart + Scraper.TVDBImages.AllSeasonPoster = New Scraper.TVDBShowPoster + Scraper.TVDBImages.SeasonImageList = New List(Of Scraper.TVDBSeasonImage) + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + Select Case Me._type + Case Enums.TVImageType.AllSeasonPoster + Scraper.TVDBImages.AllSeasonPoster.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.SeasonFanart + cSI = New Scraper.TVDBSeasonImage + cSI.Season = Me._season + cSI.Fanart.Image = CType(Me.pbCurrent.Tag, Images) + Scraper.TVDBImages.SeasonImageList.Add(cSI) + Case Enums.TVImageType.SeasonPoster + cSI = New Scraper.TVDBSeasonImage + cSI.Season = Me._season + cSI.Poster = CType(Me.pbCurrent.Tag, Images) + Scraper.TVDBImages.SeasonImageList.Add(cSI) + Case Enums.TVImageType.ShowFanart, Enums.TVImageType.EpisodeFanart + Scraper.TVDBImages.ShowFanart.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.ShowPoster + Scraper.TVDBImages.ShowPoster.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.All + + If _withcurrent Then + If Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.Show.ShowPosterPath) Then + Scraper.TVDBImages.ShowPoster.Image.FromFile(Scraper.tmpTVDBShow.Show.ShowPosterPath) + Scraper.TVDBImages.ShowPoster.LocalFile = Scraper.tmpTVDBShow.Show.ShowPosterPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.Show.ShowFanartPath) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.tmpTVDBShow.Show.ShowFanartPath) + Scraper.TVDBImages.ShowFanart.LocalFile = Scraper.tmpTVDBShow.Show.ShowFanartPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Master.eSettings.AllSeasonPosterEnabled AndAlso Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath) Then + Scraper.TVDBImages.AllSeasonPoster.Image.FromFile(Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath) + Scraper.TVDBImages.AllSeasonPoster.LocalFile = Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + For Each sEpisode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + iSeason = sEpisode.TVEp.Season + If iSeason > -1 Then + If IsNothing(Scraper.TVDBImages.ShowPoster.Image) AndAlso Not String.IsNullOrEmpty(sEpisode.ShowPosterPath) Then + Scraper.TVDBImages.ShowPoster.Image.FromFile(sEpisode.ShowPosterPath) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Master.eSettings.EpisodeFanartEnabled AndAlso IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) AndAlso Not String.IsNullOrEmpty(sEpisode.ShowFanartPath) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(sEpisode.ShowFanartPath) + Scraper.TVDBImages.ShowFanart.LocalFile = sEpisode.ShowFanartPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Scraper.TVDBImages.SeasonImageList.Where(Function(s) s.Season = iSeason).Count = 0 Then + cSI = New Scraper.TVDBSeasonImage + cSI.Season = iSeason + If Not String.IsNullOrEmpty(sEpisode.SeasonPosterPath) Then + cSI.Poster.FromFile(sEpisode.SeasonPosterPath) + End If + If Master.eSettings.SeasonFanartEnabled AndAlso Not String.IsNullOrEmpty(sEpisode.SeasonFanartPath) Then + cSI.Fanart.Image.FromFile(sEpisode.SeasonFanartPath) + cSI.Fanart.LocalFile = sEpisode.SeasonFanartPath + End If + Scraper.TVDBImages.SeasonImageList.Add(cSI) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + End If + Me.bwLoadData.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + Else + For Each sEpisode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + iSeason = sEpisode.TVEp.Season + + If Scraper.TVDBImages.SeasonImageList.Where(Function(s) s.Season = iSeason).Count = 0 Then + cSI = New Scraper.TVDBSeasonImage + cSI.Season = iSeason + Scraper.TVDBImages.SeasonImageList.Add(cSI) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + Me.bwLoadData.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + End Select + End Sub + + Private Sub bwLoadData_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwLoadData.ProgressChanged + Try + If e.UserState.ToString = "progress" Then + Me.pbStatus.Value = e.ProgressPercentage + ElseIf e.UserState.ToString = "current" Then + Me.lblStatus.Text = Master.eLang.GetString(88, "Loading Current Images...") + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + Else + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwLoadData_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwLoadData.RunWorkerCompleted + If Not e.Cancelled Then + Me.GenerateList() + + Me.lblStatus.Text = Master.eLang.GetString(89, "(Down)Loading New Images...") + Me.bwLoadImages.WorkerReportsProgress = True + Me.bwLoadImages.WorkerSupportsCancellation = True + Me.bwLoadImages.RunWorkerAsync() + End If + End Sub + + Private Sub bwLoadImages_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwLoadImages.DoWork + e.Cancel = Me.DownloadAllImages() + End Sub + + Private Sub bwLoadImages_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwLoadImages.ProgressChanged + Try + If e.UserState.ToString = "progress" Then + Me.pbStatus.Value = e.ProgressPercentage + ElseIf e.UserState.ToString = "defaults" Then + Me.lblStatus.Text = Master.eLang.GetString(90, "Setting Defaults...") + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + Else + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwLoadImages_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwLoadImages.RunWorkerCompleted + Me.pnlStatus.Visible = False + If _ScrapeType = Enums.ScrapeType.FullAuto Then + DoneAndClose() + Else + If Not e.Cancelled Then + Me.tvList.Enabled = True + Me.tvList.Visible = True + Me.tvList.SelectedNode = Me.tvList.Nodes(0) + Me.tvList.Focus() + + Me.btnOK.Enabled = True + End If + + Me.pbCurrent.Visible = True + Me.lblCurrentImage.Visible = True + End If + End Sub + + Private Sub CheckCurrentImage() + Me.pbDelete.Visible = Not IsNothing(Me.pbCurrent.Image) AndAlso Me.pbCurrent.Visible + Me.pbUndo.Visible = Me.pbCurrent.Visible + End Sub + + Private Sub ClearImages() + Try + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop = 5 + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Tag = Nothing + + If Me.pnlImages.Controls.Count > 0 Then + For i As Integer = UBound(Me.pnlImage) To 0 Step -1 + If Not IsNothing(Me.pnlImage(i)) Then + If Not IsNothing(Me.lblImage(i)) AndAlso Me.pnlImage(i).Contains(Me.lblImage(i)) Then Me.pnlImage(i).Controls.Remove(Me.lblImage(i)) + If Not IsNothing(Me.pbImage(i)) AndAlso Me.pnlImage(i).Contains(Me.pbImage(i)) Then Me.pnlImage(i).Controls.Remove(Me.pbImage(i)) + If Me.pnlImages.Contains(Me.pnlImage(i)) Then Me.pnlImages.Controls.Remove(Me.pnlImage(i)) + End If + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgTVImageSelect_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + AddHandler pnlImages.MouseWheel, AddressOf MouseWheelEvent + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler tvList.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlImages) + + Me.SetUp() + End Sub + + Private Sub dlgTVImageSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.bwLoadData.WorkerReportsProgress = True + Me.bwLoadData.WorkerSupportsCancellation = True + Me.bwLoadData.RunWorkerAsync() + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, ByVal SelTag As ImageTag) + Try + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + Next + + Me.pnlImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + + SetImage(SelTag) + + Me.CheckCurrentImage() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function DownloadAllImages() As Boolean + Dim iProgress As Integer = 1 + + Try + Me.bwLoadImages.ReportProgress(Scraper.tmpTVDBShow.Episodes.Count + Scraper.tmpTVDBShow.SeasonPosters.Count + Scraper.tmpTVDBShow.ShowPosters.Count + Scraper.tmpTVDBShow.Fanart.Count + Scraper.tmpTVDBShow.Posters.Count, "max") + + If Me._type = Enums.TVImageType.All Then + For Each Epi As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + If Not File.Exists(Epi.TVEp.LocalFile) Then + If Not String.IsNullOrEmpty(Epi.TVEp.PosterURL) Then + Epi.TVEp.Poster.FromWeb(Epi.TVEp.PosterURL) + If Not IsNothing(Epi.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Epi.TVEp.LocalFile).FullName) + Epi.TVEp.Poster.Save(Epi.TVEp.LocalFile) + End If + End If + Else + Epi.TVEp.Poster.FromFile(Epi.TVEp.LocalFile) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each Seas As Scraper.TVDBSeasonPoster In Scraper.tmpTVDBShow.SeasonPosters + Try + If Not File.Exists(Seas.LocalFile) Then + If Not String.IsNullOrEmpty(Seas.URL) Then + Seas.Image.FromWeb(Seas.URL) + If Not IsNothing(Seas.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Seas.LocalFile).FullName) + Seas.Image.Save(Seas.LocalFile, , , False) + SeasonList.Add(Seas) + End If + End If + Else + Seas.Image.FromFile(Seas.LocalFile) + SeasonList.Add(Seas) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each SPost As Scraper.TVDBShowPoster In Scraper.tmpTVDBShow.ShowPosters + Try + If Not File.Exists(SPost.LocalFile) Then + If Not String.IsNullOrEmpty(SPost.URL) Then + SPost.Image.FromWeb(SPost.URL) + If Not IsNothing(SPost.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(SPost.LocalFile).FullName) + SPost.Image.Save(SPost.LocalFile, , , False) + ShowPosterList.Add(SPost) + End If + End If + Else + SPost.Image.FromFile(SPost.LocalFile) + ShowPosterList.Add(SPost) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.SeasonFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart Then + For Each SFan As Scraper.TVDBFanart In Scraper.tmpTVDBShow.Fanart + Try + If Not File.Exists(SFan.LocalThumb) Then + If Not String.IsNullOrEmpty(SFan.ThumbnailURL) Then + SFan.Image.FromWeb(SFan.ThumbnailURL) + If Not IsNothing(SFan.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(SFan.LocalThumb).FullName) + SFan.Image.Save(SFan.LocalThumb, , , False) + FanartList.Add(SFan) + End If + End If + Else + SFan.Image.FromFile(SFan.LocalThumb) + FanartList.Add(SFan) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster OrElse _ + Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each Post As Scraper.TVDBPoster In Scraper.tmpTVDBShow.Posters + Try + If Not File.Exists(Post.LocalFile) Then + If Not String.IsNullOrEmpty(Post.URL) Then + Post.Image.FromWeb(Post.URL) + If Not IsNothing(Post.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Post.LocalFile).FullName) + Post.Image.Save(Post.LocalFile, , , False) + GenericPosterList.Add(Post) + End If + End If + Else + Post.Image.FromFile(Post.LocalFile) + GenericPosterList.Add(Post) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return Me.SetDefaults() + End Function + + Private Function DownloadFanart(ByVal iTag As ImageTag) As Image + Dim sHTTP As New HTTP + + Using tImage As New Images + If Not String.IsNullOrEmpty(iTag.Path) AndAlso File.Exists(iTag.Path) Then + tImage.FromFile(iTag.Path) + ElseIf Not String.IsNullOrEmpty(iTag.Path) AndAlso Not String.IsNullOrEmpty(iTag.URL) Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + + Application.DoEvents() + + tImage.FromWeb(iTag.URL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(iTag.Path).FullName) + tImage.Save(iTag.Path, , , False) + End If + + sHTTP = Nothing + + Me.pnlStatus.Visible = False + End If + + Return tImage.Image + End Using + End Function + + Private Sub GenerateList() + Try + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster Then Me.tvList.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(91, "Show Poster"), .Tag = "showp", .ImageIndex = 0, .SelectedImageIndex = 0}) + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart Then Me.tvList.Nodes.Add(New TreeNode With {.Text = If(Me._type = Enums.TVImageType.EpisodeFanart, Master.eLang.GetString(92, "Episode Fanart"), Master.eLang.GetString(93, "Show Fanart")), .Tag = "showf", .ImageIndex = 1, .SelectedImageIndex = 1}) + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.AllSeasonPoster) AndAlso Master.eSettings.AllSeasonPosterEnabled Then Me.tvList.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(94, "All Seasons Poster"), .Tag = "allp", .ImageIndex = 2, .SelectedImageIndex = 2}) + + Dim TnS As TreeNode + If Me._type = Enums.TVImageType.All Then + For Each cSeason As Scraper.TVDBSeasonImage In Scraper.TVDBImages.SeasonImageList.OrderBy(Function(s) s.Season) + Try + TnS = New TreeNode(String.Format(Master.eLang.GetString(726, "Season {0}", True), cSeason.Season), 3, 3) + TnS.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(95, "Season Posters"), .Tag = String.Concat("p", cSeason.Season.ToString), .ImageIndex = 0, .SelectedImageIndex = 0}) + If Master.eSettings.SeasonFanartEnabled Then TnS.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(96, "Season Fanart"), .Tag = String.Concat("f", cSeason.Season.ToString), .ImageIndex = 1, .SelectedImageIndex = 1}) + Me.tvList.Nodes.Add(TnS) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + ElseIf Me._type = Enums.TVImageType.SeasonPoster Then + Me.tvList.Nodes.Add(New TreeNode With {.Text = String.Format(Master.eLang.GetString(97, "Season {0} Posters"), Me._season), .Tag = String.Concat("p", Me._season)}) + ElseIf Me._type = Enums.TVImageType.SeasonFanart Then + If Master.eSettings.SeasonFanartEnabled Then Me.tvList.Nodes.Add(New TreeNode With {.Text = String.Format(Master.eLang.GetString(99, "Season {0} Fanart"), Me._season), .Tag = String.Concat("f", Me._season)}) + End If + + Me.tvList.ExpandAll() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetFanartDims(ByVal fSize As Size) As Enums.FanartSize + Try + If (fSize.Width > 1000 AndAlso fSize.Height > 750) OrElse (fSize.Height > 1000 AndAlso fSize.Width > 750) Then + Return Enums.FanartSize.Lrg + ElseIf (fSize.Width > 700 AndAlso fSize.Height > 400) OrElse (fSize.Height > 700 AndAlso fSize.Width > 400) Then + Return Enums.FanartSize.Mid + Else + Return Enums.FanartSize.Small + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Function + + Private Function GetPosterDims(ByVal pSize As Size) As Enums.PosterSize + Try + If (pSize.Width > pSize.Height) AndAlso (pSize.Width > (pSize.Height * 2)) AndAlso (pSize.Width > 300) Then + 'at least twice as wide than tall... consider it wide (also make sure it's big enough) + Return Enums.PosterSize.Wide + ElseIf (pSize.Height > 1000 AndAlso pSize.Width > 750) OrElse (pSize.Width > 1000 AndAlso pSize.Height > 750) Then + Return Enums.PosterSize.Xlrg + ElseIf (pSize.Height > 700 AndAlso pSize.Width > 500) OrElse (pSize.Width > 700 AndAlso pSize.Height > 500) Then + Return Enums.PosterSize.Lrg + ElseIf (pSize.Height > 250 AndAlso pSize.Width > 150) OrElse (pSize.Width > 250 AndAlso pSize.Height > 150) Then + Return Enums.PosterSize.Mid + Else + Return Enums.PosterSize.Small + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Function + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Dim iindex As Integer = Convert.ToInt32(DirectCast(sender, Label).Name) + Me.DoSelect(iindex, DirectCast(DirectCast(sender, Label).Tag, ImageTag)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlImages.VerticalScroll.Value + 50) <= pnlImages.VerticalScroll.Maximum Then + pnlImages.VerticalScroll.Value += 50 + Else + pnlImages.VerticalScroll.Value = pnlImages.VerticalScroll.Maximum + End If + Else + If (pnlImages.VerticalScroll.Value - 50) >= pnlImages.VerticalScroll.Minimum Then + pnlImages.VerticalScroll.Value -= 50 + Else + pnlImages.VerticalScroll.Value = pnlImages.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub pbDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbDelete.Click + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Tag = Nothing + Me.SetImage(New ImageTag) + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, ImageTag)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) + Dim tImage As Image = Nothing + Dim iTag As ImageTag = DirectCast(DirectCast(sender, PictureBox).Tag, ImageTag) + If Not IsNothing(iTag) OrElse Not iTag.isFanart Then + tImage = DownloadFanart(iTag) + Else + tImage = DirectCast(sender, PictureBox).Image + End If + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage) + End Sub + + Private Sub pbUndo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbUndo.Click + If Me.SelSeason = -999 Then + If Me.SelIsPoster Then + Scraper.TVDBImages.ShowPoster.Image = DefaultImages.ShowPoster.Image + Scraper.TVDBImages.ShowPoster.LocalFile = DefaultImages.ShowPoster.LocalFile + Scraper.TVDBImages.ShowPoster.URL = DefaultImages.ShowPoster.URL + Me.pbCurrent.Image = Scraper.TVDBImages.ShowPoster.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowPoster.Image + Else + Scraper.TVDBImages.ShowFanart.Image = DefaultImages.ShowFanart.Image + Scraper.TVDBImages.ShowFanart.LocalFile = DefaultImages.ShowFanart.LocalFile + Scraper.TVDBImages.ShowFanart.URL = DefaultImages.ShowFanart.URL + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + End If + ElseIf Me.SelSeason = 999 Then + Scraper.TVDBImages.AllSeasonPoster.Image = DefaultImages.AllSeasonPoster.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = DefaultImages.AllSeasonPoster.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = DefaultImages.AllSeasonPoster.URL + Me.pbCurrent.Image = Scraper.TVDBImages.AllSeasonPoster.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.AllSeasonPoster.Image + Else + If Me.SelIsPoster Then + Dim dSPost As Images = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster + Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster = dSPost + Me.pbCurrent.Image = dSPost.Image + Me.pbCurrent.Tag = dSPost + Else + Dim dSFan As Scraper.TVDBFanart = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + Dim tSFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + tSFan.Image = dSFan.Image + tSFan.LocalFile = dSFan.LocalFile + tSFan.URL = dSFan.URL + Me.pbCurrent.Image = dSFan.Image.Image + Me.pbCurrent.Tag = dSFan.Image + End If + End If + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Dim iIndex As Integer = Convert.ToInt32(DirectCast(sender, Panel).Name) + Me.DoSelect(iIndex, DirectCast(DirectCast(sender, Panel).Tag, ImageTag)) + End Sub + + Private Sub SetImage(ByVal SelTag As ImageTag) + Me.pbCurrent.Image = SelTag.ImageObj.Image + Me.pbCurrent.Tag = SelTag.ImageObj + + Me._fanartchanged = True + + If Me.SelSeason = -999 Then + If Me.SelIsPoster Then + Scraper.TVDBImages.ShowPoster.Image = SelTag.ImageObj + Scraper.TVDBImages.ShowPoster.LocalFile = SelTag.Path + Scraper.TVDBImages.ShowPoster.URL = SelTag.URL + Else + Scraper.TVDBImages.ShowFanart.Image = SelTag.ImageObj + Scraper.TVDBImages.ShowFanart.LocalFile = SelTag.Path + Scraper.TVDBImages.ShowFanart.URL = SelTag.URL + End If + ElseIf Me.SelSeason = 999 Then + Scraper.TVDBImages.AllSeasonPoster.Image = SelTag.ImageObj + Scraper.TVDBImages.AllSeasonPoster.LocalFile = SelTag.Path + Scraper.TVDBImages.AllSeasonPoster.URL = SelTag.URL + Else + If Me.SelIsPoster Then + Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster = SelTag.ImageObj + Else + Dim tFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + If Not IsNothing(tFan) Then + tFan.Image = SelTag.ImageObj + tFan.LocalFile = SelTag.Path + tFan.URL = SelTag.URL + End If + End If + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(99, "TV Image Selection") + Me.btnOK.Text = Master.eLang.GetString(179, "OK", True) + Me.btnCancel.Text = Master.eLang.GetString(167, "Cancel", True) + Me.lblCurrentImage.Text = Master.eLang.GetString(100, "Current Image:") + End Sub + + Private Sub tvList_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvList.AfterSelect + Dim iCount As Integer = 0 + + Try + ClearImages() + If Not IsNothing(e.Node.Tag) AndAlso Not String.IsNullOrEmpty(e.Node.Tag.ToString) Then + Me.pbCurrent.Visible = True + Me.lblCurrentImage.Visible = True + If e.Node.Tag.ToString = "showp" Then + Me.SelSeason = -999 + Me.SelIsPoster = True + If Not IsNothing(Scraper.TVDBImages.ShowPoster) AndAlso Not IsNothing(Scraper.TVDBImages.ShowPoster.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowPoster.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.ShowPoster.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + iCount = ShowPosterList.Count + For i = 0 To iCount - 1 + If Not IsNothing(ShowPosterList(i)) AndAlso Not IsNothing(ShowPosterList(i).Image) AndAlso Not IsNothing(ShowPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False, .ImageObj = ShowPosterList(i).Image}) + End If + Next + + For i = 0 To GenericPosterList.Count - 1 + If Not IsNothing(GenericPosterList(i)) AndAlso Not IsNothing(GenericPosterList(i).Image) AndAlso Not IsNothing(GenericPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False, .ImageObj = GenericPosterList(i).Image}) + End If + Next + + ElseIf e.Node.Tag.ToString = "showf" Then + + Me.SelSeason = -999 + Me.SelIsPoster = False + If Not IsNothing(Scraper.TVDBImages.ShowFanart) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + For i = 0 To FanartList.Count - 1 + If Not IsNothing(FanartList(i)) AndAlso Not IsNothing(FanartList(i).Image) AndAlso Not IsNothing(FanartList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True, .ImageObj = FanartList(i).Image}) + End If + Next + + ElseIf e.Node.Tag.ToString = "allp" Then + Me.SelSeason = 999 + Me.SelIsPoster = True + If Not IsNothing(Scraper.TVDBImages.AllSeasonPoster) AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image) AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.AllSeasonPoster.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + iCount = GenericPosterList.Count + For i = 0 To iCount - 1 + If Not IsNothing(GenericPosterList(i)) AndAlso Not IsNothing(GenericPosterList(i).Image) AndAlso Not IsNothing(GenericPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False, .ImageObj = GenericPosterList(i).Image}) + End If + Next + + For i = 0 To ShowPosterList.Count - 1 + If Not IsNothing(ShowPosterList(i)) AndAlso Not IsNothing(ShowPosterList(i).Image) AndAlso Not IsNothing(ShowPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False, .ImageObj = ShowPosterList(i).Image}) + End If + Next + Else + Dim tMatch As Match = Regex.Match(e.Node.Tag.ToString, "(?<type>f|p)(?<num>[0-9]+)") + If tMatch.Success Then + If tMatch.Groups("type").Value = "f" Then + Me.SelSeason = Convert.ToInt32(tMatch.Groups("num").Value) + Me.SelIsPoster = False + Dim tFanart As Scraper.TVDBSeasonImage = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(f) f.Season = Convert.ToInt32(tMatch.Groups("num").Value)) + If Not IsNothing(tFanart) AndAlso Not IsNothing(tFanart.Fanart) AndAlso Not IsNothing(tFanart.Fanart.Image) AndAlso Not IsNothing(tFanart.Fanart.Image.Image) Then + Me.pbCurrent.Image = tFanart.Fanart.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + For i = 0 To FanartList.Count - 1 + If Not IsNothing(FanartList(i)) AndAlso Not IsNothing(FanartList(i).Image) AndAlso Not IsNothing(FanartList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True, .ImageObj = FanartList(i).Image}) + End If + Next + ElseIf tMatch.Groups("type").Value = "p" Then + Me.SelSeason = Convert.ToInt32(tMatch.Groups("num").Value) + Me.SelIsPoster = True + Dim tPoster As Scraper.TVDBSeasonImage = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(f) f.Season = Me.SelSeason) + If Not IsNothing(tPoster) AndAlso Not IsNothing(tPoster.Poster) AndAlso Not IsNothing(tPoster.Poster.Image) Then + Me.pbCurrent.Image = tPoster.Poster.Image + Else + Me.pbCurrent.Image = Nothing + End If + iCount = 0 + For Each SImage As Scraper.TVDBSeasonPoster In SeasonList.Where(Function(s) s.Season = Convert.ToInt32(tMatch.Groups("num").Value)) + If Not IsNothing(SImage.Image) AndAlso Not IsNothing(SImage.Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", SImage.Image.Image.Width, SImage.Image.Image.Height), iCount, New ImageTag With {.URL = SImage.URL, .Path = SImage.LocalFile, .isFanart = False, .ImageObj = SImage.Image}) + End If + iCount += 1 + Next + End If + End If + End If + Else + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Visible = False + Me.lblCurrentImage.Visible = False + End If + + Me.CheckCurrentImage() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure ImageTag + +#Region "Fields" + + Dim isFanart As Boolean + Dim Path As String + Dim URL As String + Dim ImageObj As Images + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/frmInfoSettingsHolder.Designer.vb b/Addons/scraper.TVDB.Data/frmInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..c3675d6 --- /dev/null +++ b/Addons/scraper.TVDB.Data/frmInfoSettingsHolder.Designer.vb @@ -0,0 +1,632 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtIMDBURL = New System.Windows.Forms.TextBox() + Me.GroupBox15 = New System.Windows.Forms.GroupBox() + Me.chkOFDBGenre = New System.Windows.Forms.CheckBox() + Me.chkOFDBPlot = New System.Windows.Forms.CheckBox() + Me.chkOFDBOutline = New System.Windows.Forms.CheckBox() + Me.chkOFDBTitle = New System.Windows.Forms.CheckBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCertification = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkTop250 = New System.Windows.Forms.CheckBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkMusicBy = New System.Windows.Forms.CheckBox() + Me.chkProducers = New System.Windows.Forms.CheckBox() + Me.chkFullCast = New System.Windows.Forms.CheckBox() + Me.chkWriters = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkFullCrew = New System.Windows.Forms.CheckBox() + Me.chkPlot = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkDirector = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.GroupBox30.SuspendLayout() + Me.GroupBox15.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtIMDBURL) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(213, 69) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "IMDB" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(73, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "IMDB Mirror:" + ' + 'txtIMDBURL + ' + Me.txtIMDBURL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtIMDBURL.Location = New System.Drawing.Point(8, 32) + Me.txtIMDBURL.Name = "txtIMDBURL" + Me.txtIMDBURL.Size = New System.Drawing.Size(192, 22) + Me.txtIMDBURL.TabIndex = 1 + ' + 'GroupBox15 + ' + Me.GroupBox15.Controls.Add(Me.chkOFDBGenre) + Me.GroupBox15.Controls.Add(Me.chkOFDBPlot) + Me.GroupBox15.Controls.Add(Me.chkOFDBOutline) + Me.GroupBox15.Controls.Add(Me.chkOFDBTitle) + Me.GroupBox15.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox15.Location = New System.Drawing.Point(8, 114) + Me.GroupBox15.Name = "GroupBox15" + Me.GroupBox15.Size = New System.Drawing.Size(213, 87) + Me.GroupBox15.TabIndex = 2 + Me.GroupBox15.TabStop = False + Me.GroupBox15.Text = "OFDB (German)" + ' + 'chkOFDBGenre + ' + Me.chkOFDBGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBGenre.Location = New System.Drawing.Point(6, 65) + Me.chkOFDBGenre.Name = "chkOFDBGenre" + Me.chkOFDBGenre.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBGenre.TabIndex = 3 + Me.chkOFDBGenre.Text = "Use OFDB Genre" + Me.chkOFDBGenre.UseVisualStyleBackColor = True + ' + 'chkOFDBPlot + ' + Me.chkOFDBPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBPlot.Location = New System.Drawing.Point(6, 49) + Me.chkOFDBPlot.Name = "chkOFDBPlot" + Me.chkOFDBPlot.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBPlot.TabIndex = 2 + Me.chkOFDBPlot.Text = "Use OFDB Plot" + Me.chkOFDBPlot.UseVisualStyleBackColor = True + ' + 'chkOFDBOutline + ' + Me.chkOFDBOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBOutline.Location = New System.Drawing.Point(6, 33) + Me.chkOFDBOutline.Name = "chkOFDBOutline" + Me.chkOFDBOutline.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBOutline.TabIndex = 1 + Me.chkOFDBOutline.Text = "Use OFDB Outline" + Me.chkOFDBOutline.UseVisualStyleBackColor = True + ' + 'chkOFDBTitle + ' + Me.chkOFDBTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBTitle.Location = New System.Drawing.Point(6, 17) + Me.chkOFDBTitle.Name = "chkOFDBTitle" + Me.chkOFDBTitle.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBTitle.TabIndex = 0 + Me.chkOFDBTitle.Text = "Use OFDB Title" + Me.chkOFDBTitle.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.GroupBox15) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCertification) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkTop250) + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkMusicBy) + Me.gbOptions.Controls.Add(Me.chkProducers) + Me.gbOptions.Controls.Add(Me.chkFullCast) + Me.gbOptions.Controls.Add(Me.chkWriters) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkFullCrew) + Me.gbOptions.Controls.Add(Me.chkPlot) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkDirector) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(227, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(387, 161) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCertification + ' + Me.chkCertification.AutoSize = True + Me.chkCertification.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCertification.Location = New System.Drawing.Point(6, 70) + Me.chkCertification.Name = "chkCertification" + Me.chkCertification.Size = New System.Drawing.Size(89, 17) + Me.chkCertification.TabIndex = 3 + Me.chkCertification.Text = "Certification" + Me.chkCertification.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(237, 53) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkTop250 + ' + Me.chkTop250.AutoSize = True + Me.chkTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTop250.Location = New System.Drawing.Point(237, 19) + Me.chkTop250.Name = "chkTop250" + Me.chkTop250.Size = New System.Drawing.Size(66, 17) + Me.chkTop250.TabIndex = 16 + Me.chkTop250.Text = "Top 250" + Me.chkTop250.UseVisualStyleBackColor = True + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Enabled = False + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(246, 104) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(85, 17) + Me.chkCrew.TabIndex = 21 + Me.chkCrew.Text = "Other Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkMusicBy + ' + Me.chkMusicBy.AutoSize = True + Me.chkMusicBy.Enabled = False + Me.chkMusicBy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMusicBy.Location = New System.Drawing.Point(246, 121) + Me.chkMusicBy.Name = "chkMusicBy" + Me.chkMusicBy.Size = New System.Drawing.Size(71, 17) + Me.chkMusicBy.TabIndex = 22 + Me.chkMusicBy.Text = "Music By" + Me.chkMusicBy.UseVisualStyleBackColor = True + ' + 'chkProducers + ' + Me.chkProducers.AutoSize = True + Me.chkProducers.Enabled = False + Me.chkProducers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkProducers.Location = New System.Drawing.Point(246, 138) + Me.chkProducers.Name = "chkProducers" + Me.chkProducers.Size = New System.Drawing.Size(77, 17) + Me.chkProducers.TabIndex = 23 + Me.chkProducers.Text = "Producers" + Me.chkProducers.UseVisualStyleBackColor = True + ' + 'chkFullCast + ' + Me.chkFullCast.AutoSize = True + Me.chkFullCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCast.Location = New System.Drawing.Point(237, 70) + Me.chkFullCast.Name = "chkFullCast" + Me.chkFullCast.Size = New System.Drawing.Size(107, 17) + Me.chkFullCast.TabIndex = 19 + Me.chkFullCast.Text = "Scrape Full Cast" + Me.chkFullCast.UseVisualStyleBackColor = True + ' + 'chkWriters + ' + Me.chkWriters.AutoSize = True + Me.chkWriters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkWriters.Location = New System.Drawing.Point(131, 121) + Me.chkWriters.Name = "chkWriters" + Me.chkWriters.Size = New System.Drawing.Size(63, 17) + Me.chkWriters.TabIndex = 14 + Me.chkWriters.Text = "Writers" + Me.chkWriters.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 104) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkFullCrew + ' + Me.chkFullCrew.AutoSize = True + Me.chkFullCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCrew.Location = New System.Drawing.Point(237, 87) + Me.chkFullCrew.Name = "chkFullCrew" + Me.chkFullCrew.Size = New System.Drawing.Size(111, 17) + Me.chkFullCrew.TabIndex = 20 + Me.chkFullCrew.Text = "Scrape Full Crew" + Me.chkFullCrew.UseVisualStyleBackColor = True + ' + 'chkPlot + ' + Me.chkPlot.AutoSize = True + Me.chkPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkPlot.Location = New System.Drawing.Point(131, 70) + Me.chkPlot.Name = "chkPlot" + Me.chkPlot.Size = New System.Drawing.Size(46, 17) + Me.chkPlot.TabIndex = 11 + Me.chkPlot.Text = "Plot" + Me.chkPlot.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 138) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkDirector + ' + Me.chkDirector.AutoSize = True + Me.chkDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDirector.Location = New System.Drawing.Point(131, 104) + Me.chkDirector.Name = "chkDirector" + Me.chkDirector.Size = New System.Drawing.Size(67, 17) + Me.chkDirector.TabIndex = 13 + Me.chkDirector.Text = "Director" + Me.chkDirector.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 87) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 138) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(237, 36) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 121) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 87) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'frmInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.GroupBox15.ResumeLayout(False) + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox + Friend WithEvents Label18 As System.Windows.Forms.Label + Friend WithEvents txtIMDBURL As System.Windows.Forms.TextBox + Friend WithEvents GroupBox15 As System.Windows.Forms.GroupBox + Friend WithEvents chkOFDBGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBPlot As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBTitle As System.Windows.Forms.CheckBox + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents gbOptions As System.Windows.Forms.GroupBox + Friend WithEvents chkCertification As System.Windows.Forms.CheckBox + Friend WithEvents chkCountry As System.Windows.Forms.CheckBox + Friend WithEvents chkTop250 As System.Windows.Forms.CheckBox + Friend WithEvents chkCrew As System.Windows.Forms.CheckBox + Friend WithEvents chkMusicBy As System.Windows.Forms.CheckBox + Friend WithEvents chkFullCrew As System.Windows.Forms.CheckBox + Friend WithEvents chkFullCast As System.Windows.Forms.CheckBox + Friend WithEvents chkProducers As System.Windows.Forms.CheckBox + Friend WithEvents chkWriters As System.Windows.Forms.CheckBox + Friend WithEvents chkStudio As System.Windows.Forms.CheckBox + Friend WithEvents chkRuntime As System.Windows.Forms.CheckBox + Friend WithEvents chkPlot As System.Windows.Forms.CheckBox + Friend WithEvents chkOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkDirector As System.Windows.Forms.CheckBox + Friend WithEvents chkTagline As System.Windows.Forms.CheckBox + Friend WithEvents chkCast As System.Windows.Forms.CheckBox + Friend WithEvents chkVotes As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailer As System.Windows.Forms.CheckBox + Friend WithEvents chkRating As System.Windows.Forms.CheckBox + Friend WithEvents chkRelease As System.Windows.Forms.CheckBox + Friend WithEvents chkMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkYear As System.Windows.Forms.CheckBox + Friend WithEvents chkTitle As System.Windows.Forms.CheckBox + +End Class diff --git a/Addons/scraper.TVDB.Data/frmInfoSettingsHolder.resx b/Addons/scraper.TVDB.Data/frmInfoSettingsHolder.resx new file mode 100644 index 0000000..1a3b6b2 --- /dev/null +++ b/Addons/scraper.TVDB.Data/frmInfoSettingsHolder.resx @@ -0,0 +1,193 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/frmInfoSettingsHolder.vb b/Addons/scraper.TVDB.Data/frmInfoSettingsHolder.vb new file mode 100644 index 0000000..21a3d0b --- /dev/null +++ b/Addons/scraper.TVDB.Data/frmInfoSettingsHolder.vb @@ -0,0 +1,237 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCertification_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCertification.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCrew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkDirector_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDirector.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFullCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFullCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFullCrew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFullCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + + Me.chkProducers.Enabled = Me.chkFullCrew.Checked + Me.chkMusicBy.Enabled = Me.chkFullCrew.Checked + Me.chkCrew.Enabled = Me.chkFullCrew.Checked + + If Not Me.chkFullCrew.Checked Then + Me.chkProducers.Checked = False + Me.chkMusicBy.Checked = False + Me.chkCrew.Checked = False + End If + End Sub + + Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMusicBy_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMusicBy.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBPlot.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPlot.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkProducers_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkProducers.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTop250_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTop250.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkWriters_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkWriters.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.chkOFDBGenre.Text = Master.eLang.GetString(1, "Use OFDB Genre") + Me.chkOFDBPlot.Text = Master.eLang.GetString(2, "Use OFDB Plot") + Me.chkOFDBOutline.Text = Master.eLang.GetString(3, "Use OFDB Outline") + Me.chkOFDBTitle.Text = Master.eLang.GetString(4, "Use OFDB Title") + Me.Label18.Text = Master.eLang.GetString(5, "IMDB Mirror:") + Me.gbOptions.Text = Master.eLang.GetString(6, "Scraper Fields - Scraper specific") + Me.chkCrew.Text = Master.eLang.GetString(391, "Other Crew", True) + Me.chkMusicBy.Text = Master.eLang.GetString(392, "Music By", True) + Me.chkProducers.Text = Master.eLang.GetString(393, "Producers", True) + Me.chkWriters.Text = Master.eLang.GetString(394, "Writers", True) + Me.chkStudio.Text = Master.eLang.GetString(395, "Studio", True) + Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime", True) + Me.chkPlot.Text = Master.eLang.GetString(65, "Plot", True) + Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline", True) + Me.chkGenre.Text = Master.eLang.GetString(20, "Genres", True) + Me.chkDirector.Text = Master.eLang.GetString(62, "Director", True) + Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline", True) + Me.chkCast.Text = Master.eLang.GetString(398, "Cast", True) + Me.chkVotes.Text = Master.eLang.GetString(399, "Votes", True) + Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer", True) + Me.chkRating.Text = Master.eLang.GetString(400, "Rating", True) + Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date", True) + Me.chkMPAA.Text = Master.eLang.GetString(401, "MPAA", True) + Me.chkYear.Text = Master.eLang.GetString(278, "Year", True) + Me.chkTitle.Text = Master.eLang.GetString(21, "Title", True) + Me.chkCertification.Text = Master.eLang.GetString(722, "Certification", True) + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + Me.chkCountry.Text = Master.eLang.GetString(301, "Country", True) + Me.chkFullCast.Text = Master.eLang.GetString(512, "Scrape Full Cast", True) + Me.chkFullCrew.Text = Master.eLang.GetString(513, "Scrape Full Crew", True) + Me.chkTop250.Text = Master.eLang.GetString(868, "Top250", True) + Me.GroupBox30.Text = Master.eLang.GetString(106, "IMDB") + Me.GroupBox15.Text = Master.eLang.GetString(107, "OFDB (German)") + End Sub + + Private Sub txtIMDBURL_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtIMDBURL.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/frmMediaSettingsHolder.Designer.vb b/Addons/scraper.TVDB.Data/frmMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..2c09e78 --- /dev/null +++ b/Addons/scraper.TVDB.Data/frmMediaSettingsHolder.Designer.vb @@ -0,0 +1,524 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMediaSettingsHolder)) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.cbActorThumbsSize = New System.Windows.Forms.ComboBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.cbManualETSize = New System.Windows.Forms.ComboBox() + Me.grpSaveFanart = New System.Windows.Forms.GroupBox() + Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() + Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkUseMPDB = New System.Windows.Forms.CheckBox() + Me.chkUseTMDB = New System.Windows.Forms.CheckBox() + Me.chkUseIMPA = New System.Windows.Forms.CheckBox() + Me.chkScrapePoster = New System.Windows.Forms.CheckBox() + Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.txtTimeout = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() + Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() + Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.grpSaveFanart.SuspendLayout() + Me.GroupBox9.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.GroupBox3) + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Panel2) + Me.pnlSettings.Location = New System.Drawing.Point(12, 4) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 94 + Me.PictureBox1.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.GroupBox6) + Me.GroupBox3.Controls.Add(Me.GroupBox4) + Me.GroupBox3.Controls.Add(Me.grpSaveFanart) + Me.GroupBox3.Controls.Add(Me.GroupBox9) + Me.GroupBox3.Controls.Add(Me.chkScrapePoster) + Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(15, 31) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(587, 177) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Images" + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.cbActorThumbsSize) + Me.GroupBox6.Location = New System.Drawing.Point(374, 98) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(160, 73) + Me.GroupBox6.TabIndex = 5 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Actor Thumbs Size:" + ' + 'cbActorThumbsSize + ' + Me.cbActorThumbsSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbActorThumbsSize.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbActorThumbsSize.FormattingEnabled = True + Me.cbActorThumbsSize.Items.AddRange(New Object() {"SY275_SX400", "SY720_SX1080", "SY1080_SX1920"}) + Me.cbActorThumbsSize.Location = New System.Drawing.Point(21, 35) + Me.cbActorThumbsSize.Name = "cbActorThumbsSize" + Me.cbActorThumbsSize.Size = New System.Drawing.Size(121, 21) + Me.cbActorThumbsSize.TabIndex = 0 + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.cbManualETSize) + Me.GroupBox4.Location = New System.Drawing.Point(374, 11) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(160, 80) + Me.GroupBox4.TabIndex = 4 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "TMDB Extrathumbs Size:" + ' + 'cbManualETSize + ' + Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbManualETSize.Enabled = False + Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbManualETSize.FormattingEnabled = True + Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) + Me.cbManualETSize.Location = New System.Drawing.Point(21, 35) + Me.cbManualETSize.Name = "cbManualETSize" + Me.cbManualETSize.Size = New System.Drawing.Size(121, 21) + Me.cbManualETSize.TabIndex = 0 + ' + 'grpSaveFanart + ' + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) + Me.grpSaveFanart.Enabled = False + Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) + Me.grpSaveFanart.Name = "grpSaveFanart" + Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) + Me.grpSaveFanart.TabIndex = 2 + Me.grpSaveFanart.TabStop = False + Me.grpSaveFanart.Text = "Save Fanart In:" + ' + 'optFanartFolderExtraFanart + ' + Me.optFanartFolderExtraFanart.AutoSize = True + Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) + Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" + Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) + Me.optFanartFolderExtraFanart.TabIndex = 1 + Me.optFanartFolderExtraFanart.TabStop = True + Me.optFanartFolderExtraFanart.Text = "\extrafanart" + Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True + ' + 'optFanartFolderExtraThumbs + ' + Me.optFanartFolderExtraThumbs.AutoSize = True + Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) + Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" + Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) + Me.optFanartFolderExtraThumbs.TabIndex = 0 + Me.optFanartFolderExtraThumbs.TabStop = True + Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" + Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkUseMPDB) + Me.GroupBox9.Controls.Add(Me.chkUseTMDB) + Me.GroupBox9.Controls.Add(Me.chkUseIMPA) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(165, 11) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(160, 80) + Me.GroupBox9.TabIndex = 3 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Get Images From:" + ' + 'chkUseMPDB + ' + Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) + Me.chkUseMPDB.Name = "chkUseMPDB" + Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) + Me.chkUseMPDB.TabIndex = 2 + Me.chkUseMPDB.Text = "MoviePosterDB.com" + Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.UseVisualStyleBackColor = True + ' + 'chkUseTMDB + ' + Me.chkUseTMDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseTMDB.Location = New System.Drawing.Point(6, 18) + Me.chkUseTMDB.Name = "chkUseTMDB" + Me.chkUseTMDB.Size = New System.Drawing.Size(149, 19) + Me.chkUseTMDB.TabIndex = 0 + Me.chkUseTMDB.Text = "themoviedb.org" + Me.chkUseTMDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseTMDB.UseVisualStyleBackColor = True + ' + 'chkUseIMPA + ' + Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) + Me.chkUseIMPA.Name = "chkUseIMPA" + Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) + Me.chkUseIMPA.TabIndex = 1 + Me.chkUseIMPA.Text = "IMPAwards.com" + Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.UseVisualStyleBackColor = True + ' + 'chkScrapePoster + ' + Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) + Me.chkScrapePoster.Name = "chkScrapePoster" + Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) + Me.chkScrapePoster.TabIndex = 0 + Me.chkScrapePoster.Text = "Get Posters" + Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.UseVisualStyleBackColor = True + ' + 'chkScrapeFanart + ' + Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) + Me.chkScrapeFanart.Name = "chkScrapeFanart" + Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) + Me.chkScrapeFanart.TabIndex = 1 + Me.chkScrapeFanart.Text = "Get Fanart" + Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.GroupBox5) + Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox1.Controls.Add(Me.Label23) + Me.GroupBox1.Controls.Add(Me.txtTimeout) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(15, 214) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(587, 112) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Trailers" + Me.GroupBox1.UseCompatibleTextRendering = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) + Me.GroupBox5.Controls.Add(Me.Label2) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) + Me.GroupBox5.Location = New System.Drawing.Point(374, 12) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(161, 94) + Me.GroupBox5.TabIndex = 4 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Youtube/TMDB Trailer:" + ' + 'cbTrailerTMDBPref + ' + Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerTMDBPref.Enabled = False + Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTrailerTMDBPref.FormattingEnabled = True + Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) + Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" + Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) + Me.cbTrailerTMDBPref.TabIndex = 1 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label2.Location = New System.Drawing.Point(26, 26) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(111, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Preferred Language:" + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label23.Location = New System.Drawing.Point(21, 43) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(51, 13) + Me.Label23.TabIndex = 1 + Me.Label23.Text = "Timeout:" + ' + 'txtTimeout + ' + Me.txtTimeout.Enabled = False + Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTimeout.Location = New System.Drawing.Point(82, 39) + Me.txtTimeout.Name = "txtTimeout" + Me.txtTimeout.Size = New System.Drawing.Size(50, 22) + Me.txtTimeout.TabIndex = 2 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) + Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(165, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(161, 94) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Supported Sites:" + ' + 'chkTrailerTMDBXBMC + ' + Me.chkTrailerTMDBXBMC.AutoSize = True + Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) + Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" + Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) + Me.chkTrailerTMDBXBMC.TabIndex = 1 + Me.chkTrailerTMDBXBMC.Text = "XBMC Format" + Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True + ' + 'chkTrailerIMDB + ' + Me.chkTrailerIMDB.AutoSize = True + Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) + Me.chkTrailerIMDB.Name = "chkTrailerIMDB" + Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) + Me.chkTrailerIMDB.TabIndex = 2 + Me.chkTrailerIMDB.Text = "IMDB" + Me.chkTrailerIMDB.UseVisualStyleBackColor = True + ' + 'chkTrailerTMDB + ' + Me.chkTrailerTMDB.AutoSize = True + Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) + Me.chkTrailerTMDB.Name = "chkTrailerTMDB" + Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) + Me.chkTrailerTMDB.TabIndex = 0 + Me.chkTrailerTMDB.Text = "Youtube/TMDB" + Me.chkTrailerTMDB.UseVisualStyleBackColor = True + ' + 'Panel2 + ' + Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Controls.Add(Me.btnDown) + Me.Panel2.Controls.Add(Me.btnUp) + Me.Panel2.Controls.Add(Me.cbEnabled) + Me.Panel2.Location = New System.Drawing.Point(0, 0) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(1125, 25) + Me.Panel2.TabIndex = 0 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(500, 7) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 12) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'frmMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.grpSaveFanart.ResumeLayout(False) + Me.grpSaveFanart.PerformLayout() + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents chkScrapeFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkScrapePoster As System.Windows.Forms.CheckBox + Friend WithEvents chkDownloadTrailer As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox9 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseMPDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMPA As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Panel2 As System.Windows.Forms.Panel + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Label23 As System.Windows.Forms.Label + Friend WithEvents txtTimeout As System.Windows.Forms.TextBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents grpSaveFanart As System.Windows.Forms.GroupBox + Friend WithEvents optFanartFolderExtraFanart As System.Windows.Forms.RadioButton + Friend WithEvents optFanartFolderExtraThumbs As System.Windows.Forms.RadioButton + Friend WithEvents chkTrailerIMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDBXBMC As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents cbManualETSize As System.Windows.Forms.ComboBox + Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox + Friend WithEvents cbTrailerTMDBPref As System.Windows.Forms.ComboBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents cbActorThumbsSize As System.Windows.Forms.ComboBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/frmMediaSettingsHolder.resx b/Addons/scraper.TVDB.Data/frmMediaSettingsHolder.resx new file mode 100644 index 0000000..023cf14 --- /dev/null +++ b/Addons/scraper.TVDB.Data/frmMediaSettingsHolder.resx @@ -0,0 +1,237 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + 6bKz54D4Hdc/dStsxIkAAAAAAElFTkSuQmCC +</value> + </data> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/frmMediaSettingsHolder.vb b/Addons/scraper.TVDB.Data/frmMediaSettingsHolder.vb new file mode 100644 index 0000000..401240a --- /dev/null +++ b/Addons/scraper.TVDB.Data/frmMediaSettingsHolder.vb @@ -0,0 +1,172 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order + 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order - 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Sub CheckTrailer() + Me.txtTimeout.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerIMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDBXBMC.Enabled = Me.chkDownloadTrailer.Checked + If Not Me.chkDownloadTrailer.Checked Then + Me.txtTimeout.Text = "2" + Me.chkTrailerTMDB.Checked = False + Me.chkTrailerIMDB.Checked = False + Me.chkTrailerTMDBXBMC.Checked = False + End If + End Sub + + Private Sub chkDownloadTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDownloadTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + CheckTrailer() + End Sub + + Private Sub chkTrailerTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDB.CheckedChanged + chkTrailerTMDBXBMC.Enabled = chkTrailerTMDB.Checked + cbTrailerTMDBPref.Enabled = chkTrailerTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerIMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerIMDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerTMDBXBMC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDBXBMC.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkScrapeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapeFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + grpSaveFanart.Enabled = chkScrapeFanart.Checked + End Sub + + Private Sub chkScrapePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapePoster.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMPA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseIMPA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseMPDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseMPDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseTMDB.CheckedChanged + cbManualETSize.Enabled = chkUseTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Sub SetUp() + Me.txtTimeout.Text = Master.eSettings.TrailerTimeout.ToString + Me.Label23.Text = Master.eLang.GetString(7, "Timeout:") + Me.GroupBox2.Text = Master.eLang.GetString(8, "Supported Sites:") + Me.GroupBox9.Text = Master.eLang.GetString(9, "Get Images From:") + Me.grpSaveFanart.Text = Master.eLang.GetString(8001, "Save Fanart In:") + Me.chkDownloadTrailer.Text = Master.eLang.GetString(529, "Enable Trailer Support", True) + Me.Label3.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkScrapePoster.Text = Master.eLang.GetString(101, "Get Posters") + Me.chkScrapeFanart.Text = Master.eLang.GetString(102, "Get Fanart") + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + Me.GroupBox3.Text = Master.eLang.GetString(497, "Images", True) + Me.GroupBox4.Text = Master.eLang.GetString(108, "TMDB Extrathumbs Size:") + Me.GroupBox1.Text = Master.eLang.GetString(109, "Trailers") + Me.GroupBox5.Text = Master.eLang.GetString(110, "Youtube/TMDB Trailer:") + Me.chkTrailerTMDBXBMC.Text = Master.eLang.GetString(111, "XBMC Format") + Me.Label2.Text = Master.eLang.GetString(112, "Preferred language") + Me.grpSaveFanart.Text = Master.eLang.GetString(113, "Save Fanart In:") + End Sub + + Private Sub txtTimeout_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTimeout.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraThumbs_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraThumbs.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbManualETSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbManualETSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbActorThumbsSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbActorThumbsSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTrailerTMDBPref_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbTrailerTMDBPref.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/frmTVInfoSettingsHolder.Designer.vb b/Addons/scraper.TVDB.Data/frmTVInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..4a8cc4e --- /dev/null +++ b/Addons/scraper.TVDB.Data/frmTVInfoSettingsHolder.Designer.vb @@ -0,0 +1,169 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTVInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTVInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'frmTVInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTVInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.TVDB.Data/frmTVInfoSettingsHolder.resx b/Addons/scraper.TVDB.Data/frmTVInfoSettingsHolder.resx new file mode 100644 index 0000000..0950d0f --- /dev/null +++ b/Addons/scraper.TVDB.Data/frmTVInfoSettingsHolder.resx @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/frmTVInfoSettingsHolder.vb b/Addons/scraper.TVDB.Data/frmTVInfoSettingsHolder.vb new file mode 100644 index 0000000..98761ce --- /dev/null +++ b/Addons/scraper.TVDB.Data/frmTVInfoSettingsHolder.vb @@ -0,0 +1,80 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTVInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + orderChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + 'Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/frmTVMediaSettingsHolder.Designer.vb b/Addons/scraper.TVDB.Data/frmTVMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..f5cb735 --- /dev/null +++ b/Addons/scraper.TVDB.Data/frmTVMediaSettingsHolder.Designer.vb @@ -0,0 +1,170 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTVMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTVMediaSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.InitialImage = CType(resources.GetObject("PictureBox1.InitialImage"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'frmTVMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTVMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.TVDB.Data/frmTVMediaSettingsHolder.resx b/Addons/scraper.TVDB.Data/frmTVMediaSettingsHolder.resx new file mode 100644 index 0000000..d47391f --- /dev/null +++ b/Addons/scraper.TVDB.Data/frmTVMediaSettingsHolder.resx @@ -0,0 +1,197 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.InitialImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEAAA + CxABrSO9dQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/frmTVMediaSettingsHolder.vb b/Addons/scraper.TVDB.Data/frmTVMediaSettingsHolder.vb new file mode 100644 index 0000000..06928ef --- /dev/null +++ b/Addons/scraper.TVDB.Data/frmTVMediaSettingsHolder.vb @@ -0,0 +1,80 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTVMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + orderChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + 'Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/packages.config b/Addons/scraper.TVDB.Data/packages.config new file mode 100644 index 0000000..053d0bc6 --- /dev/null +++ b/Addons/scraper.TVDB.Data/packages.config @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="SharpZipLib" version="0.86.0" /> + <package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net35" /> +</packages> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/scraper.TVDB.Data.vbproj b/Addons/scraper.TVDB.Data/scraper.TVDB.Data.vbproj new file mode 100644 index 0000000..4798162 --- /dev/null +++ b/Addons/scraper.TVDB.Data/scraper.TVDB.Data.vbproj @@ -0,0 +1,342 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{F642E719-61E2-4847-AB55-DB47C0F38649}</ProjectGuid> + <OutputType>Library</OutputType> + <RootNamespace>EmberScraperModule</RootNamespace> + <AssemblyName>scraper.TVDB.Data</AssemblyName> + <FileAlignment>512</FileAlignment> + <MyType>Windows</MyType> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <OptionExplicit>On</OptionExplicit> + <OptionCompare>Binary</OptionCompare> + <OptionStrict>On</OptionStrict> + <OptionInfer>On</OptionInfer> + <FileUpgradeFlags> + </FileUpgradeFlags> + <OldToolsVersion>3.5</OldToolsVersion> + <UpgradeBackupLocation /> + <PublishUrl>publish\</PublishUrl> + <Install>true</Install> + <InstallFrom>Disk</InstallFrom> + <UpdateEnabled>false</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>false</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> + <RestorePackages>true</RestorePackages> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> + <DebugSymbols>true</DebugSymbols> + <DefineDebug>true</DefineDebug> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Dev\Modules\</OutputPath> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Deploy\Modules\</OutputPath> + <Optimize>true</Optimize> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <ItemGroup> + <Reference Include="ICSharpCode.SharpZipLib"> + <HintPath>..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Data.SQLite"> + <HintPath>..\..\packages\System.Data.SQLite.1.0.84.0\lib\net20\System.Data.SQLite.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="System.Data.SQLite.Linq"> + <HintPath>..\..\packages\System.Data.SQLite.1.0.84.0\lib\net20\System.Data.SQLite.Linq.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Import Include="Microsoft.VisualBasic" /> + <Import Include="System" /> + <Import Include="System.Collections" /> + <Import Include="System.Collections.Generic" /> + <Import Include="System.Diagnostics" /> + <Import Include="System.Drawing" /> + <Import Include="System.Linq" /> + <Import Include="System.Web" /> + <Import Include="System.Windows.Forms" /> + <Import Include="System.Xml.Linq" /> + </ItemGroup> + <ItemGroup> + <Compile Include="frmTVMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmTVMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTVMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmTVInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmTVInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTVInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperTVNativeModule.vb" /> + <Compile Include="Scraper\clsScrapeTrailers.vb" /> + <Compile Include="Scraper\clsScrapeImages.vb" /> + <Compile Include="Scraper\clsScrapeIMDB.vb" /> + <Compile Include="Scraper\clsScrapeIMPA.vb" /> + <Compile Include="Scraper\clsScrapeMPDB.vb" /> + <Compile Include="Scraper\clsScrapeOFDB.vb" /> + <Compile Include="Scraper\clsScrapeTMDB.vb" /> + <Compile Include="Scraper\clsScrapeYouTube.vb" /> + <Compile Include="Scraper\dlgIMDBSearchResults.Designer.vb"> + <DependentUpon>dlgIMDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgIMDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgImgSelect.Designer.vb"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgImgSelect.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailer.Designer.vb"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailer.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.Designer.vb"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="My Project\AssemblyInfo.vb" /> + <Compile Include="My Project\Application.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Application.myapp</DependentUpon> + </Compile> + <Compile Include="My Project\Resources.Designer.vb"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> + <Compile Include="My Project\Settings.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Settings.settings</DependentUpon> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + </Compile> + <Compile Include="frmInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperMovieNativeModule.vb" /> + <Compile Include="TVScraper\clsScrapeTVDB.vb" /> + <Compile Include="TVScraper\dlgTVChangeEp.Designer.vb"> + <DependentUpon>dlgTVChangeEp.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVChangeEp.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVDBSearchResults.Designer.vb"> + <DependentUpon>dlgTVDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVEpisodePoster.Designer.vb"> + <DependentUpon>dlgTVEpisodePoster.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVEpisodePoster.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVImageSelect.Designer.vb"> + <DependentUpon>dlgTVImageSelect.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVImageSelect.vb"> + <SubType>Form</SubType> + </Compile> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="frmTVMediaSettingsHolder.resx"> + <DependentUpon>frmTVMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTVInfoSettingsHolder.resx"> + <DependentUpon>frmTVInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgIMDBSearchResults.resx"> + <DependentUpon>dlgIMDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgImgSelect.resx"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailer.resx"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailerFormat.resx"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmMediaSettingsHolder.resx"> + <DependentUpon>frmMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmInfoSettingsHolder.resx"> + <DependentUpon>frmInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="My Project\Resources.resx"> + <Generator>VbMyResourcesResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.vb</LastGenOutput> + <CustomToolNamespace>My.Resources</CustomToolNamespace> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVChangeEp.resx"> + <DependentUpon>dlgTVChangeEp.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVDBSearchResults.resx"> + <DependentUpon>dlgTVDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVEpisodePoster.resx"> + <DependentUpon>dlgTVEpisodePoster.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVImageSelect.resx"> + <DependentUpon>dlgTVImageSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <None Include="My Project\Application.myapp"> + <Generator>MyApplicationCodeGenerator</Generator> + <LastGenOutput>Application.Designer.vb</LastGenOutput> + </None> + <None Include="My Project\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <CustomToolNamespace>My</CustomToolNamespace> + <LastGenOutput>Settings.Designer.vb</LastGenOutput> + </None> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\EmberAPI\EmberAPI.vbproj"> + <Project>{208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}</Project> + <Name>EmberAPI</Name> + <Private>False</Private> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="Langs\scraper.EmberCore.Debug_%28db_DB%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.English_%28en_US%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.English_%28en_US%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.German_%28de_DE%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.German_%28de_DE%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.Norwegian_%28no_NO%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.Norwegian_%28no_NO%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="x64\SQLite.Interop.dll"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + <Content Include="x86\SQLite.Interop.dll"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <PropertyGroup> + <PreBuildEvent> + </PreBuildEvent> + </PropertyGroup> + <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> +</Project> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/scraperMovieNativeModule.vb b/Addons/scraper.TVDB.Data/scraperMovieNativeModule.vb new file mode 100644 index 0000000..6889071 --- /dev/null +++ b/Addons/scraper.TVDB.Data/scraperMovieNativeModule.vb @@ -0,0 +1,702 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO + +Imports EmberAPI + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberNativeScraperModule + Implements Interfaces.EmberMovieScraperModule + + +#Region "Fields" + + Public Shared ConfigOptions As New Structures.ScrapeOptions + Public Shared ConfigScrapeModifier As New Structures.ScrapeModifier + Public Shared _AssemblyName As String + + Private dFImgSelect As dlgImgSelect = Nothing + + ''' <summary> + ''' Scraping Here + ''' </summary> + ''' <remarks></remarks> + Private IMDB As New IMDB.Scraper + Private MySettings As New _MySettings + Private _Name As String = "Ember Native Movie Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmInfoSettingsHolder + Private _setupPost As frmMediaSettingsHolder + +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberMovieScraperModule.ModuleSettingsChanged + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsScraper + Get + Return True + End Get + End Property + + ReadOnly Property ModuleName() As String Implements Interfaces.EmberMovieScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberMovieScraperModule.ModuleVersion + Get + Return FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Property PostScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Property ScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean Implements Interfaces.EmberMovieScraperModule.QueryPostScraperCapabilities + Select Case cap + Case Enums.PostScraperCapabilities.Fanart + If MySettings.UseTMDB Then Return True + Case Enums.PostScraperCapabilities.Poster + If MySettings.UseIMPA OrElse MySettings.UseMPDB OrElse MySettings.UseTMDB Then Return True + Case Enums.PostScraperCapabilities.Trailer + If MySettings.DownloadTrailers Then Return True + End Select + Return False + End Function + + Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.DownloadTrailer + Using dTrailer As New dlgTrailer + dTrailer.IMDBURL = MySettings.IMDBURL + sURL = dTrailer.ShowDialog(DBMovie.Movie.IMDBID, DBMovie.Filename) + End Using + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef studio As List(Of String)) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.GetMovieStudio + Dim IMDB As New IMDB.Scraper + IMDB.UseOFDBTitle = MySettings.UseOFDBTitle + IMDB.UseOFDBOutline = MySettings.UseOFDBOutline + IMDB.UseOFDBPlot = MySettings.UseOFDBPlot + IMDB.UseOFDBGenre = MySettings.UseOFDBGenre + IMDB.IMDBURL = MySettings.IMDBURL + studio = IMDB.GetMovieStudios(DBMovie.Movie.IMDBID) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + + Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberMovieScraperModule.Init + _AssemblyName = sAssemblyName + LoadSettings() + End Sub + + Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupPostScraper + Dim Spanel As New Containers.SettingsPanel + _setupPost = New frmMediaSettingsHolder + LoadSettings() + _setupPost.cbEnabled.Checked = _PostScraperEnabled + _setupPost.chkTrailerIMDB.Checked = MySettings.UseIMDBTrailer + _setupPost.chkTrailerTMDB.Checked = MySettings.UseTMDBTrailer + _setupPost.cbTrailerTMDBPref.Text = MySettings.UseTMDBTrailerPref + _setupPost.chkTrailerTMDBXBMC.Checked = MySettings.UseTMDBTrailerXBMC + _setupPost.chkScrapePoster.Checked = ConfigScrapeModifier.Poster + _setupPost.chkScrapeFanart.Checked = ConfigScrapeModifier.Fanart + _setupPost.chkUseTMDB.Checked = MySettings.UseTMDB + _setupPost.chkUseIMPA.Checked = MySettings.UseIMPA + _setupPost.chkUseMPDB.Checked = MySettings.UseMPDB + _setupPost.cbManualETSize.Text = MySettings.ManualETSize + _setupPost.cbActorThumbsSize.Text = MySettings.ActorThumbsSize + _setupPost.txtTimeout.Text = MySettings.TrailerTimeout.ToString + _setupPost.chkDownloadTrailer.Checked = MySettings.DownloadTrailers + _setupPost.CheckTrailer() + _setupPost.orderChanged() + Spanel.Name = String.Concat(Me._Name, "PostScraper") + Spanel.Text = Master.eLang.GetString(104, "Ember Native Movie Scrapers") + Spanel.Prefix = "NativeMovieMedia_" + Spanel.Order = 110 + Spanel.Parent = "pnlMovieMedia" + Spanel.Type = Master.eLang.GetString(36, "Movies", True) + Spanel.ImageIndex = If(Me._PostScraperEnabled, 9, 10) + Spanel.Panel = Me._setupPost.pnlSettings + + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + Return Spanel + End Function + Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmInfoSettingsHolder + LoadSettings() + _setup.cbEnabled.Checked = _ScraperEnabled + _setup.chkTitle.Checked = ConfigOptions.bTitle + _setup.chkYear.Checked = ConfigOptions.bYear + _setup.chkMPAA.Checked = ConfigOptions.bMPAA + _setup.chkRelease.Checked = ConfigOptions.bRelease + _setup.chkRuntime.Checked = ConfigOptions.bRuntime + _setup.chkRating.Checked = ConfigOptions.bRating + _setup.chkVotes.Checked = ConfigOptions.bVotes + _setup.chkStudio.Checked = ConfigOptions.bStudio + _setup.chkTagline.Checked = ConfigOptions.bTagline + _setup.chkOutline.Checked = ConfigOptions.bOutline + _setup.chkPlot.Checked = ConfigOptions.bPlot + _setup.chkCast.Checked = ConfigOptions.bCast + _setup.chkDirector.Checked = ConfigOptions.bDirector + _setup.chkWriters.Checked = ConfigOptions.bWriters + _setup.chkProducers.Checked = ConfigOptions.bProducers + _setup.chkGenre.Checked = ConfigOptions.bGenre + _setup.chkTrailer.Checked = ConfigOptions.bTrailer + _setup.chkMusicBy.Checked = ConfigOptions.bMusicBy + _setup.chkCrew.Checked = ConfigOptions.bOtherCrew + _setup.chkCountry.Checked = ConfigOptions.bCountry + _setup.chkTop250.Checked = ConfigOptions.bTop250 + _setup.chkCertification.Checked = ConfigOptions.bCert + _setup.chkOFDBTitle.Checked = MySettings.UseOFDBTitle + _setup.chkOFDBOutline.Checked = MySettings.UseOFDBOutline + _setup.chkOFDBPlot.Checked = MySettings.UseOFDBPlot + _setup.chkOFDBGenre.Checked = MySettings.UseOFDBGenre + _setup.chkFullCast.Checked = ConfigOptions.bFullCast + _setup.chkFullCrew.Checked = ConfigOptions.bFullCrew + + If String.IsNullOrEmpty(MySettings.IMDBURL) Then + MySettings.IMDBURL = "akas.imdb.com" + End If + _setup.txtIMDBURL.Text = MySettings.IMDBURL + _setup.orderChanged() + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(104, "Ember Native Movie Scrapers") + SPanel.Prefix = "NativeMovieInfo_" + SPanel.Order = 110 + SPanel.Parent = "pnlMovieData" + SPanel.Type = Master.eLang.GetString(36, "Movies", True) + SPanel.ImageIndex = If(_ScraperEnabled, 9, 10) + SPanel.Panel = _setup.pnlSettings + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + Return SPanel + End Function + Sub LoadSettings() + ConfigOptions.bTitle = AdvancedSettings.GetBooleanSetting("DoTitle", True) + ConfigOptions.bYear = AdvancedSettings.GetBooleanSetting("DoYear", True) + ConfigOptions.bMPAA = AdvancedSettings.GetBooleanSetting("DoMPAA", True) + ConfigOptions.bRelease = AdvancedSettings.GetBooleanSetting("DoRelease", True) + ConfigOptions.bRuntime = AdvancedSettings.GetBooleanSetting("DoRuntime", True) + ConfigOptions.bRating = AdvancedSettings.GetBooleanSetting("DoRating", True) + ConfigOptions.bVotes = AdvancedSettings.GetBooleanSetting("DoVotes", True) + ConfigOptions.bStudio = AdvancedSettings.GetBooleanSetting("DoStudio", True) + ConfigOptions.bTagline = AdvancedSettings.GetBooleanSetting("DoTagline", True) + ConfigOptions.bOutline = AdvancedSettings.GetBooleanSetting("DoOutline", True) + ConfigOptions.bPlot = AdvancedSettings.GetBooleanSetting("DoPlot", True) + ConfigOptions.bCast = AdvancedSettings.GetBooleanSetting("DoCast", True) + ConfigOptions.bDirector = AdvancedSettings.GetBooleanSetting("DoDirector", True) + ConfigOptions.bWriters = AdvancedSettings.GetBooleanSetting("DoWriters", True) + ConfigOptions.bProducers = AdvancedSettings.GetBooleanSetting("DoProducers", True) + ConfigOptions.bGenre = AdvancedSettings.GetBooleanSetting("DoGenres", True) + ConfigOptions.bTrailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + ConfigOptions.bMusicBy = AdvancedSettings.GetBooleanSetting("DoMusic", True) + ConfigOptions.bOtherCrew = AdvancedSettings.GetBooleanSetting("DoOtherCrews", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("DoFullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("DoFullCrews", True) + ConfigOptions.bTop250 = AdvancedSettings.GetBooleanSetting("DoTop250", True) + ConfigOptions.bCountry = AdvancedSettings.GetBooleanSetting("DoCountry", True) + ConfigOptions.bCert = AdvancedSettings.GetBooleanSetting("DoCert", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("FullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("FullCrew", True) + + MySettings.IMDBURL = AdvancedSettings.GetSetting("IMDBURL", "akas.imdb.com") + MySettings.UseOFDBTitle = AdvancedSettings.GetBooleanSetting("UseOFDBTitle", False) + MySettings.UseOFDBOutline = AdvancedSettings.GetBooleanSetting("UseOFDBOutline", False) + MySettings.UseOFDBPlot = AdvancedSettings.GetBooleanSetting("UseOFDBPlot", False) + MySettings.UseOFDBGenre = AdvancedSettings.GetBooleanSetting("UseOFDBGenre", False) + MySettings.DownloadTrailers = AdvancedSettings.GetBooleanSetting("DownloadTraliers", False) + + MySettings.TrailerTimeout = Convert.ToInt32(AdvancedSettings.GetSetting("TrailerTimeout", "10")) + MySettings.UseIMPA = AdvancedSettings.GetBooleanSetting("UseIMPA", False) + MySettings.UseMPDB = AdvancedSettings.GetBooleanSetting("UseMPDB", False) + MySettings.UseTMDB = AdvancedSettings.GetBooleanSetting("UseTMDB", True) + MySettings.UseIMDBTrailer = AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", True) + MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) + MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) + MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + MySettings.ActorThumbsSize = Convert.ToString(AdvancedSettings.GetSetting("ActorThumbsSize", "SY275_SX400")) + MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) + + ConfigScrapeModifier.DoSearch = True + ConfigScrapeModifier.Meta = True + ConfigScrapeModifier.NFO = True + ConfigScrapeModifier.Extra = True + ConfigScrapeModifier.Actors = True + + ConfigScrapeModifier.Poster = AdvancedSettings.GetBooleanSetting("DoPoster", True) + ConfigScrapeModifier.Fanart = AdvancedSettings.GetBooleanSetting("DoFanart", True) + ConfigScrapeModifier.Trailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + End Sub + + Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.PostScraper + 'LoadSettings() + Dim Poster As New Images + Dim Fanart As New Images + Dim pResults As Containers.ImgResult + Dim fResults As Containers.ImgResult + Dim tURL As String = String.Empty + Dim Trailer As New Trailers + LoadSettings() + Dim saveModifier As Structures.ScrapeModifier = Master.GlobalScrapeMod + Master.GlobalScrapeMod = Functions.ScrapeModifierAndAlso(Master.GlobalScrapeMod, ConfigScrapeModifier) + + Trailer.IMDBURL = MySettings.IMDBURL + Dim doSave As Boolean = False + If Master.GlobalScrapeMod.Poster AndAlso (MySettings.UseIMPA OrElse MySettings.UseMPDB OrElse MySettings.UseTMDB) Then + Poster.Clear() + If Poster.IsAllowedToDownload(DBMovie, Enums.ImageType.Posters) Then + pResults = New Containers.ImgResult + If ScrapeImages.GetPreferredImage(Poster, DBMovie.Movie.IMDBID, Enums.ImageType.Posters, pResults, DBMovie.Filename, False, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Poster.Image) Then + pResults.ImagePath = Poster.SaveAsPoster(DBMovie) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(76, "A poster of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size")) + Using dImgSelect As New dlgImgSelect + dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Posters) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + End Using + End If + End If + End If + End If + Dim didEts As Boolean + If Master.GlobalScrapeMod.Fanart AndAlso MySettings.UseTMDB Then + Fanart.Clear() + If Fanart.IsAllowedToDownload(DBMovie, Enums.ImageType.Fanart) Then + fResults = New Containers.ImgResult + didEts = True + If ScrapeImages.GetPreferredImage(Fanart, DBMovie.Movie.IMDBID, Enums.ImageType.Fanart, fResults, DBMovie.Filename, Master.GlobalScrapeMod.Extra, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Fanart.Image) Then + fResults.ImagePath = Fanart.SaveAsFanart(DBMovie) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) ' + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(78, "Fanart of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size:")) + + Using dImgSelect As New dlgImgSelect + dImgSelect.IMDBURL = MySettings.IMDBURL + fResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Fanart) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + End Using + End If + End If + End If + End If + If Master.GlobalScrapeMod.Trailer AndAlso MySettings.DownloadTrailers Then + tURL = Trailer.DownloadSingleTrailer(DBMovie.Filename, DBMovie.Movie.IMDBID, DBMovie.isSingle, DBMovie.Movie.Trailer) + If Not String.IsNullOrEmpty(tURL) Then + If tURL.Substring(0, 22) = "http://www.youtube.com" Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + DBMovie.Movie.Trailer = Replace(tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + DBMovie.Movie.Trailer = tURL + End If + ElseIf tURL.Substring(0, 7) = "http://" Then + DBMovie.Movie.Trailer = tURL + Else + DBMovie.TrailerPath = tURL + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.TrailerItem, True) + End If + End If + End If + If Master.GlobalScrapeMod.Extra Then + If Master.eSettings.AutoET AndAlso DBMovie.isSingle Then + Try + ScrapeImages.GetPreferredFAasET(DBMovie.Movie.IMDBID, DBMovie.Filename) + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.ThumbsItem, True) + Catch ex As Exception + End Try + End If + End If + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then + For Each act As MediaContainers.Person In DBMovie.Movie.Actors + Dim img As New Images + img.FromWeb(act.Thumb) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If + Next + End If + Master.GlobalScrapeMod = saveModifier + Return New Interfaces.ModuleResult With {.breakChain = False, .BoolProperty = didEts} + End Function + + Sub SaveSettings() + AdvancedSettings.SetBooleanSetting("DoFullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("DoFullCrews", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DoTitle", ConfigOptions.bTitle) + AdvancedSettings.SetBooleanSetting("DoYear", ConfigOptions.bYear) + AdvancedSettings.SetBooleanSetting("DoMPAA", ConfigOptions.bMPAA) + AdvancedSettings.SetBooleanSetting("DoRelease", ConfigOptions.bRelease) + AdvancedSettings.SetBooleanSetting("DoRuntime", ConfigOptions.bRuntime) + AdvancedSettings.SetBooleanSetting("DoRating", ConfigOptions.bRating) + AdvancedSettings.SetBooleanSetting("DoVotes", ConfigOptions.bVotes) + AdvancedSettings.SetBooleanSetting("DoStudio", ConfigOptions.bStudio) + AdvancedSettings.SetBooleanSetting("DoTagline", ConfigOptions.bTagline) + AdvancedSettings.SetBooleanSetting("DoOutline", ConfigOptions.bOutline) + AdvancedSettings.SetBooleanSetting("DoPlot", ConfigOptions.bPlot) + AdvancedSettings.SetBooleanSetting("DoCast", ConfigOptions.bCast) + AdvancedSettings.SetBooleanSetting("DoDirector", ConfigOptions.bDirector) + AdvancedSettings.SetBooleanSetting("DoWriters", ConfigOptions.bWriters) + AdvancedSettings.SetBooleanSetting("DoProducers", ConfigOptions.bProducers) + AdvancedSettings.SetBooleanSetting("DoGenres", ConfigOptions.bGenre) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigOptions.bTrailer) + AdvancedSettings.SetBooleanSetting("DoMusic", ConfigOptions.bMusicBy) + AdvancedSettings.SetBooleanSetting("DoOtherCrews", ConfigOptions.bOtherCrew) + AdvancedSettings.SetBooleanSetting("DoCountry", ConfigOptions.bCountry) + AdvancedSettings.SetBooleanSetting("DoTop250", ConfigOptions.bTop250) + AdvancedSettings.SetBooleanSetting("DoCert", ConfigOptions.bCert) + AdvancedSettings.SetSetting("IMDBURL", MySettings.IMDBURL) + + AdvancedSettings.SetBooleanSetting("FullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("FullCrew", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("UseOFDBTitle", MySettings.UseOFDBTitle) + AdvancedSettings.SetBooleanSetting("UseOFDBOutline", MySettings.UseOFDBOutline) + AdvancedSettings.SetBooleanSetting("UseOFDBPlot", MySettings.UseOFDBPlot) + AdvancedSettings.SetBooleanSetting("UseOFDBGenre", MySettings.UseOFDBGenre) + AdvancedSettings.SetBooleanSetting("DownloadTraliers", MySettings.DownloadTrailers) + + AdvancedSettings.SetSetting("TrailerTimeout", MySettings.TrailerTimeout.ToString) + AdvancedSettings.SetBooleanSetting("UseIMPA", MySettings.UseIMPA) + AdvancedSettings.SetBooleanSetting("UseMPDB", MySettings.UseMPDB) + AdvancedSettings.SetBooleanSetting("UseTMDB", MySettings.UseTMDB) + AdvancedSettings.SetBooleanSetting("UseIMDBTrailer", MySettings.UseIMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailer", MySettings.UseTMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", MySettings.UseTMDBTrailerXBMC) + + AdvancedSettings.SetSetting("ManualETSize", MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("ActorThumbsSize", MySettings.ActorThumbsSize.ToString) + AdvancedSettings.SetSetting("UseTMDBTrailerPref", MySettings.UseTMDBTrailerPref.ToString) + + AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) + AdvancedSettings.SetBooleanSetting("DoFanart", ConfigScrapeModifier.Fanart) + 'AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigScrapeModifier.Trailer) + End Sub + + Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupPostScraper + MySettings.DownloadTrailers = _setupPost.chkDownloadTrailer.Checked + MySettings.UseIMDBTrailer = _setupPost.chkTrailerIMDB.Checked + MySettings.UseTMDBTrailer = _setupPost.chkTrailerTMDB.Checked + MySettings.UseTMDBTrailerXBMC = _setupPost.chkTrailerTMDBXBMC.Checked + MySettings.TrailerTimeout = Convert.ToInt32(_setupPost.txtTimeout.Text) + MySettings.UseTMDB = _setupPost.chkUseTMDB.Checked + MySettings.UseIMPA = _setupPost.chkUseIMPA.Checked + MySettings.UseMPDB = _setupPost.chkUseMPDB.Checked + MySettings.ManualETSize = _setupPost.cbManualETSize.Text + MySettings.ActorThumbsSize = _setupPost.cbActorThumbsSize.Text + MySettings.UseTMDBTrailerPref = _setupPost.cbTrailerTMDBPref.Text + ConfigScrapeModifier.Poster = _setupPost.chkScrapePoster.Checked + ConfigScrapeModifier.Fanart = _setupPost.chkScrapeFanart.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + RemoveHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + _setupPost.Dispose() + End If + End Sub + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupScraper + If Not String.IsNullOrEmpty(_setup.txtIMDBURL.Text) Then + MySettings.IMDBURL = Strings.Replace(_setup.txtIMDBURL.Text, "http://", String.Empty) + Else + MySettings.IMDBURL = "akas.imdb.com" + End If + MySettings.UseOFDBTitle = _setup.chkOFDBTitle.Checked + MySettings.UseOFDBOutline = _setup.chkOFDBOutline.Checked + MySettings.UseOFDBPlot = _setup.chkOFDBPlot.Checked + MySettings.UseOFDBGenre = _setup.chkOFDBGenre.Checked + ConfigOptions.bTitle = _setup.chkTitle.Checked + ConfigOptions.bYear = _setup.chkYear.Checked + ConfigOptions.bMPAA = _setup.chkMPAA.Checked + ConfigOptions.bRelease = _setup.chkRelease.Checked + ConfigOptions.bRuntime = _setup.chkRuntime.Checked + ConfigOptions.bRating = _setup.chkRating.Checked + ConfigOptions.bVotes = _setup.chkVotes.Checked + ConfigOptions.bStudio = _setup.chkStudio.Checked + ConfigOptions.bTagline = _setup.chkTagline.Checked + ConfigOptions.bOutline = _setup.chkOutline.Checked + ConfigOptions.bPlot = _setup.chkPlot.Checked + ConfigOptions.bCast = _setup.chkCast.Checked + ConfigOptions.bDirector = _setup.chkDirector.Checked + ConfigOptions.bWriters = _setup.chkWriters.Checked + ConfigOptions.bProducers = _setup.chkProducers.Checked + ConfigOptions.bGenre = _setup.chkGenre.Checked + ConfigOptions.bTrailer = _setup.chkTrailer.Checked + ConfigOptions.bMusicBy = _setup.chkMusicBy.Checked + ConfigOptions.bOtherCrew = _setup.chkCrew.Checked + ConfigOptions.bCountry = _setup.chkCountry.Checked + ConfigOptions.bTop250 = _setup.chkTop250.Checked + ConfigOptions.bCert = _setup.chkCertification.Checked + ConfigOptions.bFullCrew = _setup.chkFullCrew.Checked + ConfigOptions.bFullCast = _setup.chkFullCast.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + RemoveHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + _setup.Dispose() + End If + End Sub + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.Scraper + 'LoadSettings() + IMDB.IMDBURL = MySettings.IMDBURL + IMDB.UseOFDBTitle = MySettings.UseOFDBTitle + IMDB.UseOFDBOutline = MySettings.UseOFDBOutline + IMDB.UseOFDBPlot = MySettings.UseOFDBPlot + IMDB.UseOFDBGenre = MySettings.UseOFDBGenre + Dim tTitle As String = String.Empty + Dim OldTitle As String = DBMovie.Movie.Title + + If Master.GlobalScrapeMod.NFO AndAlso Not Master.GlobalScrapeMod.DoSearch Then + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + IMDB.GetMovieInfo(DBMovie.Movie.IMDBID, DBMovie.Movie, Options.bFullCrew, Options.bFullCast, False, Options, False) + ElseIf Not ScrapeType = Enums.ScrapeType.SingleScrape Then + DBMovie.Movie = IMDB.GetSearchMovieInfo(DBMovie.Movie.Title, DBMovie, ScrapeType, Options) + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + If ScrapeType = Enums.ScrapeType.SingleScrape AndAlso Master.GlobalScrapeMod.DoSearch _ + AndAlso ModulesManager.Instance.externalScrapersModules.OrderBy(Function(y) y.ScraperOrder).FirstOrDefault(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled).AssemblyName = _AssemblyName Then + DBMovie.Movie.IMDBID = String.Empty + DBMovie.ClearExtras = True + DBMovie.PosterPath = String.Empty + DBMovie.FanartPath = String.Empty + DBMovie.TrailerPath = String.Empty + DBMovie.ExtraPath = String.Empty + DBMovie.SubPath = String.Empty + DBMovie.NfoPath = String.Empty + DBMovie.Movie.Clear() + End If + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + Select Case ScrapeType + Case Enums.ScrapeType.FilterAuto, Enums.ScrapeType.FullAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.UpdateAuto + Return New Interfaces.ModuleResult With {.breakChain = False} + End Select + If ScrapeType = Enums.ScrapeType.SingleScrape Then + Using dSearch As New dlgIMDBSearchResults + dSearch.IMDBURL = MySettings.IMDBURL + Dim tmpTitle As String = DBMovie.Movie.Title + If String.IsNullOrEmpty(tmpTitle) Then + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name, False) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name, False) + Else + tmpTitle = StringUtils.FilterName(If(DBMovie.isSingle, Directory.GetParent(DBMovie.Filename).Name, Path.GetFileNameWithoutExtension(DBMovie.Filename))) + End If + End If + Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) + If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID + End If + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + + Master.currMovie.ClearExtras = True + Master.currMovie.PosterPath = String.Empty + Master.currMovie.FanartPath = String.Empty + Master.currMovie.TrailerPath = String.Empty + Master.currMovie.ExtraPath = String.Empty + Master.currMovie.SubPath = String.Empty + Master.currMovie.NfoPath = String.Empty + + + IMDB.GetMovieInfo(DBMovie.Movie.IMDBID, DBMovie.Movie, filterOptions.bFullCrew, filterOptions.bFullCast, False, filterOptions, False) + End If + Else + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End Using + End If + End If + + If Not String.IsNullOrEmpty(DBMovie.Movie.Title) Then + tTitle = StringUtils.FilterTokens(DBMovie.Movie.Title) + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = tTitle + If Master.eSettings.DisplayYear AndAlso Not String.IsNullOrEmpty(DBMovie.Movie.Year) Then + DBMovie.ListTitle = String.Format("{0} ({1})", tTitle, DBMovie.Movie.Year) + Else + DBMovie.ListTitle = tTitle + End If + Else + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name) + Else + If DBMovie.UseFolder AndAlso DBMovie.isSingle Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(DBMovie.Filename).Name) + Else + DBMovie.ListTitle = StringUtils.FilterName(Path.GetFileNameWithoutExtension(DBMovie.Filename)) + End If + End If + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = DBMovie.ListTitle + End If + + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function SelectImageOfType(ByRef mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.SelectImageOfType + If preload AndAlso _DLType = Enums.ImageType.Fanart AndAlso Not IsNothing(dFImgSelect) Then + pResults = dFImgSelect.ShowDialog() + dFImgSelect = Nothing + Else + Using dImgSelect As New dlgImgSelect + If preload Then + dFImgSelect = New dlgImgSelect + dFImgSelect.PreLoad(mMovie, Enums.ImageType.Fanart, _isEdit) + End If + dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(mMovie, _DLType, _isEdit) + End Using + End If + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + Public Sub PostScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.PostScraperOrderChanged + _setup.orderChanged() + End Sub + + Public Sub ScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.ScraperOrderChanged + _setupPost.orderChanged() + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Structure _MySettings + +#Region "Fields" + + Dim DownloadTrailers As Boolean + Dim IMDBURL As String + Dim UseOFDBGenre As Boolean + Dim UseOFDBOutline As Boolean + Dim UseOFDBPlot As Boolean + Dim UseOFDBTitle As Boolean + Dim TrailerTimeout As Integer + Dim UseTMDB As Boolean + Dim UseIMPA As Boolean + Dim UseMPDB As Boolean + Dim UseTMDBTrailer As Boolean + Dim UseIMDBTrailer As Boolean + Dim UseTMDBTrailerXBMC As Boolean + Dim ManualETSize As String + Dim ActorThumbsSize As String + Dim UseTMDBTrailerPref As String +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/scraperTVNativeModule.vb b/Addons/scraper.TVDB.Data/scraperTVNativeModule.vb new file mode 100644 index 0000000..450e6d6 --- /dev/null +++ b/Addons/scraper.TVDB.Data/scraperTVNativeModule.vb @@ -0,0 +1,221 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberNativeTVScraperModule + Implements Interfaces.EmberTVScraperModule + +#Region "Fields" + + Public Shared TVScraper As New Scraper + + Private _Name As String = "Ember Native TV Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmTVInfoSettingsHolder + Private _setupPost As frmTVMediaSettingsHolder +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberTVScraperModule.ModuleSettingsChanged + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberTVScraperModule.SetupPostScraperChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberTVScraperModule.SetupScraperChanged + + Public Event TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) Implements Interfaces.EmberTVScraperModule.TVScraperEvent + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property IsBusy() As Boolean Implements Interfaces.EmberTVScraperModule.IsBusy + Get + Return TVScraper.IsBusy + End Get + End Property + + Public ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberTVScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + Public ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberTVScraperModule.IsScraper + Get + Return True + End Get + End Property + + Public ReadOnly Property ModuleName() As String Implements Interfaces.EmberTVScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + Public ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberTVScraperModule.ModuleVersion + Get + Return FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Public Property PostScraperEnabled() As Boolean Implements Interfaces.EmberTVScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Public Property ScraperEnabled() As Boolean Implements Interfaces.EmberTVScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() Implements Interfaces.EmberTVScraperModule.CancelAsync + TVScraper.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String, ByRef epDet As MediaContainers.EpisodeDetails) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ChangeEpisode + epDet = TVScraper.ChangeEpisode(ShowID, TVDBID, Lang) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function GetLangs(ByVal sMirror As String, ByRef Langs As List(Of Containers.TVLanguage)) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetLangs + Langs = TVScraper.GetLangs(sMirror) + Return New Interfaces.ModuleResult With {.breakChain = True} + End Function + + Public Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByRef epDetails As MediaContainers.EpisodeDetails) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetSingleEpisode + epDetails = TVScraper.GetSingleEpisode(ShowID, TVDBID, Season, Episode, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images, ByRef Image As Images) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetSingleImage + Image = TVScraper.GetSingleImage(Title, ShowID, TVDBID, Type, Season, Episode, Lang, Ordering, CurrentImage) + Return New Interfaces.ModuleResult With {.breakChain = True} + End Function + + Public Sub Handler_ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent TVScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberTVScraperModule.Init + AddHandler TVScraper.ScraperEvent, AddressOf Handler_ScraperEvent + End Sub + + Public Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberTVScraperModule.InjectSetupPostScraper + Dim SPanel As New Containers.SettingsPanel + _setupPost = New frmTVMediaSettingsHolder + _setupPost.cbEnabled.Checked = _PostScraperEnabled + SPanel.Name = String.Concat(Me._Name, "PostScraper") + SPanel.Text = Master.eLang.GetString(0, "Ember Native TV Scrapers") + SPanel.Type = Master.eLang.GetString(698, "TV Shows", True) + SPanel.ImageIndex = If(Me._ScraperEnabled, 9, 10) + SPanel.Order = 100 + SPanel.Panel = Me._setupPost.pnlSettings + SPanel.Parent = "pnlTVMedia" + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + Return SPanel + End Function + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberTVScraperModule.ScraperUpdateMediaList + Public Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberTVScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmTVInfoSettingsHolder + _setup.cbEnabled.Checked = _ScraperEnabled + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(0, "Ember Native TV Scrapers") + SPanel.Prefix = "NativeTV_" + SPanel.Type = Master.eLang.GetString(698, "TV Shows", True) + SPanel.ImageIndex = If(Me._ScraperEnabled, 9, 10) + SPanel.Order = 100 + SPanel.Panel = Me._setup.pnlSettings + SPanel.Parent = "pnlTVData" + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + Return SPanel + End Function + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + Public Function PostScraper(ByRef DBTV As Structures.DBTV, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.PostScraper + End Function + + Public Function SaveImages() As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.SaveImages + TVScraper.SaveImages() + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberTVScraperModule.SaveSetupPostScraper + End Sub + + Public Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberTVScraperModule.SaveSetupScraper + End Sub + + Public Function ScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ScrapeEpisode + TVScraper.ScrapeEpisode(ShowID, ShowTitle, TVDBID, iEpisode, iSeason, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function Scraper(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.Scraper + TVScraper.SingleScrape(ShowID, ShowTitle, TVDBID, Lang, Ordering, Options, ScrapeType, WithCurrent) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function ScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ScrapeSeason + TVScraper.ScrapeSeason(ShowID, ShowTitle, TVDBID, iSeason, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Data/x64/SQLite.Interop.dll b/Addons/scraper.TVDB.Data/x64/SQLite.Interop.dll new file mode 100644 index 0000000..860c0e5 Binary files /dev/null and b/Addons/scraper.TVDB.Data/x64/SQLite.Interop.dll differ diff --git a/Addons/scraper.TVDB.Data/x86/SQLite.Interop.dll b/Addons/scraper.TVDB.Data/x86/SQLite.Interop.dll new file mode 100644 index 0000000..6f6fd4f Binary files /dev/null and b/Addons/scraper.TVDB.Data/x86/SQLite.Interop.dll differ diff --git a/Addons/scraper.TVDB.Poster/AssemblyInfo.vb b/Addons/scraper.TVDB.Poster/AssemblyInfo.vb new file mode 100644 index 0000000..1b59a44 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.EmberCore")> +<Assembly: AssemblyDescription("www.embermm.com")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.EmberCore")> +<Assembly: AssemblyCopyright("Copyright © 2011")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("4c4e9cbd-06e2-44ed-bbed-0f51f6c3f4ef")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.5")> +<Assembly: AssemblyFileVersion("1.3.0.5")> diff --git a/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.Debug_(db_DB).xml b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.Debug_(db_DB).xml new file mode 100644 index 0000000..0fba5b0 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.Debug_(db_DB).xml @@ -0,0 +1,902 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="1">native1</string> + <string id="2">native2</string> + <string id="3">native3</string> + <string id="4">native4</string> + <string id="5">native5</string> + <string id="6">native6</string> + <string id="7">native7</string> + <string id="8">native8</string> + <string id="9">native9</string> + <string id="10">native10</string> + <string id="11">native11</string> + <string id="12">native12</string> + <string id="13">native13</string> + <string id="14">native14</string> + <string id="15">native15</string> + <string id="16">native16</string> + <string id="17">native17</string> + <string id="18">native18</string> + <string id="19">native19</string> + <string id="20">native20</string> + <string id="21">native21</string> + <string id="22">native22</string> + <string id="23">native23</string> + <string id="24">native24</string> + <string id="25">native25</string> + <string id="26">native26</string> + <string id="27">native27</string> + <string id="28">native28</string> + <string id="29">native29</string> + <string id="30">native30</string> + <string id="31">native31</string> + <string id="32">native32</string> + <string id="33">native33</string> + <string id="34">native34</string> + <string id="35">native35</string> + <string id="36">native36</string> + <string id="37">native37</string> + <string id="38">native38</string> + <string id="39">native39</string> + <string id="40">native40</string> + <string id="41">native41</string> + <string id="42">native42</string> + <string id="43">native43</string> + <string id="44">native44</string> + <string id="45">native45</string> + <string id="46">native46</string> + <string id="47">native47</string> + <string id="48">native48</string> + <string id="49">native49</string> + <string id="50">native50</string> + <string id="51">native51</string> + <string id="52">native52</string> + <string id="53">native53</string> + <string id="54">native54</string> + <string id="55">native55</string> + <string id="56">native56</string> + <string id="57">native57</string> + <string id="58">native58</string> + <string id="59">native59</string> + <string id="60">native60</string> + <string id="61">native61</string> + <string id="62">native62</string> + <string id="63">native63</string> + <string id="64">native64</string> + <string id="65">native65</string> + <string id="66">native66</string> + <string id="67">native67</string> + <string id="68">native68</string> + <string id="69">native69</string> + <string id="70">native70</string> + <string id="71">native71</string> + <string id="72">native72</string> + <string id="73">native73</string> + <string id="74">native74</string> + <string id="75">native75</string> + <string id="76">native76</string> + <string id="77">native77</string> + <string id="78">native78</string> + <string id="79">native79</string> + <string id="80">native80</string> + <string id="81">native81</string> + <string id="82">native82</string> + <string id="83">native83</string> + <string id="84">native84</string> + <string id="85">native85</string> + <string id="86">native86</string> + <string id="87">native87</string> + <string id="88">native88</string> + <string id="89">native89</string> + <string id="90">native90</string> + <string id="91">native91</string> + <string id="92">native92</string> + <string id="93">native93</string> + <string id="94">native94</string> + <string id="95">native95</string> + <string id="96">native96</string> + <string id="97">native97</string> + <string id="98">native98</string> + <string id="99">native99</string> + <string id="100">native100</string> + <string id="101">native101</string> + <string id="102">native102</string> + <string id="103">native103</string> + <string id="104">native104</string> + <string id="105">native105</string> + <string id="106">native106</string> + <string id="107">native107</string> + <string id="108">native108</string> + <string id="109">native109</string> + <string id="110">native110</string> + <string id="111">native111</string> + <string id="112">native112</string> + <string id="113">native113</string> + <string id="114">native114</string> + <string id="115">native115</string> + <string id="116">native116</string> + <string id="117">native117</string> + <string id="118">native118</string> + <string id="119">native119</string> + <string id="120">native120</string> + <string id="121">native121</string> + <string id="122">native122</string> + <string id="123">native123</string> + <string id="124">native124</string> + <string id="125">native125</string> + <string id="126">native126</string> + <string id="127">native127</string> + <string id="128">native128</string> + <string id="129">native129</string> + <string id="130">native130</string> + <string id="131">native131</string> + <string id="132">native132</string> + <string id="133">native133</string> + <string id="134">native134</string> + <string id="135">native135</string> + <string id="136">native136</string> + <string id="137">native137</string> + <string id="138">native138</string> + <string id="139">native139</string> + <string id="140">native140</string> + <string id="141">native141</string> + <string id="142">native142</string> + <string id="143">native143</string> + <string id="144">native144</string> + <string id="145">native145</string> + <string id="146">native146</string> + <string id="147">native147</string> + <string id="148">native148</string> + <string id="149">native149</string> + <string id="150">native150</string> + <string id="151">native151</string> + <string id="152">native152</string> + <string id="153">native153</string> + <string id="154">native154</string> + <string id="155">native155</string> + <string id="156">native156</string> + <string id="157">native157</string> + <string id="158">native158</string> + <string id="159">native159</string> + <string id="160">native160</string> + <string id="161">native161</string> + <string id="162">native162</string> + <string id="163">native163</string> + <string id="164">native164</string> + <string id="165">native165</string> + <string id="166">native166</string> + <string id="167">native167</string> + <string id="168">native168</string> + <string id="169">native169</string> + <string id="170">native170</string> + <string id="171">native171</string> + <string id="172">native172</string> + <string id="173">native173</string> + <string id="174">native174</string> + <string id="175">native175</string> + <string id="176">native176</string> + <string id="177">native177</string> + <string id="178">native178</string> + <string id="179">native179</string> + <string id="180">native180</string> + <string id="181">native181</string> + <string id="182">native182</string> + <string id="183">native183</string> + <string id="184">native184</string> + <string id="185">native185</string> + <string id="186">native186</string> + <string id="187">native187</string> + <string id="188">native188</string> + <string id="189">native189</string> + <string id="190">native190</string> + <string id="191">native191</string> + <string id="192">native192</string> + <string id="193">native193</string> + <string id="194">native194</string> + <string id="195">native195</string> + <string id="196">native196</string> + <string id="197">native197</string> + <string id="198">native198</string> + <string id="199">native199</string> + <string id="200">native200</string> + <string id="201">native201</string> + <string id="202">native202</string> + <string id="203">native203</string> + <string id="204">native204</string> + <string id="205">native205</string> + <string id="206">native206</string> + <string id="207">native207</string> + <string id="208">native208</string> + <string id="209">native209</string> + <string id="210">native210</string> + <string id="211">native211</string> + <string id="212">native212</string> + <string id="213">native213</string> + <string id="214">native214</string> + <string id="215">native215</string> + <string id="216">native216</string> + <string id="217">native217</string> + <string id="218">native218</string> + <string id="219">native219</string> + <string id="220">native220</string> + <string id="221">native221</string> + <string id="222">native222</string> + <string id="223">native223</string> + <string id="224">native224</string> + <string id="225">native225</string> + <string id="226">native226</string> + <string id="227">native227</string> + <string id="228">native228</string> + <string id="229">native229</string> + <string id="230">native230</string> + <string id="231">native231</string> + <string id="232">native232</string> + <string id="233">native233</string> + <string id="234">native234</string> + <string id="235">native235</string> + <string id="236">native236</string> + <string id="237">native237</string> + <string id="238">native238</string> + <string id="239">native239</string> + <string id="240">native240</string> + <string id="241">native241</string> + <string id="242">native242</string> + <string id="243">native243</string> + <string id="244">native244</string> + <string id="245">native245</string> + <string id="246">native246</string> + <string id="247">native247</string> + <string id="248">native248</string> + <string id="249">native249</string> + <string id="250">native250</string> + <string id="251">native251</string> + <string id="252">native252</string> + <string id="253">native253</string> + <string id="254">native254</string> + <string id="255">native255</string> + <string id="256">native256</string> + <string id="257">native257</string> + <string id="258">native258</string> + <string id="259">native259</string> + <string id="260">native260</string> + <string id="261">native261</string> + <string id="262">native262</string> + <string id="263">native263</string> + <string id="264">native264</string> + <string id="265">native265</string> + <string id="266">native266</string> + <string id="267">native267</string> + <string id="268">native268</string> + <string id="269">native269</string> + <string id="270">native270</string> + <string id="271">native271</string> + <string id="272">native272</string> + <string id="273">native273</string> + <string id="274">native274</string> + <string id="275">native275</string> + <string id="276">native276</string> + <string id="277">native277</string> + <string id="278">native278</string> + <string id="279">native279</string> + <string id="280">native280</string> + <string id="281">native281</string> + <string id="282">native282</string> + <string id="283">native283</string> + <string id="284">native284</string> + <string id="285">native285</string> + <string id="286">native286</string> + <string id="287">native287</string> + <string id="288">native288</string> + <string id="289">native289</string> + <string id="290">native290</string> + <string id="291">native291</string> + <string id="292">native292</string> + <string id="293">native293</string> + <string id="294">native294</string> + <string id="295">native295</string> + <string id="296">native296</string> + <string id="297">native297</string> + <string id="298">native298</string> + <string id="299">native299</string> + <string id="300">native300</string> + <string id="301">native301</string> + <string id="302">native302</string> + <string id="303">native303</string> + <string id="304">native304</string> + <string id="305">native305</string> + <string id="306">native306</string> + <string id="307">native307</string> + <string id="308">native308</string> + <string id="309">native309</string> + <string id="310">native310</string> + <string id="311">native311</string> + <string id="312">native312</string> + <string id="313">native313</string> + <string id="314">native314</string> + <string id="315">native315</string> + <string id="316">native316</string> + <string id="317">native317</string> + <string id="318">native318</string> + <string id="319">native319</string> + <string id="320">native320</string> + <string id="321">native321</string> + <string id="322">native322</string> + <string id="323">native323</string> + <string id="324">native324</string> + <string id="325">native325</string> + <string id="326">native326</string> + <string id="327">native327</string> + <string id="328">native328</string> + <string id="329">native329</string> + <string id="330">native330</string> + <string id="331">native331</string> + <string id="332">native332</string> + <string id="333">native333</string> + <string id="334">native334</string> + <string id="335">native335</string> + <string id="336">native336</string> + <string id="337">native337</string> + <string id="338">native338</string> + <string id="339">native339</string> + <string id="340">native340</string> + <string id="341">native341</string> + <string id="342">native342</string> + <string id="343">native343</string> + <string id="344">native344</string> + <string id="345">native345</string> + <string id="346">native346</string> + <string id="347">native347</string> + <string id="348">native348</string> + <string id="349">native349</string> + <string id="350">native350</string> + <string id="351">native351</string> + <string id="352">native352</string> + <string id="353">native353</string> + <string id="354">native354</string> + <string id="355">native355</string> + <string id="356">native356</string> + <string id="357">native357</string> + <string id="358">native358</string> + <string id="359">native359</string> + <string id="360">native360</string> + <string id="361">native361</string> + <string id="362">native362</string> + <string id="363">native363</string> + <string id="364">native364</string> + <string id="365">native365</string> + <string id="366">native366</string> + <string id="367">native367</string> + <string id="368">native368</string> + <string id="369">native369</string> + <string id="370">native370</string> + <string id="371">native371</string> + <string id="372">native372</string> + <string id="373">native373</string> + <string id="374">native374</string> + <string id="375">native375</string> + <string id="376">native376</string> + <string id="377">native377</string> + <string id="378">native378</string> + <string id="379">native379</string> + <string id="380">native380</string> + <string id="381">native381</string> + <string id="382">native382</string> + <string id="383">native383</string> + <string id="384">native384</string> + <string id="385">native385</string> + <string id="386">native386</string> + <string id="387">native387</string> + <string id="388">native388</string> + <string id="389">native389</string> + <string id="390">native390</string> + <string id="391">native391</string> + <string id="392">native392</string> + <string id="393">native393</string> + <string id="394">native394</string> + <string id="395">native395</string> + <string id="396">native396</string> + <string id="397">native397</string> + <string id="398">native398</string> + <string id="399">native399</string> + <string id="400">native400</string> + <string id="401">native401</string> + <string id="402">native402</string> + <string id="403">native403</string> + <string id="404">native404</string> + <string id="405">native405</string> + <string id="406">native406</string> + <string id="407">native407</string> + <string id="408">native408</string> + <string id="409">native409</string> + <string id="410">native410</string> + <string id="411">native411</string> + <string id="412">native412</string> + <string id="413">native413</string> + <string id="414">native414</string> + <string id="415">native415</string> + <string id="416">native416</string> + <string id="417">native417</string> + <string id="418">native418</string> + <string id="419">native419</string> + <string id="420">native420</string> + <string id="421">native421</string> + <string id="422">native422</string> + <string id="423">native423</string> + <string id="424">native424</string> + <string id="425">native425</string> + <string id="426">native426</string> + <string id="427">native427</string> + <string id="428">native428</string> + <string id="429">native429</string> + <string id="430">native430</string> + <string id="431">native431</string> + <string id="432">native432</string> + <string id="433">native433</string> + <string id="434">native434</string> + <string id="435">native435</string> + <string id="436">native436</string> + <string id="437">native437</string> + <string id="438">native438</string> + <string id="439">native439</string> + <string id="440">native440</string> + <string id="441">native441</string> + <string id="442">native442</string> + <string id="443">native443</string> + <string id="444">native444</string> + <string id="445">native445</string> + <string id="446">native446</string> + <string id="447">native447</string> + <string id="448">native448</string> + <string id="449">native449</string> + <string id="450">native450</string> + <string id="451">native451</string> + <string id="452">native452</string> + <string id="453">native453</string> + <string id="454">native454</string> + <string id="455">native455</string> + <string id="456">native456</string> + <string id="457">native457</string> + <string id="458">native458</string> + <string id="459">native459</string> + <string id="460">native460</string> + <string id="461">native461</string> + <string id="462">native462</string> + <string id="463">native463</string> + <string id="464">native464</string> + <string id="465">native465</string> + <string id="466">native466</string> + <string id="467">native467</string> + <string id="468">native468</string> + <string id="469">native469</string> + <string id="470">native470</string> + <string id="471">native471</string> + <string id="472">native472</string> + <string id="473">native473</string> + <string id="474">native474</string> + <string id="475">native475</string> + <string id="476">native476</string> + <string id="477">native477</string> + <string id="478">native478</string> + <string id="479">native479</string> + <string id="480">native480</string> + <string id="481">native481</string> + <string id="482">native482</string> + <string id="483">native483</string> + <string id="484">native484</string> + <string id="485">native485</string> + <string id="486">native486</string> + <string id="487">native487</string> + <string id="488">native488</string> + <string id="489">native489</string> + <string id="490">native490</string> + <string id="491">native491</string> + <string id="492">native492</string> + <string id="493">native493</string> + <string id="494">native494</string> + <string id="495">native495</string> + <string id="496">native496</string> + <string id="497">native497</string> + <string id="498">native498</string> + <string id="499">native499</string> + <string id="500">native500</string> + <string id="501">native501</string> + <string id="502">native502</string> + <string id="503">native503</string> + <string id="504">native504</string> + <string id="505">native505</string> + <string id="506">native506</string> + <string id="507">native507</string> + <string id="508">native508</string> + <string id="509">native509</string> + <string id="510">native510</string> + <string id="511">native511</string> + <string id="512">native512</string> + <string id="513">native513</string> + <string id="514">native514</string> + <string id="515">native515</string> + <string id="516">native516</string> + <string id="517">native517</string> + <string id="518">native518</string> + <string id="519">native519</string> + <string id="520">native520</string> + <string id="521">native521</string> + <string id="522">native522</string> + <string id="523">native523</string> + <string id="524">native524</string> + <string id="525">native525</string> + <string id="526">native526</string> + <string id="527">native527</string> + <string id="528">native528</string> + <string id="529">native529</string> + <string id="530">native530</string> + <string id="531">native531</string> + <string id="532">native532</string> + <string id="533">native533</string> + <string id="534">native534</string> + <string id="535">native535</string> + <string id="536">native536</string> + <string id="537">native537</string> + <string id="538">native538</string> + <string id="539">native539</string> + <string id="540">native540</string> + <string id="541">native541</string> + <string id="542">native542</string> + <string id="543">native543</string> + <string id="544">native544</string> + <string id="545">native545</string> + <string id="546">native546</string> + <string id="547">native547</string> + <string id="548">native548</string> + <string id="549">native549</string> + <string id="550">native550</string> + <string id="551">native551</string> + <string id="552">native552</string> + <string id="553">native553</string> + <string id="554">native554</string> + <string id="555">native555</string> + <string id="556">native556</string> + <string id="557">native557</string> + <string id="558">native558</string> + <string id="559">native559</string> + <string id="560">native560</string> + <string id="561">native561</string> + <string id="562">native562</string> + <string id="563">native563</string> + <string id="564">native564</string> + <string id="565">native565</string> + <string id="566">native566</string> + <string id="567">native567</string> + <string id="568">native568</string> + <string id="569">native569</string> + <string id="570">native570</string> + <string id="571">native571</string> + <string id="572">native572</string> + <string id="573">native573</string> + <string id="574">native574</string> + <string id="575">native575</string> + <string id="576">native576</string> + <string id="577">native577</string> + <string id="578">native578</string> + <string id="579">native579</string> + <string id="580">native580</string> + <string id="581">native581</string> + <string id="582">native582</string> + <string id="583">native583</string> + <string id="584">native584</string> + <string id="585">native585</string> + <string id="586">native586</string> + <string id="587">native587</string> + <string id="588">native588</string> + <string id="589">native589</string> + <string id="590">native590</string> + <string id="591">native591</string> + <string id="592">native592</string> + <string id="593">native593</string> + <string id="594">native594</string> + <string id="595">native595</string> + <string id="596">native596</string> + <string id="597">native597</string> + <string id="598">native598</string> + <string id="599">native599</string> + <string id="600">native600</string> + <string id="601">native601</string> + <string id="602">native602</string> + <string id="603">native603</string> + <string id="604">native604</string> + <string id="605">native605</string> + <string id="606">native606</string> + <string id="607">native607</string> + <string id="608">native608</string> + <string id="609">native609</string> + <string id="610">native610</string> + <string id="611">native611</string> + <string id="612">native612</string> + <string id="613">native613</string> + <string id="614">native614</string> + <string id="615">native615</string> + <string id="616">native616</string> + <string id="617">native617</string> + <string id="618">native618</string> + <string id="619">native619</string> + <string id="620">native620</string> + <string id="621">native621</string> + <string id="622">native622</string> + <string id="623">native623</string> + <string id="624">native624</string> + <string id="625">native625</string> + <string id="626">native626</string> + <string id="627">native627</string> + <string id="628">native628</string> + <string id="629">native629</string> + <string id="630">native630</string> + <string id="631">native631</string> + <string id="632">native632</string> + <string id="633">native633</string> + <string id="634">native634</string> + <string id="635">native635</string> + <string id="636">native636</string> + <string id="637">native637</string> + <string id="638">native638</string> + <string id="639">native639</string> + <string id="640">native640</string> + <string id="641">native641</string> + <string id="642">native642</string> + <string id="643">native643</string> + <string id="644">native644</string> + <string id="645">native645</string> + <string id="646">native646</string> + <string id="647">native647</string> + <string id="648">native648</string> + <string id="649">native649</string> + <string id="650">native650</string> + <string id="651">native651</string> + <string id="652">native652</string> + <string id="653">native653</string> + <string id="654">native654</string> + <string id="655">native655</string> + <string id="656">native656</string> + <string id="657">native657</string> + <string id="658">native658</string> + <string id="659">native659</string> + <string id="660">native660</string> + <string id="661">native661</string> + <string id="662">native662</string> + <string id="663">native663</string> + <string id="664">native664</string> + <string id="665">native665</string> + <string id="666">native666</string> + <string id="667">native667</string> + <string id="668">native668</string> + <string id="669">native669</string> + <string id="670">native670</string> + <string id="671">native671</string> + <string id="672">native672</string> + <string id="673">native673</string> + <string id="674">native674</string> + <string id="675">native675</string> + <string id="676">native676</string> + <string id="677">native677</string> + <string id="678">native678</string> + <string id="679">native679</string> + <string id="680">native680</string> + <string id="681">native681</string> + <string id="682">native682</string> + <string id="683">native683</string> + <string id="684">native684</string> + <string id="685">native685</string> + <string id="686">native686</string> + <string id="687">native687</string> + <string id="688">native688</string> + <string id="689">native689</string> + <string id="690">native690</string> + <string id="691">native691</string> + <string id="692">native692</string> + <string id="693">native693</string> + <string id="694">native694</string> + <string id="695">native695</string> + <string id="696">native696</string> + <string id="697">native697</string> + <string id="698">native698</string> + <string id="699">native699</string> + <string id="700">native700</string> + <string id="701">native701</string> + <string id="702">native702</string> + <string id="703">native703</string> + <string id="704">native704</string> + <string id="705">native705</string> + <string id="706">native706</string> + <string id="707">native707</string> + <string id="708">native708</string> + <string id="709">native709</string> + <string id="710">native710</string> + <string id="711">native711</string> + <string id="712">native712</string> + <string id="713">native713</string> + <string id="714">native714</string> + <string id="715">native715</string> + <string id="716">native716</string> + <string id="717">native717</string> + <string id="718">native718</string> + <string id="719">native719</string> + <string id="720">native720</string> + <string id="721">native721</string> + <string id="722">native722</string> + <string id="723">native723</string> + <string id="724">native724</string> + <string id="725">native725</string> + <string id="726">native726</string> + <string id="727">native727</string> + <string id="728">native728</string> + <string id="729">native729</string> + <string id="730">native730</string> + <string id="731">native731</string> + <string id="732">native732</string> + <string id="733">native733</string> + <string id="734">native734</string> + <string id="735">native735</string> + <string id="736">native736</string> + <string id="737">native737</string> + <string id="738">native738</string> + <string id="739">native739</string> + <string id="740">native740</string> + <string id="741">native741</string> + <string id="742">native742</string> + <string id="743">native743</string> + <string id="744">native744</string> + <string id="745">native745</string> + <string id="746">native746</string> + <string id="747">native747</string> + <string id="748">native748</string> + <string id="749">native749</string> + <string id="750">native750</string> + <string id="751">native751</string> + <string id="752">native752</string> + <string id="753">native753</string> + <string id="754">native754</string> + <string id="755">native755</string> + <string id="756">native756</string> + <string id="757">native757</string> + <string id="758">native758</string> + <string id="759">native759</string> + <string id="760">native760</string> + <string id="761">native761</string> + <string id="762">native762</string> + <string id="763">native763</string> + <string id="764">native764</string> + <string id="765">native765</string> + <string id="766">native766</string> + <string id="767">native767</string> + <string id="768">native768</string> + <string id="769">native769</string> + <string id="770">native770</string> + <string id="771">native771</string> + <string id="772">native772</string> + <string id="773">native773</string> + <string id="774">native774</string> + <string id="775">native775</string> + <string id="776">native776</string> + <string id="777">native777</string> + <string id="778">native778</string> + <string id="779">native779</string> + <string id="780">native780</string> + <string id="781">native781</string> + <string id="782">native782</string> + <string id="783">native783</string> + <string id="784">native784</string> + <string id="785">native785</string> + <string id="786">native786</string> + <string id="787">native787</string> + <string id="788">native788</string> + <string id="789">native789</string> + <string id="790">native790</string> + <string id="791">native791</string> + <string id="792">native792</string> + <string id="793">native793</string> + <string id="794">native794</string> + <string id="795">native795</string> + <string id="796">native796</string> + <string id="797">native797</string> + <string id="798">native798</string> + <string id="799">native799</string> + <string id="800">native800</string> + <string id="801">native801</string> + <string id="802">native802</string> + <string id="803">native803</string> + <string id="804">native804</string> + <string id="805">native805</string> + <string id="806">native806</string> + <string id="807">native807</string> + <string id="808">native808</string> + <string id="809">native809</string> + <string id="810">native810</string> + <string id="811">native811</string> + <string id="812">native812</string> + <string id="813">native813</string> + <string id="814">native814</string> + <string id="815">native815</string> + <string id="816">native816</string> + <string id="817">native817</string> + <string id="818">native818</string> + <string id="819">native819</string> + <string id="820">native820</string> + <string id="821">native821</string> + <string id="822">native822</string> + <string id="823">native823</string> + <string id="824">native824</string> + <string id="825">native825</string> + <string id="826">native826</string> + <string id="827">native827</string> + <string id="828">native828</string> + <string id="829">native829</string> + <string id="830">native830</string> + <string id="831">native831</string> + <string id="832">native832</string> + <string id="833">native833</string> + <string id="834">native834</string> + <string id="835">native835</string> + <string id="836">native836</string> + <string id="837">native837</string> + <string id="838">native838</string> + <string id="839">native839</string> + <string id="840">native840</string> + <string id="841">native841</string> + <string id="842">native842</string> + <string id="843">native843</string> + <string id="844">native844</string> + <string id="845">native845</string> + <string id="846">native846</string> + <string id="847">native847</string> + <string id="848">native848</string> + <string id="849">native849</string> + <string id="850">native850</string> + <string id="851">native851</string> + <string id="852">native852</string> + <string id="853">native853</string> + <string id="854">native854</string> + <string id="855">native855</string> + <string id="856">native856</string> + <string id="857">native857</string> + <string id="858">native858</string> + <string id="859">native859</string> + <string id="860">native860</string> + <string id="861">native861</string> + <string id="862">native862</string> + <string id="863">native863</string> + <string id="864">native864</string> + <string id="865">native865</string> + <string id="866">native866</string> + <string id="867">native867</string> + <string id="868">native868</string> + <string id="869">native869</string> + <string id="870">native870</string> + <string id="871">native871</string> + <string id="872">native872</string> + <string id="873">native873</string> + <string id="874">native874</string> + <string id="875">native875</string> + <string id="876">native876</string> + <string id="877">native877</string> + <string id="878">native878</string> + <string id="879">native879</string> + <string id="880">native880</string> + <string id="881">native881</string> + <string id="882">native882</string> + <string id="883">native883</string> + <string id="884">native884</string> + <string id="885">native885</string> + <string id="886">native886</string> + <string id="887">native887</string> + <string id="888">native888</string> + <string id="889">native889</string> + <string id="890">native890</string> + <string id="891">native891</string> + <string id="892">native892</string> + <string id="893">native893</string> + <string id="894">native894</string> + <string id="895">native895</string> + <string id="896">native896</string> + <string id="897">native897</string> + <string id="898">native898</string> + <string id="899">native899</string> + <string id="900">native900</string> +</strings> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.English_(en_US)-Help.xml b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.English_(en_US)-Help.xml new file mode 100644 index 0000000..1705beb --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.English_(en_US)-Help.xml @@ -0,0 +1,45 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="NativeMovieInfo_cbEnabled">Enable or disable this module.</string> + <string control="NativeMovieInfo_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieInfo_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieInfo_txtIMDBURL">Enter the mirror to use when retrieving information from IMDB.</string> + <string control="NativeMovieInfo_chkOFDBTitle">If enabled, Ember will attempt to retreive the movie title from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkOFDBOutline">If enabled, Ember will attempt to retreive the movie outline from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkOFDBPlot">If enabled, Ember will attempt to retreive the movie plot from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkOFDBGenre">If enabled, Ember will attempt to retreive the movie genre from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkCertification">Enable scraping movie certification.</string> + <string control="NativeMovieInfo_chkTop250">Enable scraping movie Top 250 ranking.</string> + <string control="NativeMovieInfo_txtGenreLimit">Limit the number of scraped genres to the entered value.</string> + <string control="NativeMovieInfo_txtActorLimit">Limit the number of scraped actors to the entered value.</string> + <string control="NativeMovieInfo_chkCrew">Enable scraping movie other crew. (Scrape Full Crew must be enabled)</string> + <string control="NativeMovieInfo_chkMusicBy">Enable scraping movie musicians. (Scrape Full Crew must be enabled)</string> + <string control="NativeMovieInfo_chkProducers">Enable scraping movie producers. (Scrape Full Crew must be enabled)</string> + <string control="NativeMovieInfo_chkWriters">Enable scraping movie writers.</string> + <string control="NativeMovieInfo_chkStudio">Enable scraping movie studio.</string> + <string control="NativeMovieInfo_chkRuntime">Enable scraping movie runtime.</string> + <string control="NativeMovieInfo_chkPlot">Enable scraping movie plot.</string> + <string control="NativeMovieInfo_chkOutline">Enable scraping movie outline.</string> + <string control="NativeMovieInfo_chkGenre">Enable scraping movie genre.</string> + <string control="NativeMovieInfo_chkDirector">Enable scraping movie director.</string> + <string control="NativeMovieInfo_chkTagline">Enable scraping movie tagline.</string> + <string control="NativeMovieInfo_chkCast">Enable scraping movie cast.</string> + <string control="NativeMovieInfo_chkVotes">Enable scraping movie votes.</string> + <string control="NativeMovieInfo_chkTrailer">Enable scraping movie trailer url.</string> + <string control="NativeMovieInfo_chkRating">Enable scraping movie rating.</string> + <string control="NativeMovieInfo_chkRelease">Enable scraping movie release date.</string> + <string control="NativeMovieInfo_chkMPAA">Enable scraping movie MPAA.</string> + <string control="NativeMovieInfo_chkYear">Enable scraping movie year.</string> + <string control="NativeMovieInfo_chkTitle">Enable scraping movie title.</string> + <string control="NativeMovieMedia_cbEnabled">Enable or disable this module.</string> + <string control="NativeMovieMedia_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieMedia_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieMedia_chkScrapePoster">Enable scraping posters from this module. (Refer to global poster settings for more options)</string> + <string control="NativeMovieMedia_chkScrapeFanart">Enable scraping fanart from this module. (Refer to global fanart settings for more options)</string> + <string control="NativeMovieMedia_chkUseTMDB">Enable retrieving images from theMovieDB.org.</string> + <string control="NativeMovieMedia_chkUseIMPA">Enable retrieving images from</string> + <string control="NativeMovieMedia_chkUseMPDB">Enable retrieving images from MoviePosterDB.com.</string> + <string control="NativeMovieMedia_chkAutoThumbs">Enable automatic extraction of extrathumbs from this module. (Refer to global extrathumb settings for more options)</string> + <string control="NativeMovieMedia_chkDownloadTrailer">Enable trailer downloading from this module. (Refer to global trailer settings for more options)</string> + <string control="NativeMovieMedia_txtTimeout">Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.)</string> + <string control="NativeMovieMedia_lbTrailerSites">Select the sites from which you would like to retrieve trailer URLs and/or files.</string> +</strings> diff --git a/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.English_(en_US).xml b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.English_(en_US).xml new file mode 100644 index 0000000..87a19b5 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.English_(en_US).xml @@ -0,0 +1,117 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Native TV Scrapers</string> + <string id="1">Use OFDB Genre</string> + <string id="2">Use OFDB Plot</string> + <string id="3">Use OFDB Outline</string> + <string id="4">Use OFDB Title</string> + <string id="5">IMDB Mirror:</string> + <string id="6">Scraper Fields - Scraper specific</string> + <string id="7">Timeout:</string> + <string id="8">Supported Sites:</string> + <string id="9">Get Images From:</string> + <string id="10">Search Results</string> + <string id="11">Searching IMDB...</string> + <string id="12">The ID you entered is not a valid IMDB ID.</string> + <string id="13">You have manually entered an IMDB ID but have not verified it is correct.</string> + <string id="14">Continue without verification?</string> + <string id="15">Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again.</string> + <string id="16">Verification Failed</string> + <string id="17">Partial Matches ({0})</string> + <string id="18">Exact Matches ({0})</string> + <string id="19">Popular Titles ({0})</string> + <string id="20">No Matches Found</string> + <string id="21">View details of each result to find the proper movie.</string> + <string id="22">Movie Search Results</string> + <string id="23">Manual IMDB Entry:</string> + <string id="24">Verify</string> + <string id="25">Searching IMDB...</string> + <string id="26">Downloading details...</string> + <string id="27">Downloading {0}</string> + <string id="28">No Fanart found for this movie.</string> + <string id="29">No Fanart Found</string> + <string id="30">No Posters found for this movie.</string> + <string id="31">No Posters Found</string> + <string id="32">Retrieving data from TheMovieDB.com...</string> + <string id="33">TheMovieDB.com is not enabled</string> + <string id="34">Retrieving data from IMPAwards.com...</string> + <string id="35">IMPAwards.com is not enabled</string> + <string id="36">Retrieving data from MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com is not enabled</string> + <string id="38">Preparing images...</string> + <string id="39">Select Poster</string> + <string id="40">Select Fanart</string> + <string id="41">Check All Thumb</string> + <string id="42">Check All Mid</string> + <string id="43">Check All Original</string> + <string id="44">Selected item will be set as fanart. All checked items will be saved to \extrathumbs.</string> + <string id="45">Performing Preliminary Tasks...</string> + <string id="46">Downloading Selected Image...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Small</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Small ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Multiple</string> + <string id="56">Downloading selected trailer...</string> + <string id="57">Copying specified file to trailer...</string> + <string id="58">The trailer could not be played. This could be due to an invalid URL or you do not have the proper player to play the trailer type.</string> + <string id="59">Error Playing Trailer</string> + <string id="60">Move</string> + <string id="61">Copy</string> + <string id="62">Moving specified file to trailer...</string> + <string id="63">Set To Nfo</string> + <string id="64">Select Trailer</string> + <string id="65">Select Trailer to Download</string> + <string id="66">Manual Trailer Entry</string> + <string id="67">Direct Link or YouTube URL:</string> + <string id="68">Compiling trailer list...</string> + <string id="69">Preview Trailer</string> + <string id="70">Local Trailer:</string> + <string id="71">The video format links could not be retrieved.</string> + <string id="72">Error Retrieving Video Format Links</string> + <string id="73">Select Format</string> + <string id="74">Getting available formats...</string> + <string id="75">Available Formats</string> + <string id="76">A poster of your preferred size could not be found. Please choose another.</string> + <string id="77">No Preferred Size</string> + <string id="78">Fanart of your preferred size could not be found. Please choose another.</string> + <string id="79">There are no known episodes for this show. Scrape the show, season, or episode and try again.</string> + <string id="80">No Known Episodes</string> + <string id="81">There is no poster available for this episode.</string> + <string id="82">Guest Star</string> + <string id="83">The ID you entered is not a valid TVDB ID.</string> + <string id="84">Downloading show info...</string> + <string id="85">TV Search Results</string> + <string id="86">View details of each result to find the proper TV show.</string> + <string id="87">Downloading Fullsize Fanart Image...</string> + <string id="88">Loading Current Images...</string> + <string id="89">(Down)Loading New Images...</string> + <string id="90">Setting Defaults...</string> + <string id="91">Show Poster</string> + <string id="92">Episode Fanart</string> + <string id="93">Show Fanart</string> + <string id="94">All Seasons Poster</string> + <string id="95">Season Posters</string> + <string id="96">Season Fanart</string> + <string id="97">Season {0} Posters</string> + <string id="98">Season {0} Fanart</string> + <string id="99">TV Image Selection</string> + <string id="100">Current Image:</string> + <string id="101">Get Posters</string> + <string id="102">Get Fanart</string> + <string id="103">These settings are specific to this module.{0}Please refer to the global settings for more options.</string> + <string id="104">Ember Native Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Size:</string> + <string id="109">Trailers</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Preferred language</string> + <string id="113">Save Fanart In:</string> + <string id="114">Open In Browser</string> +</strings> diff --git a/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.German_(de_DE)-Help.xml b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.German_(de_DE)-Help.xml new file mode 100644 index 0000000..f4c930d --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.German_(de_DE)-Help.xml @@ -0,0 +1,45 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="NativeMovieInfo_cbEnabled">Aktiviert dieses Modul.</string> + <string control="NativeMovieInfo_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieInfo_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieInfo_txtIMDBURL">Gib den Mirror ein über den Ember mit der IMDB kommunizieren soll.</string> + <string control="NativeMovieInfo_chkOFDBTitle">Wenn aktiviert versucht Ember den Titel von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkOFDBOutline">Wenn aktiviert versucht Ember die Kurzebschreibung von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkOFDBPlot">Wenn aktiviert versucht Ember die Inhaltsangabe von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkOFDBGenre">Wenn aktiviert versucht Ember die Genres von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkCertification">Aktiviert das Scrapen der Altersbeschränkung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTop250">Aktiviert das Scrapen der IMDB Top250 mit diesem Modul.</string> + <string control="NativeMovieInfo_txtGenreLimit">Die Anzahl der gescrapten Genres limitieren.</string> + <string control="NativeMovieInfo_txtActorLimit">Die Anzahl der gescrapten Schauspieler limitieren.</string> + <string control="NativeMovieInfo_chkCrew">Aktiviert das Scrapen der Sonstigen Crew mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!)</string> + <string control="NativeMovieInfo_chkMusicBy">Aktiviert das Scrapen der Musiker mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!)</string> + <string control="NativeMovieInfo_chkProducers">Aktiviert das Scrapen der Produzenten mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!)</string> + <string control="NativeMovieInfo_chkWriters">Aktiviert das Scrapen der Autoren mit diesem Modul.</string> + <string control="NativeMovieInfo_chkStudio">Aktiviert das Scrapen des Studios mit diesem Modul.</string> + <string control="NativeMovieInfo_chkRuntime">Aktiviert das Scrapen der Spielzeit mit diesem Modul.</string> + <string control="NativeMovieInfo_chkPlot">Aktiviert das Scrapen des Inhalts mit diesem Modul.</string> + <string control="NativeMovieInfo_chkOutline">Aktiviert das Scrapen der Kurzbeschreibung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkGenre">Aktiviert das Scrapen von Genre mit diesem Modul.</string> + <string control="NativeMovieInfo_chkDirector">Aktiviert das Scrapen des Regisseurs mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTagline">Aktiviert das Scrapen der Tagline mit diesem Modul.</string> + <string control="NativeMovieInfo_chkCast">Aktiviert das Scrapen der Schauspieler mit diesem Modul.</string> + <string control="NativeMovieInfo_chkVotes">Aktiviert das Scrapen der Anzahl Bewertungen mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTrailer">Aktiviert das Scrapen von Trailern mit diesem Modul.</string> + <string control="NativeMovieInfo_chkRating">Aktiviert das Scrapen der Bewertung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkRelease">Aktiviert das Scrapen des Premiere Datums mit diesem Modul.</string> + <string control="NativeMovieInfo_chkMPAA">Aktiviert das Scrapen der MPAA Bewertung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkYear">Aktiviert das Scrapen des Jahres mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTitle">Aktiviert das Scrapen des Titels mit diesem Modul.</string> + <string control="NativeMovieMedia_cbEnabled">Aktiviert dieses Modul.</string> + <string control="NativeMovieMedia_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieMedia_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieMedia_chkScrapePoster">Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_chkScrapeFanart">Aktiviert das Laden von Fanart mit diesem Modul. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_chkUseTMDB">Aktiviert das Laden von Bildern von TheMovieDB.org.</string> + <string control="NativeMovieMedia_chkUseIMPA">Aktiviert das Laden von Bildern von IMPA</string> + <string control="NativeMovieMedia_chkUseMPDB">Aktiviert das Laden von Bildern von MoviePosterDB.com.</string> + <string control="NativeMovieMedia_chkAutoThumbs">Automatische Frame extraktion mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_chkDownloadTrailer">Trailer laden mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_txtTimeout">Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Zeite in dieser Zeit nicht geantwortet hat wird sie übersprungen)</string> + <string control="NativeMovieMedia_lbTrailerSites">Wähle die Seite von der Trailer URLs/Dateien geladen werden sollen.</string> +</strings> diff --git a/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.German_(de_DE).xml b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.German_(de_DE).xml new file mode 100644 index 0000000..0349557 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.German_(de_DE).xml @@ -0,0 +1,117 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Nativer TV Scraper</string> + <string id="1">OFDB Genre benutzen</string> + <string id="2">OFDB Handlung benutzen</string> + <string id="3">OFDB Kurzbeschr. benutzen</string> + <string id="4">OFDB Titel benutzen</string> + <string id="5">IMDB Mirror:</string> + <string id="6">Scraper Felder - Scraper spezifisch</string> + <string id="7">Timeout:</string> + <string id="8">Unterstützte Seiten:</string> + <string id="9">Bilder holen von:</string> + <string id="10">Suchergebnis</string> + <string id="11">Suche in der IMDB...</string> + <string id="12">Die eingegebene ID ist keine gültige IMDB ID.</string> + <string id="13">Die IMDB ID ist noch nicht geprüft.</string> + <string id="14">Ohne Prüfung fortfahren?</string> + <string id="15">Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben.</string> + <string id="16">Prüfung fehlgeschlagen</string> + <string id="17">Teil Treffer ({0})</string> + <string id="18">Exakte Treffer({0})</string> + <string id="19">Populäre Titel ({0})</string> + <string id="20">Keine Treffer</string> + <string id="21">Schaue dir die Details an um den richtigen Film zu finden.</string> + <string id="22">Film Suchergebnis</string> + <string id="23">Man. IMDB ID:</string> + <string id="24">Prüfen</string> + <string id="25">Suche in der IMDB...</string> + <string id="26">Lade Details...</string> + <string id="27">Lade {0} herunter</string> + <string id="28">Kein Fanart für diesen Film gefunden</string> + <string id="29">Kein Fanart gefunden</string> + <string id="30">Kein Poster für diesen Film gefunden</string> + <string id="31">Kein Poster gefunden</string> + <string id="32">Lade Daten von TheMovieDB.com...</string> + <string id="33">TheMovieDB.com ist nicht aktiviert.</string> + <string id="34">Lade Daten von IMPAwards.com...</string> + <string id="35">IMPAwards.com ist nicht aktiviert.</string> + <string id="36">Lade Daten von MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com ist nicht aktiviert.</string> + <string id="38">Bereite Bilder vor...</string> + <string id="39">Wähle Poster</string> + <string id="40">Wähle Fanart</string> + <string id="41">Alle Thumbs</string> + <string id="42">Alle Mittl.</string> + <string id="43">Alle Original</string> + <string id="44">Markiertes Bild wird Fanart. Alle aktivierten werden Extrathumbs.</string> + <string id="45">Vorarbeit läuft...</string> + <string id="46">Lade gewähltes Bild...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">mittel</string> + <string id="50">klein</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">klein ({0}x{1})</string> + <string id="54">mittel ({0}x{1})</string> + <string id="55">Mehrfach</string> + <string id="56">Lade gewählten Trailer...</string> + <string id="57">Kopiere gewählten Trailer...</string> + <string id="58">Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URL liegen oder es ist kein Player für diesen Dateityp vorhanden.</string> + <string id="59">Fehler beim Abspielen des Trailers</string> + <string id="60">Verschieben</string> + <string id="61">Kopieren</string> + <string id="62">Verschiebe gewählten Trailer...</string> + <string id="63">In NFO speichern</string> + <string id="64">Trailer wählen</string> + <string id="65">Trailer zum laden wählen</string> + <string id="66">Man. Trailer</string> + <string id="67">Direktlink oder YouTube URL:</string> + <string id="68">Stelle Trailerliste zusammen...</string> + <string id="69">Trailer Vorschau</string> + <string id="70">Lokaler Trailer:</string> + <string id="71">Die Videoformat Linkliste konnte nicht generiert werden.</string> + <string id="72">Fehler beim generieren der Videoformat Linkliste</string> + <string id="73">Format wählen</string> + <string id="74">Hole verfügbare Formate...</string> + <string id="75">Verfügbare Formate</string> + <string id="76">Es konnte kein Poster in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="77">Keine gewünschte Größe</string> + <string id="78">Es konnte kein Fanart in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="79">Keine Episoden für diese TV-Serie verfügbar. Scrape diese Serie, Staffel oder Episode und versuche es erneut.</string> + <string id="80">Keine Episoden verfügbar</string> + <string id="81">Kein Poster für diese Episode vorhanden.</string> + <string id="82">Gast Star</string> + <string id="83">Die eingegebene ID ist keine gültige TVDB ID.</string> + <string id="84">Lade Serien Informationen...</string> + <string id="85">Serien Suchergebnis</string> + <string id="86">Betrachte die Details um die richtige TV-Serie zu erkennen.</string> + <string id="87">Lade Fanart in Originalgröße...</string> + <string id="88">Lade aktuelle Bilder...</string> + <string id="89">Lade neue Bilder...</string> + <string id="90">Setze Standardwerte...</string> + <string id="91">Serien Poster</string> + <string id="92">Episoden Fanart</string> + <string id="93">Serien Fanart</string> + <string id="94">Alle-Staffeln Poster</string> + <string id="95">Staffel Posters</string> + <string id="96">Staffel Fanart</string> + <string id="97">Staffel {0} Poster</string> + <string id="98">Staffel {0} Fanart</string> + <string id="99">Bilderwahl TV-Serien</string> + <string id="100">Aktuelles Bild:</string> + <string id="101">Poster laden</string> + <string id="102">Fanart laden</string> + <string id="103">Diese Einstellungen sind Modul-spezifisch. {0} Bitte werfen sie einen blick in die Globalen Einstellungen für noch mehr Optionen.</string> + <string id="104">Ember Nativer Film Scraper</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Grösse:</string> + <string id="109">Trailer</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Bevorzugte Sprache</string> + <string id="113">Speichere Fanart in:</string> + <string id="114">Im Browser öffnen</string> +</strings> diff --git a/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..79a98bf --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,45 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="NativeMovieInfo_cbEnabled">Slå modulen av eller på.</string> + <string control="NativeMovieInfo_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieInfo_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieInfo_txtIMDBURL">Før inn speilserver til IMDB.</string> + <string control="NativeMovieInfo_chkOFDBTitle">Hvis påslått, EMM vil å prøve å finne filmtittel fra OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkOFDBOutline">Hvis påslått, EMM vil prøve å finne beskrivelse av filmen på OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkOFDBPlot">Hvis påslått, EMM vil hente filmhistorien fra OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkOFDBGenre">Hvis påslått, EMM vil hente filmsjanger fra OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkCertification">Slå på detaljhenting av filmsertifisering.</string> + <string control="NativeMovieInfo_chkTop250">Slå på detaljhenting av IMDB Top 250-plassering.</string> + <string control="NativeMovieInfo_txtGenreLimit">Begrens antall detaljhentede sjangre.</string> + <string control="NativeMovieInfo_txtActorLimit">Begrens antall skuespillere.</string> + <string control="NativeMovieInfo_chkCrew">Slå på detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått)</string> + <string control="NativeMovieInfo_chkMusicBy">Slå på detaljhenting av musikere. (Detaljhenting av fullt crew må være påslått)</string> + <string control="NativeMovieInfo_chkProducers">Slå på detaljhenting av filmprodusenter. (Detaljhenting av full crew må være påslått)</string> + <string control="NativeMovieInfo_chkWriters">Slå på detaljhenting av manusforfattere.</string> + <string control="NativeMovieInfo_chkStudio">Slå på detaljhenting av studio.</string> + <string control="NativeMovieInfo_chkRuntime">Slå på detaljhenting av filmlengde.</string> + <string control="NativeMovieInfo_chkPlot">Slå på detaljhenting av filmens historie.</string> + <string control="NativeMovieInfo_chkOutline">Slå på detaljhenting av filmens beskrivelse.</string> + <string control="NativeMovieInfo_chkGenre">Slå på detaljhenting av filmens sjanger.</string> + <string control="NativeMovieInfo_chkDirector">Slå på detaljhetning av filmens regissør.</string> + <string control="NativeMovieInfo_chkTagline">Slå på detaljhetning av filmens undertittel.</string> + <string control="NativeMovieInfo_chkCast">Slå på detaljhetning av filmens skuespillerbeholdning.</string> + <string control="NativeMovieInfo_chkVotes">Slå på detaljhetning av filmens poeng.</string> + <string control="NativeMovieInfo_chkTrailer">Slå på detaljhetning av filmens trailer URL.</string> + <string control="NativeMovieInfo_chkRating">Slå på detaljhetning av filmens aldersgrense.</string> + <string control="NativeMovieInfo_chkRelease">Slå på detaljhetning av filmens premieredato.</string> + <string control="NativeMovieInfo_chkMPAA">Slå på detaljhetning av filmens MPAA-markering.</string> + <string control="NativeMovieInfo_chkYear">Slå på detaljhetning av filmens år.</string> + <string control="NativeMovieInfo_chkTitle">Slå på detaljhetning av filmens tittel.</string> + <string control="NativeMovieMedia_cbEnabled">Slå modulen av eller på.</string> + <string control="NativeMovieMedia_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieMedia_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieMedia_chkScrapePoster">Slå på detaljhetning av plakater i denne modulen. (Se globale plakatinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_chkScrapeFanart">Slå på detaljhetning av fankunst i denne modulen. (Se globale fankunstinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_chkUseTMDB">Slå på bildehenting fra theMovieDB.org.</string> + <string control="NativeMovieMedia_chkUseIMPA">Slå på bildehenting fra</string> + <string control="NativeMovieMedia_chkUseMPDB">Slå på bildehenting fra MoviePosterDB.com</string> + <string control="NativeMovieMedia_chkAutoThumbs">Slå på automatisk henting av ekstrakunst fra denne modulen. (Se globale ekstrakunstinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_chkDownloadTrailer">Slå på automatisk henting av trailer fra denne modulen. (Se globale trailerinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_txtTimeout">Før inn tiden (i sekunder) du vil bruke for timeout for trailersider. (Hvis siden ikke svarer innen timeoutfristen, så vil den bli hoppet over)</string> + <string control="NativeMovieMedia_lbTrailerSites">Velg sidene du vil bruke til trailer URL og/eller filer.</string> +</strings> diff --git a/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.Norwegian_(no_NO).xml b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.Norwegian_(no_NO).xml new file mode 100644 index 0000000..52370c3 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Langs/scraper.EmberCore.Norwegian_(no_NO).xml @@ -0,0 +1,117 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">EMM TV-detaljhentere</string> + <string id="1">Bruk OFDB-sjangere</string> + <string id="2">Bruk OFDB-filmhistorie</string> + <string id="3">Bruk OFDB-beskrivelse</string> + <string id="4">Bruk OFDB-tittel</string> + <string id="5">IMDB-speilserver:</string> + <string id="6">Detaljhenterområder - Detaljhenterspesifikk</string> + <string id="7">Tidsavbrudd:</string> + <string id="8">Støttede sider:</string> + <string id="9">Hent bilder fra:</string> + <string id="10">Søkeresultater</string> + <string id="11">Søker TMDB...</string> + <string id="12">IDen du førte inn er ikke en riktig IMDB-ID.</string> + <string id="13">Du har ført inn en IMDB-ID, men har ikke verifisert om den er riktig.</string> + <string id="14">Fortsette uten verifisering?</string> + <string id="15">Kunne ikke hente filmdetaljer for den innførte IDen. Vennligst sjekk IDen og prøv igjen.</string> + <string id="16">Verifisering feilet</string> + <string id="17">Delvise treff ({0})</string> + <string id="18">Eksakte treff ({0})</string> + <string id="19">Populære titler ({0})</string> + <string id="20">Ingen funnet</string> + <string id="21">Se detaljer fra hvert treff for å finne riktig film.</string> + <string id="22">Filmsøkresultater</string> + <string id="23">Manuell IMDB innføring:</string> + <string id="24">Verifiser</string> + <string id="25">Søker TMDB...</string> + <string id="26">Laster ned detaljer...</string> + <string id="27">Laster ned {0}</string> + <string id="28">Ingen fankunst funnet for denne filmen.</string> + <string id="29">Ingen fankunst funnet</string> + <string id="30">Ingen plakater funnet for denne filmen.</string> + <string id="31">Ingen plakater funnet</string> + <string id="32">Henter data fra TheMovieDB.com...</string> + <string id="33">TheMovieDB.com er ikke påslått</string> + <string id="34">Henter data fra IMPAwards.com...</string> + <string id="35">IMPAwards.com er ikke påslått</string> + <string id="36">Henter data fra MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com er ikke påslått</string> + <string id="38">Forbereder bilder...</string> + <string id="39">Velg plakat</string> + <string id="40">Velg fankunst</string> + <string id="41">Huk av alle tommelbilder</string> + <string id="42">Huk av alle Mid</string> + <string id="43">Huk av alle originale</string> + <string id="44">Valgte objekt vil bli satt som fankunst. Alle hukede objekter vil bli lagret i \extrathumbs.</string> + <string id="45">Utfører forberedende oppgaver...</string> + <string id="46">Laster ned valgte bilde...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Liten</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover {0}x{1}</string> + <string id="53">Liten ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Flere</string> + <string id="56">Laster ned valgt trailer...</string> + <string id="57">Kopierer valgt fil til trailer...</string> + <string id="58">Traileren kunne ikke spilles av. Det kan være at URL ikke er gyldig, eller at du ikke har riktig avspiller for denne filtypen.</string> + <string id="59">Kunne spille av trailer.</string> + <string id="60">Flytt</string> + <string id="61">Kopiér</string> + <string id="62">Flytter valgt fil til trailer...</string> + <string id="63">Sett i nfo</string> + <string id="64">Velg trailer</string> + <string id="65">Velg trailer til å laste ned</string> + <string id="66">Manuell trailerinnføring</string> + <string id="67">Direkte link eller YouTube URL:</string> + <string id="68">Kompilerer trailerliste...</string> + <string id="69">Sniktitt på trailer</string> + <string id="70">Lokal trailer:</string> + <string id="71">Videoformatlenkene kunne ikke hentes</string> + <string id="72">Kunne ikke hente videoformatlenker</string> + <string id="73">Velg format</string> + <string id="74">Henter tilgjengelige formater...</string> + <string id="75">Tilgjengelige formater</string> + <string id="76">En plakat i din valgte størrelse kunne ikke hentes. Vennligst velg en annen.</string> + <string id="77">Ingen foretrukket størrelse</string> + <string id="78">Fankunst i din foretrukkede størrelse kunne ikke bli funnet. Vennligst velg en annen.</string> + <string id="79">Det er ingen kjente episoder for denne serien. Detaljhent serien, sesongen eller episoden og prøv på nytt.</string> + <string id="80">Ingen kjente episoder</string> + <string id="81">Det er ingen plakater for denne episoden.</string> + <string id="82">Gjesteskuespiller</string> + <string id="83">IDen du innførte er ikke en gyldig TVDB ID.</string> + <string id="84">Laster ned serieinfo...</string> + <string id="85">TVsøk-resultater</string> + <string id="86">Se detaljer fra hvert resultat for å finne riktig serie.</string> + <string id="87">Laster ned fankunst i full størrelse...</string> + <string id="88">Laster inn nåværende bilder...</string> + <string id="89">Laster (ned) nye bilder...</string> + <string id="90">Setter standarder...</string> + <string id="91">Serieplakat</string> + <string id="92">Episodefankunst</string> + <string id="93">Vis fankunst</string> + <string id="94">Alle sesonger-plakat</string> + <string id="95">Sesongplakater</string> + <string id="96">Sesongfankunst</string> + <string id="97">Sesong {0}-plakater</string> + <string id="98">Sesong {0}-fankunst</string> + <string id="99">TV-bilde valg</string> + <string id="100">Nåværende bilde:</string> + <string id="101">Hent plakater</string> + <string id="102">Hent fankunst</string> + <string id="103">Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg.</string> + <string id="104">EMM film-detaljhentere</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (Tysk)</string> + <string id="108">TMDB Ekstrakunst-størrelse:</string> + <string id="109">Trailere</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC-format</string> + <string id="112">Foretrukket språk</string> + <string id="113">Lagre fankunst i:</string> + <string id="114">Åpne i nettleser</string> +</strings> diff --git a/Addons/scraper.TVDB.Poster/My Project/Application.Designer.vb b/Addons/scraper.TVDB.Poster/My Project/Application.Designer.vb new file mode 100644 index 0000000..66fb81a --- /dev/null +++ b/Addons/scraper.TVDB.Poster/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Addons/scraper.TVDB.Poster/My Project/Application.myapp b/Addons/scraper.TVDB.Poster/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Addons/scraper.TVDB.Poster/My Project/Application.myapp @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <MySubMain>false</MySubMain> + <SingleInstance>false</SingleInstance> + <ShutdownMode>0</ShutdownMode> + <EnableVisualStyles>true</EnableVisualStyles> + <AuthenticationMode>0</AuthenticationMode> + <ApplicationType>1</ApplicationType> + <SaveMySettingsOnExit>true</SaveMySettingsOnExit> +</MyApplicationData> diff --git a/Addons/scraper.TVDB.Poster/My Project/AssemblyInfo.vb b/Addons/scraper.TVDB.Poster/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..c8525ec --- /dev/null +++ b/Addons/scraper.TVDB.Poster/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.TVDB.Poster")> +<Assembly: AssemblyDescription("http://forum.xbmc.org/showthread.php?tid=116941")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.TVDB.Poster")> +<Assembly: AssemblyCopyright("Copyright © 2013")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("60E062E9-E025-4696-A8DF-5E2FB7C69FAA")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.11")> +<Assembly: AssemblyFileVersion("1.3.0.11")> diff --git a/Addons/scraper.TVDB.Poster/My Project/Resources.Designer.vb b/Addons/scraper.TVDB.Poster/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bb85827 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''<summary> + ''' A strongly-typed resource class, for looking up localized strings, etc. + '''</summary> + <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + '''<summary> + ''' Returns the cached ResourceManager instance used by this class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EmberScraperModule.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + '''<summary> + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Addons/scraper.TVDB.Poster/My Project/Resources.resx b/Addons/scraper.TVDB.Poster/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Addons/scraper.TVDB.Poster/My Project/Resources.resx @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/My Project/Settings.Designer.vb b/Addons/scraper.TVDB.Poster/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f020222 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _ + Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + <Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _ + Friend Module MySettingsProperty + + <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _ + Friend ReadOnly Property Settings() As Global.EmberScraperModule.My.MySettings + Get + Return Global.EmberScraperModule.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Addons/scraper.TVDB.Poster/My Project/Settings.settings b/Addons/scraper.TVDB.Poster/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Addons/scraper.TVDB.Poster/My Project/Settings.settings @@ -0,0 +1,7 @@ +<?xml version='1.0' encoding='utf-8'?> +<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true"> + <Profiles> + <Profile Name="(Default)" /> + </Profiles> + <Settings /> +</SettingsFile> diff --git a/Addons/scraper.TVDB.Poster/Resources/Logo.png b/Addons/scraper.TVDB.Poster/Resources/Logo.png new file mode 100644 index 0000000..a89dae1 Binary files /dev/null and b/Addons/scraper.TVDB.Poster/Resources/Logo.png differ diff --git a/Addons/scraper.TVDB.Poster/Scraper/clsScrapeIMDB.vb b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeIMDB.vb new file mode 100644 index 0000000..06e23c6 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeIMDB.vb @@ -0,0 +1,1126 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Globalization +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMDB + + Public Class MovieSearchResults + +#Region "Fields" + + Private _ExactMatches As New List(Of MediaContainers.Movie) + Private _PartialMatches As New List(Of MediaContainers.Movie) + Private _PopularTitles As New List(Of MediaContainers.Movie) + +#End Region 'Fields + +#Region "Properties" + + Public Property ExactMatches() As List(Of MediaContainers.Movie) + Get + Return _ExactMatches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _ExactMatches = value + End Set + End Property + + Public Property PartialMatches() As List(Of MediaContainers.Movie) + Get + Return _PartialMatches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _PartialMatches = value + End Set + End Property + + Public Property PopularTitles() As List(Of MediaContainers.Movie) + Get + Return _PopularTitles + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _PopularTitles = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + Public UseOFDBGenre As Boolean + Public UseOFDBOutline As Boolean + Public UseOFDBPlot As Boolean + Public UseOFDBTitle As Boolean + + Friend WithEvents bwIMDB As New System.ComponentModel.BackgroundWorker + + Private Const LINK_PATTERN As String = "<a[\s]+[^>]*?href[\s]?=[\s\""\']*(?<url>.*?)[\""\']*.*?>(?<name>[^<]+|.*?)?<\/a>" + + Private Const ACTORTABLE_PATTERN As String = "<table class=""cast"">(.*?)</table>" + Private Const HREF_PATTERN As String = "<a.*?href=[""'](?<url>.*?)[""'].*?>(?<name>.*?)</a>" + Private Const HREF_PATTERN_2 As String = "<a\shref=[""""'](?<url>.*?)[""""'].*?>(?<name>.*?)</a>" + Private Const HREF_PATTERN_3 As String = "<a href=""/search/title\?certificates=[^""]*"">([^<]*):([^<]*)</a>[^<]*(<i>([^<]*)</i>)?" + Private Const HREF_PATTERN_4 As String = "<a.*?href=[""']/(title/tt\d{7}/|name/nm\d{7}/)[""'].*?>(?<text>.*?)</a>" + Private Const IMDB_ID_REGEX As String = "tt\d\d\d\d\d\d\d" + Private Const IMG_PATTERN As String = "<img src=""(?<thumb>.*?)"" width=""\d{1,3}"" height=""\d{1,3}"" border="".{1,3}"">" + Private Const MOVIE_TITLE_PATTERN As String = "(?<=<(title)>).*(?=<\/\1>)" + Private Const TABLE_PATTERN As String = "<table.*?>\n?(.*?)</table>" + Private Const TD_PATTERN_1 As String = "<td\sclass=""nm"">(.*?)</td>" + Private Const TD_PATTERN_2 As String = "(?<=<td\sclass=""char"">)(.*?)(?=</td>)(\s\(.*?\))?" + Private Const TD_PATTERN_3 As String = "<td\sclass=""hs"">(.*?)</td>" + Private Const TD_PATTERN_4 As String = "<td>(?<title>.*?)</td>" + Private Const TITLE_PATTERN As String = "<a\shref=[""""'](?<url>.*?)[""""'].*?>(?<name>.*?)</a>((\s)+?(\((?<year>\d{4})(\/.*?)?\)))?((\s)+?(\((?<type>.*?)\)))?" + Private Const TR_PATTERN As String = "<tr\sclass="".*?"">(.*?)</tr>" + + Private sPoster As String + +#End Region 'Fields + +#Region "Enumerations" + + Private Enum SearchType + Movies = 0 + Details = 1 + SearchDetails = 2 + End Enum + +#End Region 'Enumerations + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + + Public Event SearchResultsDownloaded(ByVal mResults As IMDB.MovieSearchResults) + +#End Region 'Events + +#Region "Methods" + + Public Sub CancelAsync() + If bwIMDB.IsBusy Then bwIMDB.CancelAsync() + + While bwIMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Function GetMovieInfo(ByVal strID As String, ByRef IMDBMovie As MediaContainers.Movie, ByVal FullCrew As Boolean, ByVal FullCast As Boolean, ByVal GetPoster As Boolean, ByVal Options As Structures.ScrapeOptions, ByVal IsSearch As Boolean) As Boolean + Try + Dim ofdbTitle As String = String.Empty + Dim ofdbOutline As String = String.Empty + Dim ofdbPlot As String = String.Empty + Dim ofdbGenre As String = String.Empty + + If bwIMDB.CancellationPending Then Return Nothing + + If (UseOFDBTitle AndAlso Options.bTitle) OrElse (UseOFDBOutline AndAlso Options.bOutline) OrElse _ + (UseOFDBPlot AndAlso Options.bPlot) OrElse (UseOFDBGenre AndAlso Options.bGenre) Then + Dim OFDBScrape As New OFDB(strID, IMDBMovie) + If UseOFDBTitle AndAlso Options.bTitle Then ofdbTitle = OFDBScrape.Title + If UseOFDBOutline AndAlso Options.bOutline Then ofdbOutline = OFDBScrape.Outline + If UseOFDBPlot AndAlso Options.bPlot Then ofdbPlot = OFDBScrape.Plot + If UseOFDBGenre AndAlso Options.bGenre Then ofdbGenre = OFDBScrape.Genre + End If + + If bwIMDB.CancellationPending Then Return Nothing + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/combined")) + sHTTP = Nothing + + If bwIMDB.CancellationPending Then Return Nothing + + Dim sPlot As New HTTP + Dim PlotHtml As String = sPlot.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/plotsummary")) + sPlot = Nothing + + IMDBMovie.IMDBID = strID + + If bwIMDB.CancellationPending Then Return Nothing + + Dim OriginalTitle As String = Regex.Match(HTML, MOVIE_TITLE_PATTERN).ToString + If Options.bTitle Then + Dim oldOTitle As String = IMDBMovie.OriginalTitle + IMDBMovie.OriginalTitle = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(OriginalTitle, ".*(?=\s\(\d+.*?\))").ToString)).Trim + If String.IsNullOrEmpty(IMDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + If Not String.IsNullOrEmpty(ofdbTitle) Then + IMDBMovie.Title = ofdbTitle.Trim + Else + If Not String.IsNullOrEmpty(Master.eSettings.ForceTitle) Then + IMDBMovie.Title = GetForcedTitle(strID, IMDBMovie.OriginalTitle) + Else + IMDBMovie.Title = IMDBMovie.OriginalTitle.Trim + End If + End If + If String.IsNullOrEmpty(oldOTitle) OrElse Not oldOTitle = IMDBMovie.OriginalTitle Then + IMDBMovie.SortTitle = String.Empty + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If GetPoster Then + sPoster = Regex.Match(Regex.Match(HTML, "(?<=\b(name=""poster"")).*\b[</a>]\b").ToString, "(?<=\b(src=)).*\b(?=[</a>])").ToString.Replace("""", String.Empty).Replace("/></", String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bYear Then IMDBMovie.Year = Regex.Match(OriginalTitle, "(?<=\()\d+(?=.*\))", RegexOptions.RightToLeft).ToString + + Dim D, W, tempD As Integer + + If Options.bMPAA AndAlso (String.IsNullOrEmpty(IMDBMovie.MPAA) OrElse Not Master.eSettings.LockMPAA) Then + tempD = If(HTML.IndexOf("<h5><a href=""/mpaa"">MPAA</a>:</h5>") > 0, HTML.IndexOf("<h5><a href=""/mpaa"">MPAA</a>:</h5>"), 0) + + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + + W = If(D > 0, HTML.IndexOf("</div", D), 0) + + IMDBMovie.MPAA = If(D > 0 AndAlso W > 0, Web.HttpUtility.HtmlDecode(HTML.Substring(D, W - D).Remove(0, 26)).Trim(), String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bCert AndAlso (String.IsNullOrEmpty(IMDBMovie.Certification) OrElse Not Master.eSettings.LockMPAA) Then + 'get certifications + D = HTML.IndexOf("<h5>Certification:</h5>") + + If D > 0 Then + W = HTML.IndexOf("</div>", D) + Dim rCert As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN_3) + + If rCert.Count > 0 Then + Dim Cert = From M In rCert Select N = String.Format("{0}:{1}", DirectCast(M, Match).Groups(1).ToString.Trim, DirectCast(M, Match).Groups(2).ToString.Trim) Order By N Descending Where N.Contains(Master.eSettings.CertificationLang) + + If Not String.IsNullOrEmpty(Master.eSettings.CertificationLang) Then + If Cert.Count > 0 Then + IMDBMovie.Certification = Cert(0).ToString.Replace("West", String.Empty).Trim + If Options.bMPAA AndAlso Master.eSettings.UseCertForMPAA AndAlso (Not Master.eSettings.CertificationLang = "USA" OrElse (Master.eSettings.CertificationLang = "USA" AndAlso String.IsNullOrEmpty(IMDBMovie.MPAA))) Then + IMDBMovie.MPAA = If(Master.eSettings.CertificationLang = "USA", StringUtils.USACertToMPAA(IMDBMovie.Certification), If(Master.eSettings.OnlyValueForCert, IMDBMovie.Certification.Split(Convert.ToChar(":"))(1), IMDBMovie.Certification)) + End If + + + Else + 'No FSK Rating was found -> Alternative: Set USA Rating instead as fallback, MPAA will be converted to FSK, Certification from USA will be used, so people can see that US info was used! + If Master.eSettings.UseMPAAForFSK Then + Try + If Master.eSettings.CertificationLang = "Germany" AndAlso (IMDBMovie.MPAA.ToLower.Contains("usa") Or IMDBMovie.MPAA.ToLower.Contains("rated")) Then + Dim LANGRATING As String = "USA" + Dim Cert2 = From M In rCert Select N = String.Format("{0}:{1}", DirectCast(M, Match).Groups(1).ToString.Trim, DirectCast(M, Match).Groups(2).ToString.Trim) Order By N Descending Where N.Contains(LANGRATING) + If Cert2.Count > 0 Then + IMDBMovie.Certification = Cert2(0).ToString.Replace("West", String.Empty).Trim + If Options.bMPAA AndAlso Master.eSettings.UseCertForMPAA Then + If IMDBMovie.MPAA.ToLower.Contains("usa:g") Or IMDBMovie.MPAA.ToLower.Contains("rated g") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:0" + Else + IMDBMovie.MPAA = "0" + End If + + ElseIf IMDBMovie.MPAA.ToLower.Contains("usa:pg-13") Or IMDBMovie.MPAA.ToLower.Contains("rated pg-13") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:16" + Else + IMDBMovie.MPAA = "16" + End If + + ElseIf IMDBMovie.MPAA.ToLower.Contains("usa:pg") Or IMDBMovie.MPAA.ToLower.Contains("rated pg") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:12" + Else + IMDBMovie.MPAA = "12" + End If + + ElseIf IMDBMovie.Certification.ToLower.Contains("usa:r") Or IMDBMovie.Certification.ToLower.Contains("rated r") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:18" + Else + IMDBMovie.MPAA = "18" + End If + + ElseIf IMDBMovie.Certification.ToLower.Contains("usa:nc-17") Or IMDBMovie.Certification.ToLower.Contains("rated nc") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:18" + Else + IMDBMovie.MPAA = "18" + End If + + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End If + End If + + + Else + + IMDBMovie.Certification = Strings.Join(Cert.ToArray, " / ").Trim + + + End If + End If + End If + + If String.IsNullOrEmpty(IMDBMovie.Certification) AndAlso Not String.IsNullOrEmpty(IMDBMovie.MPAA) Then + IMDBMovie.Certification = IMDBMovie.MPAA + End If + + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bRelease Then + Dim RelDate As Date + Dim sRelDate As String = Regex.Match(HTML, "\d+\s\w+\s\d\d\d\d\s").ToString.Trim + If Not sRelDate = String.Empty Then + If Date.TryParse(sRelDate, RelDate) Then + IMDBMovie.ReleaseDate = Strings.FormatDateTime(RelDate, DateFormat.ShortDate).ToString + End If + Else + IMDBMovie.ReleaseDate = Nothing + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bRating AndAlso (String.IsNullOrEmpty(IMDBMovie.Rating) OrElse Not Master.eSettings.LockRating) Then + Dim RegexRating As String = Regex.Match(HTML, "\b\d\W\d/\d\d").ToString + If String.IsNullOrEmpty(RegexRating) Then + IMDBMovie.Rating = String.Empty + Else + IMDBMovie.Rating = RegexRating.Split(Convert.ToChar("/")).First.Trim + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'trailer + If Options.bTrailer AndAlso (String.IsNullOrEmpty(IMDBMovie.Trailer) OrElse Not Master.eSettings.LockTrailer) Then + 'Get first IMDB trailer if possible + Dim trailers As List(Of String) = GetTrailers(IMDBMovie.IMDBID) + 'Dim TMDB As New TMDB.Scraper + 'Dim YT As String = TMDB.GetTrailers(IMDBMovie.IMDBID) + + 'Dim sTrailerUrl As String = Regex.Match(HTML, "href=""(.*?/video/imdb/vi.*?)""").Groups(1).Value.Trim + 'If Not sTrailerUrl = String.Empty Then + 'Dim sTrailerURL2 As String = String.Empty + 'sTrailerUrl = String.Concat("http://", IMDBURL, sTrailerUrl, "player") + 'Dim HTTPTrailer As New HTTP + 'Dim HtmlTrailer As String = HTTPTrailer.DownloadData(sTrailerUrl) + 'HTTPTrailer = Nothing + + 'sTrailerUrl = Regex.Match(HtmlTrailer, "so.addVariable\(""id"", ""(.*?)""\);").Groups(1).Value.Trim + 'If sTrailerUrl = String.Empty Then + 'sTrailerURL2 = Regex.Match(HtmlTrailer, "so.addVariable\(""file"", ""(.*?)""\);").Groups(1).Value.Trim + 'Else + 'sTrailerURL2 = String.Concat(Regex.Match(HtmlTrailer, "so.addVariable\(""file"", ""(.*?)""\);").Groups(1).Value.Trim, sTrailerUrl) + 'End If + 'IMDBMovie.Trailer = Web.HttpUtility.UrlDecode(sTrailerURL2) + 'End If + IMDBMovie.Trailer = trailers.FirstOrDefault() + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bVotes Then IMDBMovie.Votes = Regex.Match(HTML, "class=""tn15more"">([0-9,]+) votes</a>").Groups(1).Value.Trim + + 'Top250 + 'ie: <a href="/chart/top?tt0167260">Top 250: #13</a> + If Options.bTop250 Then IMDBMovie.Top250 = Regex.Match(HTML, String.Concat("/chart/top\?tt", IMDBMovie.IMDBID, """>Top 250: #([0-9]+)</a>")).Groups(1).Value.Trim + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bCast Then + 'Find all cast of the movie + 'Match the table only 1 time + Dim ActorsTable As String = Regex.Match(HTML, ACTORTABLE_PATTERN).ToString + Dim ThumbsSize = AdvancedSettings.GetSetting("ActorThumbsSize", "SY275_SX400") + + Dim rCast As MatchCollection = Regex.Matches(ActorsTable, TR_PATTERN) + + Dim Cast1 = From M In rCast _ + Let m1 = Regex.Match(Regex.Match(M.ToString, TD_PATTERN_1).ToString, HREF_PATTERN) _ + Let m2 = Regex.Match(M.ToString, TD_PATTERN_2).ToString _ + Let m3 = Regex.Match(Regex.Match(M.ToString, TD_PATTERN_3).ToString, IMG_PATTERN) _ + Select New MediaContainers.Person(Web.HttpUtility.HtmlDecode(m1.Groups("name").ToString.Trim), _ + Web.HttpUtility.HtmlDecode(m2.ToString.Trim), _ + If(m3.Groups("thumb").ToString.IndexOf("addtiny") > 0 OrElse m3.Groups("thumb").ToString.IndexOf("no_photo") > 0, String.Empty, Strings.Replace(Web.HttpUtility.HtmlDecode(m3.Groups("thumb").ToString.Trim), _ + "._SX23_SY30_.jpg", String.Concat("._", ThumbsSize, "_.jpg")))) Take If(Master.eSettings.ActorLimit > 0, Master.eSettings.ActorLimit, 999999) + + If Master.eSettings.CastImagesOnly Then + Cast1 = Cast1.Where(Function(p As MediaContainers.Person) (Not String.IsNullOrEmpty(p.Thumb))) + End If + + Dim Cast As List(Of MediaContainers.Person) = Cast1.ToList + + 'Clean up the actors list + For Each Ps As MediaContainers.Person In Cast + For Each sMatch As Match In Regex.Matches(Ps.Role, HREF_PATTERN) + Ps.Role = Ps.Role.Replace(sMatch.Value, sMatch.Groups("name").Value.ToString.Trim) + Next + ' Dim a_patterRegex = Regex.Match(Ps.Role, HREF_PATTERN) + ' If a_patterRegex.Success Then Ps.Role = a_patterRegex.Groups("name").ToString.Trim + Next + + IMDBMovie.Actors = Cast + End If + + If bwIMDB.CancellationPending Then Return Nothing + + D = 0 : W = 0 + + If Options.bTagline AndAlso (String.IsNullOrEmpty(IMDBMovie.Tagline) OrElse Not Master.eSettings.LockTagline) Then + + tempD = If(HTML.IndexOf("<h5>Tagline:</h5>") > 0, HTML.IndexOf("<h5>Tagline:</h5>"), 0) + + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + + Dim lHtmlIndexOf As Integer = If(D > 0, HTML.IndexOf("<a class=""tn15more inline""", D), 0) + Dim TagLineEnd As Integer = If(lHtmlIndexOf > 0, lHtmlIndexOf, 0) + If D > 0 Then W = If(TagLineEnd > 0, TagLineEnd, HTML.IndexOf("</div>", D)) + + IMDBMovie.Tagline = If(D > 0 AndAlso W > 0, Web.HttpUtility.HtmlDecode(HTML.Substring(D, W - D).Replace("<h5>Tagline:</h5>", String.Empty).Split(vbCrLf.ToCharArray)(1)).Trim, String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bDirector Then + 'Get the directors + D = If(HTML.IndexOf("<h5>Director:</h5>") > 0, HTML.IndexOf("<h5>Director:</h5>"), HTML.IndexOf("<h5>Directors:</h5>")) + W = If(D > 0, HTML.IndexOf("</div>", D), 0) + 'got any director(s) ? + If D > 0 AndAlso Not W <= 0 Then + 'get only the first director's name + Dim rDir As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + Dim Dir = From M In rDir Where Not DirectCast(M, Match).Groups("name").ToString.Contains("more") _ + Select Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + + If Dir.Count > 0 Then + IMDBMovie.Director = Strings.Join(Dir.ToArray, " / ").Trim + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get countries of the movie + If Options.bCountry Then + 'Get the countries + D = If(HTML.IndexOf("<h5>Country:</h5>") > 0, HTML.IndexOf("<h5>Country:</h5>"), HTML.IndexOf("<h5>Countries:</h5>")) + W = If(D > 0, HTML.IndexOf("</div>", D), 0) + 'got any country ? + If D > 0 AndAlso Not W <= 0 Then + 'get only the first country's name + Dim rCou As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + Dim Cou = From M In rCou Where Not DirectCast(M, Match).Groups("name").ToString.Contains("more") _ + Select Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + + If Cou.Count > 0 Then + + 'fix for display country flag in XBMC! + If Strings.Join(Cou.ToArray, " / ").Trim.ToUpper.Contains("USA") Then + IMDBMovie.Country = "United States of America" + ElseIf Strings.Join(Cou.ToArray, " / ").Trim.ToUpper.Contains("UK") Then + IMDBMovie.Country = "United Kingdom" + Else + IMDBMovie.Country = Strings.Join(Cou.ToArray, " / ").Trim() + End If + + End If + End If + + + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get genres of the movie + If Options.bGenre AndAlso (String.IsNullOrEmpty(IMDBMovie.Genre) OrElse Not Master.eSettings.LockGenre) Then + If Not String.IsNullOrEmpty(ofdbGenre) Then + IMDBMovie.Genre = ofdbGenre + Else + D = 0 : W = 0 + D = HTML.IndexOf("<h5>Genre:</h5>") + 'Check if doesnt find genres + If D > 0 Then + W = HTML.IndexOf("</div>", D) + + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) Where Not N.Contains("more") Take If(Master.eSettings.GenreLimit > 0, Master.eSettings.GenreLimit, 999999) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + tGenre = StringUtils.GenreFilter(tGenre) + If Not String.IsNullOrEmpty(tGenre) Then + IMDBMovie.Genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bOutline AndAlso (String.IsNullOrEmpty(IMDBMovie.Outline) OrElse Not Master.eSettings.LockOutline) Then + + If Not String.IsNullOrEmpty(ofdbOutline) Then + IMDBMovie.Outline = ofdbOutline + Else + 'Get the Plot Outline + D = 0 : W = 0 + + Try + If IMDBMovie.Title.Contains("(VG)") Then + D = If(HTML.IndexOf("<h5>Plot Summary:</h5>") > 0, HTML.IndexOf("<h5>Plot Summary:</h5>"), HTML.IndexOf("<h5>Tagline:</h5>")) + If D > 0 Then W = HTML.IndexOf("</div>", D) + Else + tempD = If(HTML.IndexOf("<h5>Plot:</h5>") > 0, HTML.IndexOf("<h5>Plot:</h5>"), HTML.IndexOf("<h5>Plot Summary:</h5>")) + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + If D <= 0 Then D = HTML.IndexOf("<h5>Plot Synopsis:</h5>") + If D > 0 Then + W = HTML.IndexOf("<a class=", D) + If W > 0 Then + W = HTML.IndexOf("</div>", D) + Else + IMDBMovie.Outline = String.Empty + GoTo mplot + End If + Else + IMDBMovie.Outline = String.Empty + GoTo mPlot 'This plot synopsis is empty + End If + End If + Dim PlotOutline As String = HTML.Substring(D, W - D).Remove(0, 26) + + PlotOutline = Web.HttpUtility.HtmlDecode(If(PlotOutline.Contains("is empty") OrElse PlotOutline.Contains("View full synopsis") _ + , String.Empty, PlotOutline.Replace("|", String.Empty).Replace("»", String.Empty)).Trim) + 'check if outline has links to other IMDB entry + If Not String.IsNullOrEmpty(PlotOutline) Then + For Each rMatch As Match In Regex.Matches(PlotOutline, HREF_PATTERN_4) + PlotOutline = PlotOutline.Replace(rMatch.Value, rMatch.Groups("text").Value.Trim) + Next + IMDBMovie.Outline = Regex.Replace(PlotOutline, HREF_PATTERN, String.Empty).Trim + Else + IMDBMovie.Outline = String.Empty + End If + + Catch ex As Exception + IMDBMovie.Outline = String.Empty + End Try + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + +mPlot: + 'Get the full Plot + If Options.bPlot AndAlso (String.IsNullOrEmpty(IMDBMovie.Plot) OrElse Not Master.eSettings.LockPlot) Then + If Not String.IsNullOrEmpty(ofdbPlot) Then + IMDBMovie.Plot = ofdbPlot + Else + Dim FullPlotP As String = Regex.Match(PlotHtml, "<p class=.plotpar.>(.*?)</p>", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline).Groups(1).Value.ToString.Trim + Dim FullPlotI As String = Regex.Match(PlotHtml, "<p class=.plotpar.>(.*?)<i>", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline).Groups(1).Value.ToString.Trim + Dim FullPlot As String = If(FullPlotI.Length < FullPlotP.Length, FullPlotI, FullPlotP) + If Not String.IsNullOrEmpty(FullPlot) Then + For Each rMatch As Match In Regex.Matches(FullPlot, HREF_PATTERN_4) + FullPlot = FullPlot.Replace(rMatch.Value, rMatch.Groups("text").Value.Trim) + Next + IMDBMovie.Plot = Web.HttpUtility.HtmlDecode(FullPlot.Replace("|", String.Empty)).Trim + End If + + End If + + If Master.eSettings.OutlineForPlot AndAlso String.IsNullOrEmpty(IMDBMovie.Plot) AndAlso Not String.IsNullOrEmpty(IMDBMovie.Outline) Then + IMDBMovie.Plot = IMDBMovie.Outline + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get the movie duration + If Options.bRuntime Then IMDBMovie.Runtime = Web.HttpUtility.HtmlDecode(Regex.Match(HTML, "<h5>Runtime:</h5>[^0-9]*([^<]*)").Groups(1).Value.Trim) + + 'Get Production Studio + If Options.bStudio AndAlso (String.IsNullOrEmpty(IMDBMovie.Studio) OrElse Not Master.eSettings.LockStudio) Then + D = 0 : W = 0 + If FullCrew Then + D = HTML.IndexOf("<b class=""blackcatheader"">Production Companies</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + 'only get the first one + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(P1, Match).Groups("name").ToString = String.Empty _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) Take 1 + IMDBMovie.Studio = Ps(0).ToString.Trim + End If + Else + D = HTML.IndexOf("<h5>Company:</h5>") + If D > 0 Then W = HTML.IndexOf("</div>", D) + If D > 0 AndAlso W > 0 Then + IMDBMovie.Studio = Web.HttpUtility.HtmlDecode(Regex.Match(HTML.Substring(D, W - D), HREF_PATTERN).Groups("name").ToString.Trim) + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get Writers + If Options.bWriters Then + D = 0 : W = 0 + D = HTML.IndexOf("<h5>Writer") + If D > 0 Then W = HTML.IndexOf("</div>", D) + If D > 0 AndAlso W > 0 Then + Dim q = From M In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(M, Match).Groups("name").ToString.Trim = "more" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim = "(more)" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim = "WGA" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim.Contains("see more") _ + Select Writer = Web.HttpUtility.HtmlDecode(String.Concat(DirectCast(M, Match).Groups("name").ToString, If(FullCrew, " (writer)", String.Empty))) + + If q.Count > 0 Then + IMDBMovie.OldCredits = Strings.Join(q.ToArray, " / ").Trim + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get All Other Info + If FullCrew Then + + D = 0 : W = 0 + D = HTML.IndexOf("Directed by</a></h5>") + If D > 0 Then W = HTML.IndexOf("</body>", D) + If D > 0 AndAlso W > 0 Then + Dim qTables As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), TABLE_PATTERN) + + For Each M As Match In qTables + + If bwIMDB.CancellationPending Then Return Nothing + + 'Producers + If Options.bProducers AndAlso M.ToString.Contains("Produced by</a></h5>") Then + Dim Pr = From Po In Regex.Matches(M.ToString, "<td\svalign=""top"">(.*?)</td>") _ + Where Not Po.ToString.Contains(String.Concat("http://", IMDBURL, "/Glossary/")) _ + Let P1 = Regex.Match(Po.ToString, HREF_PATTERN_2) _ + Where Not String.IsNullOrEmpty(P1.Groups("name").ToString) _ + Select Producer = Web.HttpUtility.HtmlDecode(String.Concat(P1.Groups("name").ToString, " (producer)")) + + If Pr.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Pr.ToArray, " / ").Trim) + End If + End If + + 'Music by + If Options.bMusicBy AndAlso M.ToString.Contains("Original Music by</a></h5>") Then + Dim Mu = From Mo In Regex.Matches(M.ToString, "<td\svalign=""top"">(.*?)</td>") _ + Let M1 = Regex.Match(Mo.ToString, HREF_PATTERN) _ + Where Not String.IsNullOrEmpty(M1.Groups("name").ToString) _ + Select Musician = Web.HttpUtility.HtmlDecode(String.Concat(M1.Groups("name").ToString, " (music by)")) + + If Mu.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Mu.ToArray, " / ").Trim) + End If + End If + + Next + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Special Effects + If Options.bOtherCrew Then + D = HTML.IndexOf("<b class=""blackcatheader"">Special Effects</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not String.IsNullOrEmpty(DirectCast(P1, Match).Groups("name").ToString) _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) + If Ps.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Ps.ToArray, " / ").Trim) + End If + End If + End If + End If + + Return True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Function GetMovieStudios(ByVal strID As String) As List(Of String) + Dim alStudio As New List(Of String) + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/combined")) + sHTTP = Nothing + + Dim D, W As Integer + + D = HTML.IndexOf("<b class=""blackcatheader"">Production Companies</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(P1, Match).Groups("name").ToString = String.Empty _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) + alStudio.AddRange(Ps.ToArray) + End If + + Return alStudio + End Function + + Public Function GetSearchMovieInfo(ByVal sMovieName As String, ByRef dbMovie As Structures.DBMovie, ByVal iType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As MediaContainers.Movie + Dim r As MovieSearchResults = SearchMovie(sMovieName) + Dim b As Boolean = False + Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie + + 'r.PopularTitles.Sort() + 'r.ExactMatches.Sort() + 'r.PartialMatches.Sort() + + Try + Select Case iType + Case Enums.ScrapeType.FullAsk, Enums.ScrapeType.UpdateAsk, Enums.ScrapeType.NewAsk, Enums.ScrapeType.MarkAsk, Enums.ScrapeType.FilterAsk + + If r.ExactMatches.Count = 1 Then 'AndAlso r.PopularTitles.Count = 0 AndAlso r.PartialMatches.Count = 0 Then 'redirected to imdb info page + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count = 1 AndAlso r.PopularTitles(0).Lev <= 5 Then + b = GetMovieInfo(r.PopularTitles.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.ExactMatches.Count = 1 AndAlso r.ExactMatches(0).Lev <= 5 Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + Master.tmpMovie.Clear() + Using dIMDB As New dlgIMDBSearchResults + dIMDB.IMDBURL = IMDBURL + If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + b = False + Else + b = GetMovieInfo(Master.tmpMovie.IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + Else + b = False + End If + End Using + End If + Case Enums.ScrapeType.FullAuto, Enums.ScrapeType.UpdateAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.SingleScrape, Enums.ScrapeType.FilterAuto + + 'check if ALL results are over lev value + Dim useAnyway As Boolean = False + If ((r.PopularTitles.Count > 0 AndAlso r.PopularTitles(0).Lev > 5) OrElse r.PopularTitles.Count = 0) AndAlso _ + ((r.ExactMatches.Count > 0 AndAlso r.ExactMatches(0).Lev > 5) OrElse r.ExactMatches.Count = 0) AndAlso _ + ((r.PartialMatches.Count > 0 AndAlso r.PartialMatches(0).Lev > 5) OrElse r.PartialMatches.Count = 0) Then + useAnyway = True + End If + Dim exactHaveYear As Integer = FindYear(dbMovie.Filename, r.ExactMatches) + Dim popularHaveYear As Integer = FindYear(dbMovie.Filename, r.PopularTitles) + 'it seems "popular matches" is a better result than "exact matches" ..... nope + 'If r.ExactMatches.Count = 1 AndAlso r.PopularTitles.Count = 0 AndAlso r.PartialMatches.Count = 0 Then 'redirected to imdb info page + ' b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf (popularHaveYear >= 0 OrElse exactHaveYear = -1) AndAlso r.PopularTitles.Count > 0 AndAlso (r.PopularTitles(If(popularHaveYear >= 0, popularHaveYear, 0)).Lev <= 5 OrElse useAnyway) Then + ' b = GetMovieInfo(r.PopularTitles.Item(If(popularHaveYear >= 0, popularHaveYear, 0)).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf r.ExactMatches.Count > 0 AndAlso (r.ExactMatches(If(exactHaveYear >= 0, exactHaveYear, 0)).Lev <= 5 OrElse useAnyway) Then + ' b = GetMovieInfo(r.ExactMatches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf r.PartialMatches.Count > 0 Then + ' b = GetMovieInfo(r.PartialMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'End If + If r.ExactMatches.Count = 1 Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.ExactMatches.Count > 1 AndAlso exactHaveYear >= 0 Then + b = GetMovieInfo(r.ExactMatches.Item(exactHaveYear).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count > 0 AndAlso popularHaveYear >= 0 Then + b = GetMovieInfo(r.PopularTitles.Item(popularHaveYear).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCrew, False, Options, True) + ElseIf r.ExactMatches.Count > 0 AndAlso (r.ExactMatches(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count > 0 AndAlso (r.PopularTitles(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.PopularTitles.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PartialMatches.Count > 0 AndAlso (r.PartialMatches(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.PartialMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + End Select + + If b Then + Return imdbMovie + Else + Return New MediaContainers.Movie + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New MediaContainers.Movie + End Try + End Function + + Private Function FindYear(ByVal tmpname As String, ByVal lst As List(Of MediaContainers.Movie)) As Integer + Dim tmpyear As String = "" + Dim i As Integer + Dim ret As Integer = -1 + tmpname = Path.GetFileNameWithoutExtension(tmpname) + tmpname = tmpname.Replace(".", " ").Trim.Replace("(", " ").Replace(")", "").Trim + i = tmpname.LastIndexOf(" ") + If i >= 0 Then + tmpyear = tmpname.Substring(i + 1, tmpname.Length - i - 1) + If IsNumeric(tmpyear) AndAlso Convert.ToInt32(tmpyear) > 1950 Then 'let's assume there are no movies older then 1950 + For c = 0 To lst.Count - 1 + If lst(c).Year = tmpyear Then + ret = c + Exit For + End If + Next + End If + End If + Return ret + End Function + + Public Sub GetSearchMovieInfoAsync(ByVal imdbID As String, ByVal IMDBMovie As MediaContainers.Movie, ByVal Options As Structures.ScrapeOptions) + Try + If Not bwIMDB.IsBusy Then + bwIMDB.WorkerReportsProgress = False + bwIMDB.WorkerSupportsCancellation = True + bwIMDB.RunWorkerAsync(New Arguments With {.Search = SearchType.SearchDetails, _ + .Parameter = imdbID, .IMDBMovie = IMDBMovie, .Options = Options}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + + Public Sub SearchMovieAsync(ByVal sMovie As String, ByVal filterOptions As Structures.ScrapeOptions) + Try + If Not bwIMDB.IsBusy Then + bwIMDB.WorkerReportsProgress = False + bwIMDB.WorkerSupportsCancellation = True + bwIMDB.RunWorkerAsync(New Arguments With {.Search = SearchType.Movies, .Parameter = sMovie, .Options = filterOptions}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + Try + Select Case Args.Search + Case SearchType.Movies + Dim r As MovieSearchResults = SearchMovie(Args.Parameter) + e.Result = New Results With {.ResultType = SearchType.Movies, .Result = r} + Case SearchType.SearchDetails + Dim s As Boolean = GetMovieInfo(Args.Parameter, Args.IMDBMovie, False, False, True, Args.Options, True) + e.Result = New Results With {.ResultType = SearchType.SearchDetails, .Success = s} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub BW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDB.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.ResultType + Case SearchType.Movies + RaiseEvent SearchResultsDownloaded(DirectCast(Res.Result, MovieSearchResults)) + Case SearchType.SearchDetails + Dim movieInfo As MovieSearchResults = DirectCast(Res.Result, MovieSearchResults) + RaiseEvent SearchMovieInfoDownloaded(sPoster, Res.Success) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Function GetForcedTitle(ByVal strID As String, ByVal oTitle As String) As String + Dim fTitle As String = oTitle + + Try + If bwIMDB.CancellationPending Then Return Nothing + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/releaseinfo#akas")) + sHTTP = Nothing + + Dim D, W As Integer + + D = HTML.IndexOf("<h5><a name=""akas"">Also Known As (AKA)</a></h5>") + + If D > 0 Then + W = HTML.IndexOf("</table>", D) + Dim rTitles As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), TD_PATTERN_4, RegexOptions.Multiline Or RegexOptions.IgnorePatternWhitespace) + + If rTitles.Count > 0 Then + For i As Integer = 1 To rTitles.Count - 1 Step 2 + If rTitles(i).Value.ToString.Contains(Master.eSettings.ForceTitle) AndAlso Not rTitles(i).Value.ToString.Contains(String.Concat(Master.eSettings.ForceTitle, " (working title)")) AndAlso Not rTitles(i).Value.ToString.Contains(String.Concat(Master.eSettings.ForceTitle, " (fake working title)")) Then + fTitle = CleanTitle(Web.HttpUtility.HtmlDecode(rTitles(i - 1).Groups("title").Value.ToString.Trim)) + Exit For + End If + Next + End If + + End If + + Return fTitle + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return fTitle + End Try + End Function + + Private Function GetMovieID(ByVal strObj As String) As String + Return Regex.Match(strObj, IMDB_ID_REGEX).ToString.Replace("tt", String.Empty) + End Function + + Private Function SearchMovie(ByVal sMovie As String) As MovieSearchResults + Try + + Dim D, W As Integer + Dim R As New MovieSearchResults + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft")) + Dim HTMLp As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&ref_=fn_tt_pop")) + Dim HTMLm As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&ref_=fn_ft")) + Dim HTMLe As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&exact=true&ref_=fn_tt_ex")) + Dim rUri As String = sHTTP.ResponseUri + sHTTP = Nothing + + 'Check if we've been redirected straight to the movie page + If Regex.IsMatch(rUri, IMDB_ID_REGEX) Then + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(Regex.Match(rUri, IMDB_ID_REGEX).ToString, _ + StringUtils.ProperCase(sMovie), Regex.Match(Regex.Match(HTML, MOVIE_TITLE_PATTERN).ToString, "(?<=\()\d+(?=.*\))").ToString, 0) + R.ExactMatches.Add(lNewMovie) + Return R + End If + + 'popular titles + D = HTMLp.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mPartial + W = HTMLp.IndexOf("</table>", D) + 8 + + Dim Table As String = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString + + Dim qPopular = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.PopularTitles = qPopular.ToList +mPartial: + + D = HTMLm.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mExact + W = HTMLm.IndexOf("</table>", D) + 8 + + Table = Regex.Match(HTMLm.Substring(D, W - D), TABLE_PATTERN).ToString + Dim qpartial = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.PartialMatches = qpartial.ToList + 'mApprox: + + ' 'Now process "Approx Matches" and merge both Partial and Approx matches + ' D = HTML.IndexOf("Titles (Approx Matches)") + ' If D <= 0 Then GoTo mExact + ' W = HTML.IndexOf("</table>", D) + 8 + + ' Table = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString + + ' Dim qApprox = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + ' Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + ' Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + ' Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + ' If Not IsNothing(R.PartialMatches) Then + ' R.PartialMatches = R.PartialMatches.Union(qApprox.ToList).ToList + ' Else + ' R.PartialMatches = qApprox.ToList + ' End If + +mExact: + + D = HTMLe.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mResult + W = HTMLe.IndexOf("</table>", D) + 8 + + Table = String.Empty + Table = Regex.Match(HTMLe.Substring(D, W - D), TABLE_PATTERN).ToString + + Dim qExact = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString.ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.ExactMatches = qExact.ToList + +mResult: + Return R + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Nothing + End Try + End Function + + Public Function GetTrailers(imdbID As String) As List(Of String) + Dim TrailerList As New List(Of String) + Dim TrailerNumber As Integer = 0 + Dim Links As MatchCollection + Dim trailerPage As String + Dim trailerUrl As String + Dim Link As Match + Dim currPage As Integer = 0 + + Dim WebPage As New HTTP + Dim _ImdbTrailerPage As String = String.Empty + + _ImdbTrailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", imdbID, "/videogallery/content_type-Trailer")) + If _ImdbTrailerPage.ToLower.Contains("page not found") Then + _ImdbTrailerPage = String.Empty + End If + + If Not String.IsNullOrEmpty(_ImdbTrailerPage) Then + Link = Regex.Match(_ImdbTrailerPage, "of [0-9]{1,3}") + + If Link.Success Then + TrailerNumber = Convert.ToInt32(Link.Value.Substring(3)) + + If TrailerNumber > 0 Then + currPage = Convert.ToInt32(Math.Ceiling(TrailerNumber / 10)) + + For i As Integer = 1 To currPage + If Not i = 1 Then + _ImdbTrailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", imdbID, "/videogallery/content_type-Trailer?page=", i)) + End If + + Links = Regex.Matches(_ImdbTrailerPage, "screenplay/(vi[0-9]+)/") + Dim linksCollection As String() = From m As Object In Links Select CType(m, Match).Value Distinct.ToArray() + + Links = Regex.Matches(_ImdbTrailerPage, "imdb/(vi[0-9]+)/") + linksCollection = linksCollection.Concat(From m As Object In Links Select CType(m, Match).Value Distinct.ToArray()).ToArray + + For Each value As String In linksCollection + If value.Contains("screenplay") Then + trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player")) + trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + TrailerList.Add(trailerUrl) + End If + Else + ''480p Trailer + 'trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player?uff=2")) + 'trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + 'If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + ' Me._TrailerList.Add(trailerUrl) + 'End If + + ''720p Trailer + 'trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player?uff=3")) + 'trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + 'If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + ' Me._TrailerList.Add(trailerUrl) + 'End If + End If + Next + Next + End If + End If + End If + Return TrailerList + End Function + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim FullCast As Boolean + Dim FullCrew As Boolean + Dim IMDBMovie As MediaContainers.Movie + Dim Options As Structures.ScrapeOptions + Dim Parameter As String + Dim Search As SearchType + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultType As SearchType + Dim Success As Boolean + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TVDB.Poster/Scraper/clsScrapeIMPA.vb b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeIMPA.vb new file mode 100644 index 0000000..5f052ed --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeIMPA.vb @@ -0,0 +1,179 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMPA + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwIMPA As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwIMPA.IsBusy Then Me.bwIMPA.CancelAsync() + + While Me.bwIMPA.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMPA.IsBusy Then + bwIMPA.WorkerSupportsCancellation = True + bwIMPA.WorkerReportsProgress = True + bwIMPA.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMPAPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMPA.CancellationPending Then Return Nothing + Dim sURL As String = GetLink(imdbID) + + If Not String.IsNullOrEmpty(sURL) Then + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If bwIMPA.CancellationPending Then Return Nothing + + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + + Dim PosterURL As String + + For Each mPoster As Match In mcPoster + If bwIMPA.CancellationPending Then Return Nothing + PosterURL = Strings.Replace(String.Format("{0}/{1}", sURL.Substring(0, sURL.LastIndexOf("/")), mPoster.Value.ToString()).Replace("thumbs", "posters"), "imp_", String.Empty) + + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + + PosterURL = PosterURL.Insert(PosterURL.LastIndexOf("."), "_xlg") + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = PosterURL}) + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMPA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPA.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMPAPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMPA_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPA.ProgressChanged + If Not bwIMPA.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMPA_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPA.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + Private Function GetLink(ByVal IMDBID As String) As String + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) + sHTTP = Nothing + + Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") + If mcIMPA.Count > 0 Then + 'just use the first one if more are found + Return mcIMPA(0).Value.ToString + Else + Return String.Empty + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return String.Empty + End Try + End Function + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + Dim sType As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TVDB.Poster/Scraper/clsScrapeImages.vb b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeImages.vb new file mode 100644 index 0000000..7bdb821 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeImages.vb @@ -0,0 +1,940 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class ScrapeImages + +#Region "Methods" + + Public Shared Function GetPreferredImage(ByRef Image As Images, ByVal IMDBID As String, ByVal iType As Enums.ImageType, ByRef imgResult As Containers.ImgResult, ByVal sPath As String, ByVal doETs As Boolean, Optional ByVal doAsk As Boolean = False) As Boolean + '// + ' Try to get the best match between what the user selected in settings and the actual posters downloaded + '\\ + + Dim hasImages As Boolean = False + Dim TMDB As New TMDB.Scraper + Dim IMPA As New IMPA.Scraper + Dim MPDB As New MPDB.Scraper + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim tmpListIMPA As New List(Of MediaContainers.Image) + Dim tmpListMPDB As New List(Of MediaContainers.Image) + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) + + Try + + If iType = Enums.ImageType.Posters Then 'posters + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tImage.URL) + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + tmpListTMDB.AddRange(TMDB.GetTMDBImages(IMDBID, "poster")) + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + tmpListTMDB.AddRange(IMPA.GetIMPAPosters(IMDBID)) + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + tmpListTMDB.AddRange(MPDB.GetMPDBPosters(IMDBID)) + End If + + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) + If Not IsNothing(tmdbThumb.WebImage.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) + End If + Image.Clear() + Next + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + End If + Else + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + 'download all TMBD images + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "poster") + + 'check each one for it's size to see if it matched the preferred size + If tmpListTMDB.Count > 0 Then + hasImages = True + + If Not Master.eSettings.NoSaveImagesToNfo Then + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + imgResult.Posters.Add(tmdbThumb.URL) + Next + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Xlrg + If iMovie.Description.ToLower = "original" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Lrg + If iMovie.Description.ToLower = "mid" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Mid + If iMovie.Description.ToLower = "cover" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Small + If iMovie.Description.ToLower = "thumb" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + 'no "wide" for TMDB + End Select + Image.Clear() + Next + End If + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB found... try IMPA + + tmpListIMPA = IMPA.GetIMPAPosters(IMDBID) + + If tmpListIMPA.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMPA + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMPAX) Then + tmpIMPAX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMPAL) Then + tmpIMPAL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMPAM) Then + tmpIMPAM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMPAS) Then + tmpIMPAS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMPAW) Then + tmpIMPAW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB or IMPA found... try MPDB + + tmpListMPDB = MPDB.GetMPDBPosters(IMDBID) + + If tmpListMPDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListMPDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpMPDBX) Then + tmpMPDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpMPDBL) Then + tmpMPDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpMPDBM) Then + tmpMPDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpMPDBS) Then + tmpMPDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpMPDBW) Then + tmpMPDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If IsNothing(Image.Image) AndAlso Not doAsk Then + 'STILL no image found, just get the first available image, starting with the largest + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + 'check TMDB first + If tmpListTMDB.Count > 0 Then + Dim x = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If x.Count > 0 Then + Image.FromWeb(x(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "cover" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + End If + End If + + Image.Clear() + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + If tmpListIMPA.Count > 0 Then + If Not IsNothing(tmpIMPAX) Then + Image = tmpIMPAX + GoTo foundIT + End If + If Not IsNothing(tmpIMPAL) Then + Image = tmpIMPAL + GoTo foundIT + End If + If Not IsNothing(tmpIMPAM) Then + Image = tmpIMPAM + GoTo foundIT + End If + If Not IsNothing(tmpIMPAS) Then + Image = tmpIMPAS + GoTo foundIT + End If + If Not IsNothing(tmpIMPAW) Then + Image = tmpIMPAW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + If tmpListMPDB.Count > 0 Then + If Not IsNothing(tmpMPDBX) Then + Image = tmpMPDBX + GoTo foundIT + End If + If Not IsNothing(tmpMPDBL) Then + Image = tmpMPDBL + GoTo foundIT + End If + If Not IsNothing(tmpMPDBM) Then + Image = tmpMPDBM + GoTo foundIT + End If + If Not IsNothing(tmpMPDBS) Then + Image = tmpMPDBS + GoTo foundIT + End If + If Not IsNothing(tmpMPDBW) Then + Image = tmpMPDBW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + End If + + End If + + Else 'fanart + + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + + Dim ETHashes As New List(Of String) + If Master.eSettings.AutoET AndAlso doETs Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + End If + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + Image.Clear() + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + +foundIT: + TMDB = Nothing + IMPA = Nothing + MPDB = Nothing + tmpListTMDB = Nothing + tmpListIMPA = Nothing + tmpListMPDB = Nothing + Return hasImages + End Function + + Public Shared Sub GetPreferredFAasET(ByVal IMDBID As String, ByVal sPath As String) + Dim _Image As Image + Dim TMDB As New TMDB.Scraper + Dim IMPA As New IMPA.Scraper + Dim MPDB As New MPDB.Scraper + + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim ETHashes As New List(Of String) + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, "fanart") + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + For Each sFile As FileInfo In lFi + Select Case True + Case sFile.Name.Contains("(original)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Master.eSettings.AutoET Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + End If + Next + End If + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + 'Me.Clear() + Next + + _Image = Nothing + FileUtils.Delete.DeleteDirectory(CachePath) + + End If + End If + End If + End Sub + + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ + AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ + (AdvancedSettings.GetBooleanSetting("UseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Shared Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + End If + + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) + End Sub + + ' Duplicate of clsImage + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0, Optional ByVal sUrl As String = "") + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' If Not sUrl = "" Then + ' Dim stroriginalurl As String = sUrl + + ' 'Image Download from tmdb is special, need original size + ' If Not sUrl.Contains("impawards") AndAlso Not sUrl.Contains("movieposterdb") Then + ' 'Always get original image... + ' 'links to images (tmdb) have following structure: 'example: http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w92/x65b4vsFKYuA878pLN1mJiAsgIP.jpg + ' Dim stringArray() As String = Split(stroriginalurl, "/") + ' If stringArray.Length > 4 Then + ' ' stringArray(5) contains values like "w185","original", "w154"...-->size -> we want original! + ' stringArray(5) = "original" + ' stroriginalurl = Join(stringArray, "/") + ' End If + ' End If + ' Dim webclient As New Net.WebClient + ' webclient.DownloadFile(stroriginalurl, sPath) + ' Else + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + ' End If + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub + + Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo + Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() + + For i As Integer = 0 To UBound(Encoders) + If Encoders(i).FormatID = Format.Guid Then + Return Encoders(i) + End If + Next + + Return Nothing + End Function +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/Scraper/clsScrapeMPDB.vb b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeMPDB.vb new file mode 100644 index 0000000..7a7e13b --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeMPDB.vb @@ -0,0 +1,160 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Namespace MPDB + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwMPDB As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwMPDB.IsBusy Then Me.bwMPDB.CancelAsync() + + While Me.bwMPDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String) + Try + If Not Me.bwMPDB.IsBusy Then + Me.bwMPDB.WorkerSupportsCancellation = True + Me.bwMPDB.WorkerReportsProgress = True + Me.bwMPDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetMPDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + + If Me.bwMPDB.CancellationPending Then Return Nothing + + Try + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.movieposterdb.com/movie/", imdbID)) + sHTTP = Nothing + + If Me.bwMPDB.CancellationPending Then Return Nothing + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(1) + End If + + If Regex.IsMatch(HTML, String.Concat("http://www.imdb.com/title/tt", imdbID), RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline) Then + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "http://www.movieposterdb.com/posters/[0-9_](.*?)/[0-9](.*?)/[0-9](.*?)/[a-z0-9_](.*?).jpg") + + Dim PosterURL As String = String.Empty + + For Each mPoster As Match In mcPoster + If Me.bwMPDB.CancellationPending Then Return Nothing + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "l") + alPosters.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + Next + End If + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Private Sub bwMPDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetMPDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwMPDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDB.ProgressChanged + If Not bwMPDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwMPDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.TVDB.Poster/Scraper/clsScrapeOFDB.vb b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeOFDB.vb new file mode 100644 index 0000000..a220a06 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeOFDB.vb @@ -0,0 +1,280 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class OFDB + + #Region "Fields" + + Private imdbID As String + Private OFDBMovie As MediaContainers.Movie + Private _genre As String + Private _outline As String + Private _plot As String + Private _title As String + + #End Region 'Fields + + #Region "Constructors" + + Public Sub New(ByVal sID As String, ByRef mMovie As MediaContainers.Movie) + Clear() + imdbID = sID + OFDBMovie = mMovie + + GetOFDBDetails() + End Sub + + #End Region 'Constructors + + #Region "Properties" + + Public Property Genre() As String + Get + Return _genre + End Get + Set(ByVal value As String) + _genre = value + End Set + End Property + + Public Property Outline() As String + Get + Return _outline + End Get + Set(ByVal value As String) + _outline = value + End Set + End Property + + Public Property Plot() As String + Get + Return _plot + End Get + Set(ByVal value As String) + _plot = value + End Set + End Property + + Public Property Title() As String + Get + Return _title + End Get + Set(ByVal value As String) + _title = value + End Set + End Property + + #End Region 'Properties + + #Region "Methods" + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Sub Clear() + _title = String.Empty + _outline = String.Empty + _plot = String.Empty + _genre = String.Empty + End Sub + + Private Function GetFullPlot(ByVal sURL As String) As String + Dim FullPlot As String = String.Empty + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + Dim D, W, Wq, Wqq, B As Integer + Dim tmpHTML As String + + D = HTML.IndexOf("Eine Inhaltsangabe von") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim + W = tmpHTML.IndexOf("</b></b><br><br>") + Wq = tmpHTML.IndexOf("<b>Quelle:</b>") + If Wq > 0 Then + Wqq = tmpHTML.IndexOf("<br><br>", Wq) + B = tmpHTML.IndexOf("</font></p>", Wqq + 8) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(Wqq + 8, B - (Wqq + 8)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + ElseIf W > 0 Then + B = tmpHTML.IndexOf("</font></p>", W + 16) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return FullPlot + End Function + + Private Sub GetOFDBDetails() + Dim sURL As String = GetOFDBUrlFromIMDBID() + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(Html) Then + 'title + If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(HTML, "<td width=""99\%""><h1 itemprop=""name""><font face=""Arial,Helvetica,sans-serif"" size=""3""><b>([^<]+)</b></font></h1></td>").Groups(1).Value.ToString)) + If OFDBTitle.EndsWith(", Der") Then + _title = String.Concat("Der ", OFDBTitle.Replace(", Der", " ")).Trim + ElseIf OFDBTitle.EndsWith(", Die") Then + _title = String.Concat("Die ", OFDBTitle.Replace(", Die", " ")).Trim + ElseIf OFDBTitle.EndsWith(", Das") Then + _title = String.Concat("Das ", OFDBTitle.Replace(", Das", " ")).Trim + ElseIf OFDBTitle.EndsWith(", The") Then + _title = String.Concat("The ", OFDBTitle.Replace(", The", " ")).Trim + Else + _title = OFDBTitle + End If + End If + + Dim D, Dq, W, Wq, B As Integer + Dim tmpHTML As String + + 'outline + If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then + D = HTML.IndexOf("<b>Inhalt:</b>") + Dq = HTML.IndexOf("<b>Inhalt:</b> <font style=") + + If Dq > 0 Then + Wq = HTML.IndexOf("<span itemprop=""description"">", Dq) + W = HTML.IndexOf("<a href=""plot", Wq + 29) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(Wq + 29, W - (Wq + 29)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + ElseIf D > 0 Then + W = HTML.IndexOf("<a href=""", D + 44) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(D + 44, W - (D + 44)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + + 'full plot + D = 0 : Dq = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then + D = HTML.IndexOf("<b>Inhalt:</b>") + Dq = HTML.IndexOf("<b>Inhalt:</b> <font style=") + + If Dq > 0 Then + Dim L As Integer = HTML.Length + tmpHTML = HTML.Substring(D + 197, L - (D + 197)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + ElseIf D > 0 Then + Dim L As Integer = HTML.Length + tmpHTML = HTML.Substring(D + 44, L - (D + 44)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + End If + End If + + 'genre + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Genre) OrElse Not Master.eSettings.LockGenre Then + D = HTML.IndexOf("class=""Normal"">Genre(s):</font></td>") + If D > 0 Then + W = HTML.IndexOf("</table>", D) + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), "<a.*?href=[""'](?<url>.*?)[""'].*?><span itemprop=""genre"">(?<name>.*?)</span></a>") + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + tGenre = StringUtils.GenreFilter(tGenre) + If Not String.IsNullOrEmpty(tGenre) Then + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + End If + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetOFDBUrlFromIMDBID() As String + Dim ofdbURL As String = String.Empty + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.ofdb.de/view.php?SText=", imdbID, "&Kat=IMDb&page=suchergebnis&sourceid=mozilla-search")) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(HTML) Then + Dim mcOFDBURL As MatchCollection = Regex.Matches(HTML, "<a href=""film/([^<]+)"" onmouseover") + If mcOFDBURL.Count > 0 Then + 'just use the first one if more are found + ofdbURL = String.Concat("http://www.ofdb.de/", Regex.Match(mcOFDBURL(0).Value.ToString, """(film/([^<]+))""").Groups(1).Value.ToString) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return ofdbURL + End Function + + #End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/Scraper/clsScrapeTMDB.vb b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeTMDB.vb new file mode 100644 index 0000000..d40e628 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeTMDB.vb @@ -0,0 +1,243 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI + +Namespace TMDB + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + + Private Const APIKey As String = "b1ecff8c76278262b27de1569f57f6bd" + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB...<OpenSearchDescription>...<movies>.Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<poster>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<backdrop>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Debug.Print("{0}/t{1}", tmdbI.@size, tmdbI.@url) + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + sHTTP = Nothing + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As String + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + Dim tLang As String + + tLang = AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en") + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/{0}/tt{1}", APIKey, imdbID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + Dim tmdbNode = From xNode In xmlTMDB.Elements + + If tmdbNode.Count > 0 Then + If Not tmdbNode(0).Value = "Your query didn't return any results." Then + Dim movieID As String = xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<id>.Value + Dim i As Integer + + + For i = 0 To 1 Step 1 + sHTTP = New HTTP + ApiXML = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/{0}/xml/{1}/{2}", tLang, APIKey, movieID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + Dim Trailers = From tNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie> Select tNode.<trailer> + If Trailers.Count > 0 AndAlso Not String.IsNullOrEmpty(Trailers(0).Value) Then + If Trailers(0).Value.ToLower.IndexOf("youtube.com") > 0 Then + Return Trailers(0).Value + i += 1 + End If + Else + tLang = "en" + End If + End If + Next + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return String.Empty + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/Scraper/clsScrapeTrailers.vb b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeTrailers.vb new file mode 100644 index 0000000..19327b4 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeTrailers.vb @@ -0,0 +1,265 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System +Imports System.IO +Imports System.Net +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Public Class Trailers + +#Region "Fields" + + Public IMDBURL As String + + Private WebPage As New HTTP + Private _ImdbID As String = String.Empty + Private _ImdbTrailerPage As String = String.Empty + Private _TrailerList As New List(Of String) + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + AddHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + Me.WebPage.Cancel() + End Sub + + Public Sub Clear() + Me._TrailerList.Clear() + Me._ImdbID = String.Empty + Me._ImdbTrailerPage = String.Empty + End Sub + + Public Sub DeleteTrailers(ByVal sPath As String, ByVal NewTrailer As String) + Dim parPath As String = Directory.GetParent(sPath).FullName + Dim tmpName As String = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(sPath))) + Dim tmpNameNoStack As String = Path.Combine(parPath, Path.GetFileNameWithoutExtension(sPath)) + For Each t As String In Master.eSettings.ValidExts + If File.Exists(String.Concat(tmpName, "-trailer", t)) AndAlso Not String.Concat(tmpName, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpName, "[trailer]", t)) AndAlso Not String.Concat(tmpName, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "[trailer]", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "-trailer", t)) AndAlso Not String.Concat(tmpNameNoStack, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) + End If + Next + End Sub + + Public Sub DownloadProgressUpdated(ByVal iPercent As Integer) + RaiseEvent ProgressUpdated(iPercent) + End Sub + + Public Function DownloadSingleTrailer(ByVal sPath As String, ByVal ImdbID As String, ByVal isSingle As Boolean, ByVal currNfoTrailer As String) As String + Dim tURL As String = String.Empty + Try + Me._TrailerList.Clear() + + If Not Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, True) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + + Dim tLink As String = String.Empty + If Regex.IsMatch(Me._TrailerList.Item(0).ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Dim YT As New YouTube.Scraper + YT.GetVideoLinks(Me._TrailerList.Item(0).ToString) + If YT.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + tLink = YT.VideoLinks(Master.eSettings.PreferredTrailerQuality).URL + Else + Select Case Master.eSettings.PreferredTrailerQuality + Case Enums.TrailerQuality.HD1080p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720p) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720p).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD1080pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720pVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720pVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HD720p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD720pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HQFLV + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HQVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.SQMP4 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.SQFLV + tLink = String.Empty + Case Enums.TrailerQuality.SQVP8 + tLink = String.Empty + End Select + End If + Else + tLink = Me._TrailerList.Item(0).ToString + End If + + If Not String.IsNullOrEmpty(tLink) Then + tURL = WebPage.DownloadFile(tLink, sPath, False, "trailer") + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + End If + ElseIf Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, False) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + tURL = Me._TrailerList.Item(0).ToString + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return tURL + End Function + + Public Function DownloadTrailer(ByVal sPath As String, ByVal sURL As String) As String + Dim tURL As String = String.Empty + If Not String.IsNullOrEmpty(sURL) Then + tURL = WebPage.DownloadFile(sURL, sPath, True, "trailer") + + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + Return tURL + End Function + + Public Function GetTrailers(ByVal ImdbID As String, Optional ByVal BreakAfterFound As Boolean = True) As List(Of String) + Me._ImdbID = ImdbID + If AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", False) Then + Me.GetImdbTrailer() + End If + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", False) Then + Me.GetTMDBTrailer() + End If + + Return Me._TrailerList + End Function + + Public Function IsAllowedToDownload(ByVal sPath As String, ByVal isDL As Boolean, ByVal currNfoTrailer As String, Optional ByVal isSS As Boolean = False) As Boolean + Dim fScanner As New Scanner + + If isDL Then + If String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) OrElse Master.eSettings.OverwriteTrailer Then + Return True + Else + If isSS AndAlso String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) Then + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + Else + Return False + End If + End If + Else + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + End If + End Function + + Private Sub GetIMDBTrailer() + Dim IMDB As New IMDB.Scraper + IMDB.IMDBURL = AdvancedSettings.GetSetting("IMDBURL", "akas.imdb.com") + Dim results As List(Of String) = IMDB.GetTrailers(_ImdbID) + + Me._TrailerList.AddRange(results) + + IMDB = Nothing + End Sub + + Private Sub GetTMDBTrailer() + Dim TMDB As New TMDB.Scraper + Dim YT As String = TMDB.GetTrailers(_ImdbID) + + If Not String.IsNullOrEmpty(YT) Then + Me._TrailerList.Add(YT) + End If + + TMDB = Nothing + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/Scraper/clsScrapeYouTube.vb b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeYouTube.vb new file mode 100644 index 0000000..b4603fd --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/clsScrapeYouTube.vb @@ -0,0 +1,335 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace YouTube + + Public Class Scraper + +#Region "Fields" + + Friend WithEvents bwYT As New System.ComponentModel.BackgroundWorker + + Private _VideoLinks As VideoLinkItemCollection + +#End Region 'Fields + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event VideoLinksRetrieved(ByVal bSuccess As Boolean) + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property VideoLinks() As VideoLinkItemCollection + Get + If _VideoLinks Is Nothing Then + _VideoLinks = New VideoLinkItemCollection + End If + Return _VideoLinks + End Get + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() + If bwYT.IsBusy Then bwYT.CancelAsync() + + While bwYT.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetVideoLinks(ByVal url As String) + Try + _VideoLinks = ParseYTFormats(url, False) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub GetVideoLinksAsync(ByVal url As String) + Try + If Not bwYT.IsBusy Then + _VideoLinks = Nothing + bwYT.WorkerSupportsCancellation = True + bwYT.RunWorkerAsync(url) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwYT.DoWork + Dim Url As String = DirectCast(e.Argument, String) + + Try + e.Result = ParseYTFormats(Url, True) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwYT.RunWorkerCompleted + Try + If e.Cancelled Then + 'user cancelled + RaiseEvent VideoLinksRetrieved(False) + ElseIf e.Error IsNot Nothing Then + 'exception occurred + RaiseEvent Exception(e.Error) + Else + 'all good + If e.Result IsNot Nothing Then + _VideoLinks = DirectCast(e.Result, VideoLinkItemCollection) + RaiseEvent VideoLinksRetrieved(True) + Else + RaiseEvent VideoLinksRetrieved(False) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetVideoTitle(ByVal HTML As String) As String + Dim result As String = "" + 'Dim KeyPattern As String = "'VIDEO_TITLE':\s*'([^']*?)'" + Dim KeyPattern As String = "meta name=\""title\"" content=\s*\""([^']*?)\""" + 'meta name="title" content= + If Regex.IsMatch(HTML, KeyPattern) Then + result = Regex.Match(HTML, KeyPattern).Groups(1).Value + End If + + Return result + End Function + + Private Function ParseYTFormats(ByVal url As String, ByVal doProgress As Boolean) As VideoLinkItemCollection + Dim DownloadLinks As New VideoLinkItemCollection + Dim sHTTP As New HTTP + + Try + If bwYT.CancellationPending Then Return DownloadLinks + + Dim Html As String = sHTTP.DownloadData(url) + If Html.ToLower.Contains("page not found") Then + Html = String.Empty + End If + + If String.IsNullOrEmpty(Html.Trim) Then Return DownloadLinks + If bwYT.CancellationPending Then Return DownloadLinks + + Dim VideoTitle As String = GetVideoTitle(Html) + VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") + + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) + If fmtMatch.Success Then + Dim FormatMap As String = fmtMatch.Groups(1).Value + Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") + + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) + Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) + + For i As Integer = 0 To FormatArray.Length - 1 + Dim yturl As String = rurl.Match(FormatArray(i)).Groups(1).Value + Dim ytitag As String = ritag.Match(FormatArray(i)).Groups(1).Value + Dim ytsig As String = rsig.Match(FormatArray(i)).Groups(1).Value + + 'Console.WriteLine("Trailer Itag: {0}", ytitag) + 'Console.WriteLine("Trailer Url: {0}", yturl) + 'Console.WriteLine("Trailer Sig: {0}", ytsig) + + Dim Link As New VideoLinkItem + Select Case ytitag + ' ********************************************************************** + ' see all itags http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs + ' ********************************************************************** + Case "5" + Link.Description = "240p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "6" + Link.Description = "270p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "13" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "17" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "18" + Link.Description = "360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQMP4 + Case "22" + Link.Description = "720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD720p + Case "34" + Link.Description = "360p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQFLV + Case "35" + Link.Description = "480p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HQFLV + Case "36" + Link.Description = "240p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "37" + Link.Description = "1080p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD1080p + Case "38" + Link.Description = "1536p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "43" + Link.Description = "360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.SQVP8 + Case "44" + Link.Description = "480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HQVP8 + Case "45" + Link.Description = "720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD720pVP8 + Case "46" + Link.Description = "1080p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD1080pVP8 + Case "82" + Link.Description = "3D 360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "83" + Link.Description = "3D 480p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "84" + Link.Description = "3D 720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "85" + Link.Description = "3D 520p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "100" + Link.Description = "3D 360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "101" + Link.Description = "3D 480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "102" + Link.Description = "3D 720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "120" + Link.Description = "720p LiveStream (FLV, AVC)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case Else + Link.Description = "Other" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + 'Continue For + End Select + + Link.URL = Web.HttpUtility.UrlDecode(Web.HttpUtility.UrlDecode(yturl)) & "&signature=" & ytsig & "&title=" & Web.HttpUtility.UrlEncode(VideoTitle) + Link.URL = Link.URL.Replace("sig=", "signature=") ' sig= returns HTTP 403 //oldstyle, keep it + 'Console.WriteLine("Trailer Url decoded: {0}", Link.URL) + + If bwYT.CancellationPending Then Return DownloadLinks + + If Not String.IsNullOrEmpty(Link.URL) AndAlso sHTTP.IsValidURL(Link.URL) Then + DownloadLinks.Add(Link) + End If + + If bwYT.CancellationPending Then Return DownloadLinks + + Next + + End If + Return DownloadLinks + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New VideoLinkItemCollection + Finally + sHTTP = Nothing + End Try + End Function + +#End Region 'Methods + + End Class + + Public Class VideoLinkItem + +#Region "Fields" + + Private _Description As String + Private _FormatQuality As Enums.TrailerQuality + Private _URL As String + +#End Region 'Fields + +#Region "Properties" + + Public Property Description() As String + Get + Return _Description + End Get + Set(ByVal value As String) + _Description = value + End Set + End Property + + Public Property URL() As String + Get + Return _URL + End Get + Set(ByVal value As String) + _URL = value + End Set + End Property + + Friend Property FormatQuality() As Enums.TrailerQuality + Get + Return _FormatQuality + End Get + Set(ByVal value As Enums.TrailerQuality) + _FormatQuality = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class VideoLinkItemCollection + Inherits Generic.SortedList(Of Enums.TrailerQuality, VideoLinkItem) + +#Region "Methods" + + Public Shadows Sub Add(ByVal Link As VideoLinkItem) + If Not MyBase.ContainsKey(Link.FormatQuality) Then MyBase.Add(Link.FormatQuality, Link) + End Sub + +#End Region 'Methods + + End Class + +End Namespace diff --git a/Addons/scraper.TVDB.Poster/Scraper/dlgIMDBSearchResults.Designer.vb b/Addons/scraper.TVDB.Poster/Scraper/dlgIMDBSearchResults.Designer.vb new file mode 100644 index 0000000..6d0924e --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/dlgIMDBSearchResults.Designer.vb @@ -0,0 +1,480 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgIMDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgIMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtIMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + Me.txtFileName = New System.Windows.Forms.TextBox() + Me.btnOpenFolder = New System.Windows.Forms.Button() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(501, 431) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(574, 431) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(8, 126) + Me.tvResults.Name = "tvResults" + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 5 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(298, 160) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(295, 100) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(295, 119) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(298, 325) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(476, 160) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(476, 186) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(476, 213) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtIMDBID + ' + Me.txtIMDBID.Enabled = False + Me.txtIMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtIMDBID.Location = New System.Drawing.Point(143, 429) + Me.txtIMDBID.Name = "txtIMDBID" + Me.txtIMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtIMDBID.TabIndex = 7 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(647, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(256, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(8, 433) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(128, 17) + Me.chkManual.TabIndex = 6 + Me.chkManual.Text = "Manual IMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(249, 429) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 8 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(476, 277) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(35, 13) + Me.lblIMDB.TabIndex = 19 + Me.lblIMDB.Text = "IMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(414, 160) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(32, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(414, 186) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(414, 213) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(414, 277) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(53, 13) + Me.lblIMDBHeader.TabIndex = 18 + Me.lblIMDBHeader.Text = "IMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(295, 309) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(266, 100) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 4 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(8, 101) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 3 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(368, 213) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 20 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(98, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching IMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(312, 185) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'txtFileName + ' + Me.txtFileName.Enabled = False + Me.txtFileName.Location = New System.Drawing.Point(8, 73) + Me.txtFileName.Name = "txtFileName" + Me.txtFileName.Size = New System.Drawing.Size(598, 22) + Me.txtFileName.TabIndex = 3 + ' + 'btnOpenFolder + ' + Me.btnOpenFolder.Location = New System.Drawing.Point(612, 73) + Me.btnOpenFolder.Name = "btnOpenFolder" + Me.btnOpenFolder.Size = New System.Drawing.Size(29, 23) + Me.btnOpenFolder.TabIndex = 23 + Me.btnOpenFolder.Text = "..." + Me.btnOpenFolder.UseVisualStyleBackColor = True + ' + 'dlgIMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(647, 492) + Me.ControlBox = False + Me.Controls.Add(Me.btnOpenFolder) + Me.Controls.Add(Me.txtFileName) + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtIMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgIMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents tvResults As System.Windows.Forms.TreeView + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lblYear As System.Windows.Forms.Label + Friend WithEvents lblDirector As System.Windows.Forms.Label + Friend WithEvents lblGenre As System.Windows.Forms.Label + Friend WithEvents txtIMDBID As System.Windows.Forms.TextBox + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents lblIMDB As System.Windows.Forms.Label + Friend WithEvents lblYearHeader As System.Windows.Forms.Label + Friend WithEvents lblDirectorHeader As System.Windows.Forms.Label + Friend WithEvents lblGenreHeader As System.Windows.Forms.Label + Friend WithEvents lblIMDBHeader As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel + Friend WithEvents Label4 As System.Windows.Forms.Label + Friend WithEvents txtFileName As System.Windows.Forms.TextBox + Friend WithEvents btnOpenFolder As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.TVDB.Poster/Scraper/dlgIMDBSearchResults.resx b/Addons/scraper.TVDB.Poster/Scraper/dlgIMDBSearchResults.resx new file mode 100644 index 0000000..fc0d614 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/dlgIMDBSearchResults.resx @@ -0,0 +1,190 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB9ElE + QVQ4T6XSTWgTQRQH8E0LaZPaD9oaxULRi0igJSroqYLoxaa3gpfSFrx4sGp7Kj31pDYnPQpG8dzgQcSg + 1orQZJPd2exWSYOxiXhKQz5oEjQxpubvm6WN2zUe1IXf7OzMe2/fLCsA+C9NF//GbwtPfD67wti5SES5 + +GZ19ZB532zfg8Lkq+uallFVFZymqRUqdNcYY9aYMFma1igpFoshl80in88jsbkJvhZRlAfGJCN9eOH3 + WxWF5TaiUezs1FCv13X8SiYSoD2IwaCTx5rpA20OS5KEVCqFWu07KpWyrlr9hkJhG4wxSOHwdXMypw+B + tTVXOBRCOr1FSVWUSkVSQrn8FcViEUyW8VkTr5iTOX14vbLSTgUK0d0j8C54IaCOZDIBRt1d9gYXjIl7 + GhM6xjWZAvl3yGQy9BFziMfj+Phegcf3FsLMc7TdfHbPmMztexBFcZ7O+oXwM+NdRP5xf/nVJ9uEF9aJ + h2ifeoyOyUcve+eedjUtwNHP0x8MBMaoo/EPauioIAgW+6jH233pFrpG76DTvYRu99LGwNhtW9MCf+IY + WbjRf3YOfWdm0Uf3gQuLh/m60EqvID3kGDlBhoiLnCKnd52ksCO9g+dnHM4p6eDxcY/VIvzqgAJaSRux + kQ5ygHSa7XXDtVBOo8C/g/ATj6yxruTRIKcAAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/Scraper/dlgIMDBSearchResults.vb b/Addons/scraper.TVDB.Poster/Scraper/dlgIMDBSearchResults.vb new file mode 100644 index 0000000..6fde061 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/dlgIMDBSearchResults.vb @@ -0,0 +1,520 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports System.IO +Imports EmberAPI + +Public Class dlgIMDBSearchResults + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + Friend WithEvents tmrLoad As New System.Windows.Forms.Timer + Friend WithEvents tmrWait As New System.Windows.Forms.Timer + + Private IMDB As New IMDB.Scraper + Private sHTTP As New HTTP + Dim UseOFDBGenre As Boolean + Dim UseOFDBOutline As Boolean + Dim UseOFDBPlot As Boolean + Dim UseOFDBTitle As Boolean + Private _currnode As Integer = -1 + Private _prevnode As Integer = -2 + + Private _InfoCache As New Dictionary(Of String, MediaContainers.Movie) + Private _PosterCache As New Dictionary(Of String, System.Drawing.Image) + Private _filterOptions As Structures.ScrapeOptions + +#End Region 'Fields + + #Region "Methods" + + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + _filterOptions = filterOptions + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + chkManual.Enabled = False + IMDB.IMDBURL = IMDBURL + IMDB.SearchMovieAsync(sMovieTitle, _filterOptions) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal Res As IMDB.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + SearchResultsDownloaded(Res) + + Return MyBase.ShowDialog() + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.OK_Button.Enabled = False + pnlPicStatus.Visible = False + _InfoCache.Clear() + _PosterCache.Clear() + Me.ClearInfo() + Me.Label3.Text = Master.eLang.GetString(11, "Searching IMDB...") + Me.pnlLoading.Visible = True + chkManual.Enabled = False + IMDB.CancelAsync() + IMDB.IMDBURL = IMDBURL + IMDB.SearchMovieAsync(Me.txtSearch.Text, _filterOptions) + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + If Regex.IsMatch(Me.txtIMDBID.Text.Replace("tt", String.Empty), "\d\d\d\d\d\d\d") Then + IMDB.IMDBURL = IMDBURL + IMDB.GetSearchMovieInfoAsync(Me.txtIMDBID.Text.Replace("tt", String.Empty), Master.tmpMovie, Master.DefaultOptions) + Else + MsgBox(Master.eLang.GetString(12, "The ID you entered is not a valid IMDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + End If + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + sHTTP.StartDownloadImage(Args.pURL) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image, .IMDBId = Args.IMDBId} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + '// + ' Thread finished: display pic if it was able to get one + '\\ + + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbPoster.Image = Res.Result + If Not _PosterCache.ContainsKey(Res.IMDBId) Then + _PosterCache.Add(Res.IMDBId, Res.Result) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + pnlPicStatus.Visible = False + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Master.tmpMovie.Clear() + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub btnOpenFolder_Click(sender As Object, e As EventArgs) Handles btnOpenFolder.Click + Dim fPath As String = Directory.GetParent(Master.currMovie.Filename).FullName + + If Not String.IsNullOrEmpty(fPath) Then + Shell("Explorer.exe " & fPath, vbNormalFocus) + End If + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtIMDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.tvResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtIMDBID.Text = String.Empty + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblTagline.Text = String.Empty + Me.lblYear.Text = String.Empty + Me.lblDirector.Text = String.Empty + Me.lblGenre.Text = String.Empty + Me.txtOutline.Text = String.Empty + Me.lblIMDB.Text = String.Empty + Me.pbPoster.Image = Nothing + + Master.tmpMovie.Clear() + + IMDB.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.lblYearHeader.Visible = areVisible + Me.lblDirectorHeader.Visible = areVisible + Me.lblGenreHeader.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.lblIMDBHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + Me.lblYear.Visible = areVisible + Me.lblTagline.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblDirector.Visible = areVisible + Me.lblGenre.Visible = areVisible + Me.lblIMDB.Visible = areVisible + Me.pbPoster.Visible = areVisible + End Sub + + Private Sub dlgIMDBSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub dlgIMDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + pnlPicStatus.Visible = False + IMDB.IMDBURL = IMDBURL + IMDB.UseOFDBTitle = UseOFDBTitle + IMDB.UseOFDBOutline = UseOFDBOutline + IMDB.UseOFDBPlot = UseOFDBPlot + IMDB.UseOFDBGenre = UseOFDBGenre + AddHandler IMDB.SearchMovieInfoDownloaded, AddressOf SearchMovieInfoDownloaded + AddHandler IMDB.SearchResultsDownloaded, AddressOf SearchResultsDownloaded + + Try + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgIMDBSearchResults_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + Me.tvResults.Focus() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + If Me.chkManual.Checked AndAlso Me.btnVerify.Enabled Then + If Not Regex.IsMatch(Me.txtIMDBID.Text.Replace("tt", String.Empty), "\d\d\d\d\d\d\d") Then + MsgBox(Master.eLang.GetString(12, "The ID you entered is not a valid IMDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + Exit Sub + Else + If MsgBox(String.Concat(Master.eLang.GetString(13, "You have manually entered an IMDB ID but have not verified it is correct."), vbNewLine, vbNewLine, Master.eLang.GetString(101, "Are you sure you want to continue?", True)), MsgBoxStyle.YesNo, Master.eLang.GetString(14, "Continue without verification?")) = MsgBoxResult.No Then + Exit Sub + Else + Master.tmpMovie.IMDBID = Me.txtIMDBID.Text.Replace("tt", String.Empty) + End If + End If + End If + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.Close() + End Sub + + Private Sub SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + '// + ' Info downloaded... fill form with data + '\\ + + Me.pnlLoading.Visible = False + Me.OK_Button.Enabled = True + + Try + If bSuccess Then + Me.ControlsVisible(True) + Me.lblTitle.Text = Master.tmpMovie.Title + Me.lblTagline.Text = Master.tmpMovie.Tagline + Me.lblYear.Text = Master.tmpMovie.Year + Me.lblDirector.Text = Master.tmpMovie.Director + Me.lblGenre.Text = Master.tmpMovie.Genre + Me.txtOutline.Text = Master.tmpMovie.Outline + Me.lblIMDB.Text = Master.tmpMovie.IMDBID + + If _PosterCache.ContainsKey(Master.tmpMovie.IMDBID) Then + 'just set it + Me.pbPoster.Image = _PosterCache(Master.tmpMovie.IMDBID) + Else + 'go download it, if available + If Not String.IsNullOrEmpty(sPoster) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + pnlPicStatus.Visible = True + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = sPoster, .IMDBId = Master.tmpMovie.IMDBID}) + End If + + End If + + 'store clone of tmpmovie + If Not _InfoCache.ContainsKey(Master.tmpMovie.IMDBID) Then + _InfoCache.Add(Master.tmpMovie.IMDBID, GetMovieClone(Master.tmpMovie)) + End If + + + Me.btnVerify.Enabled = False + Else + If Me.chkManual.Checked Then + MsgBox(Master.eLang.GetString(15, "Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again."), MsgBoxStyle.Exclamation, Master.eLang.GetString(16, "Verification Failed")) + Me.btnVerify.Enabled = True + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SearchResultsDownloaded(ByVal M As IMDB.MovieSearchResults) + '// + ' Process the results that IMDB gave us + '\\ + + Try + Me.tvResults.Nodes.Clear() + Me.ClearInfo() + If Not IsNothing(M) Then + If M.PartialMatches.Count > 0 OrElse M.PopularTitles.Count > 0 OrElse M.ExactMatches.Count > 0 Then + Dim TnP As New TreeNode(String.Format(Master.eLang.GetString(17, "Partial Matches ({0})"), M.PartialMatches.Count)) + Dim selNode As New TreeNode + + If M.PartialMatches.Count > 0 Then + M.PartialMatches.Sort() + For Each Movie As MediaContainers.Movie In M.PartialMatches + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + selNode = TnP.FirstNode + End If + + If M.PopularTitles.Count > 0 Then + M.PopularTitles.Sort() + If M.PartialMatches.Count > 0 OrElse M.ExactMatches.Count > 0 Then + Me.tvResults.Nodes(TnP.Index).Collapse() + End If + + TnP = New TreeNode(String.Format(Master.eLang.GetString(19, "Popular Titles ({0})"), M.PopularTitles.Count)) + + For Each Movie As MediaContainers.Movie In M.PopularTitles + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + + selNode = TnP.FirstNode + End If + + If M.ExactMatches.Count > 0 Then + M.ExactMatches.Sort() + If M.PartialMatches.Count > 0 Then + Me.tvResults.Nodes(TnP.Index).Collapse() + End If + TnP = New TreeNode(String.Format(Master.eLang.GetString(18, "Exact Matches ({0})"), M.ExactMatches.Count)) + For Each Movie As MediaContainers.Movie In M.ExactMatches + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + + selNode = TnP.FirstNode + + End If + Me._prevnode = -2 + + 'determine if we automatically start downloading info for selected node + If M.ExactMatches.Count > 0 Then + Me.tvResults.SelectedNode = selNode + ElseIf M.PopularTitles.Count > 0 Then + Me.tvResults.SelectedNode = selNode + ElseIf M.PartialMatches.Count > 0 Then + Me.tvResults.SelectedNode = selNode + Else + Me.tvResults.SelectedNode = Nothing + End If + Me.tvResults.Focus() + Else + Me.tvResults.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(20, "No Matches Found")}) + End If + End If + Me.pnlLoading.Visible = False + chkManual.Enabled = True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.Label2.Text = Master.eLang.GetString(21, "View details of each result to find the proper movie.") + Me.Label1.Text = Master.eLang.GetString(22, "Movie Search Results") + Me.chkManual.Text = Master.eLang.GetString(23, "Manual IMDB Entry:") + Me.btnVerify.Text = Master.eLang.GetString(24, "Verify") + Me.lblYearHeader.Text = Master.eLang.GetString(49, "Year:", True) + Me.lblDirectorHeader.Text = Master.eLang.GetString(239, "Director:", True) + Me.lblGenreHeader.Text = Master.eLang.GetString(51, "Genre(s):", True) + Me.lblIMDBHeader.Text = Master.eLang.GetString(289, "IMDB ID:", True) + Me.lblPlotHeader.Text = Master.eLang.GetString(242, "Plot Outline:", True) + Me.Label3.Text = Master.eLang.GetString(25, "Searching IMDB...") + Me.txtFileName.Text = Master.currMovie.Filename + End Sub + + Private Sub tmrLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoad.Tick + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + Me.pnlLoading.Visible = True + Me.Label3.Text = Master.eLang.GetString(26, "Downloading details...") + + IMDB.IMDBURL = IMDBURL + IMDB.GetSearchMovieInfoAsync(Me.tvResults.SelectedNode.Tag.ToString, Master.tmpMovie, Master.DefaultOptions) + End Sub + + Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrWait.Tick + If Not Me._prevnode = Me._currnode Then + Me._prevnode = Me._currnode + Me.tmrWait.Stop() + Me.tmrLoad.Start() + Else + Me.tmrLoad.Stop() + Me.tmrWait.Stop() + End If + End Sub + Private Sub tvResults_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvResults.AfterSelect + Try + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + + Me.ClearInfo() + Me.OK_Button.Enabled = False + + If Not IsNothing(Me.tvResults.SelectedNode.Tag) AndAlso Not String.IsNullOrEmpty(Me.tvResults.SelectedNode.Tag.ToString) Then + Me._currnode = Me.tvResults.SelectedNode.Index + + 'check if this movie is in the cache already + If _InfoCache.ContainsKey(Me.tvResults.SelectedNode.Tag.ToString) Then + Master.tmpMovie = GetMovieClone(_InfoCache(Me.tvResults.SelectedNode.Tag.ToString)) + SearchMovieInfoDownloaded(String.Empty, True) + Return + End If + + Me.pnlLoading.Visible = True + Me.tmrWait.Start() + Else + Me.pnlLoading.Visible = False + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub tvResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub txtIMDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtIMDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtIMDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtIMDBID.TextChanged + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Function GetMovieClone(ByVal original As MediaContainers.Movie) As MediaContainers.Movie + 'have to do this the old-fashioned way because it is not serializable + Dim result As New MediaContainers.Movie + With result + .IMDBID = original.IMDBID + .Genre = original.Genre + .Title = original.Title + .Tagline = original.Tagline + .Year = original.Year + .Director = original.Director + .Genre = original.Genre + .Outline = original.Outline + End With + Return result + 'Using mem As New IO.MemoryStream() + ' Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, New System.Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.Clone)) + ' bin.Serialize(mem, original) + ' mem.Seek(0, IO.SeekOrigin.Begin) + ' Return DirectCast(bin.Deserialize(mem), MediaContainers.Movie) + 'End Using + End Function + + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim pURL As String + Dim IMDBId As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Image + Dim IMDBId As String + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/Scraper/dlgImgSelect.Designer.vb b/Addons/scraper.TVDB.Poster/Scraper/dlgImgSelect.Designer.vb new file mode 100644 index 0000000..213f00e --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/dlgImgSelect.Designer.vb @@ -0,0 +1,466 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgImgSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgImgSelect)) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.pnlSize = New System.Windows.Forms.Panel() + Me.btnPreview = New System.Windows.Forms.Button() + Me.rbSmall = New System.Windows.Forms.RadioButton() + Me.rbMedium = New System.Windows.Forms.RadioButton() + Me.rbLarge = New System.Windows.Forms.RadioButton() + Me.rbXLarge = New System.Windows.Forms.RadioButton() + Me.pnlFanart = New System.Windows.Forms.Panel() + Me.chkThumb = New System.Windows.Forms.CheckBox() + Me.chkMid = New System.Windows.Forms.CheckBox() + Me.chkOriginal = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlDLStatus = New System.Windows.Forms.Panel() + Me.pnlMPDB = New System.Windows.Forms.Panel() + Me.lblDL3Status = New System.Windows.Forms.Label() + Me.lblDL3 = New System.Windows.Forms.Label() + Me.pbDL3 = New System.Windows.Forms.ProgressBar() + Me.pnlIMPA = New System.Windows.Forms.Panel() + Me.lblDL2Status = New System.Windows.Forms.Label() + Me.lblDL2 = New System.Windows.Forms.Label() + Me.pbDL2 = New System.Windows.Forms.ProgressBar() + Me.lblDL1Status = New System.Windows.Forms.Label() + Me.lblDL1 = New System.Windows.Forms.Label() + Me.pbDL1 = New System.Windows.Forms.ProgressBar() + Me.pnlSinglePic = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.TableLayoutPanel1.SuspendLayout() + Me.pnlBottomMain.SuspendLayout() + Me.pnlSize.SuspendLayout() + Me.pnlFanart.SuspendLayout() + Me.pnlDLStatus.SuspendLayout() + Me.pnlMPDB.SuspendLayout() + Me.pnlIMPA.SuspendLayout() + Me.pnlSinglePic.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(687, 11) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(836, 495) + Me.pnlBG.TabIndex = 1 + Me.pnlBG.Visible = False + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.pnlSize) + Me.pnlBottomMain.Controls.Add(Me.pnlFanart) + Me.pnlBottomMain.Controls.Add(Me.lblInfo) + Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) + Me.pnlBottomMain.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 495) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(836, 50) + Me.pnlBottomMain.TabIndex = 0 + ' + 'pnlSize + ' + Me.pnlSize.BackColor = System.Drawing.Color.White + Me.pnlSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.pnlSize.Controls.Add(Me.btnPreview) + Me.pnlSize.Controls.Add(Me.rbSmall) + Me.pnlSize.Controls.Add(Me.rbMedium) + Me.pnlSize.Controls.Add(Me.rbLarge) + Me.pnlSize.Controls.Add(Me.rbXLarge) + Me.pnlSize.Location = New System.Drawing.Point(8, 8) + Me.pnlSize.Name = "pnlSize" + Me.pnlSize.Size = New System.Drawing.Size(673, 34) + Me.pnlSize.TabIndex = 1 + Me.pnlSize.Visible = False + ' + 'btnPreview + ' + Me.btnPreview.Enabled = False + Me.btnPreview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnPreview.Image = CType(resources.GetObject("btnPreview.Image"), System.Drawing.Image) + Me.btnPreview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPreview.Location = New System.Drawing.Point(593, 5) + Me.btnPreview.Name = "btnPreview" + Me.btnPreview.Size = New System.Drawing.Size(75, 23) + Me.btnPreview.TabIndex = 4 + Me.btnPreview.Text = "Preview" + Me.btnPreview.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPreview.UseVisualStyleBackColor = True + ' + 'rbSmall + ' + Me.rbSmall.AutoSize = True + Me.rbSmall.Enabled = False + Me.rbSmall.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbSmall.Location = New System.Drawing.Point(475, 8) + Me.rbSmall.Name = "rbSmall" + Me.rbSmall.Size = New System.Drawing.Size(53, 17) + Me.rbSmall.TabIndex = 3 + Me.rbSmall.TabStop = True + Me.rbSmall.Text = "Small" + Me.rbSmall.UseVisualStyleBackColor = True + ' + 'rbMedium + ' + Me.rbMedium.AutoSize = True + Me.rbMedium.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbMedium.Location = New System.Drawing.Point(201, 8) + Me.rbMedium.Name = "rbMedium" + Me.rbMedium.Size = New System.Drawing.Size(69, 17) + Me.rbMedium.TabIndex = 1 + Me.rbMedium.TabStop = True + Me.rbMedium.Text = "Medium" + Me.rbMedium.UseVisualStyleBackColor = True + ' + 'rbLarge + ' + Me.rbLarge.AutoSize = True + Me.rbLarge.Enabled = False + Me.rbLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbLarge.Location = New System.Drawing.Point(343, 8) + Me.rbLarge.Name = "rbLarge" + Me.rbLarge.Size = New System.Drawing.Size(55, 17) + Me.rbLarge.TabIndex = 2 + Me.rbLarge.TabStop = True + Me.rbLarge.Text = "Cover" + Me.rbLarge.UseVisualStyleBackColor = True + ' + 'rbXLarge + ' + Me.rbXLarge.AutoSize = True + Me.rbXLarge.Enabled = False + Me.rbXLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbXLarge.Location = New System.Drawing.Point(26, 8) + Me.rbXLarge.Name = "rbXLarge" + Me.rbXLarge.Size = New System.Drawing.Size(66, 17) + Me.rbXLarge.TabIndex = 0 + Me.rbXLarge.TabStop = True + Me.rbXLarge.Text = "Original" + Me.rbXLarge.UseVisualStyleBackColor = True + ' + 'pnlFanart + ' + Me.pnlFanart.BackColor = System.Drawing.Color.White + Me.pnlFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFanart.Controls.Add(Me.chkThumb) + Me.pnlFanart.Controls.Add(Me.chkMid) + Me.pnlFanart.Controls.Add(Me.chkOriginal) + Me.pnlFanart.Location = New System.Drawing.Point(8, 8) + Me.pnlFanart.Name = "pnlFanart" + Me.pnlFanart.Size = New System.Drawing.Size(339, 34) + Me.pnlFanart.TabIndex = 5 + Me.pnlFanart.Visible = False + ' + 'chkThumb + ' + Me.chkThumb.AutoSize = True + Me.chkThumb.Location = New System.Drawing.Point(231, 8) + Me.chkThumb.Name = "chkThumb" + Me.chkThumb.Size = New System.Drawing.Size(111, 17) + Me.chkThumb.TabIndex = 2 + Me.chkThumb.Text = "Check All Thumb" + Me.chkThumb.UseVisualStyleBackColor = True + ' + 'chkMid + ' + Me.chkMid.AutoSize = True + Me.chkMid.Location = New System.Drawing.Point(131, 8) + Me.chkMid.Name = "chkMid" + Me.chkMid.Size = New System.Drawing.Size(96, 17) + Me.chkMid.TabIndex = 1 + Me.chkMid.Text = "Check All Mid" + Me.chkMid.UseVisualStyleBackColor = True + ' + 'chkOriginal + ' + Me.chkOriginal.AutoSize = True + Me.chkOriginal.Location = New System.Drawing.Point(7, 8) + Me.chkOriginal.Name = "chkOriginal" + Me.chkOriginal.Size = New System.Drawing.Size(118, 17) + Me.chkOriginal.TabIndex = 0 + Me.chkOriginal.Text = "Check All Original" + Me.chkOriginal.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.Location = New System.Drawing.Point(402, 10) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(240, 31) + Me.lblInfo.TabIndex = 1 + Me.lblInfo.Text = "Selected item will be set as fanart. All checked items will be saved to \extrathu" & _ + "mbs." + Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblInfo.Visible = False + ' + 'pnlDLStatus + ' + Me.pnlDLStatus.BackColor = System.Drawing.Color.White + Me.pnlDLStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlDLStatus.Controls.Add(Me.pnlMPDB) + Me.pnlDLStatus.Controls.Add(Me.pnlIMPA) + Me.pnlDLStatus.Controls.Add(Me.lblDL1Status) + Me.pnlDLStatus.Controls.Add(Me.lblDL1) + Me.pnlDLStatus.Controls.Add(Me.pbDL1) + Me.pnlDLStatus.Location = New System.Drawing.Point(257, 132) + Me.pnlDLStatus.Name = "pnlDLStatus" + Me.pnlDLStatus.Size = New System.Drawing.Size(321, 223) + Me.pnlDLStatus.TabIndex = 2 + Me.pnlDLStatus.Visible = False + ' + 'pnlMPDB + ' + Me.pnlMPDB.Controls.Add(Me.lblDL3Status) + Me.pnlMPDB.Controls.Add(Me.lblDL3) + Me.pnlMPDB.Controls.Add(Me.pbDL3) + Me.pnlMPDB.Location = New System.Drawing.Point(0, 147) + Me.pnlMPDB.Name = "pnlMPDB" + Me.pnlMPDB.Size = New System.Drawing.Size(321, 75) + Me.pnlMPDB.TabIndex = 4 + ' + 'lblDL3Status + ' + Me.lblDL3Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL3Status.Name = "lblDL3Status" + Me.lblDL3Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL3Status.TabIndex = 1 + ' + 'lblDL3 + ' + Me.lblDL3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3.Location = New System.Drawing.Point(5, 10) + Me.lblDL3.Name = "lblDL3" + Me.lblDL3.Size = New System.Drawing.Size(310, 13) + Me.lblDL3.TabIndex = 0 + Me.lblDL3.Text = "Performing Preliminary Tasks..." + ' + 'pbDL3 + ' + Me.pbDL3.Location = New System.Drawing.Point(6, 53) + Me.pbDL3.Name = "pbDL3" + Me.pbDL3.Size = New System.Drawing.Size(309, 19) + Me.pbDL3.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL3.TabIndex = 2 + ' + 'pnlIMPA + ' + Me.pnlIMPA.Controls.Add(Me.pnlSinglePic) + Me.pnlIMPA.Controls.Add(Me.lblDL2Status) + Me.pnlIMPA.Controls.Add(Me.lblDL2) + Me.pnlIMPA.Controls.Add(Me.pbDL2) + Me.pnlIMPA.Location = New System.Drawing.Point(0, 73) + Me.pnlIMPA.Name = "pnlIMPA" + Me.pnlIMPA.Size = New System.Drawing.Size(321, 75) + Me.pnlIMPA.TabIndex = 3 + ' + 'lblDL2Status + ' + Me.lblDL2Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL2Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL2Status.Name = "lblDL2Status" + Me.lblDL2Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL2Status.TabIndex = 1 + ' + 'lblDL2 + ' + Me.lblDL2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL2.Location = New System.Drawing.Point(5, 10) + Me.lblDL2.Name = "lblDL2" + Me.lblDL2.Size = New System.Drawing.Size(310, 13) + Me.lblDL2.TabIndex = 0 + Me.lblDL2.Text = "Performing Preliminary Tasks..." + ' + 'pbDL2 + ' + Me.pbDL2.Location = New System.Drawing.Point(6, 52) + Me.pbDL2.Name = "pbDL2" + Me.pbDL2.Size = New System.Drawing.Size(309, 19) + Me.pbDL2.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL2.TabIndex = 2 + ' + 'lblDL1Status + ' + Me.lblDL1Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL1Status.Location = New System.Drawing.Point(5, 29) + Me.lblDL1Status.Name = "lblDL1Status" + Me.lblDL1Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL1Status.TabIndex = 1 + ' + 'lblDL1 + ' + Me.lblDL1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL1.Location = New System.Drawing.Point(5, 6) + Me.lblDL1.Name = "lblDL1" + Me.lblDL1.Size = New System.Drawing.Size(310, 13) + Me.lblDL1.TabIndex = 0 + Me.lblDL1.Text = "Performing Preliminary Tasks..." + ' + 'pbDL1 + ' + Me.pbDL1.Location = New System.Drawing.Point(6, 49) + Me.pbDL1.Name = "pbDL1" + Me.pbDL1.Size = New System.Drawing.Size(309, 19) + Me.pbDL1.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL1.TabIndex = 2 + ' + 'pnlSinglePic + ' + Me.pnlSinglePic.BackColor = System.Drawing.Color.White + Me.pnlSinglePic.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlSinglePic.Controls.Add(Me.Label2) + Me.pnlSinglePic.Controls.Add(Me.ProgressBar1) + Me.pnlSinglePic.Location = New System.Drawing.Point(0, 1) + Me.pnlSinglePic.Name = "pnlSinglePic" + Me.pnlSinglePic.Size = New System.Drawing.Size(321, 75) + Me.pnlSinglePic.TabIndex = 1 + Me.pnlSinglePic.Visible = False + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(5, 10) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(310, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Downloading Selected Image..." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(6, 53) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(309, 19) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'dlgImgSelect + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(836, 545) + Me.ControlBox = False + Me.Controls.Add(Me.pnlDLStatus) + Me.Controls.Add(Me.pnlBG) + Me.Controls.Add(Me.pnlBottomMain) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgImgSelect" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Poster" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlSize.ResumeLayout(False) + Me.pnlSize.PerformLayout() + Me.pnlFanart.ResumeLayout(False) + Me.pnlFanart.PerformLayout() + Me.pnlDLStatus.ResumeLayout(False) + Me.pnlMPDB.ResumeLayout(False) + Me.pnlIMPA.ResumeLayout(False) + Me.pnlSinglePic.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlDLStatus As System.Windows.Forms.Panel + Friend WithEvents lblDL1Status As System.Windows.Forms.Label + Friend WithEvents lblDL1 As System.Windows.Forms.Label + Friend WithEvents pbDL1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlIMPA As System.Windows.Forms.Panel + Friend WithEvents lblDL2Status As System.Windows.Forms.Label + Friend WithEvents lblDL2 As System.Windows.Forms.Label + Friend WithEvents pbDL2 As System.Windows.Forms.ProgressBar + Friend WithEvents lblInfo As System.Windows.Forms.Label + Friend WithEvents pnlSize As System.Windows.Forms.Panel + Friend WithEvents rbSmall As System.Windows.Forms.RadioButton + Friend WithEvents rbMedium As System.Windows.Forms.RadioButton + Friend WithEvents rbLarge As System.Windows.Forms.RadioButton + Friend WithEvents rbXLarge As System.Windows.Forms.RadioButton + Friend WithEvents pnlSinglePic As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlMPDB As System.Windows.Forms.Panel + Friend WithEvents lblDL3Status As System.Windows.Forms.Label + Friend WithEvents lblDL3 As System.Windows.Forms.Label + Friend WithEvents pbDL3 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlFanart As System.Windows.Forms.Panel + Friend WithEvents chkThumb As System.Windows.Forms.CheckBox + Friend WithEvents chkMid As System.Windows.Forms.CheckBox + Friend WithEvents chkOriginal As System.Windows.Forms.CheckBox + Friend WithEvents btnPreview As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.TVDB.Poster/Scraper/dlgImgSelect.resx b/Addons/scraper.TVDB.Poster/Scraper/dlgImgSelect.resx new file mode 100644 index 0000000..e4a4f58 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/dlgImgSelect.resx @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnPreview.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA + CwAB5DetvwAAAuRJREFUOE+lkltsS3Ecx3+ILAsPFrfEyxJPXkh0bokg4UG78TQNI5FImPBAJKiNhBAy + MTwRMRJ1ibsZ29jc2t00Vrq1p3q6tqft6Tk9t87YeLCHff3/3Sp4dZJPvv/f5fs7///5HwJA/8Nv88jw + 8ApD1y+blnnNtKwGjmXl/qCQMxt+fB9xjI2NEYdGR0dp9OfP6Yph+gOKjpBmMcy8CoxwPi5gok81kDGt + BPOUci+xt1LO0Gy+ZAZuUcbtCe4NpHEtLKNBkHGfrQt5dySNrpSKIcvcbJkmka5pNKhrtrfxFE71RlD3 + UcT5gIjt7THMvhLHTEZlSwz1n0ScZTXe8yKextec6TRNY3zAF0O3tUYl7Ovqh+t9EHs8IRSdC4FO9+WZ + VBfEjlchHPEF8z2PRQnDg9b4AE3L0hA7wqNwDFWvP2Cn1w9Hox90zAc6McFRH9Y97MWuDn++56YwgJEc + G2CwAdmsSkPsCLf6I1jb3IUNL3sY3Zhxxgs67AG5PCg+4YW9uRsbWY33XAp8xrBlOHVdI1IVhb5oWdv1 + QBjLn3qwtqUDq5s6MOd0O2jfizwlx9uwqtGLdazGey76Q/hm6k4tmyXKyDLlVMV29aOApU0erHnWgWmH + noF2NYL2Ph2nuhFF+5uw8okXy1hP/YcghjTVqSgZoqQkkZZK2m58ErDouRfzLjSDKt2grbf+ZpMbJSeb + sPA520FvCINqxinLaaKoKHJsETGK1rCIh+8F3HnTh7vvgrjHbqMAjx/0CGiNDCAqJZGUEk45zQYk4nG+ + i7LPgoBkNIpsOglTzcDSFOQ0FTmdwdRiyvNqKolELAZZlre0t7URLSkro21VVSVdnZ1pSZKQSqXAPizY + /wHDMMCuKg+Ps6oKJZNBsL//6+7q6gWTaPzhWjx31qzF5Xb7Acf69S6mNRV2e22Fw1G7gcGVUcPyro3l + 5Qfnl5auYZ4Zk7l3ClsxuBQGTszNx/9SqHHDVG76BaMnpgu1OH2ZAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/Scraper/dlgImgSelect.vb b/Addons/scraper.TVDB.Poster/Scraper/dlgImgSelect.vb new file mode 100644 index 0000000..7e37076 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/dlgImgSelect.vb @@ -0,0 +1,1309 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgImgSelect + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker + + Private CachePath As String = String.Empty + Private chkImage() As CheckBox + Private DLType As Enums.ImageType + Private ETHashes As New List(Of String) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + Private IMPA As New IMPA.Scraper + Private IMPAPosters As New List(Of MediaContainers.Image) + Private isEdit As Boolean = False + Private isShown As Boolean = False + Private iTop As Integer = 5 + Private lblImage() As Label + Private MPDB As New MPDB.Scraper + Private MPDBPosters As New List(Of MediaContainers.Image) + Private noImages As Boolean = False + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private PreDL As Boolean = False + Private Results As New Containers.ImgResult + Private selIndex As Integer = -1 + Private TMDB As New TMDB.Scraper + Private TMDBPosters As New List(Of MediaContainers.Image) + Private tMovie As New Structures.DBMovie + Private tmpImage As New MediaContainers.Image + Private _impaDone As Boolean = True + Private _mpdbDone As Boolean = True + Private _tmdbDone As Boolean = True + Private selURL As String = "" + +#End Region 'Fields + +#Region "Events" + + Private Event IMPADone() + + Private Event MPDBDone() + + Private Event TMDBDone() + +#End Region 'Events + +#Region "Methods" + + Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.PreDL = True + Me.SetUp() + Me.StartDownload() + End Sub + + Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult + '// + ' Overload to pass data + '\\ + + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.isShown = True + + MyBase.ShowDialog() + Return Results + End Function + + Public Overloads Function ShowDialog() As Containers.ImgResult + Me.isShown = True + MyBase.ShowDialog() + + Return Results + End Function + + 'Rewrite to simplify + Private Sub AddImage(ByVal iImage As Image, ByVal sDescription As String, ByVal iIndex As Integer, ByVal sURL As String, ByVal isChecked As Boolean, poster As MediaContainers.Image) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(256, 286) + Me.pbImage(iIndex).Size = New Size(250, 250) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.pnlImage(iIndex).Tag = poster + Me.pbImage(iIndex).Tag = poster + Me.pbImage(iIndex).Image = iImage + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.pnlBG.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If Me.DLType = Enums.ImageType.Fanart Then + ReDim Preserve Me.chkImage(iIndex) + Me.chkImage(iIndex) = New CheckBox() + Me.chkImage(iIndex).Name = iIndex.ToString + Me.chkImage(iIndex).Size = New Size(250, 30) + Me.chkImage(iIndex).AutoSize = False + Me.chkImage(iIndex).BackColor = Color.White + Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + 'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + Me.chkImage(iIndex).Left = 0 + Me.chkImage(iIndex).Top = 250 + Me.chkImage(iIndex).Checked = isChecked + Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve Me.lblImage(iIndex) + Me.lblImage(iIndex) = New Label() + Me.lblImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Size = New Size(250, 30) + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + If IsTMDBURL(sURL) Then + Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + Else + Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + End If + Me.lblImage(iIndex).Tag = poster + Me.lblImage(iIndex).Left = 0 + Me.lblImage(iIndex).Top = 250 + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 301 + Else + Me.iLeft += 271 + End If + End Sub + + Private Sub AllDoneDownloading() + If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone Then + Me.pnlDLStatus.Visible = False + Me.TMDBPosters.AddRange(Me.IMPAPosters) + Me.TMDBPosters.AddRange(Me.MPDBPosters) + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + End If + End Sub + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + PreviewImage() + End Sub + Private Sub PreviewImage() + Try + Dim tImage As New Images + + Me.pnlSinglePic.Visible = True + Application.DoEvents() + + Select Case True + Case rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + Case rbLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + Case rbMedium.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case rbSmall.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End Select + + Me.pnlSinglePic.Visible = False + + If Not IsNothing(tImage.Image) Then + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image) + + End If + + tImage.Dispose() + tImage = Nothing + + Catch ex As Exception + Me.pnlSinglePic.Visible = False + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork + '// + ' Thread to download impa posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + + For i As Integer = 0 To Me.IMPAPosters.Count - 1 + If bwIMPADownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL) + Try + Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL) + Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg"))) + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL2.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPADownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._impaDone = True + RaiseEvent IMPADone() + End If + End Sub + + Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.MPDBPosters.Count - 1 + Try + If Me.bwMPDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL) + Try + Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL) + Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg"))) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL3.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._mpdbDone = True + RaiseEvent MPDBDone() + End If + End Sub + + Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork + '// + ' Thread to download tmdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + Dim thumbLink As String = String.Empty + Dim savePath As String = String.Empty + Dim extrathumbSize As String = String.Empty + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + 'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all. + Dim posters As MediaContainers.Image() + If Me.DLType = Enums.ImageType.Fanart Then + posters = TMDBPosters.Where(Function(s) s.Description = extrathumbSize).ToArray() + Else + posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray() + End If + + Dim percent = 100 / posters.Count + For i As Integer = 0 To posters.Count - 1 + Try + If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then + If Me.bwTMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwTMDBDownload.ReportProgress(Convert.ToInt32((i + 1) * percent), posters(i).URL) + Try + posters(i).WebImage.FromWeb(posters(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then + If Me.DLType = Enums.ImageType.Fanart Then + + + If Not posters(i).URL.Contains("-thumb.") Then + Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org" + thumbLink = RemoveServerURL(posters(i).URL) + 'If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("-poster.", "-thumb.") + thumbLink = thumbLink.Replace("-original.", "-thumb.") + ''Else + 'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb") + 'End If + Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Else + Me.Results.Posters.Add(posters(i).URL) + End If + End If + If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then + Try + posters(i).URL = Me.CleanTMDBURL(posters(i).URL) + + savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg")) + posters(i).WebImage.Save(savePath) + + If Master.eSettings.AutoET Then + Dim tSize As New Enums.FanartSize + Select Case posters(i).Description.ToLower + Case "original" + tSize = Enums.FanartSize.Lrg + Case "mid" + tSize = Enums.FanartSize.Mid + Case "thumb" + tSize = Enums.FanartSize.Small + End Select + If Master.eSettings.AutoETSize = tSize Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + posters(i).isChecked = True + End If + End If + End If + + Catch + End Try + End If + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL1Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL1.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._tmdbDone = True + RaiseEvent TMDBDone() + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + IMPA.Cancel() + MPDB.Cancel() + TMDB.Cancel() + + If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync() + If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync() + If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync() + + While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean) + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Text.ToLower.Contains(sType) Then + Me.chkImage(i).Checked = Checked + End If + Next + End Sub + + Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged + Me.CheckAll("(poster)", chkMid.Checked) + End Sub + + Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged + Me.CheckAll("(original)", chkOriginal.Checked) + End Sub + + Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged + Me.CheckAll("(thumb)", chkThumb.Checked) + End Sub + + Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'Me.tmpImage.Dispose() + + IMPA = Nothing + MPDB = Nothing + TMDB = Nothing + + IMPAPosters = Nothing + MPDBPosters = Nothing + TMDBPosters = Nothing + End Sub + + Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath) + End Sub + + Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not PreDL Then SetUp() + End Sub + + Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Try + Application.DoEvents() + If Not PreDL Then + StartDownload() + ElseIf noImages Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image) + Try + 'set all pnl colors to white first + 'remove all the current genres + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(i).BackColor = Color.White + Me.chkImage(i).ForeColor = Color.Black + Else + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + End If + Next + + 'set selected pnl color to blue + Me.pnlImage(iIndex).BackColor = Color.Blue + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(iIndex).BackColor = Color.Blue + Me.chkImage(iIndex).ForeColor = Color.White + Else + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + End If + + Me.selIndex = iIndex + Me.selURL = poster.URL + + Me.pnlSize.Visible = False + + If IsTMDBURL(poster.URL) Then + Me.SetupSizes(poster.ParentID) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + Me.OK_Button.Enabled = False + Else + Me.OK_Button.Focus() + End If + Me.tmpImage.Clear() + Else + Me.rbXLarge.Checked = False + Me.rbLarge.Checked = False + Me.rbMedium.Checked = False + Me.rbSmall.Checked = False + Me.OK_Button.Enabled = True + Me.OK_Button.Focus() + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function IsTMDBURL(ByVal sURL As String) As Boolean + If sURL.ToLower.Contains("themoviedb.org") OrElse sURL.ToLower.Contains("d3gtl9l2a4fn1j.cloudfront.net") OrElse sURL.ToLower.Contains("cf1.imgobject.com") OrElse sURL.ToLower.Contains("cf2.imgobject.com") Then + Return True + Else + Return False + End If + End Function + + Private Function CleanTMDBURL(ByVal sURL As String) As String + If IsTMDBURL(sURL) Then + Dim _sURL As New Uri(sURL) + sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped)) + Else + sURL = StringUtils.TruncateURL(sURL, 40, True) + End If + Return sURL.Replace(":", "$c$").Replace("/", "$s$") + End Function + + + Private Sub GetFanart() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim di As New DirectoryInfo(CachePath) + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + If Not IsNothing(tImage.WebImage.Image) Then + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + 'Case sFile.Name.Contains("(mid)") + ' tImage.Description = "mid" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + End If + Next + ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Me.lblDL1.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL1Status.Text = String.Empty + Me.pbDL1.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me.TMDB.GetImagesAsync(tMovie.Movie.IMDBID, "backdrop") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub GetPosters() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim lFi As New List(Of FileInfo) + Dim di As New DirectoryInfo(CachePath) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Height = 75 + Me.pnlDLStatus.Top = 207 + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + Next + ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + Me.lblDL1.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL1Status.Text = String.Empty + Me.pbDL1.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.IMDBID, "poster") + Else + Me.lblDL1.Text = Master.eLang.GetString(33, "TheMovieDB.com is not enabled") + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + Me.lblDL2.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._impaDone = False + + Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL2.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled") + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + Me.lblDL3.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._mpdbDone = False + + Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL3.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPADoneDownloading() + Try + Me._impaDone = True + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL2.Value = 0 + + Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = Posters.Count + + Me.IMPAPosters = Posters + + Me.bwIMPADownload.WorkerSupportsCancellation = True + Me.bwIMPADownload.WorkerReportsProgress = True + Me.bwIMPADownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAProgressUpdated(ByVal iPercent As Integer) + Me.pbDL2.Value = iPercent + End Sub + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then + pnlBG.VerticalScroll.Value += 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum + End If + Else + If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then + pnlBG.VerticalScroll.Value -= 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub MPDBDoneDownloading() + Try + Me._mpdbDone = True + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL3.Value = 0 + + Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = Posters.Count + + Me.MPDBPosters = Posters + + Me.bwMPDBDownload.WorkerSupportsCancellation = True + Me.bwMPDBDownload.WorkerReportsProgress = True + Me.bwMPDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL3.Value = iPercent + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + Dim tmpPathPlus As String = String.Empty + Dim extrathumbSize As String + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + If DLType = Enums.ImageType.Fanart Then + tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") + Else + tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") + End If + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + 'Me.tmpImage.Save(tmpPathPlus, 100, selURL) + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + 'Me.tmpImage.Save(tmpPathPlus, 100, selURL) + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If + + If Me.DLType = Enums.ImageType.Fanart Then + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + Dim isChecked As Boolean = False + + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + isChecked = True + Exit For + End If + Next + + If isChecked Then + Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs") + If isEdit Then + extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName) + Else + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName) + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName) + Else + extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName) + End If + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + End If + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + Dim fsET As FileStream + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) + Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg) + fsET.Close() + iVal += 1 + End If + Next + fsET = Nothing + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + Try + 'If Me.DLType = Enums.ImageType.Fanart OrElse Not IsTMDBURL(DirectCast(sender, PictureBox).Tag.ToString) Then + 'ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(DirectCast(sender, PictureBox).Image) + 'Else + PreviewImage() + 'End If + Catch + End Try + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Panel).Name), DirectCast(DirectCast(sender, Panel).Tag, MediaContainers.Image)) + End Sub + + Private Sub ProcessPics(ByVal posters As List(Of MediaContainers.Image)) + Try + Dim iIndex As Integer = 0 + + 'remove all entries with invalid images + If Master.eSettings.UseImgCache Then + For i As Integer = posters.Count - 1 To 0 Step -1 + If IsNothing(posters.Item(i).WebImage.Image) Then + posters.RemoveAt(i) + End If + Next + End If + + If posters.Count > 0 Then + For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) RemoveServerURL(p.URL)) + If Not IsNothing(xPoster.WebImage.Image) AndAlso (Me.DLType = Enums.ImageType.Fanart OrElse Not (IsTMDBURL(xPoster.URL) AndAlso Not xPoster.Description = "cover")) Then + Me.AddImage(xPoster.WebImage.Image, xPoster.Description, iIndex, xPoster.URL, xPoster.isChecked, xPoster) + iIndex += 1 + End If + Next + Else + If Not Me.PreDL OrElse isShown Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Else + noImages = True + End If + End If + + Me.Activate() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub rbLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbMedium_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbMedium.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbSmall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSmall.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbXLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbXLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub SetUp() + Try + IMPA.IMDBURL = IMDBURL + TMDB.IMDBURL = IMDBURL + MPDB.IMDBURL = IMDBURL + AddHandler TMDB.PostersDownloaded, AddressOf TMDBPostersDownloaded + AddHandler TMDB.ProgressUpdated, AddressOf TMDBProgressUpdated + AddHandler IMPA.PostersDownloaded, AddressOf IMPAPostersDownloaded + AddHandler IMPA.ProgressUpdated, AddressOf IMPAProgressUpdated + AddHandler MPDB.PostersDownloaded, AddressOf MPDBPostersDownloaded + AddHandler MPDB.ProgressUpdated, AddressOf MPDBProgressUpdated + AddHandler IMPADone, AddressOf IMPADoneDownloading + AddHandler TMDBDone, AddressOf TMDBDoneDownloading + AddHandler MPDBDone, AddressOf MPDBDoneDownloading + + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlBG.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlBG) + + If Me.DLType = Enums.ImageType.Posters Then + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Else + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlDLStatus.Height = 75 + Me.pnlDLStatus.Top = 207 + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(tMovie.Filename) + End If + End If + + CachePath = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, tMovie.Movie.IMDBID, Path.DirectorySeparatorChar, If(Me.DLType = Enums.ImageType.Posters, "posters", "fanart")) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview", True) + Me.chkThumb.Text = Master.eLang.GetString(41, "Check All Thumb") + Me.chkMid.Text = Master.eLang.GetString(42, "Check All Mid") + Me.chkOriginal.Text = Master.eLang.GetString(43, "Check All Original") + Me.lblInfo.Text = Master.eLang.GetString(44, "Selected item will be set as fanart. All checked items will be saved to \extrathumbs.") + Me.lblDL3.Text = Master.eLang.GetString(45, "Performing Preliminary Tasks...") + Me.lblDL2.Text = Me.lblDL3.Text + Me.lblDL1.Text = Me.lblDL3.Text + Me.Label2.Text = Master.eLang.GetString(46, "Downloading Selected Image...") + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(0, sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Function RemoveServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Sub SetupSizes(ByVal ParentID As String) + Try + rbXLarge.Checked = False + rbXLarge.Enabled = False + rbXLarge.Text = Master.eLang.GetString(47, "Original") + rbLarge.Checked = False + rbLarge.Enabled = False + rbMedium.Checked = False + rbSmall.Checked = False + rbSmall.Enabled = False + If Me.DLType = Enums.ImageType.Fanart Then + rbLarge.Text = "w1280" + rbMedium.Text = "poster" + rbSmall.Text = "thumb" + Else + rbLarge.Text = Master.eLang.GetString(48, "Cover") + rbMedium.Text = Master.eLang.GetString(49, "Medium") + rbSmall.Text = Master.eLang.GetString(50, "Small") + End If + + For Each TMDBPoster As MediaContainers.Image In TMDBPosters.Where(Function(f) f.ParentID = ParentID) + Select Case TMDBPoster.Description + Case "original" + ' xlarge + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbXLarge.Enabled = True + rbXLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "cover" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "w1280" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format("w1280 ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + End If + Case "thumb" + ' small + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbSmall.Enabled = True + rbSmall.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "mid" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + Case "poster" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format("Poster ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + End Select + Next + + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Small + rbSmall.Checked = rbSmall.Enabled + Case Enums.PosterSize.Mid + rbMedium.Checked = rbMedium.Enabled + Case Enums.PosterSize.Lrg + rbLarge.Checked = rbLarge.Enabled + Case Enums.PosterSize.Xlrg + rbXLarge.Checked = rbXLarge.Enabled + End Select + + pnlSize.Visible = True + + Invalidate() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub StartDownload() + Try + Select Case Me.DLType + Case Enums.ImageType.Posters + Me.GetPosters() + Case Enums.ImageType.Fanart + Me.GetFanart() + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBDoneDownloading() + Try + If Me.DLType = Enums.ImageType.Posters Then + Me._tmdbDone = True + Me.AllDoneDownloading() + Else + Me.pnlDLStatus.Visible = False + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL1.Value = 0 + + Me.lblDL1.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL1Status.Text = String.Empty + + TMDBPosters = Posters + Me.pbDL1.Maximum = 100 + + Me.bwTMDBDownload.WorkerSupportsCancellation = True + Me.bwTMDBDownload.WorkerReportsProgress = True + Me.bwTMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL1.Value = iPercent + End Sub + +#End Region 'Methods +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.TVDB.Poster/Scraper/dlgTrailer.Designer.vb new file mode 100644 index 0000000..2871b29 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/dlgTrailer.Designer.vb @@ -0,0 +1,292 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.btnPlayBrowser = New System.Windows.Forms.Button() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(350, 340) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(120, 23) + Me.OK_Button.TabIndex = 6 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(350, 369) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(120, 23) + Me.Cancel_Button.TabIndex = 7 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(445, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(458, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(122, 60) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(130, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(445, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(410, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(395, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(71, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(426, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(151, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 369) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(120, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(224, 340) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(120, 23) + Me.btnSetNfo.TabIndex = 5 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(478, 331) + Me.Panel1.TabIndex = 2 + ' + 'btnPlayBrowser + ' + Me.btnPlayBrowser.Enabled = False + Me.btnPlayBrowser.Location = New System.Drawing.Point(12, 340) + Me.btnPlayBrowser.Name = "btnPlayBrowser" + Me.btnPlayBrowser.Size = New System.Drawing.Size(120, 23) + Me.btnPlayBrowser.TabIndex = 4 + Me.btnPlayBrowser.Text = "Open In Browser" + Me.btnPlayBrowser.UseVisualStyleBackColor = True + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(484, 398) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Controls.Add(Me.btnPlayBrowser) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lbTrailers As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnPlayTrailer As System.Windows.Forms.Button + Friend WithEvents btnSetNfo As System.Windows.Forms.Button + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtYouTube As System.Windows.Forms.TextBox + Friend WithEvents btnBrowse As System.Windows.Forms.Button + Friend WithEvents txtManual As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog + Friend WithEvents btnGetTrailers As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents btnPlayBrowser As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.TVDB.Poster/Scraper/dlgTrailer.resx b/Addons/scraper.TVDB.Poster/Scraper/dlgTrailer.resx new file mode 100644 index 0000000..f08e020 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/dlgTrailer.resx @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnGetTrailers.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAK + 6QAACukB/XXO0wAAABh0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzT7MfTgAAAfdJREFUOE+lkk1r + E1EUhi9apQsr7vwDigUXLtzpyrWlpdD8BSEbN1p1IRJQqNXoarCNH03aKlgQjU1ahCr2a6HSRRszGSe0 + 4nQ+M9/JjIhYeb25JGVGmo0OPMw5h/M+9zIMAfBfxBpd07osyzxv21aCMuTY9pDnugmhUjkX3YsSa8xa + 7ToVgIZBw4wgaGBlZRn376WHo7ttYg0NjzfDTODYcB0H38MQS0uLuDM6isz42NXofpNYQwXc7uktge95 + 0FQVxcIs5opFfPr44UI0s6cgeoO2JAwD1Ot+c56NZmIC+g2YwLJN+E6A0NtB6O/AdwMmbTEWzcQEhq5z + plmjgRBflDeYF5IMQZ5nMya3zM4CVVU4XdfQcH/hffUmbi0TxjvxBr3NbzTlhqF3FsjyNqcoMjzzB94K + aaQWjzAWhNuo2z9B/xOoitJZ8HVri5MkCbZWx1zpLoYXjjIKpRE4RgOKLGNbkjoL+HL5gbSpYGL1GpL5 + Y7hYOMlI5o/j0eolqN8MVEUxE83EBBvr6yP8Zx4b5TVceTWIRK6XcfllP0qVNYiCiArPp6OZ3WI/IYf6 + +/pO5bITmfzM6+e5Z9mps6ne6pnUic0nTx9Pz74ozkxPTT4cHBg4vY+Qw3sJDhBCutmQPq13DyFdPX/N + uunuwWbN+nbxb4D8AU3a+lQSEAyqAAAAAElFTkSuQmCC +</value> + </data> + <data name="btnPlayTrailer.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9kEGhIhAdf7pBcAAAJDSURBVDhPtVJLa5pBFPWxsGoQNI2oAY1ogigI + GitIULQufKxcBGmzLLpwo9B/UOgmv6GKuxDdCCKIGyOBLIpE8IWIaBauFEQSwcfCuZ07PkIogW564HDn + m7nnzHxzhvNfsFwuE5PJ5HelUnm5u7ubDYfD5ng8/kGXDjYd7+Dp6elTv9+fJxIJcDgcJBAIQDAYhIuL + CxKLxaDdbkOhUPiybX8LFJdKJdBoNOT8/BxcLheYzWaw2WyA30i9Xk+y2SxkMplvW9kr6M4LWohEIoHj + 42MIh8OQy+VAJpOBSqVic1KpFLCnVquBQqFQMyFisVh8x+PS4Z4ejwcQ6XSafXO53P2a1WqFer1+Q8cb + zOfzKi2Ect+Ev7BDKpXaz+/YarVeaN2gWq3OaAEejwd8Pp/R7XYz8Xq9ZjWZTDLh7iTlchnrR8pXA6FQ + CCKRCMRiMfh8PiYkhDCT5+dnODo6AoFAwAxoxFhVqOdMp9MWdSZ4SYeHhyCXyyEUCjEDFNN1TIddKF4y + GjSbzRWtH5jBaDT6eXl5CUqlEtRqNWi1Wri6umIGuDPGeXJywpJAc6fTCff392Um3uKAxogGxGAwMEEk + EoHVasXSsFgsYDKZ8B3gCUmj0QCdTufeajfI5/NfHx4ewGg0EvoKmQGeyuv1sh3tdjucnp6SYrEI19fX + v7ayt7i9vY3SFwnxeJzF6Pf72WWiQTQahW63+754B/qf6sfHx5vBYDDrdDqA7PV6Kxpb5ezs7PO27Z/A + pZRTYlRCnPgbHM4fFEdnm0hssg4AAAAASUVORK5CYII= +</value> + </data> + <metadata name="ofdTrailer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>40</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/Scraper/dlgTrailer.vb b/Addons/scraper.TVDB.Poster/Scraper/dlgTrailer.vb new file mode 100644 index 0000000..67c25ca --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/dlgTrailer.vb @@ -0,0 +1,480 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgTrailer + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwCompileList As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwDownloadTrailer As New System.ComponentModel.BackgroundWorker + + Private cTrailer As New Trailers + Private imdbID As String = String.Empty + Private prePath As String = String.Empty + Private sPath As String = String.Empty + Private tArray As New List(Of String) + Private tURL As String = String.Empty + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal _imdbID As String, ByVal _sPath As String) As String + Me.imdbID = _imdbID + Me.sPath = _sPath + + If MyBase.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + Return Replace(Me.tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + Return Me.tURL + End If + Else + Return String.Empty + End If + End Function + + Protected Overrides Sub Finalize() + cTrailer = Nothing + MyBase.Finalize() + End Sub + + Private Sub BeginDownload(ByVal CloseDialog As Boolean) + Dim didCancel As Boolean = False + + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(56, "Downloading selected trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + If CloseDialog Then + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, Path.GetFileName(Me.prePath)) + FileUtils.Common.MoveFileWithStream(Me.prePath, Me.tURL) + + File.Delete(Me.prePath) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.prePath, """")) + didCancel = True + End If + ElseIf Me.txtManual.Text.Length > 0 Then + Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + If CloseDialog Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.txtManual.Text, """")) + didCancel = True + End If + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + didCancel = True + End If + ElseIf Regex.IsMatch(Me.txtYouTube.Text, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.txtYouTube.Text) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + ElseIf StringUtils.isValidURL(Me.txtYouTube.Text) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = Me.txtYouTube.Text, .bType = CloseDialog}) + Else + If Regex.IsMatch(Me.lbTrailers.SelectedItem.ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.lbTrailers.SelectedItem.ToString) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + Else + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = lbTrailers.SelectedItem.ToString, .bType = CloseDialog}) + End If + End If + + If didCancel Then + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + End Sub + + Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click + Try + With ofdTrailer + .InitialDirectory = Directory.GetParent(Master.currMovie.Filename).FullName + .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.ValidExts.ToArray(), ";*")) + .FilterIndex = 0 + End With + + If ofdTrailer.ShowDialog() = DialogResult.OK Then + txtManual.Text = ofdTrailer.FileName + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub btnGetTrailers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTrailers.Click + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.pnlStatus.Visible = True + + Me.bwCompileList = New System.ComponentModel.BackgroundWorker + Me.bwCompileList.WorkerSupportsCancellation = True + Me.bwCompileList.RunWorkerAsync() + End Sub + + Private Sub btnPlayTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayTrailer.Click + Try + Me.BeginDownload(False) + Catch + MsgBox(Master.eLang.GetString(58, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), MsgBoxStyle.Critical, Master.eLang.GetString(59, "Error Playing Trailer")) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Try + End Sub + + Private Sub btnPlayBrowser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayBrowser.Click + If Not String.IsNullOrEmpty(Me.txtYouTube.Text) Then + If Master.isWindows Then + Process.Start(Me.txtYouTube.Text) + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = Me.txtYouTube.Text + Explorer.Start() + End Using + End If + Else + If Master.isWindows Then + Process.Start(Me.lbTrailers.SelectedItem.ToString) + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = Me.lbTrailers.SelectedItem.ToString + Explorer.Start() + End Using + End If + End If + End Sub + + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click + + If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(62, "Moving specified file to trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + File.Move(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + Else + Dim didCancel As Boolean = False + + If StringUtils.isValidURL(Me.txtYouTube.Text) Then + tURL = Me.txtYouTube.Text + ElseIf Me.lbTrailers.SelectedItems.Count > 0 Then + tURL = lbTrailers.SelectedItem.ToString + Else + didCancel = True + End If + + If Not didCancel Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + + End Sub + + Private Sub bwCompileList_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwCompileList.DoWork + Try + tArray = cTrailer.GetTrailers(Me.imdbID, False) + + If Me.bwCompileList.CancellationPending Then + e.Cancel = True + End If + Catch + End Try + End Sub + + Private Sub bwCompileList_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwCompileList.RunWorkerCompleted + If Not e.Cancelled Then + If Me.tArray.Count > 0 Then + For Each tTrail As String In Me.tArray + Me.lbTrailers.Items.Add(tTrail) + Next + + Me.btnGetTrailers.Visible = False + Else + Me.btnGetTrailers.Enabled = False + End If + + End If + + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Sub + + Private Sub bwDownloadTrailer_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTrailer.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + + If Args.bType Then + Me.tURL = cTrailer.DownloadTrailer(Me.sPath, Args.Parameter) + Else + Me.prePath = cTrailer.DownloadTrailer(Path.Combine(Master.TempPath, Path.GetFileName(Me.sPath)), Args.Parameter) + End If + + Catch + End Try + + e.Result = Args.bType + + If Me.bwDownloadTrailer.CancellationPending Then + e.Cancel = True + End If + End Sub + + Private Sub bwDownloadTrailer_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwDownloadTrailer.ProgressChanged + pbStatus.Value = e.ProgressPercentage + End Sub + + Private Sub bwDownloadTrailer_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadTrailer.RunWorkerCompleted + If Not e.Cancelled Then + If Convert.ToBoolean(e.Result) Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + If Not String.IsNullOrEmpty(Me.prePath) Then System.Diagnostics.Process.Start(String.Concat("""", prePath, """")) + End If + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.cTrailer.Cancel() + + If Me.bwCompileList.IsBusy Then Me.bwCompileList.CancelAsync() + If Me.bwDownloadTrailer.IsBusy Then Me.bwDownloadTrailer.CancelAsync() + + While Me.bwCompileList.IsBusy OrElse Me.bwDownloadTrailer.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + cTrailer.IMDBURL = IMDBURL + AddHandler cTrailer.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + + Private Sub dlgTrailer_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub DownloadProgressUpdated(ByVal iProgress As Integer) + bwDownloadTrailer.ReportProgress(iProgress) + End Sub + + Private Sub lbTrailers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbTrailers.SelectedIndexChanged + Me.SetEnabled(True) + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.BeginDownload(True) + End Sub + + Private Sub SetEnabled(ByVal DeletePre As Boolean) + If DeletePre AndAlso Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + File.Delete(Me.prePath) + Me.prePath = String.Empty + End If + + If StringUtils.isValidURL(Me.txtYouTube.Text) OrElse Me.lbTrailers.SelectedItems.Count > 0 OrElse Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Enabled = True + Me.btnSetNfo.Enabled = True + Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.btnPlayBrowser.Enabled = False + Else + Me.btnPlayBrowser.Enabled = True + End If + If Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") + Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") + Else + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + Else + Me.OK_Button.Enabled = False + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(64, "Select Trailer") + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.GroupBox1.Text = Master.eLang.GetString(65, "Select Trailer to Download") + Me.GroupBox2.Text = Master.eLang.GetString(66, "Manual Trailer Entry") + Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") + Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") + Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnPlayBrowser.Text = Master.eLang.GetString(114, "Open In Browser") + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") + End Sub + + Private Sub txtManual_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtManual.TextChanged + Me.SetEnabled(True) + End Sub + + Private Sub txtYouTube_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtYouTube.TextChanged + Me.SetEnabled(True) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim bType As Boolean + Dim Parameter As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.TVDB.Poster/Scraper/dlgTrailerFormat.Designer.vb new file mode 100644 index 0000000..8d135fa --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/dlgTrailerFormat.Designer.vb @@ -0,0 +1,155 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailerFormat + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(72, 187) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(145, 187) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(4, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(170, 121) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(10, 8) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(180, 151) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(12, 75) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(12, 12) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(200, 169) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 217) + Me.Controls.Add(Me.pnlStatus) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lstFormats As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.TVDB.Poster/Scraper/dlgTrailerFormat.resx b/Addons/scraper.TVDB.Poster/Scraper/dlgTrailerFormat.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/dlgTrailerFormat.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/Scraper/dlgTrailerFormat.vb b/Addons/scraper.TVDB.Poster/Scraper/dlgTrailerFormat.vb new file mode 100644 index 0000000..8f0ad6e --- /dev/null +++ b/Addons/scraper.TVDB.Poster/Scraper/dlgTrailerFormat.vb @@ -0,0 +1,114 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTrailerFormat + +#Region "Fields" + + Private WithEvents YouTube As YouTube.Scraper + Private _selectedformaturl As String + Private _yturl As String + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal YTURL As String) As String + Me._yturl = YTURL + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return _selectedformaturl + Else + Return String.Empty + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailerFormat_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + Me.SetUp() + + lstFormats.DataSource = Nothing + + YouTube = New YouTube.Scraper + YouTube.GetVideoLinksAsync(Me._yturl) + + Catch ex As Exception + MsgBox(Master.eLang.GetString(71, "The video format links could not be retrieved."), MsgBoxStyle.Critical, Master.eLang.GetString(72, "Error Retrieving Video Format Links")) + End Try + End Sub + + Private Sub lstFormats_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFormats.SelectedIndexChanged + Try + Me._selectedformaturl = DirectCast(lstFormats.SelectedItem, YouTube.VideoLinkItem).URL + + If Me.lstFormats.SelectedItems.Count > 0 Then + Me.OK_Button.Enabled = True + Else + Me.OK_Button.Enabled = False + End If + Catch + End Try + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(73, "Select Format") + Me.lblStatus.Text = Master.eLang.GetString(74, "Getting available formats...") + Me.GroupBox1.Text = Master.eLang.GetString(75, "Available Formats") + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub YouTube_VideoLinksRetrieved(ByVal bSuccess As Boolean) Handles YouTube.VideoLinksRetrieved + Try + + If bSuccess Then + lstFormats.DataSource = YouTube.VideoLinks.Values.ToList + lstFormats.DisplayMember = "Description" + lstFormats.ValueMember = "URL" + + If YouTube.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + Me.lstFormats.SelectedIndex = YouTube.VideoLinks.IndexOfKey(Master.eSettings.PreferredTrailerQuality) + ElseIf Me.lstFormats.Items.Count = 1 Then + Me.lstFormats.SelectedIndex = 0 + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + Me.pnlStatus.Visible = False + Me.lstFormats.Enabled = True + End Try + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/TVScraper/clsScrapeTVDB.vb b/Addons/scraper.TVDB.Poster/TVScraper/clsScrapeTVDB.vb new file mode 100644 index 0000000..b0f8531 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/clsScrapeTVDB.vb @@ -0,0 +1,1911 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Data +Imports System.IO +Imports System.Text + +Imports ICSharpCode.SharpZipLib.Zip +Imports EmberAPI + +Public Class Scraper + +#Region "Fields" + + Public Const APIKey As String = "7B090234F418D074" + + Public Shared WithEvents sObject As New ScraperObject + Public Shared tEpisodes As New List(Of MediaContainers.EpisodeDetails) + Public Shared tmpTVDBShow As New TVDBShow + Public Shared TVDBImages As New TVImages + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + AddHandler sObject.ScraperEvent, AddressOf InnerEvent + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + +#End Region 'Events + +#Region "Methods" + + Public Sub CancelAsync() + sObject.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String) As MediaContainers.EpisodeDetails + Return sObject.ChangeEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .TVDBID = TVDBID, .SelectedLang = Lang, .iSeason = -999}) + End Function + + Public Function GetLangs(ByVal sMirror As String) As List(Of Containers.TVLanguage) + Dim tvdbLangs As New List(Of Containers.TVLanguage) + Dim cLang As Containers.TVLanguage + Dim xmlTVDB As XDocument + Dim sHTTP As New HTTP + + Dim apiXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/languages.xml", sMirror, APIKey)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(apiXML) Then + Try + xmlTVDB = XDocument.Parse(apiXML) + Catch + Return tvdbLangs + End Try + + Dim xLangs = From xLanguages In xmlTVDB.Descendants("Language") + + For Each xL As XElement In xLangs + cLang = New Containers.TVLanguage + cLang.LongLang = xL.Element("name").Value + cLang.ShortLang = xL.Element("abbreviation").Value + tvdbLangs.Add(cLang) + Next + End If + Return tvdbLangs + End Function + + Public Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As MediaContainers.EpisodeDetails + Return sObject.GetSingleEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .TVDBID = TVDBID, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Function + + Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images) As Images + Return sObject.GetSingleImage(New Structures.ScrapeInfo With {.ShowTitle = Title, .ShowID = ShowID, .TVDBID = TVDBID, .ImageType = Type, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .CurrentImage = CurrentImage}) + End Function + + Public Sub InnerEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent ScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Function IsBusy() As Boolean + Return sObject.IsBusy + End Function + + Public Sub SaveImages() + sObject.SaveImages() + End Sub + + Public Sub ScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) + sObject.ScrapeEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .iEpisode = iEpisode, .iSeason = iSeason, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Sub + + Public Sub ScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) + sObject.ScrapeSeason(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .iSeason = iSeason, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Sub + + Public Sub SingleScrape(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) + sObject.SingleScrape(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options, .ScrapeType = ScrapeType, .WithCurrent = WithCurrent, .iSeason = -999}) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + <Serializable()> _ + Public Structure TVImages + +#Region "Fields" + + Dim AllSeasonPoster As TVDBShowPoster + Dim SeasonImageList As List(Of TVDBSeasonImage) + Dim ShowFanart As TVDBFanart + Dim ShowPoster As TVDBShowPoster + +#End Region 'Fields + +#Region "Methods" + + Public Function Clone() As TVImages + Dim newTVI As New TVImages + Try + Using ms As New IO.MemoryStream() + Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter() + bf.Serialize(ms, Me) + ms.Position = 0 + newTVI = DirectCast(bf.Deserialize(ms), TVImages) + ms.Close() + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return newTVI + End Function + +#End Region 'Methods + + End Structure + + Public Class ScraperObject + +#Region "Fields" + + Friend WithEvents bwTVDB As New System.ComponentModel.BackgroundWorker + + Private aXML As String = String.Empty + Private bXML As String = String.Empty + Private sXML As String = String.Empty + +#End Region 'Fields + +#Region "Events" + + Public Event ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + +#End Region 'Events + +#Region "Methods" + + Public Shared Sub LoadAllEpisodes(ByVal _ID As Integer, ByVal OnlySeason As Integer) + Try + + tmpTVDBShow = New TVDBShow + + tmpTVDBShow.Show = Master.DB.LoadTVFullShowFromDB(_ID) + tmpTVDBShow.AllSeason = Master.DB.LoadTVAllSeasonFromDB(_ID) + + Using SQLCount As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + If OnlySeason = 999 Then + SQLCount.CommandText = String.Concat("SELECT COUNT(ID) AS eCount FROM TVEps WHERE TVShowID = ", _ID, " AND Missing = 0;") + Else + SQLCount.CommandText = String.Concat("SELECT COUNT(ID) AS eCount FROM TVEps WHERE TVShowID = ", _ID, " AND Season = ", OnlySeason, " AND Missing = 0;") + End If + Using SQLRCount As SQLite.SQLiteDataReader = SQLCount.ExecuteReader + If Convert.ToInt32(SQLRCount("eCount")) > 0 Then + Using SQLCommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + If OnlySeason = 999 Then + SQLCommand.CommandText = String.Concat("SELECT ID, Lock FROM TVEps WHERE TVShowID = ", _ID, " AND Missing = 0;") + Else + SQLCommand.CommandText = String.Concat("SELECT ID, Lock FROM TVEps WHERE TVShowID = ", _ID, " AND Season = ", OnlySeason, " AND Missing = 0;") + End If + Using SQLReader As SQLite.SQLiteDataReader = SQLCommand.ExecuteReader + While SQLReader.Read + tmpTVDBShow.Episodes.Add(Master.DB.LoadTVEpFromDB(Convert.ToInt64(SQLReader("ID")), True)) + End While + End Using + End Using + End If + End Using + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub CancelAsync() + If bwTVDB.IsBusy Then bwTVDB.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal sInfo As Structures.ScrapeInfo) As MediaContainers.EpisodeDetails + Try + Dim tEpisodes As List(Of MediaContainers.EpisodeDetails) = Me.GetListOfKnownEpisodes(sInfo) + If tEpisodes.Count > 0 Then + Using dChangeEp As New dlgTVChangeEp + Return dChangeEp.ShowDialog(tEpisodes) + End Using + Else + MsgBox(Master.eLang.GetString(79, "There are no known episodes for this show. Scrape the show, season, or episode and try again."), MsgBoxStyle.OkOnly, Master.eLang.GetString(80, "No Known Episodes")) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return Nothing + End Function + + Public Sub DownloadSeries(ByVal sInfo As Structures.ScrapeInfo, Optional ByVal ImagesOnly As Boolean = False) + Try + Dim fPath As String = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, sInfo.SelectedLang, ".zip")) + Dim fExists As Boolean = File.Exists(fPath) + Dim doDownload As Boolean = False + + Select Case Master.eSettings.TVUpdateTime + Case Enums.TVUpdateTime.Always + doDownload = True + Case Enums.TVUpdateTime.Never + doDownload = False + Case Enums.TVUpdateTime.Week + If fExists AndAlso File.GetCreationTime(fPath).AddDays(7) < Now Then doDownload = True + Case Enums.TVUpdateTime.BiWeekly + If fExists AndAlso File.GetCreationTime(fPath).AddDays(14) < Now Then doDownload = True + Case Enums.TVUpdateTime.Month + If fExists AndAlso File.GetCreationTime(fPath).AddMonths(1) < Now Then doDownload = True + End Select + + If doDownload OrElse Not fExists Then + Dim sHTTP As New HTTP + Dim xZip As Byte() = sHTTP.DownloadZip(String.Format("http://{0}/api/{1}/series/{2}/all/{3}.zip", Master.eSettings.TVDBMirror, APIKey, sInfo.TVDBID, sInfo.SelectedLang)) + sHTTP = Nothing + + If Not IsNothing(xZip) AndAlso xZip.Length > 0 Then + 'save it to the temp dir + Directory.CreateDirectory(Directory.GetParent(fPath).FullName) + Using fStream As FileStream = New FileStream(fPath, FileMode.Create, FileAccess.Write) + fStream.Write(xZip, 0, xZip.Length) + End Using + + Me.ProcessTVDBZip(xZip, sInfo) + Me.ShowFromXML(sInfo, ImagesOnly) + End If + Else + Using fStream As FileStream = New FileStream(fPath, FileMode.Open, FileAccess.Read) + Dim fZip As Byte() = Functions.ReadStreamToEnd(fStream) + + Me.ProcessTVDBZip(fZip, sInfo) + Me.ShowFromXML(sInfo, ImagesOnly) + End Using + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub DownloadSeriesAsync(ByVal sInfo As Structures.ScrapeInfo) + Try + If Not bwTVDB.IsBusy Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.StartingDownload, 0, Nothing) + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 1, .Parameter = sInfo}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetListOfKnownEpisodes(ByVal sInfo As Structures.ScrapeInfo) As List(Of MediaContainers.EpisodeDetails) + Dim Actors As New List(Of MediaContainers.Person) + Dim tEpisodes As New List(Of MediaContainers.EpisodeDetails) + Dim tEpisode As New MediaContainers.EpisodeDetails + Dim fPath As String = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, sInfo.SelectedLang, ".zip")) + Dim tSeas As Integer = -1 + Dim tOrdering As Enums.Ordering = Enums.Ordering.Standard + + Try + If File.Exists(fPath) Then + Using fStream As FileStream = New FileStream(fPath, FileMode.Open, FileAccess.Read) + Dim fZip As Byte() = Functions.ReadStreamToEnd(fStream) + Me.ProcessTVDBZip(fZip, sInfo) + + 'get the actors first + Try + If Not String.IsNullOrEmpty(aXML) Then + Dim xdActors As XDocument = XDocument.Parse(aXML) + For Each Actor As XElement In xdActors.Descendants("Actor") + If Not IsNothing(Actor.Element("Name")) AndAlso Not String.IsNullOrEmpty(Actor.Element("Name").Value) Then + Actors.Add(New MediaContainers.Person With {.Name = Actor.Element("Name").Value, .Role = If(IsNothing(Actor.Element("Role")), String.Empty, Actor.Element("Role").Value), .Thumb = If(IsNothing(Actor.Element("Image")) OrElse String.IsNullOrEmpty(Actor.Element("Image").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Actor.Element("Image").Value))}) + End If + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + If Not String.IsNullOrEmpty(sXML) Then + Dim xdEps As XDocument = XDocument.Parse(sXML) + + For Each Episode As XElement In xdEps.Descendants("Episode") + If Not IsNothing(Episode.Element("EpisodeName").Value) AndAlso Not String.IsNullOrEmpty(Episode.Element("EpisodeName").Value) Then + tEpisode = New MediaContainers.EpisodeDetails + + tOrdering = Enums.Ordering.Standard + + If sInfo.Ordering = Enums.Ordering.DVD Then + If Not IsNothing(Episode.Element("SeasonNumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("SeasonNumber").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_season").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_episodenumber").Value.ToString) Then + tSeas = Convert.ToInt32(Episode.Element("SeasonNumber").Value) + If sInfo.iSeason >= 0 AndAlso Not tSeas = sInfo.iSeason Then Continue For + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) = tSeas AndAlso (IsNothing(e.Element("DVD_season")) OrElse String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) OrElse IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + ElseIf Not IsNothing(Episode.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_season").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_episodenumber").Value.ToString) Then + tSeas = Convert.ToInt32(Episode.Element("DVD_season").Value) + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("DVD_season").Value) = tSeas AndAlso (IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + End If + ElseIf sInfo.Ordering = Enums.Ordering.Absolute Then + If Not IsNothing(Episode.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(Episode.Element("absolute_number").Value.ToString) Then + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) > 0 AndAlso (IsNothing(e.Element("absolute_number")) OrElse String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.Absolute + End If + End If + Else + If sInfo.iSeason >= 0 AndAlso Not Convert.ToInt32(Episode.Element("SeasonNumber").Value) = sInfo.iSeason Then Continue For + End If + + With tEpisode + .Title = Episode.Element("EpisodeName").Value + If tOrdering = Enums.Ordering.DVD Then + .Season = Convert.ToInt32(Episode.Element("DVD_season").Value) + .Episode = Convert.ToInt32(CLng(Episode.Element("DVD_episodenumber").Value)) + ElseIf tOrdering = Enums.Ordering.Absolute Then + .Season = 1 + .Episode = Convert.ToInt32(Episode.Element("absolute_number").Value) + Else + .Season = If(IsNothing(Episode.Element("SeasonNumber")) OrElse String.IsNullOrEmpty(Episode.Element("SeasonNumber").Value), 0, Convert.ToInt32(Episode.Element("SeasonNumber").Value)) + .Episode = If(IsNothing(Episode.Element("EpisodeNumber")) OrElse String.IsNullOrEmpty(Episode.Element("EpisodeNumber").Value), 0, Convert.ToInt32(Episode.Element("EpisodeNumber").Value)) + End If + .Aired = If(IsNothing(Episode.Element("FirstAired")), String.Empty, Episode.Element("FirstAired").Value) + .Rating = If(IsNothing(Episode.Element("Rating")), String.Empty, Episode.Element("Rating").Value) + .Plot = If(IsNothing(Episode.Element("Overview")), String.Empty, Episode.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + .Director = If(IsNothing(Episode.Element("Director")), String.Empty, Strings.Join(Episode.Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + .Credits = CreditsString(If(IsNothing(Episode.Element("GuestStars")), String.Empty, Episode.Element("GuestStars").Value), If(IsNothing(Episode.Element("Writer")), String.Empty, Episode.Element("Writer").Value)) + .Actors = Actors + .PosterURL = If(IsNothing(Episode.Element("filename")), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Episode.Element("filename").Value)) + .LocalFile = If(IsNothing(Episode.Element("filename")), String.Empty, Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, "episodeposters", Path.DirectorySeparatorChar, Episode.Element("filename").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar)))) + End With + + tEpisodes.Add(tEpisode) + End If + Next + + End If + End Using + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return tEpisodes + End Function + + Public Sub GetSearchResultsAsync(ByVal sInfo As Structures.ScrapeInfo) + Try + If Not bwTVDB.IsBusy Then + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 0, .Parameter = sInfo}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetSingleEpisode(ByVal sInfo As Structures.ScrapeInfo) As MediaContainers.EpisodeDetails + Dim tEp As New MediaContainers.EpisodeDetails + Try + + tEp = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Season = sInfo.iSeason AndAlso e.Episode = sInfo.iEpisode) + + If Not IsNothing(tEp) Then + Return tEp + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return New MediaContainers.EpisodeDetails + End Function + + Public Function GetSingleImage(ByVal sInfo As Structures.ScrapeInfo) As Images + tmpTVDBShow = New TVDBShow + + If sInfo.ImageType = Enums.TVImageType.EpisodePoster Then + + If String.IsNullOrEmpty(sInfo.TVDBID) Then + Using dTVDBSearch As New dlgTVDBSearchResults + sInfo = dTVDBSearch.ShowDialog(sInfo, True) + If Not String.IsNullOrEmpty(sInfo.TVDBID) Then + Master.currShow.TVShow.ID = sInfo.TVDBID + + Using tImage As New Images + Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) + If Not IsNothing(tmpEp) Then + + If File.Exists(tmpEp.LocalFile) Then + tImage.FromFile(tmpEp.LocalFile) + Else + tImage.FromWeb(tmpEp.PosterURL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) + tImage.Save(tmpEp.LocalFile, , , False) + End If + End If + + If Not IsNothing(tImage.Image) Then + Using dPosterConfirm As New dlgTVEpisodePoster + If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Using + Else + MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) + Return Nothing + End If + Else + Return Nothing + End If + End Using + Else + Return Nothing + End If + End Using + Else + Using tImage As New Images + Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) + If Not IsNothing(tmpEp) Then + + If File.Exists(tmpEp.LocalFile) Then + tImage.FromFile(tmpEp.LocalFile) + Else + tImage.FromWeb(tmpEp.PosterURL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) + tImage.Save(tmpEp.LocalFile, , , False) + End If + End If + + If Not IsNothing(tImage.Image) Then + Using dPosterConfirm As New dlgTVEpisodePoster + If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Using + Else + MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) + Return Nothing + End If + Else + Return Nothing + End If + End Using + End If + Else + If String.IsNullOrEmpty(sInfo.TVDBID) Then + Using dTVDBSearch As New dlgTVDBSearchResults + sInfo = dTVDBSearch.ShowDialog(sInfo, True) + If Not String.IsNullOrEmpty(sInfo.TVDBID) Then + Master.currShow.TVShow.ID = sInfo.TVDBID + Me.DownloadSeries(sInfo, True) + Using dImageSelect As New dlgTVImageSelect + Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) + End Using + Else + Return Nothing + End If + End Using + Else + Me.DownloadSeries(sInfo, True) + Using dImageSelect As New dlgTVImageSelect + Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) + End Using + End If + End If + End Function + + Public Function IsBusy() As Boolean + Return bwTVDB.IsBusy + End Function + + Public Sub PassEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent ScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Sub ProcessTVDBZip(ByVal tvZip As Byte(), ByVal sInfo As Structures.ScrapeInfo) + sXML = String.Empty + bXML = String.Empty + aXML = String.Empty + + Try + Using zStream As ZipInputStream = New ZipInputStream(New MemoryStream(tvZip)) + Dim zEntry As ZipEntry = zStream.GetNextEntry + + While Not IsNothing(zEntry) + Dim zBuffer As Byte() = Functions.ReadStreamToEnd(zStream) + + Select Case True + Case zEntry.Name.Equals(String.Concat(sInfo.SelectedLang, ".xml")) + sXML = System.Text.Encoding.UTF8.GetString(zBuffer) + Case zEntry.Name.Equals("banners.xml") + bXML = System.Text.Encoding.UTF8.GetString(zBuffer) + Case zEntry.Name.Equals("actors.xml") + aXML = System.Text.Encoding.UTF8.GetString(zBuffer) + End Select + + zEntry = zStream.GetNextEntry + End While + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub SaveImages() + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SavingStarted, 0, Nothing) + Me.bwTVDB = New System.ComponentModel.BackgroundWorker + Me.bwTVDB.WorkerReportsProgress = True + Me.bwTVDB.WorkerSupportsCancellation = True + Me.bwTVDB.RunWorkerAsync(New Arguments With {.Type = 3}) + End Sub + + Public Sub ScrapeEpisode(ByVal sInfo As Structures.ScrapeInfo) + Try + tmpTVDBShow = New TVDBShow + tmpTVDBShow.Episodes.Add(Master.currShow) + + If String.IsNullOrEmpty(sInfo.TVDBID) Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + DownloadSeries(sInfo) + If tmpTVDBShow.Episodes(0).TVShow.ID.Length > 0 Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso Not File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso Not File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub ScrapeSeason(ByVal sInfo As Structures.ScrapeInfo) + RaiseEvent ScraperEvent(Enums.TVScraperEventType.LoadingEpisodes, 0, Nothing) + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 4, .Parameter = sInfo}) + End Sub + + Public Sub SingleScrape(ByVal sInfo As Structures.ScrapeInfo) + RaiseEvent ScraperEvent(Enums.TVScraperEventType.LoadingEpisodes, 0, Nothing) + bwTVDB.WorkerReportsProgress = False + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 2, .Parameter = sInfo}) + While bwTVDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub StartSingleScraper(ByVal sInfo As Structures.ScrapeInfo) + Try + If String.IsNullOrEmpty(sInfo.TVDBID) AndAlso sInfo.ScrapeType = Enums.ScrapeType.FullAsk Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + DownloadSeries(sInfo) + If tmpTVDBShow.Show.TVShow.ID.Length > 0 Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + If sInfo.ScrapeType = Enums.ScrapeType.FullAuto Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SaveAuto, 0, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + ElseIf sInfo.ScrapeType = Enums.ScrapeType.FullAsk Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + 'Ignore Show scrape if ScrapeAuto and show don't have ID + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwtvDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTVDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + Try + Select Case Args.Type + Case 0 'search + e.Result = New Results With {.Type = 0, .Result = SearchSeries(DirectCast(Args.Parameter, Structures.ScrapeInfo))} + Case 1 'show download + Me.DownloadSeries(DirectCast(Args.Parameter, Structures.ScrapeInfo)) + e.Result = New Results With {.Type = 1} + Case 2 'load episodes + LoadAllEpisodes(DirectCast(Args.Parameter, Structures.ScrapeInfo).ShowID, 999) + e.Result = New Results With {.Type = 2, .Result = Args.Parameter} + Case 3 'save + Me.SaveAllTVInfo() + e.Result = New Results With {.Type = 3} + Case 4 + Dim sInfo As Structures.ScrapeInfo = DirectCast(Args.Parameter, Structures.ScrapeInfo) + LoadAllEpisodes(sInfo.ShowID, sInfo.iSeason) + e.Result = New Results With {.Type = 2, .Result = Args.Parameter} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTVDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTVDB.ProgressChanged + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Progress, e.ProgressPercentage, e.UserState.ToString) + End Sub + + Private Sub bwTVDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTVDB.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.Type + Case 0 'search + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SearchResultsDownloaded, 0, DirectCast(Res.Result, List(Of TVSearchResults))) + Case 1 'show download + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ShowDownloaded, 0, Nothing) + Case 2 'load episodes + If Not e.Cancelled Then + StartSingleScraper(DirectCast(Res.Result, Structures.ScrapeInfo)) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ScraperDone, 0, Nothing) + End If + Case 3 'save + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ScraperDone, 0, Nothing) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CreditsString(ByVal sGStars As String, ByVal sWriters As String) As String + Dim cString As New List(Of String) + Dim gString As String = Master.eLang.GetString(82, "Guest Star") + Dim wString As String = Master.eLang.GetString(777, "Writer", True) + + If Not String.IsNullOrEmpty(sGStars) Then + For Each gStar In sGStars.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")) + If Not String.IsNullOrEmpty(gStar) Then cString.Add(String.Concat(gStar, String.Format(" ({0})", gString))) + Next + End If + + If Not String.IsNullOrEmpty(sWriters) Then + For Each Writer In sWriters.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")) + If Not String.IsNullOrEmpty(Writer) Then cString.Add(String.Concat(Writer, String.Format(" ({0})", wString))) + Next + End If + + Return Strings.Join(cString.ToArray, " / ") + End Function + + Private Sub SaveAllTVInfo() + Dim iEp As Integer = -1 + Dim iSea As Integer = -1 + Dim iProgress As Integer = 1 + + Dim tShow As New Structures.DBTV + Dim tEpisode As New MediaContainers.EpisodeDetails + + Me.bwTVDB.ReportProgress(tmpTVDBShow.Episodes.Count, "max") + + Using SQLTrans As SQLite.SQLiteTransaction = Master.DB.MediaDBConn.BeginTransaction() + If Master.eSettings.DisplayMissingEpisodes Then + 'clear old missing episode from db + Using SQLCommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + SQLCommand.CommandText = String.Concat("DELETE FROM TVEps WHERE Missing = 1 AND TVShowID = ", Master.currShow.ShowID, ";") + SQLCommand.ExecuteNonQuery() + End Using + End If + + Try + For Each Episode As Structures.DBTV In tmpTVDBShow.Episodes + + Try + If Me.bwTVDB.CancellationPending Then Return + + Episode.ShowID = Master.currShow.ShowID + + iEp = Episode.TVEp.Episode + iSea = Episode.TVEp.Season + + 'remove it from tepisodes since it's a real episode + If Master.eSettings.DisplayMissingEpisodes Then + tEpisode = tEpisodes.FirstOrDefault(Function(e) e.Episode = iEp AndAlso e.Season = iSea) + If Not IsNothing(tEpisode) Then tEpisodes.Remove(tEpisode) + tShow = Episode + End If + + If Me.bwTVDB.CancellationPending Then Return + + If Episode.TVEp.Season > -1 AndAlso Episode.TVEp.Episode > -1 AndAlso Not Episode.IsLockEp Then + If Not IsNothing(Episode.TVEp.Poster.Image) Then Episode.EpPosterPath = Episode.TVEp.Poster.SaveAsEpPoster(Episode, Episode.TVEp.PosterURL) + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.EpisodeFanartEnabled AndAlso Not IsNothing(Episode.TVEp.Fanart.Image) Then Episode.EpFanartPath = Episode.TVEp.Fanart.SaveAsEpFanart(Episode, ) + + If Me.bwTVDB.CancellationPending Then Return + + Dim cSea = From cSeason As TVDBSeasonImage In TVDBImages.SeasonImageList Where cSeason.Season = iSea Take 1 + If cSea.Count > 0 Then + If Not IsNothing(cSea(0).Poster.Image) Then Episode.SeasonPosterPath = cSea(0).Poster.SaveAsSeasonPoster(Episode) + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.SeasonFanartEnabled Then + If Not String.IsNullOrEmpty(cSea(0).Fanart.LocalFile) AndAlso File.Exists(cSea(0).Fanart.LocalFile) Then + cSea(0).Fanart.Image.FromFile(cSea(0).Fanart.LocalFile) + Episode.SeasonFanartPath = cSea(0).Fanart.Image.SaveAsSeasonFanart(Episode) + ElseIf Not String.IsNullOrEmpty(cSea(0).Fanart.URL) AndAlso Not String.IsNullOrEmpty(cSea(0).Fanart.LocalFile) Then + cSea(0).Fanart.Image.Clear() + cSea(0).Fanart.Image.FromWeb(cSea(0).Fanart.URL) + If Not IsNothing(cSea(0).Fanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(cSea(0).Fanart.LocalFile).FullName) + cSea(0).Fanart.Image.Save(cSea(0).Fanart.LocalFile, , , False) + Episode.SeasonFanartPath = cSea(0).Fanart.Image.SaveAsSeasonFanart(Episode) + End If + End If + End If + End If + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Episode) + + Master.DB.SaveTVEpToDB(Episode, False, True, True, True) + + If Me.bwTVDB.CancellationPending Then Return + End If + Me.bwTVDB.ReportProgress(iProgress, "progress") + + 'If AdvancedSettings.GetBooleanSetting("ScrapeActorsThumbs", False) Then + 'For Each act As MediaContainers.Person In Episode.TVEp.Actors + 'Dim img As New Images + 'img.FromWeb(act.Thumb) + 'img.SaveAsActorThumb(act, Directory.GetParent(Episode.Filename).FullName) + 'Next + 'End If + + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + + 'now save all missing episodes + If Master.eSettings.DisplayMissingEpisodes Then + tShow.Filename = String.Empty + tShow.EpFanartPath = String.Empty + tShow.EpPosterPath = String.Empty + tShow.EpNfoPath = String.Empty + tShow.SeasonFanartPath = String.Empty + tShow.SeasonPosterPath = String.Empty + tShow.ShowFanartPath = String.Empty + tShow.IsLockEp = False + tShow.IsMarkEp = False + tShow.EpID = -1 + If tEpisodes.Count > 0 Then + For Each Episode As MediaContainers.EpisodeDetails In tEpisodes + tShow.TVEp = Episode + Master.DB.SaveTVEpToDB(tShow, True, True, True) + Next + End If + End If + + If Me.bwTVDB.CancellationPending Then Return + + SQLTrans.Commit() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End Using + End Sub + + Private Sub SaveToCache(ByVal sID As String, ByVal sURL As String, ByVal sPath As String) + Dim sImage As New Images + + sImage.FromWeb(sURL) + + If Not IsNothing(sImage.Image) Then + sImage.Save(Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, sPath.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), , , True) + End If + sImage = Nothing + End Sub + + Private Function SearchSeries(ByVal sInfo As Structures.ScrapeInfo) As List(Of TVSearchResults) + Dim tvdbResults As New List(Of TVSearchResults) + Dim cResult As New TVSearchResults + Dim xmlTVDB As XDocument + Dim tmpXML As XDocument + Dim sHTTP As New HTTP + Dim sLang As String = String.Empty + Dim tmpID As String = String.Empty + + Try + Dim apiXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/GetSeries.php?seriesname={1}&language={2}", Master.eSettings.TVDBMirror, sInfo.ShowTitle, Master.eSettings.TVDBLanguage)) + + If Not String.IsNullOrEmpty(apiXML) Then + Try + xmlTVDB = XDocument.Parse(apiXML) + Catch + Return tvdbResults + End Try + + Dim xSer = From xSeries In xmlTVDB.Descendants("Series") Where xSeries.HasElements + + 'check each unique showid to see if we have an entry for the preferred languages. If not, try to force download it + For Each tID As String In xSer.GroupBy(Function(s) s.Element("seriesid").Value.ToString).Select(Function(group) group.Key) + tmpID = tID + If xSer.Where(Function(s) s.Element("seriesid").Value.ToString = tmpID AndAlso s.Element("language").Value.ToString = Master.eSettings.TVDBLanguage).Count = 0 Then + 'no preferred language in this series, force it + Dim forceXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/series/{2}/{3}.xml", Master.eSettings.TVDBMirror, APIKey, tmpID, Master.eSettings.TVDBLanguage)) + If Not String.IsNullOrEmpty(forceXML) Then + Try + tmpXML = XDocument.Parse(forceXML) + Catch + Continue For + End Try + + For Each tSer As XElement In tmpXML.Descendants("Series").Where(Function(s) s.HasElements) + sLang = String.Empty + cResult = New TVSearchResults + cResult.ID = Convert.ToInt32(tSer.Element("id").Value) + cResult.Name = If(Not IsNothing(tSer.Element("SeriesName")), tSer.Element("SeriesName").Value, String.Empty) + If Not IsNothing(tSer.Element("Language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = tSer.Element("Language").Value + cResult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(tSer.Element("Language")) Then + sLang = tSer.Element("Language").Value + cResult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + Else + 'no language info available... don't bother adding it + Continue For + End If + cResult.Aired = If(Not IsNothing(tSer.Element("FirstAired")), tSer.Element("FirstAired").Value, String.Empty) + cResult.Overview = If(Not IsNothing(tSer.Element("Overview")), tSer.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf), String.Empty) + cResult.Banner = If(Not IsNothing(tSer.Element("banner")), tSer.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(cResult.Name) AndAlso Not String.IsNullOrEmpty(sLang) AndAlso xSer.Where(Function(s) s.Element("seriesid").Value.ToString = cResult.ID.ToString AndAlso s.Element("language").Value.ToString = sLang).Count = 0 Then + cResult.Lev = StringUtils.ComputeLevenshtein(sInfo.ShowTitle, cResult.Name) + tvdbResults.Add(cResult) + End If + Next + End If + End If + Next + sHTTP = Nothing + + For Each xS As XElement In xSer + sLang = String.Empty + cResult = New TVSearchResults + cResult.ID = Convert.ToInt32(xS.Element("seriesid").Value) + cResult.Name = If(Not IsNothing(xS.Element("SeriesName")), xS.Element("SeriesName").Value, String.Empty) + If Not IsNothing(xS.Element("language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = xS.Element("language").Value + cResult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(xS.Element("language")) Then + sLang = xS.Element("language").Value + cResult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + Else + 'no language info available... don't bother adding it + Continue For + End If + cResult.Aired = If(Not IsNothing(xS.Element("FirstAired")), xS.Element("FirstAired").Value, String.Empty) + cResult.Overview = If(Not IsNothing(xS.Element("Overview")), xS.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf), String.Empty) + cResult.Banner = If(Not IsNothing(xS.Element("banner")), xS.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(cResult.Name) AndAlso Not String.IsNullOrEmpty(sLang) Then + cResult.Lev = StringUtils.ComputeLevenshtein(sInfo.ShowTitle, cResult.Name) + tvdbResults.Add(cResult) + End If + Next + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return tvdbResults + End Function + + Private Sub ShowFromXML(ByVal sInfo As Structures.ScrapeInfo, ByVal ImagesOnly As Boolean) + Dim Actors As New List(Of MediaContainers.Person) + Dim sID As String = String.Empty + Dim iEp As Integer = -1 + Dim iSeas As Integer = -1 + Dim sTitle As String = String.Empty + Dim byTitle As Boolean = False + Dim xE As XElement = Nothing + Dim tShow As Structures.DBTV = tmpTVDBShow.Show + Dim tOrdering As Enums.Ordering = Enums.Ordering.Standard + + If Not ImagesOnly Then + If Master.eSettings.DisplayMissingEpisodes Then tEpisodes = Me.GetListOfKnownEpisodes(sInfo) + + 'get the actors first + Try + If sInfo.Options.bShowActors OrElse sInfo.Options.bEpActors Then + If Not String.IsNullOrEmpty(aXML) Then + Dim xdActors As XDocument = XDocument.Parse(aXML) + For Each Actor As XElement In xdActors.Descendants("Actor") + If Not IsNothing(Actor.Element("Name")) AndAlso Not String.IsNullOrEmpty(Actor.Element("Name").Value) Then + Actors.Add(New MediaContainers.Person With {.Name = Actor.Element("Name").Value, .Role = Actor.Element("Role").Value, .Thumb = If(IsNothing(Actor.Element("Image")) OrElse String.IsNullOrEmpty(Actor.Element("Image").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Actor.Element("Image").Value))}) + End If + Next + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + 'now let's get the show info and all the episodes + Try + If Not String.IsNullOrEmpty(sXML) Then + Dim xdShow As XDocument = XDocument.Parse(sXML) + Dim xS = From xShow In xdShow.Descendants("Series") + If xS.Count > 0 Then + tShow.ShowLanguage = sInfo.SelectedLang + If Not IsNothing(tShow.TVShow) Then + With tShow.TVShow + sID = xS(0).Element("id").Value + .ID = sID + If sInfo.Options.bShowTitle AndAlso (String.IsNullOrEmpty(.Title) OrElse Not Master.eSettings.ShowLockTitle) Then .Title = If(IsNothing(xS(0).Element("SeriesName")), .Title, xS(0).Element("SeriesName").Value) + If sInfo.Options.bShowEpisodeGuide Then .EpisodeGuideURL = If(Not String.IsNullOrEmpty(Master.eSettings.ExternalTVDBAPIKey), String.Format("http://{0}/api/{1}/series/{2}/all/{3}.zip", Master.eSettings.TVDBMirror, Master.eSettings.ExternalTVDBAPIKey, sID, Master.eSettings.TVDBLanguage), String.Empty) + If sInfo.Options.bShowGenre AndAlso (String.IsNullOrEmpty(.Genre) OrElse Not Master.eSettings.ShowLockGenre) Then .Genre = If(IsNothing(xS(0).Element("Genre")), .Genre, Strings.Join(xS(0).Element("Genre").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bShowMPAA Then .MPAA = If(IsNothing(xS(0).Element("ContentRating")), .MPAA, xS(0).Element("ContentRating").Value) + If sInfo.Options.bShowPlot AndAlso (String.IsNullOrEmpty(.Plot) OrElse Not Master.eSettings.ShowLockPlot) Then .Plot = If(IsNothing(xS(0).Element("Overview")), .Plot, xS(0).Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + If sInfo.Options.bShowPremiered Then .Premiered = If(IsNothing(xS(0).Element("FirstAired")), .Premiered, xS(0).Element("FirstAired").Value) + If sInfo.Options.bShowRating AndAlso (String.IsNullOrEmpty(.Rating) OrElse Not Master.eSettings.ShowLockRating) Then .Rating = If(IsNothing(xS(0).Element("Rating")), .Rating, xS(0).Element("Rating").Value) + If sInfo.Options.bShowStudio AndAlso (String.IsNullOrEmpty(.Studio) OrElse Not Master.eSettings.ShowLockStudio) Then .Studio = If(IsNothing(xS(0).Element("Network")), .Studio, xS(0).Element("Network").Value) + If sInfo.Options.bShowActors Then .Actors = Actors + End With + End If + + 'set it back + tmpTVDBShow.Show = tShow + + For Each Episode As Structures.DBTV In tmpTVDBShow.Episodes + + Episode.ShowLanguage = sInfo.SelectedLang + + iEp = Episode.TVEp.Episode + iSeas = Episode.TVEp.Season + sTitle = Episode.TVEp.Title + byTitle = False + tOrdering = Enums.Ordering.Standard + + If Not IsNothing(tShow.TVShow) Then Episode.TVShow = tShow.TVShow + + If sInfo.Ordering = Enums.Ordering.DVD Then + 'first we need to check if dvd order is specified for every episode in the season + 'we'll use the regular season number as an indicator even though there are some cases + 'where this will not work (season 1 episode 1 = dvd_season 2 dvd_episode 1) but it + 'should work in most cases and is the best solution I could come up with + + If xdShow.Descendants("Episode").Where(Function(e) Not IsNothing(e.Element("SeasonNumber")) AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas AndAlso (IsNothing(e.Element("DVD_season")) OrElse String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) OrElse IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + ElseIf sInfo.Ordering = Enums.Ordering.Absolute Then + If xdShow.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) > 0 AndAlso (IsNothing(e.Element("absolute_number")) OrElse String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.Absolute + End If + End If + + If tOrdering = Enums.Ordering.DVD Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString) AndAlso Convert.ToInt32(CLng(e.Element("DVD_episodenumber").Value.ToString)) = iEp AndAlso Not IsNothing(e.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) AndAlso Convert.ToInt32(e.Element("DVD_season").Value) = iSeas) + ElseIf tOrdering = Enums.Ordering.Absolute Then + If iSeas = 1 Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString) AndAlso Convert.ToInt32(e.Element("absolute_number").Value.ToString) = iEp) + Else + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString) AndAlso Convert.ToInt32(e.Element("EpisodeNumber").Value.ToString) = iEp AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas) + End If + Else + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Convert.ToInt32(e.Element("EpisodeNumber").Value) = iEp AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas) + End If + + If IsNothing(xE) Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) StringUtils.ComputeLevenshtein(e.Element("EpisodeName").Value, sTitle) < 5) + byTitle = True + End If + + If Not IsNothing(xE) Then + With Episode.TVEp + If sInfo.Options.bEpTitle AndAlso (String.IsNullOrEmpty(.Title) OrElse Not Master.eSettings.EpLockTitle) AndAlso Not String.IsNullOrEmpty(xE.Element("EpisodeName").Value) Then .Title = xE.Element("EpisodeName").Value + If byTitle Then + If tOrdering = Enums.Ordering.DVD Then + If sInfo.Options.bEpSeason Then .Season = If(IsNothing(xE.Element("DVD_season")) OrElse String.IsNullOrEmpty(xE.Element("DVD_season").Value), 0, Convert.ToInt32(xE.Element("DVD_season").Value)) + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(xE.Element("DVD_episodenumber").Value), 0, Convert.ToInt32(xE.Element("DVD_episodenumber").Value)) + ElseIf tOrdering = Enums.Ordering.Absolute Then + If sInfo.Options.bEpSeason Then .Season = 1 + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("absolute_number")) OrElse String.IsNullOrEmpty(xE.Element("absolute_number").Value), 0, Convert.ToInt32(xE.Element("absolute_number").Value)) + Else + If sInfo.Options.bEpSeason Then .Season = If(IsNothing(xE.Element("SeasonNumber")) OrElse String.IsNullOrEmpty(xE.Element("SeasonNumber").Value), 0, Convert.ToInt32(xE.Element("SeasonNumber").Value)) + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("EpisodeNumber")) OrElse String.IsNullOrEmpty(xE.Element("EpisodeNumber").Value), 0, Convert.ToInt32(xE.Element("EpisodeNumber").Value)) + End If + End If + If sInfo.Options.bEpAired Then .Aired = If(IsNothing(xE.Element("FirstAired")), .Aired, xE.Element("FirstAired").Value) + If sInfo.Options.bEpRating AndAlso (String.IsNullOrEmpty(.Rating) OrElse Not Master.eSettings.EpLockRating) Then .Rating = If(IsNothing(xE.Element("Rating")), .Rating, xE.Element("Rating").Value) + If sInfo.Options.bEpPlot AndAlso (String.IsNullOrEmpty(.Plot) OrElse Not Master.eSettings.EpLockPlot) Then .Plot = If(IsNothing(xE.Element("Overview")), .Plot, xE.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + 'If sInfo.Options.bEpDirector Then .Director = If(IsNothing(xS(0).Element("Director")), .Director, Strings.Join(xS(0).Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bEpDirector Then .Director = If(IsNothing(xE.Element("Director")), .Director, Strings.Join(xE.Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bEpCredits Then .Credits = CreditsString(If(IsNothing(xE.Element("GuestStars")), String.Empty, xE.Element("GuestStars").Value), If(IsNothing(xE.Element("Writer")), String.Empty, xE.Element("Writer").Value)) + If sInfo.Options.bEpActors Then .Actors = Actors + .PosterURL = If(IsNothing(xE.Element("filename")) OrElse String.IsNullOrEmpty(xE.Element("filename").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, xE.Element("filename").Value)) + .LocalFile = If(IsNothing(xE.Element("filename")) OrElse String.IsNullOrEmpty(xE.Element("filename").Value), String.Empty, Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "episodeposters", Path.DirectorySeparatorChar, xE.Element("filename").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar)))) + End With + End If + Next + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Else + sID = sInfo.TVDBID + End If + 'and finally the images + Try + If ImagesOnly OrElse Not IsNothing(tShow.TVShow) Then + If Not String.IsNullOrEmpty(bXML) Then + Dim xdImage As XDocument = XDocument.Parse(bXML) + For Each tImage As XElement In xdImage.Descendants("Banner") + If (Not IsNothing(tImage.Element("BannerPath")) AndAlso Not String.IsNullOrEmpty(tImage.Element("BannerPath").Value)) AndAlso _ + (Not Master.eSettings.OnlyGetTVImagesForSelectedLanguage OrElse ((Not IsNothing(tImage.Element("Language")) AndAlso tImage.Element("Language").Value = Master.eSettings.TVDBLanguage) OrElse _ + ((IsNothing(tImage.Element("Language")) OrElse tImage.Element("Language").Value = "en") AndAlso Master.eSettings.AlwaysGetEnglishTVImages))) Then + Select Case tImage.Element("BannerType").Value + Case "fanart" + tmpTVDBShow.Fanart.Add(New TVDBFanart With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .ThumbnailURL = If(IsNothing(tImage.Element("ThumbnailPath")) OrElse String.IsNullOrEmpty(tImage.Element("ThumbnailPath").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("ThumbnailPath").Value)), _ + .Size = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), New Size With {.Width = 0, .Height = 0}, StringUtils.StringToSize(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "fanart", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .LocalThumb = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "fanart", Path.DirectorySeparatorChar, tImage.Element("ThumbnailPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "poster" + tmpTVDBShow.Posters.Add(New TVDBPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Size = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), New Size With {.Width = 0, .Height = 0}, StringUtils.StringToSize(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "posters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "season" + tmpTVDBShow.SeasonPosters.Add(New TVDBSeasonPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Season = If(IsNothing(tImage.Element("Season")) OrElse String.IsNullOrEmpty(tImage.Element("Season").Value), 0, Convert.ToInt32(tImage.Element("Season").Value)), _ + .Type = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), Enums.SeasonPosterType.None, StringToSeasonPosterType(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "seasonposters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "series" + tmpTVDBShow.ShowPosters.Add(New TVDBShowPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Type = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), Enums.ShowBannerType.None, StringToShowPosterType(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "seriesposters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + End Select + End If + Next + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function StringToSeasonPosterType(ByVal sType As String) As Enums.SeasonPosterType + Select Case sType.ToLower + Case "season" + Return Enums.SeasonPosterType.Poster + Case "seasonwide" + Return Enums.SeasonPosterType.Wide + Case Else + Return Enums.SeasonPosterType.None + End Select + End Function + + Private Function StringToShowPosterType(ByVal sType As String) As Enums.ShowBannerType + Select Case sType.ToLower + Case "blank" + Return Enums.ShowBannerType.Blank + Case "graphical" + Return Enums.ShowBannerType.Graphical + Case "text" + Return Enums.ShowBannerType.Text + Case Else + Return Enums.ShowBannerType.None + End Select + End Function + +#End Region 'Methods + +#Region "Other" + + Private Structure Arguments + + Dim Parameter As Object + Dim Type As Integer + + End Structure + + Private Structure Results + + Dim Result As Object + Dim Type As Integer '0 = search, 1 = show download, 2 = load eps, 3 = save + + End Structure + +#End Region 'Other + + End Class + + <Serializable()> _ + Public Class TVDBFanart + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _localthumb As String + Private _size As Size + Private _thumbnailurl As String + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property LocalThumb() As String + Get + Return Me._localthumb + End Get + Set(ByVal value As String) + Me._localthumb = value + End Set + End Property + + Public Property Size() As Size + Get + Return Me._size + End Get + Set(ByVal value As Size) + Me._size = value + End Set + End Property + + Public Property ThumbnailURL() As String + Get + Return Me._thumbnailurl + End Get + Set(ByVal value As String) + Me._thumbnailurl = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._thumbnailurl = String.Empty + Me._size = New Size + Me._localfile = String.Empty + Me._localthumb = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _size As Size + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Size() As Size + Get + Return Me._size + End Get + Set(ByVal value As Size) + Me._size = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._size = New Size + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + <Serializable()> _ + Public Class TVDBSeasonImage + +#Region "Fields" + + Private _fanart As TVDBFanart + Private _poster As Images + Private _season As Integer + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Fanart() As TVDBFanart + Get + Return Me._fanart + End Get + Set(ByVal value As TVDBFanart) + Me._fanart = value + End Set + End Property + + Public Property Poster() As Images + Get + Return Me._poster + End Get + Set(ByVal value As Images) + Me._poster = value + End Set + End Property + + Public Property Season() As Integer + Get + Return Me._season + End Get + Set(ByVal value As Integer) + Me._season = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._season = -1 + Me._poster = New Images + Me._fanart = New TVDBFanart + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBSeasonPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _season As Integer + Private _type As Enums.SeasonPosterType + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Season() As Integer + Get + Return Me._season + End Get + Set(ByVal value As Integer) + Me._season = value + End Set + End Property + + Public Property Type() As Enums.SeasonPosterType + Get + Return Me._type + End Get + Set(ByVal value As Enums.SeasonPosterType) + Me._type = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._season = 0 + Me._type = Enums.SeasonPosterType.None + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBShow + +#Region "Fields" + + Private _allseason As Structures.DBTV + Private _episodes As New List(Of Structures.DBTV) + Private _fanart As New List(Of TVDBFanart) + Private _posters As New List(Of TVDBPoster) + Private _seasonposters As New List(Of TVDBSeasonPoster) + Private _show As Structures.DBTV + Private _showposters As New List(Of TVDBShowPoster) + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property AllSeason() As Structures.DBTV + Get + Return Me._allseason + End Get + Set(ByVal value As Structures.DBTV) + Me._allseason = value + End Set + End Property + + Public Property Episodes() As List(Of Structures.DBTV) + Get + Return Me._episodes + End Get + Set(ByVal value As List(Of Structures.DBTV)) + Me._episodes = value + End Set + End Property + + Public Property Fanart() As List(Of TVDBFanart) + Get + Return Me._fanart + End Get + Set(ByVal value As List(Of TVDBFanart)) + Me._fanart = value + End Set + End Property + + Public Property Posters() As List(Of TVDBPoster) + Get + Return Me._posters + End Get + Set(ByVal value As List(Of TVDBPoster)) + Me._posters = value + End Set + End Property + + Public Property SeasonPosters() As List(Of TVDBSeasonPoster) + Get + Return Me._seasonposters + End Get + Set(ByVal value As List(Of TVDBSeasonPoster)) + Me._seasonposters = value + End Set + End Property + + Public Property Show() As Structures.DBTV + Get + Return Me._show + End Get + Set(ByVal value As Structures.DBTV) + Me._show = value + End Set + End Property + + Public Property ShowPosters() As List(Of TVDBShowPoster) + Get + Return Me._showposters + End Get + Set(ByVal value As List(Of TVDBShowPoster)) + Me._showposters = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._show = New Structures.DBTV + Me._allseason = New Structures.DBTV + Me._episodes = New List(Of Structures.DBTV) + Me._fanart = New List(Of TVDBFanart) + Me._showposters = New List(Of TVDBShowPoster) + Me._seasonposters = New List(Of TVDBSeasonPoster) + Me._posters = New List(Of TVDBPoster) + End Sub + +#End Region 'Methods + + End Class + + <Serializable()> _ + Public Class TVDBShowPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _type As Enums.ShowBannerType + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Type() As Enums.ShowBannerType + Get + Return Me._type + End Get + Set(ByVal value As Enums.ShowBannerType) + Me._type = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._type = Enums.ShowBannerType.None + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVSearchResults + +#Region "Fields" + + Private _aired As String + Private _banner As String + Private _id As Integer + Private _language As Containers.TVLanguage + Private _lev As Integer + Private _name As String + Private _overview As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Aired() As String + Get + Return Me._aired + End Get + Set(ByVal value As String) + Me._aired = value + End Set + End Property + + Public Property Banner() As String + Get + Return Me._banner + End Get + Set(ByVal value As String) + Me._banner = value + End Set + End Property + + Public Property ID() As Integer + Get + Return Me._id + End Get + Set(ByVal value As Integer) + Me._id = value + End Set + End Property + + Public Property Language() As Containers.TVLanguage + Get + Return Me._language + End Get + Set(ByVal value As Containers.TVLanguage) + Me._language = value + End Set + End Property + + Public Property Lev() As Integer + Get + Return Me._lev + End Get + Set(ByVal value As Integer) + Me._lev = value + End Set + End Property + + Public Property Name() As String + Get + Return Me._name + End Get + Set(ByVal value As String) + Me._name = value + End Set + End Property + + Public Property Overview() As String + Get + Return Me._overview + End Get + Set(ByVal value As String) + Me._overview = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._id = 0 + Me._name = String.Empty + Me._aired = String.Empty + Me._language = New Containers.TVLanguage + Me._overview = String.Empty + Me._banner = String.Empty + Me._lev = 0 + End Sub + +#End Region 'Methods + + End Class + +#End Region 'Nested Types + +End Class diff --git a/Addons/scraper.TVDB.Poster/TVScraper/dlgTVChangeEp.Designer.vb b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVChangeEp.Designer.vb new file mode 100644 index 0000000..dd38c94 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVChangeEp.Designer.vb @@ -0,0 +1,139 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVChangeEp + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lvEpisodes = New System.Windows.Forms.ListView() + Me.colEpisode = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colTitle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.pbPreview = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.txtPlot = New System.Windows.Forms.TextBox() + CType(Me.pbPreview, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Location = New System.Drawing.Point(505, 286) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(575, 286) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lvEpisodes + ' + Me.lvEpisodes.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colEpisode, Me.colTitle}) + Me.lvEpisodes.FullRowSelect = True + Me.lvEpisodes.HideSelection = False + Me.lvEpisodes.Location = New System.Drawing.Point(3, 3) + Me.lvEpisodes.MultiSelect = False + Me.lvEpisodes.Name = "lvEpisodes" + Me.lvEpisodes.Size = New System.Drawing.Size(358, 278) + Me.lvEpisodes.TabIndex = 2 + Me.lvEpisodes.UseCompatibleStateImageBehavior = False + Me.lvEpisodes.View = System.Windows.Forms.View.Details + ' + 'colEpisode + ' + Me.colEpisode.Text = "Episode" + ' + 'colTitle + ' + Me.colTitle.Text = "Title" + Me.colTitle.Width = 276 + ' + 'pbPreview + ' + Me.pbPreview.Location = New System.Drawing.Point(417, 12) + Me.pbPreview.Name = "pbPreview" + Me.pbPreview.Size = New System.Drawing.Size(174, 117) + Me.pbPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPreview.TabIndex = 3 + Me.pbPreview.TabStop = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(367, 140) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(275, 21) + Me.lblTitle.TabIndex = 3 + ' + 'txtPlot + ' + Me.txtPlot.BackColor = System.Drawing.SystemColors.Control + Me.txtPlot.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.txtPlot.Location = New System.Drawing.Point(366, 169) + Me.txtPlot.Multiline = True + Me.txtPlot.Name = "txtPlot" + Me.txtPlot.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtPlot.Size = New System.Drawing.Size(276, 111) + Me.txtPlot.TabIndex = 4 + ' + 'dlgTVChangeEp + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(646, 315) + Me.ControlBox = False + Me.Controls.Add(Me.txtPlot) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPreview) + Me.Controls.Add(Me.lvEpisodes) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTVChangeEp" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Change Episode" + CType(Me.pbPreview, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lvEpisodes As System.Windows.Forms.ListView + Friend WithEvents colEpisode As System.Windows.Forms.ColumnHeader + Friend WithEvents colTitle As System.Windows.Forms.ColumnHeader + Friend WithEvents pbPreview As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents txtPlot As System.Windows.Forms.TextBox + +End Class diff --git a/Addons/scraper.TVDB.Poster/TVScraper/dlgTVChangeEp.resx b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVChangeEp.resx new file mode 100644 index 0000000..717c885 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVChangeEp.resx @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="txtPlot.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>True</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/TVScraper/dlgTVChangeEp.vb b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVChangeEp.vb new file mode 100644 index 0000000..954f58a --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVChangeEp.vb @@ -0,0 +1,120 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class dlgTVChangeEp + +#Region "Fields" + + Private _episode As MediaContainers.EpisodeDetails = Nothing + Private _tepisodes As New List(Of MediaContainers.EpisodeDetails) + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal tEpisodes As List(Of MediaContainers.EpisodeDetails)) As MediaContainers.EpisodeDetails + Me._tepisodes = tEpisodes + + If MyBase.ShowDialog = Windows.Forms.DialogResult.OK Then + Return _episode + Else + Return Nothing + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub ClearInfo() + Me.pbPreview.Image = Nothing + Me.lblTitle.Text = String.Empty + Me.txtPlot.Text = String.Empty + End Sub + + Private Sub dlgTVChangeEp_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + + Dim lGroup As New ListViewGroup + Dim lItem As New ListViewItem + Dim tSeason As Integer = Nothing + + For Each Season As Integer In _tepisodes.GroupBy(Function(s) s.Season).Select(Function(group) group.Key) + tSeason = Season + lGroup = New ListViewGroup + lGroup.Header = String.Format(Master.eLang.GetString(726, "Season {0}", True), tSeason) + lvEpisodes.Groups.Add(lGroup) + For Each Episode As MediaContainers.EpisodeDetails In _tepisodes.Where(Function(s) s.Season = tSeason).OrderBy(Function(s) s.Episode) + lItem = lvEpisodes.Items.Add(Episode.Episode.ToString) + lItem.Tag = Episode + lItem.SubItems.Add(Episode.Title) + lGroup.Items.Add(lItem) + Next + Next + End Sub + + Private Sub lvEpisodes_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvEpisodes.SelectedIndexChanged + Me.ClearInfo() + If lvEpisodes.SelectedItems.Count > 0 AndAlso Not IsNothing(lvEpisodes.SelectedItems(0).Tag) Then + Me._episode = DirectCast(lvEpisodes.SelectedItems(0).Tag, MediaContainers.EpisodeDetails) + + If Not IsNothing(Me._episode.Poster.Image) Then + Me.pbPreview.Image = Me._episode.Poster.Image + ElseIf Not String.IsNullOrEmpty(Me._episode.LocalFile) AndAlso File.Exists(Me._episode.LocalFile) Then + Me._episode.Poster.FromFile(Me._episode.LocalFile) + If Not IsNothing(Me._episode.Poster.Image) Then + Me.pbPreview.Image = Me._episode.Poster.Image + End If + ElseIf Not String.IsNullOrEmpty(Me._episode.PosterURL) Then + Me._episode.Poster.FromWeb(Me._episode.PosterURL) + If Not IsNothing(Me._episode.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Me._episode.LocalFile).FullName) + Me._episode.Poster.Save(Me._episode.LocalFile) + Me.pbPreview.Image = Me._episode.Poster.Image + End If + End If + + Me.lblTitle.Text = Me._episode.Title + Me.txtPlot.Text = Me._episode.Plot + End If + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(772, "Change Episode", True) + + Me.lvEpisodes.Columns(0).Text = Master.eLang.GetString(727, "Episode", True) + Me.lvEpisodes.Columns(1).Text = Master.eLang.GetString(21, "Title", True) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/TVScraper/dlgTVDBSearchResults.Designer.vb b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVDBSearchResults.Designer.vb new file mode 100644 index 0000000..b05c597 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVDBSearchResults.Designer.vb @@ -0,0 +1,368 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTVDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pbBanner = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblAiredHeader = New System.Windows.Forms.Label() + Me.lblAired = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lvSearchResults = New System.Windows.Forms.ListView() + Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colLang = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colLev = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colSLang = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.txtTVDBID = New System.Windows.Forms.TextBox() + CType(Me.pbBanner, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(485, 335) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(558, 335) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pbBanner + ' + Me.pbBanner.Location = New System.Drawing.Point(325, 69) + Me.pbBanner.Name = "pbBanner" + Me.pbBanner.Size = New System.Drawing.Size(300, 55) + Me.pbBanner.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbBanner.TabIndex = 3 + Me.pbBanner.TabStop = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(325, 132) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(300, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Visible = False + ' + 'lblAiredHeader + ' + Me.lblAiredHeader.AutoSize = True + Me.lblAiredHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblAiredHeader.Location = New System.Drawing.Point(325, 161) + Me.lblAiredHeader.Name = "lblAiredHeader" + Me.lblAiredHeader.Size = New System.Drawing.Size(38, 13) + Me.lblAiredHeader.TabIndex = 10 + Me.lblAiredHeader.Text = "Aired:" + Me.lblAiredHeader.Visible = False + ' + 'lblAired + ' + Me.lblAired.AutoSize = True + Me.lblAired.Location = New System.Drawing.Point(387, 161) + Me.lblAired.Name = "lblAired" + Me.lblAired.Size = New System.Drawing.Size(63, 13) + Me.lblAired.TabIndex = 12 + Me.lblAired.Text = "00/00/0000" + Me.lblAired.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(325, 189) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 13 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtOutline.Location = New System.Drawing.Point(325, 205) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(300, 127) + Me.txtOutline.TabIndex = 14 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lvSearchResults + ' + Me.lvSearchResults.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colName, Me.colLang, Me.colLev, Me.colID, Me.colSLang}) + Me.lvSearchResults.FullRowSelect = True + Me.lvSearchResults.HideSelection = False + Me.lvSearchResults.Location = New System.Drawing.Point(3, 96) + Me.lvSearchResults.MultiSelect = False + Me.lvSearchResults.Name = "lvSearchResults" + Me.lvSearchResults.Size = New System.Drawing.Size(316, 236) + Me.lvSearchResults.TabIndex = 5 + Me.lvSearchResults.UseCompatibleStateImageBehavior = False + Me.lvSearchResults.View = System.Windows.Forms.View.Details + ' + 'colName + ' + Me.colName.Text = "Title" + Me.colName.Width = 223 + ' + 'colLang + ' + Me.colLang.Text = "Language" + Me.colLang.Width = 89 + ' + 'colLev + ' + Me.colLev.Width = 0 + ' + 'colID + ' + Me.colID.Width = 0 + ' + 'colSLang + ' + Me.colSLang.Width = 0 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(380, 154) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 11 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(98, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching TVDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(643, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(287, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper TV show." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(216, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "TV Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(296, 67) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 4 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(3, 68) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(287, 22) + Me.txtSearch.TabIndex = 3 + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(244, 337) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 8 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Enabled = False + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(3, 341) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(127, 17) + Me.chkManual.TabIndex = 6 + Me.chkManual.Text = "Manual TVDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'txtTVDBID + ' + Me.txtTVDBID.Enabled = False + Me.txtTVDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTVDBID.Location = New System.Drawing.Point(138, 337) + Me.txtTVDBID.Name = "txtTVDBID" + Me.txtTVDBID.Size = New System.Drawing.Size(100, 22) + Me.txtTVDBID.TabIndex = 7 + ' + 'dlgTVDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(643, 378) + Me.ControlBox = False + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.txtTVDBID) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.lvSearchResults) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblAiredHeader) + Me.Controls.Add(Me.lblAired) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbBanner) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 406) + Me.Name = "dlgTVDBSearchResults" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "TV Search Results" + CType(Me.pbBanner, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pbBanner As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblAiredHeader As System.Windows.Forms.Label + Friend WithEvents lblAired As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lvSearchResults As System.Windows.Forms.ListView + Friend WithEvents colName As System.Windows.Forms.ColumnHeader + Friend WithEvents colLang As System.Windows.Forms.ColumnHeader + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents colLev As System.Windows.Forms.ColumnHeader + Friend WithEvents colID As System.Windows.Forms.ColumnHeader + Friend WithEvents colSLang As System.Windows.Forms.ColumnHeader + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents txtTVDBID As System.Windows.Forms.TextBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/TVScraper/dlgTVDBSearchResults.resx b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVDBSearchResults.resx new file mode 100644 index 0000000..7a332a8 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVDBSearchResults.resx @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + gg== +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA + CukB/XXO0wAAAepJREFUOE+lkktIG1EUhkeFaLQ+UGulgthNEUHRCrqyIHZTdSd0Iyq46cL3Sly50ppV + uywYi2uDiyKK1ioFk0lm7mSmSgymJuIqSkwwCTVpGs3fM0Pa+poWceBj4N5zvnvOuZcDwN2HeyWrB98Q + LFosuRJjz51O6cXmxsaj/1V3RSAx8fVXRQnIsgwVRZHjJHr7L8kfAROFPoWS3G43gicnCIVC8O7vQ11z + StKsnkQTrK6sGCSJBXddLpyfJ5FKpTTUz+f1gvbA22w1t0k0AW3WCYIAv9+PZPIn4vGYRiLxA+HwKRhj + EByOIV2BdWur3mG34/j4iJISiEYjRBSx2BkikQiYKOJQ4ft1BZ/X13NIEHalW1CrUEVACj6fF4yqe2W2 + TegK0m0MiBSoziEQCNAQg/B4PPi2I8Fk+QJucBnZI0vvrkuuXCPP8+PU63dC7RnbTvHi/cKnA2O3GYbu + OeT0ziOv58Na8djHgt+iGw+JHk+pzWrtpMF27cn2Ko7jMnLbTebCl1MoaH+D/I4ZFHbM7FZ0ThtvfYl6 + 913WMjFc2jyGkqZRlNC/om2yXBNk0RFEEfGEqCZqiXriGdGYpoHCHhdXtg6W1fQKD592mQwZ3N8KKCiL + yCaMRB7xgMi/zuXqMinnTi3otfYLj6yxrhdJtZ8AAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/TVScraper/dlgTVDBSearchResults.vb b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVDBSearchResults.vb new file mode 100644 index 0000000..cce33d3 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVDBSearchResults.vb @@ -0,0 +1,437 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTVDBSearchResults + +#Region "Fields" + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + + Private lvResultsSorter As New ListViewColumnSorter + Private sHTTP As New HTTP + Private sInfo As Structures.ScrapeInfo + Private _manualresult As Scraper.TVSearchResults = Nothing + Private _skipdownload As Boolean = False + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal _sInfo As Structures.ScrapeInfo) As Windows.Forms.DialogResult + Me.sInfo = _sInfo + Me.Text = String.Concat(Master.eLang.GetString(85, "TV Search Results"), " - ", sInfo.ShowTitle) + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal _sinfo As Structures.ScrapeInfo, ByVal SkipDownload As Boolean) As Structures.ScrapeInfo + Me.sInfo = _sinfo + Me._skipdownload = SkipDownload + + Me.Text = String.Concat(Master.eLang.GetString(85, "TV Search Results"), " - ", sInfo.ShowTitle) + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return Me.sInfo + Else + Return _sinfo + End If + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.lvSearchResults.Enabled = False + Me.sInfo.ShowTitle = Me.txtSearch.Text + Me.ClearInfo() + Me.chkManual.Enabled = False + Me.chkManual.Checked = False + Me.txtSearch.Text = String.Empty + Me.btnVerify.Enabled = False + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + Me.pnlLoading.Visible = True + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + If IsNumeric(Me.txtTVDBID.Text) AndAlso Me.txtTVDBID.Text.Length >= 5 Then + Dim tmpXML As XDocument = Nothing + Dim sLang As String = String.Empty + + Me.ClearInfo() + Me.pnlLoading.Visible = True + Application.DoEvents() + + Dim forceXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/series/{2}/{3}.xml", Master.eSettings.TVDBMirror, Scraper.APIKey, Me.txtTVDBID.Text, Master.eSettings.TVDBLanguage)) + + If Not String.IsNullOrEmpty(forceXML) Then + Try + tmpXML = XDocument.Parse(forceXML) + Catch + End Try + + If Not IsNothing(tmpXML) Then + Dim tSer As XElement = tmpXML.Descendants("Series").FirstOrDefault(Function(s) s.HasElements) + + If Not IsNothing(tSer) Then + Me._manualresult = New Scraper.TVSearchResults + Me._manualresult.ID = Convert.ToInt32(tSer.Element("id").Value) + Me._manualresult.Name = If(Not IsNothing(tSer.Element("SeriesName")), tSer.Element("SeriesName").Value, String.Empty) + If Not IsNothing(tSer.Element("Language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = tSer.Element("Language").Value + Me._manualresult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(tSer.Element("Language")) Then + sLang = tSer.Element("Language").Value + Me._manualresult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + End If + Me._manualresult.Aired = If(Not IsNothing(tSer.Element("FirstAired")), tSer.Element("FirstAired").Value, String.Empty) + Me._manualresult.Overview = If(Not IsNothing(tSer.Element("Overview")), tSer.Element("Overview").Value, String.Empty) + Me._manualresult.Banner = If(Not IsNothing(tSer.Element("banner")), tSer.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(Me._manualresult.Name) AndAlso Not String.IsNullOrEmpty(sLang) Then + If Not String.IsNullOrEmpty(Me._manualresult.Banner) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = Me._manualresult.Banner}) + End If + + Me.OK_Button.Tag = Me._manualresult.ID + Me.lblTitle.Text = Me._manualresult.Name + Me.txtOutline.Text = Me._manualresult.Overview + Me.lblAired.Text = Me._manualresult.Aired + Me.OK_Button.Enabled = True + Me.pnlLoading.Visible = False + Me.ControlsVisible(True) + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + + Else + MsgBox(Master.eLang.GetString(83, "The ID you entered is not a valid TVDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + End If + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + sHTTP.StartDownloadImage(String.Format("http://{0}/banners/_cache/{1}", Master.eSettings.TVDBMirror, Args.pURL)) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image()} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbBanner.Image = Res.Result + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtTVDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.lvSearchResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtTVDBID.Text = String.Empty + Else + If Me.lvSearchResults.SelectedItems.Count > 0 Then Me.lvSearchResults.SelectedItems(0).Selected = False + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblAired.Text = String.Empty + Me.pbBanner.Image = Nothing + Scraper.sObject.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.pbBanner.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblAiredHeader.Visible = areVisible + Me.lblAired.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + End Sub + + Private Sub dlgTVDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + AddHandler ModulesManager.Instance.TVScraperEvent, AddressOf TVScraperEvent + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + + Me.lvSearchResults.ListViewItemSorter = Me.lvResultsSorter + + Me.SetUp() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub lvSearchResults_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lvSearchResults.ColumnClick + ' Determine if the clicked column is already the column that is + ' being sorted. + Try + If (e.Column = Me.lvResultsSorter.SortColumn) Then + ' Reverse the current sort direction for this column. + If (Me.lvResultsSorter.Order = SortOrder.Ascending) Then + Me.lvResultsSorter.Order = SortOrder.Descending + Else + Me.lvResultsSorter.Order = SortOrder.Ascending + End If + Else + ' Set the column number that is to be sorted; default to ascending. + Me.lvResultsSorter.SortColumn = e.Column + Me.lvResultsSorter.Order = SortOrder.Ascending + End If + + ' Perform the sort with these new sort options. + Me.lvSearchResults.Sort() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub lvSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvSearchResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub lvSearchResults_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvSearchResults.SelectedIndexChanged + Me.ClearInfo() + If Me.lvSearchResults.SelectedItems.Count > 0 AndAlso Not Me.chkManual.Checked Then + Dim SelectedShow As Scraper.TVSearchResults = DirectCast(Me.lvSearchResults.SelectedItems(0).Tag, Scraper.TVSearchResults) + If Not String.IsNullOrEmpty(SelectedShow.Banner) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = SelectedShow.Banner}) + End If + + Me.OK_Button.Tag = SelectedShow.ID + Me.lblTitle.Text = SelectedShow.Name + Me.txtOutline.Text = SelectedShow.Overview + Me.lblAired.Text = SelectedShow.Aired + Me.OK_Button.Enabled = True + Me.ControlsVisible(True) + End If + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + If Me.lvSearchResults.SelectedItems.Count > 0 Then + Dim sResults As Scraper.TVSearchResults = DirectCast(Me.lvSearchResults.SelectedItems(0).Tag, Scraper.TVSearchResults) + Me.sInfo.TVDBID = sResults.ID.ToString + Me.sInfo.SelectedLang = sResults.Language.ShortLang + + If Not _skipdownload Then + Me.Label3.Text = Master.eLang.GetString(84, "Downloading show info...") + Me.pnlLoading.Visible = True + Scraper.sObject.DownloadSeriesAsync(sInfo) + Else + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + ElseIf Me.chkManual.Checked AndAlso Not IsNothing(Me._manualresult) Then + Me.sInfo.TVDBID = Me._manualresult.ID.ToString + Me.sInfo.SelectedLang = Me._manualresult.Language.ShortLang + + If Not _skipdownload Then + Me.Label3.Text = Master.eLang.GetString(84, "Downloading show info...") + Me.pnlLoading.Visible = True + Scraper.sObject.DownloadSeriesAsync(sInfo) + Else + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + End Sub + + Private Sub SetUp() + Me.Label1.Text = Master.eLang.GetString(85, "TV Search Results") + Me.Label2.Text = Master.eLang.GetString(86, "View details of each result to find the proper TV show.") + Me.lblAiredHeader.Text = Master.eLang.GetString(658, "Aired:", True) + Me.lblPlotHeader.Text = Master.eLang.GetString(783, "Plot Summary:", True) + + Me.lvSearchResults.Columns(0).Text = Master.eLang.GetString(21, "Title", True) + Me.lvSearchResults.Columns(1).Text = Master.eLang.GetString(610, "Language", True) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + Select Case eType + Case Enums.TVScraperEventType.SearchResultsDownloaded + Dim lItem As ListViewItem + Dim sResults As List(Of Scraper.TVSearchResults) = DirectCast(Parameter, List(Of Scraper.TVSearchResults)) + + Me.lvSearchResults.Items.Clear() + + If Not IsNothing(sResults) AndAlso sResults.Count > 0 Then + For Each sRes As Scraper.TVSearchResults In sResults.OrderBy(Function(r) r.Lev) + lItem = New ListViewItem(sRes.Name) + lItem.SubItems.Add(sRes.Language.LongLang) + lItem.SubItems.Add(sRes.Lev.ToString) + lItem.SubItems.Add(sRes.ID.ToString) + lItem.SubItems.Add(sRes.Language.ShortLang) + lItem.Tag = sRes + Me.lvSearchResults.Items.Add(lItem) + Next + End If + + Me.pnlLoading.Visible = False + + If Me.lvSearchResults.Items.Count > 0 Then + If sResults.Select(Function(s) s.ID).Distinct.Count = 1 Then + 'they're all for the same show... try to find one with the preferred language + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + Else + 'we've got a bunch of different shows... try to find a "best match" title with the preferred language + If sResults.Where(Function(s) s.Lev <= 5).Count > 0 Then + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If Convert.ToInt32(fItem.SubItems(2).Text) <= 5 AndAlso fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + + If Me.lvSearchResults.SelectedItems.Count = 0 Then + 'get the id for the best english match and see if we have one for the preferred language with same id + Dim tID As Integer = sResults.OrderBy(Function(s) s.Lev).FirstOrDefault(Function(s) s.Language.ShortLang = "en").ID + If tID > 0 Then + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If Convert.ToInt32(fItem.SubItems(3).Text) = tID AndAlso fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + End If + End If + End If + End If + + If Me.lvSearchResults.SelectedItems.Count = 0 Then + Me.lvSearchResults.Items(0).Selected = True + End If + Me.lvSearchResults.Select() + End If + + Me.chkManual.Enabled = True + If Not Me.chkManual.Checked Then Me.lvSearchResults.Enabled = True + + Case Enums.TVScraperEventType.ShowDownloaded + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Select + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Sub txtTVDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTVDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtTVDBID_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTVDBID.KeyPress + e.Handled = StringUtils.NumericOnly(e.KeyChar, True) + End Sub + + Private Sub txtTVDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTVDBID.TextChanged + If String.IsNullOrEmpty(Me.txtTVDBID.Text) Then + Me.btnVerify.Enabled = False + Me.OK_Button.Enabled = False + Else + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim pURL As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Image + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class diff --git a/Addons/scraper.TVDB.Poster/TVScraper/dlgTVEpisodePoster.Designer.vb b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVEpisodePoster.Designer.vb new file mode 100644 index 0000000..a3ebbd8 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVEpisodePoster.Designer.vb @@ -0,0 +1,86 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTVEpisodePoster + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pbPoster = New System.Windows.Forms.PictureBox() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Location = New System.Drawing.Point(292, 287) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(362, 287) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pbPoster + ' + Me.pbPoster.BackColor = System.Drawing.Color.DimGray + Me.pbPoster.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pbPoster.Location = New System.Drawing.Point(6, 6) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(423, 276) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + ' + 'dlgTVEpisodePoster + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(435, 315) + Me.ControlBox = False + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTVEpisodePoster" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Confirm Episode Poster" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.TVDB.Poster/TVScraper/dlgTVEpisodePoster.resx b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVEpisodePoster.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVEpisodePoster.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/TVScraper/dlgTVEpisodePoster.vb b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVEpisodePoster.vb new file mode 100644 index 0000000..60ed929 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVEpisodePoster.vb @@ -0,0 +1,48 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTVEpisodePoster + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal Poster As Image) As System.Windows.Forms.DialogResult + Me.pbPoster.Image = Poster + Return MyBase.ShowDialog + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbPoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbPoster.Click + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(Me.pbPoster.Image) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/TVScraper/dlgTVImageSelect.Designer.vb b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVImageSelect.Designer.vb new file mode 100644 index 0000000..cf05d15 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVImageSelect.Designer.vb @@ -0,0 +1,213 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVImageSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTVImageSelect)) + Me.tvList = New System.Windows.Forms.TreeView() + Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components) + Me.pnlImages = New System.Windows.Forms.Panel() + Me.pbCurrent = New System.Windows.Forms.PictureBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnOK = New System.Windows.Forms.Button() + Me.btnCancel = New System.Windows.Forms.Button() + Me.pbDelete = New System.Windows.Forms.PictureBox() + Me.pbUndo = New System.Windows.Forms.PictureBox() + Me.lblCurrentImage = New System.Windows.Forms.Label() + CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlStatus.SuspendLayout() + CType(Me.pbDelete, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbUndo, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'tvList + ' + Me.tvList.Enabled = False + Me.tvList.ImageIndex = 0 + Me.tvList.ImageList = Me.ImageList1 + Me.tvList.Location = New System.Drawing.Point(3, 4) + Me.tvList.Name = "tvList" + Me.tvList.SelectedImageIndex = 0 + Me.tvList.Size = New System.Drawing.Size(214, 262) + Me.tvList.TabIndex = 2 + Me.tvList.Visible = False + ' + 'ImageList1 + ' + Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent + Me.ImageList1.Images.SetKeyName(0, "new_page.png") + Me.ImageList1.Images.SetKeyName(1, "image.png") + Me.ImageList1.Images.SetKeyName(2, "artwork.png") + Me.ImageList1.Images.SetKeyName(3, "star_full.png") + ' + 'pnlImages + ' + Me.pnlImages.AutoScroll = True + Me.pnlImages.BackColor = System.Drawing.SystemColors.Control + Me.pnlImages.Location = New System.Drawing.Point(222, 4) + Me.pnlImages.Name = "pnlImages" + Me.pnlImages.Size = New System.Drawing.Size(622, 421) + Me.pnlImages.TabIndex = 3 + ' + 'pbCurrent + ' + Me.pbCurrent.BackColor = System.Drawing.SystemColors.Control + Me.pbCurrent.Location = New System.Drawing.Point(3, 293) + Me.pbCurrent.Name = "pbCurrent" + Me.pbCurrent.Size = New System.Drawing.Size(214, 157) + Me.pbCurrent.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbCurrent.TabIndex = 2 + Me.pbCurrent.TabStop = False + Me.pbCurrent.Visible = False + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(264, 192) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(321, 75) + Me.pnlStatus.TabIndex = 5 + ' + 'lblStatus + ' + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(5, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(310, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Gathering Data..." + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(6, 52) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(309, 19) + Me.pbStatus.Step = 1 + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbStatus.TabIndex = 1 + ' + 'btnOK + ' + Me.btnOK.Enabled = False + Me.btnOK.Location = New System.Drawing.Point(708, 431) + Me.btnOK.Name = "btnOK" + Me.btnOK.Size = New System.Drawing.Size(65, 22) + Me.btnOK.TabIndex = 0 + Me.btnOK.Text = "OK" + Me.btnOK.UseVisualStyleBackColor = True + ' + 'btnCancel + ' + Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.btnCancel.Location = New System.Drawing.Point(779, 431) + Me.btnCancel.Name = "btnCancel" + Me.btnCancel.Size = New System.Drawing.Size(65, 22) + Me.btnCancel.TabIndex = 1 + Me.btnCancel.Text = "Cancel" + Me.btnCancel.UseVisualStyleBackColor = True + ' + 'pbDelete + ' + Me.pbDelete.Image = CType(resources.GetObject("pbDelete.Image"), System.Drawing.Image) + Me.pbDelete.Location = New System.Drawing.Point(3, 293) + Me.pbDelete.Name = "pbDelete" + Me.pbDelete.Size = New System.Drawing.Size(16, 16) + Me.pbDelete.TabIndex = 13 + Me.pbDelete.TabStop = False + Me.pbDelete.Visible = False + ' + 'pbUndo + ' + Me.pbUndo.Image = CType(resources.GetObject("pbUndo.Image"), System.Drawing.Image) + Me.pbUndo.Location = New System.Drawing.Point(201, 293) + Me.pbUndo.Name = "pbUndo" + Me.pbUndo.Size = New System.Drawing.Size(16, 16) + Me.pbUndo.TabIndex = 14 + Me.pbUndo.TabStop = False + Me.pbUndo.Visible = False + ' + 'lblCurrentImage + ' + Me.lblCurrentImage.AutoSize = True + Me.lblCurrentImage.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblCurrentImage.Location = New System.Drawing.Point(0, 274) + Me.lblCurrentImage.Name = "lblCurrentImage" + Me.lblCurrentImage.Size = New System.Drawing.Size(100, 17) + Me.lblCurrentImage.TabIndex = 4 + Me.lblCurrentImage.Text = "Current Image:" + Me.lblCurrentImage.Visible = False + ' + 'dlgTVImageSelect + ' + Me.AcceptButton = Me.btnOK + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.btnCancel + Me.ClientSize = New System.Drawing.Size(849, 481) + Me.ControlBox = False + Me.Controls.Add(Me.lblCurrentImage) + Me.Controls.Add(Me.pbUndo) + Me.Controls.Add(Me.pbDelete) + Me.Controls.Add(Me.btnCancel) + Me.Controls.Add(Me.btnOK) + Me.Controls.Add(Me.pnlStatus) + Me.Controls.Add(Me.pbCurrent) + Me.Controls.Add(Me.pnlImages) + Me.Controls.Add(Me.tvList) + Me.DoubleBuffered = True + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(855, 491) + Me.Name = "dlgTVImageSelect" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "TV Image Selection" + CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlStatus.ResumeLayout(False) + CType(Me.pbDelete, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbUndo, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents tvList As System.Windows.Forms.TreeView + Friend WithEvents pnlImages As System.Windows.Forms.Panel + Friend WithEvents pbCurrent As System.Windows.Forms.PictureBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnOK As System.Windows.Forms.Button + Friend WithEvents btnCancel As System.Windows.Forms.Button + Friend WithEvents pbDelete As System.Windows.Forms.PictureBox + Friend WithEvents pbUndo As System.Windows.Forms.PictureBox + Friend WithEvents ImageList1 As System.Windows.Forms.ImageList + Friend WithEvents lblCurrentImage As System.Windows.Forms.Label +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/TVScraper/dlgTVImageSelect.resx b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVImageSelect.resx new file mode 100644 index 0000000..db85c76 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVImageSelect.resx @@ -0,0 +1,210 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="ImageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <data name="ImageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64"> + <value> + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAO + CwAAAk1TRnQBSQFMAgEBBAEAATABAAEwAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8AFgAC/wMA + Bf8DAAH/BAAL/wMAA/8BAAb/AQAD/wMABf8C9AX/AgAC/wHzAfAJvAHzAv8CAAL/AfQB8QH0AfIB8QH0 + AfEB8wL/AwAD/wH0Af8E9AH/AvQC/wMAAf8B8QEHB7wB8gH/AwAB/wG8AfEC8gXzAvIB8AH0AwAD/wGT + AfQB8AGTAQABkwH0Av8DAAL/AfQBUwGZBP8B8AFTAfAC/wQAAfEB8AfxAfIEAAH0AfAB8QHyB/MB8gHx + AfQGAAEaAvMBmQH/AZMIAAH/AXUBMgF1AfQB/wGaAjIB9AYAAvEI8gQAAfQB8AEJCLsBCQHxAfQFAAH/ + AZMBdAGZAXQBmQF0AfQIAAEaAjICUwIyAXUB/wYACfIB8wQAAfQBuwG5AbMGigGyAbkBuwH0BAAB8wGZ + BnQBkwHxAf8GAAH0BjIBGgcAAvIG8wHyAfMEAAH0AbsCuQGsAYoCrAGKAawBswG5AbsB9AQAAvEB8AG7 + AbUBBwEaAfIB8wHwAf8GAAH2AVMFMgEbBwAK8wQAAf8BuwO5AbIDrAGzArkBuwH0BAAB8gG8Aa4BbAFL + AUwBUgGZAfMB8QH/BQAB8wFTBzIBGgYACvMEAAH/AbsDuQGyAqwBsgO5AbsB9AQAAfEB/wEHAW4BUgIy + AY4B9AHyAf8DAAH/ARoKMgF6Af8EAArzBAAB/wEJAroBswGsArIBrAGzAroBuwH0BAAB8gH2AbsCggNM + AvMB/wMAAfQBMgFTAlkBUwMyA1kBMgEaBAAG8wP0AfMEAAH/AQkDugSyA7oBCQH0BAABGwH0AbsB9AGO + AbABkwF1AfQB8wH/BAAE/wEaAjIBegX/BAAF8wH0AfIC7wHyBAAB9AHwA7sBugKyAboDuwEJAfQEAAEb + Af8B8wH/Ab0B8gH0AbcB8wH0Af8IAAH0AjgBGgkABfMB9AEHAewB8AUAAfQB8AoJAfAB9AQAAfMC9AEb + AZkBkwEaAvQBGwH/CAAB/wF6ATgB/wkABfMB9AEHAbwGAAH/AfMBGQnyAfMB/wQABP8BmQF0AfQD/woA + ARoBWQH/CQAB/wX0AfMIAAH0CvMB9AkAAfMBGg4AAf8B9EcAAUIBTQE+BwABPgMAASgDAAFAAwABIAMA + AQEBAAEBBgABARYAA/+BAAL/AZwBHQHgAQMBiAERAcABAwIAAcABAwGAAQEBwAEDAYABAQHAAUMBgAEB + AeABBwGAAQEB+AEfAeABBwHgAQcBgAEBAfABDwHwAQcB4AEHAYABAQHgAQMB8AEPAeABBwGAAQEB4AED + AfABDwHgAQcBgAEBAeABAwHgAQcB4AEHAYABAQHgAQMBgAEBAeABBwGAAQEB4AEDAYABAQHgAQcBgAEB + AeABAwHAAQEB4AEHAYABAQHgAQMB/AE/AeABDwGAAQEB4AEDAfwBPwHgAR8BgAEBAeABBwH+AT8B4AE/ + AcABAwH+AX8B/gF/CP8L +</value> + </data> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="pbDelete.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAGHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3NPsx9OAAAB60lEQVQ4T2P4//8/AyUYRfN9B2Pfu3YGzbgMvGdnkHnP3qgQWR5uwC1X + s4grBqr/L2kp/L9upbsF3ZAbdgaNl3WV/1/WUfp/w96w9//BmYwgNWADrnpYcZ3WUf5/XFEajE+py/2/ + aIkw5LKtQeNpbSWgnBQYn9JU/H/eTNsUbsBOTi7GA4rSPQeUZf6DMVDRITW5/2csdVecszesOaqt+H8/ + UAwuryS9/4CsBDfcAJhzdyrL9O5Qkv6/E4h3KEj93wN0yT4txf/bFSQhYhC5/Us0FVlgejBiYCPQkA1A + hWAMtHU90CAYf6OS9N752iqsWAMRWXCFkvTxFcCwQMPvNpkawG3G6YIFitINCxWk/gDxf3S8QFFqI3rs + oHhhhqJ040ygRhieAWSDMKqY9Jb/T7/D9YEZE1TlGSYqSDVMlJf6D8MTQGwF6c2TFKS7wGxkrCC1ZZKK + HAc8FnrVFLg65SX/o+H9tfqqTCBFXQpSvR1o8l2K0mYo0dihJJvYBLSlSU7yP5De9y3AG6wZhpvlpbrB + ckDcoigz/bGzFViegZkBjAWAFG+cpGh9trTYFm4WZgMgXwcobgzCQDaIr5AiKTo3U1p8IZAtAsR8cBcA + FTEDMdhPYEEGBk4gnxcZA8V4kOTZQHowUiI52RoAvKofAJdcVi8AAAAASUVORK5CYII= +</value> + </data> + <data name="pbUndo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAHHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3MgQ1M0BrLToAAAAihJREFUOE9j+P//PwMlmCLNIIupZwATAwMjOxs7Q8XKkwzFG2+y + GnYd8XOZdprZedopBr9FVxiSNt5jqD3wjGHC6TcMvadegzGKCxgYGFhVdE0Y0ldcYVFt3LeYIWfrO9aS + XZzmU84weC+6ypBMhAEsPoU9nBJV+w4xpG/4z5C//SN/zf4ou1kXDIAGsKRvvsdQfxCPC7jFFIVFc9fu + ZEhb+58hZ9N/hoLt/xlL9/xnqT78X6Ln3D3bRbfaSvc+FZ927g3DpDMQjOIF1ohptxlSgJrTEQYwlOz+ + z1C+/z9D1eH/jM2n/6vOuf06dtsT64ydTxjSdjxBNYApdf1/huSVmAZUHPjPUHPkP0P9if8MLWf/K8y7 + 98lw0T1do0V3UQ0QsoqIZc/e/AXZCwyFuyAuABtw8j9D05n/LF2X/2ssfnTEeOkDVAPYmRgZtLJn2bFk + b/7BkLURFAa/NbuOdUi1HY8QbjsZKtN3Pkl20uUpHD2Xn/FNuf3fYNljF4xotPGLYohacsWOIXPDW4a8 + bW/lmw9yKXedYJDuOs2gO/0Sg/vyOwxZu56yGCy+Xy086/58dAMYxSRlGJq3XWOIWnhBS6hy93rB6r0c + YnX7GWQ6TzJoT7vE4Lz0NkPW7ucMkdufM1mufOJP3aQMMo2ZgYEZiEWBWBaYtKVYOPkNWMRUvYFscSCW + BYqLAzErcu5FyUxASUaQAiDmAGIuIAbLA2l2qBgbSA2yAQAKojORM6Lv5AAAAABJRU5ErkJggg== +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/TVScraper/dlgTVImageSelect.vb b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVImageSelect.vb new file mode 100644 index 0000000..288414e --- /dev/null +++ b/Addons/scraper.TVDB.Poster/TVScraper/dlgTVImageSelect.vb @@ -0,0 +1,1224 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +'TODO: 1.5 - TV Show renaming (including "dump folder") +'TODO: 1.5 - Support VIDEO_TS/BDMV folders for TV Shows + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgTVImageSelect + +#Region "Fields" + + Friend WithEvents bwDownloadFanart As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwLoadData As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwLoadImages As New System.ComponentModel.BackgroundWorker + + Private DefaultImages As New Scraper.TVImages + Private FanartList As New List(Of Scraper.TVDBFanart) + Private GenericPosterList As New List(Of Scraper.TVDBPoster) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + Private iTop As Integer = 5 + Private lblImage() As Label + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private SeasonList As New List(Of Scraper.TVDBSeasonPoster) + Private SelIsPoster As Boolean = True + Private SelSeason As Integer = -999 + Private ShowPosterList As New List(Of Scraper.TVDBShowPoster) + Private _fanartchanged As Boolean = False + Private _id As Integer = -1 + Private _season As Integer = -999 + Private _type As Enums.TVImageType = Enums.TVImageType.All + Private _withcurrent As Boolean = True + Private _ScrapeType As Enums.ScrapeType + +#End Region 'Fields + +#Region "Methods" + + Public Function SetDefaults() As Boolean + Dim iSeason As Integer = -1 + Dim iEpisode As Integer = -1 + Dim iProgress As Integer = 3 + + Dim tSea As Scraper.TVDBSeasonPoster + + Try + Me.bwLoadImages.ReportProgress(Scraper.TVDBImages.SeasonImageList.Count + Scraper.tmpTVDBShow.Episodes.Count + 3, "defaults") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster) AndAlso IsNothing(Scraper.TVDBImages.ShowPoster.Image.Image) Then + If Master.eSettings.IsShowBanner Then + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredShowBannerType AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If Master.eSettings.OnlyGetTVImagesForSelectedLanguage Then + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + End If + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredShowBannerType) + + 'no preferred size, just get any one of them + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.ShowPoster.Image = tSP.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSP.URL + Else + 'still nothing? try to get from generic posters + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) p.Language = Master.eSettings.TVDBLanguage AndAlso Not IsNothing(p.Image.Image)) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.ShowPoster.Image = tSPg.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSPg.URL + End If + End If + Else + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredShowPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If Master.eSettings.OnlyGetTVImagesForSelectedLanguage Then + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + End If + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredShowPosterSize) + + 'no preferred size, just get any one of them + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.ShowPoster.Image = tSPg.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSPg.URL + Else + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.ShowPoster.Image = tSP.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSP.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(1, "progress") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart) AndAlso IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Dim tSF As Scraper.TVDBFanart = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image) AndAlso Me.GetFanartDims(f.Size) = Master.eSettings.PreferredShowFanartSize AndAlso f.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSF) Then tSF = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image) AndAlso Me.GetFanartDims(f.Size) = Master.eSettings.PreferredShowFanartSize) + + 'no fanart of the preferred size, just get the first available + If IsNothing(tSF) Then tSF = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image)) + + If Not IsNothing(tSF) Then + If Not String.IsNullOrEmpty(tSF.LocalFile) AndAlso File.Exists(tSF.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(tSF.LocalFile) + Scraper.TVDBImages.ShowFanart.LocalFile = tSF.LocalFile + Scraper.TVDBImages.ShowFanart.URL = tSF.URL + ElseIf Not String.IsNullOrEmpty(tSF.LocalFile) AndAlso Not String.IsNullOrEmpty(tSF.URL) Then + Scraper.TVDBImages.ShowFanart.Image.FromWeb(tSF.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(tSF.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(tSF.LocalFile, , , False) + Scraper.TVDBImages.ShowFanart.LocalFile = tSF.LocalFile + Scraper.TVDBImages.ShowFanart.URL = tSF.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(2, "progress") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.AllSeasonPoster) AndAlso Master.eSettings.AllSeasonPosterEnabled AndAlso IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + If Master.eSettings.IsAllSBanner Then + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredAllSBannerType AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredAllSBannerType) + + 'no preferred size, just get any one of them + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSP.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSP.URL + Else + 'still nothing? try to get from generic posters + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSPg.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSPg.URL + End If + End If + Else + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredAllSPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredAllSPosterSize) + + 'no preferred size, just get any one of them + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSPg.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSPg.URL + Else + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSP.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSP.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(3, "progress") + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.SeasonFanart Then + For Each cSeason As Scraper.TVDBSeasonImage In Scraper.TVDBImages.SeasonImageList + Try + iSeason = cSeason.Season + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster) AndAlso IsNothing(cSeason.Poster.Image) Then + tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason AndAlso p.Type = Master.eSettings.PreferredSeasonPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + If IsNothing(tSea) Then tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason AndAlso p.Type = Master.eSettings.PreferredSeasonPosterSize) + If IsNothing(tSea) Then tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason) + If Not IsNothing(tSea) Then cSeason.Poster = tSea.Image + End If + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonFanart) AndAlso Master.eSettings.SeasonFanartEnabled AndAlso IsNothing(cSeason.Fanart.Image.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then cSeason.Fanart.Image = Scraper.TVDBImages.ShowFanart.Image + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All Then + For Each Episode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + If Not String.IsNullOrEmpty(Episode.TVEp.LocalFile) Then + Episode.TVEp.Poster.FromFile(Episode.TVEp.LocalFile) + ElseIf Not String.IsNullOrEmpty(Episode.EpPosterPath) Then + Episode.TVEp.Poster.FromFile(Episode.EpPosterPath) + End If + + If Master.eSettings.EpisodeFanartEnabled Then + If Not String.IsNullOrEmpty(Episode.EpFanartPath) Then + Episode.TVEp.Fanart.FromFile(Episode.EpFanartPath) + ElseIf Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Episode.TVEp.Fanart = Scraper.TVDBImages.ShowFanart.Image + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + DefaultImages = Scraper.TVDBImages.Clone + + Return False + End Function + + Public Overloads Function ShowDialog(ByVal ShowID As Integer, ByVal Type As Enums.TVImageType, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As System.Windows.Forms.DialogResult + Me._id = ShowID + Me._type = Type + Me._withcurrent = WithCurrent + Me._ScrapeType = ScrapeType + Return MyBase.ShowDialog + End Function + + Public Overloads Function ShowDialog(ByVal ShowID As Integer, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal CurrentImage As Images) As Images + Me._id = ShowID + Me._type = Type + Me._season = Season + Me.pbCurrent.Image = CurrentImage.Image + Me.pbCurrent.Tag = CurrentImage + + If MyBase.ShowDialog = Windows.Forms.DialogResult.OK Then + Return CType(Me.pbCurrent.Tag, Images) + Else + Return Nothing + End If + End Function + + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal fTag As ImageTag) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + ReDim Preserve Me.lblImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.lblImage(iIndex) = New Label() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(187, 187) + Me.pbImage(iIndex).Size = New Size(181, 151) + Me.lblImage(iIndex).Size = New Size(181, 30) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblImage(iIndex).Text = sDescription + Me.pbImage(iIndex).Image = fTag.ImageObj.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.lblImage(iIndex).Left = 0 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.lblImage(iIndex).Top = 151 + Me.pnlImage(iIndex).Tag = fTag + Me.pbImage(iIndex).Tag = fTag + Me.lblImage(iIndex).Tag = fTag + Me.pnlImages.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 192 + Else + Me.iLeft += 192 + End If + End Sub + + Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click + If Me.bwLoadData.IsBusy Then Me.bwLoadData.CancelAsync() + If Me.bwLoadImages.IsBusy Then Me.bwLoadImages.CancelAsync() + + While Me.bwLoadData.IsBusy OrElse Me.bwLoadImages.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click + DoneAndClose() + End Sub + + Private Sub DoneAndClose() + If Me._type = Enums.TVImageType.All Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + Master.currShow.ShowPosterPath = Scraper.TVDBImages.ShowPoster.LocalFile + If Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.TVDBImages.ShowFanart.LocalFile) + Master.currShow.ShowFanartPath = Scraper.TVDBImages.ShowFanart.LocalFile + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.Clear() + Scraper.TVDBImages.ShowFanart.Image.FromWeb(Scraper.TVDBImages.ShowFanart.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.ShowFanart.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile, , , False) + Master.currShow.ShowFanartPath = Scraper.TVDBImages.ShowFanart.LocalFile + End If + End If + If Master.eSettings.AllSeasonPosterEnabled AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + Master.currShow.SeasonPosterPath = Scraper.TVDBImages.AllSeasonPoster.LocalFile + End If + ElseIf Me._type = Enums.TVImageType.SeasonFanart AndAlso Me._fanartchanged Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + If Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromFile(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) + Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Clear() + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromWeb(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) + If Not IsNothing(Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile).FullName) + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Save(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile, , , False) + Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image + End If + End If + ElseIf (Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart) AndAlso Me._fanartchanged Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + If Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.TVDBImages.ShowFanart.LocalFile) + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.Clear() + Scraper.TVDBImages.ShowFanart.Image.FromWeb(Scraper.TVDBImages.ShowFanart.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.ShowFanart.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile, , , False) + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + End If + End If + End If + + Me.DialogResult = Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + + Private Sub bwLoadData_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwLoadData.DoWork + Dim cSI As Scraper.TVDBSeasonImage + Dim iProgress As Integer = 1 + Dim iSeason As Integer = -1 + + Me.bwLoadData.ReportProgress(Scraper.tmpTVDBShow.Episodes.Count, "current") + + 'initialize the struct + Scraper.TVDBImages.ShowPoster = New Scraper.TVDBShowPoster + Scraper.TVDBImages.ShowFanart = New Scraper.TVDBFanart + Scraper.TVDBImages.AllSeasonPoster = New Scraper.TVDBShowPoster + Scraper.TVDBImages.SeasonImageList = New List(Of Scraper.TVDBSeasonImage) + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + Select Case Me._type + Case Enums.TVImageType.AllSeasonPoster + Scraper.TVDBImages.AllSeasonPoster.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.SeasonFanart + cSI = New Scraper.TVDBSeasonImage + cSI.Season = Me._season + cSI.Fanart.Image = CType(Me.pbCurrent.Tag, Images) + Scraper.TVDBImages.SeasonImageList.Add(cSI) + Case Enums.TVImageType.SeasonPoster + cSI = New Scraper.TVDBSeasonImage + cSI.Season = Me._season + cSI.Poster = CType(Me.pbCurrent.Tag, Images) + Scraper.TVDBImages.SeasonImageList.Add(cSI) + Case Enums.TVImageType.ShowFanart, Enums.TVImageType.EpisodeFanart + Scraper.TVDBImages.ShowFanart.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.ShowPoster + Scraper.TVDBImages.ShowPoster.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.All + + If _withcurrent Then + If Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.Show.ShowPosterPath) Then + Scraper.TVDBImages.ShowPoster.Image.FromFile(Scraper.tmpTVDBShow.Show.ShowPosterPath) + Scraper.TVDBImages.ShowPoster.LocalFile = Scraper.tmpTVDBShow.Show.ShowPosterPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.Show.ShowFanartPath) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.tmpTVDBShow.Show.ShowFanartPath) + Scraper.TVDBImages.ShowFanart.LocalFile = Scraper.tmpTVDBShow.Show.ShowFanartPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Master.eSettings.AllSeasonPosterEnabled AndAlso Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath) Then + Scraper.TVDBImages.AllSeasonPoster.Image.FromFile(Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath) + Scraper.TVDBImages.AllSeasonPoster.LocalFile = Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + For Each sEpisode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + iSeason = sEpisode.TVEp.Season + If iSeason > -1 Then + If IsNothing(Scraper.TVDBImages.ShowPoster.Image) AndAlso Not String.IsNullOrEmpty(sEpisode.ShowPosterPath) Then + Scraper.TVDBImages.ShowPoster.Image.FromFile(sEpisode.ShowPosterPath) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Master.eSettings.EpisodeFanartEnabled AndAlso IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) AndAlso Not String.IsNullOrEmpty(sEpisode.ShowFanartPath) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(sEpisode.ShowFanartPath) + Scraper.TVDBImages.ShowFanart.LocalFile = sEpisode.ShowFanartPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Scraper.TVDBImages.SeasonImageList.Where(Function(s) s.Season = iSeason).Count = 0 Then + cSI = New Scraper.TVDBSeasonImage + cSI.Season = iSeason + If Not String.IsNullOrEmpty(sEpisode.SeasonPosterPath) Then + cSI.Poster.FromFile(sEpisode.SeasonPosterPath) + End If + If Master.eSettings.SeasonFanartEnabled AndAlso Not String.IsNullOrEmpty(sEpisode.SeasonFanartPath) Then + cSI.Fanart.Image.FromFile(sEpisode.SeasonFanartPath) + cSI.Fanart.LocalFile = sEpisode.SeasonFanartPath + End If + Scraper.TVDBImages.SeasonImageList.Add(cSI) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + End If + Me.bwLoadData.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + Else + For Each sEpisode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + iSeason = sEpisode.TVEp.Season + + If Scraper.TVDBImages.SeasonImageList.Where(Function(s) s.Season = iSeason).Count = 0 Then + cSI = New Scraper.TVDBSeasonImage + cSI.Season = iSeason + Scraper.TVDBImages.SeasonImageList.Add(cSI) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + Me.bwLoadData.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + End Select + End Sub + + Private Sub bwLoadData_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwLoadData.ProgressChanged + Try + If e.UserState.ToString = "progress" Then + Me.pbStatus.Value = e.ProgressPercentage + ElseIf e.UserState.ToString = "current" Then + Me.lblStatus.Text = Master.eLang.GetString(88, "Loading Current Images...") + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + Else + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwLoadData_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwLoadData.RunWorkerCompleted + If Not e.Cancelled Then + Me.GenerateList() + + Me.lblStatus.Text = Master.eLang.GetString(89, "(Down)Loading New Images...") + Me.bwLoadImages.WorkerReportsProgress = True + Me.bwLoadImages.WorkerSupportsCancellation = True + Me.bwLoadImages.RunWorkerAsync() + End If + End Sub + + Private Sub bwLoadImages_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwLoadImages.DoWork + e.Cancel = Me.DownloadAllImages() + End Sub + + Private Sub bwLoadImages_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwLoadImages.ProgressChanged + Try + If e.UserState.ToString = "progress" Then + Me.pbStatus.Value = e.ProgressPercentage + ElseIf e.UserState.ToString = "defaults" Then + Me.lblStatus.Text = Master.eLang.GetString(90, "Setting Defaults...") + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + Else + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwLoadImages_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwLoadImages.RunWorkerCompleted + Me.pnlStatus.Visible = False + If _ScrapeType = Enums.ScrapeType.FullAuto Then + DoneAndClose() + Else + If Not e.Cancelled Then + Me.tvList.Enabled = True + Me.tvList.Visible = True + Me.tvList.SelectedNode = Me.tvList.Nodes(0) + Me.tvList.Focus() + + Me.btnOK.Enabled = True + End If + + Me.pbCurrent.Visible = True + Me.lblCurrentImage.Visible = True + End If + End Sub + + Private Sub CheckCurrentImage() + Me.pbDelete.Visible = Not IsNothing(Me.pbCurrent.Image) AndAlso Me.pbCurrent.Visible + Me.pbUndo.Visible = Me.pbCurrent.Visible + End Sub + + Private Sub ClearImages() + Try + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop = 5 + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Tag = Nothing + + If Me.pnlImages.Controls.Count > 0 Then + For i As Integer = UBound(Me.pnlImage) To 0 Step -1 + If Not IsNothing(Me.pnlImage(i)) Then + If Not IsNothing(Me.lblImage(i)) AndAlso Me.pnlImage(i).Contains(Me.lblImage(i)) Then Me.pnlImage(i).Controls.Remove(Me.lblImage(i)) + If Not IsNothing(Me.pbImage(i)) AndAlso Me.pnlImage(i).Contains(Me.pbImage(i)) Then Me.pnlImage(i).Controls.Remove(Me.pbImage(i)) + If Me.pnlImages.Contains(Me.pnlImage(i)) Then Me.pnlImages.Controls.Remove(Me.pnlImage(i)) + End If + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgTVImageSelect_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + AddHandler pnlImages.MouseWheel, AddressOf MouseWheelEvent + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler tvList.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlImages) + + Me.SetUp() + End Sub + + Private Sub dlgTVImageSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.bwLoadData.WorkerReportsProgress = True + Me.bwLoadData.WorkerSupportsCancellation = True + Me.bwLoadData.RunWorkerAsync() + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, ByVal SelTag As ImageTag) + Try + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + Next + + Me.pnlImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + + SetImage(SelTag) + + Me.CheckCurrentImage() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function DownloadAllImages() As Boolean + Dim iProgress As Integer = 1 + + Try + Me.bwLoadImages.ReportProgress(Scraper.tmpTVDBShow.Episodes.Count + Scraper.tmpTVDBShow.SeasonPosters.Count + Scraper.tmpTVDBShow.ShowPosters.Count + Scraper.tmpTVDBShow.Fanart.Count + Scraper.tmpTVDBShow.Posters.Count, "max") + + If Me._type = Enums.TVImageType.All Then + For Each Epi As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + If Not File.Exists(Epi.TVEp.LocalFile) Then + If Not String.IsNullOrEmpty(Epi.TVEp.PosterURL) Then + Epi.TVEp.Poster.FromWeb(Epi.TVEp.PosterURL) + If Not IsNothing(Epi.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Epi.TVEp.LocalFile).FullName) + Epi.TVEp.Poster.Save(Epi.TVEp.LocalFile) + End If + End If + Else + Epi.TVEp.Poster.FromFile(Epi.TVEp.LocalFile) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each Seas As Scraper.TVDBSeasonPoster In Scraper.tmpTVDBShow.SeasonPosters + Try + If Not File.Exists(Seas.LocalFile) Then + If Not String.IsNullOrEmpty(Seas.URL) Then + Seas.Image.FromWeb(Seas.URL) + If Not IsNothing(Seas.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Seas.LocalFile).FullName) + Seas.Image.Save(Seas.LocalFile, , , False) + SeasonList.Add(Seas) + End If + End If + Else + Seas.Image.FromFile(Seas.LocalFile) + SeasonList.Add(Seas) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each SPost As Scraper.TVDBShowPoster In Scraper.tmpTVDBShow.ShowPosters + Try + If Not File.Exists(SPost.LocalFile) Then + If Not String.IsNullOrEmpty(SPost.URL) Then + SPost.Image.FromWeb(SPost.URL) + If Not IsNothing(SPost.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(SPost.LocalFile).FullName) + SPost.Image.Save(SPost.LocalFile, , , False) + ShowPosterList.Add(SPost) + End If + End If + Else + SPost.Image.FromFile(SPost.LocalFile) + ShowPosterList.Add(SPost) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.SeasonFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart Then + For Each SFan As Scraper.TVDBFanart In Scraper.tmpTVDBShow.Fanart + Try + If Not File.Exists(SFan.LocalThumb) Then + If Not String.IsNullOrEmpty(SFan.ThumbnailURL) Then + SFan.Image.FromWeb(SFan.ThumbnailURL) + If Not IsNothing(SFan.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(SFan.LocalThumb).FullName) + SFan.Image.Save(SFan.LocalThumb, , , False) + FanartList.Add(SFan) + End If + End If + Else + SFan.Image.FromFile(SFan.LocalThumb) + FanartList.Add(SFan) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster OrElse _ + Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each Post As Scraper.TVDBPoster In Scraper.tmpTVDBShow.Posters + Try + If Not File.Exists(Post.LocalFile) Then + If Not String.IsNullOrEmpty(Post.URL) Then + Post.Image.FromWeb(Post.URL) + If Not IsNothing(Post.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Post.LocalFile).FullName) + Post.Image.Save(Post.LocalFile, , , False) + GenericPosterList.Add(Post) + End If + End If + Else + Post.Image.FromFile(Post.LocalFile) + GenericPosterList.Add(Post) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return Me.SetDefaults() + End Function + + Private Function DownloadFanart(ByVal iTag As ImageTag) As Image + Dim sHTTP As New HTTP + + Using tImage As New Images + If Not String.IsNullOrEmpty(iTag.Path) AndAlso File.Exists(iTag.Path) Then + tImage.FromFile(iTag.Path) + ElseIf Not String.IsNullOrEmpty(iTag.Path) AndAlso Not String.IsNullOrEmpty(iTag.URL) Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + + Application.DoEvents() + + tImage.FromWeb(iTag.URL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(iTag.Path).FullName) + tImage.Save(iTag.Path, , , False) + End If + + sHTTP = Nothing + + Me.pnlStatus.Visible = False + End If + + Return tImage.Image + End Using + End Function + + Private Sub GenerateList() + Try + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster Then Me.tvList.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(91, "Show Poster"), .Tag = "showp", .ImageIndex = 0, .SelectedImageIndex = 0}) + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart Then Me.tvList.Nodes.Add(New TreeNode With {.Text = If(Me._type = Enums.TVImageType.EpisodeFanart, Master.eLang.GetString(92, "Episode Fanart"), Master.eLang.GetString(93, "Show Fanart")), .Tag = "showf", .ImageIndex = 1, .SelectedImageIndex = 1}) + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.AllSeasonPoster) AndAlso Master.eSettings.AllSeasonPosterEnabled Then Me.tvList.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(94, "All Seasons Poster"), .Tag = "allp", .ImageIndex = 2, .SelectedImageIndex = 2}) + + Dim TnS As TreeNode + If Me._type = Enums.TVImageType.All Then + For Each cSeason As Scraper.TVDBSeasonImage In Scraper.TVDBImages.SeasonImageList.OrderBy(Function(s) s.Season) + Try + TnS = New TreeNode(String.Format(Master.eLang.GetString(726, "Season {0}", True), cSeason.Season), 3, 3) + TnS.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(95, "Season Posters"), .Tag = String.Concat("p", cSeason.Season.ToString), .ImageIndex = 0, .SelectedImageIndex = 0}) + If Master.eSettings.SeasonFanartEnabled Then TnS.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(96, "Season Fanart"), .Tag = String.Concat("f", cSeason.Season.ToString), .ImageIndex = 1, .SelectedImageIndex = 1}) + Me.tvList.Nodes.Add(TnS) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + ElseIf Me._type = Enums.TVImageType.SeasonPoster Then + Me.tvList.Nodes.Add(New TreeNode With {.Text = String.Format(Master.eLang.GetString(97, "Season {0} Posters"), Me._season), .Tag = String.Concat("p", Me._season)}) + ElseIf Me._type = Enums.TVImageType.SeasonFanart Then + If Master.eSettings.SeasonFanartEnabled Then Me.tvList.Nodes.Add(New TreeNode With {.Text = String.Format(Master.eLang.GetString(99, "Season {0} Fanart"), Me._season), .Tag = String.Concat("f", Me._season)}) + End If + + Me.tvList.ExpandAll() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetFanartDims(ByVal fSize As Size) As Enums.FanartSize + Try + If (fSize.Width > 1000 AndAlso fSize.Height > 750) OrElse (fSize.Height > 1000 AndAlso fSize.Width > 750) Then + Return Enums.FanartSize.Lrg + ElseIf (fSize.Width > 700 AndAlso fSize.Height > 400) OrElse (fSize.Height > 700 AndAlso fSize.Width > 400) Then + Return Enums.FanartSize.Mid + Else + Return Enums.FanartSize.Small + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Function + + Private Function GetPosterDims(ByVal pSize As Size) As Enums.PosterSize + Try + If (pSize.Width > pSize.Height) AndAlso (pSize.Width > (pSize.Height * 2)) AndAlso (pSize.Width > 300) Then + 'at least twice as wide than tall... consider it wide (also make sure it's big enough) + Return Enums.PosterSize.Wide + ElseIf (pSize.Height > 1000 AndAlso pSize.Width > 750) OrElse (pSize.Width > 1000 AndAlso pSize.Height > 750) Then + Return Enums.PosterSize.Xlrg + ElseIf (pSize.Height > 700 AndAlso pSize.Width > 500) OrElse (pSize.Width > 700 AndAlso pSize.Height > 500) Then + Return Enums.PosterSize.Lrg + ElseIf (pSize.Height > 250 AndAlso pSize.Width > 150) OrElse (pSize.Width > 250 AndAlso pSize.Height > 150) Then + Return Enums.PosterSize.Mid + Else + Return Enums.PosterSize.Small + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Function + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Dim iindex As Integer = Convert.ToInt32(DirectCast(sender, Label).Name) + Me.DoSelect(iindex, DirectCast(DirectCast(sender, Label).Tag, ImageTag)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlImages.VerticalScroll.Value + 50) <= pnlImages.VerticalScroll.Maximum Then + pnlImages.VerticalScroll.Value += 50 + Else + pnlImages.VerticalScroll.Value = pnlImages.VerticalScroll.Maximum + End If + Else + If (pnlImages.VerticalScroll.Value - 50) >= pnlImages.VerticalScroll.Minimum Then + pnlImages.VerticalScroll.Value -= 50 + Else + pnlImages.VerticalScroll.Value = pnlImages.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub pbDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbDelete.Click + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Tag = Nothing + Me.SetImage(New ImageTag) + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, ImageTag)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) + Dim tImage As Image = Nothing + Dim iTag As ImageTag = DirectCast(DirectCast(sender, PictureBox).Tag, ImageTag) + If Not IsNothing(iTag) OrElse Not iTag.isFanart Then + tImage = DownloadFanart(iTag) + Else + tImage = DirectCast(sender, PictureBox).Image + End If + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage) + End Sub + + Private Sub pbUndo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbUndo.Click + If Me.SelSeason = -999 Then + If Me.SelIsPoster Then + Scraper.TVDBImages.ShowPoster.Image = DefaultImages.ShowPoster.Image + Scraper.TVDBImages.ShowPoster.LocalFile = DefaultImages.ShowPoster.LocalFile + Scraper.TVDBImages.ShowPoster.URL = DefaultImages.ShowPoster.URL + Me.pbCurrent.Image = Scraper.TVDBImages.ShowPoster.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowPoster.Image + Else + Scraper.TVDBImages.ShowFanart.Image = DefaultImages.ShowFanart.Image + Scraper.TVDBImages.ShowFanart.LocalFile = DefaultImages.ShowFanart.LocalFile + Scraper.TVDBImages.ShowFanart.URL = DefaultImages.ShowFanart.URL + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + End If + ElseIf Me.SelSeason = 999 Then + Scraper.TVDBImages.AllSeasonPoster.Image = DefaultImages.AllSeasonPoster.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = DefaultImages.AllSeasonPoster.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = DefaultImages.AllSeasonPoster.URL + Me.pbCurrent.Image = Scraper.TVDBImages.AllSeasonPoster.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.AllSeasonPoster.Image + Else + If Me.SelIsPoster Then + Dim dSPost As Images = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster + Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster = dSPost + Me.pbCurrent.Image = dSPost.Image + Me.pbCurrent.Tag = dSPost + Else + Dim dSFan As Scraper.TVDBFanart = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + Dim tSFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + tSFan.Image = dSFan.Image + tSFan.LocalFile = dSFan.LocalFile + tSFan.URL = dSFan.URL + Me.pbCurrent.Image = dSFan.Image.Image + Me.pbCurrent.Tag = dSFan.Image + End If + End If + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Dim iIndex As Integer = Convert.ToInt32(DirectCast(sender, Panel).Name) + Me.DoSelect(iIndex, DirectCast(DirectCast(sender, Panel).Tag, ImageTag)) + End Sub + + Private Sub SetImage(ByVal SelTag As ImageTag) + Me.pbCurrent.Image = SelTag.ImageObj.Image + Me.pbCurrent.Tag = SelTag.ImageObj + + Me._fanartchanged = True + + If Me.SelSeason = -999 Then + If Me.SelIsPoster Then + Scraper.TVDBImages.ShowPoster.Image = SelTag.ImageObj + Scraper.TVDBImages.ShowPoster.LocalFile = SelTag.Path + Scraper.TVDBImages.ShowPoster.URL = SelTag.URL + Else + Scraper.TVDBImages.ShowFanart.Image = SelTag.ImageObj + Scraper.TVDBImages.ShowFanart.LocalFile = SelTag.Path + Scraper.TVDBImages.ShowFanart.URL = SelTag.URL + End If + ElseIf Me.SelSeason = 999 Then + Scraper.TVDBImages.AllSeasonPoster.Image = SelTag.ImageObj + Scraper.TVDBImages.AllSeasonPoster.LocalFile = SelTag.Path + Scraper.TVDBImages.AllSeasonPoster.URL = SelTag.URL + Else + If Me.SelIsPoster Then + Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster = SelTag.ImageObj + Else + Dim tFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + If Not IsNothing(tFan) Then + tFan.Image = SelTag.ImageObj + tFan.LocalFile = SelTag.Path + tFan.URL = SelTag.URL + End If + End If + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(99, "TV Image Selection") + Me.btnOK.Text = Master.eLang.GetString(179, "OK", True) + Me.btnCancel.Text = Master.eLang.GetString(167, "Cancel", True) + Me.lblCurrentImage.Text = Master.eLang.GetString(100, "Current Image:") + End Sub + + Private Sub tvList_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvList.AfterSelect + Dim iCount As Integer = 0 + + Try + ClearImages() + If Not IsNothing(e.Node.Tag) AndAlso Not String.IsNullOrEmpty(e.Node.Tag.ToString) Then + Me.pbCurrent.Visible = True + Me.lblCurrentImage.Visible = True + If e.Node.Tag.ToString = "showp" Then + Me.SelSeason = -999 + Me.SelIsPoster = True + If Not IsNothing(Scraper.TVDBImages.ShowPoster) AndAlso Not IsNothing(Scraper.TVDBImages.ShowPoster.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowPoster.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.ShowPoster.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + iCount = ShowPosterList.Count + For i = 0 To iCount - 1 + If Not IsNothing(ShowPosterList(i)) AndAlso Not IsNothing(ShowPosterList(i).Image) AndAlso Not IsNothing(ShowPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False, .ImageObj = ShowPosterList(i).Image}) + End If + Next + + For i = 0 To GenericPosterList.Count - 1 + If Not IsNothing(GenericPosterList(i)) AndAlso Not IsNothing(GenericPosterList(i).Image) AndAlso Not IsNothing(GenericPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False, .ImageObj = GenericPosterList(i).Image}) + End If + Next + + ElseIf e.Node.Tag.ToString = "showf" Then + + Me.SelSeason = -999 + Me.SelIsPoster = False + If Not IsNothing(Scraper.TVDBImages.ShowFanart) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + For i = 0 To FanartList.Count - 1 + If Not IsNothing(FanartList(i)) AndAlso Not IsNothing(FanartList(i).Image) AndAlso Not IsNothing(FanartList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True, .ImageObj = FanartList(i).Image}) + End If + Next + + ElseIf e.Node.Tag.ToString = "allp" Then + Me.SelSeason = 999 + Me.SelIsPoster = True + If Not IsNothing(Scraper.TVDBImages.AllSeasonPoster) AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image) AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.AllSeasonPoster.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + iCount = GenericPosterList.Count + For i = 0 To iCount - 1 + If Not IsNothing(GenericPosterList(i)) AndAlso Not IsNothing(GenericPosterList(i).Image) AndAlso Not IsNothing(GenericPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False, .ImageObj = GenericPosterList(i).Image}) + End If + Next + + For i = 0 To ShowPosterList.Count - 1 + If Not IsNothing(ShowPosterList(i)) AndAlso Not IsNothing(ShowPosterList(i).Image) AndAlso Not IsNothing(ShowPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False, .ImageObj = ShowPosterList(i).Image}) + End If + Next + Else + Dim tMatch As Match = Regex.Match(e.Node.Tag.ToString, "(?<type>f|p)(?<num>[0-9]+)") + If tMatch.Success Then + If tMatch.Groups("type").Value = "f" Then + Me.SelSeason = Convert.ToInt32(tMatch.Groups("num").Value) + Me.SelIsPoster = False + Dim tFanart As Scraper.TVDBSeasonImage = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(f) f.Season = Convert.ToInt32(tMatch.Groups("num").Value)) + If Not IsNothing(tFanart) AndAlso Not IsNothing(tFanart.Fanart) AndAlso Not IsNothing(tFanart.Fanart.Image) AndAlso Not IsNothing(tFanart.Fanart.Image.Image) Then + Me.pbCurrent.Image = tFanart.Fanart.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + For i = 0 To FanartList.Count - 1 + If Not IsNothing(FanartList(i)) AndAlso Not IsNothing(FanartList(i).Image) AndAlso Not IsNothing(FanartList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True, .ImageObj = FanartList(i).Image}) + End If + Next + ElseIf tMatch.Groups("type").Value = "p" Then + Me.SelSeason = Convert.ToInt32(tMatch.Groups("num").Value) + Me.SelIsPoster = True + Dim tPoster As Scraper.TVDBSeasonImage = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(f) f.Season = Me.SelSeason) + If Not IsNothing(tPoster) AndAlso Not IsNothing(tPoster.Poster) AndAlso Not IsNothing(tPoster.Poster.Image) Then + Me.pbCurrent.Image = tPoster.Poster.Image + Else + Me.pbCurrent.Image = Nothing + End If + iCount = 0 + For Each SImage As Scraper.TVDBSeasonPoster In SeasonList.Where(Function(s) s.Season = Convert.ToInt32(tMatch.Groups("num").Value)) + If Not IsNothing(SImage.Image) AndAlso Not IsNothing(SImage.Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", SImage.Image.Image.Width, SImage.Image.Image.Height), iCount, New ImageTag With {.URL = SImage.URL, .Path = SImage.LocalFile, .isFanart = False, .ImageObj = SImage.Image}) + End If + iCount += 1 + Next + End If + End If + End If + Else + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Visible = False + Me.lblCurrentImage.Visible = False + End If + + Me.CheckCurrentImage() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure ImageTag + +#Region "Fields" + + Dim isFanart As Boolean + Dim Path As String + Dim URL As String + Dim ImageObj As Images + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/frmInfoSettingsHolder.Designer.vb b/Addons/scraper.TVDB.Poster/frmInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..c3675d6 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/frmInfoSettingsHolder.Designer.vb @@ -0,0 +1,632 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtIMDBURL = New System.Windows.Forms.TextBox() + Me.GroupBox15 = New System.Windows.Forms.GroupBox() + Me.chkOFDBGenre = New System.Windows.Forms.CheckBox() + Me.chkOFDBPlot = New System.Windows.Forms.CheckBox() + Me.chkOFDBOutline = New System.Windows.Forms.CheckBox() + Me.chkOFDBTitle = New System.Windows.Forms.CheckBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCertification = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkTop250 = New System.Windows.Forms.CheckBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkMusicBy = New System.Windows.Forms.CheckBox() + Me.chkProducers = New System.Windows.Forms.CheckBox() + Me.chkFullCast = New System.Windows.Forms.CheckBox() + Me.chkWriters = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkFullCrew = New System.Windows.Forms.CheckBox() + Me.chkPlot = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkDirector = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.GroupBox30.SuspendLayout() + Me.GroupBox15.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtIMDBURL) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(213, 69) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "IMDB" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(73, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "IMDB Mirror:" + ' + 'txtIMDBURL + ' + Me.txtIMDBURL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtIMDBURL.Location = New System.Drawing.Point(8, 32) + Me.txtIMDBURL.Name = "txtIMDBURL" + Me.txtIMDBURL.Size = New System.Drawing.Size(192, 22) + Me.txtIMDBURL.TabIndex = 1 + ' + 'GroupBox15 + ' + Me.GroupBox15.Controls.Add(Me.chkOFDBGenre) + Me.GroupBox15.Controls.Add(Me.chkOFDBPlot) + Me.GroupBox15.Controls.Add(Me.chkOFDBOutline) + Me.GroupBox15.Controls.Add(Me.chkOFDBTitle) + Me.GroupBox15.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox15.Location = New System.Drawing.Point(8, 114) + Me.GroupBox15.Name = "GroupBox15" + Me.GroupBox15.Size = New System.Drawing.Size(213, 87) + Me.GroupBox15.TabIndex = 2 + Me.GroupBox15.TabStop = False + Me.GroupBox15.Text = "OFDB (German)" + ' + 'chkOFDBGenre + ' + Me.chkOFDBGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBGenre.Location = New System.Drawing.Point(6, 65) + Me.chkOFDBGenre.Name = "chkOFDBGenre" + Me.chkOFDBGenre.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBGenre.TabIndex = 3 + Me.chkOFDBGenre.Text = "Use OFDB Genre" + Me.chkOFDBGenre.UseVisualStyleBackColor = True + ' + 'chkOFDBPlot + ' + Me.chkOFDBPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBPlot.Location = New System.Drawing.Point(6, 49) + Me.chkOFDBPlot.Name = "chkOFDBPlot" + Me.chkOFDBPlot.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBPlot.TabIndex = 2 + Me.chkOFDBPlot.Text = "Use OFDB Plot" + Me.chkOFDBPlot.UseVisualStyleBackColor = True + ' + 'chkOFDBOutline + ' + Me.chkOFDBOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBOutline.Location = New System.Drawing.Point(6, 33) + Me.chkOFDBOutline.Name = "chkOFDBOutline" + Me.chkOFDBOutline.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBOutline.TabIndex = 1 + Me.chkOFDBOutline.Text = "Use OFDB Outline" + Me.chkOFDBOutline.UseVisualStyleBackColor = True + ' + 'chkOFDBTitle + ' + Me.chkOFDBTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBTitle.Location = New System.Drawing.Point(6, 17) + Me.chkOFDBTitle.Name = "chkOFDBTitle" + Me.chkOFDBTitle.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBTitle.TabIndex = 0 + Me.chkOFDBTitle.Text = "Use OFDB Title" + Me.chkOFDBTitle.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.GroupBox15) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCertification) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkTop250) + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkMusicBy) + Me.gbOptions.Controls.Add(Me.chkProducers) + Me.gbOptions.Controls.Add(Me.chkFullCast) + Me.gbOptions.Controls.Add(Me.chkWriters) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkFullCrew) + Me.gbOptions.Controls.Add(Me.chkPlot) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkDirector) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(227, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(387, 161) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCertification + ' + Me.chkCertification.AutoSize = True + Me.chkCertification.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCertification.Location = New System.Drawing.Point(6, 70) + Me.chkCertification.Name = "chkCertification" + Me.chkCertification.Size = New System.Drawing.Size(89, 17) + Me.chkCertification.TabIndex = 3 + Me.chkCertification.Text = "Certification" + Me.chkCertification.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(237, 53) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkTop250 + ' + Me.chkTop250.AutoSize = True + Me.chkTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTop250.Location = New System.Drawing.Point(237, 19) + Me.chkTop250.Name = "chkTop250" + Me.chkTop250.Size = New System.Drawing.Size(66, 17) + Me.chkTop250.TabIndex = 16 + Me.chkTop250.Text = "Top 250" + Me.chkTop250.UseVisualStyleBackColor = True + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Enabled = False + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(246, 104) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(85, 17) + Me.chkCrew.TabIndex = 21 + Me.chkCrew.Text = "Other Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkMusicBy + ' + Me.chkMusicBy.AutoSize = True + Me.chkMusicBy.Enabled = False + Me.chkMusicBy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMusicBy.Location = New System.Drawing.Point(246, 121) + Me.chkMusicBy.Name = "chkMusicBy" + Me.chkMusicBy.Size = New System.Drawing.Size(71, 17) + Me.chkMusicBy.TabIndex = 22 + Me.chkMusicBy.Text = "Music By" + Me.chkMusicBy.UseVisualStyleBackColor = True + ' + 'chkProducers + ' + Me.chkProducers.AutoSize = True + Me.chkProducers.Enabled = False + Me.chkProducers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkProducers.Location = New System.Drawing.Point(246, 138) + Me.chkProducers.Name = "chkProducers" + Me.chkProducers.Size = New System.Drawing.Size(77, 17) + Me.chkProducers.TabIndex = 23 + Me.chkProducers.Text = "Producers" + Me.chkProducers.UseVisualStyleBackColor = True + ' + 'chkFullCast + ' + Me.chkFullCast.AutoSize = True + Me.chkFullCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCast.Location = New System.Drawing.Point(237, 70) + Me.chkFullCast.Name = "chkFullCast" + Me.chkFullCast.Size = New System.Drawing.Size(107, 17) + Me.chkFullCast.TabIndex = 19 + Me.chkFullCast.Text = "Scrape Full Cast" + Me.chkFullCast.UseVisualStyleBackColor = True + ' + 'chkWriters + ' + Me.chkWriters.AutoSize = True + Me.chkWriters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkWriters.Location = New System.Drawing.Point(131, 121) + Me.chkWriters.Name = "chkWriters" + Me.chkWriters.Size = New System.Drawing.Size(63, 17) + Me.chkWriters.TabIndex = 14 + Me.chkWriters.Text = "Writers" + Me.chkWriters.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 104) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkFullCrew + ' + Me.chkFullCrew.AutoSize = True + Me.chkFullCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCrew.Location = New System.Drawing.Point(237, 87) + Me.chkFullCrew.Name = "chkFullCrew" + Me.chkFullCrew.Size = New System.Drawing.Size(111, 17) + Me.chkFullCrew.TabIndex = 20 + Me.chkFullCrew.Text = "Scrape Full Crew" + Me.chkFullCrew.UseVisualStyleBackColor = True + ' + 'chkPlot + ' + Me.chkPlot.AutoSize = True + Me.chkPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkPlot.Location = New System.Drawing.Point(131, 70) + Me.chkPlot.Name = "chkPlot" + Me.chkPlot.Size = New System.Drawing.Size(46, 17) + Me.chkPlot.TabIndex = 11 + Me.chkPlot.Text = "Plot" + Me.chkPlot.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 138) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkDirector + ' + Me.chkDirector.AutoSize = True + Me.chkDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDirector.Location = New System.Drawing.Point(131, 104) + Me.chkDirector.Name = "chkDirector" + Me.chkDirector.Size = New System.Drawing.Size(67, 17) + Me.chkDirector.TabIndex = 13 + Me.chkDirector.Text = "Director" + Me.chkDirector.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 87) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 138) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(237, 36) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 121) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 87) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'frmInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.GroupBox15.ResumeLayout(False) + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox + Friend WithEvents Label18 As System.Windows.Forms.Label + Friend WithEvents txtIMDBURL As System.Windows.Forms.TextBox + Friend WithEvents GroupBox15 As System.Windows.Forms.GroupBox + Friend WithEvents chkOFDBGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBPlot As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBTitle As System.Windows.Forms.CheckBox + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents gbOptions As System.Windows.Forms.GroupBox + Friend WithEvents chkCertification As System.Windows.Forms.CheckBox + Friend WithEvents chkCountry As System.Windows.Forms.CheckBox + Friend WithEvents chkTop250 As System.Windows.Forms.CheckBox + Friend WithEvents chkCrew As System.Windows.Forms.CheckBox + Friend WithEvents chkMusicBy As System.Windows.Forms.CheckBox + Friend WithEvents chkFullCrew As System.Windows.Forms.CheckBox + Friend WithEvents chkFullCast As System.Windows.Forms.CheckBox + Friend WithEvents chkProducers As System.Windows.Forms.CheckBox + Friend WithEvents chkWriters As System.Windows.Forms.CheckBox + Friend WithEvents chkStudio As System.Windows.Forms.CheckBox + Friend WithEvents chkRuntime As System.Windows.Forms.CheckBox + Friend WithEvents chkPlot As System.Windows.Forms.CheckBox + Friend WithEvents chkOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkDirector As System.Windows.Forms.CheckBox + Friend WithEvents chkTagline As System.Windows.Forms.CheckBox + Friend WithEvents chkCast As System.Windows.Forms.CheckBox + Friend WithEvents chkVotes As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailer As System.Windows.Forms.CheckBox + Friend WithEvents chkRating As System.Windows.Forms.CheckBox + Friend WithEvents chkRelease As System.Windows.Forms.CheckBox + Friend WithEvents chkMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkYear As System.Windows.Forms.CheckBox + Friend WithEvents chkTitle As System.Windows.Forms.CheckBox + +End Class diff --git a/Addons/scraper.TVDB.Poster/frmInfoSettingsHolder.resx b/Addons/scraper.TVDB.Poster/frmInfoSettingsHolder.resx new file mode 100644 index 0000000..1a3b6b2 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/frmInfoSettingsHolder.resx @@ -0,0 +1,193 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/frmInfoSettingsHolder.vb b/Addons/scraper.TVDB.Poster/frmInfoSettingsHolder.vb new file mode 100644 index 0000000..21a3d0b --- /dev/null +++ b/Addons/scraper.TVDB.Poster/frmInfoSettingsHolder.vb @@ -0,0 +1,237 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCertification_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCertification.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCrew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkDirector_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDirector.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFullCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFullCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFullCrew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFullCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + + Me.chkProducers.Enabled = Me.chkFullCrew.Checked + Me.chkMusicBy.Enabled = Me.chkFullCrew.Checked + Me.chkCrew.Enabled = Me.chkFullCrew.Checked + + If Not Me.chkFullCrew.Checked Then + Me.chkProducers.Checked = False + Me.chkMusicBy.Checked = False + Me.chkCrew.Checked = False + End If + End Sub + + Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMusicBy_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMusicBy.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBPlot.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPlot.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkProducers_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkProducers.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTop250_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTop250.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkWriters_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkWriters.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.chkOFDBGenre.Text = Master.eLang.GetString(1, "Use OFDB Genre") + Me.chkOFDBPlot.Text = Master.eLang.GetString(2, "Use OFDB Plot") + Me.chkOFDBOutline.Text = Master.eLang.GetString(3, "Use OFDB Outline") + Me.chkOFDBTitle.Text = Master.eLang.GetString(4, "Use OFDB Title") + Me.Label18.Text = Master.eLang.GetString(5, "IMDB Mirror:") + Me.gbOptions.Text = Master.eLang.GetString(6, "Scraper Fields - Scraper specific") + Me.chkCrew.Text = Master.eLang.GetString(391, "Other Crew", True) + Me.chkMusicBy.Text = Master.eLang.GetString(392, "Music By", True) + Me.chkProducers.Text = Master.eLang.GetString(393, "Producers", True) + Me.chkWriters.Text = Master.eLang.GetString(394, "Writers", True) + Me.chkStudio.Text = Master.eLang.GetString(395, "Studio", True) + Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime", True) + Me.chkPlot.Text = Master.eLang.GetString(65, "Plot", True) + Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline", True) + Me.chkGenre.Text = Master.eLang.GetString(20, "Genres", True) + Me.chkDirector.Text = Master.eLang.GetString(62, "Director", True) + Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline", True) + Me.chkCast.Text = Master.eLang.GetString(398, "Cast", True) + Me.chkVotes.Text = Master.eLang.GetString(399, "Votes", True) + Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer", True) + Me.chkRating.Text = Master.eLang.GetString(400, "Rating", True) + Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date", True) + Me.chkMPAA.Text = Master.eLang.GetString(401, "MPAA", True) + Me.chkYear.Text = Master.eLang.GetString(278, "Year", True) + Me.chkTitle.Text = Master.eLang.GetString(21, "Title", True) + Me.chkCertification.Text = Master.eLang.GetString(722, "Certification", True) + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + Me.chkCountry.Text = Master.eLang.GetString(301, "Country", True) + Me.chkFullCast.Text = Master.eLang.GetString(512, "Scrape Full Cast", True) + Me.chkFullCrew.Text = Master.eLang.GetString(513, "Scrape Full Crew", True) + Me.chkTop250.Text = Master.eLang.GetString(868, "Top250", True) + Me.GroupBox30.Text = Master.eLang.GetString(106, "IMDB") + Me.GroupBox15.Text = Master.eLang.GetString(107, "OFDB (German)") + End Sub + + Private Sub txtIMDBURL_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtIMDBURL.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/frmMediaSettingsHolder.Designer.vb b/Addons/scraper.TVDB.Poster/frmMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..2c09e78 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/frmMediaSettingsHolder.Designer.vb @@ -0,0 +1,524 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMediaSettingsHolder)) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.cbActorThumbsSize = New System.Windows.Forms.ComboBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.cbManualETSize = New System.Windows.Forms.ComboBox() + Me.grpSaveFanart = New System.Windows.Forms.GroupBox() + Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() + Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkUseMPDB = New System.Windows.Forms.CheckBox() + Me.chkUseTMDB = New System.Windows.Forms.CheckBox() + Me.chkUseIMPA = New System.Windows.Forms.CheckBox() + Me.chkScrapePoster = New System.Windows.Forms.CheckBox() + Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.txtTimeout = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() + Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() + Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.grpSaveFanart.SuspendLayout() + Me.GroupBox9.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.GroupBox3) + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Panel2) + Me.pnlSettings.Location = New System.Drawing.Point(12, 4) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 94 + Me.PictureBox1.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.GroupBox6) + Me.GroupBox3.Controls.Add(Me.GroupBox4) + Me.GroupBox3.Controls.Add(Me.grpSaveFanart) + Me.GroupBox3.Controls.Add(Me.GroupBox9) + Me.GroupBox3.Controls.Add(Me.chkScrapePoster) + Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(15, 31) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(587, 177) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Images" + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.cbActorThumbsSize) + Me.GroupBox6.Location = New System.Drawing.Point(374, 98) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(160, 73) + Me.GroupBox6.TabIndex = 5 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Actor Thumbs Size:" + ' + 'cbActorThumbsSize + ' + Me.cbActorThumbsSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbActorThumbsSize.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbActorThumbsSize.FormattingEnabled = True + Me.cbActorThumbsSize.Items.AddRange(New Object() {"SY275_SX400", "SY720_SX1080", "SY1080_SX1920"}) + Me.cbActorThumbsSize.Location = New System.Drawing.Point(21, 35) + Me.cbActorThumbsSize.Name = "cbActorThumbsSize" + Me.cbActorThumbsSize.Size = New System.Drawing.Size(121, 21) + Me.cbActorThumbsSize.TabIndex = 0 + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.cbManualETSize) + Me.GroupBox4.Location = New System.Drawing.Point(374, 11) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(160, 80) + Me.GroupBox4.TabIndex = 4 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "TMDB Extrathumbs Size:" + ' + 'cbManualETSize + ' + Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbManualETSize.Enabled = False + Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbManualETSize.FormattingEnabled = True + Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) + Me.cbManualETSize.Location = New System.Drawing.Point(21, 35) + Me.cbManualETSize.Name = "cbManualETSize" + Me.cbManualETSize.Size = New System.Drawing.Size(121, 21) + Me.cbManualETSize.TabIndex = 0 + ' + 'grpSaveFanart + ' + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) + Me.grpSaveFanart.Enabled = False + Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) + Me.grpSaveFanart.Name = "grpSaveFanart" + Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) + Me.grpSaveFanart.TabIndex = 2 + Me.grpSaveFanart.TabStop = False + Me.grpSaveFanart.Text = "Save Fanart In:" + ' + 'optFanartFolderExtraFanart + ' + Me.optFanartFolderExtraFanart.AutoSize = True + Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) + Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" + Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) + Me.optFanartFolderExtraFanart.TabIndex = 1 + Me.optFanartFolderExtraFanart.TabStop = True + Me.optFanartFolderExtraFanart.Text = "\extrafanart" + Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True + ' + 'optFanartFolderExtraThumbs + ' + Me.optFanartFolderExtraThumbs.AutoSize = True + Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) + Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" + Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) + Me.optFanartFolderExtraThumbs.TabIndex = 0 + Me.optFanartFolderExtraThumbs.TabStop = True + Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" + Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkUseMPDB) + Me.GroupBox9.Controls.Add(Me.chkUseTMDB) + Me.GroupBox9.Controls.Add(Me.chkUseIMPA) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(165, 11) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(160, 80) + Me.GroupBox9.TabIndex = 3 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Get Images From:" + ' + 'chkUseMPDB + ' + Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) + Me.chkUseMPDB.Name = "chkUseMPDB" + Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) + Me.chkUseMPDB.TabIndex = 2 + Me.chkUseMPDB.Text = "MoviePosterDB.com" + Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.UseVisualStyleBackColor = True + ' + 'chkUseTMDB + ' + Me.chkUseTMDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseTMDB.Location = New System.Drawing.Point(6, 18) + Me.chkUseTMDB.Name = "chkUseTMDB" + Me.chkUseTMDB.Size = New System.Drawing.Size(149, 19) + Me.chkUseTMDB.TabIndex = 0 + Me.chkUseTMDB.Text = "themoviedb.org" + Me.chkUseTMDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseTMDB.UseVisualStyleBackColor = True + ' + 'chkUseIMPA + ' + Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) + Me.chkUseIMPA.Name = "chkUseIMPA" + Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) + Me.chkUseIMPA.TabIndex = 1 + Me.chkUseIMPA.Text = "IMPAwards.com" + Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.UseVisualStyleBackColor = True + ' + 'chkScrapePoster + ' + Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) + Me.chkScrapePoster.Name = "chkScrapePoster" + Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) + Me.chkScrapePoster.TabIndex = 0 + Me.chkScrapePoster.Text = "Get Posters" + Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.UseVisualStyleBackColor = True + ' + 'chkScrapeFanart + ' + Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) + Me.chkScrapeFanart.Name = "chkScrapeFanart" + Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) + Me.chkScrapeFanart.TabIndex = 1 + Me.chkScrapeFanart.Text = "Get Fanart" + Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.GroupBox5) + Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox1.Controls.Add(Me.Label23) + Me.GroupBox1.Controls.Add(Me.txtTimeout) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(15, 214) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(587, 112) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Trailers" + Me.GroupBox1.UseCompatibleTextRendering = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) + Me.GroupBox5.Controls.Add(Me.Label2) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) + Me.GroupBox5.Location = New System.Drawing.Point(374, 12) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(161, 94) + Me.GroupBox5.TabIndex = 4 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Youtube/TMDB Trailer:" + ' + 'cbTrailerTMDBPref + ' + Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerTMDBPref.Enabled = False + Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTrailerTMDBPref.FormattingEnabled = True + Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) + Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" + Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) + Me.cbTrailerTMDBPref.TabIndex = 1 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label2.Location = New System.Drawing.Point(26, 26) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(111, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Preferred Language:" + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label23.Location = New System.Drawing.Point(21, 43) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(51, 13) + Me.Label23.TabIndex = 1 + Me.Label23.Text = "Timeout:" + ' + 'txtTimeout + ' + Me.txtTimeout.Enabled = False + Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTimeout.Location = New System.Drawing.Point(82, 39) + Me.txtTimeout.Name = "txtTimeout" + Me.txtTimeout.Size = New System.Drawing.Size(50, 22) + Me.txtTimeout.TabIndex = 2 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) + Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(165, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(161, 94) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Supported Sites:" + ' + 'chkTrailerTMDBXBMC + ' + Me.chkTrailerTMDBXBMC.AutoSize = True + Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) + Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" + Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) + Me.chkTrailerTMDBXBMC.TabIndex = 1 + Me.chkTrailerTMDBXBMC.Text = "XBMC Format" + Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True + ' + 'chkTrailerIMDB + ' + Me.chkTrailerIMDB.AutoSize = True + Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) + Me.chkTrailerIMDB.Name = "chkTrailerIMDB" + Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) + Me.chkTrailerIMDB.TabIndex = 2 + Me.chkTrailerIMDB.Text = "IMDB" + Me.chkTrailerIMDB.UseVisualStyleBackColor = True + ' + 'chkTrailerTMDB + ' + Me.chkTrailerTMDB.AutoSize = True + Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) + Me.chkTrailerTMDB.Name = "chkTrailerTMDB" + Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) + Me.chkTrailerTMDB.TabIndex = 0 + Me.chkTrailerTMDB.Text = "Youtube/TMDB" + Me.chkTrailerTMDB.UseVisualStyleBackColor = True + ' + 'Panel2 + ' + Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Controls.Add(Me.btnDown) + Me.Panel2.Controls.Add(Me.btnUp) + Me.Panel2.Controls.Add(Me.cbEnabled) + Me.Panel2.Location = New System.Drawing.Point(0, 0) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(1125, 25) + Me.Panel2.TabIndex = 0 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(500, 7) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 12) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'frmMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.grpSaveFanart.ResumeLayout(False) + Me.grpSaveFanart.PerformLayout() + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents chkScrapeFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkScrapePoster As System.Windows.Forms.CheckBox + Friend WithEvents chkDownloadTrailer As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox9 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseMPDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMPA As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Panel2 As System.Windows.Forms.Panel + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Label23 As System.Windows.Forms.Label + Friend WithEvents txtTimeout As System.Windows.Forms.TextBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents grpSaveFanart As System.Windows.Forms.GroupBox + Friend WithEvents optFanartFolderExtraFanart As System.Windows.Forms.RadioButton + Friend WithEvents optFanartFolderExtraThumbs As System.Windows.Forms.RadioButton + Friend WithEvents chkTrailerIMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDBXBMC As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents cbManualETSize As System.Windows.Forms.ComboBox + Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox + Friend WithEvents cbTrailerTMDBPref As System.Windows.Forms.ComboBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents cbActorThumbsSize As System.Windows.Forms.ComboBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/frmMediaSettingsHolder.resx b/Addons/scraper.TVDB.Poster/frmMediaSettingsHolder.resx new file mode 100644 index 0000000..023cf14 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/frmMediaSettingsHolder.resx @@ -0,0 +1,237 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + 6bKz54D4Hdc/dStsxIkAAAAAAElFTkSuQmCC +</value> + </data> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/frmMediaSettingsHolder.vb b/Addons/scraper.TVDB.Poster/frmMediaSettingsHolder.vb new file mode 100644 index 0000000..401240a --- /dev/null +++ b/Addons/scraper.TVDB.Poster/frmMediaSettingsHolder.vb @@ -0,0 +1,172 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order + 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order - 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Sub CheckTrailer() + Me.txtTimeout.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerIMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDBXBMC.Enabled = Me.chkDownloadTrailer.Checked + If Not Me.chkDownloadTrailer.Checked Then + Me.txtTimeout.Text = "2" + Me.chkTrailerTMDB.Checked = False + Me.chkTrailerIMDB.Checked = False + Me.chkTrailerTMDBXBMC.Checked = False + End If + End Sub + + Private Sub chkDownloadTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDownloadTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + CheckTrailer() + End Sub + + Private Sub chkTrailerTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDB.CheckedChanged + chkTrailerTMDBXBMC.Enabled = chkTrailerTMDB.Checked + cbTrailerTMDBPref.Enabled = chkTrailerTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerIMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerIMDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerTMDBXBMC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDBXBMC.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkScrapeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapeFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + grpSaveFanart.Enabled = chkScrapeFanart.Checked + End Sub + + Private Sub chkScrapePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapePoster.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMPA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseIMPA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseMPDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseMPDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseTMDB.CheckedChanged + cbManualETSize.Enabled = chkUseTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Sub SetUp() + Me.txtTimeout.Text = Master.eSettings.TrailerTimeout.ToString + Me.Label23.Text = Master.eLang.GetString(7, "Timeout:") + Me.GroupBox2.Text = Master.eLang.GetString(8, "Supported Sites:") + Me.GroupBox9.Text = Master.eLang.GetString(9, "Get Images From:") + Me.grpSaveFanart.Text = Master.eLang.GetString(8001, "Save Fanart In:") + Me.chkDownloadTrailer.Text = Master.eLang.GetString(529, "Enable Trailer Support", True) + Me.Label3.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkScrapePoster.Text = Master.eLang.GetString(101, "Get Posters") + Me.chkScrapeFanart.Text = Master.eLang.GetString(102, "Get Fanart") + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + Me.GroupBox3.Text = Master.eLang.GetString(497, "Images", True) + Me.GroupBox4.Text = Master.eLang.GetString(108, "TMDB Extrathumbs Size:") + Me.GroupBox1.Text = Master.eLang.GetString(109, "Trailers") + Me.GroupBox5.Text = Master.eLang.GetString(110, "Youtube/TMDB Trailer:") + Me.chkTrailerTMDBXBMC.Text = Master.eLang.GetString(111, "XBMC Format") + Me.Label2.Text = Master.eLang.GetString(112, "Preferred language") + Me.grpSaveFanart.Text = Master.eLang.GetString(113, "Save Fanart In:") + End Sub + + Private Sub txtTimeout_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTimeout.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraThumbs_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraThumbs.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbManualETSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbManualETSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbActorThumbsSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbActorThumbsSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTrailerTMDBPref_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbTrailerTMDBPref.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/frmTVInfoSettingsHolder.Designer.vb b/Addons/scraper.TVDB.Poster/frmTVInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..4a8cc4e --- /dev/null +++ b/Addons/scraper.TVDB.Poster/frmTVInfoSettingsHolder.Designer.vb @@ -0,0 +1,169 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTVInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTVInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'frmTVInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTVInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.TVDB.Poster/frmTVInfoSettingsHolder.resx b/Addons/scraper.TVDB.Poster/frmTVInfoSettingsHolder.resx new file mode 100644 index 0000000..0950d0f --- /dev/null +++ b/Addons/scraper.TVDB.Poster/frmTVInfoSettingsHolder.resx @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/frmTVInfoSettingsHolder.vb b/Addons/scraper.TVDB.Poster/frmTVInfoSettingsHolder.vb new file mode 100644 index 0000000..98761ce --- /dev/null +++ b/Addons/scraper.TVDB.Poster/frmTVInfoSettingsHolder.vb @@ -0,0 +1,80 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTVInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + orderChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + 'Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/frmTVMediaSettingsHolder.Designer.vb b/Addons/scraper.TVDB.Poster/frmTVMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..f5cb735 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/frmTVMediaSettingsHolder.Designer.vb @@ -0,0 +1,170 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTVMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTVMediaSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.InitialImage = CType(resources.GetObject("PictureBox1.InitialImage"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'frmTVMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTVMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.TVDB.Poster/frmTVMediaSettingsHolder.resx b/Addons/scraper.TVDB.Poster/frmTVMediaSettingsHolder.resx new file mode 100644 index 0000000..d47391f --- /dev/null +++ b/Addons/scraper.TVDB.Poster/frmTVMediaSettingsHolder.resx @@ -0,0 +1,197 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.InitialImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEAAA + CxABrSO9dQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/frmTVMediaSettingsHolder.vb b/Addons/scraper.TVDB.Poster/frmTVMediaSettingsHolder.vb new file mode 100644 index 0000000..06928ef --- /dev/null +++ b/Addons/scraper.TVDB.Poster/frmTVMediaSettingsHolder.vb @@ -0,0 +1,80 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTVMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + orderChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + 'Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/packages.config b/Addons/scraper.TVDB.Poster/packages.config new file mode 100644 index 0000000..053d0bc6 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/packages.config @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="SharpZipLib" version="0.86.0" /> + <package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net35" /> +</packages> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/scraper.TVDB.Poster.vbproj b/Addons/scraper.TVDB.Poster/scraper.TVDB.Poster.vbproj new file mode 100644 index 0000000..91b455c --- /dev/null +++ b/Addons/scraper.TVDB.Poster/scraper.TVDB.Poster.vbproj @@ -0,0 +1,342 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{3FAF50AA-AD5F-455A-8711-6D791C457F0F}</ProjectGuid> + <OutputType>Library</OutputType> + <RootNamespace>EmberScraperModule</RootNamespace> + <AssemblyName>scraper.TVDB.Poster</AssemblyName> + <FileAlignment>512</FileAlignment> + <MyType>Windows</MyType> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <OptionExplicit>On</OptionExplicit> + <OptionCompare>Binary</OptionCompare> + <OptionStrict>On</OptionStrict> + <OptionInfer>On</OptionInfer> + <FileUpgradeFlags> + </FileUpgradeFlags> + <OldToolsVersion>3.5</OldToolsVersion> + <UpgradeBackupLocation /> + <PublishUrl>publish\</PublishUrl> + <Install>true</Install> + <InstallFrom>Disk</InstallFrom> + <UpdateEnabled>false</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>false</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> + <RestorePackages>true</RestorePackages> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> + <DebugSymbols>true</DebugSymbols> + <DefineDebug>true</DefineDebug> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Dev\Modules\</OutputPath> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Deploy\Modules\</OutputPath> + <Optimize>true</Optimize> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <ItemGroup> + <Reference Include="ICSharpCode.SharpZipLib"> + <HintPath>..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Data.SQLite"> + <HintPath>..\..\packages\System.Data.SQLite.1.0.84.0\lib\net20\System.Data.SQLite.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="System.Data.SQLite.Linq"> + <HintPath>..\..\packages\System.Data.SQLite.1.0.84.0\lib\net20\System.Data.SQLite.Linq.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Import Include="Microsoft.VisualBasic" /> + <Import Include="System" /> + <Import Include="System.Collections" /> + <Import Include="System.Collections.Generic" /> + <Import Include="System.Diagnostics" /> + <Import Include="System.Drawing" /> + <Import Include="System.Linq" /> + <Import Include="System.Web" /> + <Import Include="System.Windows.Forms" /> + <Import Include="System.Xml.Linq" /> + </ItemGroup> + <ItemGroup> + <Compile Include="frmTVMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmTVMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTVMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmTVInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmTVInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTVInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperTVNativeModule.vb" /> + <Compile Include="Scraper\clsScrapeTrailers.vb" /> + <Compile Include="Scraper\clsScrapeImages.vb" /> + <Compile Include="Scraper\clsScrapeIMDB.vb" /> + <Compile Include="Scraper\clsScrapeIMPA.vb" /> + <Compile Include="Scraper\clsScrapeMPDB.vb" /> + <Compile Include="Scraper\clsScrapeOFDB.vb" /> + <Compile Include="Scraper\clsScrapeTMDB.vb" /> + <Compile Include="Scraper\clsScrapeYouTube.vb" /> + <Compile Include="Scraper\dlgIMDBSearchResults.Designer.vb"> + <DependentUpon>dlgIMDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgIMDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgImgSelect.Designer.vb"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgImgSelect.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailer.Designer.vb"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailer.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.Designer.vb"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="My Project\AssemblyInfo.vb" /> + <Compile Include="My Project\Application.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Application.myapp</DependentUpon> + </Compile> + <Compile Include="My Project\Resources.Designer.vb"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> + <Compile Include="My Project\Settings.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Settings.settings</DependentUpon> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + </Compile> + <Compile Include="frmInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperMovieNativeModule.vb" /> + <Compile Include="TVScraper\clsScrapeTVDB.vb" /> + <Compile Include="TVScraper\dlgTVChangeEp.Designer.vb"> + <DependentUpon>dlgTVChangeEp.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVChangeEp.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVDBSearchResults.Designer.vb"> + <DependentUpon>dlgTVDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVEpisodePoster.Designer.vb"> + <DependentUpon>dlgTVEpisodePoster.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVEpisodePoster.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVImageSelect.Designer.vb"> + <DependentUpon>dlgTVImageSelect.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVImageSelect.vb"> + <SubType>Form</SubType> + </Compile> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="frmTVMediaSettingsHolder.resx"> + <DependentUpon>frmTVMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTVInfoSettingsHolder.resx"> + <DependentUpon>frmTVInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgIMDBSearchResults.resx"> + <DependentUpon>dlgIMDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgImgSelect.resx"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailer.resx"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailerFormat.resx"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmMediaSettingsHolder.resx"> + <DependentUpon>frmMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmInfoSettingsHolder.resx"> + <DependentUpon>frmInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="My Project\Resources.resx"> + <Generator>VbMyResourcesResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.vb</LastGenOutput> + <CustomToolNamespace>My.Resources</CustomToolNamespace> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVChangeEp.resx"> + <DependentUpon>dlgTVChangeEp.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVDBSearchResults.resx"> + <DependentUpon>dlgTVDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVEpisodePoster.resx"> + <DependentUpon>dlgTVEpisodePoster.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVImageSelect.resx"> + <DependentUpon>dlgTVImageSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <None Include="My Project\Application.myapp"> + <Generator>MyApplicationCodeGenerator</Generator> + <LastGenOutput>Application.Designer.vb</LastGenOutput> + </None> + <None Include="My Project\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <CustomToolNamespace>My</CustomToolNamespace> + <LastGenOutput>Settings.Designer.vb</LastGenOutput> + </None> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\EmberAPI\EmberAPI.vbproj"> + <Project>{208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}</Project> + <Name>EmberAPI</Name> + <Private>False</Private> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="Langs\scraper.EmberCore.Debug_%28db_DB%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.English_%28en_US%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.English_%28en_US%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.German_%28de_DE%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.German_%28de_DE%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.Norwegian_%28no_NO%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.Norwegian_%28no_NO%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="x64\SQLite.Interop.dll"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + <Content Include="x86\SQLite.Interop.dll"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <PropertyGroup> + <PreBuildEvent> + </PreBuildEvent> + </PropertyGroup> + <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> +</Project> \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/scraperMovieNativeModule.vb b/Addons/scraper.TVDB.Poster/scraperMovieNativeModule.vb new file mode 100644 index 0000000..6889071 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/scraperMovieNativeModule.vb @@ -0,0 +1,702 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO + +Imports EmberAPI + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberNativeScraperModule + Implements Interfaces.EmberMovieScraperModule + + +#Region "Fields" + + Public Shared ConfigOptions As New Structures.ScrapeOptions + Public Shared ConfigScrapeModifier As New Structures.ScrapeModifier + Public Shared _AssemblyName As String + + Private dFImgSelect As dlgImgSelect = Nothing + + ''' <summary> + ''' Scraping Here + ''' </summary> + ''' <remarks></remarks> + Private IMDB As New IMDB.Scraper + Private MySettings As New _MySettings + Private _Name As String = "Ember Native Movie Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmInfoSettingsHolder + Private _setupPost As frmMediaSettingsHolder + +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberMovieScraperModule.ModuleSettingsChanged + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsScraper + Get + Return True + End Get + End Property + + ReadOnly Property ModuleName() As String Implements Interfaces.EmberMovieScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberMovieScraperModule.ModuleVersion + Get + Return FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Property PostScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Property ScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean Implements Interfaces.EmberMovieScraperModule.QueryPostScraperCapabilities + Select Case cap + Case Enums.PostScraperCapabilities.Fanart + If MySettings.UseTMDB Then Return True + Case Enums.PostScraperCapabilities.Poster + If MySettings.UseIMPA OrElse MySettings.UseMPDB OrElse MySettings.UseTMDB Then Return True + Case Enums.PostScraperCapabilities.Trailer + If MySettings.DownloadTrailers Then Return True + End Select + Return False + End Function + + Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.DownloadTrailer + Using dTrailer As New dlgTrailer + dTrailer.IMDBURL = MySettings.IMDBURL + sURL = dTrailer.ShowDialog(DBMovie.Movie.IMDBID, DBMovie.Filename) + End Using + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef studio As List(Of String)) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.GetMovieStudio + Dim IMDB As New IMDB.Scraper + IMDB.UseOFDBTitle = MySettings.UseOFDBTitle + IMDB.UseOFDBOutline = MySettings.UseOFDBOutline + IMDB.UseOFDBPlot = MySettings.UseOFDBPlot + IMDB.UseOFDBGenre = MySettings.UseOFDBGenre + IMDB.IMDBURL = MySettings.IMDBURL + studio = IMDB.GetMovieStudios(DBMovie.Movie.IMDBID) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + + Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberMovieScraperModule.Init + _AssemblyName = sAssemblyName + LoadSettings() + End Sub + + Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupPostScraper + Dim Spanel As New Containers.SettingsPanel + _setupPost = New frmMediaSettingsHolder + LoadSettings() + _setupPost.cbEnabled.Checked = _PostScraperEnabled + _setupPost.chkTrailerIMDB.Checked = MySettings.UseIMDBTrailer + _setupPost.chkTrailerTMDB.Checked = MySettings.UseTMDBTrailer + _setupPost.cbTrailerTMDBPref.Text = MySettings.UseTMDBTrailerPref + _setupPost.chkTrailerTMDBXBMC.Checked = MySettings.UseTMDBTrailerXBMC + _setupPost.chkScrapePoster.Checked = ConfigScrapeModifier.Poster + _setupPost.chkScrapeFanart.Checked = ConfigScrapeModifier.Fanart + _setupPost.chkUseTMDB.Checked = MySettings.UseTMDB + _setupPost.chkUseIMPA.Checked = MySettings.UseIMPA + _setupPost.chkUseMPDB.Checked = MySettings.UseMPDB + _setupPost.cbManualETSize.Text = MySettings.ManualETSize + _setupPost.cbActorThumbsSize.Text = MySettings.ActorThumbsSize + _setupPost.txtTimeout.Text = MySettings.TrailerTimeout.ToString + _setupPost.chkDownloadTrailer.Checked = MySettings.DownloadTrailers + _setupPost.CheckTrailer() + _setupPost.orderChanged() + Spanel.Name = String.Concat(Me._Name, "PostScraper") + Spanel.Text = Master.eLang.GetString(104, "Ember Native Movie Scrapers") + Spanel.Prefix = "NativeMovieMedia_" + Spanel.Order = 110 + Spanel.Parent = "pnlMovieMedia" + Spanel.Type = Master.eLang.GetString(36, "Movies", True) + Spanel.ImageIndex = If(Me._PostScraperEnabled, 9, 10) + Spanel.Panel = Me._setupPost.pnlSettings + + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + Return Spanel + End Function + Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmInfoSettingsHolder + LoadSettings() + _setup.cbEnabled.Checked = _ScraperEnabled + _setup.chkTitle.Checked = ConfigOptions.bTitle + _setup.chkYear.Checked = ConfigOptions.bYear + _setup.chkMPAA.Checked = ConfigOptions.bMPAA + _setup.chkRelease.Checked = ConfigOptions.bRelease + _setup.chkRuntime.Checked = ConfigOptions.bRuntime + _setup.chkRating.Checked = ConfigOptions.bRating + _setup.chkVotes.Checked = ConfigOptions.bVotes + _setup.chkStudio.Checked = ConfigOptions.bStudio + _setup.chkTagline.Checked = ConfigOptions.bTagline + _setup.chkOutline.Checked = ConfigOptions.bOutline + _setup.chkPlot.Checked = ConfigOptions.bPlot + _setup.chkCast.Checked = ConfigOptions.bCast + _setup.chkDirector.Checked = ConfigOptions.bDirector + _setup.chkWriters.Checked = ConfigOptions.bWriters + _setup.chkProducers.Checked = ConfigOptions.bProducers + _setup.chkGenre.Checked = ConfigOptions.bGenre + _setup.chkTrailer.Checked = ConfigOptions.bTrailer + _setup.chkMusicBy.Checked = ConfigOptions.bMusicBy + _setup.chkCrew.Checked = ConfigOptions.bOtherCrew + _setup.chkCountry.Checked = ConfigOptions.bCountry + _setup.chkTop250.Checked = ConfigOptions.bTop250 + _setup.chkCertification.Checked = ConfigOptions.bCert + _setup.chkOFDBTitle.Checked = MySettings.UseOFDBTitle + _setup.chkOFDBOutline.Checked = MySettings.UseOFDBOutline + _setup.chkOFDBPlot.Checked = MySettings.UseOFDBPlot + _setup.chkOFDBGenre.Checked = MySettings.UseOFDBGenre + _setup.chkFullCast.Checked = ConfigOptions.bFullCast + _setup.chkFullCrew.Checked = ConfigOptions.bFullCrew + + If String.IsNullOrEmpty(MySettings.IMDBURL) Then + MySettings.IMDBURL = "akas.imdb.com" + End If + _setup.txtIMDBURL.Text = MySettings.IMDBURL + _setup.orderChanged() + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(104, "Ember Native Movie Scrapers") + SPanel.Prefix = "NativeMovieInfo_" + SPanel.Order = 110 + SPanel.Parent = "pnlMovieData" + SPanel.Type = Master.eLang.GetString(36, "Movies", True) + SPanel.ImageIndex = If(_ScraperEnabled, 9, 10) + SPanel.Panel = _setup.pnlSettings + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + Return SPanel + End Function + Sub LoadSettings() + ConfigOptions.bTitle = AdvancedSettings.GetBooleanSetting("DoTitle", True) + ConfigOptions.bYear = AdvancedSettings.GetBooleanSetting("DoYear", True) + ConfigOptions.bMPAA = AdvancedSettings.GetBooleanSetting("DoMPAA", True) + ConfigOptions.bRelease = AdvancedSettings.GetBooleanSetting("DoRelease", True) + ConfigOptions.bRuntime = AdvancedSettings.GetBooleanSetting("DoRuntime", True) + ConfigOptions.bRating = AdvancedSettings.GetBooleanSetting("DoRating", True) + ConfigOptions.bVotes = AdvancedSettings.GetBooleanSetting("DoVotes", True) + ConfigOptions.bStudio = AdvancedSettings.GetBooleanSetting("DoStudio", True) + ConfigOptions.bTagline = AdvancedSettings.GetBooleanSetting("DoTagline", True) + ConfigOptions.bOutline = AdvancedSettings.GetBooleanSetting("DoOutline", True) + ConfigOptions.bPlot = AdvancedSettings.GetBooleanSetting("DoPlot", True) + ConfigOptions.bCast = AdvancedSettings.GetBooleanSetting("DoCast", True) + ConfigOptions.bDirector = AdvancedSettings.GetBooleanSetting("DoDirector", True) + ConfigOptions.bWriters = AdvancedSettings.GetBooleanSetting("DoWriters", True) + ConfigOptions.bProducers = AdvancedSettings.GetBooleanSetting("DoProducers", True) + ConfigOptions.bGenre = AdvancedSettings.GetBooleanSetting("DoGenres", True) + ConfigOptions.bTrailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + ConfigOptions.bMusicBy = AdvancedSettings.GetBooleanSetting("DoMusic", True) + ConfigOptions.bOtherCrew = AdvancedSettings.GetBooleanSetting("DoOtherCrews", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("DoFullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("DoFullCrews", True) + ConfigOptions.bTop250 = AdvancedSettings.GetBooleanSetting("DoTop250", True) + ConfigOptions.bCountry = AdvancedSettings.GetBooleanSetting("DoCountry", True) + ConfigOptions.bCert = AdvancedSettings.GetBooleanSetting("DoCert", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("FullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("FullCrew", True) + + MySettings.IMDBURL = AdvancedSettings.GetSetting("IMDBURL", "akas.imdb.com") + MySettings.UseOFDBTitle = AdvancedSettings.GetBooleanSetting("UseOFDBTitle", False) + MySettings.UseOFDBOutline = AdvancedSettings.GetBooleanSetting("UseOFDBOutline", False) + MySettings.UseOFDBPlot = AdvancedSettings.GetBooleanSetting("UseOFDBPlot", False) + MySettings.UseOFDBGenre = AdvancedSettings.GetBooleanSetting("UseOFDBGenre", False) + MySettings.DownloadTrailers = AdvancedSettings.GetBooleanSetting("DownloadTraliers", False) + + MySettings.TrailerTimeout = Convert.ToInt32(AdvancedSettings.GetSetting("TrailerTimeout", "10")) + MySettings.UseIMPA = AdvancedSettings.GetBooleanSetting("UseIMPA", False) + MySettings.UseMPDB = AdvancedSettings.GetBooleanSetting("UseMPDB", False) + MySettings.UseTMDB = AdvancedSettings.GetBooleanSetting("UseTMDB", True) + MySettings.UseIMDBTrailer = AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", True) + MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) + MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) + MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + MySettings.ActorThumbsSize = Convert.ToString(AdvancedSettings.GetSetting("ActorThumbsSize", "SY275_SX400")) + MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) + + ConfigScrapeModifier.DoSearch = True + ConfigScrapeModifier.Meta = True + ConfigScrapeModifier.NFO = True + ConfigScrapeModifier.Extra = True + ConfigScrapeModifier.Actors = True + + ConfigScrapeModifier.Poster = AdvancedSettings.GetBooleanSetting("DoPoster", True) + ConfigScrapeModifier.Fanart = AdvancedSettings.GetBooleanSetting("DoFanart", True) + ConfigScrapeModifier.Trailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + End Sub + + Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.PostScraper + 'LoadSettings() + Dim Poster As New Images + Dim Fanart As New Images + Dim pResults As Containers.ImgResult + Dim fResults As Containers.ImgResult + Dim tURL As String = String.Empty + Dim Trailer As New Trailers + LoadSettings() + Dim saveModifier As Structures.ScrapeModifier = Master.GlobalScrapeMod + Master.GlobalScrapeMod = Functions.ScrapeModifierAndAlso(Master.GlobalScrapeMod, ConfigScrapeModifier) + + Trailer.IMDBURL = MySettings.IMDBURL + Dim doSave As Boolean = False + If Master.GlobalScrapeMod.Poster AndAlso (MySettings.UseIMPA OrElse MySettings.UseMPDB OrElse MySettings.UseTMDB) Then + Poster.Clear() + If Poster.IsAllowedToDownload(DBMovie, Enums.ImageType.Posters) Then + pResults = New Containers.ImgResult + If ScrapeImages.GetPreferredImage(Poster, DBMovie.Movie.IMDBID, Enums.ImageType.Posters, pResults, DBMovie.Filename, False, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Poster.Image) Then + pResults.ImagePath = Poster.SaveAsPoster(DBMovie) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(76, "A poster of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size")) + Using dImgSelect As New dlgImgSelect + dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Posters) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + End Using + End If + End If + End If + End If + Dim didEts As Boolean + If Master.GlobalScrapeMod.Fanart AndAlso MySettings.UseTMDB Then + Fanart.Clear() + If Fanart.IsAllowedToDownload(DBMovie, Enums.ImageType.Fanart) Then + fResults = New Containers.ImgResult + didEts = True + If ScrapeImages.GetPreferredImage(Fanart, DBMovie.Movie.IMDBID, Enums.ImageType.Fanart, fResults, DBMovie.Filename, Master.GlobalScrapeMod.Extra, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Fanart.Image) Then + fResults.ImagePath = Fanart.SaveAsFanart(DBMovie) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) ' + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(78, "Fanart of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size:")) + + Using dImgSelect As New dlgImgSelect + dImgSelect.IMDBURL = MySettings.IMDBURL + fResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Fanart) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + End Using + End If + End If + End If + End If + If Master.GlobalScrapeMod.Trailer AndAlso MySettings.DownloadTrailers Then + tURL = Trailer.DownloadSingleTrailer(DBMovie.Filename, DBMovie.Movie.IMDBID, DBMovie.isSingle, DBMovie.Movie.Trailer) + If Not String.IsNullOrEmpty(tURL) Then + If tURL.Substring(0, 22) = "http://www.youtube.com" Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + DBMovie.Movie.Trailer = Replace(tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + DBMovie.Movie.Trailer = tURL + End If + ElseIf tURL.Substring(0, 7) = "http://" Then + DBMovie.Movie.Trailer = tURL + Else + DBMovie.TrailerPath = tURL + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.TrailerItem, True) + End If + End If + End If + If Master.GlobalScrapeMod.Extra Then + If Master.eSettings.AutoET AndAlso DBMovie.isSingle Then + Try + ScrapeImages.GetPreferredFAasET(DBMovie.Movie.IMDBID, DBMovie.Filename) + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.ThumbsItem, True) + Catch ex As Exception + End Try + End If + End If + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then + For Each act As MediaContainers.Person In DBMovie.Movie.Actors + Dim img As New Images + img.FromWeb(act.Thumb) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If + Next + End If + Master.GlobalScrapeMod = saveModifier + Return New Interfaces.ModuleResult With {.breakChain = False, .BoolProperty = didEts} + End Function + + Sub SaveSettings() + AdvancedSettings.SetBooleanSetting("DoFullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("DoFullCrews", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DoTitle", ConfigOptions.bTitle) + AdvancedSettings.SetBooleanSetting("DoYear", ConfigOptions.bYear) + AdvancedSettings.SetBooleanSetting("DoMPAA", ConfigOptions.bMPAA) + AdvancedSettings.SetBooleanSetting("DoRelease", ConfigOptions.bRelease) + AdvancedSettings.SetBooleanSetting("DoRuntime", ConfigOptions.bRuntime) + AdvancedSettings.SetBooleanSetting("DoRating", ConfigOptions.bRating) + AdvancedSettings.SetBooleanSetting("DoVotes", ConfigOptions.bVotes) + AdvancedSettings.SetBooleanSetting("DoStudio", ConfigOptions.bStudio) + AdvancedSettings.SetBooleanSetting("DoTagline", ConfigOptions.bTagline) + AdvancedSettings.SetBooleanSetting("DoOutline", ConfigOptions.bOutline) + AdvancedSettings.SetBooleanSetting("DoPlot", ConfigOptions.bPlot) + AdvancedSettings.SetBooleanSetting("DoCast", ConfigOptions.bCast) + AdvancedSettings.SetBooleanSetting("DoDirector", ConfigOptions.bDirector) + AdvancedSettings.SetBooleanSetting("DoWriters", ConfigOptions.bWriters) + AdvancedSettings.SetBooleanSetting("DoProducers", ConfigOptions.bProducers) + AdvancedSettings.SetBooleanSetting("DoGenres", ConfigOptions.bGenre) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigOptions.bTrailer) + AdvancedSettings.SetBooleanSetting("DoMusic", ConfigOptions.bMusicBy) + AdvancedSettings.SetBooleanSetting("DoOtherCrews", ConfigOptions.bOtherCrew) + AdvancedSettings.SetBooleanSetting("DoCountry", ConfigOptions.bCountry) + AdvancedSettings.SetBooleanSetting("DoTop250", ConfigOptions.bTop250) + AdvancedSettings.SetBooleanSetting("DoCert", ConfigOptions.bCert) + AdvancedSettings.SetSetting("IMDBURL", MySettings.IMDBURL) + + AdvancedSettings.SetBooleanSetting("FullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("FullCrew", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("UseOFDBTitle", MySettings.UseOFDBTitle) + AdvancedSettings.SetBooleanSetting("UseOFDBOutline", MySettings.UseOFDBOutline) + AdvancedSettings.SetBooleanSetting("UseOFDBPlot", MySettings.UseOFDBPlot) + AdvancedSettings.SetBooleanSetting("UseOFDBGenre", MySettings.UseOFDBGenre) + AdvancedSettings.SetBooleanSetting("DownloadTraliers", MySettings.DownloadTrailers) + + AdvancedSettings.SetSetting("TrailerTimeout", MySettings.TrailerTimeout.ToString) + AdvancedSettings.SetBooleanSetting("UseIMPA", MySettings.UseIMPA) + AdvancedSettings.SetBooleanSetting("UseMPDB", MySettings.UseMPDB) + AdvancedSettings.SetBooleanSetting("UseTMDB", MySettings.UseTMDB) + AdvancedSettings.SetBooleanSetting("UseIMDBTrailer", MySettings.UseIMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailer", MySettings.UseTMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", MySettings.UseTMDBTrailerXBMC) + + AdvancedSettings.SetSetting("ManualETSize", MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("ActorThumbsSize", MySettings.ActorThumbsSize.ToString) + AdvancedSettings.SetSetting("UseTMDBTrailerPref", MySettings.UseTMDBTrailerPref.ToString) + + AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) + AdvancedSettings.SetBooleanSetting("DoFanart", ConfigScrapeModifier.Fanart) + 'AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigScrapeModifier.Trailer) + End Sub + + Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupPostScraper + MySettings.DownloadTrailers = _setupPost.chkDownloadTrailer.Checked + MySettings.UseIMDBTrailer = _setupPost.chkTrailerIMDB.Checked + MySettings.UseTMDBTrailer = _setupPost.chkTrailerTMDB.Checked + MySettings.UseTMDBTrailerXBMC = _setupPost.chkTrailerTMDBXBMC.Checked + MySettings.TrailerTimeout = Convert.ToInt32(_setupPost.txtTimeout.Text) + MySettings.UseTMDB = _setupPost.chkUseTMDB.Checked + MySettings.UseIMPA = _setupPost.chkUseIMPA.Checked + MySettings.UseMPDB = _setupPost.chkUseMPDB.Checked + MySettings.ManualETSize = _setupPost.cbManualETSize.Text + MySettings.ActorThumbsSize = _setupPost.cbActorThumbsSize.Text + MySettings.UseTMDBTrailerPref = _setupPost.cbTrailerTMDBPref.Text + ConfigScrapeModifier.Poster = _setupPost.chkScrapePoster.Checked + ConfigScrapeModifier.Fanart = _setupPost.chkScrapeFanart.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + RemoveHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + _setupPost.Dispose() + End If + End Sub + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupScraper + If Not String.IsNullOrEmpty(_setup.txtIMDBURL.Text) Then + MySettings.IMDBURL = Strings.Replace(_setup.txtIMDBURL.Text, "http://", String.Empty) + Else + MySettings.IMDBURL = "akas.imdb.com" + End If + MySettings.UseOFDBTitle = _setup.chkOFDBTitle.Checked + MySettings.UseOFDBOutline = _setup.chkOFDBOutline.Checked + MySettings.UseOFDBPlot = _setup.chkOFDBPlot.Checked + MySettings.UseOFDBGenre = _setup.chkOFDBGenre.Checked + ConfigOptions.bTitle = _setup.chkTitle.Checked + ConfigOptions.bYear = _setup.chkYear.Checked + ConfigOptions.bMPAA = _setup.chkMPAA.Checked + ConfigOptions.bRelease = _setup.chkRelease.Checked + ConfigOptions.bRuntime = _setup.chkRuntime.Checked + ConfigOptions.bRating = _setup.chkRating.Checked + ConfigOptions.bVotes = _setup.chkVotes.Checked + ConfigOptions.bStudio = _setup.chkStudio.Checked + ConfigOptions.bTagline = _setup.chkTagline.Checked + ConfigOptions.bOutline = _setup.chkOutline.Checked + ConfigOptions.bPlot = _setup.chkPlot.Checked + ConfigOptions.bCast = _setup.chkCast.Checked + ConfigOptions.bDirector = _setup.chkDirector.Checked + ConfigOptions.bWriters = _setup.chkWriters.Checked + ConfigOptions.bProducers = _setup.chkProducers.Checked + ConfigOptions.bGenre = _setup.chkGenre.Checked + ConfigOptions.bTrailer = _setup.chkTrailer.Checked + ConfigOptions.bMusicBy = _setup.chkMusicBy.Checked + ConfigOptions.bOtherCrew = _setup.chkCrew.Checked + ConfigOptions.bCountry = _setup.chkCountry.Checked + ConfigOptions.bTop250 = _setup.chkTop250.Checked + ConfigOptions.bCert = _setup.chkCertification.Checked + ConfigOptions.bFullCrew = _setup.chkFullCrew.Checked + ConfigOptions.bFullCast = _setup.chkFullCast.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + RemoveHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + _setup.Dispose() + End If + End Sub + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.Scraper + 'LoadSettings() + IMDB.IMDBURL = MySettings.IMDBURL + IMDB.UseOFDBTitle = MySettings.UseOFDBTitle + IMDB.UseOFDBOutline = MySettings.UseOFDBOutline + IMDB.UseOFDBPlot = MySettings.UseOFDBPlot + IMDB.UseOFDBGenre = MySettings.UseOFDBGenre + Dim tTitle As String = String.Empty + Dim OldTitle As String = DBMovie.Movie.Title + + If Master.GlobalScrapeMod.NFO AndAlso Not Master.GlobalScrapeMod.DoSearch Then + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + IMDB.GetMovieInfo(DBMovie.Movie.IMDBID, DBMovie.Movie, Options.bFullCrew, Options.bFullCast, False, Options, False) + ElseIf Not ScrapeType = Enums.ScrapeType.SingleScrape Then + DBMovie.Movie = IMDB.GetSearchMovieInfo(DBMovie.Movie.Title, DBMovie, ScrapeType, Options) + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + If ScrapeType = Enums.ScrapeType.SingleScrape AndAlso Master.GlobalScrapeMod.DoSearch _ + AndAlso ModulesManager.Instance.externalScrapersModules.OrderBy(Function(y) y.ScraperOrder).FirstOrDefault(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled).AssemblyName = _AssemblyName Then + DBMovie.Movie.IMDBID = String.Empty + DBMovie.ClearExtras = True + DBMovie.PosterPath = String.Empty + DBMovie.FanartPath = String.Empty + DBMovie.TrailerPath = String.Empty + DBMovie.ExtraPath = String.Empty + DBMovie.SubPath = String.Empty + DBMovie.NfoPath = String.Empty + DBMovie.Movie.Clear() + End If + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + Select Case ScrapeType + Case Enums.ScrapeType.FilterAuto, Enums.ScrapeType.FullAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.UpdateAuto + Return New Interfaces.ModuleResult With {.breakChain = False} + End Select + If ScrapeType = Enums.ScrapeType.SingleScrape Then + Using dSearch As New dlgIMDBSearchResults + dSearch.IMDBURL = MySettings.IMDBURL + Dim tmpTitle As String = DBMovie.Movie.Title + If String.IsNullOrEmpty(tmpTitle) Then + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name, False) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name, False) + Else + tmpTitle = StringUtils.FilterName(If(DBMovie.isSingle, Directory.GetParent(DBMovie.Filename).Name, Path.GetFileNameWithoutExtension(DBMovie.Filename))) + End If + End If + Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) + If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID + End If + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + + Master.currMovie.ClearExtras = True + Master.currMovie.PosterPath = String.Empty + Master.currMovie.FanartPath = String.Empty + Master.currMovie.TrailerPath = String.Empty + Master.currMovie.ExtraPath = String.Empty + Master.currMovie.SubPath = String.Empty + Master.currMovie.NfoPath = String.Empty + + + IMDB.GetMovieInfo(DBMovie.Movie.IMDBID, DBMovie.Movie, filterOptions.bFullCrew, filterOptions.bFullCast, False, filterOptions, False) + End If + Else + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End Using + End If + End If + + If Not String.IsNullOrEmpty(DBMovie.Movie.Title) Then + tTitle = StringUtils.FilterTokens(DBMovie.Movie.Title) + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = tTitle + If Master.eSettings.DisplayYear AndAlso Not String.IsNullOrEmpty(DBMovie.Movie.Year) Then + DBMovie.ListTitle = String.Format("{0} ({1})", tTitle, DBMovie.Movie.Year) + Else + DBMovie.ListTitle = tTitle + End If + Else + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name) + Else + If DBMovie.UseFolder AndAlso DBMovie.isSingle Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(DBMovie.Filename).Name) + Else + DBMovie.ListTitle = StringUtils.FilterName(Path.GetFileNameWithoutExtension(DBMovie.Filename)) + End If + End If + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = DBMovie.ListTitle + End If + + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function SelectImageOfType(ByRef mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.SelectImageOfType + If preload AndAlso _DLType = Enums.ImageType.Fanart AndAlso Not IsNothing(dFImgSelect) Then + pResults = dFImgSelect.ShowDialog() + dFImgSelect = Nothing + Else + Using dImgSelect As New dlgImgSelect + If preload Then + dFImgSelect = New dlgImgSelect + dFImgSelect.PreLoad(mMovie, Enums.ImageType.Fanart, _isEdit) + End If + dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(mMovie, _DLType, _isEdit) + End Using + End If + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + Public Sub PostScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.PostScraperOrderChanged + _setup.orderChanged() + End Sub + + Public Sub ScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.ScraperOrderChanged + _setupPost.orderChanged() + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Structure _MySettings + +#Region "Fields" + + Dim DownloadTrailers As Boolean + Dim IMDBURL As String + Dim UseOFDBGenre As Boolean + Dim UseOFDBOutline As Boolean + Dim UseOFDBPlot As Boolean + Dim UseOFDBTitle As Boolean + Dim TrailerTimeout As Integer + Dim UseTMDB As Boolean + Dim UseIMPA As Boolean + Dim UseMPDB As Boolean + Dim UseTMDBTrailer As Boolean + Dim UseIMDBTrailer As Boolean + Dim UseTMDBTrailerXBMC As Boolean + Dim ManualETSize As String + Dim ActorThumbsSize As String + Dim UseTMDBTrailerPref As String +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/scraperTVNativeModule.vb b/Addons/scraper.TVDB.Poster/scraperTVNativeModule.vb new file mode 100644 index 0000000..450e6d6 --- /dev/null +++ b/Addons/scraper.TVDB.Poster/scraperTVNativeModule.vb @@ -0,0 +1,221 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberNativeTVScraperModule + Implements Interfaces.EmberTVScraperModule + +#Region "Fields" + + Public Shared TVScraper As New Scraper + + Private _Name As String = "Ember Native TV Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmTVInfoSettingsHolder + Private _setupPost As frmTVMediaSettingsHolder +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberTVScraperModule.ModuleSettingsChanged + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberTVScraperModule.SetupPostScraperChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberTVScraperModule.SetupScraperChanged + + Public Event TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) Implements Interfaces.EmberTVScraperModule.TVScraperEvent + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property IsBusy() As Boolean Implements Interfaces.EmberTVScraperModule.IsBusy + Get + Return TVScraper.IsBusy + End Get + End Property + + Public ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberTVScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + Public ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberTVScraperModule.IsScraper + Get + Return True + End Get + End Property + + Public ReadOnly Property ModuleName() As String Implements Interfaces.EmberTVScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + Public ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberTVScraperModule.ModuleVersion + Get + Return FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Public Property PostScraperEnabled() As Boolean Implements Interfaces.EmberTVScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Public Property ScraperEnabled() As Boolean Implements Interfaces.EmberTVScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() Implements Interfaces.EmberTVScraperModule.CancelAsync + TVScraper.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String, ByRef epDet As MediaContainers.EpisodeDetails) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ChangeEpisode + epDet = TVScraper.ChangeEpisode(ShowID, TVDBID, Lang) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function GetLangs(ByVal sMirror As String, ByRef Langs As List(Of Containers.TVLanguage)) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetLangs + Langs = TVScraper.GetLangs(sMirror) + Return New Interfaces.ModuleResult With {.breakChain = True} + End Function + + Public Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByRef epDetails As MediaContainers.EpisodeDetails) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetSingleEpisode + epDetails = TVScraper.GetSingleEpisode(ShowID, TVDBID, Season, Episode, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images, ByRef Image As Images) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetSingleImage + Image = TVScraper.GetSingleImage(Title, ShowID, TVDBID, Type, Season, Episode, Lang, Ordering, CurrentImage) + Return New Interfaces.ModuleResult With {.breakChain = True} + End Function + + Public Sub Handler_ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent TVScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberTVScraperModule.Init + AddHandler TVScraper.ScraperEvent, AddressOf Handler_ScraperEvent + End Sub + + Public Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberTVScraperModule.InjectSetupPostScraper + Dim SPanel As New Containers.SettingsPanel + _setupPost = New frmTVMediaSettingsHolder + _setupPost.cbEnabled.Checked = _PostScraperEnabled + SPanel.Name = String.Concat(Me._Name, "PostScraper") + SPanel.Text = Master.eLang.GetString(0, "Ember Native TV Scrapers") + SPanel.Type = Master.eLang.GetString(698, "TV Shows", True) + SPanel.ImageIndex = If(Me._ScraperEnabled, 9, 10) + SPanel.Order = 100 + SPanel.Panel = Me._setupPost.pnlSettings + SPanel.Parent = "pnlTVMedia" + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + Return SPanel + End Function + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberTVScraperModule.ScraperUpdateMediaList + Public Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberTVScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmTVInfoSettingsHolder + _setup.cbEnabled.Checked = _ScraperEnabled + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(0, "Ember Native TV Scrapers") + SPanel.Prefix = "NativeTV_" + SPanel.Type = Master.eLang.GetString(698, "TV Shows", True) + SPanel.ImageIndex = If(Me._ScraperEnabled, 9, 10) + SPanel.Order = 100 + SPanel.Panel = Me._setup.pnlSettings + SPanel.Parent = "pnlTVData" + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + Return SPanel + End Function + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + Public Function PostScraper(ByRef DBTV As Structures.DBTV, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.PostScraper + End Function + + Public Function SaveImages() As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.SaveImages + TVScraper.SaveImages() + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberTVScraperModule.SaveSetupPostScraper + End Sub + + Public Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberTVScraperModule.SaveSetupScraper + End Sub + + Public Function ScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ScrapeEpisode + TVScraper.ScrapeEpisode(ShowID, ShowTitle, TVDBID, iEpisode, iSeason, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function Scraper(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.Scraper + TVScraper.SingleScrape(ShowID, ShowTitle, TVDBID, Lang, Ordering, Options, ScrapeType, WithCurrent) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function ScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ScrapeSeason + TVScraper.ScrapeSeason(ShowID, ShowTitle, TVDBID, iSeason, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.TVDB.Poster/x64/SQLite.Interop.dll b/Addons/scraper.TVDB.Poster/x64/SQLite.Interop.dll new file mode 100644 index 0000000..860c0e5 Binary files /dev/null and b/Addons/scraper.TVDB.Poster/x64/SQLite.Interop.dll differ diff --git a/Addons/scraper.TVDB.Poster/x86/SQLite.Interop.dll b/Addons/scraper.TVDB.Poster/x86/SQLite.Interop.dll new file mode 100644 index 0000000..6f6fd4f Binary files /dev/null and b/Addons/scraper.TVDB.Poster/x86/SQLite.Interop.dll differ diff --git a/Addons/scraper.YouTube.Trailer/AssemblyInfo.vb b/Addons/scraper.YouTube.Trailer/AssemblyInfo.vb new file mode 100644 index 0000000..1b59a44 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.EmberCore")> +<Assembly: AssemblyDescription("www.embermm.com")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.EmberCore")> +<Assembly: AssemblyCopyright("Copyright © 2011")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("4c4e9cbd-06e2-44ed-bbed-0f51f6c3f4ef")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.5")> +<Assembly: AssemblyFileVersion("1.3.0.5")> diff --git a/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.Debug_(db_DB).xml b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.Debug_(db_DB).xml new file mode 100644 index 0000000..0fba5b0 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.Debug_(db_DB).xml @@ -0,0 +1,902 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="1">native1</string> + <string id="2">native2</string> + <string id="3">native3</string> + <string id="4">native4</string> + <string id="5">native5</string> + <string id="6">native6</string> + <string id="7">native7</string> + <string id="8">native8</string> + <string id="9">native9</string> + <string id="10">native10</string> + <string id="11">native11</string> + <string id="12">native12</string> + <string id="13">native13</string> + <string id="14">native14</string> + <string id="15">native15</string> + <string id="16">native16</string> + <string id="17">native17</string> + <string id="18">native18</string> + <string id="19">native19</string> + <string id="20">native20</string> + <string id="21">native21</string> + <string id="22">native22</string> + <string id="23">native23</string> + <string id="24">native24</string> + <string id="25">native25</string> + <string id="26">native26</string> + <string id="27">native27</string> + <string id="28">native28</string> + <string id="29">native29</string> + <string id="30">native30</string> + <string id="31">native31</string> + <string id="32">native32</string> + <string id="33">native33</string> + <string id="34">native34</string> + <string id="35">native35</string> + <string id="36">native36</string> + <string id="37">native37</string> + <string id="38">native38</string> + <string id="39">native39</string> + <string id="40">native40</string> + <string id="41">native41</string> + <string id="42">native42</string> + <string id="43">native43</string> + <string id="44">native44</string> + <string id="45">native45</string> + <string id="46">native46</string> + <string id="47">native47</string> + <string id="48">native48</string> + <string id="49">native49</string> + <string id="50">native50</string> + <string id="51">native51</string> + <string id="52">native52</string> + <string id="53">native53</string> + <string id="54">native54</string> + <string id="55">native55</string> + <string id="56">native56</string> + <string id="57">native57</string> + <string id="58">native58</string> + <string id="59">native59</string> + <string id="60">native60</string> + <string id="61">native61</string> + <string id="62">native62</string> + <string id="63">native63</string> + <string id="64">native64</string> + <string id="65">native65</string> + <string id="66">native66</string> + <string id="67">native67</string> + <string id="68">native68</string> + <string id="69">native69</string> + <string id="70">native70</string> + <string id="71">native71</string> + <string id="72">native72</string> + <string id="73">native73</string> + <string id="74">native74</string> + <string id="75">native75</string> + <string id="76">native76</string> + <string id="77">native77</string> + <string id="78">native78</string> + <string id="79">native79</string> + <string id="80">native80</string> + <string id="81">native81</string> + <string id="82">native82</string> + <string id="83">native83</string> + <string id="84">native84</string> + <string id="85">native85</string> + <string id="86">native86</string> + <string id="87">native87</string> + <string id="88">native88</string> + <string id="89">native89</string> + <string id="90">native90</string> + <string id="91">native91</string> + <string id="92">native92</string> + <string id="93">native93</string> + <string id="94">native94</string> + <string id="95">native95</string> + <string id="96">native96</string> + <string id="97">native97</string> + <string id="98">native98</string> + <string id="99">native99</string> + <string id="100">native100</string> + <string id="101">native101</string> + <string id="102">native102</string> + <string id="103">native103</string> + <string id="104">native104</string> + <string id="105">native105</string> + <string id="106">native106</string> + <string id="107">native107</string> + <string id="108">native108</string> + <string id="109">native109</string> + <string id="110">native110</string> + <string id="111">native111</string> + <string id="112">native112</string> + <string id="113">native113</string> + <string id="114">native114</string> + <string id="115">native115</string> + <string id="116">native116</string> + <string id="117">native117</string> + <string id="118">native118</string> + <string id="119">native119</string> + <string id="120">native120</string> + <string id="121">native121</string> + <string id="122">native122</string> + <string id="123">native123</string> + <string id="124">native124</string> + <string id="125">native125</string> + <string id="126">native126</string> + <string id="127">native127</string> + <string id="128">native128</string> + <string id="129">native129</string> + <string id="130">native130</string> + <string id="131">native131</string> + <string id="132">native132</string> + <string id="133">native133</string> + <string id="134">native134</string> + <string id="135">native135</string> + <string id="136">native136</string> + <string id="137">native137</string> + <string id="138">native138</string> + <string id="139">native139</string> + <string id="140">native140</string> + <string id="141">native141</string> + <string id="142">native142</string> + <string id="143">native143</string> + <string id="144">native144</string> + <string id="145">native145</string> + <string id="146">native146</string> + <string id="147">native147</string> + <string id="148">native148</string> + <string id="149">native149</string> + <string id="150">native150</string> + <string id="151">native151</string> + <string id="152">native152</string> + <string id="153">native153</string> + <string id="154">native154</string> + <string id="155">native155</string> + <string id="156">native156</string> + <string id="157">native157</string> + <string id="158">native158</string> + <string id="159">native159</string> + <string id="160">native160</string> + <string id="161">native161</string> + <string id="162">native162</string> + <string id="163">native163</string> + <string id="164">native164</string> + <string id="165">native165</string> + <string id="166">native166</string> + <string id="167">native167</string> + <string id="168">native168</string> + <string id="169">native169</string> + <string id="170">native170</string> + <string id="171">native171</string> + <string id="172">native172</string> + <string id="173">native173</string> + <string id="174">native174</string> + <string id="175">native175</string> + <string id="176">native176</string> + <string id="177">native177</string> + <string id="178">native178</string> + <string id="179">native179</string> + <string id="180">native180</string> + <string id="181">native181</string> + <string id="182">native182</string> + <string id="183">native183</string> + <string id="184">native184</string> + <string id="185">native185</string> + <string id="186">native186</string> + <string id="187">native187</string> + <string id="188">native188</string> + <string id="189">native189</string> + <string id="190">native190</string> + <string id="191">native191</string> + <string id="192">native192</string> + <string id="193">native193</string> + <string id="194">native194</string> + <string id="195">native195</string> + <string id="196">native196</string> + <string id="197">native197</string> + <string id="198">native198</string> + <string id="199">native199</string> + <string id="200">native200</string> + <string id="201">native201</string> + <string id="202">native202</string> + <string id="203">native203</string> + <string id="204">native204</string> + <string id="205">native205</string> + <string id="206">native206</string> + <string id="207">native207</string> + <string id="208">native208</string> + <string id="209">native209</string> + <string id="210">native210</string> + <string id="211">native211</string> + <string id="212">native212</string> + <string id="213">native213</string> + <string id="214">native214</string> + <string id="215">native215</string> + <string id="216">native216</string> + <string id="217">native217</string> + <string id="218">native218</string> + <string id="219">native219</string> + <string id="220">native220</string> + <string id="221">native221</string> + <string id="222">native222</string> + <string id="223">native223</string> + <string id="224">native224</string> + <string id="225">native225</string> + <string id="226">native226</string> + <string id="227">native227</string> + <string id="228">native228</string> + <string id="229">native229</string> + <string id="230">native230</string> + <string id="231">native231</string> + <string id="232">native232</string> + <string id="233">native233</string> + <string id="234">native234</string> + <string id="235">native235</string> + <string id="236">native236</string> + <string id="237">native237</string> + <string id="238">native238</string> + <string id="239">native239</string> + <string id="240">native240</string> + <string id="241">native241</string> + <string id="242">native242</string> + <string id="243">native243</string> + <string id="244">native244</string> + <string id="245">native245</string> + <string id="246">native246</string> + <string id="247">native247</string> + <string id="248">native248</string> + <string id="249">native249</string> + <string id="250">native250</string> + <string id="251">native251</string> + <string id="252">native252</string> + <string id="253">native253</string> + <string id="254">native254</string> + <string id="255">native255</string> + <string id="256">native256</string> + <string id="257">native257</string> + <string id="258">native258</string> + <string id="259">native259</string> + <string id="260">native260</string> + <string id="261">native261</string> + <string id="262">native262</string> + <string id="263">native263</string> + <string id="264">native264</string> + <string id="265">native265</string> + <string id="266">native266</string> + <string id="267">native267</string> + <string id="268">native268</string> + <string id="269">native269</string> + <string id="270">native270</string> + <string id="271">native271</string> + <string id="272">native272</string> + <string id="273">native273</string> + <string id="274">native274</string> + <string id="275">native275</string> + <string id="276">native276</string> + <string id="277">native277</string> + <string id="278">native278</string> + <string id="279">native279</string> + <string id="280">native280</string> + <string id="281">native281</string> + <string id="282">native282</string> + <string id="283">native283</string> + <string id="284">native284</string> + <string id="285">native285</string> + <string id="286">native286</string> + <string id="287">native287</string> + <string id="288">native288</string> + <string id="289">native289</string> + <string id="290">native290</string> + <string id="291">native291</string> + <string id="292">native292</string> + <string id="293">native293</string> + <string id="294">native294</string> + <string id="295">native295</string> + <string id="296">native296</string> + <string id="297">native297</string> + <string id="298">native298</string> + <string id="299">native299</string> + <string id="300">native300</string> + <string id="301">native301</string> + <string id="302">native302</string> + <string id="303">native303</string> + <string id="304">native304</string> + <string id="305">native305</string> + <string id="306">native306</string> + <string id="307">native307</string> + <string id="308">native308</string> + <string id="309">native309</string> + <string id="310">native310</string> + <string id="311">native311</string> + <string id="312">native312</string> + <string id="313">native313</string> + <string id="314">native314</string> + <string id="315">native315</string> + <string id="316">native316</string> + <string id="317">native317</string> + <string id="318">native318</string> + <string id="319">native319</string> + <string id="320">native320</string> + <string id="321">native321</string> + <string id="322">native322</string> + <string id="323">native323</string> + <string id="324">native324</string> + <string id="325">native325</string> + <string id="326">native326</string> + <string id="327">native327</string> + <string id="328">native328</string> + <string id="329">native329</string> + <string id="330">native330</string> + <string id="331">native331</string> + <string id="332">native332</string> + <string id="333">native333</string> + <string id="334">native334</string> + <string id="335">native335</string> + <string id="336">native336</string> + <string id="337">native337</string> + <string id="338">native338</string> + <string id="339">native339</string> + <string id="340">native340</string> + <string id="341">native341</string> + <string id="342">native342</string> + <string id="343">native343</string> + <string id="344">native344</string> + <string id="345">native345</string> + <string id="346">native346</string> + <string id="347">native347</string> + <string id="348">native348</string> + <string id="349">native349</string> + <string id="350">native350</string> + <string id="351">native351</string> + <string id="352">native352</string> + <string id="353">native353</string> + <string id="354">native354</string> + <string id="355">native355</string> + <string id="356">native356</string> + <string id="357">native357</string> + <string id="358">native358</string> + <string id="359">native359</string> + <string id="360">native360</string> + <string id="361">native361</string> + <string id="362">native362</string> + <string id="363">native363</string> + <string id="364">native364</string> + <string id="365">native365</string> + <string id="366">native366</string> + <string id="367">native367</string> + <string id="368">native368</string> + <string id="369">native369</string> + <string id="370">native370</string> + <string id="371">native371</string> + <string id="372">native372</string> + <string id="373">native373</string> + <string id="374">native374</string> + <string id="375">native375</string> + <string id="376">native376</string> + <string id="377">native377</string> + <string id="378">native378</string> + <string id="379">native379</string> + <string id="380">native380</string> + <string id="381">native381</string> + <string id="382">native382</string> + <string id="383">native383</string> + <string id="384">native384</string> + <string id="385">native385</string> + <string id="386">native386</string> + <string id="387">native387</string> + <string id="388">native388</string> + <string id="389">native389</string> + <string id="390">native390</string> + <string id="391">native391</string> + <string id="392">native392</string> + <string id="393">native393</string> + <string id="394">native394</string> + <string id="395">native395</string> + <string id="396">native396</string> + <string id="397">native397</string> + <string id="398">native398</string> + <string id="399">native399</string> + <string id="400">native400</string> + <string id="401">native401</string> + <string id="402">native402</string> + <string id="403">native403</string> + <string id="404">native404</string> + <string id="405">native405</string> + <string id="406">native406</string> + <string id="407">native407</string> + <string id="408">native408</string> + <string id="409">native409</string> + <string id="410">native410</string> + <string id="411">native411</string> + <string id="412">native412</string> + <string id="413">native413</string> + <string id="414">native414</string> + <string id="415">native415</string> + <string id="416">native416</string> + <string id="417">native417</string> + <string id="418">native418</string> + <string id="419">native419</string> + <string id="420">native420</string> + <string id="421">native421</string> + <string id="422">native422</string> + <string id="423">native423</string> + <string id="424">native424</string> + <string id="425">native425</string> + <string id="426">native426</string> + <string id="427">native427</string> + <string id="428">native428</string> + <string id="429">native429</string> + <string id="430">native430</string> + <string id="431">native431</string> + <string id="432">native432</string> + <string id="433">native433</string> + <string id="434">native434</string> + <string id="435">native435</string> + <string id="436">native436</string> + <string id="437">native437</string> + <string id="438">native438</string> + <string id="439">native439</string> + <string id="440">native440</string> + <string id="441">native441</string> + <string id="442">native442</string> + <string id="443">native443</string> + <string id="444">native444</string> + <string id="445">native445</string> + <string id="446">native446</string> + <string id="447">native447</string> + <string id="448">native448</string> + <string id="449">native449</string> + <string id="450">native450</string> + <string id="451">native451</string> + <string id="452">native452</string> + <string id="453">native453</string> + <string id="454">native454</string> + <string id="455">native455</string> + <string id="456">native456</string> + <string id="457">native457</string> + <string id="458">native458</string> + <string id="459">native459</string> + <string id="460">native460</string> + <string id="461">native461</string> + <string id="462">native462</string> + <string id="463">native463</string> + <string id="464">native464</string> + <string id="465">native465</string> + <string id="466">native466</string> + <string id="467">native467</string> + <string id="468">native468</string> + <string id="469">native469</string> + <string id="470">native470</string> + <string id="471">native471</string> + <string id="472">native472</string> + <string id="473">native473</string> + <string id="474">native474</string> + <string id="475">native475</string> + <string id="476">native476</string> + <string id="477">native477</string> + <string id="478">native478</string> + <string id="479">native479</string> + <string id="480">native480</string> + <string id="481">native481</string> + <string id="482">native482</string> + <string id="483">native483</string> + <string id="484">native484</string> + <string id="485">native485</string> + <string id="486">native486</string> + <string id="487">native487</string> + <string id="488">native488</string> + <string id="489">native489</string> + <string id="490">native490</string> + <string id="491">native491</string> + <string id="492">native492</string> + <string id="493">native493</string> + <string id="494">native494</string> + <string id="495">native495</string> + <string id="496">native496</string> + <string id="497">native497</string> + <string id="498">native498</string> + <string id="499">native499</string> + <string id="500">native500</string> + <string id="501">native501</string> + <string id="502">native502</string> + <string id="503">native503</string> + <string id="504">native504</string> + <string id="505">native505</string> + <string id="506">native506</string> + <string id="507">native507</string> + <string id="508">native508</string> + <string id="509">native509</string> + <string id="510">native510</string> + <string id="511">native511</string> + <string id="512">native512</string> + <string id="513">native513</string> + <string id="514">native514</string> + <string id="515">native515</string> + <string id="516">native516</string> + <string id="517">native517</string> + <string id="518">native518</string> + <string id="519">native519</string> + <string id="520">native520</string> + <string id="521">native521</string> + <string id="522">native522</string> + <string id="523">native523</string> + <string id="524">native524</string> + <string id="525">native525</string> + <string id="526">native526</string> + <string id="527">native527</string> + <string id="528">native528</string> + <string id="529">native529</string> + <string id="530">native530</string> + <string id="531">native531</string> + <string id="532">native532</string> + <string id="533">native533</string> + <string id="534">native534</string> + <string id="535">native535</string> + <string id="536">native536</string> + <string id="537">native537</string> + <string id="538">native538</string> + <string id="539">native539</string> + <string id="540">native540</string> + <string id="541">native541</string> + <string id="542">native542</string> + <string id="543">native543</string> + <string id="544">native544</string> + <string id="545">native545</string> + <string id="546">native546</string> + <string id="547">native547</string> + <string id="548">native548</string> + <string id="549">native549</string> + <string id="550">native550</string> + <string id="551">native551</string> + <string id="552">native552</string> + <string id="553">native553</string> + <string id="554">native554</string> + <string id="555">native555</string> + <string id="556">native556</string> + <string id="557">native557</string> + <string id="558">native558</string> + <string id="559">native559</string> + <string id="560">native560</string> + <string id="561">native561</string> + <string id="562">native562</string> + <string id="563">native563</string> + <string id="564">native564</string> + <string id="565">native565</string> + <string id="566">native566</string> + <string id="567">native567</string> + <string id="568">native568</string> + <string id="569">native569</string> + <string id="570">native570</string> + <string id="571">native571</string> + <string id="572">native572</string> + <string id="573">native573</string> + <string id="574">native574</string> + <string id="575">native575</string> + <string id="576">native576</string> + <string id="577">native577</string> + <string id="578">native578</string> + <string id="579">native579</string> + <string id="580">native580</string> + <string id="581">native581</string> + <string id="582">native582</string> + <string id="583">native583</string> + <string id="584">native584</string> + <string id="585">native585</string> + <string id="586">native586</string> + <string id="587">native587</string> + <string id="588">native588</string> + <string id="589">native589</string> + <string id="590">native590</string> + <string id="591">native591</string> + <string id="592">native592</string> + <string id="593">native593</string> + <string id="594">native594</string> + <string id="595">native595</string> + <string id="596">native596</string> + <string id="597">native597</string> + <string id="598">native598</string> + <string id="599">native599</string> + <string id="600">native600</string> + <string id="601">native601</string> + <string id="602">native602</string> + <string id="603">native603</string> + <string id="604">native604</string> + <string id="605">native605</string> + <string id="606">native606</string> + <string id="607">native607</string> + <string id="608">native608</string> + <string id="609">native609</string> + <string id="610">native610</string> + <string id="611">native611</string> + <string id="612">native612</string> + <string id="613">native613</string> + <string id="614">native614</string> + <string id="615">native615</string> + <string id="616">native616</string> + <string id="617">native617</string> + <string id="618">native618</string> + <string id="619">native619</string> + <string id="620">native620</string> + <string id="621">native621</string> + <string id="622">native622</string> + <string id="623">native623</string> + <string id="624">native624</string> + <string id="625">native625</string> + <string id="626">native626</string> + <string id="627">native627</string> + <string id="628">native628</string> + <string id="629">native629</string> + <string id="630">native630</string> + <string id="631">native631</string> + <string id="632">native632</string> + <string id="633">native633</string> + <string id="634">native634</string> + <string id="635">native635</string> + <string id="636">native636</string> + <string id="637">native637</string> + <string id="638">native638</string> + <string id="639">native639</string> + <string id="640">native640</string> + <string id="641">native641</string> + <string id="642">native642</string> + <string id="643">native643</string> + <string id="644">native644</string> + <string id="645">native645</string> + <string id="646">native646</string> + <string id="647">native647</string> + <string id="648">native648</string> + <string id="649">native649</string> + <string id="650">native650</string> + <string id="651">native651</string> + <string id="652">native652</string> + <string id="653">native653</string> + <string id="654">native654</string> + <string id="655">native655</string> + <string id="656">native656</string> + <string id="657">native657</string> + <string id="658">native658</string> + <string id="659">native659</string> + <string id="660">native660</string> + <string id="661">native661</string> + <string id="662">native662</string> + <string id="663">native663</string> + <string id="664">native664</string> + <string id="665">native665</string> + <string id="666">native666</string> + <string id="667">native667</string> + <string id="668">native668</string> + <string id="669">native669</string> + <string id="670">native670</string> + <string id="671">native671</string> + <string id="672">native672</string> + <string id="673">native673</string> + <string id="674">native674</string> + <string id="675">native675</string> + <string id="676">native676</string> + <string id="677">native677</string> + <string id="678">native678</string> + <string id="679">native679</string> + <string id="680">native680</string> + <string id="681">native681</string> + <string id="682">native682</string> + <string id="683">native683</string> + <string id="684">native684</string> + <string id="685">native685</string> + <string id="686">native686</string> + <string id="687">native687</string> + <string id="688">native688</string> + <string id="689">native689</string> + <string id="690">native690</string> + <string id="691">native691</string> + <string id="692">native692</string> + <string id="693">native693</string> + <string id="694">native694</string> + <string id="695">native695</string> + <string id="696">native696</string> + <string id="697">native697</string> + <string id="698">native698</string> + <string id="699">native699</string> + <string id="700">native700</string> + <string id="701">native701</string> + <string id="702">native702</string> + <string id="703">native703</string> + <string id="704">native704</string> + <string id="705">native705</string> + <string id="706">native706</string> + <string id="707">native707</string> + <string id="708">native708</string> + <string id="709">native709</string> + <string id="710">native710</string> + <string id="711">native711</string> + <string id="712">native712</string> + <string id="713">native713</string> + <string id="714">native714</string> + <string id="715">native715</string> + <string id="716">native716</string> + <string id="717">native717</string> + <string id="718">native718</string> + <string id="719">native719</string> + <string id="720">native720</string> + <string id="721">native721</string> + <string id="722">native722</string> + <string id="723">native723</string> + <string id="724">native724</string> + <string id="725">native725</string> + <string id="726">native726</string> + <string id="727">native727</string> + <string id="728">native728</string> + <string id="729">native729</string> + <string id="730">native730</string> + <string id="731">native731</string> + <string id="732">native732</string> + <string id="733">native733</string> + <string id="734">native734</string> + <string id="735">native735</string> + <string id="736">native736</string> + <string id="737">native737</string> + <string id="738">native738</string> + <string id="739">native739</string> + <string id="740">native740</string> + <string id="741">native741</string> + <string id="742">native742</string> + <string id="743">native743</string> + <string id="744">native744</string> + <string id="745">native745</string> + <string id="746">native746</string> + <string id="747">native747</string> + <string id="748">native748</string> + <string id="749">native749</string> + <string id="750">native750</string> + <string id="751">native751</string> + <string id="752">native752</string> + <string id="753">native753</string> + <string id="754">native754</string> + <string id="755">native755</string> + <string id="756">native756</string> + <string id="757">native757</string> + <string id="758">native758</string> + <string id="759">native759</string> + <string id="760">native760</string> + <string id="761">native761</string> + <string id="762">native762</string> + <string id="763">native763</string> + <string id="764">native764</string> + <string id="765">native765</string> + <string id="766">native766</string> + <string id="767">native767</string> + <string id="768">native768</string> + <string id="769">native769</string> + <string id="770">native770</string> + <string id="771">native771</string> + <string id="772">native772</string> + <string id="773">native773</string> + <string id="774">native774</string> + <string id="775">native775</string> + <string id="776">native776</string> + <string id="777">native777</string> + <string id="778">native778</string> + <string id="779">native779</string> + <string id="780">native780</string> + <string id="781">native781</string> + <string id="782">native782</string> + <string id="783">native783</string> + <string id="784">native784</string> + <string id="785">native785</string> + <string id="786">native786</string> + <string id="787">native787</string> + <string id="788">native788</string> + <string id="789">native789</string> + <string id="790">native790</string> + <string id="791">native791</string> + <string id="792">native792</string> + <string id="793">native793</string> + <string id="794">native794</string> + <string id="795">native795</string> + <string id="796">native796</string> + <string id="797">native797</string> + <string id="798">native798</string> + <string id="799">native799</string> + <string id="800">native800</string> + <string id="801">native801</string> + <string id="802">native802</string> + <string id="803">native803</string> + <string id="804">native804</string> + <string id="805">native805</string> + <string id="806">native806</string> + <string id="807">native807</string> + <string id="808">native808</string> + <string id="809">native809</string> + <string id="810">native810</string> + <string id="811">native811</string> + <string id="812">native812</string> + <string id="813">native813</string> + <string id="814">native814</string> + <string id="815">native815</string> + <string id="816">native816</string> + <string id="817">native817</string> + <string id="818">native818</string> + <string id="819">native819</string> + <string id="820">native820</string> + <string id="821">native821</string> + <string id="822">native822</string> + <string id="823">native823</string> + <string id="824">native824</string> + <string id="825">native825</string> + <string id="826">native826</string> + <string id="827">native827</string> + <string id="828">native828</string> + <string id="829">native829</string> + <string id="830">native830</string> + <string id="831">native831</string> + <string id="832">native832</string> + <string id="833">native833</string> + <string id="834">native834</string> + <string id="835">native835</string> + <string id="836">native836</string> + <string id="837">native837</string> + <string id="838">native838</string> + <string id="839">native839</string> + <string id="840">native840</string> + <string id="841">native841</string> + <string id="842">native842</string> + <string id="843">native843</string> + <string id="844">native844</string> + <string id="845">native845</string> + <string id="846">native846</string> + <string id="847">native847</string> + <string id="848">native848</string> + <string id="849">native849</string> + <string id="850">native850</string> + <string id="851">native851</string> + <string id="852">native852</string> + <string id="853">native853</string> + <string id="854">native854</string> + <string id="855">native855</string> + <string id="856">native856</string> + <string id="857">native857</string> + <string id="858">native858</string> + <string id="859">native859</string> + <string id="860">native860</string> + <string id="861">native861</string> + <string id="862">native862</string> + <string id="863">native863</string> + <string id="864">native864</string> + <string id="865">native865</string> + <string id="866">native866</string> + <string id="867">native867</string> + <string id="868">native868</string> + <string id="869">native869</string> + <string id="870">native870</string> + <string id="871">native871</string> + <string id="872">native872</string> + <string id="873">native873</string> + <string id="874">native874</string> + <string id="875">native875</string> + <string id="876">native876</string> + <string id="877">native877</string> + <string id="878">native878</string> + <string id="879">native879</string> + <string id="880">native880</string> + <string id="881">native881</string> + <string id="882">native882</string> + <string id="883">native883</string> + <string id="884">native884</string> + <string id="885">native885</string> + <string id="886">native886</string> + <string id="887">native887</string> + <string id="888">native888</string> + <string id="889">native889</string> + <string id="890">native890</string> + <string id="891">native891</string> + <string id="892">native892</string> + <string id="893">native893</string> + <string id="894">native894</string> + <string id="895">native895</string> + <string id="896">native896</string> + <string id="897">native897</string> + <string id="898">native898</string> + <string id="899">native899</string> + <string id="900">native900</string> +</strings> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.English_(en_US)-Help.xml b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.English_(en_US)-Help.xml new file mode 100644 index 0000000..1705beb --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.English_(en_US)-Help.xml @@ -0,0 +1,45 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="NativeMovieInfo_cbEnabled">Enable or disable this module.</string> + <string control="NativeMovieInfo_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieInfo_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieInfo_txtIMDBURL">Enter the mirror to use when retrieving information from IMDB.</string> + <string control="NativeMovieInfo_chkOFDBTitle">If enabled, Ember will attempt to retreive the movie title from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkOFDBOutline">If enabled, Ember will attempt to retreive the movie outline from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkOFDBPlot">If enabled, Ember will attempt to retreive the movie plot from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkOFDBGenre">If enabled, Ember will attempt to retreive the movie genre from OFDB (a German language site) when scraping.</string> + <string control="NativeMovieInfo_chkCertification">Enable scraping movie certification.</string> + <string control="NativeMovieInfo_chkTop250">Enable scraping movie Top 250 ranking.</string> + <string control="NativeMovieInfo_txtGenreLimit">Limit the number of scraped genres to the entered value.</string> + <string control="NativeMovieInfo_txtActorLimit">Limit the number of scraped actors to the entered value.</string> + <string control="NativeMovieInfo_chkCrew">Enable scraping movie other crew. (Scrape Full Crew must be enabled)</string> + <string control="NativeMovieInfo_chkMusicBy">Enable scraping movie musicians. (Scrape Full Crew must be enabled)</string> + <string control="NativeMovieInfo_chkProducers">Enable scraping movie producers. (Scrape Full Crew must be enabled)</string> + <string control="NativeMovieInfo_chkWriters">Enable scraping movie writers.</string> + <string control="NativeMovieInfo_chkStudio">Enable scraping movie studio.</string> + <string control="NativeMovieInfo_chkRuntime">Enable scraping movie runtime.</string> + <string control="NativeMovieInfo_chkPlot">Enable scraping movie plot.</string> + <string control="NativeMovieInfo_chkOutline">Enable scraping movie outline.</string> + <string control="NativeMovieInfo_chkGenre">Enable scraping movie genre.</string> + <string control="NativeMovieInfo_chkDirector">Enable scraping movie director.</string> + <string control="NativeMovieInfo_chkTagline">Enable scraping movie tagline.</string> + <string control="NativeMovieInfo_chkCast">Enable scraping movie cast.</string> + <string control="NativeMovieInfo_chkVotes">Enable scraping movie votes.</string> + <string control="NativeMovieInfo_chkTrailer">Enable scraping movie trailer url.</string> + <string control="NativeMovieInfo_chkRating">Enable scraping movie rating.</string> + <string control="NativeMovieInfo_chkRelease">Enable scraping movie release date.</string> + <string control="NativeMovieInfo_chkMPAA">Enable scraping movie MPAA.</string> + <string control="NativeMovieInfo_chkYear">Enable scraping movie year.</string> + <string control="NativeMovieInfo_chkTitle">Enable scraping movie title.</string> + <string control="NativeMovieMedia_cbEnabled">Enable or disable this module.</string> + <string control="NativeMovieMedia_btnUp">Move this scraper module up in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieMedia_btnDown">Move this scraper module down in order. (Scraper modules will be processed in order from top to bottom)</string> + <string control="NativeMovieMedia_chkScrapePoster">Enable scraping posters from this module. (Refer to global poster settings for more options)</string> + <string control="NativeMovieMedia_chkScrapeFanart">Enable scraping fanart from this module. (Refer to global fanart settings for more options)</string> + <string control="NativeMovieMedia_chkUseTMDB">Enable retrieving images from theMovieDB.org.</string> + <string control="NativeMovieMedia_chkUseIMPA">Enable retrieving images from</string> + <string control="NativeMovieMedia_chkUseMPDB">Enable retrieving images from MoviePosterDB.com.</string> + <string control="NativeMovieMedia_chkAutoThumbs">Enable automatic extraction of extrathumbs from this module. (Refer to global extrathumb settings for more options)</string> + <string control="NativeMovieMedia_chkDownloadTrailer">Enable trailer downloading from this module. (Refer to global trailer settings for more options)</string> + <string control="NativeMovieMedia_txtTimeout">Enter the time (in seconds) you wish to use as a time out for the trailer sites. (If there is no response in the given time frame, the trailer site will be temporarily skipped.)</string> + <string control="NativeMovieMedia_lbTrailerSites">Select the sites from which you would like to retrieve trailer URLs and/or files.</string> +</strings> diff --git a/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.English_(en_US).xml b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.English_(en_US).xml new file mode 100644 index 0000000..87a19b5 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.English_(en_US).xml @@ -0,0 +1,117 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Native TV Scrapers</string> + <string id="1">Use OFDB Genre</string> + <string id="2">Use OFDB Plot</string> + <string id="3">Use OFDB Outline</string> + <string id="4">Use OFDB Title</string> + <string id="5">IMDB Mirror:</string> + <string id="6">Scraper Fields - Scraper specific</string> + <string id="7">Timeout:</string> + <string id="8">Supported Sites:</string> + <string id="9">Get Images From:</string> + <string id="10">Search Results</string> + <string id="11">Searching IMDB...</string> + <string id="12">The ID you entered is not a valid IMDB ID.</string> + <string id="13">You have manually entered an IMDB ID but have not verified it is correct.</string> + <string id="14">Continue without verification?</string> + <string id="15">Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again.</string> + <string id="16">Verification Failed</string> + <string id="17">Partial Matches ({0})</string> + <string id="18">Exact Matches ({0})</string> + <string id="19">Popular Titles ({0})</string> + <string id="20">No Matches Found</string> + <string id="21">View details of each result to find the proper movie.</string> + <string id="22">Movie Search Results</string> + <string id="23">Manual IMDB Entry:</string> + <string id="24">Verify</string> + <string id="25">Searching IMDB...</string> + <string id="26">Downloading details...</string> + <string id="27">Downloading {0}</string> + <string id="28">No Fanart found for this movie.</string> + <string id="29">No Fanart Found</string> + <string id="30">No Posters found for this movie.</string> + <string id="31">No Posters Found</string> + <string id="32">Retrieving data from TheMovieDB.com...</string> + <string id="33">TheMovieDB.com is not enabled</string> + <string id="34">Retrieving data from IMPAwards.com...</string> + <string id="35">IMPAwards.com is not enabled</string> + <string id="36">Retrieving data from MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com is not enabled</string> + <string id="38">Preparing images...</string> + <string id="39">Select Poster</string> + <string id="40">Select Fanart</string> + <string id="41">Check All Thumb</string> + <string id="42">Check All Mid</string> + <string id="43">Check All Original</string> + <string id="44">Selected item will be set as fanart. All checked items will be saved to \extrathumbs.</string> + <string id="45">Performing Preliminary Tasks...</string> + <string id="46">Downloading Selected Image...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Small</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">Small ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Multiple</string> + <string id="56">Downloading selected trailer...</string> + <string id="57">Copying specified file to trailer...</string> + <string id="58">The trailer could not be played. This could be due to an invalid URL or you do not have the proper player to play the trailer type.</string> + <string id="59">Error Playing Trailer</string> + <string id="60">Move</string> + <string id="61">Copy</string> + <string id="62">Moving specified file to trailer...</string> + <string id="63">Set To Nfo</string> + <string id="64">Select Trailer</string> + <string id="65">Select Trailer to Download</string> + <string id="66">Manual Trailer Entry</string> + <string id="67">Direct Link or YouTube URL:</string> + <string id="68">Compiling trailer list...</string> + <string id="69">Preview Trailer</string> + <string id="70">Local Trailer:</string> + <string id="71">The video format links could not be retrieved.</string> + <string id="72">Error Retrieving Video Format Links</string> + <string id="73">Select Format</string> + <string id="74">Getting available formats...</string> + <string id="75">Available Formats</string> + <string id="76">A poster of your preferred size could not be found. Please choose another.</string> + <string id="77">No Preferred Size</string> + <string id="78">Fanart of your preferred size could not be found. Please choose another.</string> + <string id="79">There are no known episodes for this show. Scrape the show, season, or episode and try again.</string> + <string id="80">No Known Episodes</string> + <string id="81">There is no poster available for this episode.</string> + <string id="82">Guest Star</string> + <string id="83">The ID you entered is not a valid TVDB ID.</string> + <string id="84">Downloading show info...</string> + <string id="85">TV Search Results</string> + <string id="86">View details of each result to find the proper TV show.</string> + <string id="87">Downloading Fullsize Fanart Image...</string> + <string id="88">Loading Current Images...</string> + <string id="89">(Down)Loading New Images...</string> + <string id="90">Setting Defaults...</string> + <string id="91">Show Poster</string> + <string id="92">Episode Fanart</string> + <string id="93">Show Fanart</string> + <string id="94">All Seasons Poster</string> + <string id="95">Season Posters</string> + <string id="96">Season Fanart</string> + <string id="97">Season {0} Posters</string> + <string id="98">Season {0} Fanart</string> + <string id="99">TV Image Selection</string> + <string id="100">Current Image:</string> + <string id="101">Get Posters</string> + <string id="102">Get Fanart</string> + <string id="103">These settings are specific to this module.{0}Please refer to the global settings for more options.</string> + <string id="104">Ember Native Movie Scrapers</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Size:</string> + <string id="109">Trailers</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Preferred language</string> + <string id="113">Save Fanart In:</string> + <string id="114">Open In Browser</string> +</strings> diff --git a/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.German_(de_DE)-Help.xml b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.German_(de_DE)-Help.xml new file mode 100644 index 0000000..f4c930d --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.German_(de_DE)-Help.xml @@ -0,0 +1,45 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="NativeMovieInfo_cbEnabled">Aktiviert dieses Modul.</string> + <string control="NativeMovieInfo_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieInfo_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieInfo_txtIMDBURL">Gib den Mirror ein über den Ember mit der IMDB kommunizieren soll.</string> + <string control="NativeMovieInfo_chkOFDBTitle">Wenn aktiviert versucht Ember den Titel von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkOFDBOutline">Wenn aktiviert versucht Ember die Kurzebschreibung von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkOFDBPlot">Wenn aktiviert versucht Ember die Inhaltsangabe von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkOFDBGenre">Wenn aktiviert versucht Ember die Genres von der deutschen Seite OFDB.DE zu scrapen.</string> + <string control="NativeMovieInfo_chkCertification">Aktiviert das Scrapen der Altersbeschränkung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTop250">Aktiviert das Scrapen der IMDB Top250 mit diesem Modul.</string> + <string control="NativeMovieInfo_txtGenreLimit">Die Anzahl der gescrapten Genres limitieren.</string> + <string control="NativeMovieInfo_txtActorLimit">Die Anzahl der gescrapten Schauspieler limitieren.</string> + <string control="NativeMovieInfo_chkCrew">Aktiviert das Scrapen der Sonstigen Crew mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!)</string> + <string control="NativeMovieInfo_chkMusicBy">Aktiviert das Scrapen der Musiker mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!)</string> + <string control="NativeMovieInfo_chkProducers">Aktiviert das Scrapen der Produzenten mit diesem Modul. (Die Gesamte Crew scrapen muss aktiviert sein!)</string> + <string control="NativeMovieInfo_chkWriters">Aktiviert das Scrapen der Autoren mit diesem Modul.</string> + <string control="NativeMovieInfo_chkStudio">Aktiviert das Scrapen des Studios mit diesem Modul.</string> + <string control="NativeMovieInfo_chkRuntime">Aktiviert das Scrapen der Spielzeit mit diesem Modul.</string> + <string control="NativeMovieInfo_chkPlot">Aktiviert das Scrapen des Inhalts mit diesem Modul.</string> + <string control="NativeMovieInfo_chkOutline">Aktiviert das Scrapen der Kurzbeschreibung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkGenre">Aktiviert das Scrapen von Genre mit diesem Modul.</string> + <string control="NativeMovieInfo_chkDirector">Aktiviert das Scrapen des Regisseurs mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTagline">Aktiviert das Scrapen der Tagline mit diesem Modul.</string> + <string control="NativeMovieInfo_chkCast">Aktiviert das Scrapen der Schauspieler mit diesem Modul.</string> + <string control="NativeMovieInfo_chkVotes">Aktiviert das Scrapen der Anzahl Bewertungen mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTrailer">Aktiviert das Scrapen von Trailern mit diesem Modul.</string> + <string control="NativeMovieInfo_chkRating">Aktiviert das Scrapen der Bewertung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkRelease">Aktiviert das Scrapen des Premiere Datums mit diesem Modul.</string> + <string control="NativeMovieInfo_chkMPAA">Aktiviert das Scrapen der MPAA Bewertung mit diesem Modul.</string> + <string control="NativeMovieInfo_chkYear">Aktiviert das Scrapen des Jahres mit diesem Modul.</string> + <string control="NativeMovieInfo_chkTitle">Aktiviert das Scrapen des Titels mit diesem Modul.</string> + <string control="NativeMovieMedia_cbEnabled">Aktiviert dieses Modul.</string> + <string control="NativeMovieMedia_btnUp">Verschiebt diesen Scraper in der Reihenfolge einen nach oben (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieMedia_btnDown">Verschiebt diesen Scraper in der Reihenfolge einen nach unten (Scrape Module werden von oben nach unten abgearbeitet.)</string> + <string control="NativeMovieMedia_chkScrapePoster">Aktiviert das Laden von Postern mit diesem Modul. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_chkScrapeFanart">Aktiviert das Laden von Fanart mit diesem Modul. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_chkUseTMDB">Aktiviert das Laden von Bildern von TheMovieDB.org.</string> + <string control="NativeMovieMedia_chkUseIMPA">Aktiviert das Laden von Bildern von IMPA</string> + <string control="NativeMovieMedia_chkUseMPDB">Aktiviert das Laden von Bildern von MoviePosterDB.com.</string> + <string control="NativeMovieMedia_chkAutoThumbs">Automatische Frame extraktion mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_chkDownloadTrailer">Trailer laden mit diesem Modul aktivieren. (Schau auch in die Globale Konfiguration!)</string> + <string control="NativeMovieMedia_txtTimeout">Wähle die Zeit (in Sekunden) die auf Trailerseiten gewartet werden soll. (Wenn die Zeite in dieser Zeit nicht geantwortet hat wird sie übersprungen)</string> + <string control="NativeMovieMedia_lbTrailerSites">Wähle die Seite von der Trailer URLs/Dateien geladen werden sollen.</string> +</strings> diff --git a/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.German_(de_DE).xml b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.German_(de_DE).xml new file mode 100644 index 0000000..0349557 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.German_(de_DE).xml @@ -0,0 +1,117 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">Ember Nativer TV Scraper</string> + <string id="1">OFDB Genre benutzen</string> + <string id="2">OFDB Handlung benutzen</string> + <string id="3">OFDB Kurzbeschr. benutzen</string> + <string id="4">OFDB Titel benutzen</string> + <string id="5">IMDB Mirror:</string> + <string id="6">Scraper Felder - Scraper spezifisch</string> + <string id="7">Timeout:</string> + <string id="8">Unterstützte Seiten:</string> + <string id="9">Bilder holen von:</string> + <string id="10">Suchergebnis</string> + <string id="11">Suche in der IMDB...</string> + <string id="12">Die eingegebene ID ist keine gültige IMDB ID.</string> + <string id="13">Die IMDB ID ist noch nicht geprüft.</string> + <string id="14">Ohne Prüfung fortfahren?</string> + <string id="15">Zu der eingegebene IMDB ID konnten keine Informationen geholt werden. Bitte prüfe deine Eingaben.</string> + <string id="16">Prüfung fehlgeschlagen</string> + <string id="17">Teil Treffer ({0})</string> + <string id="18">Exakte Treffer({0})</string> + <string id="19">Populäre Titel ({0})</string> + <string id="20">Keine Treffer</string> + <string id="21">Schaue dir die Details an um den richtigen Film zu finden.</string> + <string id="22">Film Suchergebnis</string> + <string id="23">Man. IMDB ID:</string> + <string id="24">Prüfen</string> + <string id="25">Suche in der IMDB...</string> + <string id="26">Lade Details...</string> + <string id="27">Lade {0} herunter</string> + <string id="28">Kein Fanart für diesen Film gefunden</string> + <string id="29">Kein Fanart gefunden</string> + <string id="30">Kein Poster für diesen Film gefunden</string> + <string id="31">Kein Poster gefunden</string> + <string id="32">Lade Daten von TheMovieDB.com...</string> + <string id="33">TheMovieDB.com ist nicht aktiviert.</string> + <string id="34">Lade Daten von IMPAwards.com...</string> + <string id="35">IMPAwards.com ist nicht aktiviert.</string> + <string id="36">Lade Daten von MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com ist nicht aktiviert.</string> + <string id="38">Bereite Bilder vor...</string> + <string id="39">Wähle Poster</string> + <string id="40">Wähle Fanart</string> + <string id="41">Alle Thumbs</string> + <string id="42">Alle Mittl.</string> + <string id="43">Alle Original</string> + <string id="44">Markiertes Bild wird Fanart. Alle aktivierten werden Extrathumbs.</string> + <string id="45">Vorarbeit läuft...</string> + <string id="46">Lade gewähltes Bild...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">mittel</string> + <string id="50">klein</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover ({0}x{1})</string> + <string id="53">klein ({0}x{1})</string> + <string id="54">mittel ({0}x{1})</string> + <string id="55">Mehrfach</string> + <string id="56">Lade gewählten Trailer...</string> + <string id="57">Kopiere gewählten Trailer...</string> + <string id="58">Der Trailer konnte nicht abgespielt werden. Dies könnte an einer Fehlerhaften URL liegen oder es ist kein Player für diesen Dateityp vorhanden.</string> + <string id="59">Fehler beim Abspielen des Trailers</string> + <string id="60">Verschieben</string> + <string id="61">Kopieren</string> + <string id="62">Verschiebe gewählten Trailer...</string> + <string id="63">In NFO speichern</string> + <string id="64">Trailer wählen</string> + <string id="65">Trailer zum laden wählen</string> + <string id="66">Man. Trailer</string> + <string id="67">Direktlink oder YouTube URL:</string> + <string id="68">Stelle Trailerliste zusammen...</string> + <string id="69">Trailer Vorschau</string> + <string id="70">Lokaler Trailer:</string> + <string id="71">Die Videoformat Linkliste konnte nicht generiert werden.</string> + <string id="72">Fehler beim generieren der Videoformat Linkliste</string> + <string id="73">Format wählen</string> + <string id="74">Hole verfügbare Formate...</string> + <string id="75">Verfügbare Formate</string> + <string id="76">Es konnte kein Poster in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="77">Keine gewünschte Größe</string> + <string id="78">Es konnte kein Fanart in der gewünschten Größe gefunden werden. Wähle ein anderes.</string> + <string id="79">Keine Episoden für diese TV-Serie verfügbar. Scrape diese Serie, Staffel oder Episode und versuche es erneut.</string> + <string id="80">Keine Episoden verfügbar</string> + <string id="81">Kein Poster für diese Episode vorhanden.</string> + <string id="82">Gast Star</string> + <string id="83">Die eingegebene ID ist keine gültige TVDB ID.</string> + <string id="84">Lade Serien Informationen...</string> + <string id="85">Serien Suchergebnis</string> + <string id="86">Betrachte die Details um die richtige TV-Serie zu erkennen.</string> + <string id="87">Lade Fanart in Originalgröße...</string> + <string id="88">Lade aktuelle Bilder...</string> + <string id="89">Lade neue Bilder...</string> + <string id="90">Setze Standardwerte...</string> + <string id="91">Serien Poster</string> + <string id="92">Episoden Fanart</string> + <string id="93">Serien Fanart</string> + <string id="94">Alle-Staffeln Poster</string> + <string id="95">Staffel Posters</string> + <string id="96">Staffel Fanart</string> + <string id="97">Staffel {0} Poster</string> + <string id="98">Staffel {0} Fanart</string> + <string id="99">Bilderwahl TV-Serien</string> + <string id="100">Aktuelles Bild:</string> + <string id="101">Poster laden</string> + <string id="102">Fanart laden</string> + <string id="103">Diese Einstellungen sind Modul-spezifisch. {0} Bitte werfen sie einen blick in die Globalen Einstellungen für noch mehr Optionen.</string> + <string id="104">Ember Nativer Film Scraper</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (German)</string> + <string id="108">TMDB Extrathumbs Grösse:</string> + <string id="109">Trailer</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC Format</string> + <string id="112">Bevorzugte Sprache</string> + <string id="113">Speichere Fanart in:</string> + <string id="114">Im Browser öffnen</string> +</strings> diff --git a/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..79a98bf --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.Norwegian_(no_NO)-Help.xml @@ -0,0 +1,45 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string control="NativeMovieInfo_cbEnabled">Slå modulen av eller på.</string> + <string control="NativeMovieInfo_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieInfo_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieInfo_txtIMDBURL">Før inn speilserver til IMDB.</string> + <string control="NativeMovieInfo_chkOFDBTitle">Hvis påslått, EMM vil å prøve å finne filmtittel fra OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkOFDBOutline">Hvis påslått, EMM vil prøve å finne beskrivelse av filmen på OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkOFDBPlot">Hvis påslått, EMM vil hente filmhistorien fra OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkOFDBGenre">Hvis påslått, EMM vil hente filmsjanger fra OFDB (en tyskspråklig side) under detaljhenting.</string> + <string control="NativeMovieInfo_chkCertification">Slå på detaljhenting av filmsertifisering.</string> + <string control="NativeMovieInfo_chkTop250">Slå på detaljhenting av IMDB Top 250-plassering.</string> + <string control="NativeMovieInfo_txtGenreLimit">Begrens antall detaljhentede sjangre.</string> + <string control="NativeMovieInfo_txtActorLimit">Begrens antall skuespillere.</string> + <string control="NativeMovieInfo_chkCrew">Slå på detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått)</string> + <string control="NativeMovieInfo_chkMusicBy">Slå på detaljhenting av musikere. (Detaljhenting av fullt crew må være påslått)</string> + <string control="NativeMovieInfo_chkProducers">Slå på detaljhenting av filmprodusenter. (Detaljhenting av full crew må være påslått)</string> + <string control="NativeMovieInfo_chkWriters">Slå på detaljhenting av manusforfattere.</string> + <string control="NativeMovieInfo_chkStudio">Slå på detaljhenting av studio.</string> + <string control="NativeMovieInfo_chkRuntime">Slå på detaljhenting av filmlengde.</string> + <string control="NativeMovieInfo_chkPlot">Slå på detaljhenting av filmens historie.</string> + <string control="NativeMovieInfo_chkOutline">Slå på detaljhenting av filmens beskrivelse.</string> + <string control="NativeMovieInfo_chkGenre">Slå på detaljhenting av filmens sjanger.</string> + <string control="NativeMovieInfo_chkDirector">Slå på detaljhetning av filmens regissør.</string> + <string control="NativeMovieInfo_chkTagline">Slå på detaljhetning av filmens undertittel.</string> + <string control="NativeMovieInfo_chkCast">Slå på detaljhetning av filmens skuespillerbeholdning.</string> + <string control="NativeMovieInfo_chkVotes">Slå på detaljhetning av filmens poeng.</string> + <string control="NativeMovieInfo_chkTrailer">Slå på detaljhetning av filmens trailer URL.</string> + <string control="NativeMovieInfo_chkRating">Slå på detaljhetning av filmens aldersgrense.</string> + <string control="NativeMovieInfo_chkRelease">Slå på detaljhetning av filmens premieredato.</string> + <string control="NativeMovieInfo_chkMPAA">Slå på detaljhetning av filmens MPAA-markering.</string> + <string control="NativeMovieInfo_chkYear">Slå på detaljhetning av filmens år.</string> + <string control="NativeMovieInfo_chkTitle">Slå på detaljhetning av filmens tittel.</string> + <string control="NativeMovieMedia_cbEnabled">Slå modulen av eller på.</string> + <string control="NativeMovieMedia_btnUp">Flytt denne detaljhentermodulen opp i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieMedia_btnDown">Flytt denne detaljhentermodulen ned i rekkefølgen. (Detaljhentermoduler vil bli bruk fra toppen ned.)</string> + <string control="NativeMovieMedia_chkScrapePoster">Slå på detaljhetning av plakater i denne modulen. (Se globale plakatinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_chkScrapeFanart">Slå på detaljhetning av fankunst i denne modulen. (Se globale fankunstinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_chkUseTMDB">Slå på bildehenting fra theMovieDB.org.</string> + <string control="NativeMovieMedia_chkUseIMPA">Slå på bildehenting fra</string> + <string control="NativeMovieMedia_chkUseMPDB">Slå på bildehenting fra MoviePosterDB.com</string> + <string control="NativeMovieMedia_chkAutoThumbs">Slå på automatisk henting av ekstrakunst fra denne modulen. (Se globale ekstrakunstinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_chkDownloadTrailer">Slå på automatisk henting av trailer fra denne modulen. (Se globale trailerinnstillinger for flere valg)</string> + <string control="NativeMovieMedia_txtTimeout">Før inn tiden (i sekunder) du vil bruke for timeout for trailersider. (Hvis siden ikke svarer innen timeoutfristen, så vil den bli hoppet over)</string> + <string control="NativeMovieMedia_lbTrailerSites">Velg sidene du vil bruke til trailer URL og/eller filer.</string> +</strings> diff --git a/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.Norwegian_(no_NO).xml b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.Norwegian_(no_NO).xml new file mode 100644 index 0000000..52370c3 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Langs/scraper.EmberCore.Norwegian_(no_NO).xml @@ -0,0 +1,117 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="0">EMM TV-detaljhentere</string> + <string id="1">Bruk OFDB-sjangere</string> + <string id="2">Bruk OFDB-filmhistorie</string> + <string id="3">Bruk OFDB-beskrivelse</string> + <string id="4">Bruk OFDB-tittel</string> + <string id="5">IMDB-speilserver:</string> + <string id="6">Detaljhenterområder - Detaljhenterspesifikk</string> + <string id="7">Tidsavbrudd:</string> + <string id="8">Støttede sider:</string> + <string id="9">Hent bilder fra:</string> + <string id="10">Søkeresultater</string> + <string id="11">Søker TMDB...</string> + <string id="12">IDen du førte inn er ikke en riktig IMDB-ID.</string> + <string id="13">Du har ført inn en IMDB-ID, men har ikke verifisert om den er riktig.</string> + <string id="14">Fortsette uten verifisering?</string> + <string id="15">Kunne ikke hente filmdetaljer for den innførte IDen. Vennligst sjekk IDen og prøv igjen.</string> + <string id="16">Verifisering feilet</string> + <string id="17">Delvise treff ({0})</string> + <string id="18">Eksakte treff ({0})</string> + <string id="19">Populære titler ({0})</string> + <string id="20">Ingen funnet</string> + <string id="21">Se detaljer fra hvert treff for å finne riktig film.</string> + <string id="22">Filmsøkresultater</string> + <string id="23">Manuell IMDB innføring:</string> + <string id="24">Verifiser</string> + <string id="25">Søker TMDB...</string> + <string id="26">Laster ned detaljer...</string> + <string id="27">Laster ned {0}</string> + <string id="28">Ingen fankunst funnet for denne filmen.</string> + <string id="29">Ingen fankunst funnet</string> + <string id="30">Ingen plakater funnet for denne filmen.</string> + <string id="31">Ingen plakater funnet</string> + <string id="32">Henter data fra TheMovieDB.com...</string> + <string id="33">TheMovieDB.com er ikke påslått</string> + <string id="34">Henter data fra IMPAwards.com...</string> + <string id="35">IMPAwards.com er ikke påslått</string> + <string id="36">Henter data fra MoviePosterDB.com...</string> + <string id="37">MoviePostersDB.com er ikke påslått</string> + <string id="38">Forbereder bilder...</string> + <string id="39">Velg plakat</string> + <string id="40">Velg fankunst</string> + <string id="41">Huk av alle tommelbilder</string> + <string id="42">Huk av alle Mid</string> + <string id="43">Huk av alle originale</string> + <string id="44">Valgte objekt vil bli satt som fankunst. Alle hukede objekter vil bli lagret i \extrathumbs.</string> + <string id="45">Utfører forberedende oppgaver...</string> + <string id="46">Laster ned valgte bilde...</string> + <string id="47">Original</string> + <string id="48">Cover</string> + <string id="49">Medium</string> + <string id="50">Liten</string> + <string id="51">Original ({0}x{1})</string> + <string id="52">Cover {0}x{1}</string> + <string id="53">Liten ({0}x{1})</string> + <string id="54">Medium ({0}x{1})</string> + <string id="55">Flere</string> + <string id="56">Laster ned valgt trailer...</string> + <string id="57">Kopierer valgt fil til trailer...</string> + <string id="58">Traileren kunne ikke spilles av. Det kan være at URL ikke er gyldig, eller at du ikke har riktig avspiller for denne filtypen.</string> + <string id="59">Kunne spille av trailer.</string> + <string id="60">Flytt</string> + <string id="61">Kopiér</string> + <string id="62">Flytter valgt fil til trailer...</string> + <string id="63">Sett i nfo</string> + <string id="64">Velg trailer</string> + <string id="65">Velg trailer til å laste ned</string> + <string id="66">Manuell trailerinnføring</string> + <string id="67">Direkte link eller YouTube URL:</string> + <string id="68">Kompilerer trailerliste...</string> + <string id="69">Sniktitt på trailer</string> + <string id="70">Lokal trailer:</string> + <string id="71">Videoformatlenkene kunne ikke hentes</string> + <string id="72">Kunne ikke hente videoformatlenker</string> + <string id="73">Velg format</string> + <string id="74">Henter tilgjengelige formater...</string> + <string id="75">Tilgjengelige formater</string> + <string id="76">En plakat i din valgte størrelse kunne ikke hentes. Vennligst velg en annen.</string> + <string id="77">Ingen foretrukket størrelse</string> + <string id="78">Fankunst i din foretrukkede størrelse kunne ikke bli funnet. Vennligst velg en annen.</string> + <string id="79">Det er ingen kjente episoder for denne serien. Detaljhent serien, sesongen eller episoden og prøv på nytt.</string> + <string id="80">Ingen kjente episoder</string> + <string id="81">Det er ingen plakater for denne episoden.</string> + <string id="82">Gjesteskuespiller</string> + <string id="83">IDen du innførte er ikke en gyldig TVDB ID.</string> + <string id="84">Laster ned serieinfo...</string> + <string id="85">TVsøk-resultater</string> + <string id="86">Se detaljer fra hvert resultat for å finne riktig serie.</string> + <string id="87">Laster ned fankunst i full størrelse...</string> + <string id="88">Laster inn nåværende bilder...</string> + <string id="89">Laster (ned) nye bilder...</string> + <string id="90">Setter standarder...</string> + <string id="91">Serieplakat</string> + <string id="92">Episodefankunst</string> + <string id="93">Vis fankunst</string> + <string id="94">Alle sesonger-plakat</string> + <string id="95">Sesongplakater</string> + <string id="96">Sesongfankunst</string> + <string id="97">Sesong {0}-plakater</string> + <string id="98">Sesong {0}-fankunst</string> + <string id="99">TV-bilde valg</string> + <string id="100">Nåværende bilde:</string> + <string id="101">Hent plakater</string> + <string id="102">Hent fankunst</string> + <string id="103">Disse innstillingene er spesifikk til denne modulen.{0}Vennligst se globale innstillinger for flere valg.</string> + <string id="104">EMM film-detaljhentere</string> + <string id="105"/> + <string id="106">IMDB</string> + <string id="107">OFDB (Tysk)</string> + <string id="108">TMDB Ekstrakunst-størrelse:</string> + <string id="109">Trailere</string> + <string id="110">Youtube/TMDB Trailer:</string> + <string id="111">XBMC-format</string> + <string id="112">Foretrukket språk</string> + <string id="113">Lagre fankunst i:</string> + <string id="114">Åpne i nettleser</string> +</strings> diff --git a/Addons/scraper.YouTube.Trailer/My Project/Application.Designer.vb b/Addons/scraper.YouTube.Trailer/My Project/Application.Designer.vb new file mode 100644 index 0000000..66fb81a --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Addons/scraper.YouTube.Trailer/My Project/Application.myapp b/Addons/scraper.YouTube.Trailer/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/My Project/Application.myapp @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <MySubMain>false</MySubMain> + <SingleInstance>false</SingleInstance> + <ShutdownMode>0</ShutdownMode> + <EnableVisualStyles>true</EnableVisualStyles> + <AuthenticationMode>0</AuthenticationMode> + <ApplicationType>1</ApplicationType> + <SaveMySettingsOnExit>true</SaveMySettingsOnExit> +</MyApplicationData> diff --git a/Addons/scraper.YouTube.Trailer/My Project/AssemblyInfo.vb b/Addons/scraper.YouTube.Trailer/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..fcd3cd2 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + +<Assembly: AssemblyTitle("scraper.YouTube.Trailer")> +<Assembly: AssemblyDescription("http://forum.xbmc.org/showthread.php?tid=116941")> +<Assembly: AssemblyCompany("Ember Media Manager")> +<Assembly: AssemblyProduct("scraper.YouTube.Trailer")> +<Assembly: AssemblyCopyright("Copyright © 2013")> +<Assembly: AssemblyTrademark("")> + +<Assembly: ComVisible(False)> + +'The following GUID is for the ID of the typelib if this project is exposed to COM +<Assembly: Guid("89C794BA-A71E-455B-A732-1C1B3094E707")> + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' <Assembly: AssemblyVersion("1.0.*")> + +<Assembly: AssemblyVersion("1.3.0.11")> +<Assembly: AssemblyFileVersion("1.3.0.11")> diff --git a/Addons/scraper.YouTube.Trailer/My Project/Resources.Designer.vb b/Addons/scraper.YouTube.Trailer/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bb85827 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''<summary> + ''' A strongly-typed resource class, for looking up localized strings, etc. + '''</summary> + <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + '''<summary> + ''' Returns the cached ResourceManager instance used by this class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EmberScraperModule.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + '''<summary> + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + '''</summary> + <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Addons/scraper.YouTube.Trailer/My Project/Resources.resx b/Addons/scraper.YouTube.Trailer/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/My Project/Resources.resx @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/My Project/Settings.Designer.vb b/Addons/scraper.YouTube.Trailer/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f020222 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' <auto-generated> +' This code was generated by a tool. +' Runtime Version:4.0.30319.239 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' </auto-generated> +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ + Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _ + Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + <Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _ + Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ + Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _ + Friend Module MySettingsProperty + + <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _ + Friend ReadOnly Property Settings() As Global.EmberScraperModule.My.MySettings + Get + Return Global.EmberScraperModule.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Addons/scraper.YouTube.Trailer/My Project/Settings.settings b/Addons/scraper.YouTube.Trailer/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/My Project/Settings.settings @@ -0,0 +1,7 @@ +<?xml version='1.0' encoding='utf-8'?> +<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true"> + <Profiles> + <Profile Name="(Default)" /> + </Profiles> + <Settings /> +</SettingsFile> diff --git a/Addons/scraper.YouTube.Trailer/Resources/Logo.png b/Addons/scraper.YouTube.Trailer/Resources/Logo.png new file mode 100644 index 0000000..a89dae1 Binary files /dev/null and b/Addons/scraper.YouTube.Trailer/Resources/Logo.png differ diff --git a/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeIMDB.vb b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeIMDB.vb new file mode 100644 index 0000000..06e23c6 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeIMDB.vb @@ -0,0 +1,1126 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Globalization +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMDB + + Public Class MovieSearchResults + +#Region "Fields" + + Private _ExactMatches As New List(Of MediaContainers.Movie) + Private _PartialMatches As New List(Of MediaContainers.Movie) + Private _PopularTitles As New List(Of MediaContainers.Movie) + +#End Region 'Fields + +#Region "Properties" + + Public Property ExactMatches() As List(Of MediaContainers.Movie) + Get + Return _ExactMatches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _ExactMatches = value + End Set + End Property + + Public Property PartialMatches() As List(Of MediaContainers.Movie) + Get + Return _PartialMatches + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _PartialMatches = value + End Set + End Property + + Public Property PopularTitles() As List(Of MediaContainers.Movie) + Get + Return _PopularTitles + End Get + Set(ByVal value As List(Of MediaContainers.Movie)) + _PopularTitles = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + Public UseOFDBGenre As Boolean + Public UseOFDBOutline As Boolean + Public UseOFDBPlot As Boolean + Public UseOFDBTitle As Boolean + + Friend WithEvents bwIMDB As New System.ComponentModel.BackgroundWorker + + Private Const LINK_PATTERN As String = "<a[\s]+[^>]*?href[\s]?=[\s\""\']*(?<url>.*?)[\""\']*.*?>(?<name>[^<]+|.*?)?<\/a>" + + Private Const ACTORTABLE_PATTERN As String = "<table class=""cast"">(.*?)</table>" + Private Const HREF_PATTERN As String = "<a.*?href=[""'](?<url>.*?)[""'].*?>(?<name>.*?)</a>" + Private Const HREF_PATTERN_2 As String = "<a\shref=[""""'](?<url>.*?)[""""'].*?>(?<name>.*?)</a>" + Private Const HREF_PATTERN_3 As String = "<a href=""/search/title\?certificates=[^""]*"">([^<]*):([^<]*)</a>[^<]*(<i>([^<]*)</i>)?" + Private Const HREF_PATTERN_4 As String = "<a.*?href=[""']/(title/tt\d{7}/|name/nm\d{7}/)[""'].*?>(?<text>.*?)</a>" + Private Const IMDB_ID_REGEX As String = "tt\d\d\d\d\d\d\d" + Private Const IMG_PATTERN As String = "<img src=""(?<thumb>.*?)"" width=""\d{1,3}"" height=""\d{1,3}"" border="".{1,3}"">" + Private Const MOVIE_TITLE_PATTERN As String = "(?<=<(title)>).*(?=<\/\1>)" + Private Const TABLE_PATTERN As String = "<table.*?>\n?(.*?)</table>" + Private Const TD_PATTERN_1 As String = "<td\sclass=""nm"">(.*?)</td>" + Private Const TD_PATTERN_2 As String = "(?<=<td\sclass=""char"">)(.*?)(?=</td>)(\s\(.*?\))?" + Private Const TD_PATTERN_3 As String = "<td\sclass=""hs"">(.*?)</td>" + Private Const TD_PATTERN_4 As String = "<td>(?<title>.*?)</td>" + Private Const TITLE_PATTERN As String = "<a\shref=[""""'](?<url>.*?)[""""'].*?>(?<name>.*?)</a>((\s)+?(\((?<year>\d{4})(\/.*?)?\)))?((\s)+?(\((?<type>.*?)\)))?" + Private Const TR_PATTERN As String = "<tr\sclass="".*?"">(.*?)</tr>" + + Private sPoster As String + +#End Region 'Fields + +#Region "Enumerations" + + Private Enum SearchType + Movies = 0 + Details = 1 + SearchDetails = 2 + End Enum + +#End Region 'Enumerations + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + + Public Event SearchResultsDownloaded(ByVal mResults As IMDB.MovieSearchResults) + +#End Region 'Events + +#Region "Methods" + + Public Sub CancelAsync() + If bwIMDB.IsBusy Then bwIMDB.CancelAsync() + + While bwIMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Function GetMovieInfo(ByVal strID As String, ByRef IMDBMovie As MediaContainers.Movie, ByVal FullCrew As Boolean, ByVal FullCast As Boolean, ByVal GetPoster As Boolean, ByVal Options As Structures.ScrapeOptions, ByVal IsSearch As Boolean) As Boolean + Try + Dim ofdbTitle As String = String.Empty + Dim ofdbOutline As String = String.Empty + Dim ofdbPlot As String = String.Empty + Dim ofdbGenre As String = String.Empty + + If bwIMDB.CancellationPending Then Return Nothing + + If (UseOFDBTitle AndAlso Options.bTitle) OrElse (UseOFDBOutline AndAlso Options.bOutline) OrElse _ + (UseOFDBPlot AndAlso Options.bPlot) OrElse (UseOFDBGenre AndAlso Options.bGenre) Then + Dim OFDBScrape As New OFDB(strID, IMDBMovie) + If UseOFDBTitle AndAlso Options.bTitle Then ofdbTitle = OFDBScrape.Title + If UseOFDBOutline AndAlso Options.bOutline Then ofdbOutline = OFDBScrape.Outline + If UseOFDBPlot AndAlso Options.bPlot Then ofdbPlot = OFDBScrape.Plot + If UseOFDBGenre AndAlso Options.bGenre Then ofdbGenre = OFDBScrape.Genre + End If + + If bwIMDB.CancellationPending Then Return Nothing + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/combined")) + sHTTP = Nothing + + If bwIMDB.CancellationPending Then Return Nothing + + Dim sPlot As New HTTP + Dim PlotHtml As String = sPlot.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/plotsummary")) + sPlot = Nothing + + IMDBMovie.IMDBID = strID + + If bwIMDB.CancellationPending Then Return Nothing + + Dim OriginalTitle As String = Regex.Match(HTML, MOVIE_TITLE_PATTERN).ToString + If Options.bTitle Then + Dim oldOTitle As String = IMDBMovie.OriginalTitle + IMDBMovie.OriginalTitle = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(OriginalTitle, ".*(?=\s\(\d+.*?\))").ToString)).Trim + If String.IsNullOrEmpty(IMDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + If Not String.IsNullOrEmpty(ofdbTitle) Then + IMDBMovie.Title = ofdbTitle.Trim + Else + If Not String.IsNullOrEmpty(Master.eSettings.ForceTitle) Then + IMDBMovie.Title = GetForcedTitle(strID, IMDBMovie.OriginalTitle) + Else + IMDBMovie.Title = IMDBMovie.OriginalTitle.Trim + End If + End If + If String.IsNullOrEmpty(oldOTitle) OrElse Not oldOTitle = IMDBMovie.OriginalTitle Then + IMDBMovie.SortTitle = String.Empty + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If GetPoster Then + sPoster = Regex.Match(Regex.Match(HTML, "(?<=\b(name=""poster"")).*\b[</a>]\b").ToString, "(?<=\b(src=)).*\b(?=[</a>])").ToString.Replace("""", String.Empty).Replace("/></", String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bYear Then IMDBMovie.Year = Regex.Match(OriginalTitle, "(?<=\()\d+(?=.*\))", RegexOptions.RightToLeft).ToString + + Dim D, W, tempD As Integer + + If Options.bMPAA AndAlso (String.IsNullOrEmpty(IMDBMovie.MPAA) OrElse Not Master.eSettings.LockMPAA) Then + tempD = If(HTML.IndexOf("<h5><a href=""/mpaa"">MPAA</a>:</h5>") > 0, HTML.IndexOf("<h5><a href=""/mpaa"">MPAA</a>:</h5>"), 0) + + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + + W = If(D > 0, HTML.IndexOf("</div", D), 0) + + IMDBMovie.MPAA = If(D > 0 AndAlso W > 0, Web.HttpUtility.HtmlDecode(HTML.Substring(D, W - D).Remove(0, 26)).Trim(), String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bCert AndAlso (String.IsNullOrEmpty(IMDBMovie.Certification) OrElse Not Master.eSettings.LockMPAA) Then + 'get certifications + D = HTML.IndexOf("<h5>Certification:</h5>") + + If D > 0 Then + W = HTML.IndexOf("</div>", D) + Dim rCert As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN_3) + + If rCert.Count > 0 Then + Dim Cert = From M In rCert Select N = String.Format("{0}:{1}", DirectCast(M, Match).Groups(1).ToString.Trim, DirectCast(M, Match).Groups(2).ToString.Trim) Order By N Descending Where N.Contains(Master.eSettings.CertificationLang) + + If Not String.IsNullOrEmpty(Master.eSettings.CertificationLang) Then + If Cert.Count > 0 Then + IMDBMovie.Certification = Cert(0).ToString.Replace("West", String.Empty).Trim + If Options.bMPAA AndAlso Master.eSettings.UseCertForMPAA AndAlso (Not Master.eSettings.CertificationLang = "USA" OrElse (Master.eSettings.CertificationLang = "USA" AndAlso String.IsNullOrEmpty(IMDBMovie.MPAA))) Then + IMDBMovie.MPAA = If(Master.eSettings.CertificationLang = "USA", StringUtils.USACertToMPAA(IMDBMovie.Certification), If(Master.eSettings.OnlyValueForCert, IMDBMovie.Certification.Split(Convert.ToChar(":"))(1), IMDBMovie.Certification)) + End If + + + Else + 'No FSK Rating was found -> Alternative: Set USA Rating instead as fallback, MPAA will be converted to FSK, Certification from USA will be used, so people can see that US info was used! + If Master.eSettings.UseMPAAForFSK Then + Try + If Master.eSettings.CertificationLang = "Germany" AndAlso (IMDBMovie.MPAA.ToLower.Contains("usa") Or IMDBMovie.MPAA.ToLower.Contains("rated")) Then + Dim LANGRATING As String = "USA" + Dim Cert2 = From M In rCert Select N = String.Format("{0}:{1}", DirectCast(M, Match).Groups(1).ToString.Trim, DirectCast(M, Match).Groups(2).ToString.Trim) Order By N Descending Where N.Contains(LANGRATING) + If Cert2.Count > 0 Then + IMDBMovie.Certification = Cert2(0).ToString.Replace("West", String.Empty).Trim + If Options.bMPAA AndAlso Master.eSettings.UseCertForMPAA Then + If IMDBMovie.MPAA.ToLower.Contains("usa:g") Or IMDBMovie.MPAA.ToLower.Contains("rated g") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:0" + Else + IMDBMovie.MPAA = "0" + End If + + ElseIf IMDBMovie.MPAA.ToLower.Contains("usa:pg-13") Or IMDBMovie.MPAA.ToLower.Contains("rated pg-13") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:16" + Else + IMDBMovie.MPAA = "16" + End If + + ElseIf IMDBMovie.MPAA.ToLower.Contains("usa:pg") Or IMDBMovie.MPAA.ToLower.Contains("rated pg") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:12" + Else + IMDBMovie.MPAA = "12" + End If + + ElseIf IMDBMovie.Certification.ToLower.Contains("usa:r") Or IMDBMovie.Certification.ToLower.Contains("rated r") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:18" + Else + IMDBMovie.MPAA = "18" + End If + + ElseIf IMDBMovie.Certification.ToLower.Contains("usa:nc-17") Or IMDBMovie.Certification.ToLower.Contains("rated nc") Then + IMDBMovie.Certification = IMDBMovie.MPAA + If Master.eSettings.OnlyValueForCert = False Then + IMDBMovie.MPAA = "Germany:18" + Else + IMDBMovie.MPAA = "18" + End If + + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End If + End If + + + Else + + IMDBMovie.Certification = Strings.Join(Cert.ToArray, " / ").Trim + + + End If + End If + End If + + If String.IsNullOrEmpty(IMDBMovie.Certification) AndAlso Not String.IsNullOrEmpty(IMDBMovie.MPAA) Then + IMDBMovie.Certification = IMDBMovie.MPAA + End If + + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bRelease Then + Dim RelDate As Date + Dim sRelDate As String = Regex.Match(HTML, "\d+\s\w+\s\d\d\d\d\s").ToString.Trim + If Not sRelDate = String.Empty Then + If Date.TryParse(sRelDate, RelDate) Then + IMDBMovie.ReleaseDate = Strings.FormatDateTime(RelDate, DateFormat.ShortDate).ToString + End If + Else + IMDBMovie.ReleaseDate = Nothing + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bRating AndAlso (String.IsNullOrEmpty(IMDBMovie.Rating) OrElse Not Master.eSettings.LockRating) Then + Dim RegexRating As String = Regex.Match(HTML, "\b\d\W\d/\d\d").ToString + If String.IsNullOrEmpty(RegexRating) Then + IMDBMovie.Rating = String.Empty + Else + IMDBMovie.Rating = RegexRating.Split(Convert.ToChar("/")).First.Trim + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'trailer + If Options.bTrailer AndAlso (String.IsNullOrEmpty(IMDBMovie.Trailer) OrElse Not Master.eSettings.LockTrailer) Then + 'Get first IMDB trailer if possible + Dim trailers As List(Of String) = GetTrailers(IMDBMovie.IMDBID) + 'Dim TMDB As New TMDB.Scraper + 'Dim YT As String = TMDB.GetTrailers(IMDBMovie.IMDBID) + + 'Dim sTrailerUrl As String = Regex.Match(HTML, "href=""(.*?/video/imdb/vi.*?)""").Groups(1).Value.Trim + 'If Not sTrailerUrl = String.Empty Then + 'Dim sTrailerURL2 As String = String.Empty + 'sTrailerUrl = String.Concat("http://", IMDBURL, sTrailerUrl, "player") + 'Dim HTTPTrailer As New HTTP + 'Dim HtmlTrailer As String = HTTPTrailer.DownloadData(sTrailerUrl) + 'HTTPTrailer = Nothing + + 'sTrailerUrl = Regex.Match(HtmlTrailer, "so.addVariable\(""id"", ""(.*?)""\);").Groups(1).Value.Trim + 'If sTrailerUrl = String.Empty Then + 'sTrailerURL2 = Regex.Match(HtmlTrailer, "so.addVariable\(""file"", ""(.*?)""\);").Groups(1).Value.Trim + 'Else + 'sTrailerURL2 = String.Concat(Regex.Match(HtmlTrailer, "so.addVariable\(""file"", ""(.*?)""\);").Groups(1).Value.Trim, sTrailerUrl) + 'End If + 'IMDBMovie.Trailer = Web.HttpUtility.UrlDecode(sTrailerURL2) + 'End If + IMDBMovie.Trailer = trailers.FirstOrDefault() + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bVotes Then IMDBMovie.Votes = Regex.Match(HTML, "class=""tn15more"">([0-9,]+) votes</a>").Groups(1).Value.Trim + + 'Top250 + 'ie: <a href="/chart/top?tt0167260">Top 250: #13</a> + If Options.bTop250 Then IMDBMovie.Top250 = Regex.Match(HTML, String.Concat("/chart/top\?tt", IMDBMovie.IMDBID, """>Top 250: #([0-9]+)</a>")).Groups(1).Value.Trim + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bCast Then + 'Find all cast of the movie + 'Match the table only 1 time + Dim ActorsTable As String = Regex.Match(HTML, ACTORTABLE_PATTERN).ToString + Dim ThumbsSize = AdvancedSettings.GetSetting("ActorThumbsSize", "SY275_SX400") + + Dim rCast As MatchCollection = Regex.Matches(ActorsTable, TR_PATTERN) + + Dim Cast1 = From M In rCast _ + Let m1 = Regex.Match(Regex.Match(M.ToString, TD_PATTERN_1).ToString, HREF_PATTERN) _ + Let m2 = Regex.Match(M.ToString, TD_PATTERN_2).ToString _ + Let m3 = Regex.Match(Regex.Match(M.ToString, TD_PATTERN_3).ToString, IMG_PATTERN) _ + Select New MediaContainers.Person(Web.HttpUtility.HtmlDecode(m1.Groups("name").ToString.Trim), _ + Web.HttpUtility.HtmlDecode(m2.ToString.Trim), _ + If(m3.Groups("thumb").ToString.IndexOf("addtiny") > 0 OrElse m3.Groups("thumb").ToString.IndexOf("no_photo") > 0, String.Empty, Strings.Replace(Web.HttpUtility.HtmlDecode(m3.Groups("thumb").ToString.Trim), _ + "._SX23_SY30_.jpg", String.Concat("._", ThumbsSize, "_.jpg")))) Take If(Master.eSettings.ActorLimit > 0, Master.eSettings.ActorLimit, 999999) + + If Master.eSettings.CastImagesOnly Then + Cast1 = Cast1.Where(Function(p As MediaContainers.Person) (Not String.IsNullOrEmpty(p.Thumb))) + End If + + Dim Cast As List(Of MediaContainers.Person) = Cast1.ToList + + 'Clean up the actors list + For Each Ps As MediaContainers.Person In Cast + For Each sMatch As Match In Regex.Matches(Ps.Role, HREF_PATTERN) + Ps.Role = Ps.Role.Replace(sMatch.Value, sMatch.Groups("name").Value.ToString.Trim) + Next + ' Dim a_patterRegex = Regex.Match(Ps.Role, HREF_PATTERN) + ' If a_patterRegex.Success Then Ps.Role = a_patterRegex.Groups("name").ToString.Trim + Next + + IMDBMovie.Actors = Cast + End If + + If bwIMDB.CancellationPending Then Return Nothing + + D = 0 : W = 0 + + If Options.bTagline AndAlso (String.IsNullOrEmpty(IMDBMovie.Tagline) OrElse Not Master.eSettings.LockTagline) Then + + tempD = If(HTML.IndexOf("<h5>Tagline:</h5>") > 0, HTML.IndexOf("<h5>Tagline:</h5>"), 0) + + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + + Dim lHtmlIndexOf As Integer = If(D > 0, HTML.IndexOf("<a class=""tn15more inline""", D), 0) + Dim TagLineEnd As Integer = If(lHtmlIndexOf > 0, lHtmlIndexOf, 0) + If D > 0 Then W = If(TagLineEnd > 0, TagLineEnd, HTML.IndexOf("</div>", D)) + + IMDBMovie.Tagline = If(D > 0 AndAlso W > 0, Web.HttpUtility.HtmlDecode(HTML.Substring(D, W - D).Replace("<h5>Tagline:</h5>", String.Empty).Split(vbCrLf.ToCharArray)(1)).Trim, String.Empty) + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bDirector Then + 'Get the directors + D = If(HTML.IndexOf("<h5>Director:</h5>") > 0, HTML.IndexOf("<h5>Director:</h5>"), HTML.IndexOf("<h5>Directors:</h5>")) + W = If(D > 0, HTML.IndexOf("</div>", D), 0) + 'got any director(s) ? + If D > 0 AndAlso Not W <= 0 Then + 'get only the first director's name + Dim rDir As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + Dim Dir = From M In rDir Where Not DirectCast(M, Match).Groups("name").ToString.Contains("more") _ + Select Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + + If Dir.Count > 0 Then + IMDBMovie.Director = Strings.Join(Dir.ToArray, " / ").Trim + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get countries of the movie + If Options.bCountry Then + 'Get the countries + D = If(HTML.IndexOf("<h5>Country:</h5>") > 0, HTML.IndexOf("<h5>Country:</h5>"), HTML.IndexOf("<h5>Countries:</h5>")) + W = If(D > 0, HTML.IndexOf("</div>", D), 0) + 'got any country ? + If D > 0 AndAlso Not W <= 0 Then + 'get only the first country's name + Dim rCou As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + Dim Cou = From M In rCou Where Not DirectCast(M, Match).Groups("name").ToString.Contains("more") _ + Select Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + + If Cou.Count > 0 Then + + 'fix for display country flag in XBMC! + If Strings.Join(Cou.ToArray, " / ").Trim.ToUpper.Contains("USA") Then + IMDBMovie.Country = "United States of America" + ElseIf Strings.Join(Cou.ToArray, " / ").Trim.ToUpper.Contains("UK") Then + IMDBMovie.Country = "United Kingdom" + Else + IMDBMovie.Country = Strings.Join(Cou.ToArray, " / ").Trim() + End If + + End If + End If + + + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get genres of the movie + If Options.bGenre AndAlso (String.IsNullOrEmpty(IMDBMovie.Genre) OrElse Not Master.eSettings.LockGenre) Then + If Not String.IsNullOrEmpty(ofdbGenre) Then + IMDBMovie.Genre = ofdbGenre + Else + D = 0 : W = 0 + D = HTML.IndexOf("<h5>Genre:</h5>") + 'Check if doesnt find genres + If D > 0 Then + W = HTML.IndexOf("</div>", D) + + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) + + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) Where Not N.Contains("more") Take If(Master.eSettings.GenreLimit > 0, Master.eSettings.GenreLimit, 999999) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + tGenre = StringUtils.GenreFilter(tGenre) + If Not String.IsNullOrEmpty(tGenre) Then + IMDBMovie.Genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + If Options.bOutline AndAlso (String.IsNullOrEmpty(IMDBMovie.Outline) OrElse Not Master.eSettings.LockOutline) Then + + If Not String.IsNullOrEmpty(ofdbOutline) Then + IMDBMovie.Outline = ofdbOutline + Else + 'Get the Plot Outline + D = 0 : W = 0 + + Try + If IMDBMovie.Title.Contains("(VG)") Then + D = If(HTML.IndexOf("<h5>Plot Summary:</h5>") > 0, HTML.IndexOf("<h5>Plot Summary:</h5>"), HTML.IndexOf("<h5>Tagline:</h5>")) + If D > 0 Then W = HTML.IndexOf("</div>", D) + Else + tempD = If(HTML.IndexOf("<h5>Plot:</h5>") > 0, HTML.IndexOf("<h5>Plot:</h5>"), HTML.IndexOf("<h5>Plot Summary:</h5>")) + D = If(tempD > 0, HTML.IndexOf("<div class=""info-content"">", tempD), 0) + If D <= 0 Then D = HTML.IndexOf("<h5>Plot Synopsis:</h5>") + If D > 0 Then + W = HTML.IndexOf("<a class=", D) + If W > 0 Then + W = HTML.IndexOf("</div>", D) + Else + IMDBMovie.Outline = String.Empty + GoTo mplot + End If + Else + IMDBMovie.Outline = String.Empty + GoTo mPlot 'This plot synopsis is empty + End If + End If + Dim PlotOutline As String = HTML.Substring(D, W - D).Remove(0, 26) + + PlotOutline = Web.HttpUtility.HtmlDecode(If(PlotOutline.Contains("is empty") OrElse PlotOutline.Contains("View full synopsis") _ + , String.Empty, PlotOutline.Replace("|", String.Empty).Replace("»", String.Empty)).Trim) + 'check if outline has links to other IMDB entry + If Not String.IsNullOrEmpty(PlotOutline) Then + For Each rMatch As Match In Regex.Matches(PlotOutline, HREF_PATTERN_4) + PlotOutline = PlotOutline.Replace(rMatch.Value, rMatch.Groups("text").Value.Trim) + Next + IMDBMovie.Outline = Regex.Replace(PlotOutline, HREF_PATTERN, String.Empty).Trim + Else + IMDBMovie.Outline = String.Empty + End If + + Catch ex As Exception + IMDBMovie.Outline = String.Empty + End Try + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + +mPlot: + 'Get the full Plot + If Options.bPlot AndAlso (String.IsNullOrEmpty(IMDBMovie.Plot) OrElse Not Master.eSettings.LockPlot) Then + If Not String.IsNullOrEmpty(ofdbPlot) Then + IMDBMovie.Plot = ofdbPlot + Else + Dim FullPlotP As String = Regex.Match(PlotHtml, "<p class=.plotpar.>(.*?)</p>", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline).Groups(1).Value.ToString.Trim + Dim FullPlotI As String = Regex.Match(PlotHtml, "<p class=.plotpar.>(.*?)<i>", RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline).Groups(1).Value.ToString.Trim + Dim FullPlot As String = If(FullPlotI.Length < FullPlotP.Length, FullPlotI, FullPlotP) + If Not String.IsNullOrEmpty(FullPlot) Then + For Each rMatch As Match In Regex.Matches(FullPlot, HREF_PATTERN_4) + FullPlot = FullPlot.Replace(rMatch.Value, rMatch.Groups("text").Value.Trim) + Next + IMDBMovie.Plot = Web.HttpUtility.HtmlDecode(FullPlot.Replace("|", String.Empty)).Trim + End If + + End If + + If Master.eSettings.OutlineForPlot AndAlso String.IsNullOrEmpty(IMDBMovie.Plot) AndAlso Not String.IsNullOrEmpty(IMDBMovie.Outline) Then + IMDBMovie.Plot = IMDBMovie.Outline + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get the movie duration + If Options.bRuntime Then IMDBMovie.Runtime = Web.HttpUtility.HtmlDecode(Regex.Match(HTML, "<h5>Runtime:</h5>[^0-9]*([^<]*)").Groups(1).Value.Trim) + + 'Get Production Studio + If Options.bStudio AndAlso (String.IsNullOrEmpty(IMDBMovie.Studio) OrElse Not Master.eSettings.LockStudio) Then + D = 0 : W = 0 + If FullCrew Then + D = HTML.IndexOf("<b class=""blackcatheader"">Production Companies</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + 'only get the first one + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(P1, Match).Groups("name").ToString = String.Empty _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) Take 1 + IMDBMovie.Studio = Ps(0).ToString.Trim + End If + Else + D = HTML.IndexOf("<h5>Company:</h5>") + If D > 0 Then W = HTML.IndexOf("</div>", D) + If D > 0 AndAlso W > 0 Then + IMDBMovie.Studio = Web.HttpUtility.HtmlDecode(Regex.Match(HTML.Substring(D, W - D), HREF_PATTERN).Groups("name").ToString.Trim) + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get Writers + If Options.bWriters Then + D = 0 : W = 0 + D = HTML.IndexOf("<h5>Writer") + If D > 0 Then W = HTML.IndexOf("</div>", D) + If D > 0 AndAlso W > 0 Then + Dim q = From M In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(M, Match).Groups("name").ToString.Trim = "more" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim = "(more)" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim = "WGA" _ + AndAlso Not DirectCast(M, Match).Groups("name").ToString.Trim.Contains("see more") _ + Select Writer = Web.HttpUtility.HtmlDecode(String.Concat(DirectCast(M, Match).Groups("name").ToString, If(FullCrew, " (writer)", String.Empty))) + + If q.Count > 0 Then + IMDBMovie.OldCredits = Strings.Join(q.ToArray, " / ").Trim + End If + End If + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Get All Other Info + If FullCrew Then + + D = 0 : W = 0 + D = HTML.IndexOf("Directed by</a></h5>") + If D > 0 Then W = HTML.IndexOf("</body>", D) + If D > 0 AndAlso W > 0 Then + Dim qTables As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), TABLE_PATTERN) + + For Each M As Match In qTables + + If bwIMDB.CancellationPending Then Return Nothing + + 'Producers + If Options.bProducers AndAlso M.ToString.Contains("Produced by</a></h5>") Then + Dim Pr = From Po In Regex.Matches(M.ToString, "<td\svalign=""top"">(.*?)</td>") _ + Where Not Po.ToString.Contains(String.Concat("http://", IMDBURL, "/Glossary/")) _ + Let P1 = Regex.Match(Po.ToString, HREF_PATTERN_2) _ + Where Not String.IsNullOrEmpty(P1.Groups("name").ToString) _ + Select Producer = Web.HttpUtility.HtmlDecode(String.Concat(P1.Groups("name").ToString, " (producer)")) + + If Pr.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Pr.ToArray, " / ").Trim) + End If + End If + + 'Music by + If Options.bMusicBy AndAlso M.ToString.Contains("Original Music by</a></h5>") Then + Dim Mu = From Mo In Regex.Matches(M.ToString, "<td\svalign=""top"">(.*?)</td>") _ + Let M1 = Regex.Match(Mo.ToString, HREF_PATTERN) _ + Where Not String.IsNullOrEmpty(M1.Groups("name").ToString) _ + Select Musician = Web.HttpUtility.HtmlDecode(String.Concat(M1.Groups("name").ToString, " (music by)")) + + If Mu.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Mu.ToArray, " / ").Trim) + End If + End If + + Next + End If + + If bwIMDB.CancellationPending Then Return Nothing + + 'Special Effects + If Options.bOtherCrew Then + D = HTML.IndexOf("<b class=""blackcatheader"">Special Effects</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not String.IsNullOrEmpty(DirectCast(P1, Match).Groups("name").ToString) _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) + If Ps.Count > 0 Then + IMDBMovie.OldCredits = String.Concat(IMDBMovie.OldCredits, " / ", Strings.Join(Ps.ToArray, " / ").Trim) + End If + End If + End If + End If + + Return True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Function GetMovieStudios(ByVal strID As String) As List(Of String) + Dim alStudio As New List(Of String) + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/combined")) + sHTTP = Nothing + + Dim D, W As Integer + + D = HTML.IndexOf("<b class=""blackcatheader"">Production Companies</b>") + If D > 0 Then W = HTML.IndexOf("</ul>", D) + If D > 0 AndAlso W > 0 Then + Dim Ps = From P1 In Regex.Matches(HTML.Substring(D, W - D), HREF_PATTERN) _ + Where Not DirectCast(P1, Match).Groups("name").ToString = String.Empty _ + Select Studio = Web.HttpUtility.HtmlDecode(DirectCast(P1, Match).Groups("name").ToString) + alStudio.AddRange(Ps.ToArray) + End If + + Return alStudio + End Function + + Public Function GetSearchMovieInfo(ByVal sMovieName As String, ByRef dbMovie As Structures.DBMovie, ByVal iType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As MediaContainers.Movie + Dim r As MovieSearchResults = SearchMovie(sMovieName) + Dim b As Boolean = False + Dim imdbMovie As MediaContainers.Movie = dbMovie.Movie + + 'r.PopularTitles.Sort() + 'r.ExactMatches.Sort() + 'r.PartialMatches.Sort() + + Try + Select Case iType + Case Enums.ScrapeType.FullAsk, Enums.ScrapeType.UpdateAsk, Enums.ScrapeType.NewAsk, Enums.ScrapeType.MarkAsk, Enums.ScrapeType.FilterAsk + + If r.ExactMatches.Count = 1 Then 'AndAlso r.PopularTitles.Count = 0 AndAlso r.PartialMatches.Count = 0 Then 'redirected to imdb info page + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count = 1 AndAlso r.PopularTitles(0).Lev <= 5 Then + b = GetMovieInfo(r.PopularTitles.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.ExactMatches.Count = 1 AndAlso r.ExactMatches(0).Lev <= 5 Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + Else + Master.tmpMovie.Clear() + Using dIMDB As New dlgIMDBSearchResults + dIMDB.IMDBURL = IMDBURL + If dIMDB.ShowDialog(r, sMovieName) = Windows.Forms.DialogResult.OK Then + If String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + b = False + Else + b = GetMovieInfo(Master.tmpMovie.IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + Else + b = False + End If + End Using + End If + Case Enums.ScrapeType.FullAuto, Enums.ScrapeType.UpdateAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.SingleScrape, Enums.ScrapeType.FilterAuto + + 'check if ALL results are over lev value + Dim useAnyway As Boolean = False + If ((r.PopularTitles.Count > 0 AndAlso r.PopularTitles(0).Lev > 5) OrElse r.PopularTitles.Count = 0) AndAlso _ + ((r.ExactMatches.Count > 0 AndAlso r.ExactMatches(0).Lev > 5) OrElse r.ExactMatches.Count = 0) AndAlso _ + ((r.PartialMatches.Count > 0 AndAlso r.PartialMatches(0).Lev > 5) OrElse r.PartialMatches.Count = 0) Then + useAnyway = True + End If + Dim exactHaveYear As Integer = FindYear(dbMovie.Filename, r.ExactMatches) + Dim popularHaveYear As Integer = FindYear(dbMovie.Filename, r.PopularTitles) + 'it seems "popular matches" is a better result than "exact matches" ..... nope + 'If r.ExactMatches.Count = 1 AndAlso r.PopularTitles.Count = 0 AndAlso r.PartialMatches.Count = 0 Then 'redirected to imdb info page + ' b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf (popularHaveYear >= 0 OrElse exactHaveYear = -1) AndAlso r.PopularTitles.Count > 0 AndAlso (r.PopularTitles(If(popularHaveYear >= 0, popularHaveYear, 0)).Lev <= 5 OrElse useAnyway) Then + ' b = GetMovieInfo(r.PopularTitles.Item(If(popularHaveYear >= 0, popularHaveYear, 0)).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf r.ExactMatches.Count > 0 AndAlso (r.ExactMatches(If(exactHaveYear >= 0, exactHaveYear, 0)).Lev <= 5 OrElse useAnyway) Then + ' b = GetMovieInfo(r.ExactMatches.Item(If(exactHaveYear >= 0, exactHaveYear, 0)).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'ElseIf r.PartialMatches.Count > 0 Then + ' b = GetMovieInfo(r.PartialMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + 'End If + If r.ExactMatches.Count = 1 Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.ExactMatches.Count > 1 AndAlso exactHaveYear >= 0 Then + b = GetMovieInfo(r.ExactMatches.Item(exactHaveYear).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count > 0 AndAlso popularHaveYear >= 0 Then + b = GetMovieInfo(r.PopularTitles.Item(popularHaveYear).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCrew, False, Options, True) + ElseIf r.ExactMatches.Count > 0 AndAlso (r.ExactMatches(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.ExactMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PopularTitles.Count > 0 AndAlso (r.PopularTitles(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.PopularTitles.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + ElseIf r.PartialMatches.Count > 0 AndAlso (r.PartialMatches(0).Lev <= 5 OrElse useAnyway) Then + b = GetMovieInfo(r.PartialMatches.Item(0).IMDBID, imdbMovie, Master.eSettings.FullCrew, Master.eSettings.FullCast, False, Options, True) + End If + End Select + + If b Then + Return imdbMovie + Else + Return New MediaContainers.Movie + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New MediaContainers.Movie + End Try + End Function + + Private Function FindYear(ByVal tmpname As String, ByVal lst As List(Of MediaContainers.Movie)) As Integer + Dim tmpyear As String = "" + Dim i As Integer + Dim ret As Integer = -1 + tmpname = Path.GetFileNameWithoutExtension(tmpname) + tmpname = tmpname.Replace(".", " ").Trim.Replace("(", " ").Replace(")", "").Trim + i = tmpname.LastIndexOf(" ") + If i >= 0 Then + tmpyear = tmpname.Substring(i + 1, tmpname.Length - i - 1) + If IsNumeric(tmpyear) AndAlso Convert.ToInt32(tmpyear) > 1950 Then 'let's assume there are no movies older then 1950 + For c = 0 To lst.Count - 1 + If lst(c).Year = tmpyear Then + ret = c + Exit For + End If + Next + End If + End If + Return ret + End Function + + Public Sub GetSearchMovieInfoAsync(ByVal imdbID As String, ByVal IMDBMovie As MediaContainers.Movie, ByVal Options As Structures.ScrapeOptions) + Try + If Not bwIMDB.IsBusy Then + bwIMDB.WorkerReportsProgress = False + bwIMDB.WorkerSupportsCancellation = True + bwIMDB.RunWorkerAsync(New Arguments With {.Search = SearchType.SearchDetails, _ + .Parameter = imdbID, .IMDBMovie = IMDBMovie, .Options = Options}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + + Public Sub SearchMovieAsync(ByVal sMovie As String, ByVal filterOptions As Structures.ScrapeOptions) + Try + If Not bwIMDB.IsBusy Then + bwIMDB.WorkerReportsProgress = False + bwIMDB.WorkerSupportsCancellation = True + bwIMDB.RunWorkerAsync(New Arguments With {.Search = SearchType.Movies, .Parameter = sMovie, .Options = filterOptions}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + Try + Select Case Args.Search + Case SearchType.Movies + Dim r As MovieSearchResults = SearchMovie(Args.Parameter) + e.Result = New Results With {.ResultType = SearchType.Movies, .Result = r} + Case SearchType.SearchDetails + Dim s As Boolean = GetMovieInfo(Args.Parameter, Args.IMDBMovie, False, False, True, Args.Options, True) + e.Result = New Results With {.ResultType = SearchType.SearchDetails, .Success = s} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub BW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMDB.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.ResultType + Case SearchType.Movies + RaiseEvent SearchResultsDownloaded(DirectCast(Res.Result, MovieSearchResults)) + Case SearchType.SearchDetails + Dim movieInfo As MovieSearchResults = DirectCast(Res.Result, MovieSearchResults) + RaiseEvent SearchMovieInfoDownloaded(sPoster, Res.Success) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Function GetForcedTitle(ByVal strID As String, ByVal oTitle As String) As String + Dim fTitle As String = oTitle + + Try + If bwIMDB.CancellationPending Then Return Nothing + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", strID, "/releaseinfo#akas")) + sHTTP = Nothing + + Dim D, W As Integer + + D = HTML.IndexOf("<h5><a name=""akas"">Also Known As (AKA)</a></h5>") + + If D > 0 Then + W = HTML.IndexOf("</table>", D) + Dim rTitles As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), TD_PATTERN_4, RegexOptions.Multiline Or RegexOptions.IgnorePatternWhitespace) + + If rTitles.Count > 0 Then + For i As Integer = 1 To rTitles.Count - 1 Step 2 + If rTitles(i).Value.ToString.Contains(Master.eSettings.ForceTitle) AndAlso Not rTitles(i).Value.ToString.Contains(String.Concat(Master.eSettings.ForceTitle, " (working title)")) AndAlso Not rTitles(i).Value.ToString.Contains(String.Concat(Master.eSettings.ForceTitle, " (fake working title)")) Then + fTitle = CleanTitle(Web.HttpUtility.HtmlDecode(rTitles(i - 1).Groups("title").Value.ToString.Trim)) + Exit For + End If + Next + End If + + End If + + Return fTitle + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return fTitle + End Try + End Function + + Private Function GetMovieID(ByVal strObj As String) As String + Return Regex.Match(strObj, IMDB_ID_REGEX).ToString.Replace("tt", String.Empty) + End Function + + Private Function SearchMovie(ByVal sMovie As String) As MovieSearchResults + Try + + Dim D, W As Integer + Dim R As New MovieSearchResults + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft")) + Dim HTMLp As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&ref_=fn_tt_pop")) + Dim HTMLm As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&ref_=fn_ft")) + Dim HTMLe As String = sHTTP.DownloadData(String.Concat("http://", IMDBURL, "/find?q=", Web.HttpUtility.UrlEncode(sMovie), "&s=tt&ttype=ft&exact=true&ref_=fn_tt_ex")) + Dim rUri As String = sHTTP.ResponseUri + sHTTP = Nothing + + 'Check if we've been redirected straight to the movie page + If Regex.IsMatch(rUri, IMDB_ID_REGEX) Then + Dim lNewMovie As MediaContainers.Movie = New MediaContainers.Movie(Regex.Match(rUri, IMDB_ID_REGEX).ToString, _ + StringUtils.ProperCase(sMovie), Regex.Match(Regex.Match(HTML, MOVIE_TITLE_PATTERN).ToString, "(?<=\()\d+(?=.*\))").ToString, 0) + R.ExactMatches.Add(lNewMovie) + Return R + End If + + 'popular titles + D = HTMLp.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mPartial + W = HTMLp.IndexOf("</table>", D) + 8 + + Dim Table As String = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString + + Dim qPopular = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.PopularTitles = qPopular.ToList +mPartial: + + D = HTMLm.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mExact + W = HTMLm.IndexOf("</table>", D) + 8 + + Table = Regex.Match(HTMLm.Substring(D, W - D), TABLE_PATTERN).ToString + Dim qpartial = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.PartialMatches = qpartial.ToList + 'mApprox: + + ' 'Now process "Approx Matches" and merge both Partial and Approx matches + ' D = HTML.IndexOf("Titles (Approx Matches)") + ' If D <= 0 Then GoTo mExact + ' W = HTML.IndexOf("</table>", D) + 8 + + ' Table = Regex.Match(HTML.Substring(D, W - D), TABLE_PATTERN).ToString + + ' Dim qApprox = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + ' Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + ' Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + ' Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + ' If Not IsNothing(R.PartialMatches) Then + ' R.PartialMatches = R.PartialMatches.Union(qApprox.ToList).ToList + ' Else + ' R.PartialMatches = qApprox.ToList + ' End If + +mExact: + + D = HTMLe.IndexOf("</a>Titles</h3>") + If D <= 0 Then GoTo mResult + W = HTMLe.IndexOf("</table>", D) + 8 + + Table = String.Empty + Table = Regex.Match(HTMLe.Substring(D, W - D), TABLE_PATTERN).ToString + + Dim qExact = From Mtr In Regex.Matches(Table, TITLE_PATTERN) _ + Where Not DirectCast(Mtr, Match).Groups("name").ToString.Contains("<img") AndAlso Not DirectCast(Mtr, Match).Groups("type").ToString.Contains("VG") _ + Select New MediaContainers.Movie(GetMovieID(DirectCast(Mtr, Match).Groups("url").ToString), _ + Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString.ToString), Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("year").ToString), StringUtils.ComputeLevenshtein(StringUtils.FilterYear(sMovie).ToLower, StringUtils.FilterYear(Web.HttpUtility.HtmlDecode(DirectCast(Mtr, Match).Groups("name").ToString)).ToLower)) + + R.ExactMatches = qExact.ToList + +mResult: + Return R + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Nothing + End Try + End Function + + Public Function GetTrailers(imdbID As String) As List(Of String) + Dim TrailerList As New List(Of String) + Dim TrailerNumber As Integer = 0 + Dim Links As MatchCollection + Dim trailerPage As String + Dim trailerUrl As String + Dim Link As Match + Dim currPage As Integer = 0 + + Dim WebPage As New HTTP + Dim _ImdbTrailerPage As String = String.Empty + + _ImdbTrailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", imdbID, "/videogallery/content_type-Trailer")) + If _ImdbTrailerPage.ToLower.Contains("page not found") Then + _ImdbTrailerPage = String.Empty + End If + + If Not String.IsNullOrEmpty(_ImdbTrailerPage) Then + Link = Regex.Match(_ImdbTrailerPage, "of [0-9]{1,3}") + + If Link.Success Then + TrailerNumber = Convert.ToInt32(Link.Value.Substring(3)) + + If TrailerNumber > 0 Then + currPage = Convert.ToInt32(Math.Ceiling(TrailerNumber / 10)) + + For i As Integer = 1 To currPage + If Not i = 1 Then + _ImdbTrailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/title/tt", imdbID, "/videogallery/content_type-Trailer?page=", i)) + End If + + Links = Regex.Matches(_ImdbTrailerPage, "screenplay/(vi[0-9]+)/") + Dim linksCollection As String() = From m As Object In Links Select CType(m, Match).Value Distinct.ToArray() + + Links = Regex.Matches(_ImdbTrailerPage, "imdb/(vi[0-9]+)/") + linksCollection = linksCollection.Concat(From m As Object In Links Select CType(m, Match).Value Distinct.ToArray()).ToArray + + For Each value As String In linksCollection + If value.Contains("screenplay") Then + trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player")) + trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + TrailerList.Add(trailerUrl) + End If + Else + ''480p Trailer + 'trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player?uff=2")) + 'trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + 'If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + ' Me._TrailerList.Add(trailerUrl) + 'End If + + ''720p Trailer + 'trailerPage = WebPage.DownloadData(String.Concat("http://", IMDBURL, "/video/", value, "player?uff=3")) + 'trailerUrl = Web.HttpUtility.UrlDecode(Regex.Match(trailerPage, "http.+mp4").Value) + 'If Not String.IsNullOrEmpty(trailerUrl) AndAlso WebPage.IsValidURL(trailerUrl) Then + ' Me._TrailerList.Add(trailerUrl) + 'End If + End If + Next + Next + End If + End If + End If + Return TrailerList + End Function + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim FullCast As Boolean + Dim FullCrew As Boolean + Dim IMDBMovie As MediaContainers.Movie + Dim Options As Structures.ScrapeOptions + Dim Parameter As String + Dim Search As SearchType + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Object + Dim ResultType As SearchType + Dim Success As Boolean + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeIMPA.vb b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeIMPA.vb new file mode 100644 index 0000000..5f052ed --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeIMPA.vb @@ -0,0 +1,179 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace IMPA + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwIMPA As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwIMPA.IsBusy Then Me.bwIMPA.CancelAsync() + + While Me.bwIMPA.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal sURL As String) + Try + If Not bwIMPA.IsBusy Then + bwIMPA.WorkerSupportsCancellation = True + bwIMPA.WorkerReportsProgress = True + bwIMPA.RunWorkerAsync(New Arguments With {.Parameter = sURL}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetIMPAPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPoster As New List(Of MediaContainers.Image) + + Try + If bwIMPA.CancellationPending Then Return Nothing + Dim sURL As String = GetLink(imdbID) + + If Not String.IsNullOrEmpty(sURL) Then + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If bwIMPA.CancellationPending Then Return Nothing + + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "(thumbs/imp_([^>]*ver[^>]*.jpg))|(thumbs/imp_([^>]*.jpg))") + + Dim PosterURL As String + + For Each mPoster As Match In mcPoster + If bwIMPA.CancellationPending Then Return Nothing + PosterURL = Strings.Replace(String.Format("{0}/{1}", sURL.Substring(0, sURL.LastIndexOf("/")), mPoster.Value.ToString()).Replace("thumbs", "posters"), "imp_", String.Empty) + + alPoster.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + + PosterURL = PosterURL.Insert(PosterURL.LastIndexOf("."), "_xlg") + alPoster.Add(New MediaContainers.Image With {.Description = "original", .URL = PosterURL}) + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPoster + End Function + + Private Sub bwIMPA_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPA.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetIMPAPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwIMPA_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPA.ProgressChanged + If Not bwIMPA.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwIMPA_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPA.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + Private Function GetLink(ByVal IMDBID As String) As String + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.imdb.com/title/tt", IMDBID, "/posters")) + sHTTP = Nothing + + Dim mcIMPA As MatchCollection = Regex.Matches(HTML, "http://([^""]*)impawards.com/([^""]*)") + If mcIMPA.Count > 0 Then + 'just use the first one if more are found + Return mcIMPA(0).Value.ToString + Else + Return String.Empty + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return String.Empty + End Try + End Function + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + Dim sType As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeImages.vb b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeImages.vb new file mode 100644 index 0000000..7bdb821 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeImages.vb @@ -0,0 +1,940 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Drawing.Imaging +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class ScrapeImages + +#Region "Methods" + + Public Shared Function GetPreferredImage(ByRef Image As Images, ByVal IMDBID As String, ByVal iType As Enums.ImageType, ByRef imgResult As Containers.ImgResult, ByVal sPath As String, ByVal doETs As Boolean, Optional ByVal doAsk As Boolean = False) As Boolean + '// + ' Try to get the best match between what the user selected in settings and the actual posters downloaded + '\\ + + Dim hasImages As Boolean = False + Dim TMDB As New TMDB.Scraper + Dim IMPA As New IMPA.Scraper + Dim MPDB As New MPDB.Scraper + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim tmpListIMPA As New List(Of MediaContainers.Image) + Dim tmpListMPDB As New List(Of MediaContainers.Image) + Dim tmpIMPAX As Images = Nothing + Dim tmpIMPAL As Images = Nothing + Dim tmpIMPAM As Images = Nothing + Dim tmpIMPAS As Images = Nothing + Dim tmpIMPAW As Images = Nothing + Dim tmpMPDBX As Images = Nothing + Dim tmpMPDBL As Images = Nothing + Dim tmpMPDBM As Images = Nothing + Dim tmpMPDBS As Images = Nothing + Dim tmpMPDBW As Images = Nothing + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, If(iType = Enums.ImageType.Posters, "posters", "fanart")) + + Try + + If iType = Enums.ImageType.Posters Then 'posters + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tImage.URL) + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + tmpListTMDB.AddRange(TMDB.GetTMDBImages(IMDBID, "poster")) + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + tmpListTMDB.AddRange(IMPA.GetIMPAPosters(IMDBID)) + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + tmpListTMDB.AddRange(MPDB.GetMPDBPosters(IMDBID)) + End If + + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + tmdbThumb.WebImage.FromWeb(tmdbThumb.URL) + If Not IsNothing(tmdbThumb.WebImage.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(tmdbThumb.URL) + Image = tmdbThumb.WebImage + Image.Save(Path.Combine(CachePath, String.Concat("poster_(", tmdbThumb.Description, ")_(url=", StringUtils.CleanURL(tmdbThumb.URL), ").jpg")), , , False) + End If + Image.Clear() + Next + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetPosterDims(iMovie.WebImage.Image) = Master.eSettings.PreferredPosterSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + End If + Else + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + 'download all TMBD images + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "poster") + + 'check each one for it's size to see if it matched the preferred size + If tmpListTMDB.Count > 0 Then + hasImages = True + + If Not Master.eSettings.NoSaveImagesToNfo Then + For Each tmdbThumb As MediaContainers.Image In tmpListTMDB + imgResult.Posters.Add(tmdbThumb.URL) + Next + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Xlrg + If iMovie.Description.ToLower = "original" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Lrg + If iMovie.Description.ToLower = "mid" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Mid + If iMovie.Description.ToLower = "cover" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + Case Enums.PosterSize.Small + If iMovie.Description.ToLower = "thumb" Then + Image.FromWeb(iMovie.URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + 'no "wide" for TMDB + End Select + Image.Clear() + Next + End If + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB found... try IMPA + + tmpListIMPA = IMPA.GetIMPAPosters(IMDBID) + + If tmpListIMPA.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListIMPA + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpIMPAX) Then + tmpIMPAX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpIMPAL) Then + tmpIMPAL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpIMPAM) Then + tmpIMPAM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpIMPAS) Then + tmpIMPAS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpIMPAW) Then + tmpIMPAW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + If IsNothing(Image.Image) Then + 'no poster of the proper size from TMDB or IMPA found... try MPDB + + tmpListMPDB = MPDB.GetMPDBPosters(IMDBID) + + If tmpListMPDB.Count > 0 Then + hasImages = True + For Each iImage As MediaContainers.Image In tmpListMPDB + Image.FromWeb(iImage.URL) + If Not IsNothing(Image.Image) Then + If Not Master.eSettings.NoSaveImagesToNfo Then imgResult.Posters.Add(iImage.URL) + Dim tmpSize As Enums.PosterSize = Images.GetPosterDims(Image.Image) + If Not tmpSize = Master.eSettings.PreferredPosterSize Then + 'cache the first result from each type in case the preferred size is not available + Select Case tmpSize + Case Enums.PosterSize.Xlrg + If IsNothing(tmpMPDBX) Then + tmpMPDBX = Image + End If + Case Enums.PosterSize.Lrg + If IsNothing(tmpMPDBL) Then + tmpMPDBL = Image + End If + Case Enums.PosterSize.Mid + If IsNothing(tmpMPDBM) Then + tmpMPDBM = Image + End If + Case Enums.PosterSize.Small + If IsNothing(tmpMPDBS) Then + tmpMPDBS = Image + End If + Case Enums.PosterSize.Wide + If IsNothing(tmpMPDBW) Then + tmpMPDBW = Image + End If + End Select + Else + 'image found + GoTo foundIT + End If + End If + Image.Clear() + Next + End If + End If + End If + + If IsNothing(Image.Image) AndAlso Not doAsk Then + 'STILL no image found, just get the first available image, starting with the largest + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + 'check TMDB first + If tmpListTMDB.Count > 0 Then + Dim x = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If x.Count > 0 Then + Image.FromWeb(x(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "cover" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + If Not IsNothing(Image.Image) Then GoTo foundIT + End If + + End If + End If + + Image.Clear() + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + If tmpListIMPA.Count > 0 Then + If Not IsNothing(tmpIMPAX) Then + Image = tmpIMPAX + GoTo foundIT + End If + If Not IsNothing(tmpIMPAL) Then + Image = tmpIMPAL + GoTo foundIT + End If + If Not IsNothing(tmpIMPAM) Then + Image = tmpIMPAM + GoTo foundIT + End If + If Not IsNothing(tmpIMPAS) Then + Image = tmpIMPAS + GoTo foundIT + End If + If Not IsNothing(tmpIMPAW) Then + Image = tmpIMPAW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + If tmpListMPDB.Count > 0 Then + If Not IsNothing(tmpMPDBX) Then + Image = tmpMPDBX + GoTo foundIT + End If + If Not IsNothing(tmpMPDBL) Then + Image = tmpMPDBL + GoTo foundIT + End If + If Not IsNothing(tmpMPDBM) Then + Image = tmpMPDBM + GoTo foundIT + End If + If Not IsNothing(tmpMPDBS) Then + Image = tmpMPDBS + GoTo foundIT + End If + If Not IsNothing(tmpMPDBW) Then + Image = tmpMPDBW + GoTo foundIT + End If + End If + End If + + Image.Clear() + + End If + + End If + + Else 'fanart + + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + + Dim ETHashes As New List(Of String) + If Master.eSettings.AutoET AndAlso doETs Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso doETs AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + Image.SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + tmpListTMDB.Add(tImage) + Image.Clear() + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Master.eSettings.AutoET AndAlso doETs Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + If Not Master.eSettings.NoSaveImagesToNfo Then + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + End If + End If + Image.Clear() + Next + End If + End If + + If tmpListTMDB.Count > 0 Then + hasImages = True + 'remove all entries without images + For i As Integer = tmpListTMDB.Count - 1 To 0 Step -1 + If IsNothing(tmpListTMDB(i).WebImage.Image) Then + tmpListTMDB.RemoveAt(i) + End If + Next + + For Each iMovie As MediaContainers.Image In tmpListTMDB + If Images.GetFanartDims(iMovie.WebImage.Image) = Master.eSettings.PreferredFanartSize Then + Image = iMovie.WebImage + GoTo foundit + End If + Next + + Image.Clear() + + If Not doAsk Then + Image = tmpListTMDB.OrderBy(Function(i) i.WebImage.Image.Height + i.WebImage.Image.Height).FirstOrDefault.WebImage + End If + + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + hasImages = True + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + If Not Master.eSettings.NoSaveImagesToNfo Then + imgResult.Fanart.URL = "http://images.themoviedb.org" + For Each miFanart As MediaContainers.Image In tmpListTMDB + If Not miFanart.URL.Contains("_thumb.") Then + thumbLink = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty) + If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("_poster.", "_thumb.") + Else + thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "_thumb") + End If + imgResult.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = miFanart.URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Next + End If + + If Master.eSettings.AutoET AndAlso doETs Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + Image = miFanart.WebImage + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + Image.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + Image.SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + Next + + Image.Clear() + FileUtils.Delete.DeleteDirectory(CachePath) + End If + + For Each iMovie As MediaContainers.Image In tmpListTMDB + Select Case Master.eSettings.PreferredFanartSize + Case Enums.FanartSize.Lrg + If iMovie.Description.ToLower = "original" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Mid + If iMovie.Description.ToLower = "mid" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + Case Enums.FanartSize.Small + If iMovie.Description.ToLower = "thumb" Then + If Not IsNothing(iMovie.WebImage.Image) Then + Image = iMovie.WebImage + Else + Image.FromWeb(iMovie.URL) + End If + GoTo foundIT + End If + End Select + Next + + Image.Clear() + + If IsNothing(Image.Image) AndAlso Not doAsk Then + + 'STILL no image found, just get the first available image, starting with the largest + + Dim l = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "original" + If l.Count > 0 Then + Image.FromWeb(l(0).URL) + GoTo foundIT + End If + + Dim m = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "mid" + If m.Count > 0 Then + Image.FromWeb(m(0).URL) + GoTo foundIT + End If + + Dim s = From MI As MediaContainers.Image In tmpListTMDB Where MI.Description = "thumb" + If s.Count > 0 Then + Image.FromWeb(s(0).URL) + GoTo foundIT + End If + + End If + + Image.Clear() + + End If + End If + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + +foundIT: + TMDB = Nothing + IMPA = Nothing + MPDB = Nothing + tmpListTMDB = Nothing + tmpListIMPA = Nothing + tmpListMPDB = Nothing + Return hasImages + End Function + + Public Shared Sub GetPreferredFAasET(ByVal IMDBID As String, ByVal sPath As String) + Dim _Image As Image + Dim TMDB As New TMDB.Scraper + Dim IMPA As New IMPA.Scraper + Dim MPDB As New MPDB.Scraper + + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + + Dim tmpListTMDB As New List(Of MediaContainers.Image) + Dim ETHashes As New List(Of String) + + Dim CachePath As String = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, IMDBID, Path.DirectorySeparatorChar, "fanart") + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(sPath) + End If + + If Master.eSettings.UseImgCacheUpdaters Then + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Dim di As New DirectoryInfo(CachePath) + + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + For Each sFile As FileInfo In lFi + Select Case True + Case sFile.Name.Contains("(original)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(mid)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + Case sFile.Name.Contains("(thumb)") + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + SaveFAasET(sFile.FullName, sPath) + End If + End If + End Select + Next + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + 'setup fanart for nfo + Dim thumbLink As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + Dim savePath As String = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Master.eSettings.AutoET Then + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End Select + End If + End If + Next + End If + End If + Else + 'download all the fanart from TMDB + tmpListTMDB = TMDB.GetTMDBImages(IMDBID, "backdrop") + + If tmpListTMDB.Count > 0 Then + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Dim savePath As String = String.Empty + For Each miFanart As MediaContainers.Image In tmpListTMDB + Select Case miFanart.Description.ToLower + Case "original" + If Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "mid" + If Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + Case "thumb" + If Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + miFanart.WebImage.FromWeb(miFanart.URL) + If Not IsNothing(miFanart.WebImage.Image) Then + _Image = miFanart.WebImage.Image + savePath = Path.Combine(CachePath, String.Concat("fanart_(", miFanart.Description, ")_(url=", StringUtils.CleanURL(miFanart.URL), ").jpg")) + miFanart.WebImage.Save(savePath, , , False) + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + SaveFAasET(savePath, sPath) + End If + End If + End If + End Select + 'Me.Clear() + Next + + _Image = Nothing + FileUtils.Delete.DeleteDirectory(CachePath) + + End If + End If + End If + End Sub + + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ + AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ + (AdvancedSettings.GetBooleanSetting("UseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Shared Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(inPath) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") + Else + extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") + End If + + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + FileUtils.Common.MoveFileWithStream(faPath, Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg"))) + End Sub + + ' Duplicate of clsImage + 'Public Shared Sub Save(ByVal _image As Image, ByVal sPath As String, Optional ByVal iQuality As Long = 0, Optional ByVal sUrl As String = "") + ' Try + ' If IsNothing(_image) Then Exit Sub + + ' Dim doesExist As Boolean = File.Exists(sPath) + ' Dim fAtt As New FileAttributes + ' If Not String.IsNullOrEmpty(sPath) AndAlso (Not doesExist OrElse (Not CBool(File.GetAttributes(sPath) And FileAttributes.ReadOnly))) Then + ' If doesExist Then + ' 'get the current attributes to set them back after writing + ' fAtt = File.GetAttributes(sPath) + ' 'set attributes to none for writing + ' File.SetAttributes(sPath, FileAttributes.Normal) + ' End If + + ' If Not sUrl = "" Then + ' Dim stroriginalurl As String = sUrl + + ' 'Image Download from tmdb is special, need original size + ' If Not sUrl.Contains("impawards") AndAlso Not sUrl.Contains("movieposterdb") Then + ' 'Always get original image... + ' 'links to images (tmdb) have following structure: 'example: http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w92/x65b4vsFKYuA878pLN1mJiAsgIP.jpg + ' Dim stringArray() As String = Split(stroriginalurl, "/") + ' If stringArray.Length > 4 Then + ' ' stringArray(5) contains values like "w185","original", "w154"...-->size -> we want original! + ' stringArray(5) = "original" + ' stroriginalurl = Join(stringArray, "/") + ' End If + ' End If + ' Dim webclient As New Net.WebClient + ' webclient.DownloadFile(stroriginalurl, sPath) + ' Else + ' Using msSave As New MemoryStream + ' Dim retSave() As Byte + ' Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + ' Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) + + ' EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + ' If iQuality > 0 Then + ' EncPars.Param(1) = New EncoderParameter(Encoder.Quality, iQuality) + ' End If + + ' _image.Save(msSave, ICI, EncPars) + + ' retSave = msSave.ToArray + + ' Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' End Using + ' msSave.Flush() + ' End Using + ' End If + + ' If doesExist Then File.SetAttributes(sPath, fAtt) + ' End If + ' Catch ex As Exception + ' Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + ' End Try + 'End Sub + + Private Shared Function GetEncoderInfo(ByVal Format As ImageFormat) As ImageCodecInfo + Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders() + + For i As Integer = 0 To UBound(Encoders) + If Encoders(i).FormatID = Format.Guid Then + Return Encoders(i) + End If + Next + + Return Nothing + End Function +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeMPDB.vb b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeMPDB.vb new file mode 100644 index 0000000..7a7e13b --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeMPDB.vb @@ -0,0 +1,160 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Namespace MPDB + + Public Class Scraper + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwMPDB As New System.ComponentModel.BackgroundWorker + + #End Region 'Fields + + #Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + + #End Region 'Events + + #Region "Methods" + + Public Sub Cancel() + If Me.bwMPDB.IsBusy Then Me.bwMPDB.CancelAsync() + + While Me.bwMPDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String) + Try + If Not Me.bwMPDB.IsBusy Then + Me.bwMPDB.WorkerSupportsCancellation = True + Me.bwMPDB.WorkerReportsProgress = True + Me.bwMPDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetMPDBPosters(ByVal imdbID As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + + If Me.bwMPDB.CancellationPending Then Return Nothing + + Try + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.movieposterdb.com/movie/", imdbID)) + sHTTP = Nothing + + If Me.bwMPDB.CancellationPending Then Return Nothing + + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(1) + End If + + If Regex.IsMatch(HTML, String.Concat("http://www.imdb.com/title/tt", imdbID), RegexOptions.Singleline Or RegexOptions.IgnoreCase Or RegexOptions.Multiline) Then + Dim mcPoster As MatchCollection = Regex.Matches(HTML, "http://www.movieposterdb.com/posters/[0-9_](.*?)/[0-9](.*?)/[0-9](.*?)/[a-z0-9_](.*?).jpg") + + Dim PosterURL As String = String.Empty + + For Each mPoster As Match In mcPoster + If Me.bwMPDB.CancellationPending Then Return Nothing + PosterURL = mPoster.Value.Remove(mPoster.Value.LastIndexOf("/") + 1, 1) + PosterURL = PosterURL.Insert(mPoster.Value.LastIndexOf("/") + 1, "l") + alPosters.Add(New MediaContainers.Image With {.Description = "poster", .URL = PosterURL}) + Next + End If + If bwMPDB.WorkerReportsProgress Then + bwMPDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return alPosters + End Function + + Private Sub bwMPDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetMPDBPosters(Args.Parameter) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwMPDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDB.ProgressChanged + If Not bwMPDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwMPDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim Parameter As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Object + Dim ResultList As List(Of MediaContainers.Image) + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + + End Class + +End Namespace + diff --git a/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeOFDB.vb b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeOFDB.vb new file mode 100644 index 0000000..a220a06 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeOFDB.vb @@ -0,0 +1,280 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class OFDB + + #Region "Fields" + + Private imdbID As String + Private OFDBMovie As MediaContainers.Movie + Private _genre As String + Private _outline As String + Private _plot As String + Private _title As String + + #End Region 'Fields + + #Region "Constructors" + + Public Sub New(ByVal sID As String, ByRef mMovie As MediaContainers.Movie) + Clear() + imdbID = sID + OFDBMovie = mMovie + + GetOFDBDetails() + End Sub + + #End Region 'Constructors + + #Region "Properties" + + Public Property Genre() As String + Get + Return _genre + End Get + Set(ByVal value As String) + _genre = value + End Set + End Property + + Public Property Outline() As String + Get + Return _outline + End Get + Set(ByVal value As String) + _outline = value + End Set + End Property + + Public Property Plot() As String + Get + Return _plot + End Get + Set(ByVal value As String) + _plot = value + End Set + End Property + + Public Property Title() As String + Get + Return _title + End Get + Set(ByVal value As String) + _title = value + End Set + End Property + + #End Region 'Properties + + #Region "Methods" + + Private Function CleanTitle(ByVal sString As String) As String + Dim CleanString As String = sString + + Try + If sString.StartsWith("""") Then CleanString = sString.Remove(0, 1) + + If sString.EndsWith("""") Then CleanString = CleanString.Remove(CleanString.Length - 1, 1) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return CleanString + End Function + + Private Sub Clear() + _title = String.Empty + _outline = String.Empty + _plot = String.Empty + _genre = String.Empty + End Sub + + Private Function GetFullPlot(ByVal sURL As String) As String + Dim FullPlot As String = String.Empty + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + Dim D, W, Wq, Wqq, B As Integer + Dim tmpHTML As String + + D = HTML.IndexOf("Eine Inhaltsangabe von") + If D > 0 Then + Dim L As Integer = Html.Length + tmpHTML = Html.Substring(D + 22, L - (D + 22)).Trim + W = tmpHTML.IndexOf("</b></b><br><br>") + Wq = tmpHTML.IndexOf("<b>Quelle:</b>") + If Wq > 0 Then + Wqq = tmpHTML.IndexOf("<br><br>", Wq) + B = tmpHTML.IndexOf("</font></p>", Wqq + 8) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(Wqq + 8, B - (Wqq + 8)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + ElseIf W > 0 Then + B = tmpHTML.IndexOf("</font></p>", W + 16) + FullPlot = Web.HttpUtility.HtmlDecode(tmpHTML.Substring(W + 16, B - (W + 16)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return FullPlot + End Function + + Private Sub GetOFDBDetails() + Dim sURL As String = GetOFDBUrlFromIMDBID() + + Try + If Not String.IsNullOrEmpty(sURL) Then + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(sURL) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(Html) Then + 'title + If String.IsNullOrEmpty(OFDBMovie.Title) OrElse Not Master.eSettings.LockTitle Then + Dim OFDBTitle As String = CleanTitle(Web.HttpUtility.HtmlDecode(Regex.Match(HTML, "<td width=""99\%""><h1 itemprop=""name""><font face=""Arial,Helvetica,sans-serif"" size=""3""><b>([^<]+)</b></font></h1></td>").Groups(1).Value.ToString)) + If OFDBTitle.EndsWith(", Der") Then + _title = String.Concat("Der ", OFDBTitle.Replace(", Der", " ")).Trim + ElseIf OFDBTitle.EndsWith(", Die") Then + _title = String.Concat("Die ", OFDBTitle.Replace(", Die", " ")).Trim + ElseIf OFDBTitle.EndsWith(", Das") Then + _title = String.Concat("Das ", OFDBTitle.Replace(", Das", " ")).Trim + ElseIf OFDBTitle.EndsWith(", The") Then + _title = String.Concat("The ", OFDBTitle.Replace(", The", " ")).Trim + Else + _title = OFDBTitle + End If + End If + + Dim D, Dq, W, Wq, B As Integer + Dim tmpHTML As String + + 'outline + If String.IsNullOrEmpty(OFDBMovie.Outline) OrElse Not Master.eSettings.LockOutline Then + D = HTML.IndexOf("<b>Inhalt:</b>") + Dq = HTML.IndexOf("<b>Inhalt:</b> <font style=") + + If Dq > 0 Then + Wq = HTML.IndexOf("<span itemprop=""description"">", Dq) + W = HTML.IndexOf("<a href=""plot", Wq + 29) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(Wq + 29, W - (Wq + 29)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + ElseIf D > 0 Then + W = HTML.IndexOf("<a href=""", D + 44) + _outline = Web.HttpUtility.HtmlDecode(HTML.Substring(D + 44, W - (D + 44)).Replace("<br />", String.Empty).Replace(vbCrLf, " ").Trim) + End If + End If + + 'full plot + D = 0 : Dq = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Plot) OrElse Not Master.eSettings.LockPlot Then + D = HTML.IndexOf("<b>Inhalt:</b>") + Dq = HTML.IndexOf("<b>Inhalt:</b> <font style=") + + If Dq > 0 Then + Dim L As Integer = HTML.Length + tmpHTML = HTML.Substring(D + 197, L - (D + 197)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + ElseIf D > 0 Then + Dim L As Integer = HTML.Length + tmpHTML = HTML.Substring(D + 44, L - (D + 44)).Trim + W = tmpHTML.IndexOf("<a href=""") + If W > 0 Then + B = tmpHTML.IndexOf("""><b>[mehr]</b>", W + 9) + If B > 0 Then + Dim FullPlot = GetFullPlot(String.Concat("http://www.ofdb.de/", tmpHTML.Substring(W + 9, B - (W + 9)))) + If Not String.IsNullOrEmpty(FullPlot) Then + _plot = FullPlot + End If + End If + End If + End If + End If + + 'genre + D = 0 : W = 0 + If String.IsNullOrEmpty(OFDBMovie.Genre) OrElse Not Master.eSettings.LockGenre Then + D = HTML.IndexOf("class=""Normal"">Genre(s):</font></td>") + If D > 0 Then + W = HTML.IndexOf("</table>", D) + If W > 0 Then + Dim rGenres As MatchCollection = Regex.Matches(HTML.Substring(D, W - D), "<a.*?href=[""'](?<url>.*?)[""'].*?><span itemprop=""genre"">(?<name>.*?)</span></a>") + Dim Gen = From M In rGenres _ + Select N = Web.HttpUtility.HtmlDecode(DirectCast(M, Match).Groups("name").ToString) + If Gen.Count > 0 Then + Dim tGenre As String = Strings.Join(Gen.ToArray, "/").Trim + tGenre = StringUtils.GenreFilter(tGenre) + If Not String.IsNullOrEmpty(tGenre) Then + _genre = Strings.Join(tGenre.Split(Convert.ToChar("/")), " / ").Trim + End If + End If + End If + End If + End If + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetOFDBUrlFromIMDBID() As String + Dim ofdbURL As String = String.Empty + Try + + Dim sHTTP As New HTTP + Dim HTML As String = sHTTP.DownloadData(String.Concat("http://www.ofdb.de/view.php?SText=", imdbID, "&Kat=IMDb&page=suchergebnis&sourceid=mozilla-search")) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(HTML) Then + Dim mcOFDBURL As MatchCollection = Regex.Matches(HTML, "<a href=""film/([^<]+)"" onmouseover") + If mcOFDBURL.Count > 0 Then + 'just use the first one if more are found + ofdbURL = String.Concat("http://www.ofdb.de/", Regex.Match(mcOFDBURL(0).Value.ToString, """(film/([^<]+))""").Groups(1).Value.ToString) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return ofdbURL + End Function + + #End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeTMDB.vb b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeTMDB.vb new file mode 100644 index 0000000..d40e628 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeTMDB.vb @@ -0,0 +1,243 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports EmberAPI + +Namespace TMDB + + Public Class Scraper + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwTMDB As New System.ComponentModel.BackgroundWorker + + Private Const APIKey As String = "b1ecff8c76278262b27de1569f57f6bd" + +#End Region 'Fields + +#Region "Events" + + Public Event PostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + If bwTMDB.IsBusy Then bwTMDB.CancelAsync() + + While bwTMDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetImagesAsync(ByVal imdbID As String, ByVal sType As String) + Try + If Not bwTMDB.IsBusy Then + bwTMDB.WorkerSupportsCancellation = True + bwTMDB.WorkerReportsProgress = True + bwTMDB.RunWorkerAsync(New Arguments With {.Parameter = imdbID, .sType = sType}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetTMDBImages(ByVal imdbID As String, ByVal sType As String) As List(Of MediaContainers.Image) + Dim alPosters As New List(Of MediaContainers.Image) + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getImages/en/xml/{0}/tt{1}", APIKey, imdbID)) + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return alPosters + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + If Not xmlTMDB...<OpenSearchDescription>...<movies>.Value = "Nothing found." Then + If sType = "poster" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<poster>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + ElseIf sType = "backdrop" Then + Dim tmdbImages = From iNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<images>...<backdrop>.Elements Select iNode + If tmdbImages.Count > 0 Then + For Each tmdbI As XElement In tmdbImages + Dim parentID As String = tmdbI.Parent.Attribute("id").Value + If bwTMDB.CancellationPending Then Return Nothing + Debug.Print("{0}/t{1}", tmdbI.@size, tmdbI.@url) + Dim tmpPoster As New MediaContainers.Image With {.URL = tmdbI.@url, .Description = tmdbI.@size, .Width = tmdbI.@width, .Height = tmdbI.@height, .ParentID = parentID} + alPosters.Add(tmpPoster) + Next + End If + End If + End If + End If + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + sHTTP = Nothing + + Return alPosters + End Function + + Public Function GetTrailers(ByVal imdbID As String) As String + Dim xmlTMDB As XDocument + Dim sHTTP As New HTTP + Dim tLang As String + + tLang = AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en") + + If bwTMDB.CancellationPending Then Return Nothing + Try + Dim ApiXML As String = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/{0}/tt{1}", APIKey, imdbID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(1) + End If + If bwTMDB.CancellationPending Then Return Nothing + + Dim tmdbNode = From xNode In xmlTMDB.Elements + + If tmdbNode.Count > 0 Then + If Not tmdbNode(0).Value = "Your query didn't return any results." Then + Dim movieID As String = xmlTMDB...<OpenSearchDescription>...<movies>...<movie>...<id>.Value + Dim i As Integer + + + For i = 0 To 1 Step 1 + sHTTP = New HTTP + ApiXML = sHTTP.DownloadData(String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/{0}/xml/{1}/{2}", tLang, APIKey, movieID)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(ApiXML) Then + + Try + xmlTMDB = XDocument.Parse(ApiXML) + Catch + Return String.Empty + End Try + + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(2) + End If + + If bwTMDB.CancellationPending Then Return Nothing + + Dim Trailers = From tNode In xmlTMDB...<OpenSearchDescription>...<movies>...<movie> Select tNode.<trailer> + If Trailers.Count > 0 AndAlso Not String.IsNullOrEmpty(Trailers(0).Value) Then + If Trailers(0).Value.ToLower.IndexOf("youtube.com") > 0 Then + Return Trailers(0).Value + i += 1 + End If + Else + tLang = "en" + End If + End If + Next + End If + End If + End If + If bwTMDB.WorkerReportsProgress Then + bwTMDB.ReportProgress(3) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return String.Empty + End Function + + Private Sub bwTMDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + e.Result = GetTMDBImages(Args.Parameter, Args.sType) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + e.Result = Nothing + End Try + End Sub + + Private Sub bwTMDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDB.ProgressChanged + If Not bwTMDB.CancellationPending Then + RaiseEvent ProgressUpdated(e.ProgressPercentage) + End If + End Sub + + Private Sub bwTMDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDB.RunWorkerCompleted + If Not IsNothing(e.Result) Then + RaiseEvent PostersDownloaded(DirectCast(e.Result, List(Of MediaContainers.Image))) + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim Parameter As String + Dim sType As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + + End Class + +End Namespace \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeTrailers.vb b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeTrailers.vb new file mode 100644 index 0000000..19327b4 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeTrailers.vb @@ -0,0 +1,265 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System +Imports System.IO +Imports System.Net +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.Xml +Imports EmberAPI + +Public Class Trailers + +#Region "Fields" + + Public IMDBURL As String + + Private WebPage As New HTTP + Private _ImdbID As String = String.Empty + Private _ImdbTrailerPage As String = String.Empty + Private _TrailerList As New List(Of String) + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + AddHandler WebPage.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ProgressUpdated(ByVal iPercent As Integer) + +#End Region 'Events + +#Region "Methods" + + Public Sub Cancel() + Me.WebPage.Cancel() + End Sub + + Public Sub Clear() + Me._TrailerList.Clear() + Me._ImdbID = String.Empty + Me._ImdbTrailerPage = String.Empty + End Sub + + Public Sub DeleteTrailers(ByVal sPath As String, ByVal NewTrailer As String) + Dim parPath As String = Directory.GetParent(sPath).FullName + Dim tmpName As String = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(sPath))) + Dim tmpNameNoStack As String = Path.Combine(parPath, Path.GetFileNameWithoutExtension(sPath)) + For Each t As String In Master.eSettings.ValidExts + If File.Exists(String.Concat(tmpName, "-trailer", t)) AndAlso Not String.Concat(tmpName, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpName, "[trailer]", t)) AndAlso Not String.Concat(tmpName, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpName, "[trailer]", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "-trailer", t)) AndAlso Not String.Concat(tmpNameNoStack, "-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "-trailer", t)) + ElseIf File.Exists(String.Concat(tmpNameNoStack, "[trailer]", t)) AndAlso Not String.Concat(tmpNameNoStack, "[trailer]", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(tmpNameNoStack, "[trailer]", t)) + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) AndAlso Not String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t).ToLower = NewTrailer.ToLower Then + File.Delete(String.Concat(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "\", "index-trailer", t)) + End If + Next + End Sub + + Public Sub DownloadProgressUpdated(ByVal iPercent As Integer) + RaiseEvent ProgressUpdated(iPercent) + End Sub + + Public Function DownloadSingleTrailer(ByVal sPath As String, ByVal ImdbID As String, ByVal isSingle As Boolean, ByVal currNfoTrailer As String) As String + Dim tURL As String = String.Empty + Try + Me._TrailerList.Clear() + + If Not Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, True) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + + Dim tLink As String = String.Empty + If Regex.IsMatch(Me._TrailerList.Item(0).ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Dim YT As New YouTube.Scraper + YT.GetVideoLinks(Me._TrailerList.Item(0).ToString) + If YT.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + tLink = YT.VideoLinks(Master.eSettings.PreferredTrailerQuality).URL + Else + Select Case Master.eSettings.PreferredTrailerQuality + Case Enums.TrailerQuality.HD1080p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720p) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720p).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD1080pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HD720pVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HD720pVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HD720p + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQFLV).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HD720pVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.HQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.HQVP8).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.HQFLV + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQMP4) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQMP4).URL + ElseIf YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.HQVP8 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQVP8) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQVP8).URL + End If + Case Enums.TrailerQuality.SQMP4 + If YT.VideoLinks.ContainsKey(Enums.TrailerQuality.SQFLV) Then + tLink = YT.VideoLinks(Enums.TrailerQuality.SQFLV).URL + End If + Case Enums.TrailerQuality.SQFLV + tLink = String.Empty + Case Enums.TrailerQuality.SQVP8 + tLink = String.Empty + End Select + End If + Else + tLink = Me._TrailerList.Item(0).ToString + End If + + If Not String.IsNullOrEmpty(tLink) Then + tURL = WebPage.DownloadFile(tLink, sPath, False, "trailer") + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + End If + ElseIf Master.eSettings.UpdaterTrailersNoDownload AndAlso IsAllowedToDownload(sPath, isSingle, currNfoTrailer, False) Then + Me.GetTrailers(ImdbID, True) + + If Me._TrailerList.Count > 0 Then + tURL = Me._TrailerList.Item(0).ToString + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return tURL + End Function + + Public Function DownloadTrailer(ByVal sPath As String, ByVal sURL As String) As String + Dim tURL As String = String.Empty + If Not String.IsNullOrEmpty(sURL) Then + tURL = WebPage.DownloadFile(sURL, sPath, True, "trailer") + + If Not String.IsNullOrEmpty(tURL) Then + 'delete any other trailer if enabled in settings and download successful + If Master.eSettings.DeleteAllTrailers Then + Me.DeleteTrailers(sPath, tURL) + End If + End If + End If + Return tURL + End Function + + Public Function GetTrailers(ByVal ImdbID As String, Optional ByVal BreakAfterFound As Boolean = True) As List(Of String) + Me._ImdbID = ImdbID + If AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", False) Then + Me.GetImdbTrailer() + End If + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", False) Then + Me.GetTMDBTrailer() + End If + + Return Me._TrailerList + End Function + + Public Function IsAllowedToDownload(ByVal sPath As String, ByVal isDL As Boolean, ByVal currNfoTrailer As String, Optional ByVal isSS As Boolean = False) As Boolean + Dim fScanner As New Scanner + + If isDL Then + If String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) OrElse Master.eSettings.OverwriteTrailer Then + Return True + Else + If isSS AndAlso String.IsNullOrEmpty(fScanner.GetTrailerPath(sPath)) Then + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + Else + Return False + End If + End If + Else + If String.IsNullOrEmpty(currNfoTrailer) OrElse Not Master.eSettings.LockTrailer Then + Return True + Else + Return False + End If + End If + End Function + + Private Sub GetIMDBTrailer() + Dim IMDB As New IMDB.Scraper + IMDB.IMDBURL = AdvancedSettings.GetSetting("IMDBURL", "akas.imdb.com") + Dim results As List(Of String) = IMDB.GetTrailers(_ImdbID) + + Me._TrailerList.AddRange(results) + + IMDB = Nothing + End Sub + + Private Sub GetTMDBTrailer() + Dim TMDB As New TMDB.Scraper + Dim YT As String = TMDB.GetTrailers(_ImdbID) + + If Not String.IsNullOrEmpty(YT) Then + Me._TrailerList.Add(YT) + End If + + TMDB = Nothing + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeYouTube.vb b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeYouTube.vb new file mode 100644 index 0000000..b4603fd --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/clsScrapeYouTube.vb @@ -0,0 +1,335 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports EmberAPI + +Namespace YouTube + + Public Class Scraper + +#Region "Fields" + + Friend WithEvents bwYT As New System.ComponentModel.BackgroundWorker + + Private _VideoLinks As VideoLinkItemCollection + +#End Region 'Fields + +#Region "Events" + + Public Event Exception(ByVal ex As Exception) + + Public Event VideoLinksRetrieved(ByVal bSuccess As Boolean) + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property VideoLinks() As VideoLinkItemCollection + Get + If _VideoLinks Is Nothing Then + _VideoLinks = New VideoLinkItemCollection + End If + Return _VideoLinks + End Get + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() + If bwYT.IsBusy Then bwYT.CancelAsync() + + While bwYT.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub GetVideoLinks(ByVal url As String) + Try + _VideoLinks = ParseYTFormats(url, False) + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub GetVideoLinksAsync(ByVal url As String) + Try + If Not bwYT.IsBusy Then + _VideoLinks = Nothing + bwYT.WorkerSupportsCancellation = True + bwYT.RunWorkerAsync(url) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwYT.DoWork + Dim Url As String = DirectCast(e.Argument, String) + + Try + e.Result = ParseYTFormats(Url, True) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwYT_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwYT.RunWorkerCompleted + Try + If e.Cancelled Then + 'user cancelled + RaiseEvent VideoLinksRetrieved(False) + ElseIf e.Error IsNot Nothing Then + 'exception occurred + RaiseEvent Exception(e.Error) + Else + 'all good + If e.Result IsNot Nothing Then + _VideoLinks = DirectCast(e.Result, VideoLinkItemCollection) + RaiseEvent VideoLinksRetrieved(True) + Else + RaiseEvent VideoLinksRetrieved(False) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetVideoTitle(ByVal HTML As String) As String + Dim result As String = "" + 'Dim KeyPattern As String = "'VIDEO_TITLE':\s*'([^']*?)'" + Dim KeyPattern As String = "meta name=\""title\"" content=\s*\""([^']*?)\""" + 'meta name="title" content= + If Regex.IsMatch(HTML, KeyPattern) Then + result = Regex.Match(HTML, KeyPattern).Groups(1).Value + End If + + Return result + End Function + + Private Function ParseYTFormats(ByVal url As String, ByVal doProgress As Boolean) As VideoLinkItemCollection + Dim DownloadLinks As New VideoLinkItemCollection + Dim sHTTP As New HTTP + + Try + If bwYT.CancellationPending Then Return DownloadLinks + + Dim Html As String = sHTTP.DownloadData(url) + If Html.ToLower.Contains("page not found") Then + Html = String.Empty + End If + + If String.IsNullOrEmpty(Html.Trim) Then Return DownloadLinks + If bwYT.CancellationPending Then Return DownloadLinks + + Dim VideoTitle As String = GetVideoTitle(Html) + VideoTitle = Regex.Replace(VideoTitle, "['?\\:*<>]*", "") + + Dim fmtMatch As Match = Regex.Match(Html, "url_encoded_fmt_stream_map\"": \""(.*?)\"", \""", RegexOptions.IgnoreCase) + If fmtMatch.Success Then + Dim FormatMap As String = fmtMatch.Groups(1).Value + Dim decoded As String = Web.HttpUtility.UrlDecode(FormatMap) + Dim FormatArray() As String = Split(decoded.Replace(", ", ";"), ",") + + Dim rurl As New Regex("url=([^\\]+)", RegexOptions.IgnoreCase) + Dim rsig As New Regex("sig=([^\\]+)", RegexOptions.IgnoreCase) + Dim ritag As New Regex("itag=(\d+)", RegexOptions.IgnoreCase) + + For i As Integer = 0 To FormatArray.Length - 1 + Dim yturl As String = rurl.Match(FormatArray(i)).Groups(1).Value + Dim ytitag As String = ritag.Match(FormatArray(i)).Groups(1).Value + Dim ytsig As String = rsig.Match(FormatArray(i)).Groups(1).Value + + 'Console.WriteLine("Trailer Itag: {0}", ytitag) + 'Console.WriteLine("Trailer Url: {0}", yturl) + 'Console.WriteLine("Trailer Sig: {0}", ytsig) + + Dim Link As New VideoLinkItem + Select Case ytitag + ' ********************************************************************** + ' see all itags http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs + ' ********************************************************************** + Case "5" + Link.Description = "240p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "6" + Link.Description = "270p (FLV, H.263)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "13" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "17" + Link.Description = "144p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "18" + Link.Description = "360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQMP4 + Case "22" + Link.Description = "720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD720p + Case "34" + Link.Description = "360p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.SQFLV + Case "35" + Link.Description = "480p (FLV, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HQFLV + Case "36" + Link.Description = "240p (3GP, MPEG-4)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "37" + Link.Description = "1080p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.HD1080p + Case "38" + Link.Description = "1536p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "43" + Link.Description = "360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.SQVP8 + Case "44" + Link.Description = "480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HQVP8 + Case "45" + Link.Description = "720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD720pVP8 + Case "46" + Link.Description = "1080p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.HD1080pVP8 + Case "82" + Link.Description = "3D 360p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "83" + Link.Description = "3D 480p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "84" + Link.Description = "3D 720p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "85" + Link.Description = "3D 520p (MP4, H.264)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "100" + Link.Description = "3D 360p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "101" + Link.Description = "3D 480p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "102" + Link.Description = "3D 720p (WebM, VP8)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case "120" + Link.Description = "720p LiveStream (FLV, AVC)" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + Case Else + Link.Description = "Other" + Link.FormatQuality = Enums.TrailerQuality.OTHERS + 'Continue For + End Select + + Link.URL = Web.HttpUtility.UrlDecode(Web.HttpUtility.UrlDecode(yturl)) & "&signature=" & ytsig & "&title=" & Web.HttpUtility.UrlEncode(VideoTitle) + Link.URL = Link.URL.Replace("sig=", "signature=") ' sig= returns HTTP 403 //oldstyle, keep it + 'Console.WriteLine("Trailer Url decoded: {0}", Link.URL) + + If bwYT.CancellationPending Then Return DownloadLinks + + If Not String.IsNullOrEmpty(Link.URL) AndAlso sHTTP.IsValidURL(Link.URL) Then + DownloadLinks.Add(Link) + End If + + If bwYT.CancellationPending Then Return DownloadLinks + + Next + + End If + Return DownloadLinks + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return New VideoLinkItemCollection + Finally + sHTTP = Nothing + End Try + End Function + +#End Region 'Methods + + End Class + + Public Class VideoLinkItem + +#Region "Fields" + + Private _Description As String + Private _FormatQuality As Enums.TrailerQuality + Private _URL As String + +#End Region 'Fields + +#Region "Properties" + + Public Property Description() As String + Get + Return _Description + End Get + Set(ByVal value As String) + _Description = value + End Set + End Property + + Public Property URL() As String + Get + Return _URL + End Get + Set(ByVal value As String) + _URL = value + End Set + End Property + + Friend Property FormatQuality() As Enums.TrailerQuality + Get + Return _FormatQuality + End Get + Set(ByVal value As Enums.TrailerQuality) + _FormatQuality = value + End Set + End Property + +#End Region 'Properties + + End Class + + Public Class VideoLinkItemCollection + Inherits Generic.SortedList(Of Enums.TrailerQuality, VideoLinkItem) + +#Region "Methods" + + Public Shadows Sub Add(ByVal Link As VideoLinkItem) + If Not MyBase.ContainsKey(Link.FormatQuality) Then MyBase.Add(Link.FormatQuality, Link) + End Sub + +#End Region 'Methods + + End Class + +End Namespace diff --git a/Addons/scraper.YouTube.Trailer/Scraper/dlgIMDBSearchResults.Designer.vb b/Addons/scraper.YouTube.Trailer/Scraper/dlgIMDBSearchResults.Designer.vb new file mode 100644 index 0000000..6d0924e --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/dlgIMDBSearchResults.Designer.vb @@ -0,0 +1,480 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgIMDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgIMDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.tvResults = New System.Windows.Forms.TreeView() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblGenre = New System.Windows.Forms.Label() + Me.txtIMDBID = New System.Windows.Forms.TextBox() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.lblIMDB = New System.Windows.Forms.Label() + Me.lblYearHeader = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.lblGenreHeader = New System.Windows.Forms.Label() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlPicStatus = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + Me.txtFileName = New System.Windows.Forms.TextBox() + Me.btnOpenFolder = New System.Windows.Forms.Button() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlPicStatus.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(501, 431) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 22) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(574, 431) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 22) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'tvResults + ' + Me.tvResults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvResults.HideSelection = False + Me.tvResults.Location = New System.Drawing.Point(8, 126) + Me.tvResults.Name = "tvResults" + Me.tvResults.Size = New System.Drawing.Size(281, 299) + Me.tvResults.TabIndex = 5 + ' + 'pbPoster + ' + Me.pbPoster.Location = New System.Drawing.Point(298, 160) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(110, 130) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + Me.pbPoster.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(295, 100) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(346, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Text = "Title" + Me.lblTitle.Visible = False + ' + 'lblTagline + ' + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(295, 119) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(346, 16) + Me.lblTagline.TabIndex = 10 + Me.lblTagline.Text = "Tagline" + Me.lblTagline.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(298, 325) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(343, 100) + Me.txtOutline.TabIndex = 22 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblYear.Location = New System.Drawing.Point(476, 160) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(31, 13) + Me.lblYear.TabIndex = 13 + Me.lblYear.Text = "0000" + Me.lblYear.Visible = False + ' + 'lblDirector + ' + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(476, 186) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(165, 16) + Me.lblDirector.TabIndex = 15 + Me.lblDirector.Text = "Director" + Me.lblDirector.Visible = False + ' + 'lblGenre + ' + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(476, 213) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(165, 52) + Me.lblGenre.TabIndex = 17 + Me.lblGenre.Text = "Genre" + Me.lblGenre.Visible = False + ' + 'txtIMDBID + ' + Me.txtIMDBID.Enabled = False + Me.txtIMDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtIMDBID.Location = New System.Drawing.Point(143, 429) + Me.txtIMDBID.Name = "txtIMDBID" + Me.txtIMDBID.Size = New System.Drawing.Size(100, 22) + Me.txtIMDBID.TabIndex = 7 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(647, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(276, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(256, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Movie Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(8, 433) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(128, 17) + Me.chkManual.TabIndex = 6 + Me.chkManual.Text = "Manual IMDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(249, 429) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 8 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'lblIMDB + ' + Me.lblIMDB.AutoSize = True + Me.lblIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDB.Location = New System.Drawing.Point(476, 277) + Me.lblIMDB.Name = "lblIMDB" + Me.lblIMDB.Size = New System.Drawing.Size(35, 13) + Me.lblIMDB.TabIndex = 19 + Me.lblIMDB.Text = "IMDB" + Me.lblIMDB.Visible = False + ' + 'lblYearHeader + ' + Me.lblYearHeader.AutoSize = True + Me.lblYearHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYearHeader.Location = New System.Drawing.Point(414, 160) + Me.lblYearHeader.Name = "lblYearHeader" + Me.lblYearHeader.Size = New System.Drawing.Size(32, 13) + Me.lblYearHeader.TabIndex = 12 + Me.lblYearHeader.Text = "Year:" + Me.lblYearHeader.Visible = False + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.AutoSize = True + Me.lblDirectorHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirectorHeader.Location = New System.Drawing.Point(414, 186) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(51, 13) + Me.lblDirectorHeader.TabIndex = 14 + Me.lblDirectorHeader.Text = "Director:" + Me.lblDirectorHeader.Visible = False + ' + 'lblGenreHeader + ' + Me.lblGenreHeader.AutoSize = True + Me.lblGenreHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenreHeader.Location = New System.Drawing.Point(414, 213) + Me.lblGenreHeader.Name = "lblGenreHeader" + Me.lblGenreHeader.Size = New System.Drawing.Size(54, 13) + Me.lblGenreHeader.TabIndex = 16 + Me.lblGenreHeader.Text = "Genre(s):" + Me.lblGenreHeader.Visible = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.AutoSize = True + Me.lblIMDBHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblIMDBHeader.Location = New System.Drawing.Point(414, 277) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(53, 13) + Me.lblIMDBHeader.TabIndex = 18 + Me.lblIMDBHeader.Text = "IMDB ID:" + Me.lblIMDBHeader.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(295, 309) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 21 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(266, 100) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 4 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(8, 101) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(252, 22) + Me.txtSearch.TabIndex = 3 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(368, 213) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 20 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(98, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching IMDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlPicStatus + ' + Me.pnlPicStatus.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlPicStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPicStatus.Controls.Add(Me.Label4) + Me.pnlPicStatus.Location = New System.Drawing.Point(312, 185) + Me.pnlPicStatus.Name = "pnlPicStatus" + Me.pnlPicStatus.Size = New System.Drawing.Size(81, 45) + Me.pnlPicStatus.TabIndex = 11 + ' + 'Label4 + ' + Me.Label4.Location = New System.Drawing.Point(5, 5) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 33) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Fetching Poster..." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'txtFileName + ' + Me.txtFileName.Enabled = False + Me.txtFileName.Location = New System.Drawing.Point(8, 73) + Me.txtFileName.Name = "txtFileName" + Me.txtFileName.Size = New System.Drawing.Size(598, 22) + Me.txtFileName.TabIndex = 3 + ' + 'btnOpenFolder + ' + Me.btnOpenFolder.Location = New System.Drawing.Point(612, 73) + Me.btnOpenFolder.Name = "btnOpenFolder" + Me.btnOpenFolder.Size = New System.Drawing.Size(29, 23) + Me.btnOpenFolder.TabIndex = 23 + Me.btnOpenFolder.Text = "..." + Me.btnOpenFolder.UseVisualStyleBackColor = True + ' + 'dlgIMDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(647, 492) + Me.ControlBox = False + Me.Controls.Add(Me.btnOpenFolder) + Me.Controls.Add(Me.txtFileName) + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.pnlPicStatus) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.lblIMDBHeader) + Me.Controls.Add(Me.lblGenreHeader) + Me.Controls.Add(Me.lblDirectorHeader) + Me.Controls.Add(Me.lblYearHeader) + Me.Controls.Add(Me.lblIMDB) + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.txtIMDBID) + Me.Controls.Add(Me.lblGenre) + Me.Controls.Add(Me.lblDirector) + Me.Controls.Add(Me.lblYear) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblTagline) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.tvResults) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 460) + Me.Name = "dlgIMDBSearchResults" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Search Results" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlPicStatus.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents tvResults As System.Windows.Forms.TreeView + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lblYear As System.Windows.Forms.Label + Friend WithEvents lblDirector As System.Windows.Forms.Label + Friend WithEvents lblGenre As System.Windows.Forms.Label + Friend WithEvents txtIMDBID As System.Windows.Forms.TextBox + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents lblIMDB As System.Windows.Forms.Label + Friend WithEvents lblYearHeader As System.Windows.Forms.Label + Friend WithEvents lblDirectorHeader As System.Windows.Forms.Label + Friend WithEvents lblGenreHeader As System.Windows.Forms.Label + Friend WithEvents lblIMDBHeader As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlPicStatus As System.Windows.Forms.Panel + Friend WithEvents Label4 As System.Windows.Forms.Label + Friend WithEvents txtFileName As System.Windows.Forms.TextBox + Friend WithEvents btnOpenFolder As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.YouTube.Trailer/Scraper/dlgIMDBSearchResults.resx b/Addons/scraper.YouTube.Trailer/Scraper/dlgIMDBSearchResults.resx new file mode 100644 index 0000000..fc0d614 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/dlgIMDBSearchResults.resx @@ -0,0 +1,190 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr5AAAK+QG0Yd4ZAAALEUlE + QVRoQ+1YCVCU5xle5Qa55JDTRA4XWMIpKsgRLgFRVOQGAbl21+VabuWSS0A0chiPIB5RquKRkIR4VI1N + SMxMjW1sik2maWOSydFOkknTZprD/+n7/i4Gcrad1CYzvDPP/N/u/v/3v+fzvt9KZmRGZmRGZmRGZmRG + fgZi7+CoWf2ExN5xvmb1lXh6eRsFh4TMc5fJQpycnXvs7OxbLa2s7zeznDdLc8v/X76u+KKAALeNKlW6 + UqnsycrKurQiPv6jZcuWwd3dHXZ2dphrYfHmPBubATs7h04bW9t6Xz+/Cnom38PD8z7NFpLszCyJmflc + zSeJxNTMXLP6kWWq8mXl6tbevv7Xe/v6PtizZ89nnZ2dKCkpQXJyMoKDg7Fq1SohISFBWJeYiFUJCVjg + 5CRC6uYmkIFfBAYFfbg0MGjU1s5+iWbLaWLn4Oi2UOoeovkoMTA00qz+TVm7dq0OKaGXlpFhVFJWZqbc + qLLKy8uz9fPzX5Cdk/P86OgoJiYmcOvWLeHRI0fQ0NCA4uJiJCUlITQ0VMTixYtFg/Lz8rBx40ZwZHx9 + fREVFSWUlpYK6enpoKghMTFxYllwSGpo2IPOUdHR+0NCQz+IioqGXKHA8uXL37W0tvYilb47DcMjIjUr + iU5waFjgvn37Snp7e49WVFScpk0u7d69+8aOHQ+9U1VV9UVOTg7i4uIgk8kEPz8/HDt2DNevX0dfXx8y + MjJYGaTTNTc3V7zGxMYibsUKqCsqRCPYMDYkLS0d5eXloD1RUVmJuro6lJWV31bRPRQ5NlSwsrIWvLy9 + 4eLi8q6ugYEL6adFmG5IWHiEeI2IiMpvbGx8p7u7++OGxobbtEZ9fT02bNgA9lR/fz86OjqgIK9weixa + tEjMcUtLS5w/fx5nz55FkVyO+PiVpEgZUlNTERERgRWkfHh4OBLXraMoNVKalUKlKhYNZIOy1q9HS1sb + 2js6hO09PfydQPuDnWNrawsDAwPBxs7uS30Dg0pS04AwW1R4qjwYEZnd2dWF/Px8gdJEKKaX7HjkGIrV + VWCPR0ZGghVmg6hY2QDxs6OjI7S1tcUc55Q6fPgwVq5KAO2BNWvWiNHgFOFn2AiKLI5QuvG7mrdsQUtL + C65du4YrV65gbGwM1TU1KCoqEvdnA9hBurq60NLShomp6VZSlSudjeBI3BXt9vaOtwoLC8XQcR7nFynR + 99Tv0f/0BJQV9Yh4MExkFR8fH8jJy1MN0NfXF6Nw8OBBMUpsZExsHDIzM0VlONe5PlauXCkcOnQIZ86c + wdGjR8nYRzE+Po6LFy+K0WMHnDhxQiQCuneaAbNmzYKxsfFL2jo6HqSvDcGY9WblJcTb3vTijzgt2ACV + SoXcfDlaj19D44lXUHfoKhJTsyjnPWBtbY3o6GjR0KkG0OboIq+2USrU1tYiOSUF/vQ7O4PTLicnF8xS + rOjQ0JBY9M899xwuXbqEkZERMroB+QUFFLl8bNq8GfFkgL+//10DSE3MnTsX7h6yEVo7aGBCkEiSklOW + dG/b9jHnKnuWc1OuLIaq5wkU9b2A7O3jSK/sxwNeXrCwsICrqyvlefykAQIbYGVlhda2NqG6upojJGRk + ZAruHh4g/v+bk5NTF73GxcfXt6qxqeldVp4N6aNoNVCdscOUSgXWUY2EhoZg4UIpqFdA5uk51QDB3Nyc + i/8WrZnLFxDuNAsPT0+3vXv3fhAbGytw6Ni7lcQK8fJu+KmehHPOKSxSnIRPQJBoAG9E1IaAgADBwcEB + hkZGYg3UavKXi5d/d3Zx/a25hUUavcKMYFtTU1PZPzAwwWmmVqvBJNHc3IwtVAtcI2xAWFgYKS7DPIq0 + Gb2HGt/dCJiZmcHBwbGa1gsJbMQcwh0hA96mohM4Cozk5CSszSmBVDUKF9UYnBVnkZBeKCqvo6MjphFH + YP78+f8wmmMsd3FxTSGPtS0NDHxy8ZIlv3Z2dunS09cPoK2N6HtPYqeXqA4+37SpDupytVBHaca1xEqz + 04g8vjJAJhPZZzI1J2vA0NDoMhUz7+lOmEfQvdtZK6uq+tgTpJjA1McezM1MQ2T5ALzbn4dr7RVkV3fD + zNRU0NLSEtgAKui/EDMU0eNLCbzxIoIfwZvAXjINj4xcV0DkwIXd3t4ubOvbgz3DT6ByczOyczdg9erV + YtdmZ3Dkpxqgp6cHYxMTmJqaYfbs2Z/MMZ6TS3v6EFwJHNVpTGT28MMP/5OZgyhTiImJAXViZGdSY2ob + gu9DL6Gs8xGYmpgIpqam/MIblDrZ9ByPAaws05slgRmCvTM7KDg4lfsBpyM5R9jc2IzDl1/Fo+Nv4+Cz + b6H35DiKqxsRFLgEUqkUzs7OYt+YaoCunp7gRuxH0TxMe7LyDC5gfcIdCQkJE68KpTJlcHBQbELc/tk7 + 2dnZ2Ersse3gadQ2biFvmMLGxuamiYlJKj3CHVBGYF6eFO6SjDklpaVvMCNR4xMaKAJbHhrE3su30Df2 + KnY8fhPdZyaw9eQNVLX2QeYuFYmAa2qygZEBAr2HZif3P9F+ywhBBH4fO2ua9yVSD6ZXiRaND7uGh4dF + TifOFmhMEI4fP44LF86DZpTblPPvU1uvoXvjCJwyd6jsaxIeFbWcCvTv3Fu421aoy9C273F0nb6JluGX + UX/oOlT9VxGqHsOCrBHEpijIMfNgRITg5ubGBjC7CTTJvmZgaJhMW4YSfAnTvf8tor1r1676Xxw79uG5 + c+fwzDPPiOjq7n6Dcn6QPMR5GE/g4YlT5VslNS0tp6W19XOejbhYKyvUqOkZRt3QdZQOXEVk9VncT4rb + p52AY/oJBCuOwk3mJRasvb0906dAxnyiq6ObRdvxuzhVuWANCd8cJViIDTQriaS+ocGWxuWMpqbmThrG + aol9Mulr9sRaQjDBnjA9jFMkMzNrPTWwz1Kooa2nWaeROnFheTNyd7wIT8UoFuQ9BqfCxwmjcCp4DPfl + jSJNXkfFOoupWuAUouI9RVst1+ABAhfutyv/A8IhcyOwFzgHOW2+94QVExMbsX379k8oAgLTI0+aeUUq + +CpH4Kx8Eq6lT0OqPgdpxXksLKdoKMeQ2z2GOYYGAvO9rZ3dp7TNasIaAkfAmfC9qfNDwgrrEr7T618T + Y5qv3iNCEJjNuLmVl6sRnL0F0qoL8Ki/DK+WZ+HdNg7Ppitwrb6I6NZLWOzvIxIF5X4v7bGOMBlxZrc7 + s8+9kpTU1J27Bga4QQnU5cVGxR03qHoYQbtfRszwHxB3/DWED/0OPltfQFTnrxAZHsIG/NHQ0LCAtsgg + cBSYOn8w6v8Lmd3U1PRRNR1YeEzhQxCfLeQFeUjb/RTyr/4Vit98jMwr7yH80E1BfuCqEBy09DbR6RA9 + m0NYT1hB4IOMHuHeiYtUKl5J6bCdO3d+ygMbD4o8NnCzVBQVoHbXIDrGb6DixTeRePpVYe+pc3ByWnCB + mIi7O0eAGYiblNgYCfdWVCUl4jUxKSlz//79wgClE43bQg+duni9f/8gjlDPOXrytDDyxBgKFYpX6HYF + QUlgAzh9uEH9h6f5H1EAHiQlkvucnKJofH6HGuOXBw4cEE9u3CD5AHPy1Cls29bzPvH+Jrq1lKAiMG3z + fPXNrnuv5cCRI5qVxLyoSF5FB59f7uzt/TOl1vvUIF/Pzd1wkc67rfR7BUFN4BSKIfDfeTqEn5RwLtsQ + zwfS6S6V5h05fWaPFxM4dXhA5MbFvM9d9ycrzOncWe8nME0uJvgTJmd9blr3nDb/W+Ec5ybJYMN+NorP + yIzMyIz8rEUi+Re4NXpfio4DrwAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB9ElE + QVQ4T6XSTWgTQRQH8E0LaZPaD9oaxULRi0igJSroqYLoxaa3gpfSFrx4sGp7Kj31pDYnPQpG8dzgQcSg + 1orQZJPd2exWSYOxiXhKQz5oEjQxpubvm6WN2zUe1IXf7OzMe2/fLCsA+C9NF//GbwtPfD67wti5SES5 + +GZ19ZB532zfg8Lkq+uallFVFZymqRUqdNcYY9aYMFma1igpFoshl80in88jsbkJvhZRlAfGJCN9eOH3 + WxWF5TaiUezs1FCv13X8SiYSoD2IwaCTx5rpA20OS5KEVCqFWu07KpWyrlr9hkJhG4wxSOHwdXMypw+B + tTVXOBRCOr1FSVWUSkVSQrn8FcViEUyW8VkTr5iTOX14vbLSTgUK0d0j8C54IaCOZDIBRt1d9gYXjIl7 + GhM6xjWZAvl3yGQy9BFziMfj+Phegcf3FsLMc7TdfHbPmMztexBFcZ7O+oXwM+NdRP5xf/nVJ9uEF9aJ + h2ifeoyOyUcve+eedjUtwNHP0x8MBMaoo/EPauioIAgW+6jH233pFrpG76DTvYRu99LGwNhtW9MCf+IY + WbjRf3YOfWdm0Uf3gQuLh/m60EqvID3kGDlBhoiLnCKnd52ksCO9g+dnHM4p6eDxcY/VIvzqgAJaSRux + kQ5ygHSa7XXDtVBOo8C/g/ATj6yxruTRIKcAAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/Scraper/dlgIMDBSearchResults.vb b/Addons/scraper.YouTube.Trailer/Scraper/dlgIMDBSearchResults.vb new file mode 100644 index 0000000..6fde061 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/dlgIMDBSearchResults.vb @@ -0,0 +1,520 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Text.RegularExpressions +Imports System.IO +Imports EmberAPI + +Public Class dlgIMDBSearchResults + + #Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + Friend WithEvents tmrLoad As New System.Windows.Forms.Timer + Friend WithEvents tmrWait As New System.Windows.Forms.Timer + + Private IMDB As New IMDB.Scraper + Private sHTTP As New HTTP + Dim UseOFDBGenre As Boolean + Dim UseOFDBOutline As Boolean + Dim UseOFDBPlot As Boolean + Dim UseOFDBTitle As Boolean + Private _currnode As Integer = -1 + Private _prevnode As Integer = -2 + + Private _InfoCache As New Dictionary(Of String, MediaContainers.Movie) + Private _PosterCache As New Dictionary(Of String, System.Drawing.Image) + Private _filterOptions As Structures.ScrapeOptions + +#End Region 'Fields + + #Region "Methods" + + Public Overloads Function ShowDialog(ByVal sMovieTitle As String, ByVal filterOptions As Structures.ScrapeOptions) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + _filterOptions = filterOptions + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + chkManual.Enabled = False + IMDB.IMDBURL = IMDBURL + IMDB.SearchMovieAsync(sMovieTitle, _filterOptions) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal Res As IMDB.MovieSearchResults, ByVal sMovieTitle As String) As Windows.Forms.DialogResult + Me.tmrWait.Enabled = False + Me.tmrWait.Interval = 250 + Me.tmrLoad.Enabled = False + Me.tmrLoad.Interval = 100 + + Me.Text = String.Concat(Master.eLang.GetString(10, "Search Results"), " - ", sMovieTitle) + Me.txtSearch.Text = sMovieTitle + SearchResultsDownloaded(Res) + + Return MyBase.ShowDialog() + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.OK_Button.Enabled = False + pnlPicStatus.Visible = False + _InfoCache.Clear() + _PosterCache.Clear() + Me.ClearInfo() + Me.Label3.Text = Master.eLang.GetString(11, "Searching IMDB...") + Me.pnlLoading.Visible = True + chkManual.Enabled = False + IMDB.CancelAsync() + IMDB.IMDBURL = IMDBURL + IMDB.SearchMovieAsync(Me.txtSearch.Text, _filterOptions) + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + If Regex.IsMatch(Me.txtIMDBID.Text.Replace("tt", String.Empty), "\d\d\d\d\d\d\d") Then + IMDB.IMDBURL = IMDBURL + IMDB.GetSearchMovieInfoAsync(Me.txtIMDBID.Text.Replace("tt", String.Empty), Master.tmpMovie, Master.DefaultOptions) + Else + MsgBox(Master.eLang.GetString(12, "The ID you entered is not a valid IMDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + End If + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + sHTTP.StartDownloadImage(Args.pURL) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image, .IMDBId = Args.IMDBId} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + '// + ' Thread finished: display pic if it was able to get one + '\\ + + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbPoster.Image = Res.Result + If Not _PosterCache.ContainsKey(Res.IMDBId) Then + _PosterCache.Add(Res.IMDBId, Res.Result) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + pnlPicStatus.Visible = False + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Master.tmpMovie.Clear() + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub btnOpenFolder_Click(sender As Object, e As EventArgs) Handles btnOpenFolder.Click + Dim fPath As String = Directory.GetParent(Master.currMovie.Filename).FullName + + If Not String.IsNullOrEmpty(fPath) Then + Shell("Explorer.exe " & fPath, vbNormalFocus) + End If + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtIMDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.tvResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtIMDBID.Text = String.Empty + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblTagline.Text = String.Empty + Me.lblYear.Text = String.Empty + Me.lblDirector.Text = String.Empty + Me.lblGenre.Text = String.Empty + Me.txtOutline.Text = String.Empty + Me.lblIMDB.Text = String.Empty + Me.pbPoster.Image = Nothing + + Master.tmpMovie.Clear() + + IMDB.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.lblYearHeader.Visible = areVisible + Me.lblDirectorHeader.Visible = areVisible + Me.lblGenreHeader.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.lblIMDBHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + Me.lblYear.Visible = areVisible + Me.lblTagline.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblDirector.Visible = areVisible + Me.lblGenre.Visible = areVisible + Me.lblIMDB.Visible = areVisible + Me.pbPoster.Visible = areVisible + End Sub + + Private Sub dlgIMDBSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub dlgIMDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + pnlPicStatus.Visible = False + IMDB.IMDBURL = IMDBURL + IMDB.UseOFDBTitle = UseOFDBTitle + IMDB.UseOFDBOutline = UseOFDBOutline + IMDB.UseOFDBPlot = UseOFDBPlot + IMDB.UseOFDBGenre = UseOFDBGenre + AddHandler IMDB.SearchMovieInfoDownloaded, AddressOf SearchMovieInfoDownloaded + AddHandler IMDB.SearchResultsDownloaded, AddressOf SearchResultsDownloaded + + Try + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgIMDBSearchResults_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + Me.tvResults.Focus() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + If Me.chkManual.Checked AndAlso Me.btnVerify.Enabled Then + If Not Regex.IsMatch(Me.txtIMDBID.Text.Replace("tt", String.Empty), "\d\d\d\d\d\d\d") Then + MsgBox(Master.eLang.GetString(12, "The ID you entered is not a valid IMDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + Exit Sub + Else + If MsgBox(String.Concat(Master.eLang.GetString(13, "You have manually entered an IMDB ID but have not verified it is correct."), vbNewLine, vbNewLine, Master.eLang.GetString(101, "Are you sure you want to continue?", True)), MsgBoxStyle.YesNo, Master.eLang.GetString(14, "Continue without verification?")) = MsgBoxResult.No Then + Exit Sub + Else + Master.tmpMovie.IMDBID = Me.txtIMDBID.Text.Replace("tt", String.Empty) + End If + End If + End If + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.Close() + End Sub + + Private Sub SearchMovieInfoDownloaded(ByVal sPoster As String, ByVal bSuccess As Boolean) + '// + ' Info downloaded... fill form with data + '\\ + + Me.pnlLoading.Visible = False + Me.OK_Button.Enabled = True + + Try + If bSuccess Then + Me.ControlsVisible(True) + Me.lblTitle.Text = Master.tmpMovie.Title + Me.lblTagline.Text = Master.tmpMovie.Tagline + Me.lblYear.Text = Master.tmpMovie.Year + Me.lblDirector.Text = Master.tmpMovie.Director + Me.lblGenre.Text = Master.tmpMovie.Genre + Me.txtOutline.Text = Master.tmpMovie.Outline + Me.lblIMDB.Text = Master.tmpMovie.IMDBID + + If _PosterCache.ContainsKey(Master.tmpMovie.IMDBID) Then + 'just set it + Me.pbPoster.Image = _PosterCache(Master.tmpMovie.IMDBID) + Else + 'go download it, if available + If Not String.IsNullOrEmpty(sPoster) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + pnlPicStatus.Visible = True + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = sPoster, .IMDBId = Master.tmpMovie.IMDBID}) + End If + + End If + + 'store clone of tmpmovie + If Not _InfoCache.ContainsKey(Master.tmpMovie.IMDBID) Then + _InfoCache.Add(Master.tmpMovie.IMDBID, GetMovieClone(Master.tmpMovie)) + End If + + + Me.btnVerify.Enabled = False + Else + If Me.chkManual.Checked Then + MsgBox(Master.eLang.GetString(15, "Unable to retrieve movie details for the entered IMDB ID. Please check your entry and try again."), MsgBoxStyle.Exclamation, Master.eLang.GetString(16, "Verification Failed")) + Me.btnVerify.Enabled = True + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SearchResultsDownloaded(ByVal M As IMDB.MovieSearchResults) + '// + ' Process the results that IMDB gave us + '\\ + + Try + Me.tvResults.Nodes.Clear() + Me.ClearInfo() + If Not IsNothing(M) Then + If M.PartialMatches.Count > 0 OrElse M.PopularTitles.Count > 0 OrElse M.ExactMatches.Count > 0 Then + Dim TnP As New TreeNode(String.Format(Master.eLang.GetString(17, "Partial Matches ({0})"), M.PartialMatches.Count)) + Dim selNode As New TreeNode + + If M.PartialMatches.Count > 0 Then + M.PartialMatches.Sort() + For Each Movie As MediaContainers.Movie In M.PartialMatches + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + selNode = TnP.FirstNode + End If + + If M.PopularTitles.Count > 0 Then + M.PopularTitles.Sort() + If M.PartialMatches.Count > 0 OrElse M.ExactMatches.Count > 0 Then + Me.tvResults.Nodes(TnP.Index).Collapse() + End If + + TnP = New TreeNode(String.Format(Master.eLang.GetString(19, "Popular Titles ({0})"), M.PopularTitles.Count)) + + For Each Movie As MediaContainers.Movie In M.PopularTitles + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + + selNode = TnP.FirstNode + End If + + If M.ExactMatches.Count > 0 Then + M.ExactMatches.Sort() + If M.PartialMatches.Count > 0 Then + Me.tvResults.Nodes(TnP.Index).Collapse() + End If + TnP = New TreeNode(String.Format(Master.eLang.GetString(18, "Exact Matches ({0})"), M.ExactMatches.Count)) + For Each Movie As MediaContainers.Movie In M.ExactMatches + TnP.Nodes.Add(New TreeNode() With {.Text = String.Concat(Movie.Title, If(Not String.IsNullOrEmpty(Movie.Year), String.Format(" ({0})", Movie.Year), String.Empty)), .Tag = Movie.IMDBID}) + Next + TnP.Expand() + Me.tvResults.Nodes.Add(TnP) + + selNode = TnP.FirstNode + + End If + Me._prevnode = -2 + + 'determine if we automatically start downloading info for selected node + If M.ExactMatches.Count > 0 Then + Me.tvResults.SelectedNode = selNode + ElseIf M.PopularTitles.Count > 0 Then + Me.tvResults.SelectedNode = selNode + ElseIf M.PartialMatches.Count > 0 Then + Me.tvResults.SelectedNode = selNode + Else + Me.tvResults.SelectedNode = Nothing + End If + Me.tvResults.Focus() + Else + Me.tvResults.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(20, "No Matches Found")}) + End If + End If + Me.pnlLoading.Visible = False + chkManual.Enabled = True + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.Label2.Text = Master.eLang.GetString(21, "View details of each result to find the proper movie.") + Me.Label1.Text = Master.eLang.GetString(22, "Movie Search Results") + Me.chkManual.Text = Master.eLang.GetString(23, "Manual IMDB Entry:") + Me.btnVerify.Text = Master.eLang.GetString(24, "Verify") + Me.lblYearHeader.Text = Master.eLang.GetString(49, "Year:", True) + Me.lblDirectorHeader.Text = Master.eLang.GetString(239, "Director:", True) + Me.lblGenreHeader.Text = Master.eLang.GetString(51, "Genre(s):", True) + Me.lblIMDBHeader.Text = Master.eLang.GetString(289, "IMDB ID:", True) + Me.lblPlotHeader.Text = Master.eLang.GetString(242, "Plot Outline:", True) + Me.Label3.Text = Master.eLang.GetString(25, "Searching IMDB...") + Me.txtFileName.Text = Master.currMovie.Filename + End Sub + + Private Sub tmrLoad_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrLoad.Tick + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + Me.pnlLoading.Visible = True + Me.Label3.Text = Master.eLang.GetString(26, "Downloading details...") + + IMDB.IMDBURL = IMDBURL + IMDB.GetSearchMovieInfoAsync(Me.tvResults.SelectedNode.Tag.ToString, Master.tmpMovie, Master.DefaultOptions) + End Sub + + Private Sub tmrWait_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrWait.Tick + If Not Me._prevnode = Me._currnode Then + Me._prevnode = Me._currnode + Me.tmrWait.Stop() + Me.tmrLoad.Start() + Else + Me.tmrLoad.Stop() + Me.tmrWait.Stop() + End If + End Sub + Private Sub tvResults_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvResults.AfterSelect + Try + Me.tmrWait.Stop() + Me.tmrLoad.Stop() + + Me.ClearInfo() + Me.OK_Button.Enabled = False + + If Not IsNothing(Me.tvResults.SelectedNode.Tag) AndAlso Not String.IsNullOrEmpty(Me.tvResults.SelectedNode.Tag.ToString) Then + Me._currnode = Me.tvResults.SelectedNode.Index + + 'check if this movie is in the cache already + If _InfoCache.ContainsKey(Me.tvResults.SelectedNode.Tag.ToString) Then + Master.tmpMovie = GetMovieClone(_InfoCache(Me.tvResults.SelectedNode.Tag.ToString)) + SearchMovieInfoDownloaded(String.Empty, True) + Return + End If + + Me.pnlLoading.Visible = True + Me.tmrWait.Start() + Else + Me.pnlLoading.Visible = False + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub tvResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub txtIMDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtIMDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtIMDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtIMDBID.TextChanged + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Function GetMovieClone(ByVal original As MediaContainers.Movie) As MediaContainers.Movie + 'have to do this the old-fashioned way because it is not serializable + Dim result As New MediaContainers.Movie + With result + .IMDBID = original.IMDBID + .Genre = original.Genre + .Title = original.Title + .Tagline = original.Tagline + .Year = original.Year + .Director = original.Director + .Genre = original.Genre + .Outline = original.Outline + End With + Return result + 'Using mem As New IO.MemoryStream() + ' Dim bin As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, New System.Runtime.Serialization.StreamingContext(Runtime.Serialization.StreamingContextStates.Clone)) + ' bin.Serialize(mem, original) + ' mem.Seek(0, IO.SeekOrigin.Begin) + ' Return DirectCast(bin.Deserialize(mem), MediaContainers.Movie) + 'End Using + End Function + + + #End Region 'Methods + + #Region "Nested Types" + + Private Structure Arguments + + #Region "Fields" + + Dim pURL As String + Dim IMDBId As String + + #End Region 'Fields + + End Structure + + Private Structure Results + + #Region "Fields" + + Dim Result As Image + Dim IMDBId As String + + #End Region 'Fields + + End Structure + + #End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/Scraper/dlgImgSelect.Designer.vb b/Addons/scraper.YouTube.Trailer/Scraper/dlgImgSelect.Designer.vb new file mode 100644 index 0000000..213f00e --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/dlgImgSelect.Designer.vb @@ -0,0 +1,466 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgImgSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgImgSelect)) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlBG = New System.Windows.Forms.Panel() + Me.pnlBottomMain = New System.Windows.Forms.Panel() + Me.pnlSize = New System.Windows.Forms.Panel() + Me.btnPreview = New System.Windows.Forms.Button() + Me.rbSmall = New System.Windows.Forms.RadioButton() + Me.rbMedium = New System.Windows.Forms.RadioButton() + Me.rbLarge = New System.Windows.Forms.RadioButton() + Me.rbXLarge = New System.Windows.Forms.RadioButton() + Me.pnlFanart = New System.Windows.Forms.Panel() + Me.chkThumb = New System.Windows.Forms.CheckBox() + Me.chkMid = New System.Windows.Forms.CheckBox() + Me.chkOriginal = New System.Windows.Forms.CheckBox() + Me.lblInfo = New System.Windows.Forms.Label() + Me.pnlDLStatus = New System.Windows.Forms.Panel() + Me.pnlMPDB = New System.Windows.Forms.Panel() + Me.lblDL3Status = New System.Windows.Forms.Label() + Me.lblDL3 = New System.Windows.Forms.Label() + Me.pbDL3 = New System.Windows.Forms.ProgressBar() + Me.pnlIMPA = New System.Windows.Forms.Panel() + Me.lblDL2Status = New System.Windows.Forms.Label() + Me.lblDL2 = New System.Windows.Forms.Label() + Me.pbDL2 = New System.Windows.Forms.ProgressBar() + Me.lblDL1Status = New System.Windows.Forms.Label() + Me.lblDL1 = New System.Windows.Forms.Label() + Me.pbDL1 = New System.Windows.Forms.ProgressBar() + Me.pnlSinglePic = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.TableLayoutPanel1.SuspendLayout() + Me.pnlBottomMain.SuspendLayout() + Me.pnlSize.SuspendLayout() + Me.pnlFanart.SuspendLayout() + Me.pnlDLStatus.SuspendLayout() + Me.pnlMPDB.SuspendLayout() + Me.pnlIMPA.SuspendLayout() + Me.pnlSinglePic.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(687, 11) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlBG + ' + Me.pnlBG.AutoScroll = True + Me.pnlBG.Dock = System.Windows.Forms.DockStyle.Fill + Me.pnlBG.Location = New System.Drawing.Point(0, 0) + Me.pnlBG.Name = "pnlBG" + Me.pnlBG.Size = New System.Drawing.Size(836, 495) + Me.pnlBG.TabIndex = 1 + Me.pnlBG.Visible = False + ' + 'pnlBottomMain + ' + Me.pnlBottomMain.Controls.Add(Me.pnlSize) + Me.pnlBottomMain.Controls.Add(Me.pnlFanart) + Me.pnlBottomMain.Controls.Add(Me.lblInfo) + Me.pnlBottomMain.Controls.Add(Me.TableLayoutPanel1) + Me.pnlBottomMain.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlBottomMain.Location = New System.Drawing.Point(0, 495) + Me.pnlBottomMain.Name = "pnlBottomMain" + Me.pnlBottomMain.Size = New System.Drawing.Size(836, 50) + Me.pnlBottomMain.TabIndex = 0 + ' + 'pnlSize + ' + Me.pnlSize.BackColor = System.Drawing.Color.White + Me.pnlSize.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.pnlSize.Controls.Add(Me.btnPreview) + Me.pnlSize.Controls.Add(Me.rbSmall) + Me.pnlSize.Controls.Add(Me.rbMedium) + Me.pnlSize.Controls.Add(Me.rbLarge) + Me.pnlSize.Controls.Add(Me.rbXLarge) + Me.pnlSize.Location = New System.Drawing.Point(8, 8) + Me.pnlSize.Name = "pnlSize" + Me.pnlSize.Size = New System.Drawing.Size(673, 34) + Me.pnlSize.TabIndex = 1 + Me.pnlSize.Visible = False + ' + 'btnPreview + ' + Me.btnPreview.Enabled = False + Me.btnPreview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnPreview.Image = CType(resources.GetObject("btnPreview.Image"), System.Drawing.Image) + Me.btnPreview.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPreview.Location = New System.Drawing.Point(593, 5) + Me.btnPreview.Name = "btnPreview" + Me.btnPreview.Size = New System.Drawing.Size(75, 23) + Me.btnPreview.TabIndex = 4 + Me.btnPreview.Text = "Preview" + Me.btnPreview.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPreview.UseVisualStyleBackColor = True + ' + 'rbSmall + ' + Me.rbSmall.AutoSize = True + Me.rbSmall.Enabled = False + Me.rbSmall.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbSmall.Location = New System.Drawing.Point(475, 8) + Me.rbSmall.Name = "rbSmall" + Me.rbSmall.Size = New System.Drawing.Size(53, 17) + Me.rbSmall.TabIndex = 3 + Me.rbSmall.TabStop = True + Me.rbSmall.Text = "Small" + Me.rbSmall.UseVisualStyleBackColor = True + ' + 'rbMedium + ' + Me.rbMedium.AutoSize = True + Me.rbMedium.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbMedium.Location = New System.Drawing.Point(201, 8) + Me.rbMedium.Name = "rbMedium" + Me.rbMedium.Size = New System.Drawing.Size(69, 17) + Me.rbMedium.TabIndex = 1 + Me.rbMedium.TabStop = True + Me.rbMedium.Text = "Medium" + Me.rbMedium.UseVisualStyleBackColor = True + ' + 'rbLarge + ' + Me.rbLarge.AutoSize = True + Me.rbLarge.Enabled = False + Me.rbLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbLarge.Location = New System.Drawing.Point(343, 8) + Me.rbLarge.Name = "rbLarge" + Me.rbLarge.Size = New System.Drawing.Size(55, 17) + Me.rbLarge.TabIndex = 2 + Me.rbLarge.TabStop = True + Me.rbLarge.Text = "Cover" + Me.rbLarge.UseVisualStyleBackColor = True + ' + 'rbXLarge + ' + Me.rbXLarge.AutoSize = True + Me.rbXLarge.Enabled = False + Me.rbXLarge.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbXLarge.Location = New System.Drawing.Point(26, 8) + Me.rbXLarge.Name = "rbXLarge" + Me.rbXLarge.Size = New System.Drawing.Size(66, 17) + Me.rbXLarge.TabIndex = 0 + Me.rbXLarge.TabStop = True + Me.rbXLarge.Text = "Original" + Me.rbXLarge.UseVisualStyleBackColor = True + ' + 'pnlFanart + ' + Me.pnlFanart.BackColor = System.Drawing.Color.White + Me.pnlFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFanart.Controls.Add(Me.chkThumb) + Me.pnlFanart.Controls.Add(Me.chkMid) + Me.pnlFanart.Controls.Add(Me.chkOriginal) + Me.pnlFanart.Location = New System.Drawing.Point(8, 8) + Me.pnlFanart.Name = "pnlFanart" + Me.pnlFanart.Size = New System.Drawing.Size(339, 34) + Me.pnlFanart.TabIndex = 5 + Me.pnlFanart.Visible = False + ' + 'chkThumb + ' + Me.chkThumb.AutoSize = True + Me.chkThumb.Location = New System.Drawing.Point(231, 8) + Me.chkThumb.Name = "chkThumb" + Me.chkThumb.Size = New System.Drawing.Size(111, 17) + Me.chkThumb.TabIndex = 2 + Me.chkThumb.Text = "Check All Thumb" + Me.chkThumb.UseVisualStyleBackColor = True + ' + 'chkMid + ' + Me.chkMid.AutoSize = True + Me.chkMid.Location = New System.Drawing.Point(131, 8) + Me.chkMid.Name = "chkMid" + Me.chkMid.Size = New System.Drawing.Size(96, 17) + Me.chkMid.TabIndex = 1 + Me.chkMid.Text = "Check All Mid" + Me.chkMid.UseVisualStyleBackColor = True + ' + 'chkOriginal + ' + Me.chkOriginal.AutoSize = True + Me.chkOriginal.Location = New System.Drawing.Point(7, 8) + Me.chkOriginal.Name = "chkOriginal" + Me.chkOriginal.Size = New System.Drawing.Size(118, 17) + Me.chkOriginal.TabIndex = 0 + Me.chkOriginal.Text = "Check All Original" + Me.chkOriginal.UseVisualStyleBackColor = True + ' + 'lblInfo + ' + Me.lblInfo.Location = New System.Drawing.Point(402, 10) + Me.lblInfo.Name = "lblInfo" + Me.lblInfo.Size = New System.Drawing.Size(240, 31) + Me.lblInfo.TabIndex = 1 + Me.lblInfo.Text = "Selected item will be set as fanart. All checked items will be saved to \extrathu" & _ + "mbs." + Me.lblInfo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblInfo.Visible = False + ' + 'pnlDLStatus + ' + Me.pnlDLStatus.BackColor = System.Drawing.Color.White + Me.pnlDLStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlDLStatus.Controls.Add(Me.pnlMPDB) + Me.pnlDLStatus.Controls.Add(Me.pnlIMPA) + Me.pnlDLStatus.Controls.Add(Me.lblDL1Status) + Me.pnlDLStatus.Controls.Add(Me.lblDL1) + Me.pnlDLStatus.Controls.Add(Me.pbDL1) + Me.pnlDLStatus.Location = New System.Drawing.Point(257, 132) + Me.pnlDLStatus.Name = "pnlDLStatus" + Me.pnlDLStatus.Size = New System.Drawing.Size(321, 223) + Me.pnlDLStatus.TabIndex = 2 + Me.pnlDLStatus.Visible = False + ' + 'pnlMPDB + ' + Me.pnlMPDB.Controls.Add(Me.lblDL3Status) + Me.pnlMPDB.Controls.Add(Me.lblDL3) + Me.pnlMPDB.Controls.Add(Me.pbDL3) + Me.pnlMPDB.Location = New System.Drawing.Point(0, 147) + Me.pnlMPDB.Name = "pnlMPDB" + Me.pnlMPDB.Size = New System.Drawing.Size(321, 75) + Me.pnlMPDB.TabIndex = 4 + ' + 'lblDL3Status + ' + Me.lblDL3Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL3Status.Name = "lblDL3Status" + Me.lblDL3Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL3Status.TabIndex = 1 + ' + 'lblDL3 + ' + Me.lblDL3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL3.Location = New System.Drawing.Point(5, 10) + Me.lblDL3.Name = "lblDL3" + Me.lblDL3.Size = New System.Drawing.Size(310, 13) + Me.lblDL3.TabIndex = 0 + Me.lblDL3.Text = "Performing Preliminary Tasks..." + ' + 'pbDL3 + ' + Me.pbDL3.Location = New System.Drawing.Point(6, 53) + Me.pbDL3.Name = "pbDL3" + Me.pbDL3.Size = New System.Drawing.Size(309, 19) + Me.pbDL3.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL3.TabIndex = 2 + ' + 'pnlIMPA + ' + Me.pnlIMPA.Controls.Add(Me.pnlSinglePic) + Me.pnlIMPA.Controls.Add(Me.lblDL2Status) + Me.pnlIMPA.Controls.Add(Me.lblDL2) + Me.pnlIMPA.Controls.Add(Me.pbDL2) + Me.pnlIMPA.Location = New System.Drawing.Point(0, 73) + Me.pnlIMPA.Name = "pnlIMPA" + Me.pnlIMPA.Size = New System.Drawing.Size(321, 75) + Me.pnlIMPA.TabIndex = 3 + ' + 'lblDL2Status + ' + Me.lblDL2Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL2Status.Location = New System.Drawing.Point(5, 34) + Me.lblDL2Status.Name = "lblDL2Status" + Me.lblDL2Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL2Status.TabIndex = 1 + ' + 'lblDL2 + ' + Me.lblDL2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDL2.Location = New System.Drawing.Point(5, 10) + Me.lblDL2.Name = "lblDL2" + Me.lblDL2.Size = New System.Drawing.Size(310, 13) + Me.lblDL2.TabIndex = 0 + Me.lblDL2.Text = "Performing Preliminary Tasks..." + ' + 'pbDL2 + ' + Me.pbDL2.Location = New System.Drawing.Point(6, 52) + Me.pbDL2.Name = "pbDL2" + Me.pbDL2.Size = New System.Drawing.Size(309, 19) + Me.pbDL2.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL2.TabIndex = 2 + ' + 'lblDL1Status + ' + Me.lblDL1Status.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL1Status.Location = New System.Drawing.Point(5, 29) + Me.lblDL1Status.Name = "lblDL1Status" + Me.lblDL1Status.Size = New System.Drawing.Size(310, 13) + Me.lblDL1Status.TabIndex = 1 + ' + 'lblDL1 + ' + Me.lblDL1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDL1.Location = New System.Drawing.Point(5, 6) + Me.lblDL1.Name = "lblDL1" + Me.lblDL1.Size = New System.Drawing.Size(310, 13) + Me.lblDL1.TabIndex = 0 + Me.lblDL1.Text = "Performing Preliminary Tasks..." + ' + 'pbDL1 + ' + Me.pbDL1.Location = New System.Drawing.Point(6, 49) + Me.pbDL1.Name = "pbDL1" + Me.pbDL1.Size = New System.Drawing.Size(309, 19) + Me.pbDL1.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbDL1.TabIndex = 2 + ' + 'pnlSinglePic + ' + Me.pnlSinglePic.BackColor = System.Drawing.Color.White + Me.pnlSinglePic.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlSinglePic.Controls.Add(Me.Label2) + Me.pnlSinglePic.Controls.Add(Me.ProgressBar1) + Me.pnlSinglePic.Location = New System.Drawing.Point(0, 1) + Me.pnlSinglePic.Name = "pnlSinglePic" + Me.pnlSinglePic.Size = New System.Drawing.Size(321, 75) + Me.pnlSinglePic.TabIndex = 1 + Me.pnlSinglePic.Visible = False + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(5, 10) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(310, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Downloading Selected Image..." + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(6, 53) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(309, 19) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'dlgImgSelect + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.AutoScroll = True + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(836, 545) + Me.ControlBox = False + Me.Controls.Add(Me.pnlDLStatus) + Me.Controls.Add(Me.pnlBG) + Me.Controls.Add(Me.pnlBottomMain) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgImgSelect" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Poster" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.pnlBottomMain.ResumeLayout(False) + Me.pnlSize.ResumeLayout(False) + Me.pnlSize.PerformLayout() + Me.pnlFanart.ResumeLayout(False) + Me.pnlFanart.PerformLayout() + Me.pnlDLStatus.ResumeLayout(False) + Me.pnlMPDB.ResumeLayout(False) + Me.pnlIMPA.ResumeLayout(False) + Me.pnlSinglePic.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pnlBG As System.Windows.Forms.Panel + Friend WithEvents pnlBottomMain As System.Windows.Forms.Panel + Friend WithEvents pnlDLStatus As System.Windows.Forms.Panel + Friend WithEvents lblDL1Status As System.Windows.Forms.Label + Friend WithEvents lblDL1 As System.Windows.Forms.Label + Friend WithEvents pbDL1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlIMPA As System.Windows.Forms.Panel + Friend WithEvents lblDL2Status As System.Windows.Forms.Label + Friend WithEvents lblDL2 As System.Windows.Forms.Label + Friend WithEvents pbDL2 As System.Windows.Forms.ProgressBar + Friend WithEvents lblInfo As System.Windows.Forms.Label + Friend WithEvents pnlSize As System.Windows.Forms.Panel + Friend WithEvents rbSmall As System.Windows.Forms.RadioButton + Friend WithEvents rbMedium As System.Windows.Forms.RadioButton + Friend WithEvents rbLarge As System.Windows.Forms.RadioButton + Friend WithEvents rbXLarge As System.Windows.Forms.RadioButton + Friend WithEvents pnlSinglePic As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlMPDB As System.Windows.Forms.Panel + Friend WithEvents lblDL3Status As System.Windows.Forms.Label + Friend WithEvents lblDL3 As System.Windows.Forms.Label + Friend WithEvents pbDL3 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlFanart As System.Windows.Forms.Panel + Friend WithEvents chkThumb As System.Windows.Forms.CheckBox + Friend WithEvents chkMid As System.Windows.Forms.CheckBox + Friend WithEvents chkOriginal As System.Windows.Forms.CheckBox + Friend WithEvents btnPreview As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.YouTube.Trailer/Scraper/dlgImgSelect.resx b/Addons/scraper.YouTube.Trailer/Scraper/dlgImgSelect.resx new file mode 100644 index 0000000..e4a4f58 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/dlgImgSelect.resx @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnPreview.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA + CwAB5DetvwAAAuRJREFUOE+lkltsS3Ecx3+ILAsPFrfEyxJPXkh0bokg4UG78TQNI5FImPBAJKiNhBAy + MTwRMRJ1ibsZ29jc2t00Vrq1p3q6tqft6Tk9t87YeLCHff3/3Sp4dZJPvv/f5fs7///5HwJA/8Nv88jw + 8ApD1y+blnnNtKwGjmXl/qCQMxt+fB9xjI2NEYdGR0dp9OfP6Yph+gOKjpBmMcy8CoxwPi5gok81kDGt + BPOUci+xt1LO0Gy+ZAZuUcbtCe4NpHEtLKNBkHGfrQt5dySNrpSKIcvcbJkmka5pNKhrtrfxFE71RlD3 + UcT5gIjt7THMvhLHTEZlSwz1n0ScZTXe8yKextec6TRNY3zAF0O3tUYl7Ovqh+t9EHs8IRSdC4FO9+WZ + VBfEjlchHPEF8z2PRQnDg9b4AE3L0hA7wqNwDFWvP2Cn1w9Hox90zAc6McFRH9Y97MWuDn++56YwgJEc + G2CwAdmsSkPsCLf6I1jb3IUNL3sY3Zhxxgs67AG5PCg+4YW9uRsbWY33XAp8xrBlOHVdI1IVhb5oWdv1 + QBjLn3qwtqUDq5s6MOd0O2jfizwlx9uwqtGLdazGey76Q/hm6k4tmyXKyDLlVMV29aOApU0erHnWgWmH + noF2NYL2Ph2nuhFF+5uw8okXy1hP/YcghjTVqSgZoqQkkZZK2m58ErDouRfzLjSDKt2grbf+ZpMbJSeb + sPA520FvCINqxinLaaKoKHJsETGK1rCIh+8F3HnTh7vvgrjHbqMAjx/0CGiNDCAqJZGUEk45zQYk4nG+ + i7LPgoBkNIpsOglTzcDSFOQ0FTmdwdRiyvNqKolELAZZlre0t7URLSkro21VVSVdnZ1pSZKQSqXAPizY + /wHDMMCuKg+Ps6oKJZNBsL//6+7q6gWTaPzhWjx31qzF5Xb7Acf69S6mNRV2e22Fw1G7gcGVUcPyro3l + 5Qfnl5auYZ4Zk7l3ClsxuBQGTszNx/9SqHHDVG76BaMnpgu1OH2ZAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/Scraper/dlgImgSelect.vb b/Addons/scraper.YouTube.Trailer/Scraper/dlgImgSelect.vb new file mode 100644 index 0000000..7e37076 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/dlgImgSelect.vb @@ -0,0 +1,1309 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.IO.Compression +Imports System.Text +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgImgSelect + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwIMPADownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwMPDBDownload As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwTMDBDownload As New System.ComponentModel.BackgroundWorker + + Private CachePath As String = String.Empty + Private chkImage() As CheckBox + Private DLType As Enums.ImageType + Private ETHashes As New List(Of String) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + Private IMPA As New IMPA.Scraper + Private IMPAPosters As New List(Of MediaContainers.Image) + Private isEdit As Boolean = False + Private isShown As Boolean = False + Private iTop As Integer = 5 + Private lblImage() As Label + Private MPDB As New MPDB.Scraper + Private MPDBPosters As New List(Of MediaContainers.Image) + Private noImages As Boolean = False + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private PreDL As Boolean = False + Private Results As New Containers.ImgResult + Private selIndex As Integer = -1 + Private TMDB As New TMDB.Scraper + Private TMDBPosters As New List(Of MediaContainers.Image) + Private tMovie As New Structures.DBMovie + Private tmpImage As New MediaContainers.Image + Private _impaDone As Boolean = True + Private _mpdbDone As Boolean = True + Private _tmdbDone As Boolean = True + Private selURL As String = "" + +#End Region 'Fields + +#Region "Events" + + Private Event IMPADone() + + Private Event MPDBDone() + + Private Event TMDBDone() + +#End Region 'Events + +#Region "Methods" + + Public Sub PreLoad(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.PreDL = True + Me.SetUp() + Me.StartDownload() + End Sub + + Public Overloads Function ShowDialog(ByVal mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, Optional ByVal _isEdit As Boolean = False) As Containers.ImgResult + '// + ' Overload to pass data + '\\ + + Me.tMovie = mMovie + Me.DLType = _DLType + Me.isEdit = _isEdit + Me.isShown = True + + MyBase.ShowDialog() + Return Results + End Function + + Public Overloads Function ShowDialog() As Containers.ImgResult + Me.isShown = True + MyBase.ShowDialog() + + Return Results + End Function + + 'Rewrite to simplify + Private Sub AddImage(ByVal iImage As Image, ByVal sDescription As String, ByVal iIndex As Integer, ByVal sURL As String, ByVal isChecked As Boolean, poster As MediaContainers.Image) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(256, 286) + Me.pbImage(iIndex).Size = New Size(250, 250) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.pnlImage(iIndex).Tag = poster + Me.pbImage(iIndex).Tag = poster + Me.pbImage(iIndex).Image = iImage + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.pnlBG.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + If Me.DLType = Enums.ImageType.Fanart Then + ReDim Preserve Me.chkImage(iIndex) + Me.chkImage(iIndex) = New CheckBox() + Me.chkImage(iIndex).Name = iIndex.ToString + Me.chkImage(iIndex).Size = New Size(250, 30) + Me.chkImage(iIndex).AutoSize = False + Me.chkImage(iIndex).BackColor = Color.White + Me.chkImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.chkImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + 'Me.chkImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + Me.chkImage(iIndex).Left = 0 + Me.chkImage(iIndex).Top = 250 + Me.chkImage(iIndex).Checked = isChecked + Me.pnlImage(iIndex).Controls.Add(Me.chkImage(iIndex)) + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + Else + ReDim Preserve Me.lblImage(iIndex) + Me.lblImage(iIndex) = New Label() + Me.lblImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Size = New Size(250, 30) + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + If IsTMDBURL(sURL) Then + Me.lblImage(iIndex).Text = Master.eLang.GetString(55, "Multiple") + Else + Me.lblImage(iIndex).Text = String.Format("{0}x{1} ({2})", Me.pbImage(iIndex).Image.Width.ToString, Me.pbImage(iIndex).Image.Height.ToString, sDescription) + End If + Me.lblImage(iIndex).Tag = poster + Me.lblImage(iIndex).Left = 0 + Me.lblImage(iIndex).Top = 250 + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 301 + Else + Me.iLeft += 271 + End If + End Sub + + Private Sub AllDoneDownloading() + If Me._impaDone AndAlso Me._tmdbDone AndAlso Me._mpdbDone Then + Me.pnlDLStatus.Visible = False + Me.TMDBPosters.AddRange(Me.IMPAPosters) + Me.TMDBPosters.AddRange(Me.MPDBPosters) + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + End If + End Sub + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + PreviewImage() + End Sub + Private Sub PreviewImage() + Try + Dim tImage As New Images + + Me.pnlSinglePic.Visible = True + Application.DoEvents() + + Select Case True + Case rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + Case rbLarge.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + Case rbMedium.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(cover)_(url=", Me.rbMedium.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case rbSmall.Checked + If Master.eSettings.UseImgCache Then + tImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + tImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End Select + + Me.pnlSinglePic.Visible = False + + If Not IsNothing(tImage.Image) Then + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage.Image) + + End If + + tImage.Dispose() + tImage = Nothing + + Catch ex As Exception + Me.pnlSinglePic.Visible = False + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPADownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwIMPADownload.DoWork + '// + ' Thread to download impa posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + + For i As Integer = 0 To Me.IMPAPosters.Count - 1 + If bwIMPADownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwIMPADownload.ReportProgress(i + 1, Me.IMPAPosters.Item(i).URL) + Try + Me.IMPAPosters.Item(i).WebImage.FromWeb(Me.IMPAPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.IMPAPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.IMPAPosters.Item(i).URL = StringUtils.CleanURL(Me.IMPAPosters.Item(i).URL) + Me.IMPAPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.IMPAPosters.Item(i).Description, ")_(url=", Me.IMPAPosters.Item(i).URL, ").jpg"))) + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwIMPADownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwIMPADownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL2Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL2.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwIMPADownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwIMPADownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._impaDone = True + RaiseEvent IMPADone() + End If + End Sub + + Private Sub bwMPDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwMPDBDownload.DoWork + '// + ' Thread to download mpdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + For i As Integer = 0 To Me.MPDBPosters.Count - 1 + Try + If Me.bwMPDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwMPDBDownload.ReportProgress(i + 1, Me.MPDBPosters.Item(i).URL) + Try + Me.MPDBPosters.Item(i).WebImage.FromWeb(Me.MPDBPosters.Item(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then Me.Results.Posters.Add(Me.MPDBPosters.Item(i).URL) + If Master.eSettings.UseImgCache Then + Try + Me.MPDBPosters.Item(i).URL = StringUtils.CleanURL(Me.MPDBPosters.Item(i).URL) + Me.MPDBPosters.Item(i).WebImage.Save(Path.Combine(CachePath, String.Concat("poster_(", Me.MPDBPosters.Item(i).Description, ")_(url=", Me.MPDBPosters.Item(i).URL, ").jpg"))) + Catch + End Try + End If + Catch + End Try + Catch + End Try + Next + End Sub + + Private Sub bwMPDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwMPDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL3Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL3.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwMPDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwMPDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._mpdbDone = True + RaiseEvent MPDBDone() + End If + End Sub + + Private Sub bwTMDBDownload_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTMDBDownload.DoWork + '// + ' Thread to download tmdb posters from the internet (multi-threaded because sometimes + ' the web server is slow to respond or not reachable, hanging the GUI) + '\\ + Dim thumbLink As String = String.Empty + Dim savePath As String = String.Empty + Dim extrathumbSize As String = String.Empty + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + 'Only download the posters themselves that match the cover criteria for display purposes, no need to download them all. + Dim posters As MediaContainers.Image() + If Me.DLType = Enums.ImageType.Fanart Then + posters = TMDBPosters.Where(Function(s) s.Description = extrathumbSize).ToArray() + Else + posters = TMDBPosters.Where(Function(s) s.Description = "cover").ToArray() + End If + + Dim percent = 100 / posters.Count + For i As Integer = 0 To posters.Count - 1 + Try + If Me.DLType = Enums.ImageType.Fanart OrElse (Master.eSettings.UseImgCache OrElse (posters(i).Description = "cover" OrElse Master.eSettings.PosterPrefSizeOnly)) Then + If Me.bwTMDBDownload.CancellationPending Then + e.Cancel = True + Return + End If + Me.bwTMDBDownload.ReportProgress(Convert.ToInt32((i + 1) * percent), posters(i).URL) + Try + posters(i).WebImage.FromWeb(posters(i).URL) + If Not Master.eSettings.NoSaveImagesToNfo Then + If Me.DLType = Enums.ImageType.Fanart Then + + + If Not posters(i).URL.Contains("-thumb.") Then + Me.Results.Fanart.URL = GetServerURL(posters(i).URL) ' "http://images.themoviedb.org" + thumbLink = RemoveServerURL(posters(i).URL) + 'If thumbLink.Contains("_poster.") Then + thumbLink = thumbLink.Replace("-poster.", "-thumb.") + thumbLink = thumbLink.Replace("-original.", "-thumb.") + ''Else + 'thumbLink = thumbLink.Insert(thumbLink.LastIndexOf("."), "-thumb") + 'End If + Me.Results.Fanart.Thumb.Add(New MediaContainers.Thumb With {.Preview = thumbLink, .Text = posters(i).URL.Replace("http://images.themoviedb.org", String.Empty)}) + End If + Else + Me.Results.Posters.Add(posters(i).URL) + End If + End If + If Master.eSettings.UseImgCache OrElse Master.eSettings.AutoET Then + Try + posters(i).URL = Me.CleanTMDBURL(posters(i).URL) + + savePath = Path.Combine(CachePath, String.Concat(If(Me.DLType = Enums.ImageType.Fanart, "fanart_(", "poster_("), posters(i).Description, ")_(url=", posters(i).URL, ").jpg")) + posters(i).WebImage.Save(savePath) + + If Master.eSettings.AutoET Then + Dim tSize As New Enums.FanartSize + Select Case posters(i).Description.ToLower + Case "original" + tSize = Enums.FanartSize.Lrg + Case "mid" + tSize = Enums.FanartSize.Mid + Case "thumb" + tSize = Enums.FanartSize.Small + End Select + If Master.eSettings.AutoETSize = tSize Then + If Not ETHashes.Contains(HashFile.HashCalcFile(savePath)) Then + posters(i).isChecked = True + End If + End If + End If + + Catch + End Try + End If + Catch + End Try + End If + Catch + End Try + Next + End Sub + + Private Sub bwTMDBDownload_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTMDBDownload.ProgressChanged + '// + ' Update the status bar with the name of the current media name and increase progress bar + '\\ + Try + Dim sStatus As String = e.UserState.ToString + Me.lblDL1Status.Text = String.Format(Master.eLang.GetString(27, "Downloading {0}"), If(sStatus.Length > 40, StringUtils.TruncateURL(sStatus, 40), sStatus)) + Me.pbDL1.Value = e.ProgressPercentage + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTMDBDownload_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTMDBDownload.RunWorkerCompleted + '// + ' Thread finished: process the pics + '\\ + + If Not e.Cancelled Then + Me._tmdbDone = True + RaiseEvent TMDBDone() + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + IMPA.Cancel() + MPDB.Cancel() + TMDB.Cancel() + + If bwIMPADownload.IsBusy Then bwIMPADownload.CancelAsync() + If bwMPDBDownload.IsBusy Then bwMPDBDownload.CancelAsync() + If bwTMDBDownload.IsBusy Then bwTMDBDownload.CancelAsync() + + While bwIMPADownload.IsBusy OrElse bwMPDBDownload.IsBusy OrElse bwTMDBDownload.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub CheckAll(ByVal sType As String, ByVal Checked As Boolean) + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Text.ToLower.Contains(sType) Then + Me.chkImage(i).Checked = Checked + End If + Next + End Sub + + Private Sub chkMid_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMid.CheckedChanged + Me.CheckAll("(poster)", chkMid.Checked) + End Sub + + Private Sub chkOriginal_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOriginal.CheckedChanged + Me.CheckAll("(original)", chkOriginal.Checked) + End Sub + + Private Sub chkThumb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkThumb.CheckedChanged + Me.CheckAll("(thumb)", chkThumb.Checked) + End Sub + + Private Sub dlgImgSelect_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'Me.tmpImage.Dispose() + + IMPA = Nothing + MPDB = Nothing + TMDB = Nothing + + IMPAPosters = Nothing + MPDBPosters = Nothing + TMDBPosters = Nothing + End Sub + + Private Sub dlgImgSelect_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing + If Master.eSettings.AutoET AndAlso Not Master.eSettings.UseImgCache Then FileUtils.Delete.DeleteDirectory(Me.CachePath) + End Sub + + Private Sub dlgImgSelect_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + If Not PreDL Then SetUp() + End Sub + + Private Sub dlgImgSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Try + Application.DoEvents() + If Not PreDL Then + StartDownload() + ElseIf noImages Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, poster As MediaContainers.Image) + Try + 'set all pnl colors to white first + 'remove all the current genres + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(i).BackColor = Color.White + Me.chkImage(i).ForeColor = Color.Black + Else + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + End If + Next + + 'set selected pnl color to blue + Me.pnlImage(iIndex).BackColor = Color.Blue + + If DLType = Enums.ImageType.Fanart Then + Me.chkImage(iIndex).BackColor = Color.Blue + Me.chkImage(iIndex).ForeColor = Color.White + Else + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + End If + + Me.selIndex = iIndex + Me.selURL = poster.URL + + Me.pnlSize.Visible = False + + If IsTMDBURL(poster.URL) Then + Me.SetupSizes(poster.ParentID) + If Not rbLarge.Checked AndAlso Not rbMedium.Checked AndAlso Not rbSmall.Checked AndAlso Not rbXLarge.Checked Then + Me.OK_Button.Enabled = False + Else + Me.OK_Button.Focus() + End If + Me.tmpImage.Clear() + Else + Me.rbXLarge.Checked = False + Me.rbLarge.Checked = False + Me.rbMedium.Checked = False + Me.rbSmall.Checked = False + Me.OK_Button.Enabled = True + Me.OK_Button.Focus() + Me.tmpImage = CType(Me.pbImage(iIndex).Tag, MediaContainers.Image) + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function IsTMDBURL(ByVal sURL As String) As Boolean + If sURL.ToLower.Contains("themoviedb.org") OrElse sURL.ToLower.Contains("d3gtl9l2a4fn1j.cloudfront.net") OrElse sURL.ToLower.Contains("cf1.imgobject.com") OrElse sURL.ToLower.Contains("cf2.imgobject.com") Then + Return True + Else + Return False + End If + End Function + + Private Function CleanTMDBURL(ByVal sURL As String) As String + If IsTMDBURL(sURL) Then + Dim _sURL As New Uri(sURL) + sURL = String.Concat("$$[themoviedb.org]", _sURL.GetComponents(UriComponents.Path, UriFormat.UriEscaped)) + Else + sURL = StringUtils.TruncateURL(sURL, 40, True) + End If + Return sURL.Replace(":", "$c$").Replace("/", "$s$") + End Function + + + Private Sub GetFanart() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim di As New DirectoryInfo(CachePath) + Dim lFi As New List(Of FileInfo) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + If Not IsNothing(tImage.WebImage.Image) Then + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Lrg Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + 'Case sFile.Name.Contains("(mid)") + ' tImage.Description = "mid" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Mid Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + If Master.eSettings.AutoET AndAlso Master.eSettings.AutoETSize = Enums.FanartSize.Small Then + If Not ETHashes.Contains(HashFile.HashCalcFile(sFile.FullName)) Then + tImage.isChecked = True + End If + End If + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + End If + Next + ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + If Master.eSettings.AutoET AndAlso Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + End If + + Me.lblDL1.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL1Status.Text = String.Empty + Me.pbDL1.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me.TMDB.GetImagesAsync(tMovie.Movie.IMDBID, "backdrop") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub GetPosters() + Try + Dim NoneFound As Boolean = True + + If Master.eSettings.UseImgCache Then + Dim lFi As New List(Of FileInfo) + Dim di As New DirectoryInfo(CachePath) + + If Not Directory.Exists(CachePath) Then + Directory.CreateDirectory(CachePath) + Else + Try + lFi.AddRange(di.GetFiles("*.jpg")) + Catch + End Try + End If + + If lFi.Count > 0 Then + Me.pnlDLStatus.Height = 75 + Me.pnlDLStatus.Top = 207 + Me.pnlDLStatus.Visible = True + Application.DoEvents() + NoneFound = False + Dim tImage As MediaContainers.Image + For Each sFile As FileInfo In lFi + tImage = New MediaContainers.Image + tImage.WebImage.FromFile(sFile.FullName) + Select Case True + Case sFile.Name.Contains("(original)") + tImage.Description = "original" + Case sFile.Name.Contains("(mid)") + tImage.Description = "mid" + Case sFile.Name.Contains("(cover)") + tImage.Description = "cover" + Case sFile.Name.Contains("(thumb)") + tImage.Description = "thumb" + Case sFile.Name.Contains("(poster)") + tImage.Description = "poster" + End Select + tImage.URL = Regex.Match(sFile.Name, "\(url=(.*?)\)").Groups(1).ToString + Me.TMDBPosters.Add(tImage) + Next + ProcessPics(TMDBPosters) + Me.pnlDLStatus.Visible = False + Me.pnlBG.Visible = True + End If + + lFi = Nothing + di = Nothing + End If + + If NoneFound Then + If AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + Me.lblDL1.Text = Master.eLang.GetString(32, "Retrieving data from TheMovieDB.com...") + Me.lblDL1Status.Text = String.Empty + Me.pbDL1.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._tmdbDone = False + + Me.TMDB.GetImagesAsync(tMovie.Movie.IMDBID, "poster") + Else + Me.lblDL1.Text = Master.eLang.GetString(33, "TheMovieDB.com is not enabled") + End If + + If AdvancedSettings.GetBooleanSetting("UseIMPA", False) Then + Me.lblDL2.Text = Master.eLang.GetString(34, "Retrieving data from IMPAwards.com...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._impaDone = False + + Me.IMPA.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL2.Text = Master.eLang.GetString(35, "IMPAwards.com is not enabled") + End If + + If AdvancedSettings.GetBooleanSetting("UseMPDB", False) Then + Me.lblDL3.Text = Master.eLang.GetString(36, "Retrieving data from MoviePosterDB.com...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = 3 + Me.pnlDLStatus.Visible = True + Me.Refresh() + + Me._mpdbDone = False + + Me.MPDB.GetImagesAsync(tMovie.Movie.IMDBID) + Else + Me.lblDL3.Text = Master.eLang.GetString(37, "MoviePostersDB.com is not enabled") + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPADoneDownloading() + Try + Me._impaDone = True + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL2.Value = 0 + + Me.lblDL2.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL2Status.Text = String.Empty + Me.pbDL2.Maximum = Posters.Count + + Me.IMPAPosters = Posters + + Me.bwIMPADownload.WorkerSupportsCancellation = True + Me.bwIMPADownload.WorkerReportsProgress = True + Me.bwIMPADownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub IMPAProgressUpdated(ByVal iPercent As Integer) + Me.pbDL2.Value = iPercent + End Sub + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Label).Name), DirectCast(DirectCast(sender, Label).Tag, MediaContainers.Image)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlBG.VerticalScroll.Value + 50) <= pnlBG.VerticalScroll.Maximum Then + pnlBG.VerticalScroll.Value += 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Maximum + End If + Else + If (pnlBG.VerticalScroll.Value - 50) >= pnlBG.VerticalScroll.Minimum Then + pnlBG.VerticalScroll.Value -= 50 + Else + pnlBG.VerticalScroll.Value = pnlBG.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub MPDBDoneDownloading() + Try + Me._mpdbDone = True + Me.AllDoneDownloading() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL3.Value = 0 + + Me.lblDL3.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL3Status.Text = String.Empty + Me.pbDL3.Maximum = Posters.Count + + Me.MPDBPosters = Posters + + Me.bwMPDBDownload.WorkerSupportsCancellation = True + Me.bwMPDBDownload.WorkerReportsProgress = True + Me.bwMPDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub MPDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL3.Value = iPercent + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Try + Dim tmpPathPlus As String = String.Empty + Dim extrathumbSize As String + + extrathumbSize = AdvancedSettings.GetSetting("ManualETSize", "thumb") + + If DLType = Enums.ImageType.Fanart Then + tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") + Else + tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") + End If + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + 'Me.tmpImage.Save(tmpPathPlus, 100, selURL) + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(tMovie) + End If + End If + Else + Me.pnlBG.Visible = False + Me.pnlSinglePic.Visible = True + Me.Refresh() + Application.DoEvents() + Select Case True + Case Me.rbXLarge.Checked + If Master.eSettings.UseImgCache Then + tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(original)_(url=", Me.rbXLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "original" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbXLarge.Tag.ToString) + End If + End If + Case Me.rbLarge.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(mid)_(url=", Me.rbLarge.Tag, ").jpg"))) + Else + If extrathumbSize = "w1280" And DLType = Enums.ImageType.Fanart Or Not DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbLarge.Tag.ToString) + End If + End If + Case Me.rbMedium.Checked + If extrathumbSize = "poster" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbMedium.Tag.ToString) + End If + Case Me.rbSmall.Checked + If Master.eSettings.UseImgCache Then + Me.tmpImage.WebImage.FromFile(Path.Combine(CachePath, String.Concat("poster_(thumb)_(url=", Me.rbSmall.Tag, ").jpg"))) + Else + If extrathumbSize = "thumb" And DLType = Enums.ImageType.Fanart Then + Me.tmpImage.WebImage = CType(Me.pbImage(selIndex).Tag, MediaContainers.Image).WebImage + Else + Me.tmpImage.WebImage.FromWeb(Me.rbSmall.Tag.ToString) + End If + End If + End Select + + If Not IsNothing(Me.tmpImage.WebImage.Image) Then + If isEdit Then + 'Me.tmpImage.Save(tmpPathPlus, 100, selURL) + Me.tmpImage.WebImage.Save(tmpPathPlus, , , False) + Results.ImagePath = tmpPathPlus + Else + If Me.DLType = Enums.ImageType.Fanart Then + Results.ImagePath = Me.tmpImage.WebImage.SaveAsFanart(Me.tMovie) + Else + Results.ImagePath = Me.tmpImage.WebImage.SaveAsPoster(Me.tMovie) + End If + End If + End If + Me.pnlSinglePic.Visible = False + End If + + If Me.DLType = Enums.ImageType.Fanart Then + Dim iMod As Integer = 0 + Dim iVal As Integer = 1 + Dim extraPath As String = String.Empty + Dim isChecked As Boolean = False + + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + isChecked = True + Exit For + End If + Next + + If isChecked Then + Dim extrathumbsFolderName As String = AdvancedSettings.GetSetting("ExtraThumbsFolderName", "extrathumbs") + If isEdit Then + extraPath = Path.Combine(Master.TempPath, extrathumbsFolderName) + Else + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName, extrathumbsFolderName) + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Me.tMovie.Filename) Then + extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Me.tMovie.Filename).FullName).FullName).FullName, extrathumbsFolderName) + Else + extraPath = Path.Combine(Directory.GetParent(Me.tMovie.Filename).FullName, extrathumbsFolderName) + End If + iMod = Functions.GetExtraModifier(extraPath) + iVal = iMod + 1 + End If + + If Not Directory.Exists(extraPath) Then + Directory.CreateDirectory(extraPath) + End If + + Dim fsET As FileStream + For i As Integer = 0 To UBound(Me.chkImage) + If Me.chkImage(i).Checked Then + fsET = New FileStream(Path.Combine(extraPath, String.Concat("thumb", iVal, ".jpg")), FileMode.Create, FileAccess.ReadWrite) + Me.pbImage(i).Image.Save(fsET, System.Drawing.Imaging.ImageFormat.Jpeg) + fsET.Close() + iVal += 1 + End If + Next + fsET = Nothing + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, MediaContainers.Image)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) + Try + 'If Me.DLType = Enums.ImageType.Fanart OrElse Not IsTMDBURL(DirectCast(sender, PictureBox).Tag.ToString) Then + 'ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(DirectCast(sender, PictureBox).Image) + 'Else + PreviewImage() + 'End If + Catch + End Try + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, Panel).Name), DirectCast(DirectCast(sender, Panel).Tag, MediaContainers.Image)) + End Sub + + Private Sub ProcessPics(ByVal posters As List(Of MediaContainers.Image)) + Try + Dim iIndex As Integer = 0 + + 'remove all entries with invalid images + If Master.eSettings.UseImgCache Then + For i As Integer = posters.Count - 1 To 0 Step -1 + If IsNothing(posters.Item(i).WebImage.Image) Then + posters.RemoveAt(i) + End If + Next + End If + + If posters.Count > 0 Then + For Each xPoster As MediaContainers.Image In posters.OrderBy(Function(p) RemoveServerURL(p.URL)) + If Not IsNothing(xPoster.WebImage.Image) AndAlso (Me.DLType = Enums.ImageType.Fanart OrElse Not (IsTMDBURL(xPoster.URL) AndAlso Not xPoster.Description = "cover")) Then + Me.AddImage(xPoster.WebImage.Image, xPoster.Description, iIndex, xPoster.URL, xPoster.isChecked, xPoster) + iIndex += 1 + End If + Next + Else + If Not Me.PreDL OrElse isShown Then + If Me.DLType = Enums.ImageType.Fanart Then + MsgBox(Master.eLang.GetString(28, "No Fanart found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(29, "No Fanart Found")) + Else + MsgBox(Master.eLang.GetString(30, "No Posters found for this movie."), MsgBoxStyle.Information, Master.eLang.GetString(31, "No Posters Found")) + End If + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + Else + noImages = True + End If + End If + + Me.Activate() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub rbLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbMedium_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbMedium.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbSmall_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbSmall.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub rbXLarge_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbXLarge.CheckedChanged + Me.OK_Button.Enabled = True + Me.btnPreview.Enabled = True + End Sub + + Private Sub SetUp() + Try + IMPA.IMDBURL = IMDBURL + TMDB.IMDBURL = IMDBURL + MPDB.IMDBURL = IMDBURL + AddHandler TMDB.PostersDownloaded, AddressOf TMDBPostersDownloaded + AddHandler TMDB.ProgressUpdated, AddressOf TMDBProgressUpdated + AddHandler IMPA.PostersDownloaded, AddressOf IMPAPostersDownloaded + AddHandler IMPA.ProgressUpdated, AddressOf IMPAProgressUpdated + AddHandler MPDB.PostersDownloaded, AddressOf MPDBPostersDownloaded + AddHandler MPDB.ProgressUpdated, AddressOf MPDBProgressUpdated + AddHandler IMPADone, AddressOf IMPADoneDownloading + AddHandler TMDBDone, AddressOf TMDBDoneDownloading + AddHandler MPDBDone, AddressOf MPDBDoneDownloading + + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlBG.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlBG) + + If Me.DLType = Enums.ImageType.Posters Then + Me.Text = String.Concat(Master.eLang.GetString(39, "Select Poster"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Else + Me.Text = String.Concat(Master.eLang.GetString(40, "Select Fanart"), " - ", If(Not String.IsNullOrEmpty(Me.tMovie.Movie.Title), Me.tMovie.Movie.Title, Me.tMovie.ListTitle)) + Me.pnlDLStatus.Height = 75 + Me.pnlDLStatus.Top = 207 + + If Master.eSettings.AutoET Then + ETHashes = HashFile.CurrentETHashes(tMovie.Filename) + End If + End If + + CachePath = String.Concat(Master.TempPath, Path.DirectorySeparatorChar, tMovie.Movie.IMDBID, Path.DirectorySeparatorChar, If(Me.DLType = Enums.ImageType.Posters, "posters", "fanart")) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview", True) + Me.chkThumb.Text = Master.eLang.GetString(41, "Check All Thumb") + Me.chkMid.Text = Master.eLang.GetString(42, "Check All Mid") + Me.chkOriginal.Text = Master.eLang.GetString(43, "Check All Original") + Me.lblInfo.Text = Master.eLang.GetString(44, "Selected item will be set as fanart. All checked items will be saved to \extrathumbs.") + Me.lblDL3.Text = Master.eLang.GetString(45, "Performing Preliminary Tasks...") + Me.lblDL2.Text = Me.lblDL3.Text + Me.lblDL1.Text = Me.lblDL3.Text + Me.Label2.Text = Master.eLang.GetString(46, "Downloading Selected Image...") + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(0, sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Function RemoveServerURL(ByVal sURL As String) As String + If sURL.StartsWith("http://") Then + Dim s As Integer = sURL.IndexOf("/", 7) + If s >= 0 Then Return sURL.Substring(sURL.IndexOf("/", 7)) + End If + Return sURL + End Function + + Private Sub SetupSizes(ByVal ParentID As String) + Try + rbXLarge.Checked = False + rbXLarge.Enabled = False + rbXLarge.Text = Master.eLang.GetString(47, "Original") + rbLarge.Checked = False + rbLarge.Enabled = False + rbMedium.Checked = False + rbSmall.Checked = False + rbSmall.Enabled = False + If Me.DLType = Enums.ImageType.Fanart Then + rbLarge.Text = "w1280" + rbMedium.Text = "poster" + rbSmall.Text = "thumb" + Else + rbLarge.Text = Master.eLang.GetString(48, "Cover") + rbMedium.Text = Master.eLang.GetString(49, "Medium") + rbSmall.Text = Master.eLang.GetString(50, "Small") + End If + + For Each TMDBPoster As MediaContainers.Image In TMDBPosters.Where(Function(f) f.ParentID = ParentID) + Select Case TMDBPoster.Description + Case "original" + ' xlarge + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbXLarge.Enabled = True + rbXLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbXLarge.Text = String.Format(Master.eLang.GetString(51, "Original ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "cover" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "w1280" + ' large + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbLarge.Enabled = True + rbLarge.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbLarge.Text = String.Format(Master.eLang.GetString(52, "Cover ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbLarge.Text = String.Format("w1280 ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + End If + Case "thumb" + ' small + If Not Master.eSettings.UseImgCache OrElse Not IsNothing(TMDBPoster.WebImage.Image) Then + rbSmall.Enabled = True + rbSmall.Tag = TMDBPoster.URL + 'If Master.eSettings.UseImgCache Then Me.rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbSmall.Text = String.Format(Master.eLang.GetString(53, "Small ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + End If + Case "mid" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + Case "poster" + 'If Master.eSettings.UseImgCache Then Me.rbMedium.Text = String.Format(Master.eLang.GetString(54, "Medium ({0}x{1})"), Me.TMDBPosters.Item(i).WebImage.Image.Width, Me.TMDBPosters.Item(i).WebImage.Image.Height) + rbMedium.Text = String.Format("Poster ({0}x{1})", TMDBPoster.Width, TMDBPoster.Height) + rbMedium.Tag = TMDBPoster.URL + End Select + Next + + Select Case Master.eSettings.PreferredPosterSize + Case Enums.PosterSize.Small + rbSmall.Checked = rbSmall.Enabled + Case Enums.PosterSize.Mid + rbMedium.Checked = rbMedium.Enabled + Case Enums.PosterSize.Lrg + rbLarge.Checked = rbLarge.Enabled + Case Enums.PosterSize.Xlrg + rbXLarge.Checked = rbXLarge.Enabled + End Select + + pnlSize.Visible = True + + Invalidate() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub StartDownload() + Try + Select Case Me.DLType + Case Enums.ImageType.Posters + Me.GetPosters() + Case Enums.ImageType.Fanart + Me.GetFanart() + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBDoneDownloading() + Try + If Me.DLType = Enums.ImageType.Posters Then + Me._tmdbDone = True + Me.AllDoneDownloading() + Else + Me.pnlDLStatus.Visible = False + Me.ProcessPics(Me.TMDBPosters) + Me.pnlBG.Visible = True + 'Me.pnlFanart.Visible = True + 'Me.lblInfo.Visible = True + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBPostersDownloaded(ByVal Posters As List(Of MediaContainers.Image)) + Try + Me.pbDL1.Value = 0 + + Me.lblDL1.Text = Master.eLang.GetString(38, "Preparing images...") + Me.lblDL1Status.Text = String.Empty + + TMDBPosters = Posters + Me.pbDL1.Maximum = 100 + + Me.bwTMDBDownload.WorkerSupportsCancellation = True + Me.bwTMDBDownload.WorkerReportsProgress = True + Me.bwTMDBDownload.RunWorkerAsync() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TMDBProgressUpdated(ByVal iPercent As Integer) + Me.pbDL1.Value = iPercent + End Sub + +#End Region 'Methods +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailer.Designer.vb b/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailer.Designer.vb new file mode 100644 index 0000000..2871b29 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailer.Designer.vb @@ -0,0 +1,292 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailer + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTrailer)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lbTrailers = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnGetTrailers = New System.Windows.Forms.Button() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtManual = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.txtYouTube = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnSetNfo = New System.Windows.Forms.Button() + Me.ofdTrailer = New System.Windows.Forms.OpenFileDialog() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.btnPlayBrowser = New System.Windows.Forms.Button() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(350, 340) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(120, 23) + Me.OK_Button.TabIndex = 6 + Me.OK_Button.Text = "Download" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(350, 369) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(120, 23) + Me.Cancel_Button.TabIndex = 7 + Me.Cancel_Button.Text = "Cancel" + ' + 'lbTrailers + ' + Me.lbTrailers.Enabled = False + Me.lbTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lbTrailers.FormattingEnabled = True + Me.lbTrailers.HorizontalScrollbar = True + Me.lbTrailers.Location = New System.Drawing.Point(6, 19) + Me.lbTrailers.Name = "lbTrailers" + Me.lbTrailers.Size = New System.Drawing.Size(445, 173) + Me.lbTrailers.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.pnlStatus) + Me.GroupBox1.Controls.Add(Me.btnGetTrailers) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Controls.Add(Me.lbTrailers) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(9, 9) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(458, 319) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Select Trailer to Scrape" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(122, 60) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + Me.pnlStatus.Visible = False + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(121, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Compiling trailer list..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 32) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'btnGetTrailers + ' + Me.btnGetTrailers.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnGetTrailers.Image = CType(resources.GetObject("btnGetTrailers.Image"), System.Drawing.Image) + Me.btnGetTrailers.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnGetTrailers.Location = New System.Drawing.Point(130, 82) + Me.btnGetTrailers.Name = "btnGetTrailers" + Me.btnGetTrailers.Size = New System.Drawing.Size(184, 23) + Me.btnGetTrailers.TabIndex = 2 + Me.btnGetTrailers.Text = "Download Trailer List" + Me.btnGetTrailers.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnGetTrailers.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.btnBrowse) + Me.GroupBox2.Controls.Add(Me.txtManual) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.txtYouTube) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Location = New System.Drawing.Point(6, 201) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(445, 111) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Manual Trailer Entry" + ' + 'btnBrowse + ' + Me.btnBrowse.Location = New System.Drawing.Point(410, 82) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 4 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtManual + ' + Me.txtManual.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtManual.Location = New System.Drawing.Point(9, 82) + Me.txtManual.Name = "txtManual" + Me.txtManual.Size = New System.Drawing.Size(395, 22) + Me.txtManual.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 68) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(71, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Local Trailer:" + ' + 'txtYouTube + ' + Me.txtYouTube.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtYouTube.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtYouTube.Location = New System.Drawing.Point(9, 28) + Me.txtYouTube.Name = "txtYouTube" + Me.txtYouTube.Size = New System.Drawing.Size(426, 22) + Me.txtYouTube.TabIndex = 1 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(6, 14) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(151, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Direct Link or YouTube URL:" + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Enabled = False + Me.btnPlayTrailer.Image = CType(resources.GetObject("btnPlayTrailer.Image"), System.Drawing.Image) + Me.btnPlayTrailer.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnPlayTrailer.Location = New System.Drawing.Point(12, 369) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(120, 23) + Me.btnPlayTrailer.TabIndex = 3 + Me.btnPlayTrailer.Text = "Preview Trailer" + Me.btnPlayTrailer.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnSetNfo + ' + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Location = New System.Drawing.Point(224, 340) + Me.btnSetNfo.Name = "btnSetNfo" + Me.btnSetNfo.Size = New System.Drawing.Size(120, 23) + Me.btnSetNfo.TabIndex = 5 + Me.btnSetNfo.Text = "Set To Nfo" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(478, 331) + Me.Panel1.TabIndex = 2 + ' + 'btnPlayBrowser + ' + Me.btnPlayBrowser.Enabled = False + Me.btnPlayBrowser.Location = New System.Drawing.Point(12, 340) + Me.btnPlayBrowser.Name = "btnPlayBrowser" + Me.btnPlayBrowser.Size = New System.Drawing.Size(120, 23) + Me.btnPlayBrowser.TabIndex = 4 + Me.btnPlayBrowser.Text = "Open In Browser" + Me.btnPlayBrowser.UseVisualStyleBackColor = True + ' + 'dlgTrailer + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(484, 398) + Me.ControlBox = False + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.btnSetNfo) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.btnPlayTrailer) + Me.Controls.Add(Me.btnPlayBrowser) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailer" + Me.ShowIcon = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Trailer" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lbTrailers As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnPlayTrailer As System.Windows.Forms.Button + Friend WithEvents btnSetNfo As System.Windows.Forms.Button + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents txtYouTube As System.Windows.Forms.TextBox + Friend WithEvents btnBrowse As System.Windows.Forms.Button + Friend WithEvents txtManual As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents ofdTrailer As System.Windows.Forms.OpenFileDialog + Friend WithEvents btnGetTrailers As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents btnPlayBrowser As System.Windows.Forms.Button + +End Class diff --git a/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailer.resx b/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailer.resx new file mode 100644 index 0000000..f08e020 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailer.resx @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnGetTrailers.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAK + 6QAACukB/XXO0wAAABh0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzT7MfTgAAAfdJREFUOE+lkk1r + E1EUhi9apQsr7vwDigUXLtzpyrWlpdD8BSEbN1p1IRJQqNXoarCNH03aKlgQjU1ahCr2a6HSRRszGSe0 + 4nQ+M9/JjIhYeb25JGVGmo0OPMw5h/M+9zIMAfBfxBpd07osyzxv21aCMuTY9pDnugmhUjkX3YsSa8xa + 7ToVgIZBw4wgaGBlZRn376WHo7ttYg0NjzfDTODYcB0H38MQS0uLuDM6isz42NXofpNYQwXc7uktge95 + 0FQVxcIs5opFfPr44UI0s6cgeoO2JAwD1Ot+c56NZmIC+g2YwLJN+E6A0NtB6O/AdwMmbTEWzcQEhq5z + plmjgRBflDeYF5IMQZ5nMya3zM4CVVU4XdfQcH/hffUmbi0TxjvxBr3NbzTlhqF3FsjyNqcoMjzzB94K + aaQWjzAWhNuo2z9B/xOoitJZ8HVri5MkCbZWx1zpLoYXjjIKpRE4RgOKLGNbkjoL+HL5gbSpYGL1GpL5 + Y7hYOMlI5o/j0eolqN8MVEUxE83EBBvr6yP8Zx4b5TVceTWIRK6XcfllP0qVNYiCiArPp6OZ3WI/IYf6 + +/pO5bITmfzM6+e5Z9mps6ne6pnUic0nTx9Pz74ozkxPTT4cHBg4vY+Qw3sJDhBCutmQPq13DyFdPX/N + uunuwWbN+nbxb4D8AU3a+lQSEAyqAAAAAElFTkSuQmCC +</value> + </data> + <data name="btnPlayTrailer.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9kEGhIhAdf7pBcAAAJDSURBVDhPtVJLa5pBFPWxsGoQNI2oAY1ogigI + GitIULQufKxcBGmzLLpwo9B/UOgmv6GKuxDdCCKIGyOBLIpE8IWIaBauFEQSwcfCuZ07PkIogW564HDn + m7nnzHxzhvNfsFwuE5PJ5HelUnm5u7ubDYfD5ng8/kGXDjYd7+Dp6elTv9+fJxIJcDgcJBAIQDAYhIuL + CxKLxaDdbkOhUPiybX8LFJdKJdBoNOT8/BxcLheYzWaw2WyA30i9Xk+y2SxkMplvW9kr6M4LWohEIoHj + 42MIh8OQy+VAJpOBSqVic1KpFLCnVquBQqFQMyFisVh8x+PS4Z4ejwcQ6XSafXO53P2a1WqFer1+Q8cb + zOfzKi2Ect+Ev7BDKpXaz+/YarVeaN2gWq3OaAEejwd8Pp/R7XYz8Xq9ZjWZTDLh7iTlchnrR8pXA6FQ + CCKRCMRiMfh8PiYkhDCT5+dnODo6AoFAwAxoxFhVqOdMp9MWdSZ4SYeHhyCXyyEUCjEDFNN1TIddKF4y + GjSbzRWtH5jBaDT6eXl5CUqlEtRqNWi1Wri6umIGuDPGeXJywpJAc6fTCff392Um3uKAxogGxGAwMEEk + EoHVasXSsFgsYDKZ8B3gCUmj0QCdTufeajfI5/NfHx4ewGg0EvoKmQGeyuv1sh3tdjucnp6SYrEI19fX + v7ayt7i9vY3SFwnxeJzF6Pf72WWiQTQahW63+754B/qf6sfHx5vBYDDrdDqA7PV6Kxpb5ezs7PO27Z/A + pZRTYlRCnPgbHM4fFEdnm0hssg4AAAAASUVORK5CYII= +</value> + </data> + <metadata name="ofdTrailer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>40</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailer.vb b/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailer.vb new file mode 100644 index 0000000..67c25ca --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailer.vb @@ -0,0 +1,480 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgTrailer + +#Region "Fields" + + Public IMDBURL As String + + Friend WithEvents bwCompileList As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwDownloadTrailer As New System.ComponentModel.BackgroundWorker + + Private cTrailer As New Trailers + Private imdbID As String = String.Empty + Private prePath As String = String.Empty + Private sPath As String = String.Empty + Private tArray As New List(Of String) + Private tURL As String = String.Empty + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal _imdbID As String, ByVal _sPath As String) As String + Me.imdbID = _imdbID + Me.sPath = _sPath + + If MyBase.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + Return Replace(Me.tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + Return Me.tURL + End If + Else + Return String.Empty + End If + End Function + + Protected Overrides Sub Finalize() + cTrailer = Nothing + MyBase.Finalize() + End Sub + + Private Sub BeginDownload(ByVal CloseDialog As Boolean) + Dim didCancel As Boolean = False + + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(56, "Downloading selected trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + If CloseDialog Then + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, Path.GetFileName(Me.prePath)) + FileUtils.Common.MoveFileWithStream(Me.prePath, Me.tURL) + + File.Delete(Me.prePath) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.prePath, """")) + didCancel = True + End If + ElseIf Me.txtManual.Text.Length > 0 Then + Me.lblStatus.Text = Master.eLang.GetString(57, "Copying specified file to trailer...") + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + If CloseDialog Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + + FileUtils.Common.MoveFileWithStream(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + System.Diagnostics.Process.Start(String.Concat("""", Me.txtManual.Text, """")) + didCancel = True + End If + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + didCancel = True + End If + ElseIf Regex.IsMatch(Me.txtYouTube.Text, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.txtYouTube.Text) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + ElseIf StringUtils.isValidURL(Me.txtYouTube.Text) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = Me.txtYouTube.Text, .bType = CloseDialog}) + Else + If Regex.IsMatch(Me.lbTrailers.SelectedItem.ToString, "http:\/\/.*youtube.*\/watch\?v=(.{11})&?.*") Then + Using dFormats As New dlgTrailerFormat + Dim sFormat As String = dFormats.ShowDialog(Me.lbTrailers.SelectedItem.ToString) + + If Not String.IsNullOrEmpty(sFormat) Then + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.Parameter = sFormat, .bType = CloseDialog}) + Else + didCancel = True + End If + End Using + Else + Me.bwDownloadTrailer = New System.ComponentModel.BackgroundWorker + Me.bwDownloadTrailer.WorkerReportsProgress = True + Me.bwDownloadTrailer.WorkerSupportsCancellation = True + Me.bwDownloadTrailer.RunWorkerAsync(New Arguments With {.parameter = lbTrailers.SelectedItem.ToString, .bType = CloseDialog}) + End If + End If + + If didCancel Then + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + End Sub + + Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click + Try + With ofdTrailer + .InitialDirectory = Directory.GetParent(Master.currMovie.Filename).FullName + .Filter = String.Concat("Supported Trailer Formats|*", Functions.ListToStringWithSeparator(Master.eSettings.ValidExts.ToArray(), ";*")) + .FilterIndex = 0 + End With + + If ofdTrailer.ShowDialog() = DialogResult.OK Then + txtManual.Text = ofdTrailer.FileName + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub btnGetTrailers_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTrailers.Click + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.pnlStatus.Visible = True + + Me.bwCompileList = New System.ComponentModel.BackgroundWorker + Me.bwCompileList.WorkerSupportsCancellation = True + Me.bwCompileList.RunWorkerAsync() + End Sub + + Private Sub btnPlayTrailer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayTrailer.Click + Try + Me.BeginDownload(False) + Catch + MsgBox(Master.eLang.GetString(58, "The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type."), MsgBoxStyle.Critical, Master.eLang.GetString(59, "Error Playing Trailer")) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Try + End Sub + + Private Sub btnPlayBrowser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlayBrowser.Click + If Not String.IsNullOrEmpty(Me.txtYouTube.Text) Then + If Master.isWindows Then + Process.Start(Me.txtYouTube.Text) + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = Me.txtYouTube.Text + Explorer.Start() + End Using + End If + Else + If Master.isWindows Then + Process.Start(Me.lbTrailers.SelectedItem.ToString) + Else + Using Explorer As New Process + Explorer.StartInfo.FileName = "xdg-open" + Explorer.StartInfo.Arguments = Me.lbTrailers.SelectedItem.ToString + Explorer.Start() + End Using + End If + End If + End Sub + + Private Sub btnSetNfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetNfo.Click + + If Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") Then + If Master.eSettings.ValidExts.Contains(Path.GetExtension(Me.txtManual.Text)) AndAlso File.Exists(Me.txtManual.Text) Then + Me.OK_Button.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.lbTrailers.Enabled = False + Me.txtYouTube.Enabled = False + Me.txtManual.Enabled = False + Me.btnBrowse.Enabled = False + Me.lblStatus.Text = Master.eLang.GetString(62, "Moving specified file to trailer...") + Me.pbStatus.Style = ProgressBarStyle.Continuous + Me.pbStatus.Value = 0 + Me.pnlStatus.Visible = True + Application.DoEvents() + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Me.sPath) Then + Me.tURL = String.Concat(Directory.GetParent(Directory.GetParent(Me.sPath).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text)) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim sPathStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Me.sPath)) + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(sPathStack), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + Else + Me.tURL = Path.Combine(Directory.GetParent(Me.sPath).FullName, String.Concat(Path.GetFileNameWithoutExtension(Me.sPath), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(Me.txtManual.Text))) + End If + File.Move(Me.txtManual.Text, Me.tURL) + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + MsgBox(Master.eLang.GetString(192, "File is not valid.", True), MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, Master.eLang.GetString(194, "Not Valid", True)) + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End If + Else + Dim didCancel As Boolean = False + + If StringUtils.isValidURL(Me.txtYouTube.Text) Then + tURL = Me.txtYouTube.Text + ElseIf Me.lbTrailers.SelectedItems.Count > 0 Then + tURL = lbTrailers.SelectedItem.ToString + Else + didCancel = True + End If + + If Not didCancel Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + + End Sub + + Private Sub bwCompileList_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwCompileList.DoWork + Try + tArray = cTrailer.GetTrailers(Me.imdbID, False) + + If Me.bwCompileList.CancellationPending Then + e.Cancel = True + End If + Catch + End Try + End Sub + + Private Sub bwCompileList_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwCompileList.RunWorkerCompleted + If Not e.Cancelled Then + If Me.tArray.Count > 0 Then + For Each tTrail As String In Me.tArray + Me.lbTrailers.Items.Add(tTrail) + Next + + Me.btnGetTrailers.Visible = False + Else + Me.btnGetTrailers.Enabled = False + End If + + End If + + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + End Sub + + Private Sub bwDownloadTrailer_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadTrailer.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + Try + + If Args.bType Then + Me.tURL = cTrailer.DownloadTrailer(Me.sPath, Args.Parameter) + Else + Me.prePath = cTrailer.DownloadTrailer(Path.Combine(Master.TempPath, Path.GetFileName(Me.sPath)), Args.Parameter) + End If + + Catch + End Try + + e.Result = Args.bType + + If Me.bwDownloadTrailer.CancellationPending Then + e.Cancel = True + End If + End Sub + + Private Sub bwDownloadTrailer_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwDownloadTrailer.ProgressChanged + pbStatus.Value = e.ProgressPercentage + End Sub + + Private Sub bwDownloadTrailer_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadTrailer.RunWorkerCompleted + If Not e.Cancelled Then + If Convert.ToBoolean(e.Result) Then + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + Else + Me.pnlStatus.Visible = False + Me.lbTrailers.Enabled = True + Me.txtYouTube.Enabled = True + Me.txtManual.Enabled = True + Me.btnBrowse.Enabled = True + Me.SetEnabled(False) + If Not String.IsNullOrEmpty(Me.prePath) Then System.Diagnostics.Process.Start(String.Concat("""", prePath, """")) + End If + End If + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.cTrailer.Cancel() + + If Me.bwCompileList.IsBusy Then Me.bwCompileList.CancelAsync() + If Me.bwDownloadTrailer.IsBusy Then Me.bwDownloadTrailer.CancelAsync() + + While Me.bwCompileList.IsBusy OrElse Me.bwDownloadTrailer.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailer_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + cTrailer.IMDBURL = IMDBURL + AddHandler cTrailer.ProgressUpdated, AddressOf DownloadProgressUpdated + End Sub + + Private Sub dlgTrailer_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub DownloadProgressUpdated(ByVal iProgress As Integer) + bwDownloadTrailer.ReportProgress(iProgress) + End Sub + + Private Sub lbTrailers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbTrailers.SelectedIndexChanged + Me.SetEnabled(True) + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.BeginDownload(True) + End Sub + + Private Sub SetEnabled(ByVal DeletePre As Boolean) + If DeletePre AndAlso Not String.IsNullOrEmpty(Me.prePath) AndAlso File.Exists(Me.prePath) Then + File.Delete(Me.prePath) + Me.prePath = String.Empty + End If + + If StringUtils.isValidURL(Me.txtYouTube.Text) OrElse Me.lbTrailers.SelectedItems.Count > 0 OrElse Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Enabled = True + Me.btnSetNfo.Enabled = True + Me.btnPlayTrailer.Enabled = True + If Me.txtManual.Text.Length > 0 Then + Me.btnPlayBrowser.Enabled = False + Else + Me.btnPlayBrowser.Enabled = True + End If + If Me.txtManual.Text.Length > 0 Then + Me.OK_Button.Text = Master.eLang.GetString(61, "Copy") + Me.btnSetNfo.Text = Master.eLang.GetString(60, "Move") + Else + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + Else + Me.OK_Button.Enabled = False + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.btnPlayTrailer.Enabled = False + Me.btnPlayBrowser.Enabled = False + Me.btnSetNfo.Enabled = False + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(64, "Select Trailer") + Me.OK_Button.Text = Master.eLang.GetString(373, "Download", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + Me.GroupBox1.Text = Master.eLang.GetString(65, "Select Trailer to Download") + Me.GroupBox2.Text = Master.eLang.GetString(66, "Manual Trailer Entry") + Me.Label1.Text = Master.eLang.GetString(67, "Direct Link or YouTube URL:") + Me.lblStatus.Text = Master.eLang.GetString(68, "Compiling trailer list...") + Me.btnPlayTrailer.Text = Master.eLang.GetString(69, "Preview Trailer") + Me.btnPlayBrowser.Text = Master.eLang.GetString(114, "Open In Browser") + Me.btnSetNfo.Text = Master.eLang.GetString(63, "Set To Nfo") + Me.Label2.Text = Master.eLang.GetString(70, "Local Trailer:") + End Sub + + Private Sub txtManual_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtManual.TextChanged + Me.SetEnabled(True) + End Sub + + Private Sub txtYouTube_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtYouTube.TextChanged + Me.SetEnabled(True) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim bType As Boolean + Dim Parameter As String + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailerFormat.Designer.vb b/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailerFormat.Designer.vb new file mode 100644 index 0000000..8d135fa --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailerFormat.Designer.vb @@ -0,0 +1,155 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTrailerFormat + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lstFormats = New System.Windows.Forms.ListBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.GroupBox1.SuspendLayout() + Me.pnlStatus.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(72, 187) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(145, 187) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lstFormats + ' + Me.lstFormats.Enabled = False + Me.lstFormats.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFormats.FormattingEnabled = True + Me.lstFormats.Location = New System.Drawing.Point(4, 19) + Me.lstFormats.Name = "lstFormats" + Me.lstFormats.Size = New System.Drawing.Size(170, 121) + Me.lstFormats.TabIndex = 0 + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.lstFormats) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(10, 8) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(180, 151) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Available Formats" + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(12, 75) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(200, 54) + Me.pnlStatus.TabIndex = 1 + ' + 'lblStatus + ' + Me.lblStatus.AutoSize = True + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(3, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(147, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Getting available formats..." + Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(3, 29) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(192, 17) + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbStatus.TabIndex = 1 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Location = New System.Drawing.Point(12, 12) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(200, 169) + Me.Panel1.TabIndex = 2 + ' + 'dlgTrailerFormat + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(224, 217) + Me.Controls.Add(Me.pnlStatus) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTrailerFormat" + Me.ShowIcon = False + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Select Format" + Me.GroupBox1.ResumeLayout(False) + Me.pnlStatus.ResumeLayout(False) + Me.pnlStatus.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lstFormats As System.Windows.Forms.ListBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents Panel1 As System.Windows.Forms.Panel + +End Class diff --git a/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailerFormat.resx b/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailerFormat.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailerFormat.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailerFormat.vb b/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailerFormat.vb new file mode 100644 index 0000000..8f0ad6e --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/Scraper/dlgTrailerFormat.vb @@ -0,0 +1,114 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTrailerFormat + +#Region "Fields" + + Private WithEvents YouTube As YouTube.Scraper + Private _selectedformaturl As String + Private _yturl As String + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal YTURL As String) As String + Me._yturl = YTURL + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return _selectedformaturl + Else + Return String.Empty + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgTrailerFormat_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + Me.SetUp() + + lstFormats.DataSource = Nothing + + YouTube = New YouTube.Scraper + YouTube.GetVideoLinksAsync(Me._yturl) + + Catch ex As Exception + MsgBox(Master.eLang.GetString(71, "The video format links could not be retrieved."), MsgBoxStyle.Critical, Master.eLang.GetString(72, "Error Retrieving Video Format Links")) + End Try + End Sub + + Private Sub lstFormats_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFormats.SelectedIndexChanged + Try + Me._selectedformaturl = DirectCast(lstFormats.SelectedItem, YouTube.VideoLinkItem).URL + + If Me.lstFormats.SelectedItems.Count > 0 Then + Me.OK_Button.Enabled = True + Else + Me.OK_Button.Enabled = False + End If + Catch + End Try + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(73, "Select Format") + Me.lblStatus.Text = Master.eLang.GetString(74, "Getting available formats...") + Me.GroupBox1.Text = Master.eLang.GetString(75, "Available Formats") + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub YouTube_VideoLinksRetrieved(ByVal bSuccess As Boolean) Handles YouTube.VideoLinksRetrieved + Try + + If bSuccess Then + lstFormats.DataSource = YouTube.VideoLinks.Values.ToList + lstFormats.DisplayMember = "Description" + lstFormats.ValueMember = "URL" + + If YouTube.VideoLinks.ContainsKey(Master.eSettings.PreferredTrailerQuality) Then + Me.lstFormats.SelectedIndex = YouTube.VideoLinks.IndexOfKey(Master.eSettings.PreferredTrailerQuality) + ElseIf Me.lstFormats.Items.Count = 1 Then + Me.lstFormats.SelectedIndex = 0 + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Finally + Me.pnlStatus.Visible = False + Me.lstFormats.Enabled = True + End Try + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/clsScrapeTVDB.vb b/Addons/scraper.YouTube.Trailer/TVScraper/clsScrapeTVDB.vb new file mode 100644 index 0000000..b0f8531 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/clsScrapeTVDB.vb @@ -0,0 +1,1911 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.Data +Imports System.IO +Imports System.Text + +Imports ICSharpCode.SharpZipLib.Zip +Imports EmberAPI + +Public Class Scraper + +#Region "Fields" + + Public Const APIKey As String = "7B090234F418D074" + + Public Shared WithEvents sObject As New ScraperObject + Public Shared tEpisodes As New List(Of MediaContainers.EpisodeDetails) + Public Shared tmpTVDBShow As New TVDBShow + Public Shared TVDBImages As New TVImages + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + AddHandler sObject.ScraperEvent, AddressOf InnerEvent + End Sub + +#End Region 'Constructors + +#Region "Events" + + Public Event ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + +#End Region 'Events + +#Region "Methods" + + Public Sub CancelAsync() + sObject.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String) As MediaContainers.EpisodeDetails + Return sObject.ChangeEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .TVDBID = TVDBID, .SelectedLang = Lang, .iSeason = -999}) + End Function + + Public Function GetLangs(ByVal sMirror As String) As List(Of Containers.TVLanguage) + Dim tvdbLangs As New List(Of Containers.TVLanguage) + Dim cLang As Containers.TVLanguage + Dim xmlTVDB As XDocument + Dim sHTTP As New HTTP + + Dim apiXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/languages.xml", sMirror, APIKey)) + sHTTP = Nothing + + If Not String.IsNullOrEmpty(apiXML) Then + Try + xmlTVDB = XDocument.Parse(apiXML) + Catch + Return tvdbLangs + End Try + + Dim xLangs = From xLanguages In xmlTVDB.Descendants("Language") + + For Each xL As XElement In xLangs + cLang = New Containers.TVLanguage + cLang.LongLang = xL.Element("name").Value + cLang.ShortLang = xL.Element("abbreviation").Value + tvdbLangs.Add(cLang) + Next + End If + Return tvdbLangs + End Function + + Public Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As MediaContainers.EpisodeDetails + Return sObject.GetSingleEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .TVDBID = TVDBID, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Function + + Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images) As Images + Return sObject.GetSingleImage(New Structures.ScrapeInfo With {.ShowTitle = Title, .ShowID = ShowID, .TVDBID = TVDBID, .ImageType = Type, .iSeason = Season, .iEpisode = Episode, .SelectedLang = Lang, .Ordering = Ordering, .CurrentImage = CurrentImage}) + End Function + + Public Sub InnerEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent ScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Function IsBusy() As Boolean + Return sObject.IsBusy + End Function + + Public Sub SaveImages() + sObject.SaveImages() + End Sub + + Public Sub ScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) + sObject.ScrapeEpisode(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .iEpisode = iEpisode, .iSeason = iSeason, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Sub + + Public Sub ScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) + sObject.ScrapeSeason(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .iSeason = iSeason, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options}) + End Sub + + Public Sub SingleScrape(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) + sObject.SingleScrape(New Structures.ScrapeInfo With {.ShowID = ShowID, .ShowTitle = ShowTitle, .TVDBID = TVDBID, .SelectedLang = Lang, .Ordering = Ordering, .Options = Options, .ScrapeType = ScrapeType, .WithCurrent = WithCurrent, .iSeason = -999}) + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + <Serializable()> _ + Public Structure TVImages + +#Region "Fields" + + Dim AllSeasonPoster As TVDBShowPoster + Dim SeasonImageList As List(Of TVDBSeasonImage) + Dim ShowFanart As TVDBFanart + Dim ShowPoster As TVDBShowPoster + +#End Region 'Fields + +#Region "Methods" + + Public Function Clone() As TVImages + Dim newTVI As New TVImages + Try + Using ms As New IO.MemoryStream() + Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter() + bf.Serialize(ms, Me) + ms.Position = 0 + newTVI = DirectCast(bf.Deserialize(ms), TVImages) + ms.Close() + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return newTVI + End Function + +#End Region 'Methods + + End Structure + + Public Class ScraperObject + +#Region "Fields" + + Friend WithEvents bwTVDB As New System.ComponentModel.BackgroundWorker + + Private aXML As String = String.Empty + Private bXML As String = String.Empty + Private sXML As String = String.Empty + +#End Region 'Fields + +#Region "Events" + + Public Event ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + +#End Region 'Events + +#Region "Methods" + + Public Shared Sub LoadAllEpisodes(ByVal _ID As Integer, ByVal OnlySeason As Integer) + Try + + tmpTVDBShow = New TVDBShow + + tmpTVDBShow.Show = Master.DB.LoadTVFullShowFromDB(_ID) + tmpTVDBShow.AllSeason = Master.DB.LoadTVAllSeasonFromDB(_ID) + + Using SQLCount As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + If OnlySeason = 999 Then + SQLCount.CommandText = String.Concat("SELECT COUNT(ID) AS eCount FROM TVEps WHERE TVShowID = ", _ID, " AND Missing = 0;") + Else + SQLCount.CommandText = String.Concat("SELECT COUNT(ID) AS eCount FROM TVEps WHERE TVShowID = ", _ID, " AND Season = ", OnlySeason, " AND Missing = 0;") + End If + Using SQLRCount As SQLite.SQLiteDataReader = SQLCount.ExecuteReader + If Convert.ToInt32(SQLRCount("eCount")) > 0 Then + Using SQLCommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + If OnlySeason = 999 Then + SQLCommand.CommandText = String.Concat("SELECT ID, Lock FROM TVEps WHERE TVShowID = ", _ID, " AND Missing = 0;") + Else + SQLCommand.CommandText = String.Concat("SELECT ID, Lock FROM TVEps WHERE TVShowID = ", _ID, " AND Season = ", OnlySeason, " AND Missing = 0;") + End If + Using SQLReader As SQLite.SQLiteDataReader = SQLCommand.ExecuteReader + While SQLReader.Read + tmpTVDBShow.Episodes.Add(Master.DB.LoadTVEpFromDB(Convert.ToInt64(SQLReader("ID")), True)) + End While + End Using + End Using + End If + End Using + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub CancelAsync() + If bwTVDB.IsBusy Then bwTVDB.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal sInfo As Structures.ScrapeInfo) As MediaContainers.EpisodeDetails + Try + Dim tEpisodes As List(Of MediaContainers.EpisodeDetails) = Me.GetListOfKnownEpisodes(sInfo) + If tEpisodes.Count > 0 Then + Using dChangeEp As New dlgTVChangeEp + Return dChangeEp.ShowDialog(tEpisodes) + End Using + Else + MsgBox(Master.eLang.GetString(79, "There are no known episodes for this show. Scrape the show, season, or episode and try again."), MsgBoxStyle.OkOnly, Master.eLang.GetString(80, "No Known Episodes")) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return Nothing + End Function + + Public Sub DownloadSeries(ByVal sInfo As Structures.ScrapeInfo, Optional ByVal ImagesOnly As Boolean = False) + Try + Dim fPath As String = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, sInfo.SelectedLang, ".zip")) + Dim fExists As Boolean = File.Exists(fPath) + Dim doDownload As Boolean = False + + Select Case Master.eSettings.TVUpdateTime + Case Enums.TVUpdateTime.Always + doDownload = True + Case Enums.TVUpdateTime.Never + doDownload = False + Case Enums.TVUpdateTime.Week + If fExists AndAlso File.GetCreationTime(fPath).AddDays(7) < Now Then doDownload = True + Case Enums.TVUpdateTime.BiWeekly + If fExists AndAlso File.GetCreationTime(fPath).AddDays(14) < Now Then doDownload = True + Case Enums.TVUpdateTime.Month + If fExists AndAlso File.GetCreationTime(fPath).AddMonths(1) < Now Then doDownload = True + End Select + + If doDownload OrElse Not fExists Then + Dim sHTTP As New HTTP + Dim xZip As Byte() = sHTTP.DownloadZip(String.Format("http://{0}/api/{1}/series/{2}/all/{3}.zip", Master.eSettings.TVDBMirror, APIKey, sInfo.TVDBID, sInfo.SelectedLang)) + sHTTP = Nothing + + If Not IsNothing(xZip) AndAlso xZip.Length > 0 Then + 'save it to the temp dir + Directory.CreateDirectory(Directory.GetParent(fPath).FullName) + Using fStream As FileStream = New FileStream(fPath, FileMode.Create, FileAccess.Write) + fStream.Write(xZip, 0, xZip.Length) + End Using + + Me.ProcessTVDBZip(xZip, sInfo) + Me.ShowFromXML(sInfo, ImagesOnly) + End If + Else + Using fStream As FileStream = New FileStream(fPath, FileMode.Open, FileAccess.Read) + Dim fZip As Byte() = Functions.ReadStreamToEnd(fStream) + + Me.ProcessTVDBZip(fZip, sInfo) + Me.ShowFromXML(sInfo, ImagesOnly) + End Using + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub DownloadSeriesAsync(ByVal sInfo As Structures.ScrapeInfo) + Try + If Not bwTVDB.IsBusy Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.StartingDownload, 0, Nothing) + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 1, .Parameter = sInfo}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetListOfKnownEpisodes(ByVal sInfo As Structures.ScrapeInfo) As List(Of MediaContainers.EpisodeDetails) + Dim Actors As New List(Of MediaContainers.Person) + Dim tEpisodes As New List(Of MediaContainers.EpisodeDetails) + Dim tEpisode As New MediaContainers.EpisodeDetails + Dim fPath As String = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, sInfo.SelectedLang, ".zip")) + Dim tSeas As Integer = -1 + Dim tOrdering As Enums.Ordering = Enums.Ordering.Standard + + Try + If File.Exists(fPath) Then + Using fStream As FileStream = New FileStream(fPath, FileMode.Open, FileAccess.Read) + Dim fZip As Byte() = Functions.ReadStreamToEnd(fStream) + Me.ProcessTVDBZip(fZip, sInfo) + + 'get the actors first + Try + If Not String.IsNullOrEmpty(aXML) Then + Dim xdActors As XDocument = XDocument.Parse(aXML) + For Each Actor As XElement In xdActors.Descendants("Actor") + If Not IsNothing(Actor.Element("Name")) AndAlso Not String.IsNullOrEmpty(Actor.Element("Name").Value) Then + Actors.Add(New MediaContainers.Person With {.Name = Actor.Element("Name").Value, .Role = If(IsNothing(Actor.Element("Role")), String.Empty, Actor.Element("Role").Value), .Thumb = If(IsNothing(Actor.Element("Image")) OrElse String.IsNullOrEmpty(Actor.Element("Image").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Actor.Element("Image").Value))}) + End If + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + If Not String.IsNullOrEmpty(sXML) Then + Dim xdEps As XDocument = XDocument.Parse(sXML) + + For Each Episode As XElement In xdEps.Descendants("Episode") + If Not IsNothing(Episode.Element("EpisodeName").Value) AndAlso Not String.IsNullOrEmpty(Episode.Element("EpisodeName").Value) Then + tEpisode = New MediaContainers.EpisodeDetails + + tOrdering = Enums.Ordering.Standard + + If sInfo.Ordering = Enums.Ordering.DVD Then + If Not IsNothing(Episode.Element("SeasonNumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("SeasonNumber").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_season").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_episodenumber").Value.ToString) Then + tSeas = Convert.ToInt32(Episode.Element("SeasonNumber").Value) + If sInfo.iSeason >= 0 AndAlso Not tSeas = sInfo.iSeason Then Continue For + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) = tSeas AndAlso (IsNothing(e.Element("DVD_season")) OrElse String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) OrElse IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + ElseIf Not IsNothing(Episode.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_season").Value.ToString) AndAlso _ + Not IsNothing(Episode.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(Episode.Element("DVD_episodenumber").Value.ToString) Then + tSeas = Convert.ToInt32(Episode.Element("DVD_season").Value) + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("DVD_season").Value) = tSeas AndAlso (IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + End If + ElseIf sInfo.Ordering = Enums.Ordering.Absolute Then + If Not IsNothing(Episode.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(Episode.Element("absolute_number").Value.ToString) Then + If xdEps.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) > 0 AndAlso (IsNothing(e.Element("absolute_number")) OrElse String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.Absolute + End If + End If + Else + If sInfo.iSeason >= 0 AndAlso Not Convert.ToInt32(Episode.Element("SeasonNumber").Value) = sInfo.iSeason Then Continue For + End If + + With tEpisode + .Title = Episode.Element("EpisodeName").Value + If tOrdering = Enums.Ordering.DVD Then + .Season = Convert.ToInt32(Episode.Element("DVD_season").Value) + .Episode = Convert.ToInt32(CLng(Episode.Element("DVD_episodenumber").Value)) + ElseIf tOrdering = Enums.Ordering.Absolute Then + .Season = 1 + .Episode = Convert.ToInt32(Episode.Element("absolute_number").Value) + Else + .Season = If(IsNothing(Episode.Element("SeasonNumber")) OrElse String.IsNullOrEmpty(Episode.Element("SeasonNumber").Value), 0, Convert.ToInt32(Episode.Element("SeasonNumber").Value)) + .Episode = If(IsNothing(Episode.Element("EpisodeNumber")) OrElse String.IsNullOrEmpty(Episode.Element("EpisodeNumber").Value), 0, Convert.ToInt32(Episode.Element("EpisodeNumber").Value)) + End If + .Aired = If(IsNothing(Episode.Element("FirstAired")), String.Empty, Episode.Element("FirstAired").Value) + .Rating = If(IsNothing(Episode.Element("Rating")), String.Empty, Episode.Element("Rating").Value) + .Plot = If(IsNothing(Episode.Element("Overview")), String.Empty, Episode.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + .Director = If(IsNothing(Episode.Element("Director")), String.Empty, Strings.Join(Episode.Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + .Credits = CreditsString(If(IsNothing(Episode.Element("GuestStars")), String.Empty, Episode.Element("GuestStars").Value), If(IsNothing(Episode.Element("Writer")), String.Empty, Episode.Element("Writer").Value)) + .Actors = Actors + .PosterURL = If(IsNothing(Episode.Element("filename")), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Episode.Element("filename").Value)) + .LocalFile = If(IsNothing(Episode.Element("filename")), String.Empty, Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sInfo.TVDBID, Path.DirectorySeparatorChar, "episodeposters", Path.DirectorySeparatorChar, Episode.Element("filename").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar)))) + End With + + tEpisodes.Add(tEpisode) + End If + Next + + End If + End Using + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return tEpisodes + End Function + + Public Sub GetSearchResultsAsync(ByVal sInfo As Structures.ScrapeInfo) + Try + If Not bwTVDB.IsBusy Then + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 0, .Parameter = sInfo}) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Function GetSingleEpisode(ByVal sInfo As Structures.ScrapeInfo) As MediaContainers.EpisodeDetails + Dim tEp As New MediaContainers.EpisodeDetails + Try + + tEp = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Season = sInfo.iSeason AndAlso e.Episode = sInfo.iEpisode) + + If Not IsNothing(tEp) Then + Return tEp + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return New MediaContainers.EpisodeDetails + End Function + + Public Function GetSingleImage(ByVal sInfo As Structures.ScrapeInfo) As Images + tmpTVDBShow = New TVDBShow + + If sInfo.ImageType = Enums.TVImageType.EpisodePoster Then + + If String.IsNullOrEmpty(sInfo.TVDBID) Then + Using dTVDBSearch As New dlgTVDBSearchResults + sInfo = dTVDBSearch.ShowDialog(sInfo, True) + If Not String.IsNullOrEmpty(sInfo.TVDBID) Then + Master.currShow.TVShow.ID = sInfo.TVDBID + + Using tImage As New Images + Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) + If Not IsNothing(tmpEp) Then + + If File.Exists(tmpEp.LocalFile) Then + tImage.FromFile(tmpEp.LocalFile) + Else + tImage.FromWeb(tmpEp.PosterURL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) + tImage.Save(tmpEp.LocalFile, , , False) + End If + End If + + If Not IsNothing(tImage.Image) Then + Using dPosterConfirm As New dlgTVEpisodePoster + If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Using + Else + MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) + Return Nothing + End If + Else + Return Nothing + End If + End Using + Else + Return Nothing + End If + End Using + Else + Using tImage As New Images + Dim tmpEp As MediaContainers.EpisodeDetails = Me.GetListOfKnownEpisodes(sInfo).FirstOrDefault(Function(e) e.Episode = sInfo.iEpisode AndAlso e.Season = sInfo.iSeason) + If Not IsNothing(tmpEp) Then + + If File.Exists(tmpEp.LocalFile) Then + tImage.FromFile(tmpEp.LocalFile) + Else + tImage.FromWeb(tmpEp.PosterURL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(tmpEp.LocalFile).FullName) + tImage.Save(tmpEp.LocalFile, , , False) + End If + End If + + If Not IsNothing(tImage.Image) Then + Using dPosterConfirm As New dlgTVEpisodePoster + If dPosterConfirm.ShowDialog(tImage.Image) = DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Using + Else + MsgBox(Master.eLang.GetString(81, "There is no poster available for this episode."), MsgBoxStyle.OkOnly, Master.eLang.GetString(31, "No Posters Found")) + Return Nothing + End If + Else + Return Nothing + End If + End Using + End If + Else + If String.IsNullOrEmpty(sInfo.TVDBID) Then + Using dTVDBSearch As New dlgTVDBSearchResults + sInfo = dTVDBSearch.ShowDialog(sInfo, True) + If Not String.IsNullOrEmpty(sInfo.TVDBID) Then + Master.currShow.TVShow.ID = sInfo.TVDBID + Me.DownloadSeries(sInfo, True) + Using dImageSelect As New dlgTVImageSelect + Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) + End Using + Else + Return Nothing + End If + End Using + Else + Me.DownloadSeries(sInfo, True) + Using dImageSelect As New dlgTVImageSelect + Return dImageSelect.ShowDialog(sInfo.ShowID, sInfo.ImageType, sInfo.iSeason, sInfo.CurrentImage) + End Using + End If + End If + End Function + + Public Function IsBusy() As Boolean + Return bwTVDB.IsBusy + End Function + + Public Sub PassEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent ScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Sub ProcessTVDBZip(ByVal tvZip As Byte(), ByVal sInfo As Structures.ScrapeInfo) + sXML = String.Empty + bXML = String.Empty + aXML = String.Empty + + Try + Using zStream As ZipInputStream = New ZipInputStream(New MemoryStream(tvZip)) + Dim zEntry As ZipEntry = zStream.GetNextEntry + + While Not IsNothing(zEntry) + Dim zBuffer As Byte() = Functions.ReadStreamToEnd(zStream) + + Select Case True + Case zEntry.Name.Equals(String.Concat(sInfo.SelectedLang, ".xml")) + sXML = System.Text.Encoding.UTF8.GetString(zBuffer) + Case zEntry.Name.Equals("banners.xml") + bXML = System.Text.Encoding.UTF8.GetString(zBuffer) + Case zEntry.Name.Equals("actors.xml") + aXML = System.Text.Encoding.UTF8.GetString(zBuffer) + End Select + + zEntry = zStream.GetNextEntry + End While + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub SaveImages() + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SavingStarted, 0, Nothing) + Me.bwTVDB = New System.ComponentModel.BackgroundWorker + Me.bwTVDB.WorkerReportsProgress = True + Me.bwTVDB.WorkerSupportsCancellation = True + Me.bwTVDB.RunWorkerAsync(New Arguments With {.Type = 3}) + End Sub + + Public Sub ScrapeEpisode(ByVal sInfo As Structures.ScrapeInfo) + Try + tmpTVDBShow = New TVDBShow + tmpTVDBShow.Episodes.Add(Master.currShow) + + If String.IsNullOrEmpty(sInfo.TVDBID) Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + DownloadSeries(sInfo) + If tmpTVDBShow.Episodes(0).TVShow.ID.Length > 0 Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso Not File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Episodes(0) + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) AndAlso Not File.Exists(Master.currShow.TVEp.LocalFile) Then + Master.currShow.TVEp.Poster.FromWeb(Master.currShow.TVEp.PosterURL) + If Not IsNothing(Master.currShow.TVEp.Poster) Then + Directory.CreateDirectory(Directory.GetParent(Master.currShow.TVEp.LocalFile).FullName) + Master.currShow.TVEp.Poster.Save(Master.currShow.TVEp.LocalFile) + End If + End If + If Not String.IsNullOrEmpty(Master.currShow.TVEp.LocalFile) Then Master.currShow.EpPosterPath = Master.currShow.TVEp.LocalFile + + If String.IsNullOrEmpty(Master.currShow.EpFanartPath) Then Master.currShow.EpFanartPath = Master.currShow.ShowFanartPath + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Master.currShow) + + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 1, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Sub ScrapeSeason(ByVal sInfo As Structures.ScrapeInfo) + RaiseEvent ScraperEvent(Enums.TVScraperEventType.LoadingEpisodes, 0, Nothing) + bwTVDB.WorkerReportsProgress = True + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 4, .Parameter = sInfo}) + End Sub + + Public Sub SingleScrape(ByVal sInfo As Structures.ScrapeInfo) + RaiseEvent ScraperEvent(Enums.TVScraperEventType.LoadingEpisodes, 0, Nothing) + bwTVDB.WorkerReportsProgress = False + bwTVDB.WorkerSupportsCancellation = True + bwTVDB.RunWorkerAsync(New Arguments With {.Type = 2, .Parameter = sInfo}) + While bwTVDB.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + End Sub + + Public Sub StartSingleScraper(ByVal sInfo As Structures.ScrapeInfo) + Try + If String.IsNullOrEmpty(sInfo.TVDBID) AndAlso sInfo.ScrapeType = Enums.ScrapeType.FullAsk Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + DownloadSeries(sInfo) + If tmpTVDBShow.Show.TVShow.ID.Length > 0 Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + If sInfo.ScrapeType = Enums.ScrapeType.FullAuto Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SaveAuto, 0, Nothing) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + ElseIf sInfo.ScrapeType = Enums.ScrapeType.FullAsk Then + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Searching, 0, Nothing) + Using dTVDBSearch As New dlgTVDBSearchResults + If dTVDBSearch.ShowDialog(sInfo) = Windows.Forms.DialogResult.OK Then + Master.currShow = tmpTVDBShow.Show + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SelectImages, 0, Nothing) + Using dTVImageSel As New dlgTVImageSelect + If dTVImageSel.ShowDialog(sInfo.ShowID, Enums.TVImageType.All, sInfo.ScrapeType, sInfo.WithCurrent) = Windows.Forms.DialogResult.OK Then + If Not IsNothing(sInfo.iSeason) AndAlso sInfo.iSeason >= 0 Then + Me.SaveImages() + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Verifying, 0, Nothing) + End If + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End Using + Else + 'Ignore Show scrape if ScrapeAuto and show don't have ID + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Cancelled, 0, Nothing) + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwtvDB_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwTVDB.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + + Try + Select Case Args.Type + Case 0 'search + e.Result = New Results With {.Type = 0, .Result = SearchSeries(DirectCast(Args.Parameter, Structures.ScrapeInfo))} + Case 1 'show download + Me.DownloadSeries(DirectCast(Args.Parameter, Structures.ScrapeInfo)) + e.Result = New Results With {.Type = 1} + Case 2 'load episodes + LoadAllEpisodes(DirectCast(Args.Parameter, Structures.ScrapeInfo).ShowID, 999) + e.Result = New Results With {.Type = 2, .Result = Args.Parameter} + Case 3 'save + Me.SaveAllTVInfo() + e.Result = New Results With {.Type = 3} + Case 4 + Dim sInfo As Structures.ScrapeInfo = DirectCast(Args.Parameter, Structures.ScrapeInfo) + LoadAllEpisodes(sInfo.ShowID, sInfo.iSeason) + e.Result = New Results With {.Type = 2, .Result = Args.Parameter} + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwTVDB_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwTVDB.ProgressChanged + RaiseEvent ScraperEvent(Enums.TVScraperEventType.Progress, e.ProgressPercentage, e.UserState.ToString) + End Sub + + Private Sub bwTVDB_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwTVDB.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Select Case Res.Type + Case 0 'search + RaiseEvent ScraperEvent(Enums.TVScraperEventType.SearchResultsDownloaded, 0, DirectCast(Res.Result, List(Of TVSearchResults))) + Case 1 'show download + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ShowDownloaded, 0, Nothing) + Case 2 'load episodes + If Not e.Cancelled Then + StartSingleScraper(DirectCast(Res.Result, Structures.ScrapeInfo)) + Else + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ScraperDone, 0, Nothing) + End If + Case 3 'save + RaiseEvent ScraperEvent(Enums.TVScraperEventType.ScraperDone, 0, Nothing) + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function CreditsString(ByVal sGStars As String, ByVal sWriters As String) As String + Dim cString As New List(Of String) + Dim gString As String = Master.eLang.GetString(82, "Guest Star") + Dim wString As String = Master.eLang.GetString(777, "Writer", True) + + If Not String.IsNullOrEmpty(sGStars) Then + For Each gStar In sGStars.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")) + If Not String.IsNullOrEmpty(gStar) Then cString.Add(String.Concat(gStar, String.Format(" ({0})", gString))) + Next + End If + + If Not String.IsNullOrEmpty(sWriters) Then + For Each Writer In sWriters.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")) + If Not String.IsNullOrEmpty(Writer) Then cString.Add(String.Concat(Writer, String.Format(" ({0})", wString))) + Next + End If + + Return Strings.Join(cString.ToArray, " / ") + End Function + + Private Sub SaveAllTVInfo() + Dim iEp As Integer = -1 + Dim iSea As Integer = -1 + Dim iProgress As Integer = 1 + + Dim tShow As New Structures.DBTV + Dim tEpisode As New MediaContainers.EpisodeDetails + + Me.bwTVDB.ReportProgress(tmpTVDBShow.Episodes.Count, "max") + + Using SQLTrans As SQLite.SQLiteTransaction = Master.DB.MediaDBConn.BeginTransaction() + If Master.eSettings.DisplayMissingEpisodes Then + 'clear old missing episode from db + Using SQLCommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + SQLCommand.CommandText = String.Concat("DELETE FROM TVEps WHERE Missing = 1 AND TVShowID = ", Master.currShow.ShowID, ";") + SQLCommand.ExecuteNonQuery() + End Using + End If + + Try + For Each Episode As Structures.DBTV In tmpTVDBShow.Episodes + + Try + If Me.bwTVDB.CancellationPending Then Return + + Episode.ShowID = Master.currShow.ShowID + + iEp = Episode.TVEp.Episode + iSea = Episode.TVEp.Season + + 'remove it from tepisodes since it's a real episode + If Master.eSettings.DisplayMissingEpisodes Then + tEpisode = tEpisodes.FirstOrDefault(Function(e) e.Episode = iEp AndAlso e.Season = iSea) + If Not IsNothing(tEpisode) Then tEpisodes.Remove(tEpisode) + tShow = Episode + End If + + If Me.bwTVDB.CancellationPending Then Return + + If Episode.TVEp.Season > -1 AndAlso Episode.TVEp.Episode > -1 AndAlso Not Episode.IsLockEp Then + If Not IsNothing(Episode.TVEp.Poster.Image) Then Episode.EpPosterPath = Episode.TVEp.Poster.SaveAsEpPoster(Episode, Episode.TVEp.PosterURL) + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.EpisodeFanartEnabled AndAlso Not IsNothing(Episode.TVEp.Fanart.Image) Then Episode.EpFanartPath = Episode.TVEp.Fanart.SaveAsEpFanart(Episode, ) + + If Me.bwTVDB.CancellationPending Then Return + + Dim cSea = From cSeason As TVDBSeasonImage In TVDBImages.SeasonImageList Where cSeason.Season = iSea Take 1 + If cSea.Count > 0 Then + If Not IsNothing(cSea(0).Poster.Image) Then Episode.SeasonPosterPath = cSea(0).Poster.SaveAsSeasonPoster(Episode) + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.SeasonFanartEnabled Then + If Not String.IsNullOrEmpty(cSea(0).Fanart.LocalFile) AndAlso File.Exists(cSea(0).Fanart.LocalFile) Then + cSea(0).Fanart.Image.FromFile(cSea(0).Fanart.LocalFile) + Episode.SeasonFanartPath = cSea(0).Fanart.Image.SaveAsSeasonFanart(Episode) + ElseIf Not String.IsNullOrEmpty(cSea(0).Fanart.URL) AndAlso Not String.IsNullOrEmpty(cSea(0).Fanart.LocalFile) Then + cSea(0).Fanart.Image.Clear() + cSea(0).Fanart.Image.FromWeb(cSea(0).Fanart.URL) + If Not IsNothing(cSea(0).Fanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(cSea(0).Fanart.LocalFile).FullName) + cSea(0).Fanart.Image.Save(cSea(0).Fanart.LocalFile, , , False) + Episode.SeasonFanartPath = cSea(0).Fanart.Image.SaveAsSeasonFanart(Episode) + End If + End If + End If + End If + + If Me.bwTVDB.CancellationPending Then Return + + If Master.eSettings.ScanTVMediaInfo Then MediaInfo.UpdateTVMediaInfo(Episode) + + Master.DB.SaveTVEpToDB(Episode, False, True, True, True) + + If Me.bwTVDB.CancellationPending Then Return + End If + Me.bwTVDB.ReportProgress(iProgress, "progress") + + 'If AdvancedSettings.GetBooleanSetting("ScrapeActorsThumbs", False) Then + 'For Each act As MediaContainers.Person In Episode.TVEp.Actors + 'Dim img As New Images + 'img.FromWeb(act.Thumb) + 'img.SaveAsActorThumb(act, Directory.GetParent(Episode.Filename).FullName) + 'Next + 'End If + + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + + 'now save all missing episodes + If Master.eSettings.DisplayMissingEpisodes Then + tShow.Filename = String.Empty + tShow.EpFanartPath = String.Empty + tShow.EpPosterPath = String.Empty + tShow.EpNfoPath = String.Empty + tShow.SeasonFanartPath = String.Empty + tShow.SeasonPosterPath = String.Empty + tShow.ShowFanartPath = String.Empty + tShow.IsLockEp = False + tShow.IsMarkEp = False + tShow.EpID = -1 + If tEpisodes.Count > 0 Then + For Each Episode As MediaContainers.EpisodeDetails In tEpisodes + tShow.TVEp = Episode + Master.DB.SaveTVEpToDB(tShow, True, True, True) + Next + End If + End If + + If Me.bwTVDB.CancellationPending Then Return + + SQLTrans.Commit() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + End Using + End Sub + + Private Sub SaveToCache(ByVal sID As String, ByVal sURL As String, ByVal sPath As String) + Dim sImage As New Images + + sImage.FromWeb(sURL) + + If Not IsNothing(sImage.Image) Then + sImage.Save(Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, sPath.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), , , True) + End If + sImage = Nothing + End Sub + + Private Function SearchSeries(ByVal sInfo As Structures.ScrapeInfo) As List(Of TVSearchResults) + Dim tvdbResults As New List(Of TVSearchResults) + Dim cResult As New TVSearchResults + Dim xmlTVDB As XDocument + Dim tmpXML As XDocument + Dim sHTTP As New HTTP + Dim sLang As String = String.Empty + Dim tmpID As String = String.Empty + + Try + Dim apiXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/GetSeries.php?seriesname={1}&language={2}", Master.eSettings.TVDBMirror, sInfo.ShowTitle, Master.eSettings.TVDBLanguage)) + + If Not String.IsNullOrEmpty(apiXML) Then + Try + xmlTVDB = XDocument.Parse(apiXML) + Catch + Return tvdbResults + End Try + + Dim xSer = From xSeries In xmlTVDB.Descendants("Series") Where xSeries.HasElements + + 'check each unique showid to see if we have an entry for the preferred languages. If not, try to force download it + For Each tID As String In xSer.GroupBy(Function(s) s.Element("seriesid").Value.ToString).Select(Function(group) group.Key) + tmpID = tID + If xSer.Where(Function(s) s.Element("seriesid").Value.ToString = tmpID AndAlso s.Element("language").Value.ToString = Master.eSettings.TVDBLanguage).Count = 0 Then + 'no preferred language in this series, force it + Dim forceXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/series/{2}/{3}.xml", Master.eSettings.TVDBMirror, APIKey, tmpID, Master.eSettings.TVDBLanguage)) + If Not String.IsNullOrEmpty(forceXML) Then + Try + tmpXML = XDocument.Parse(forceXML) + Catch + Continue For + End Try + + For Each tSer As XElement In tmpXML.Descendants("Series").Where(Function(s) s.HasElements) + sLang = String.Empty + cResult = New TVSearchResults + cResult.ID = Convert.ToInt32(tSer.Element("id").Value) + cResult.Name = If(Not IsNothing(tSer.Element("SeriesName")), tSer.Element("SeriesName").Value, String.Empty) + If Not IsNothing(tSer.Element("Language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = tSer.Element("Language").Value + cResult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(tSer.Element("Language")) Then + sLang = tSer.Element("Language").Value + cResult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + Else + 'no language info available... don't bother adding it + Continue For + End If + cResult.Aired = If(Not IsNothing(tSer.Element("FirstAired")), tSer.Element("FirstAired").Value, String.Empty) + cResult.Overview = If(Not IsNothing(tSer.Element("Overview")), tSer.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf), String.Empty) + cResult.Banner = If(Not IsNothing(tSer.Element("banner")), tSer.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(cResult.Name) AndAlso Not String.IsNullOrEmpty(sLang) AndAlso xSer.Where(Function(s) s.Element("seriesid").Value.ToString = cResult.ID.ToString AndAlso s.Element("language").Value.ToString = sLang).Count = 0 Then + cResult.Lev = StringUtils.ComputeLevenshtein(sInfo.ShowTitle, cResult.Name) + tvdbResults.Add(cResult) + End If + Next + End If + End If + Next + sHTTP = Nothing + + For Each xS As XElement In xSer + sLang = String.Empty + cResult = New TVSearchResults + cResult.ID = Convert.ToInt32(xS.Element("seriesid").Value) + cResult.Name = If(Not IsNothing(xS.Element("SeriesName")), xS.Element("SeriesName").Value, String.Empty) + If Not IsNothing(xS.Element("language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = xS.Element("language").Value + cResult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(xS.Element("language")) Then + sLang = xS.Element("language").Value + cResult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + Else + 'no language info available... don't bother adding it + Continue For + End If + cResult.Aired = If(Not IsNothing(xS.Element("FirstAired")), xS.Element("FirstAired").Value, String.Empty) + cResult.Overview = If(Not IsNothing(xS.Element("Overview")), xS.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf), String.Empty) + cResult.Banner = If(Not IsNothing(xS.Element("banner")), xS.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(cResult.Name) AndAlso Not String.IsNullOrEmpty(sLang) Then + cResult.Lev = StringUtils.ComputeLevenshtein(sInfo.ShowTitle, cResult.Name) + tvdbResults.Add(cResult) + End If + Next + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return tvdbResults + End Function + + Private Sub ShowFromXML(ByVal sInfo As Structures.ScrapeInfo, ByVal ImagesOnly As Boolean) + Dim Actors As New List(Of MediaContainers.Person) + Dim sID As String = String.Empty + Dim iEp As Integer = -1 + Dim iSeas As Integer = -1 + Dim sTitle As String = String.Empty + Dim byTitle As Boolean = False + Dim xE As XElement = Nothing + Dim tShow As Structures.DBTV = tmpTVDBShow.Show + Dim tOrdering As Enums.Ordering = Enums.Ordering.Standard + + If Not ImagesOnly Then + If Master.eSettings.DisplayMissingEpisodes Then tEpisodes = Me.GetListOfKnownEpisodes(sInfo) + + 'get the actors first + Try + If sInfo.Options.bShowActors OrElse sInfo.Options.bEpActors Then + If Not String.IsNullOrEmpty(aXML) Then + Dim xdActors As XDocument = XDocument.Parse(aXML) + For Each Actor As XElement In xdActors.Descendants("Actor") + If Not IsNothing(Actor.Element("Name")) AndAlso Not String.IsNullOrEmpty(Actor.Element("Name").Value) Then + Actors.Add(New MediaContainers.Person With {.Name = Actor.Element("Name").Value, .Role = Actor.Element("Role").Value, .Thumb = If(IsNothing(Actor.Element("Image")) OrElse String.IsNullOrEmpty(Actor.Element("Image").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, Actor.Element("Image").Value))}) + End If + Next + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + 'now let's get the show info and all the episodes + Try + If Not String.IsNullOrEmpty(sXML) Then + Dim xdShow As XDocument = XDocument.Parse(sXML) + Dim xS = From xShow In xdShow.Descendants("Series") + If xS.Count > 0 Then + tShow.ShowLanguage = sInfo.SelectedLang + If Not IsNothing(tShow.TVShow) Then + With tShow.TVShow + sID = xS(0).Element("id").Value + .ID = sID + If sInfo.Options.bShowTitle AndAlso (String.IsNullOrEmpty(.Title) OrElse Not Master.eSettings.ShowLockTitle) Then .Title = If(IsNothing(xS(0).Element("SeriesName")), .Title, xS(0).Element("SeriesName").Value) + If sInfo.Options.bShowEpisodeGuide Then .EpisodeGuideURL = If(Not String.IsNullOrEmpty(Master.eSettings.ExternalTVDBAPIKey), String.Format("http://{0}/api/{1}/series/{2}/all/{3}.zip", Master.eSettings.TVDBMirror, Master.eSettings.ExternalTVDBAPIKey, sID, Master.eSettings.TVDBLanguage), String.Empty) + If sInfo.Options.bShowGenre AndAlso (String.IsNullOrEmpty(.Genre) OrElse Not Master.eSettings.ShowLockGenre) Then .Genre = If(IsNothing(xS(0).Element("Genre")), .Genre, Strings.Join(xS(0).Element("Genre").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bShowMPAA Then .MPAA = If(IsNothing(xS(0).Element("ContentRating")), .MPAA, xS(0).Element("ContentRating").Value) + If sInfo.Options.bShowPlot AndAlso (String.IsNullOrEmpty(.Plot) OrElse Not Master.eSettings.ShowLockPlot) Then .Plot = If(IsNothing(xS(0).Element("Overview")), .Plot, xS(0).Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + If sInfo.Options.bShowPremiered Then .Premiered = If(IsNothing(xS(0).Element("FirstAired")), .Premiered, xS(0).Element("FirstAired").Value) + If sInfo.Options.bShowRating AndAlso (String.IsNullOrEmpty(.Rating) OrElse Not Master.eSettings.ShowLockRating) Then .Rating = If(IsNothing(xS(0).Element("Rating")), .Rating, xS(0).Element("Rating").Value) + If sInfo.Options.bShowStudio AndAlso (String.IsNullOrEmpty(.Studio) OrElse Not Master.eSettings.ShowLockStudio) Then .Studio = If(IsNothing(xS(0).Element("Network")), .Studio, xS(0).Element("Network").Value) + If sInfo.Options.bShowActors Then .Actors = Actors + End With + End If + + 'set it back + tmpTVDBShow.Show = tShow + + For Each Episode As Structures.DBTV In tmpTVDBShow.Episodes + + Episode.ShowLanguage = sInfo.SelectedLang + + iEp = Episode.TVEp.Episode + iSeas = Episode.TVEp.Season + sTitle = Episode.TVEp.Title + byTitle = False + tOrdering = Enums.Ordering.Standard + + If Not IsNothing(tShow.TVShow) Then Episode.TVShow = tShow.TVShow + + If sInfo.Ordering = Enums.Ordering.DVD Then + 'first we need to check if dvd order is specified for every episode in the season + 'we'll use the regular season number as an indicator even though there are some cases + 'where this will not work (season 1 episode 1 = dvd_season 2 dvd_episode 1) but it + 'should work in most cases and is the best solution I could come up with + + If xdShow.Descendants("Episode").Where(Function(e) Not IsNothing(e.Element("SeasonNumber")) AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas AndAlso (IsNothing(e.Element("DVD_season")) OrElse String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) OrElse IsNothing(e.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.DVD + End If + ElseIf sInfo.Ordering = Enums.Ordering.Absolute Then + If xdShow.Descendants("Episode").Where(Function(e) Convert.ToInt32(e.Element("SeasonNumber").Value) > 0 AndAlso (IsNothing(e.Element("absolute_number")) OrElse String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString))).Count = 0 Then + tOrdering = Enums.Ordering.Absolute + End If + End If + + If tOrdering = Enums.Ordering.DVD Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("DVD_episodenumber")) AndAlso Not String.IsNullOrEmpty(e.Element("DVD_episodenumber").Value.ToString) AndAlso Convert.ToInt32(CLng(e.Element("DVD_episodenumber").Value.ToString)) = iEp AndAlso Not IsNothing(e.Element("DVD_season")) AndAlso Not String.IsNullOrEmpty(e.Element("DVD_season").Value.ToString) AndAlso Convert.ToInt32(e.Element("DVD_season").Value) = iSeas) + ElseIf tOrdering = Enums.Ordering.Absolute Then + If iSeas = 1 Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString) AndAlso Convert.ToInt32(e.Element("absolute_number").Value.ToString) = iEp) + Else + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Not IsNothing(e.Element("absolute_number")) AndAlso Not String.IsNullOrEmpty(e.Element("absolute_number").Value.ToString) AndAlso Convert.ToInt32(e.Element("EpisodeNumber").Value.ToString) = iEp AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas) + End If + Else + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) Convert.ToInt32(e.Element("EpisodeNumber").Value) = iEp AndAlso Convert.ToInt32(e.Element("SeasonNumber").Value) = iSeas) + End If + + If IsNothing(xE) Then + xE = xdShow.Descendants("Episode").FirstOrDefault(Function(e) StringUtils.ComputeLevenshtein(e.Element("EpisodeName").Value, sTitle) < 5) + byTitle = True + End If + + If Not IsNothing(xE) Then + With Episode.TVEp + If sInfo.Options.bEpTitle AndAlso (String.IsNullOrEmpty(.Title) OrElse Not Master.eSettings.EpLockTitle) AndAlso Not String.IsNullOrEmpty(xE.Element("EpisodeName").Value) Then .Title = xE.Element("EpisodeName").Value + If byTitle Then + If tOrdering = Enums.Ordering.DVD Then + If sInfo.Options.bEpSeason Then .Season = If(IsNothing(xE.Element("DVD_season")) OrElse String.IsNullOrEmpty(xE.Element("DVD_season").Value), 0, Convert.ToInt32(xE.Element("DVD_season").Value)) + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("DVD_episodenumber")) OrElse String.IsNullOrEmpty(xE.Element("DVD_episodenumber").Value), 0, Convert.ToInt32(xE.Element("DVD_episodenumber").Value)) + ElseIf tOrdering = Enums.Ordering.Absolute Then + If sInfo.Options.bEpSeason Then .Season = 1 + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("absolute_number")) OrElse String.IsNullOrEmpty(xE.Element("absolute_number").Value), 0, Convert.ToInt32(xE.Element("absolute_number").Value)) + Else + If sInfo.Options.bEpSeason Then .Season = If(IsNothing(xE.Element("SeasonNumber")) OrElse String.IsNullOrEmpty(xE.Element("SeasonNumber").Value), 0, Convert.ToInt32(xE.Element("SeasonNumber").Value)) + If sInfo.Options.bEpEpisode Then .Episode = If(IsNothing(xE.Element("EpisodeNumber")) OrElse String.IsNullOrEmpty(xE.Element("EpisodeNumber").Value), 0, Convert.ToInt32(xE.Element("EpisodeNumber").Value)) + End If + End If + If sInfo.Options.bEpAired Then .Aired = If(IsNothing(xE.Element("FirstAired")), .Aired, xE.Element("FirstAired").Value) + If sInfo.Options.bEpRating AndAlso (String.IsNullOrEmpty(.Rating) OrElse Not Master.eSettings.EpLockRating) Then .Rating = If(IsNothing(xE.Element("Rating")), .Rating, xE.Element("Rating").Value) + If sInfo.Options.bEpPlot AndAlso (String.IsNullOrEmpty(.Plot) OrElse Not Master.eSettings.EpLockPlot) Then .Plot = If(IsNothing(xE.Element("Overview")), .Plot, xE.Element("Overview").Value.ToString.Replace(vbCrLf, vbLf).Replace(vbLf, vbCrLf)) + 'If sInfo.Options.bEpDirector Then .Director = If(IsNothing(xS(0).Element("Director")), .Director, Strings.Join(xS(0).Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bEpDirector Then .Director = If(IsNothing(xE.Element("Director")), .Director, Strings.Join(xE.Element("Director").Value.Trim(Convert.ToChar("|")).Split(Convert.ToChar("|")), " / ")) + If sInfo.Options.bEpCredits Then .Credits = CreditsString(If(IsNothing(xE.Element("GuestStars")), String.Empty, xE.Element("GuestStars").Value), If(IsNothing(xE.Element("Writer")), String.Empty, xE.Element("Writer").Value)) + If sInfo.Options.bEpActors Then .Actors = Actors + .PosterURL = If(IsNothing(xE.Element("filename")) OrElse String.IsNullOrEmpty(xE.Element("filename").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, xE.Element("filename").Value)) + .LocalFile = If(IsNothing(xE.Element("filename")) OrElse String.IsNullOrEmpty(xE.Element("filename").Value), String.Empty, Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "episodeposters", Path.DirectorySeparatorChar, xE.Element("filename").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar)))) + End With + End If + Next + + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Else + sID = sInfo.TVDBID + End If + 'and finally the images + Try + If ImagesOnly OrElse Not IsNothing(tShow.TVShow) Then + If Not String.IsNullOrEmpty(bXML) Then + Dim xdImage As XDocument = XDocument.Parse(bXML) + For Each tImage As XElement In xdImage.Descendants("Banner") + If (Not IsNothing(tImage.Element("BannerPath")) AndAlso Not String.IsNullOrEmpty(tImage.Element("BannerPath").Value)) AndAlso _ + (Not Master.eSettings.OnlyGetTVImagesForSelectedLanguage OrElse ((Not IsNothing(tImage.Element("Language")) AndAlso tImage.Element("Language").Value = Master.eSettings.TVDBLanguage) OrElse _ + ((IsNothing(tImage.Element("Language")) OrElse tImage.Element("Language").Value = "en") AndAlso Master.eSettings.AlwaysGetEnglishTVImages))) Then + Select Case tImage.Element("BannerType").Value + Case "fanart" + tmpTVDBShow.Fanart.Add(New TVDBFanart With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .ThumbnailURL = If(IsNothing(tImage.Element("ThumbnailPath")) OrElse String.IsNullOrEmpty(tImage.Element("ThumbnailPath").Value), String.Empty, String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("ThumbnailPath").Value)), _ + .Size = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), New Size With {.Width = 0, .Height = 0}, StringUtils.StringToSize(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "fanart", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .LocalThumb = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "fanart", Path.DirectorySeparatorChar, tImage.Element("ThumbnailPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "poster" + tmpTVDBShow.Posters.Add(New TVDBPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Size = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), New Size With {.Width = 0, .Height = 0}, StringUtils.StringToSize(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "posters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "season" + tmpTVDBShow.SeasonPosters.Add(New TVDBSeasonPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Season = If(IsNothing(tImage.Element("Season")) OrElse String.IsNullOrEmpty(tImage.Element("Season").Value), 0, Convert.ToInt32(tImage.Element("Season").Value)), _ + .Type = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), Enums.SeasonPosterType.None, StringToSeasonPosterType(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "seasonposters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + Case "series" + tmpTVDBShow.ShowPosters.Add(New TVDBShowPoster With { _ + .URL = String.Format("http://{0}/banners/{1}", Master.eSettings.TVDBMirror, tImage.Element("BannerPath").Value), _ + .Type = If(IsNothing(tImage.Element("BannerType2")) OrElse String.IsNullOrEmpty(tImage.Element("BannerType2").Value), Enums.ShowBannerType.None, StringToShowPosterType(tImage.Element("BannerType2").Value)), _ + .LocalFile = Path.Combine(Master.TempPath, String.Concat("Shows", Path.DirectorySeparatorChar, sID, Path.DirectorySeparatorChar, "seriesposters", Path.DirectorySeparatorChar, tImage.Element("BannerPath").Value.Replace(Convert.ToChar("/"), Path.DirectorySeparatorChar))), _ + .Language = If(IsNothing(tImage.Element("Language")) OrElse String.IsNullOrEmpty(tImage.Element("Language").Value), String.Empty, tImage.Element("Language").Value)}) + End Select + End If + Next + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function StringToSeasonPosterType(ByVal sType As String) As Enums.SeasonPosterType + Select Case sType.ToLower + Case "season" + Return Enums.SeasonPosterType.Poster + Case "seasonwide" + Return Enums.SeasonPosterType.Wide + Case Else + Return Enums.SeasonPosterType.None + End Select + End Function + + Private Function StringToShowPosterType(ByVal sType As String) As Enums.ShowBannerType + Select Case sType.ToLower + Case "blank" + Return Enums.ShowBannerType.Blank + Case "graphical" + Return Enums.ShowBannerType.Graphical + Case "text" + Return Enums.ShowBannerType.Text + Case Else + Return Enums.ShowBannerType.None + End Select + End Function + +#End Region 'Methods + +#Region "Other" + + Private Structure Arguments + + Dim Parameter As Object + Dim Type As Integer + + End Structure + + Private Structure Results + + Dim Result As Object + Dim Type As Integer '0 = search, 1 = show download, 2 = load eps, 3 = save + + End Structure + +#End Region 'Other + + End Class + + <Serializable()> _ + Public Class TVDBFanart + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _localthumb As String + Private _size As Size + Private _thumbnailurl As String + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property LocalThumb() As String + Get + Return Me._localthumb + End Get + Set(ByVal value As String) + Me._localthumb = value + End Set + End Property + + Public Property Size() As Size + Get + Return Me._size + End Get + Set(ByVal value As Size) + Me._size = value + End Set + End Property + + Public Property ThumbnailURL() As String + Get + Return Me._thumbnailurl + End Get + Set(ByVal value As String) + Me._thumbnailurl = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._thumbnailurl = String.Empty + Me._size = New Size + Me._localfile = String.Empty + Me._localthumb = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _size As Size + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Size() As Size + Get + Return Me._size + End Get + Set(ByVal value As Size) + Me._size = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._size = New Size + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + <Serializable()> _ + Public Class TVDBSeasonImage + +#Region "Fields" + + Private _fanart As TVDBFanart + Private _poster As Images + Private _season As Integer + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Fanart() As TVDBFanart + Get + Return Me._fanart + End Get + Set(ByVal value As TVDBFanart) + Me._fanart = value + End Set + End Property + + Public Property Poster() As Images + Get + Return Me._poster + End Get + Set(ByVal value As Images) + Me._poster = value + End Set + End Property + + Public Property Season() As Integer + Get + Return Me._season + End Get + Set(ByVal value As Integer) + Me._season = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._season = -1 + Me._poster = New Images + Me._fanart = New TVDBFanart + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBSeasonPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _season As Integer + Private _type As Enums.SeasonPosterType + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Season() As Integer + Get + Return Me._season + End Get + Set(ByVal value As Integer) + Me._season = value + End Set + End Property + + Public Property Type() As Enums.SeasonPosterType + Get + Return Me._type + End Get + Set(ByVal value As Enums.SeasonPosterType) + Me._type = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._season = 0 + Me._type = Enums.SeasonPosterType.None + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVDBShow + +#Region "Fields" + + Private _allseason As Structures.DBTV + Private _episodes As New List(Of Structures.DBTV) + Private _fanart As New List(Of TVDBFanart) + Private _posters As New List(Of TVDBPoster) + Private _seasonposters As New List(Of TVDBSeasonPoster) + Private _show As Structures.DBTV + Private _showposters As New List(Of TVDBShowPoster) + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property AllSeason() As Structures.DBTV + Get + Return Me._allseason + End Get + Set(ByVal value As Structures.DBTV) + Me._allseason = value + End Set + End Property + + Public Property Episodes() As List(Of Structures.DBTV) + Get + Return Me._episodes + End Get + Set(ByVal value As List(Of Structures.DBTV)) + Me._episodes = value + End Set + End Property + + Public Property Fanart() As List(Of TVDBFanart) + Get + Return Me._fanart + End Get + Set(ByVal value As List(Of TVDBFanart)) + Me._fanart = value + End Set + End Property + + Public Property Posters() As List(Of TVDBPoster) + Get + Return Me._posters + End Get + Set(ByVal value As List(Of TVDBPoster)) + Me._posters = value + End Set + End Property + + Public Property SeasonPosters() As List(Of TVDBSeasonPoster) + Get + Return Me._seasonposters + End Get + Set(ByVal value As List(Of TVDBSeasonPoster)) + Me._seasonposters = value + End Set + End Property + + Public Property Show() As Structures.DBTV + Get + Return Me._show + End Get + Set(ByVal value As Structures.DBTV) + Me._show = value + End Set + End Property + + Public Property ShowPosters() As List(Of TVDBShowPoster) + Get + Return Me._showposters + End Get + Set(ByVal value As List(Of TVDBShowPoster)) + Me._showposters = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._show = New Structures.DBTV + Me._allseason = New Structures.DBTV + Me._episodes = New List(Of Structures.DBTV) + Me._fanart = New List(Of TVDBFanart) + Me._showposters = New List(Of TVDBShowPoster) + Me._seasonposters = New List(Of TVDBSeasonPoster) + Me._posters = New List(Of TVDBPoster) + End Sub + +#End Region 'Methods + + End Class + + <Serializable()> _ + Public Class TVDBShowPoster + +#Region "Fields" + + Private _image As Images + Private _localfile As String + Private _type As Enums.ShowBannerType + Private _url As String + Private _language As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Image() As Images + Get + Return Me._image + End Get + Set(ByVal value As Images) + Me._image = value + End Set + End Property + + Public Property LocalFile() As String + Get + Return Me._localfile + End Get + Set(ByVal value As String) + Me._localfile = value + End Set + End Property + + Public Property Type() As Enums.ShowBannerType + Get + Return Me._type + End Get + Set(ByVal value As Enums.ShowBannerType) + Me._type = value + End Set + End Property + + Public Property URL() As String + Get + Return Me._url + End Get + Set(ByVal value As String) + Me._url = value + End Set + End Property + + Public Property Language() As String + Get + Return Me._language + End Get + Set(ByVal value As String) + Me._language = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._url = String.Empty + Me._type = Enums.ShowBannerType.None + Me._localfile = String.Empty + Me._image = New Images + Me._language = String.Empty + End Sub + +#End Region 'Methods + + End Class + + Public Class TVSearchResults + +#Region "Fields" + + Private _aired As String + Private _banner As String + Private _id As Integer + Private _language As Containers.TVLanguage + Private _lev As Integer + Private _name As String + Private _overview As String + +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Me.Clear() + End Sub + +#End Region 'Constructors + +#Region "Properties" + + Public Property Aired() As String + Get + Return Me._aired + End Get + Set(ByVal value As String) + Me._aired = value + End Set + End Property + + Public Property Banner() As String + Get + Return Me._banner + End Get + Set(ByVal value As String) + Me._banner = value + End Set + End Property + + Public Property ID() As Integer + Get + Return Me._id + End Get + Set(ByVal value As Integer) + Me._id = value + End Set + End Property + + Public Property Language() As Containers.TVLanguage + Get + Return Me._language + End Get + Set(ByVal value As Containers.TVLanguage) + Me._language = value + End Set + End Property + + Public Property Lev() As Integer + Get + Return Me._lev + End Get + Set(ByVal value As Integer) + Me._lev = value + End Set + End Property + + Public Property Name() As String + Get + Return Me._name + End Get + Set(ByVal value As String) + Me._name = value + End Set + End Property + + Public Property Overview() As String + Get + Return Me._overview + End Get + Set(ByVal value As String) + Me._overview = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub Clear() + Me._id = 0 + Me._name = String.Empty + Me._aired = String.Empty + Me._language = New Containers.TVLanguage + Me._overview = String.Empty + Me._banner = String.Empty + Me._lev = 0 + End Sub + +#End Region 'Methods + + End Class + +#End Region 'Nested Types + +End Class diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVChangeEp.Designer.vb b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVChangeEp.Designer.vb new file mode 100644 index 0000000..dd38c94 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVChangeEp.Designer.vb @@ -0,0 +1,139 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVChangeEp + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lvEpisodes = New System.Windows.Forms.ListView() + Me.colEpisode = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colTitle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.pbPreview = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.txtPlot = New System.Windows.Forms.TextBox() + CType(Me.pbPreview, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Location = New System.Drawing.Point(505, 286) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(575, 286) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'lvEpisodes + ' + Me.lvEpisodes.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colEpisode, Me.colTitle}) + Me.lvEpisodes.FullRowSelect = True + Me.lvEpisodes.HideSelection = False + Me.lvEpisodes.Location = New System.Drawing.Point(3, 3) + Me.lvEpisodes.MultiSelect = False + Me.lvEpisodes.Name = "lvEpisodes" + Me.lvEpisodes.Size = New System.Drawing.Size(358, 278) + Me.lvEpisodes.TabIndex = 2 + Me.lvEpisodes.UseCompatibleStateImageBehavior = False + Me.lvEpisodes.View = System.Windows.Forms.View.Details + ' + 'colEpisode + ' + Me.colEpisode.Text = "Episode" + ' + 'colTitle + ' + Me.colTitle.Text = "Title" + Me.colTitle.Width = 276 + ' + 'pbPreview + ' + Me.pbPreview.Location = New System.Drawing.Point(417, 12) + Me.pbPreview.Name = "pbPreview" + Me.pbPreview.Size = New System.Drawing.Size(174, 117) + Me.pbPreview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPreview.TabIndex = 3 + Me.pbPreview.TabStop = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(367, 140) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(275, 21) + Me.lblTitle.TabIndex = 3 + ' + 'txtPlot + ' + Me.txtPlot.BackColor = System.Drawing.SystemColors.Control + Me.txtPlot.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.txtPlot.Location = New System.Drawing.Point(366, 169) + Me.txtPlot.Multiline = True + Me.txtPlot.Name = "txtPlot" + Me.txtPlot.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtPlot.Size = New System.Drawing.Size(276, 111) + Me.txtPlot.TabIndex = 4 + ' + 'dlgTVChangeEp + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(646, 315) + Me.ControlBox = False + Me.Controls.Add(Me.txtPlot) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbPreview) + Me.Controls.Add(Me.lvEpisodes) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTVChangeEp" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Change Episode" + CType(Me.pbPreview, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents lvEpisodes As System.Windows.Forms.ListView + Friend WithEvents colEpisode As System.Windows.Forms.ColumnHeader + Friend WithEvents colTitle As System.Windows.Forms.ColumnHeader + Friend WithEvents pbPreview As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents txtPlot As System.Windows.Forms.TextBox + +End Class diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVChangeEp.resx b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVChangeEp.resx new file mode 100644 index 0000000..717c885 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVChangeEp.resx @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="txtPlot.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>True</value> + </metadata> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVChangeEp.vb b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVChangeEp.vb new file mode 100644 index 0000000..954f58a --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVChangeEp.vb @@ -0,0 +1,120 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class dlgTVChangeEp + +#Region "Fields" + + Private _episode As MediaContainers.EpisodeDetails = Nothing + Private _tepisodes As New List(Of MediaContainers.EpisodeDetails) + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal tEpisodes As List(Of MediaContainers.EpisodeDetails)) As MediaContainers.EpisodeDetails + Me._tepisodes = tEpisodes + + If MyBase.ShowDialog = Windows.Forms.DialogResult.OK Then + Return _episode + Else + Return Nothing + End If + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub ClearInfo() + Me.pbPreview.Image = Nothing + Me.lblTitle.Text = String.Empty + Me.txtPlot.Text = String.Empty + End Sub + + Private Sub dlgTVChangeEp_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + + Dim lGroup As New ListViewGroup + Dim lItem As New ListViewItem + Dim tSeason As Integer = Nothing + + For Each Season As Integer In _tepisodes.GroupBy(Function(s) s.Season).Select(Function(group) group.Key) + tSeason = Season + lGroup = New ListViewGroup + lGroup.Header = String.Format(Master.eLang.GetString(726, "Season {0}", True), tSeason) + lvEpisodes.Groups.Add(lGroup) + For Each Episode As MediaContainers.EpisodeDetails In _tepisodes.Where(Function(s) s.Season = tSeason).OrderBy(Function(s) s.Episode) + lItem = lvEpisodes.Items.Add(Episode.Episode.ToString) + lItem.Tag = Episode + lItem.SubItems.Add(Episode.Title) + lGroup.Items.Add(lItem) + Next + Next + End Sub + + Private Sub lvEpisodes_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvEpisodes.SelectedIndexChanged + Me.ClearInfo() + If lvEpisodes.SelectedItems.Count > 0 AndAlso Not IsNothing(lvEpisodes.SelectedItems(0).Tag) Then + Me._episode = DirectCast(lvEpisodes.SelectedItems(0).Tag, MediaContainers.EpisodeDetails) + + If Not IsNothing(Me._episode.Poster.Image) Then + Me.pbPreview.Image = Me._episode.Poster.Image + ElseIf Not String.IsNullOrEmpty(Me._episode.LocalFile) AndAlso File.Exists(Me._episode.LocalFile) Then + Me._episode.Poster.FromFile(Me._episode.LocalFile) + If Not IsNothing(Me._episode.Poster.Image) Then + Me.pbPreview.Image = Me._episode.Poster.Image + End If + ElseIf Not String.IsNullOrEmpty(Me._episode.PosterURL) Then + Me._episode.Poster.FromWeb(Me._episode.PosterURL) + If Not IsNothing(Me._episode.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Me._episode.LocalFile).FullName) + Me._episode.Poster.Save(Me._episode.LocalFile) + Me.pbPreview.Image = Me._episode.Poster.Image + End If + End If + + Me.lblTitle.Text = Me._episode.Title + Me.txtPlot.Text = Me._episode.Plot + End If + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(772, "Change Episode", True) + + Me.lvEpisodes.Columns(0).Text = Master.eLang.GetString(727, "Episode", True) + Me.lvEpisodes.Columns(1).Text = Master.eLang.GetString(21, "Title", True) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVDBSearchResults.Designer.vb b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVDBSearchResults.Designer.vb new file mode 100644 index 0000000..b05c597 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVDBSearchResults.Designer.vb @@ -0,0 +1,368 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVDBSearchResults + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTVDBSearchResults)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pbBanner = New System.Windows.Forms.PictureBox() + Me.lblTitle = New System.Windows.Forms.Label() + Me.lblAiredHeader = New System.Windows.Forms.Label() + Me.lblAired = New System.Windows.Forms.Label() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lvSearchResults = New System.Windows.Forms.ListView() + Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colLang = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colLev = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colSLang = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.pnlLoading = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.btnSearch = New System.Windows.Forms.Button() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.btnVerify = New System.Windows.Forms.Button() + Me.chkManual = New System.Windows.Forms.CheckBox() + Me.txtTVDBID = New System.Windows.Forms.TextBox() + CType(Me.pbBanner, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoading.SuspendLayout() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Enabled = False + Me.OK_Button.Location = New System.Drawing.Point(485, 335) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(558, 335) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pbBanner + ' + Me.pbBanner.Location = New System.Drawing.Point(325, 69) + Me.pbBanner.Name = "pbBanner" + Me.pbBanner.Size = New System.Drawing.Size(300, 55) + Me.pbBanner.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbBanner.TabIndex = 3 + Me.pbBanner.TabStop = False + ' + 'lblTitle + ' + Me.lblTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(325, 132) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(300, 19) + Me.lblTitle.TabIndex = 9 + Me.lblTitle.Visible = False + ' + 'lblAiredHeader + ' + Me.lblAiredHeader.AutoSize = True + Me.lblAiredHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblAiredHeader.Location = New System.Drawing.Point(325, 161) + Me.lblAiredHeader.Name = "lblAiredHeader" + Me.lblAiredHeader.Size = New System.Drawing.Size(38, 13) + Me.lblAiredHeader.TabIndex = 10 + Me.lblAiredHeader.Text = "Aired:" + Me.lblAiredHeader.Visible = False + ' + 'lblAired + ' + Me.lblAired.AutoSize = True + Me.lblAired.Location = New System.Drawing.Point(387, 161) + Me.lblAired.Name = "lblAired" + Me.lblAired.Size = New System.Drawing.Size(63, 13) + Me.lblAired.TabIndex = 12 + Me.lblAired.Text = "00/00/0000" + Me.lblAired.Visible = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.AutoSize = True + Me.lblPlotHeader.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblPlotHeader.Location = New System.Drawing.Point(325, 189) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(83, 13) + Me.lblPlotHeader.TabIndex = 13 + Me.lblPlotHeader.Text = "Plot Summary:" + Me.lblPlotHeader.Visible = False + ' + 'txtOutline + ' + Me.txtOutline.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtOutline.Location = New System.Drawing.Point(325, 205) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(300, 127) + Me.txtOutline.TabIndex = 14 + Me.txtOutline.TabStop = False + Me.txtOutline.Visible = False + ' + 'lvSearchResults + ' + Me.lvSearchResults.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colName, Me.colLang, Me.colLev, Me.colID, Me.colSLang}) + Me.lvSearchResults.FullRowSelect = True + Me.lvSearchResults.HideSelection = False + Me.lvSearchResults.Location = New System.Drawing.Point(3, 96) + Me.lvSearchResults.MultiSelect = False + Me.lvSearchResults.Name = "lvSearchResults" + Me.lvSearchResults.Size = New System.Drawing.Size(316, 236) + Me.lvSearchResults.TabIndex = 5 + Me.lvSearchResults.UseCompatibleStateImageBehavior = False + Me.lvSearchResults.View = System.Windows.Forms.View.Details + ' + 'colName + ' + Me.colName.Text = "Title" + Me.colName.Width = 223 + ' + 'colLang + ' + Me.colLang.Text = "Language" + Me.colLang.Width = 89 + ' + 'colLev + ' + Me.colLev.Width = 0 + ' + 'colID + ' + Me.colID.Width = 0 + ' + 'colSLang + ' + Me.colSLang.Width = 0 + ' + 'pnlLoading + ' + Me.pnlLoading.BackColor = System.Drawing.Color.White + Me.pnlLoading.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoading.Controls.Add(Me.Label3) + Me.pnlLoading.Controls.Add(Me.ProgressBar1) + Me.pnlLoading.Location = New System.Drawing.Point(380, 154) + Me.pnlLoading.Name = "pnlLoading" + Me.pnlLoading.Size = New System.Drawing.Size(200, 54) + Me.pnlLoading.TabIndex = 11 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(3, 10) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(98, 13) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "Searching TVDB..." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(3, 32) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(192, 17) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(643, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(287, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "View details of each result to find the proper TV show." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(216, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "TV Search Results" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'btnSearch + ' + Me.btnSearch.Image = CType(resources.GetObject("btnSearch.Image"), System.Drawing.Image) + Me.btnSearch.Location = New System.Drawing.Point(296, 67) + Me.btnSearch.Name = "btnSearch" + Me.btnSearch.Size = New System.Drawing.Size(23, 23) + Me.btnSearch.TabIndex = 4 + Me.btnSearch.UseVisualStyleBackColor = True + ' + 'txtSearch + ' + Me.txtSearch.Location = New System.Drawing.Point(3, 68) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(287, 22) + Me.txtSearch.TabIndex = 3 + ' + 'btnVerify + ' + Me.btnVerify.Enabled = False + Me.btnVerify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnVerify.Location = New System.Drawing.Point(244, 337) + Me.btnVerify.Name = "btnVerify" + Me.btnVerify.Size = New System.Drawing.Size(75, 22) + Me.btnVerify.TabIndex = 8 + Me.btnVerify.Text = "Verify" + Me.btnVerify.UseVisualStyleBackColor = True + ' + 'chkManual + ' + Me.chkManual.AutoSize = True + Me.chkManual.Enabled = False + Me.chkManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkManual.Location = New System.Drawing.Point(3, 341) + Me.chkManual.Name = "chkManual" + Me.chkManual.Size = New System.Drawing.Size(127, 17) + Me.chkManual.TabIndex = 6 + Me.chkManual.Text = "Manual TVDB Entry:" + Me.chkManual.UseVisualStyleBackColor = True + ' + 'txtTVDBID + ' + Me.txtTVDBID.Enabled = False + Me.txtTVDBID.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTVDBID.Location = New System.Drawing.Point(138, 337) + Me.txtTVDBID.Name = "txtTVDBID" + Me.txtTVDBID.Size = New System.Drawing.Size(100, 22) + Me.txtTVDBID.TabIndex = 7 + ' + 'dlgTVDBSearchResults + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(643, 378) + Me.ControlBox = False + Me.Controls.Add(Me.btnVerify) + Me.Controls.Add(Me.chkManual) + Me.Controls.Add(Me.txtTVDBID) + Me.Controls.Add(Me.btnSearch) + Me.Controls.Add(Me.txtSearch) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.pnlLoading) + Me.Controls.Add(Me.lvSearchResults) + Me.Controls.Add(Me.lblPlotHeader) + Me.Controls.Add(Me.txtOutline) + Me.Controls.Add(Me.lblAiredHeader) + Me.Controls.Add(Me.lblAired) + Me.Controls.Add(Me.lblTitle) + Me.Controls.Add(Me.pbBanner) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(649, 406) + Me.Name = "dlgTVDBSearchResults" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "TV Search Results" + CType(Me.pbBanner, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoading.ResumeLayout(False) + Me.pnlLoading.PerformLayout() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pbBanner As System.Windows.Forms.PictureBox + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents lblAiredHeader As System.Windows.Forms.Label + Friend WithEvents lblAired As System.Windows.Forms.Label + Friend WithEvents lblPlotHeader As System.Windows.Forms.Label + Friend WithEvents txtOutline As System.Windows.Forms.TextBox + Friend WithEvents lvSearchResults As System.Windows.Forms.ListView + Friend WithEvents colName As System.Windows.Forms.ColumnHeader + Friend WithEvents colLang As System.Windows.Forms.ColumnHeader + Friend WithEvents pnlLoading As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents btnSearch As System.Windows.Forms.Button + Friend WithEvents txtSearch As System.Windows.Forms.TextBox + Friend WithEvents colLev As System.Windows.Forms.ColumnHeader + Friend WithEvents colID As System.Windows.Forms.ColumnHeader + Friend WithEvents colSLang As System.Windows.Forms.ColumnHeader + Friend WithEvents btnVerify As System.Windows.Forms.Button + Friend WithEvents chkManual As System.Windows.Forms.CheckBox + Friend WithEvents txtTVDBID As System.Windows.Forms.TextBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVDBSearchResults.resx b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVDBSearchResults.resx new file mode 100644 index 0000000..7a332a8 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVDBSearchResults.resx @@ -0,0 +1,191 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + gg== +</value> + </data> + <data name="btnSearch.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA + CukB/XXO0wAAAepJREFUOE+lkktIG1EUhkeFaLQ+UGulgthNEUHRCrqyIHZTdSd0Iyq46cL3Sly50ppV + uywYi2uDiyKK1ioFk0lm7mSmSgymJuIqSkwwCTVpGs3fM0Pa+poWceBj4N5zvnvOuZcDwN2HeyWrB98Q + LFosuRJjz51O6cXmxsaj/1V3RSAx8fVXRQnIsgwVRZHjJHr7L8kfAROFPoWS3G43gicnCIVC8O7vQ11z + StKsnkQTrK6sGCSJBXddLpyfJ5FKpTTUz+f1gvbA22w1t0k0AW3WCYIAv9+PZPIn4vGYRiLxA+HwKRhj + EByOIV2BdWur3mG34/j4iJISiEYjRBSx2BkikQiYKOJQ4ft1BZ/X13NIEHalW1CrUEVACj6fF4yqe2W2 + TegK0m0MiBSoziEQCNAQg/B4PPi2I8Fk+QJucBnZI0vvrkuuXCPP8+PU63dC7RnbTvHi/cKnA2O3GYbu + OeT0ziOv58Na8djHgt+iGw+JHk+pzWrtpMF27cn2Ko7jMnLbTebCl1MoaH+D/I4ZFHbM7FZ0ThtvfYl6 + 913WMjFc2jyGkqZRlNC/om2yXBNk0RFEEfGEqCZqiXriGdGYpoHCHhdXtg6W1fQKD592mQwZ3N8KKCiL + yCaMRB7xgMi/zuXqMinnTi3otfYLj6yxrhdJtZ8AAAAASUVORK5CYII= +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVDBSearchResults.vb b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVDBSearchResults.vb new file mode 100644 index 0000000..cce33d3 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVDBSearchResults.vb @@ -0,0 +1,437 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTVDBSearchResults + +#Region "Fields" + + Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker + + Private lvResultsSorter As New ListViewColumnSorter + Private sHTTP As New HTTP + Private sInfo As Structures.ScrapeInfo + Private _manualresult As Scraper.TVSearchResults = Nothing + Private _skipdownload As Boolean = False + +#End Region 'Fields + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal _sInfo As Structures.ScrapeInfo) As Windows.Forms.DialogResult + Me.sInfo = _sInfo + Me.Text = String.Concat(Master.eLang.GetString(85, "TV Search Results"), " - ", sInfo.ShowTitle) + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + + Return MyBase.ShowDialog() + End Function + + Public Overloads Function ShowDialog(ByVal _sinfo As Structures.ScrapeInfo, ByVal SkipDownload As Boolean) As Structures.ScrapeInfo + Me.sInfo = _sinfo + Me._skipdownload = SkipDownload + + Me.Text = String.Concat(Master.eLang.GetString(85, "TV Search Results"), " - ", sInfo.ShowTitle) + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return Me.sInfo + Else + Return _sinfo + End If + End Function + + Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click + If Not String.IsNullOrEmpty(Me.txtSearch.Text) Then + Me.lvSearchResults.Enabled = False + Me.sInfo.ShowTitle = Me.txtSearch.Text + Me.ClearInfo() + Me.chkManual.Enabled = False + Me.chkManual.Checked = False + Me.txtSearch.Text = String.Empty + Me.btnVerify.Enabled = False + Scraper.sObject.GetSearchResultsAsync(Me.sInfo) + Me.pnlLoading.Visible = True + End If + End Sub + + Private Sub btnVerify_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVerify.Click + If IsNumeric(Me.txtTVDBID.Text) AndAlso Me.txtTVDBID.Text.Length >= 5 Then + Dim tmpXML As XDocument = Nothing + Dim sLang As String = String.Empty + + Me.ClearInfo() + Me.pnlLoading.Visible = True + Application.DoEvents() + + Dim forceXML As String = sHTTP.DownloadData(String.Format("http://{0}/api/{1}/series/{2}/{3}.xml", Master.eSettings.TVDBMirror, Scraper.APIKey, Me.txtTVDBID.Text, Master.eSettings.TVDBLanguage)) + + If Not String.IsNullOrEmpty(forceXML) Then + Try + tmpXML = XDocument.Parse(forceXML) + Catch + End Try + + If Not IsNothing(tmpXML) Then + Dim tSer As XElement = tmpXML.Descendants("Series").FirstOrDefault(Function(s) s.HasElements) + + If Not IsNothing(tSer) Then + Me._manualresult = New Scraper.TVSearchResults + Me._manualresult.ID = Convert.ToInt32(tSer.Element("id").Value) + Me._manualresult.Name = If(Not IsNothing(tSer.Element("SeriesName")), tSer.Element("SeriesName").Value, String.Empty) + If Not IsNothing(tSer.Element("Language")) AndAlso Master.eSettings.TVDBLanguages.Count > 0 Then + sLang = tSer.Element("Language").Value + Me._manualresult.Language = Master.eSettings.TVDBLanguages.FirstOrDefault(Function(s) s.ShortLang = sLang) + ElseIf Not IsNothing(tSer.Element("Language")) Then + sLang = tSer.Element("Language").Value + Me._manualresult.Language = New Containers.TVLanguage With {.LongLang = String.Format("Unknown ({0})", sLang), .ShortLang = sLang} + End If + Me._manualresult.Aired = If(Not IsNothing(tSer.Element("FirstAired")), tSer.Element("FirstAired").Value, String.Empty) + Me._manualresult.Overview = If(Not IsNothing(tSer.Element("Overview")), tSer.Element("Overview").Value, String.Empty) + Me._manualresult.Banner = If(Not IsNothing(tSer.Element("banner")), tSer.Element("banner").Value, String.Empty) + If Not String.IsNullOrEmpty(Me._manualresult.Name) AndAlso Not String.IsNullOrEmpty(sLang) Then + If Not String.IsNullOrEmpty(Me._manualresult.Banner) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = Me._manualresult.Banner}) + End If + + Me.OK_Button.Tag = Me._manualresult.ID + Me.lblTitle.Text = Me._manualresult.Name + Me.txtOutline.Text = Me._manualresult.Overview + Me.lblAired.Text = Me._manualresult.Aired + Me.OK_Button.Enabled = True + Me.pnlLoading.Visible = False + Me.ControlsVisible(True) + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + Else + Me.pnlLoading.Visible = False + End If + + Else + MsgBox(Master.eLang.GetString(83, "The ID you entered is not a valid TVDB ID."), MsgBoxStyle.Exclamation, Master.eLang.GetString(292, "Invalid Entry", True)) + End If + End Sub + + Private Sub bwDownloadPic_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwDownloadPic.DoWork + Dim Args As Arguments = DirectCast(e.Argument, Arguments) + sHTTP.StartDownloadImage(String.Format("http://{0}/banners/_cache/{1}", Master.eSettings.TVDBMirror, Args.pURL)) + + While sHTTP.IsDownloading + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + e.Result = New Results With {.Result = sHTTP.Image()} + End Sub + + Private Sub bwDownloadPic_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwDownloadPic.RunWorkerCompleted + Dim Res As Results = DirectCast(e.Result, Results) + + Try + Me.pbBanner.Image = Res.Result + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub chkManual_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkManual.CheckedChanged + Me.ClearInfo() + Me.OK_Button.Enabled = False + Me.txtTVDBID.Enabled = Me.chkManual.Checked + Me.btnVerify.Enabled = Me.chkManual.Checked + Me.lvSearchResults.Enabled = Not Me.chkManual.Checked + + If Not Me.chkManual.Checked Then + txtTVDBID.Text = String.Empty + Else + If Me.lvSearchResults.SelectedItems.Count > 0 Then Me.lvSearchResults.SelectedItems(0).Selected = False + End If + End Sub + + Private Sub ClearInfo() + Me.ControlsVisible(False) + Me.lblTitle.Text = String.Empty + Me.lblAired.Text = String.Empty + Me.pbBanner.Image = Nothing + Scraper.sObject.CancelAsync() + End Sub + + Private Sub ControlsVisible(ByVal areVisible As Boolean) + Me.pbBanner.Visible = areVisible + Me.lblTitle.Visible = areVisible + Me.lblAiredHeader.Visible = areVisible + Me.lblAired.Visible = areVisible + Me.lblPlotHeader.Visible = areVisible + Me.txtOutline.Visible = areVisible + End Sub + + Private Sub dlgTVDBSearchResults_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Try + AddHandler ModulesManager.Instance.TVScraperEvent, AddressOf TVScraperEvent + Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) + Using g As Graphics = Graphics.FromImage(iBackground) + g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) + Me.pnlTop.BackgroundImage = iBackground + End Using + + Me.lvSearchResults.ListViewItemSorter = Me.lvResultsSorter + + Me.SetUp() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub lvSearchResults_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lvSearchResults.ColumnClick + ' Determine if the clicked column is already the column that is + ' being sorted. + Try + If (e.Column = Me.lvResultsSorter.SortColumn) Then + ' Reverse the current sort direction for this column. + If (Me.lvResultsSorter.Order = SortOrder.Ascending) Then + Me.lvResultsSorter.Order = SortOrder.Descending + Else + Me.lvResultsSorter.Order = SortOrder.Ascending + End If + Else + ' Set the column number that is to be sorted; default to ascending. + Me.lvResultsSorter.SortColumn = e.Column + Me.lvResultsSorter.Order = SortOrder.Ascending + End If + + ' Perform the sort with these new sort options. + Me.lvSearchResults.Sort() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub lvSearchResults_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvSearchResults.GotFocus + Me.AcceptButton = Me.OK_Button + End Sub + + Private Sub lvSearchResults_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvSearchResults.SelectedIndexChanged + Me.ClearInfo() + If Me.lvSearchResults.SelectedItems.Count > 0 AndAlso Not Me.chkManual.Checked Then + Dim SelectedShow As Scraper.TVSearchResults = DirectCast(Me.lvSearchResults.SelectedItems(0).Tag, Scraper.TVSearchResults) + If Not String.IsNullOrEmpty(SelectedShow.Banner) Then + If Me.bwDownloadPic.IsBusy Then + Me.bwDownloadPic.CancelAsync() + End If + + Me.bwDownloadPic = New System.ComponentModel.BackgroundWorker + Me.bwDownloadPic.WorkerSupportsCancellation = True + Me.bwDownloadPic.RunWorkerAsync(New Arguments With {.pURL = SelectedShow.Banner}) + End If + + Me.OK_Button.Tag = SelectedShow.ID + Me.lblTitle.Text = SelectedShow.Name + Me.txtOutline.Text = SelectedShow.Overview + Me.lblAired.Text = SelectedShow.Aired + Me.OK_Button.Enabled = True + Me.ControlsVisible(True) + End If + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + If Me.lvSearchResults.SelectedItems.Count > 0 Then + Dim sResults As Scraper.TVSearchResults = DirectCast(Me.lvSearchResults.SelectedItems(0).Tag, Scraper.TVSearchResults) + Me.sInfo.TVDBID = sResults.ID.ToString + Me.sInfo.SelectedLang = sResults.Language.ShortLang + + If Not _skipdownload Then + Me.Label3.Text = Master.eLang.GetString(84, "Downloading show info...") + Me.pnlLoading.Visible = True + Scraper.sObject.DownloadSeriesAsync(sInfo) + Else + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + ElseIf Me.chkManual.Checked AndAlso Not IsNothing(Me._manualresult) Then + Me.sInfo.TVDBID = Me._manualresult.ID.ToString + Me.sInfo.SelectedLang = Me._manualresult.Language.ShortLang + + If Not _skipdownload Then + Me.Label3.Text = Master.eLang.GetString(84, "Downloading show info...") + Me.pnlLoading.Visible = True + Scraper.sObject.DownloadSeriesAsync(sInfo) + Else + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End If + End If + End Sub + + Private Sub SetUp() + Me.Label1.Text = Master.eLang.GetString(85, "TV Search Results") + Me.Label2.Text = Master.eLang.GetString(86, "View details of each result to find the proper TV show.") + Me.lblAiredHeader.Text = Master.eLang.GetString(658, "Aired:", True) + Me.lblPlotHeader.Text = Master.eLang.GetString(783, "Plot Summary:", True) + + Me.lvSearchResults.Columns(0).Text = Master.eLang.GetString(21, "Title", True) + Me.lvSearchResults.Columns(1).Text = Master.eLang.GetString(610, "Language", True) + + Me.OK_Button.Text = Master.eLang.GetString(179, "OK", True) + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel", True) + End Sub + + Private Sub TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + Select Case eType + Case Enums.TVScraperEventType.SearchResultsDownloaded + Dim lItem As ListViewItem + Dim sResults As List(Of Scraper.TVSearchResults) = DirectCast(Parameter, List(Of Scraper.TVSearchResults)) + + Me.lvSearchResults.Items.Clear() + + If Not IsNothing(sResults) AndAlso sResults.Count > 0 Then + For Each sRes As Scraper.TVSearchResults In sResults.OrderBy(Function(r) r.Lev) + lItem = New ListViewItem(sRes.Name) + lItem.SubItems.Add(sRes.Language.LongLang) + lItem.SubItems.Add(sRes.Lev.ToString) + lItem.SubItems.Add(sRes.ID.ToString) + lItem.SubItems.Add(sRes.Language.ShortLang) + lItem.Tag = sRes + Me.lvSearchResults.Items.Add(lItem) + Next + End If + + Me.pnlLoading.Visible = False + + If Me.lvSearchResults.Items.Count > 0 Then + If sResults.Select(Function(s) s.ID).Distinct.Count = 1 Then + 'they're all for the same show... try to find one with the preferred language + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + Else + 'we've got a bunch of different shows... try to find a "best match" title with the preferred language + If sResults.Where(Function(s) s.Lev <= 5).Count > 0 Then + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If Convert.ToInt32(fItem.SubItems(2).Text) <= 5 AndAlso fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + + If Me.lvSearchResults.SelectedItems.Count = 0 Then + 'get the id for the best english match and see if we have one for the preferred language with same id + Dim tID As Integer = sResults.OrderBy(Function(s) s.Lev).FirstOrDefault(Function(s) s.Language.ShortLang = "en").ID + If tID > 0 Then + For Each fItem As ListViewItem In Me.lvSearchResults.Items + If Convert.ToInt32(fItem.SubItems(3).Text) = tID AndAlso fItem.SubItems(4).Text = Master.eSettings.TVDBLanguage Then + fItem.Selected = True + fItem.EnsureVisible() + Exit For + End If + Next + End If + End If + End If + End If + + If Me.lvSearchResults.SelectedItems.Count = 0 Then + Me.lvSearchResults.Items(0).Selected = True + End If + Me.lvSearchResults.Select() + End If + + Me.chkManual.Enabled = True + If Not Me.chkManual.Checked Then Me.lvSearchResults.Enabled = True + + Case Enums.TVScraperEventType.ShowDownloaded + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Select + End Sub + + Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSearch.GotFocus + Me.AcceptButton = Me.btnSearch + End Sub + + Private Sub txtTVDBID_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTVDBID.GotFocus + Me.AcceptButton = Me.btnVerify + End Sub + + Private Sub txtTVDBID_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTVDBID.KeyPress + e.Handled = StringUtils.NumericOnly(e.KeyChar, True) + End Sub + + Private Sub txtTVDBID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTVDBID.TextChanged + If String.IsNullOrEmpty(Me.txtTVDBID.Text) Then + Me.btnVerify.Enabled = False + Me.OK_Button.Enabled = False + Else + If Me.chkManual.Checked Then + Me.btnVerify.Enabled = True + Me.OK_Button.Enabled = False + End If + End If + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure Arguments + +#Region "Fields" + + Dim pURL As String + +#End Region 'Fields + + End Structure + + Private Structure Results + +#Region "Fields" + + Dim Result As Image + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVEpisodePoster.Designer.vb b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVEpisodePoster.Designer.vb new file mode 100644 index 0000000..a3ebbd8 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVEpisodePoster.Designer.vb @@ -0,0 +1,86 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class dlgTVEpisodePoster + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pbPoster = New System.Windows.Forms.PictureBox() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Location = New System.Drawing.Point(292, 287) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(362, 287) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pbPoster + ' + Me.pbPoster.BackColor = System.Drawing.Color.DimGray + Me.pbPoster.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pbPoster.Location = New System.Drawing.Point(6, 6) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(423, 276) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 2 + Me.pbPoster.TabStop = False + ' + 'dlgTVEpisodePoster + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(435, 315) + Me.ControlBox = False + Me.Controls.Add(Me.pbPoster) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgTVEpisodePoster" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Confirm Episode Poster" + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents pbPoster As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVEpisodePoster.resx b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVEpisodePoster.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVEpisodePoster.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVEpisodePoster.vb b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVEpisodePoster.vb new file mode 100644 index 0000000..60ed929 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVEpisodePoster.vb @@ -0,0 +1,48 @@ +Imports EmberAPI + +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Public Class dlgTVEpisodePoster + +#Region "Methods" + + Public Overloads Function ShowDialog(ByVal Poster As Image) As System.Windows.Forms.DialogResult + Me.pbPoster.Image = Poster + Return MyBase.ShowDialog + End Function + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub pbPoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbPoster.Click + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(Me.pbPoster.Image) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVImageSelect.Designer.vb b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVImageSelect.Designer.vb new file mode 100644 index 0000000..cf05d15 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVImageSelect.Designer.vb @@ -0,0 +1,213 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ + Partial Class dlgTVImageSelect + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgTVImageSelect)) + Me.tvList = New System.Windows.Forms.TreeView() + Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components) + Me.pnlImages = New System.Windows.Forms.Panel() + Me.pbCurrent = New System.Windows.Forms.PictureBox() + Me.pnlStatus = New System.Windows.Forms.Panel() + Me.lblStatus = New System.Windows.Forms.Label() + Me.pbStatus = New System.Windows.Forms.ProgressBar() + Me.btnOK = New System.Windows.Forms.Button() + Me.btnCancel = New System.Windows.Forms.Button() + Me.pbDelete = New System.Windows.Forms.PictureBox() + Me.pbUndo = New System.Windows.Forms.PictureBox() + Me.lblCurrentImage = New System.Windows.Forms.Label() + CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlStatus.SuspendLayout() + CType(Me.pbDelete, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbUndo, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'tvList + ' + Me.tvList.Enabled = False + Me.tvList.ImageIndex = 0 + Me.tvList.ImageList = Me.ImageList1 + Me.tvList.Location = New System.Drawing.Point(3, 4) + Me.tvList.Name = "tvList" + Me.tvList.SelectedImageIndex = 0 + Me.tvList.Size = New System.Drawing.Size(214, 262) + Me.tvList.TabIndex = 2 + Me.tvList.Visible = False + ' + 'ImageList1 + ' + Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent + Me.ImageList1.Images.SetKeyName(0, "new_page.png") + Me.ImageList1.Images.SetKeyName(1, "image.png") + Me.ImageList1.Images.SetKeyName(2, "artwork.png") + Me.ImageList1.Images.SetKeyName(3, "star_full.png") + ' + 'pnlImages + ' + Me.pnlImages.AutoScroll = True + Me.pnlImages.BackColor = System.Drawing.SystemColors.Control + Me.pnlImages.Location = New System.Drawing.Point(222, 4) + Me.pnlImages.Name = "pnlImages" + Me.pnlImages.Size = New System.Drawing.Size(622, 421) + Me.pnlImages.TabIndex = 3 + ' + 'pbCurrent + ' + Me.pbCurrent.BackColor = System.Drawing.SystemColors.Control + Me.pbCurrent.Location = New System.Drawing.Point(3, 293) + Me.pbCurrent.Name = "pbCurrent" + Me.pbCurrent.Size = New System.Drawing.Size(214, 157) + Me.pbCurrent.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbCurrent.TabIndex = 2 + Me.pbCurrent.TabStop = False + Me.pbCurrent.Visible = False + ' + 'pnlStatus + ' + Me.pnlStatus.BackColor = System.Drawing.Color.White + Me.pnlStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlStatus.Controls.Add(Me.lblStatus) + Me.pnlStatus.Controls.Add(Me.pbStatus) + Me.pnlStatus.Location = New System.Drawing.Point(264, 192) + Me.pnlStatus.Name = "pnlStatus" + Me.pnlStatus.Size = New System.Drawing.Size(321, 75) + Me.pnlStatus.TabIndex = 5 + ' + 'lblStatus + ' + Me.lblStatus.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblStatus.Location = New System.Drawing.Point(5, 10) + Me.lblStatus.Name = "lblStatus" + Me.lblStatus.Size = New System.Drawing.Size(310, 13) + Me.lblStatus.TabIndex = 0 + Me.lblStatus.Text = "Gathering Data..." + ' + 'pbStatus + ' + Me.pbStatus.Location = New System.Drawing.Point(6, 52) + Me.pbStatus.MarqueeAnimationSpeed = 25 + Me.pbStatus.Name = "pbStatus" + Me.pbStatus.Size = New System.Drawing.Size(309, 19) + Me.pbStatus.Step = 1 + Me.pbStatus.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.pbStatus.TabIndex = 1 + ' + 'btnOK + ' + Me.btnOK.Enabled = False + Me.btnOK.Location = New System.Drawing.Point(708, 431) + Me.btnOK.Name = "btnOK" + Me.btnOK.Size = New System.Drawing.Size(65, 22) + Me.btnOK.TabIndex = 0 + Me.btnOK.Text = "OK" + Me.btnOK.UseVisualStyleBackColor = True + ' + 'btnCancel + ' + Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.btnCancel.Location = New System.Drawing.Point(779, 431) + Me.btnCancel.Name = "btnCancel" + Me.btnCancel.Size = New System.Drawing.Size(65, 22) + Me.btnCancel.TabIndex = 1 + Me.btnCancel.Text = "Cancel" + Me.btnCancel.UseVisualStyleBackColor = True + ' + 'pbDelete + ' + Me.pbDelete.Image = CType(resources.GetObject("pbDelete.Image"), System.Drawing.Image) + Me.pbDelete.Location = New System.Drawing.Point(3, 293) + Me.pbDelete.Name = "pbDelete" + Me.pbDelete.Size = New System.Drawing.Size(16, 16) + Me.pbDelete.TabIndex = 13 + Me.pbDelete.TabStop = False + Me.pbDelete.Visible = False + ' + 'pbUndo + ' + Me.pbUndo.Image = CType(resources.GetObject("pbUndo.Image"), System.Drawing.Image) + Me.pbUndo.Location = New System.Drawing.Point(201, 293) + Me.pbUndo.Name = "pbUndo" + Me.pbUndo.Size = New System.Drawing.Size(16, 16) + Me.pbUndo.TabIndex = 14 + Me.pbUndo.TabStop = False + Me.pbUndo.Visible = False + ' + 'lblCurrentImage + ' + Me.lblCurrentImage.AutoSize = True + Me.lblCurrentImage.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblCurrentImage.Location = New System.Drawing.Point(0, 274) + Me.lblCurrentImage.Name = "lblCurrentImage" + Me.lblCurrentImage.Size = New System.Drawing.Size(100, 17) + Me.lblCurrentImage.TabIndex = 4 + Me.lblCurrentImage.Text = "Current Image:" + Me.lblCurrentImage.Visible = False + ' + 'dlgTVImageSelect + ' + Me.AcceptButton = Me.btnOK + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.btnCancel + Me.ClientSize = New System.Drawing.Size(849, 481) + Me.ControlBox = False + Me.Controls.Add(Me.lblCurrentImage) + Me.Controls.Add(Me.pbUndo) + Me.Controls.Add(Me.pbDelete) + Me.Controls.Add(Me.btnCancel) + Me.Controls.Add(Me.btnOK) + Me.Controls.Add(Me.pnlStatus) + Me.Controls.Add(Me.pbCurrent) + Me.Controls.Add(Me.pnlImages) + Me.Controls.Add(Me.tvList) + Me.DoubleBuffered = True + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.MinimumSize = New System.Drawing.Size(855, 491) + Me.Name = "dlgTVImageSelect" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "TV Image Selection" + CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlStatus.ResumeLayout(False) + CType(Me.pbDelete, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbUndo, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents tvList As System.Windows.Forms.TreeView + Friend WithEvents pnlImages As System.Windows.Forms.Panel + Friend WithEvents pbCurrent As System.Windows.Forms.PictureBox + Friend WithEvents pnlStatus As System.Windows.Forms.Panel + Friend WithEvents lblStatus As System.Windows.Forms.Label + Friend WithEvents pbStatus As System.Windows.Forms.ProgressBar + Friend WithEvents btnOK As System.Windows.Forms.Button + Friend WithEvents btnCancel As System.Windows.Forms.Button + Friend WithEvents pbDelete As System.Windows.Forms.PictureBox + Friend WithEvents pbUndo As System.Windows.Forms.PictureBox + Friend WithEvents ImageList1 As System.Windows.Forms.ImageList + Friend WithEvents lblCurrentImage As System.Windows.Forms.Label +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVImageSelect.resx b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVImageSelect.resx new file mode 100644 index 0000000..db85c76 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVImageSelect.resx @@ -0,0 +1,210 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="ImageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <data name="ImageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64"> + <value> + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAO + CwAAAk1TRnQBSQFMAgEBBAEAATABAAEwAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8AFgAC/wMA + Bf8DAAH/BAAL/wMAA/8BAAb/AQAD/wMABf8C9AX/AgAC/wHzAfAJvAHzAv8CAAL/AfQB8QH0AfIB8QH0 + AfEB8wL/AwAD/wH0Af8E9AH/AvQC/wMAAf8B8QEHB7wB8gH/AwAB/wG8AfEC8gXzAvIB8AH0AwAD/wGT + AfQB8AGTAQABkwH0Av8DAAL/AfQBUwGZBP8B8AFTAfAC/wQAAfEB8AfxAfIEAAH0AfAB8QHyB/MB8gHx + AfQGAAEaAvMBmQH/AZMIAAH/AXUBMgF1AfQB/wGaAjIB9AYAAvEI8gQAAfQB8AEJCLsBCQHxAfQFAAH/ + AZMBdAGZAXQBmQF0AfQIAAEaAjICUwIyAXUB/wYACfIB8wQAAfQBuwG5AbMGigGyAbkBuwH0BAAB8wGZ + BnQBkwHxAf8GAAH0BjIBGgcAAvIG8wHyAfMEAAH0AbsCuQGsAYoCrAGKAawBswG5AbsB9AQAAvEB8AG7 + AbUBBwEaAfIB8wHwAf8GAAH2AVMFMgEbBwAK8wQAAf8BuwO5AbIDrAGzArkBuwH0BAAB8gG8Aa4BbAFL + AUwBUgGZAfMB8QH/BQAB8wFTBzIBGgYACvMEAAH/AbsDuQGyAqwBsgO5AbsB9AQAAfEB/wEHAW4BUgIy + AY4B9AHyAf8DAAH/ARoKMgF6Af8EAArzBAAB/wEJAroBswGsArIBrAGzAroBuwH0BAAB8gH2AbsCggNM + AvMB/wMAAfQBMgFTAlkBUwMyA1kBMgEaBAAG8wP0AfMEAAH/AQkDugSyA7oBCQH0BAABGwH0AbsB9AGO + AbABkwF1AfQB8wH/BAAE/wEaAjIBegX/BAAF8wH0AfIC7wHyBAAB9AHwA7sBugKyAboDuwEJAfQEAAEb + Af8B8wH/Ab0B8gH0AbcB8wH0Af8IAAH0AjgBGgkABfMB9AEHAewB8AUAAfQB8AoJAfAB9AQAAfMC9AEb + AZkBkwEaAvQBGwH/CAAB/wF6ATgB/wkABfMB9AEHAbwGAAH/AfMBGQnyAfMB/wQABP8BmQF0AfQD/woA + ARoBWQH/CQAB/wX0AfMIAAH0CvMB9AkAAfMBGg4AAf8B9EcAAUIBTQE+BwABPgMAASgDAAFAAwABIAMA + AQEBAAEBBgABARYAA/+BAAL/AZwBHQHgAQMBiAERAcABAwIAAcABAwGAAQEBwAEDAYABAQHAAUMBgAEB + AeABBwGAAQEB+AEfAeABBwHgAQcBgAEBAfABDwHwAQcB4AEHAYABAQHgAQMB8AEPAeABBwGAAQEB4AED + AfABDwHgAQcBgAEBAeABAwHgAQcB4AEHAYABAQHgAQMBgAEBAeABBwGAAQEB4AEDAYABAQHgAQcBgAEB + AeABAwHAAQEB4AEHAYABAQHgAQMB/AE/AeABDwGAAQEB4AEDAfwBPwHgAR8BgAEBAeABBwH+AT8B4AE/ + AcABAwH+AX8B/gF/CP8L +</value> + </data> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="pbDelete.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAGHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3NPsx9OAAAB60lEQVQ4T2P4//8/AyUYRfN9B2Pfu3YGzbgMvGdnkHnP3qgQWR5uwC1X + s4grBqr/L2kp/L9upbsF3ZAbdgaNl3WV/1/WUfp/w96w9//BmYwgNWADrnpYcZ3WUf5/XFEajE+py/2/ + aIkw5LKtQeNpbSWgnBQYn9JU/H/eTNsUbsBOTi7GA4rSPQeUZf6DMVDRITW5/2csdVecszesOaqt+H8/ + UAwuryS9/4CsBDfcAJhzdyrL9O5Qkv6/E4h3KEj93wN0yT4txf/bFSQhYhC5/Us0FVlgejBiYCPQkA1A + hWAMtHU90CAYf6OS9N752iqsWAMRWXCFkvTxFcCwQMPvNpkawG3G6YIFitINCxWk/gDxf3S8QFFqI3rs + oHhhhqJ040ygRhieAWSDMKqY9Jb/T7/D9YEZE1TlGSYqSDVMlJf6D8MTQGwF6c2TFKS7wGxkrCC1ZZKK + HAc8FnrVFLg65SX/o+H9tfqqTCBFXQpSvR1o8l2K0mYo0dihJJvYBLSlSU7yP5De9y3AG6wZhpvlpbrB + ckDcoigz/bGzFViegZkBjAWAFG+cpGh9trTYFm4WZgMgXwcobgzCQDaIr5AiKTo3U1p8IZAtAsR8cBcA + FTEDMdhPYEEGBk4gnxcZA8V4kOTZQHowUiI52RoAvKofAJdcVi8AAAAASUVORK5CYII= +</value> + </data> + <data name="pbUndo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAFzUkdCAK7O + HOkAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAArpAAAK6QH9dc7TAAAAHHRFWHRTb2Z0d2FyZQBBZG9i + ZSBGaXJld29ya3MgQ1M0BrLToAAAAihJREFUOE9j+P//PwMlmCLNIIupZwATAwMjOxs7Q8XKkwzFG2+y + GnYd8XOZdprZedopBr9FVxiSNt5jqD3wjGHC6TcMvadegzGKCxgYGFhVdE0Y0ldcYVFt3LeYIWfrO9aS + XZzmU84weC+6ypBMhAEsPoU9nBJV+w4xpG/4z5C//SN/zf4ou1kXDIAGsKRvvsdQfxCPC7jFFIVFc9fu + ZEhb+58hZ9N/hoLt/xlL9/xnqT78X6Ln3D3bRbfaSvc+FZ927g3DpDMQjOIF1ohptxlSgJrTEQYwlOz+ + z1C+/z9D1eH/jM2n/6vOuf06dtsT64ydTxjSdjxBNYApdf1/huSVmAZUHPjPUHPkP0P9if8MLWf/K8y7 + 98lw0T1do0V3UQ0QsoqIZc/e/AXZCwyFuyAuABtw8j9D05n/LF2X/2ssfnTEeOkDVAPYmRgZtLJn2bFk + b/7BkLURFAa/NbuOdUi1HY8QbjsZKtN3Pkl20uUpHD2Xn/FNuf3fYNljF4xotPGLYohacsWOIXPDW4a8 + bW/lmw9yKXedYJDuOs2gO/0Sg/vyOwxZu56yGCy+Xy086/58dAMYxSRlGJq3XWOIWnhBS6hy93rB6r0c + YnX7GWQ6TzJoT7vE4Lz0NkPW7ucMkdufM1mufOJP3aQMMo2ZgYEZiEWBWBaYtKVYOPkNWMRUvYFscSCW + BYqLAzErcu5FyUxASUaQAiDmAGIuIAbLA2l2qBgbSA2yAQAKojORM6Lv5AAAAABJRU5ErkJggg== +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVImageSelect.vb b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVImageSelect.vb new file mode 100644 index 0000000..288414e --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/TVScraper/dlgTVImageSelect.vb @@ -0,0 +1,1224 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +'TODO: 1.5 - TV Show renaming (including "dump folder") +'TODO: 1.5 - Support VIDEO_TS/BDMV folders for TV Shows + +Imports System.IO +Imports System.Text.RegularExpressions +Imports EmberAPI + +Public Class dlgTVImageSelect + +#Region "Fields" + + Friend WithEvents bwDownloadFanart As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwLoadData As New System.ComponentModel.BackgroundWorker + Friend WithEvents bwLoadImages As New System.ComponentModel.BackgroundWorker + + Private DefaultImages As New Scraper.TVImages + Private FanartList As New List(Of Scraper.TVDBFanart) + Private GenericPosterList As New List(Of Scraper.TVDBPoster) + Private iCounter As Integer = 0 + Private iLeft As Integer = 5 + Private iTop As Integer = 5 + Private lblImage() As Label + Private pbImage() As PictureBox + Private pnlImage() As Panel + Private SeasonList As New List(Of Scraper.TVDBSeasonPoster) + Private SelIsPoster As Boolean = True + Private SelSeason As Integer = -999 + Private ShowPosterList As New List(Of Scraper.TVDBShowPoster) + Private _fanartchanged As Boolean = False + Private _id As Integer = -1 + Private _season As Integer = -999 + Private _type As Enums.TVImageType = Enums.TVImageType.All + Private _withcurrent As Boolean = True + Private _ScrapeType As Enums.ScrapeType + +#End Region 'Fields + +#Region "Methods" + + Public Function SetDefaults() As Boolean + Dim iSeason As Integer = -1 + Dim iEpisode As Integer = -1 + Dim iProgress As Integer = 3 + + Dim tSea As Scraper.TVDBSeasonPoster + + Try + Me.bwLoadImages.ReportProgress(Scraper.TVDBImages.SeasonImageList.Count + Scraper.tmpTVDBShow.Episodes.Count + 3, "defaults") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster) AndAlso IsNothing(Scraper.TVDBImages.ShowPoster.Image.Image) Then + If Master.eSettings.IsShowBanner Then + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredShowBannerType AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If Master.eSettings.OnlyGetTVImagesForSelectedLanguage Then + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + End If + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredShowBannerType) + + 'no preferred size, just get any one of them + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.ShowPoster.Image = tSP.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSP.URL + Else + 'still nothing? try to get from generic posters + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) p.Language = Master.eSettings.TVDBLanguage AndAlso Not IsNothing(p.Image.Image)) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.ShowPoster.Image = tSPg.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSPg.URL + End If + End If + Else + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredShowPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If Master.eSettings.OnlyGetTVImagesForSelectedLanguage Then + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + End If + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredShowPosterSize) + + 'no preferred size, just get any one of them + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.ShowPoster.Image = tSPg.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSPg.URL + Else + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.ShowPoster.Image = tSP.Image + Scraper.TVDBImages.ShowPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.ShowPoster.URL = tSP.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(1, "progress") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart) AndAlso IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Dim tSF As Scraper.TVDBFanart = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image) AndAlso Me.GetFanartDims(f.Size) = Master.eSettings.PreferredShowFanartSize AndAlso f.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSF) Then tSF = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image) AndAlso Me.GetFanartDims(f.Size) = Master.eSettings.PreferredShowFanartSize) + + 'no fanart of the preferred size, just get the first available + If IsNothing(tSF) Then tSF = FanartList.FirstOrDefault(Function(f) Not IsNothing(f.Image.Image)) + + If Not IsNothing(tSF) Then + If Not String.IsNullOrEmpty(tSF.LocalFile) AndAlso File.Exists(tSF.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(tSF.LocalFile) + Scraper.TVDBImages.ShowFanart.LocalFile = tSF.LocalFile + Scraper.TVDBImages.ShowFanart.URL = tSF.URL + ElseIf Not String.IsNullOrEmpty(tSF.LocalFile) AndAlso Not String.IsNullOrEmpty(tSF.URL) Then + Scraper.TVDBImages.ShowFanart.Image.FromWeb(tSF.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(tSF.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(tSF.LocalFile, , , False) + Scraper.TVDBImages.ShowFanart.LocalFile = tSF.LocalFile + Scraper.TVDBImages.ShowFanart.URL = tSF.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(2, "progress") + + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.AllSeasonPoster) AndAlso Master.eSettings.AllSeasonPosterEnabled AndAlso IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + If Master.eSettings.IsAllSBanner Then + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredAllSBannerType AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Type = Master.eSettings.PreferredAllSBannerType) + + 'no preferred size, just get any one of them + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSP.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSP.URL + Else + 'still nothing? try to get from generic posters + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSPg.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSPg.URL + End If + End If + Else + Dim tSPg As Scraper.TVDBPoster = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredAllSPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso Me.GetPosterDims(p.Size) = Master.eSettings.PreferredAllSPosterSize) + + 'no preferred size, just get any one of them + If IsNothing(tSPg) Then tSPg = GenericPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSPg) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSPg.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSPg.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSPg.URL + Else + Dim tSP As Scraper.TVDBShowPoster = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Language = Master.eSettings.TVDBLanguage) + + If IsNothing(tSP) Then tSP = ShowPosterList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image)) + + If Not IsNothing(tSP) Then + Scraper.TVDBImages.AllSeasonPoster.Image = tSP.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = tSP.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = tSP.URL + End If + End If + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(3, "progress") + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.SeasonFanart Then + For Each cSeason As Scraper.TVDBSeasonImage In Scraper.TVDBImages.SeasonImageList + Try + iSeason = cSeason.Season + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster) AndAlso IsNothing(cSeason.Poster.Image) Then + tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason AndAlso p.Type = Master.eSettings.PreferredSeasonPosterSize AndAlso p.Language = Master.eSettings.TVDBLanguage) + If IsNothing(tSea) Then tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason AndAlso p.Type = Master.eSettings.PreferredSeasonPosterSize) + If IsNothing(tSea) Then tSea = SeasonList.FirstOrDefault(Function(p) Not IsNothing(p.Image.Image) AndAlso p.Season = iSeason) + If Not IsNothing(tSea) Then cSeason.Poster = tSea.Image + End If + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonFanart) AndAlso Master.eSettings.SeasonFanartEnabled AndAlso IsNothing(cSeason.Fanart.Image.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then cSeason.Fanart.Image = Scraper.TVDBImages.ShowFanart.Image + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All Then + For Each Episode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + If Not String.IsNullOrEmpty(Episode.TVEp.LocalFile) Then + Episode.TVEp.Poster.FromFile(Episode.TVEp.LocalFile) + ElseIf Not String.IsNullOrEmpty(Episode.EpPosterPath) Then + Episode.TVEp.Poster.FromFile(Episode.EpPosterPath) + End If + + If Master.eSettings.EpisodeFanartEnabled Then + If Not String.IsNullOrEmpty(Episode.EpFanartPath) Then + Episode.TVEp.Fanart.FromFile(Episode.EpFanartPath) + ElseIf Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Episode.TVEp.Fanart = Scraper.TVDBImages.ShowFanart.Image + End If + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + DefaultImages = Scraper.TVDBImages.Clone + + Return False + End Function + + Public Overloads Function ShowDialog(ByVal ShowID As Integer, ByVal Type As Enums.TVImageType, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As System.Windows.Forms.DialogResult + Me._id = ShowID + Me._type = Type + Me._withcurrent = WithCurrent + Me._ScrapeType = ScrapeType + Return MyBase.ShowDialog + End Function + + Public Overloads Function ShowDialog(ByVal ShowID As Integer, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal CurrentImage As Images) As Images + Me._id = ShowID + Me._type = Type + Me._season = Season + Me.pbCurrent.Image = CurrentImage.Image + Me.pbCurrent.Tag = CurrentImage + + If MyBase.ShowDialog = Windows.Forms.DialogResult.OK Then + Return CType(Me.pbCurrent.Tag, Images) + Else + Return Nothing + End If + End Function + + Private Sub AddImage(ByVal sDescription As String, ByVal iIndex As Integer, ByVal fTag As ImageTag) + Try + ReDim Preserve Me.pnlImage(iIndex) + ReDim Preserve Me.pbImage(iIndex) + ReDim Preserve Me.lblImage(iIndex) + Me.pnlImage(iIndex) = New Panel() + Me.pbImage(iIndex) = New PictureBox() + Me.lblImage(iIndex) = New Label() + Me.pbImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Name = iIndex.ToString + Me.lblImage(iIndex).Name = iIndex.ToString + Me.pnlImage(iIndex).Size = New Size(187, 187) + Me.pbImage(iIndex).Size = New Size(181, 151) + Me.lblImage(iIndex).Size = New Size(181, 30) + Me.pnlImage(iIndex).BackColor = Color.White + Me.pnlImage(iIndex).BorderStyle = BorderStyle.FixedSingle + Me.pbImage(iIndex).SizeMode = PictureBoxSizeMode.Zoom + Me.lblImage(iIndex).AutoSize = False + Me.lblImage(iIndex).BackColor = Color.White + Me.lblImage(iIndex).TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblImage(iIndex).Text = sDescription + Me.pbImage(iIndex).Image = fTag.ImageObj.Image + Me.pnlImage(iIndex).Left = iLeft + Me.pbImage(iIndex).Left = 3 + Me.lblImage(iIndex).Left = 0 + Me.pnlImage(iIndex).Top = iTop + Me.pbImage(iIndex).Top = 3 + Me.lblImage(iIndex).Top = 151 + Me.pnlImage(iIndex).Tag = fTag + Me.pbImage(iIndex).Tag = fTag + Me.lblImage(iIndex).Tag = fTag + Me.pnlImages.Controls.Add(Me.pnlImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.pbImage(iIndex)) + Me.pnlImage(iIndex).Controls.Add(Me.lblImage(iIndex)) + Me.pnlImage(iIndex).BringToFront() + AddHandler pbImage(iIndex).Click, AddressOf pbImage_Click + AddHandler pbImage(iIndex).DoubleClick, AddressOf pbImage_DoubleClick + AddHandler pnlImage(iIndex).Click, AddressOf pnlImage_Click + AddHandler lblImage(iIndex).Click, AddressOf lblImage_Click + + AddHandler pbImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler pnlImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + AddHandler lblImage(iIndex).MouseWheel, AddressOf MouseWheelEvent + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.iCounter += 1 + + If Me.iCounter = 3 Then + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop += 192 + Else + Me.iLeft += 192 + End If + End Sub + + Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click + If Me.bwLoadData.IsBusy Then Me.bwLoadData.CancelAsync() + If Me.bwLoadImages.IsBusy Then Me.bwLoadImages.CancelAsync() + + While Me.bwLoadData.IsBusy OrElse Me.bwLoadImages.IsBusy + Application.DoEvents() + Threading.Thread.Sleep(50) + End While + + Me.DialogResult = Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click + DoneAndClose() + End Sub + + Private Sub DoneAndClose() + If Me._type = Enums.TVImageType.All Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + Master.currShow.ShowPosterPath = Scraper.TVDBImages.ShowPoster.LocalFile + If Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.TVDBImages.ShowFanart.LocalFile) + Master.currShow.ShowFanartPath = Scraper.TVDBImages.ShowFanart.LocalFile + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.Clear() + Scraper.TVDBImages.ShowFanart.Image.FromWeb(Scraper.TVDBImages.ShowFanart.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.ShowFanart.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile, , , False) + Master.currShow.ShowFanartPath = Scraper.TVDBImages.ShowFanart.LocalFile + End If + End If + If Master.eSettings.AllSeasonPosterEnabled AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + Master.currShow.SeasonPosterPath = Scraper.TVDBImages.AllSeasonPoster.LocalFile + End If + ElseIf Me._type = Enums.TVImageType.SeasonFanart AndAlso Me._fanartchanged Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + If Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromFile(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) + Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile) Then + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Clear() + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.FromWeb(Scraper.TVDBImages.SeasonImageList(0).Fanart.URL) + If Not IsNothing(Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile).FullName) + Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Save(Scraper.TVDBImages.SeasonImageList(0).Fanart.LocalFile, , , False) + Me.pbCurrent.Image = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.SeasonImageList(0).Fanart.Image + End If + End If + ElseIf (Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart) AndAlso Me._fanartchanged Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + If Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) AndAlso File.Exists(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.TVDBImages.ShowFanart.LocalFile) + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + ElseIf Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.URL) AndAlso Not String.IsNullOrEmpty(Scraper.TVDBImages.ShowFanart.LocalFile) Then + Scraper.TVDBImages.ShowFanart.Image.Clear() + Scraper.TVDBImages.ShowFanart.Image.FromWeb(Scraper.TVDBImages.ShowFanart.URL) + If Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Scraper.TVDBImages.ShowFanart.LocalFile).FullName) + Scraper.TVDBImages.ShowFanart.Image.Save(Scraper.TVDBImages.ShowFanart.LocalFile, , , False) + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + End If + End If + End If + + Me.DialogResult = Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + + Private Sub bwLoadData_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwLoadData.DoWork + Dim cSI As Scraper.TVDBSeasonImage + Dim iProgress As Integer = 1 + Dim iSeason As Integer = -1 + + Me.bwLoadData.ReportProgress(Scraper.tmpTVDBShow.Episodes.Count, "current") + + 'initialize the struct + Scraper.TVDBImages.ShowPoster = New Scraper.TVDBShowPoster + Scraper.TVDBImages.ShowFanart = New Scraper.TVDBFanart + Scraper.TVDBImages.AllSeasonPoster = New Scraper.TVDBShowPoster + Scraper.TVDBImages.SeasonImageList = New List(Of Scraper.TVDBSeasonImage) + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + Select Case Me._type + Case Enums.TVImageType.AllSeasonPoster + Scraper.TVDBImages.AllSeasonPoster.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.SeasonFanart + cSI = New Scraper.TVDBSeasonImage + cSI.Season = Me._season + cSI.Fanart.Image = CType(Me.pbCurrent.Tag, Images) + Scraper.TVDBImages.SeasonImageList.Add(cSI) + Case Enums.TVImageType.SeasonPoster + cSI = New Scraper.TVDBSeasonImage + cSI.Season = Me._season + cSI.Poster = CType(Me.pbCurrent.Tag, Images) + Scraper.TVDBImages.SeasonImageList.Add(cSI) + Case Enums.TVImageType.ShowFanart, Enums.TVImageType.EpisodeFanart + Scraper.TVDBImages.ShowFanart.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.ShowPoster + Scraper.TVDBImages.ShowPoster.Image = CType(Me.pbCurrent.Tag, Images) + Case Enums.TVImageType.All + + If _withcurrent Then + If Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.Show.ShowPosterPath) Then + Scraper.TVDBImages.ShowPoster.Image.FromFile(Scraper.tmpTVDBShow.Show.ShowPosterPath) + Scraper.TVDBImages.ShowPoster.LocalFile = Scraper.tmpTVDBShow.Show.ShowPosterPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.Show.ShowFanartPath) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(Scraper.tmpTVDBShow.Show.ShowFanartPath) + Scraper.TVDBImages.ShowFanart.LocalFile = Scraper.tmpTVDBShow.Show.ShowFanartPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Master.eSettings.AllSeasonPosterEnabled AndAlso Not String.IsNullOrEmpty(Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath) Then + Scraper.TVDBImages.AllSeasonPoster.Image.FromFile(Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath) + Scraper.TVDBImages.AllSeasonPoster.LocalFile = Scraper.tmpTVDBShow.AllSeason.SeasonPosterPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + For Each sEpisode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + iSeason = sEpisode.TVEp.Season + If iSeason > -1 Then + If IsNothing(Scraper.TVDBImages.ShowPoster.Image) AndAlso Not String.IsNullOrEmpty(sEpisode.ShowPosterPath) Then + Scraper.TVDBImages.ShowPoster.Image.FromFile(sEpisode.ShowPosterPath) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Master.eSettings.EpisodeFanartEnabled AndAlso IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) AndAlso Not String.IsNullOrEmpty(sEpisode.ShowFanartPath) Then + Scraper.TVDBImages.ShowFanart.Image.FromFile(sEpisode.ShowFanartPath) + Scraper.TVDBImages.ShowFanart.LocalFile = sEpisode.ShowFanartPath + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + If Scraper.TVDBImages.SeasonImageList.Where(Function(s) s.Season = iSeason).Count = 0 Then + cSI = New Scraper.TVDBSeasonImage + cSI.Season = iSeason + If Not String.IsNullOrEmpty(sEpisode.SeasonPosterPath) Then + cSI.Poster.FromFile(sEpisode.SeasonPosterPath) + End If + If Master.eSettings.SeasonFanartEnabled AndAlso Not String.IsNullOrEmpty(sEpisode.SeasonFanartPath) Then + cSI.Fanart.Image.FromFile(sEpisode.SeasonFanartPath) + cSI.Fanart.LocalFile = sEpisode.SeasonFanartPath + End If + Scraper.TVDBImages.SeasonImageList.Add(cSI) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + End If + Me.bwLoadData.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + Else + For Each sEpisode As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + iSeason = sEpisode.TVEp.Season + + If Scraper.TVDBImages.SeasonImageList.Where(Function(s) s.Season = iSeason).Count = 0 Then + cSI = New Scraper.TVDBSeasonImage + cSI.Season = iSeason + Scraper.TVDBImages.SeasonImageList.Add(cSI) + End If + + If Me.bwLoadData.CancellationPending Then + e.Cancel = True + Return + End If + + Me.bwLoadData.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + End Select + End Sub + + Private Sub bwLoadData_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwLoadData.ProgressChanged + Try + If e.UserState.ToString = "progress" Then + Me.pbStatus.Value = e.ProgressPercentage + ElseIf e.UserState.ToString = "current" Then + Me.lblStatus.Text = Master.eLang.GetString(88, "Loading Current Images...") + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + Else + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwLoadData_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwLoadData.RunWorkerCompleted + If Not e.Cancelled Then + Me.GenerateList() + + Me.lblStatus.Text = Master.eLang.GetString(89, "(Down)Loading New Images...") + Me.bwLoadImages.WorkerReportsProgress = True + Me.bwLoadImages.WorkerSupportsCancellation = True + Me.bwLoadImages.RunWorkerAsync() + End If + End Sub + + Private Sub bwLoadImages_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bwLoadImages.DoWork + e.Cancel = Me.DownloadAllImages() + End Sub + + Private Sub bwLoadImages_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bwLoadImages.ProgressChanged + Try + If e.UserState.ToString = "progress" Then + Me.pbStatus.Value = e.ProgressPercentage + ElseIf e.UserState.ToString = "defaults" Then + Me.lblStatus.Text = Master.eLang.GetString(90, "Setting Defaults...") + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + Else + Me.pbStatus.Value = 0 + Me.pbStatus.Maximum = e.ProgressPercentage + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub bwLoadImages_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bwLoadImages.RunWorkerCompleted + Me.pnlStatus.Visible = False + If _ScrapeType = Enums.ScrapeType.FullAuto Then + DoneAndClose() + Else + If Not e.Cancelled Then + Me.tvList.Enabled = True + Me.tvList.Visible = True + Me.tvList.SelectedNode = Me.tvList.Nodes(0) + Me.tvList.Focus() + + Me.btnOK.Enabled = True + End If + + Me.pbCurrent.Visible = True + Me.lblCurrentImage.Visible = True + End If + End Sub + + Private Sub CheckCurrentImage() + Me.pbDelete.Visible = Not IsNothing(Me.pbCurrent.Image) AndAlso Me.pbCurrent.Visible + Me.pbUndo.Visible = Me.pbCurrent.Visible + End Sub + + Private Sub ClearImages() + Try + Me.iCounter = 0 + Me.iLeft = 5 + Me.iTop = 5 + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Tag = Nothing + + If Me.pnlImages.Controls.Count > 0 Then + For i As Integer = UBound(Me.pnlImage) To 0 Step -1 + If Not IsNothing(Me.pnlImage(i)) Then + If Not IsNothing(Me.lblImage(i)) AndAlso Me.pnlImage(i).Contains(Me.lblImage(i)) Then Me.pnlImage(i).Controls.Remove(Me.lblImage(i)) + If Not IsNothing(Me.pbImage(i)) AndAlso Me.pnlImage(i).Contains(Me.pbImage(i)) Then Me.pnlImage(i).Controls.Remove(Me.pbImage(i)) + If Me.pnlImages.Contains(Me.pnlImage(i)) Then Me.pnlImages.Controls.Remove(Me.pnlImage(i)) + End If + Next + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub dlgTVImageSelect_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + AddHandler pnlImages.MouseWheel, AddressOf MouseWheelEvent + AddHandler MyBase.MouseWheel, AddressOf MouseWheelEvent + AddHandler tvList.MouseWheel, AddressOf MouseWheelEvent + + Functions.PNLDoubleBuffer(Me.pnlImages) + + Me.SetUp() + End Sub + + Private Sub dlgTVImageSelect_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.bwLoadData.WorkerReportsProgress = True + Me.bwLoadData.WorkerSupportsCancellation = True + Me.bwLoadData.RunWorkerAsync() + End Sub + + Private Sub DoSelect(ByVal iIndex As Integer, ByVal SelTag As ImageTag) + Try + For i As Integer = 0 To UBound(Me.pnlImage) + Me.pnlImage(i).BackColor = Color.White + Me.lblImage(i).BackColor = Color.White + Me.lblImage(i).ForeColor = Color.Black + Next + + Me.pnlImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).BackColor = Color.Blue + Me.lblImage(iIndex).ForeColor = Color.White + + SetImage(SelTag) + + Me.CheckCurrentImage() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function DownloadAllImages() As Boolean + Dim iProgress As Integer = 1 + + Try + Me.bwLoadImages.ReportProgress(Scraper.tmpTVDBShow.Episodes.Count + Scraper.tmpTVDBShow.SeasonPosters.Count + Scraper.tmpTVDBShow.ShowPosters.Count + Scraper.tmpTVDBShow.Fanart.Count + Scraper.tmpTVDBShow.Posters.Count, "max") + + If Me._type = Enums.TVImageType.All Then + For Each Epi As Structures.DBTV In Scraper.tmpTVDBShow.Episodes + Try + If Not File.Exists(Epi.TVEp.LocalFile) Then + If Not String.IsNullOrEmpty(Epi.TVEp.PosterURL) Then + Epi.TVEp.Poster.FromWeb(Epi.TVEp.PosterURL) + If Not IsNothing(Epi.TVEp.Poster.Image) Then + Directory.CreateDirectory(Directory.GetParent(Epi.TVEp.LocalFile).FullName) + Epi.TVEp.Poster.Save(Epi.TVEp.LocalFile) + End If + End If + Else + Epi.TVEp.Poster.FromFile(Epi.TVEp.LocalFile) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each Seas As Scraper.TVDBSeasonPoster In Scraper.tmpTVDBShow.SeasonPosters + Try + If Not File.Exists(Seas.LocalFile) Then + If Not String.IsNullOrEmpty(Seas.URL) Then + Seas.Image.FromWeb(Seas.URL) + If Not IsNothing(Seas.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Seas.LocalFile).FullName) + Seas.Image.Save(Seas.LocalFile, , , False) + SeasonList.Add(Seas) + End If + End If + Else + Seas.Image.FromFile(Seas.LocalFile) + SeasonList.Add(Seas) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each SPost As Scraper.TVDBShowPoster In Scraper.tmpTVDBShow.ShowPosters + Try + If Not File.Exists(SPost.LocalFile) Then + If Not String.IsNullOrEmpty(SPost.URL) Then + SPost.Image.FromWeb(SPost.URL) + If Not IsNothing(SPost.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(SPost.LocalFile).FullName) + SPost.Image.Save(SPost.LocalFile, , , False) + ShowPosterList.Add(SPost) + End If + End If + Else + SPost.Image.FromFile(SPost.LocalFile) + ShowPosterList.Add(SPost) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.SeasonFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart Then + For Each SFan As Scraper.TVDBFanart In Scraper.tmpTVDBShow.Fanart + Try + If Not File.Exists(SFan.LocalThumb) Then + If Not String.IsNullOrEmpty(SFan.ThumbnailURL) Then + SFan.Image.FromWeb(SFan.ThumbnailURL) + If Not IsNothing(SFan.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(SFan.LocalThumb).FullName) + SFan.Image.Save(SFan.LocalThumb, , , False) + FanartList.Add(SFan) + End If + End If + Else + SFan.Image.FromFile(SFan.LocalThumb) + FanartList.Add(SFan) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster OrElse _ + Me._type = Enums.TVImageType.SeasonPoster OrElse Me._type = Enums.TVImageType.AllSeasonPoster Then + For Each Post As Scraper.TVDBPoster In Scraper.tmpTVDBShow.Posters + Try + If Not File.Exists(Post.LocalFile) Then + If Not String.IsNullOrEmpty(Post.URL) Then + Post.Image.FromWeb(Post.URL) + If Not IsNothing(Post.Image.Image) Then + Directory.CreateDirectory(Directory.GetParent(Post.LocalFile).FullName) + Post.Image.Save(Post.LocalFile, , , False) + GenericPosterList.Add(Post) + End If + End If + Else + Post.Image.FromFile(Post.LocalFile) + GenericPosterList.Add(Post) + End If + + If Me.bwLoadImages.CancellationPending Then + Return True + End If + + Me.bwLoadImages.ReportProgress(iProgress, "progress") + iProgress += 1 + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return Me.SetDefaults() + End Function + + Private Function DownloadFanart(ByVal iTag As ImageTag) As Image + Dim sHTTP As New HTTP + + Using tImage As New Images + If Not String.IsNullOrEmpty(iTag.Path) AndAlso File.Exists(iTag.Path) Then + tImage.FromFile(iTag.Path) + ElseIf Not String.IsNullOrEmpty(iTag.Path) AndAlso Not String.IsNullOrEmpty(iTag.URL) Then + Me.lblStatus.Text = Master.eLang.GetString(87, "Downloading Fullsize Fanart Image...") + Me.pbStatus.Style = ProgressBarStyle.Marquee + Me.pnlStatus.Visible = True + + Application.DoEvents() + + tImage.FromWeb(iTag.URL) + If Not IsNothing(tImage.Image) Then + Directory.CreateDirectory(Directory.GetParent(iTag.Path).FullName) + tImage.Save(iTag.Path, , , False) + End If + + sHTTP = Nothing + + Me.pnlStatus.Visible = False + End If + + Return tImage.Image + End Using + End Function + + Private Sub GenerateList() + Try + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowPoster Then Me.tvList.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(91, "Show Poster"), .Tag = "showp", .ImageIndex = 0, .SelectedImageIndex = 0}) + If Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.ShowFanart OrElse Me._type = Enums.TVImageType.EpisodeFanart Then Me.tvList.Nodes.Add(New TreeNode With {.Text = If(Me._type = Enums.TVImageType.EpisodeFanart, Master.eLang.GetString(92, "Episode Fanart"), Master.eLang.GetString(93, "Show Fanart")), .Tag = "showf", .ImageIndex = 1, .SelectedImageIndex = 1}) + If (Me._type = Enums.TVImageType.All OrElse Me._type = Enums.TVImageType.AllSeasonPoster) AndAlso Master.eSettings.AllSeasonPosterEnabled Then Me.tvList.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(94, "All Seasons Poster"), .Tag = "allp", .ImageIndex = 2, .SelectedImageIndex = 2}) + + Dim TnS As TreeNode + If Me._type = Enums.TVImageType.All Then + For Each cSeason As Scraper.TVDBSeasonImage In Scraper.TVDBImages.SeasonImageList.OrderBy(Function(s) s.Season) + Try + TnS = New TreeNode(String.Format(Master.eLang.GetString(726, "Season {0}", True), cSeason.Season), 3, 3) + TnS.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(95, "Season Posters"), .Tag = String.Concat("p", cSeason.Season.ToString), .ImageIndex = 0, .SelectedImageIndex = 0}) + If Master.eSettings.SeasonFanartEnabled Then TnS.Nodes.Add(New TreeNode With {.Text = Master.eLang.GetString(96, "Season Fanart"), .Tag = String.Concat("f", cSeason.Season.ToString), .ImageIndex = 1, .SelectedImageIndex = 1}) + Me.tvList.Nodes.Add(TnS) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Next + ElseIf Me._type = Enums.TVImageType.SeasonPoster Then + Me.tvList.Nodes.Add(New TreeNode With {.Text = String.Format(Master.eLang.GetString(97, "Season {0} Posters"), Me._season), .Tag = String.Concat("p", Me._season)}) + ElseIf Me._type = Enums.TVImageType.SeasonFanart Then + If Master.eSettings.SeasonFanartEnabled Then Me.tvList.Nodes.Add(New TreeNode With {.Text = String.Format(Master.eLang.GetString(99, "Season {0} Fanart"), Me._season), .Tag = String.Concat("f", Me._season)}) + End If + + Me.tvList.ExpandAll() + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Function GetFanartDims(ByVal fSize As Size) As Enums.FanartSize + Try + If (fSize.Width > 1000 AndAlso fSize.Height > 750) OrElse (fSize.Height > 1000 AndAlso fSize.Width > 750) Then + Return Enums.FanartSize.Lrg + ElseIf (fSize.Width > 700 AndAlso fSize.Height > 400) OrElse (fSize.Height > 700 AndAlso fSize.Width > 400) Then + Return Enums.FanartSize.Mid + Else + Return Enums.FanartSize.Small + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Function + + Private Function GetPosterDims(ByVal pSize As Size) As Enums.PosterSize + Try + If (pSize.Width > pSize.Height) AndAlso (pSize.Width > (pSize.Height * 2)) AndAlso (pSize.Width > 300) Then + 'at least twice as wide than tall... consider it wide (also make sure it's big enough) + Return Enums.PosterSize.Wide + ElseIf (pSize.Height > 1000 AndAlso pSize.Width > 750) OrElse (pSize.Width > 1000 AndAlso pSize.Height > 750) Then + Return Enums.PosterSize.Xlrg + ElseIf (pSize.Height > 700 AndAlso pSize.Width > 500) OrElse (pSize.Width > 700 AndAlso pSize.Height > 500) Then + Return Enums.PosterSize.Lrg + ElseIf (pSize.Height > 250 AndAlso pSize.Width > 150) OrElse (pSize.Width > 250 AndAlso pSize.Height > 150) Then + Return Enums.PosterSize.Mid + Else + Return Enums.PosterSize.Small + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Function + + Private Sub lblImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Dim iindex As Integer = Convert.ToInt32(DirectCast(sender, Label).Name) + Me.DoSelect(iindex, DirectCast(DirectCast(sender, Label).Tag, ImageTag)) + End Sub + + Private Sub MouseWheelEvent(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) + If e.Delta < 0 Then + If (pnlImages.VerticalScroll.Value + 50) <= pnlImages.VerticalScroll.Maximum Then + pnlImages.VerticalScroll.Value += 50 + Else + pnlImages.VerticalScroll.Value = pnlImages.VerticalScroll.Maximum + End If + Else + If (pnlImages.VerticalScroll.Value - 50) >= pnlImages.VerticalScroll.Minimum Then + pnlImages.VerticalScroll.Value -= 50 + Else + pnlImages.VerticalScroll.Value = pnlImages.VerticalScroll.Minimum + End If + End If + End Sub + + Private Sub pbDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbDelete.Click + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Tag = Nothing + Me.SetImage(New ImageTag) + End Sub + + Private Sub pbImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Me.DoSelect(Convert.ToInt32(DirectCast(sender, PictureBox).Name), DirectCast(DirectCast(sender, PictureBox).Tag, ImageTag)) + End Sub + + Private Sub pbImage_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) + Dim tImage As Image = Nothing + Dim iTag As ImageTag = DirectCast(DirectCast(sender, PictureBox).Tag, ImageTag) + If Not IsNothing(iTag) OrElse Not iTag.isFanart Then + tImage = DownloadFanart(iTag) + Else + tImage = DirectCast(sender, PictureBox).Image + End If + + ModulesManager.Instance.RuntimeObjects.InvokeOpenImageViewer(tImage) + End Sub + + Private Sub pbUndo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbUndo.Click + If Me.SelSeason = -999 Then + If Me.SelIsPoster Then + Scraper.TVDBImages.ShowPoster.Image = DefaultImages.ShowPoster.Image + Scraper.TVDBImages.ShowPoster.LocalFile = DefaultImages.ShowPoster.LocalFile + Scraper.TVDBImages.ShowPoster.URL = DefaultImages.ShowPoster.URL + Me.pbCurrent.Image = Scraper.TVDBImages.ShowPoster.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowPoster.Image + Else + Scraper.TVDBImages.ShowFanart.Image = DefaultImages.ShowFanart.Image + Scraper.TVDBImages.ShowFanart.LocalFile = DefaultImages.ShowFanart.LocalFile + Scraper.TVDBImages.ShowFanart.URL = DefaultImages.ShowFanart.URL + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.ShowFanart.Image + End If + ElseIf Me.SelSeason = 999 Then + Scraper.TVDBImages.AllSeasonPoster.Image = DefaultImages.AllSeasonPoster.Image + Scraper.TVDBImages.AllSeasonPoster.LocalFile = DefaultImages.AllSeasonPoster.LocalFile + Scraper.TVDBImages.AllSeasonPoster.URL = DefaultImages.AllSeasonPoster.URL + Me.pbCurrent.Image = Scraper.TVDBImages.AllSeasonPoster.Image.Image + Me.pbCurrent.Tag = Scraper.TVDBImages.AllSeasonPoster.Image + Else + If Me.SelIsPoster Then + Dim dSPost As Images = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster + Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster = dSPost + Me.pbCurrent.Image = dSPost.Image + Me.pbCurrent.Tag = dSPost + Else + Dim dSFan As Scraper.TVDBFanart = DefaultImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + Dim tSFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + tSFan.Image = dSFan.Image + tSFan.LocalFile = dSFan.LocalFile + tSFan.URL = dSFan.URL + Me.pbCurrent.Image = dSFan.Image.Image + Me.pbCurrent.Tag = dSFan.Image + End If + End If + End Sub + + Private Sub pnlImage_Click(ByVal sender As Object, ByVal e As System.EventArgs) + Dim iIndex As Integer = Convert.ToInt32(DirectCast(sender, Panel).Name) + Me.DoSelect(iIndex, DirectCast(DirectCast(sender, Panel).Tag, ImageTag)) + End Sub + + Private Sub SetImage(ByVal SelTag As ImageTag) + Me.pbCurrent.Image = SelTag.ImageObj.Image + Me.pbCurrent.Tag = SelTag.ImageObj + + Me._fanartchanged = True + + If Me.SelSeason = -999 Then + If Me.SelIsPoster Then + Scraper.TVDBImages.ShowPoster.Image = SelTag.ImageObj + Scraper.TVDBImages.ShowPoster.LocalFile = SelTag.Path + Scraper.TVDBImages.ShowPoster.URL = SelTag.URL + Else + Scraper.TVDBImages.ShowFanart.Image = SelTag.ImageObj + Scraper.TVDBImages.ShowFanart.LocalFile = SelTag.Path + Scraper.TVDBImages.ShowFanart.URL = SelTag.URL + End If + ElseIf Me.SelSeason = 999 Then + Scraper.TVDBImages.AllSeasonPoster.Image = SelTag.ImageObj + Scraper.TVDBImages.AllSeasonPoster.LocalFile = SelTag.Path + Scraper.TVDBImages.AllSeasonPoster.URL = SelTag.URL + Else + If Me.SelIsPoster Then + Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Poster = SelTag.ImageObj + Else + Dim tFan As Scraper.TVDBFanart = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(s) s.Season = Me.SelSeason).Fanart + If Not IsNothing(tFan) Then + tFan.Image = SelTag.ImageObj + tFan.LocalFile = SelTag.Path + tFan.URL = SelTag.URL + End If + End If + End If + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(99, "TV Image Selection") + Me.btnOK.Text = Master.eLang.GetString(179, "OK", True) + Me.btnCancel.Text = Master.eLang.GetString(167, "Cancel", True) + Me.lblCurrentImage.Text = Master.eLang.GetString(100, "Current Image:") + End Sub + + Private Sub tvList_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvList.AfterSelect + Dim iCount As Integer = 0 + + Try + ClearImages() + If Not IsNothing(e.Node.Tag) AndAlso Not String.IsNullOrEmpty(e.Node.Tag.ToString) Then + Me.pbCurrent.Visible = True + Me.lblCurrentImage.Visible = True + If e.Node.Tag.ToString = "showp" Then + Me.SelSeason = -999 + Me.SelIsPoster = True + If Not IsNothing(Scraper.TVDBImages.ShowPoster) AndAlso Not IsNothing(Scraper.TVDBImages.ShowPoster.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowPoster.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.ShowPoster.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + iCount = ShowPosterList.Count + For i = 0 To iCount - 1 + If Not IsNothing(ShowPosterList(i)) AndAlso Not IsNothing(ShowPosterList(i).Image) AndAlso Not IsNothing(ShowPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False, .ImageObj = ShowPosterList(i).Image}) + End If + Next + + For i = 0 To GenericPosterList.Count - 1 + If Not IsNothing(GenericPosterList(i)) AndAlso Not IsNothing(GenericPosterList(i).Image) AndAlso Not IsNothing(GenericPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False, .ImageObj = GenericPosterList(i).Image}) + End If + Next + + ElseIf e.Node.Tag.ToString = "showf" Then + + Me.SelSeason = -999 + Me.SelIsPoster = False + If Not IsNothing(Scraper.TVDBImages.ShowFanart) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image) AndAlso Not IsNothing(Scraper.TVDBImages.ShowFanart.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.ShowFanart.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + For i = 0 To FanartList.Count - 1 + If Not IsNothing(FanartList(i)) AndAlso Not IsNothing(FanartList(i).Image) AndAlso Not IsNothing(FanartList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True, .ImageObj = FanartList(i).Image}) + End If + Next + + ElseIf e.Node.Tag.ToString = "allp" Then + Me.SelSeason = 999 + Me.SelIsPoster = True + If Not IsNothing(Scraper.TVDBImages.AllSeasonPoster) AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image) AndAlso Not IsNothing(Scraper.TVDBImages.AllSeasonPoster.Image.Image) Then + Me.pbCurrent.Image = Scraper.TVDBImages.AllSeasonPoster.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + + iCount = GenericPosterList.Count + For i = 0 To iCount - 1 + If Not IsNothing(GenericPosterList(i)) AndAlso Not IsNothing(GenericPosterList(i).Image) AndAlso Not IsNothing(GenericPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", GenericPosterList(i).Image.Image.Width, GenericPosterList(i).Image.Image.Height), i, New ImageTag With {.URL = GenericPosterList(i).URL, .Path = GenericPosterList(i).LocalFile, .isFanart = False, .ImageObj = GenericPosterList(i).Image}) + End If + Next + + For i = 0 To ShowPosterList.Count - 1 + If Not IsNothing(ShowPosterList(i)) AndAlso Not IsNothing(ShowPosterList(i).Image) AndAlso Not IsNothing(ShowPosterList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", ShowPosterList(i).Image.Image.Width, ShowPosterList(i).Image.Image.Height), i + iCount, New ImageTag With {.URL = ShowPosterList(i).URL, .Path = ShowPosterList(i).LocalFile, .isFanart = False, .ImageObj = ShowPosterList(i).Image}) + End If + Next + Else + Dim tMatch As Match = Regex.Match(e.Node.Tag.ToString, "(?<type>f|p)(?<num>[0-9]+)") + If tMatch.Success Then + If tMatch.Groups("type").Value = "f" Then + Me.SelSeason = Convert.ToInt32(tMatch.Groups("num").Value) + Me.SelIsPoster = False + Dim tFanart As Scraper.TVDBSeasonImage = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(f) f.Season = Convert.ToInt32(tMatch.Groups("num").Value)) + If Not IsNothing(tFanart) AndAlso Not IsNothing(tFanart.Fanart) AndAlso Not IsNothing(tFanart.Fanart.Image) AndAlso Not IsNothing(tFanart.Fanart.Image.Image) Then + Me.pbCurrent.Image = tFanart.Fanart.Image.Image + Else + Me.pbCurrent.Image = Nothing + End If + For i = 0 To FanartList.Count - 1 + If Not IsNothing(FanartList(i)) AndAlso Not IsNothing(FanartList(i).Image) AndAlso Not IsNothing(FanartList(i).Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", FanartList(i).Size.Width, FanartList(i).Size.Height), i, New ImageTag With {.URL = FanartList(i).URL, .Path = FanartList(i).LocalFile, .isFanart = True, .ImageObj = FanartList(i).Image}) + End If + Next + ElseIf tMatch.Groups("type").Value = "p" Then + Me.SelSeason = Convert.ToInt32(tMatch.Groups("num").Value) + Me.SelIsPoster = True + Dim tPoster As Scraper.TVDBSeasonImage = Scraper.TVDBImages.SeasonImageList.FirstOrDefault(Function(f) f.Season = Me.SelSeason) + If Not IsNothing(tPoster) AndAlso Not IsNothing(tPoster.Poster) AndAlso Not IsNothing(tPoster.Poster.Image) Then + Me.pbCurrent.Image = tPoster.Poster.Image + Else + Me.pbCurrent.Image = Nothing + End If + iCount = 0 + For Each SImage As Scraper.TVDBSeasonPoster In SeasonList.Where(Function(s) s.Season = Convert.ToInt32(tMatch.Groups("num").Value)) + If Not IsNothing(SImage.Image) AndAlso Not IsNothing(SImage.Image.Image) Then + Me.AddImage(String.Format("{0}x{1}", SImage.Image.Image.Width, SImage.Image.Image.Height), iCount, New ImageTag With {.URL = SImage.URL, .Path = SImage.LocalFile, .isFanart = False, .ImageObj = SImage.Image}) + End If + iCount += 1 + Next + End If + End If + End If + Else + Me.pbCurrent.Image = Nothing + Me.pbCurrent.Visible = False + Me.lblCurrentImage.Visible = False + End If + + Me.CheckCurrentImage() + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Private Structure ImageTag + +#Region "Fields" + + Dim isFanart As Boolean + Dim Path As String + Dim URL As String + Dim ImageObj As Images + +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/frmInfoSettingsHolder.Designer.vb b/Addons/scraper.YouTube.Trailer/frmInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..c3675d6 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/frmInfoSettingsHolder.Designer.vb @@ -0,0 +1,632 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.GroupBox30 = New System.Windows.Forms.GroupBox() + Me.Label18 = New System.Windows.Forms.Label() + Me.txtIMDBURL = New System.Windows.Forms.TextBox() + Me.GroupBox15 = New System.Windows.Forms.GroupBox() + Me.chkOFDBGenre = New System.Windows.Forms.CheckBox() + Me.chkOFDBPlot = New System.Windows.Forms.CheckBox() + Me.chkOFDBOutline = New System.Windows.Forms.CheckBox() + Me.chkOFDBTitle = New System.Windows.Forms.CheckBox() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCertification = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.chkTop250 = New System.Windows.Forms.CheckBox() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkMusicBy = New System.Windows.Forms.CheckBox() + Me.chkProducers = New System.Windows.Forms.CheckBox() + Me.chkFullCast = New System.Windows.Forms.CheckBox() + Me.chkWriters = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkFullCrew = New System.Windows.Forms.CheckBox() + Me.chkPlot = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkDirector = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.GroupBox30.SuspendLayout() + Me.GroupBox15.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbOptions.SuspendLayout() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'GroupBox30 + ' + Me.GroupBox30.Controls.Add(Me.Label18) + Me.GroupBox30.Controls.Add(Me.txtIMDBURL) + Me.GroupBox30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox30.Location = New System.Drawing.Point(8, 40) + Me.GroupBox30.Name = "GroupBox30" + Me.GroupBox30.Size = New System.Drawing.Size(213, 69) + Me.GroupBox30.TabIndex = 1 + Me.GroupBox30.TabStop = False + Me.GroupBox30.Text = "IMDB" + ' + 'Label18 + ' + Me.Label18.AutoSize = True + Me.Label18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label18.Location = New System.Drawing.Point(6, 18) + Me.Label18.Name = "Label18" + Me.Label18.Size = New System.Drawing.Size(73, 13) + Me.Label18.TabIndex = 0 + Me.Label18.Text = "IMDB Mirror:" + ' + 'txtIMDBURL + ' + Me.txtIMDBURL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtIMDBURL.Location = New System.Drawing.Point(8, 32) + Me.txtIMDBURL.Name = "txtIMDBURL" + Me.txtIMDBURL.Size = New System.Drawing.Size(192, 22) + Me.txtIMDBURL.TabIndex = 1 + ' + 'GroupBox15 + ' + Me.GroupBox15.Controls.Add(Me.chkOFDBGenre) + Me.GroupBox15.Controls.Add(Me.chkOFDBPlot) + Me.GroupBox15.Controls.Add(Me.chkOFDBOutline) + Me.GroupBox15.Controls.Add(Me.chkOFDBTitle) + Me.GroupBox15.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox15.Location = New System.Drawing.Point(8, 114) + Me.GroupBox15.Name = "GroupBox15" + Me.GroupBox15.Size = New System.Drawing.Size(213, 87) + Me.GroupBox15.TabIndex = 2 + Me.GroupBox15.TabStop = False + Me.GroupBox15.Text = "OFDB (German)" + ' + 'chkOFDBGenre + ' + Me.chkOFDBGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBGenre.Location = New System.Drawing.Point(6, 65) + Me.chkOFDBGenre.Name = "chkOFDBGenre" + Me.chkOFDBGenre.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBGenre.TabIndex = 3 + Me.chkOFDBGenre.Text = "Use OFDB Genre" + Me.chkOFDBGenre.UseVisualStyleBackColor = True + ' + 'chkOFDBPlot + ' + Me.chkOFDBPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBPlot.Location = New System.Drawing.Point(6, 49) + Me.chkOFDBPlot.Name = "chkOFDBPlot" + Me.chkOFDBPlot.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBPlot.TabIndex = 2 + Me.chkOFDBPlot.Text = "Use OFDB Plot" + Me.chkOFDBPlot.UseVisualStyleBackColor = True + ' + 'chkOFDBOutline + ' + Me.chkOFDBOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBOutline.Location = New System.Drawing.Point(6, 33) + Me.chkOFDBOutline.Name = "chkOFDBOutline" + Me.chkOFDBOutline.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBOutline.TabIndex = 1 + Me.chkOFDBOutline.Text = "Use OFDB Outline" + Me.chkOFDBOutline.UseVisualStyleBackColor = True + ' + 'chkOFDBTitle + ' + Me.chkOFDBTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOFDBTitle.Location = New System.Drawing.Point(6, 17) + Me.chkOFDBTitle.Name = "chkOFDBTitle" + Me.chkOFDBTitle.Size = New System.Drawing.Size(194, 17) + Me.chkOFDBTitle.TabIndex = 0 + Me.chkOFDBTitle.Text = "Use OFDB Title" + Me.chkOFDBTitle.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Controls.Add(Me.GroupBox30) + Me.pnlSettings.Controls.Add(Me.GroupBox15) + Me.pnlSettings.Controls.Add(Me.gbOptions) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCertification) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.chkTop250) + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkMusicBy) + Me.gbOptions.Controls.Add(Me.chkProducers) + Me.gbOptions.Controls.Add(Me.chkFullCast) + Me.gbOptions.Controls.Add(Me.chkWriters) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkFullCrew) + Me.gbOptions.Controls.Add(Me.chkPlot) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkDirector) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(227, 40) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(387, 161) + Me.gbOptions.TabIndex = 3 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields" + ' + 'chkCertification + ' + Me.chkCertification.AutoSize = True + Me.chkCertification.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCertification.Location = New System.Drawing.Point(6, 70) + Me.chkCertification.Name = "chkCertification" + Me.chkCertification.Size = New System.Drawing.Size(89, 17) + Me.chkCertification.TabIndex = 3 + Me.chkCertification.Text = "Certification" + Me.chkCertification.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(237, 53) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 18 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'chkTop250 + ' + Me.chkTop250.AutoSize = True + Me.chkTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTop250.Location = New System.Drawing.Point(237, 19) + Me.chkTop250.Name = "chkTop250" + Me.chkTop250.Size = New System.Drawing.Size(66, 17) + Me.chkTop250.TabIndex = 16 + Me.chkTop250.Text = "Top 250" + Me.chkTop250.UseVisualStyleBackColor = True + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Enabled = False + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(246, 104) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(85, 17) + Me.chkCrew.TabIndex = 21 + Me.chkCrew.Text = "Other Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkMusicBy + ' + Me.chkMusicBy.AutoSize = True + Me.chkMusicBy.Enabled = False + Me.chkMusicBy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMusicBy.Location = New System.Drawing.Point(246, 121) + Me.chkMusicBy.Name = "chkMusicBy" + Me.chkMusicBy.Size = New System.Drawing.Size(71, 17) + Me.chkMusicBy.TabIndex = 22 + Me.chkMusicBy.Text = "Music By" + Me.chkMusicBy.UseVisualStyleBackColor = True + ' + 'chkProducers + ' + Me.chkProducers.AutoSize = True + Me.chkProducers.Enabled = False + Me.chkProducers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkProducers.Location = New System.Drawing.Point(246, 138) + Me.chkProducers.Name = "chkProducers" + Me.chkProducers.Size = New System.Drawing.Size(77, 17) + Me.chkProducers.TabIndex = 23 + Me.chkProducers.Text = "Producers" + Me.chkProducers.UseVisualStyleBackColor = True + ' + 'chkFullCast + ' + Me.chkFullCast.AutoSize = True + Me.chkFullCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCast.Location = New System.Drawing.Point(237, 70) + Me.chkFullCast.Name = "chkFullCast" + Me.chkFullCast.Size = New System.Drawing.Size(107, 17) + Me.chkFullCast.TabIndex = 19 + Me.chkFullCast.Text = "Scrape Full Cast" + Me.chkFullCast.UseVisualStyleBackColor = True + ' + 'chkWriters + ' + Me.chkWriters.AutoSize = True + Me.chkWriters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkWriters.Location = New System.Drawing.Point(131, 121) + Me.chkWriters.Name = "chkWriters" + Me.chkWriters.Size = New System.Drawing.Size(63, 17) + Me.chkWriters.TabIndex = 14 + Me.chkWriters.Text = "Writers" + Me.chkWriters.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(131, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 8 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 104) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 5 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkFullCrew + ' + Me.chkFullCrew.AutoSize = True + Me.chkFullCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCrew.Location = New System.Drawing.Point(237, 87) + Me.chkFullCrew.Name = "chkFullCrew" + Me.chkFullCrew.Size = New System.Drawing.Size(111, 17) + Me.chkFullCrew.TabIndex = 20 + Me.chkFullCrew.Text = "Scrape Full Crew" + Me.chkFullCrew.UseVisualStyleBackColor = True + ' + 'chkPlot + ' + Me.chkPlot.AutoSize = True + Me.chkPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkPlot.Location = New System.Drawing.Point(131, 70) + Me.chkPlot.Name = "chkPlot" + Me.chkPlot.Size = New System.Drawing.Size(46, 17) + Me.chkPlot.TabIndex = 11 + Me.chkPlot.Text = "Plot" + Me.chkPlot.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(131, 53) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 10 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(131, 138) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 15 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkDirector + ' + Me.chkDirector.AutoSize = True + Me.chkDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDirector.Location = New System.Drawing.Point(131, 104) + Me.chkDirector.Name = "chkDirector" + Me.chkDirector.Size = New System.Drawing.Size(67, 17) + Me.chkDirector.TabIndex = 13 + Me.chkDirector.Text = "Director" + Me.chkDirector.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(131, 36) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 9 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(131, 87) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 12 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 138) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 7 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(237, 36) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 17 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 121) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 6 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 87) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 4 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 53) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 36) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'frmInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.GroupBox30.ResumeLayout(False) + Me.GroupBox30.PerformLayout() + Me.GroupBox15.ResumeLayout(False) + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents GroupBox30 As System.Windows.Forms.GroupBox + Friend WithEvents Label18 As System.Windows.Forms.Label + Friend WithEvents txtIMDBURL As System.Windows.Forms.TextBox + Friend WithEvents GroupBox15 As System.Windows.Forms.GroupBox + Friend WithEvents chkOFDBGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBPlot As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkOFDBTitle As System.Windows.Forms.CheckBox + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents gbOptions As System.Windows.Forms.GroupBox + Friend WithEvents chkCertification As System.Windows.Forms.CheckBox + Friend WithEvents chkCountry As System.Windows.Forms.CheckBox + Friend WithEvents chkTop250 As System.Windows.Forms.CheckBox + Friend WithEvents chkCrew As System.Windows.Forms.CheckBox + Friend WithEvents chkMusicBy As System.Windows.Forms.CheckBox + Friend WithEvents chkFullCrew As System.Windows.Forms.CheckBox + Friend WithEvents chkFullCast As System.Windows.Forms.CheckBox + Friend WithEvents chkProducers As System.Windows.Forms.CheckBox + Friend WithEvents chkWriters As System.Windows.Forms.CheckBox + Friend WithEvents chkStudio As System.Windows.Forms.CheckBox + Friend WithEvents chkRuntime As System.Windows.Forms.CheckBox + Friend WithEvents chkPlot As System.Windows.Forms.CheckBox + Friend WithEvents chkOutline As System.Windows.Forms.CheckBox + Friend WithEvents chkGenre As System.Windows.Forms.CheckBox + Friend WithEvents chkDirector As System.Windows.Forms.CheckBox + Friend WithEvents chkTagline As System.Windows.Forms.CheckBox + Friend WithEvents chkCast As System.Windows.Forms.CheckBox + Friend WithEvents chkVotes As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailer As System.Windows.Forms.CheckBox + Friend WithEvents chkRating As System.Windows.Forms.CheckBox + Friend WithEvents chkRelease As System.Windows.Forms.CheckBox + Friend WithEvents chkMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkYear As System.Windows.Forms.CheckBox + Friend WithEvents chkTitle As System.Windows.Forms.CheckBox + +End Class diff --git a/Addons/scraper.YouTube.Trailer/frmInfoSettingsHolder.resx b/Addons/scraper.YouTube.Trailer/frmInfoSettingsHolder.resx new file mode 100644 index 0000000..1a3b6b2 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/frmInfoSettingsHolder.resx @@ -0,0 +1,193 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/frmInfoSettingsHolder.vb b/Addons/scraper.YouTube.Trailer/frmInfoSettingsHolder.vb new file mode 100644 index 0000000..21a3d0b --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/frmInfoSettingsHolder.vb @@ -0,0 +1,237 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCertification_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCertification.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCrew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkDirector_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDirector.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFullCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFullCast.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkFullCrew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFullCrew.CheckedChanged + RaiseEvent ModuleSettingsChanged() + + Me.chkProducers.Enabled = Me.chkFullCrew.Checked + Me.chkMusicBy.Enabled = Me.chkFullCrew.Checked + Me.chkCrew.Enabled = Me.chkFullCrew.Checked + + If Not Me.chkFullCrew.Checked Then + Me.chkProducers.Checked = False + Me.chkMusicBy.Checked = False + Me.chkCrew.Checked = False + End If + End Sub + + Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkMusicBy_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMusicBy.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBGenre.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBPlot.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOFDBTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOFDBTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPlot.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkProducers_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkProducers.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTop250_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTop250.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkWriters_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkWriters.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.chkOFDBGenre.Text = Master.eLang.GetString(1, "Use OFDB Genre") + Me.chkOFDBPlot.Text = Master.eLang.GetString(2, "Use OFDB Plot") + Me.chkOFDBOutline.Text = Master.eLang.GetString(3, "Use OFDB Outline") + Me.chkOFDBTitle.Text = Master.eLang.GetString(4, "Use OFDB Title") + Me.Label18.Text = Master.eLang.GetString(5, "IMDB Mirror:") + Me.gbOptions.Text = Master.eLang.GetString(6, "Scraper Fields - Scraper specific") + Me.chkCrew.Text = Master.eLang.GetString(391, "Other Crew", True) + Me.chkMusicBy.Text = Master.eLang.GetString(392, "Music By", True) + Me.chkProducers.Text = Master.eLang.GetString(393, "Producers", True) + Me.chkWriters.Text = Master.eLang.GetString(394, "Writers", True) + Me.chkStudio.Text = Master.eLang.GetString(395, "Studio", True) + Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime", True) + Me.chkPlot.Text = Master.eLang.GetString(65, "Plot", True) + Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline", True) + Me.chkGenre.Text = Master.eLang.GetString(20, "Genres", True) + Me.chkDirector.Text = Master.eLang.GetString(62, "Director", True) + Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline", True) + Me.chkCast.Text = Master.eLang.GetString(398, "Cast", True) + Me.chkVotes.Text = Master.eLang.GetString(399, "Votes", True) + Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer", True) + Me.chkRating.Text = Master.eLang.GetString(400, "Rating", True) + Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date", True) + Me.chkMPAA.Text = Master.eLang.GetString(401, "MPAA", True) + Me.chkYear.Text = Master.eLang.GetString(278, "Year", True) + Me.chkTitle.Text = Master.eLang.GetString(21, "Title", True) + Me.chkCertification.Text = Master.eLang.GetString(722, "Certification", True) + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + Me.chkCountry.Text = Master.eLang.GetString(301, "Country", True) + Me.chkFullCast.Text = Master.eLang.GetString(512, "Scrape Full Cast", True) + Me.chkFullCrew.Text = Master.eLang.GetString(513, "Scrape Full Crew", True) + Me.chkTop250.Text = Master.eLang.GetString(868, "Top250", True) + Me.GroupBox30.Text = Master.eLang.GetString(106, "IMDB") + Me.GroupBox15.Text = Master.eLang.GetString(107, "OFDB (German)") + End Sub + + Private Sub txtIMDBURL_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtIMDBURL.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/frmMediaSettingsHolder.Designer.vb b/Addons/scraper.YouTube.Trailer/frmMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..2c09e78 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/frmMediaSettingsHolder.Designer.vb @@ -0,0 +1,524 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMediaSettingsHolder)) + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.cbActorThumbsSize = New System.Windows.Forms.ComboBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.cbManualETSize = New System.Windows.Forms.ComboBox() + Me.grpSaveFanart = New System.Windows.Forms.GroupBox() + Me.optFanartFolderExtraFanart = New System.Windows.Forms.RadioButton() + Me.optFanartFolderExtraThumbs = New System.Windows.Forms.RadioButton() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkUseMPDB = New System.Windows.Forms.CheckBox() + Me.chkUseTMDB = New System.Windows.Forms.CheckBox() + Me.chkUseIMPA = New System.Windows.Forms.CheckBox() + Me.chkScrapePoster = New System.Windows.Forms.CheckBox() + Me.chkScrapeFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.cbTrailerTMDBPref = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.Label23 = New System.Windows.Forms.Label() + Me.txtTimeout = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkTrailerTMDBXBMC = New System.Windows.Forms.CheckBox() + Me.chkTrailerIMDB = New System.Windows.Forms.CheckBox() + Me.chkTrailerTMDB = New System.Windows.Forms.CheckBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox3.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.grpSaveFanart.SuspendLayout() + Me.GroupBox9.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.GroupBox3) + Me.pnlSettings.Controls.Add(Me.GroupBox1) + Me.pnlSettings.Controls.Add(Me.Panel2) + Me.pnlSettings.Location = New System.Drawing.Point(12, 4) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 94 + Me.PictureBox1.TabStop = False + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.GroupBox6) + Me.GroupBox3.Controls.Add(Me.GroupBox4) + Me.GroupBox3.Controls.Add(Me.grpSaveFanart) + Me.GroupBox3.Controls.Add(Me.GroupBox9) + Me.GroupBox3.Controls.Add(Me.chkScrapePoster) + Me.GroupBox3.Controls.Add(Me.chkScrapeFanart) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(15, 31) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(587, 177) + Me.GroupBox3.TabIndex = 1 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Images" + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.cbActorThumbsSize) + Me.GroupBox6.Location = New System.Drawing.Point(374, 98) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(160, 73) + Me.GroupBox6.TabIndex = 5 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Actor Thumbs Size:" + ' + 'cbActorThumbsSize + ' + Me.cbActorThumbsSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbActorThumbsSize.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbActorThumbsSize.FormattingEnabled = True + Me.cbActorThumbsSize.Items.AddRange(New Object() {"SY275_SX400", "SY720_SX1080", "SY1080_SX1920"}) + Me.cbActorThumbsSize.Location = New System.Drawing.Point(21, 35) + Me.cbActorThumbsSize.Name = "cbActorThumbsSize" + Me.cbActorThumbsSize.Size = New System.Drawing.Size(121, 21) + Me.cbActorThumbsSize.TabIndex = 0 + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.cbManualETSize) + Me.GroupBox4.Location = New System.Drawing.Point(374, 11) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(160, 80) + Me.GroupBox4.TabIndex = 4 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "TMDB Extrathumbs Size:" + ' + 'cbManualETSize + ' + Me.cbManualETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbManualETSize.Enabled = False + Me.cbManualETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbManualETSize.FormattingEnabled = True + Me.cbManualETSize.Items.AddRange(New Object() {"original", "w1280", "poster", "thumb"}) + Me.cbManualETSize.Location = New System.Drawing.Point(21, 35) + Me.cbManualETSize.Name = "cbManualETSize" + Me.cbManualETSize.Size = New System.Drawing.Size(121, 21) + Me.cbManualETSize.TabIndex = 0 + ' + 'grpSaveFanart + ' + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraFanart) + Me.grpSaveFanart.Controls.Add(Me.optFanartFolderExtraThumbs) + Me.grpSaveFanart.Enabled = False + Me.grpSaveFanart.Location = New System.Drawing.Point(24, 54) + Me.grpSaveFanart.Name = "grpSaveFanart" + Me.grpSaveFanart.Size = New System.Drawing.Size(123, 66) + Me.grpSaveFanart.TabIndex = 2 + Me.grpSaveFanart.TabStop = False + Me.grpSaveFanart.Text = "Save Fanart In:" + ' + 'optFanartFolderExtraFanart + ' + Me.optFanartFolderExtraFanart.AutoSize = True + Me.optFanartFolderExtraFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraFanart.Location = New System.Drawing.Point(22, 38) + Me.optFanartFolderExtraFanart.Name = "optFanartFolderExtraFanart" + Me.optFanartFolderExtraFanart.Size = New System.Drawing.Size(85, 17) + Me.optFanartFolderExtraFanart.TabIndex = 1 + Me.optFanartFolderExtraFanart.TabStop = True + Me.optFanartFolderExtraFanart.Text = "\extrafanart" + Me.optFanartFolderExtraFanart.UseVisualStyleBackColor = True + ' + 'optFanartFolderExtraThumbs + ' + Me.optFanartFolderExtraThumbs.AutoSize = True + Me.optFanartFolderExtraThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.optFanartFolderExtraThumbs.Location = New System.Drawing.Point(22, 19) + Me.optFanartFolderExtraThumbs.Name = "optFanartFolderExtraThumbs" + Me.optFanartFolderExtraThumbs.Size = New System.Drawing.Size(93, 17) + Me.optFanartFolderExtraThumbs.TabIndex = 0 + Me.optFanartFolderExtraThumbs.TabStop = True + Me.optFanartFolderExtraThumbs.Text = "\extrathumbs" + Me.optFanartFolderExtraThumbs.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkUseMPDB) + Me.GroupBox9.Controls.Add(Me.chkUseTMDB) + Me.GroupBox9.Controls.Add(Me.chkUseIMPA) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(165, 11) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(160, 80) + Me.GroupBox9.TabIndex = 3 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Get Images From:" + ' + 'chkUseMPDB + ' + Me.chkUseMPDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPDB.Location = New System.Drawing.Point(6, 56) + Me.chkUseMPDB.Name = "chkUseMPDB" + Me.chkUseMPDB.Size = New System.Drawing.Size(150, 22) + Me.chkUseMPDB.TabIndex = 2 + Me.chkUseMPDB.Text = "MoviePosterDB.com" + Me.chkUseMPDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseMPDB.UseVisualStyleBackColor = True + ' + 'chkUseTMDB + ' + Me.chkUseTMDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseTMDB.Location = New System.Drawing.Point(6, 18) + Me.chkUseTMDB.Name = "chkUseTMDB" + Me.chkUseTMDB.Size = New System.Drawing.Size(149, 19) + Me.chkUseTMDB.TabIndex = 0 + Me.chkUseTMDB.Text = "themoviedb.org" + Me.chkUseTMDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseTMDB.UseVisualStyleBackColor = True + ' + 'chkUseIMPA + ' + Me.chkUseIMPA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseIMPA.Location = New System.Drawing.Point(6, 37) + Me.chkUseIMPA.Name = "chkUseIMPA" + Me.chkUseIMPA.Size = New System.Drawing.Size(149, 20) + Me.chkUseIMPA.TabIndex = 1 + Me.chkUseIMPA.Text = "IMPAwards.com" + Me.chkUseIMPA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseIMPA.UseVisualStyleBackColor = True + ' + 'chkScrapePoster + ' + Me.chkScrapePoster.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapePoster.Location = New System.Drawing.Point(6, 19) + Me.chkScrapePoster.Name = "chkScrapePoster" + Me.chkScrapePoster.Size = New System.Drawing.Size(114, 15) + Me.chkScrapePoster.TabIndex = 0 + Me.chkScrapePoster.Text = "Get Posters" + Me.chkScrapePoster.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapePoster.UseVisualStyleBackColor = True + ' + 'chkScrapeFanart + ' + Me.chkScrapeFanart.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScrapeFanart.Location = New System.Drawing.Point(6, 37) + Me.chkScrapeFanart.Name = "chkScrapeFanart" + Me.chkScrapeFanart.Size = New System.Drawing.Size(84, 16) + Me.chkScrapeFanart.TabIndex = 1 + Me.chkScrapeFanart.Text = "Get Fanart" + Me.chkScrapeFanart.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScrapeFanart.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.GroupBox5) + Me.GroupBox1.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox1.Controls.Add(Me.Label23) + Me.GroupBox1.Controls.Add(Me.txtTimeout) + Me.GroupBox1.Controls.Add(Me.GroupBox2) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(15, 214) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(587, 112) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Trailers" + Me.GroupBox1.UseCompatibleTextRendering = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.cbTrailerTMDBPref) + Me.GroupBox5.Controls.Add(Me.Label2) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold) + Me.GroupBox5.Location = New System.Drawing.Point(374, 12) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(161, 94) + Me.GroupBox5.TabIndex = 4 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Youtube/TMDB Trailer:" + ' + 'cbTrailerTMDBPref + ' + Me.cbTrailerTMDBPref.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerTMDBPref.Enabled = False + Me.cbTrailerTMDBPref.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.cbTrailerTMDBPref.FormattingEnabled = True + Me.cbTrailerTMDBPref.Items.AddRange(New Object() {"bg", "cs", "da", "de", "el", "en", "es", "fi", "fr", "he", "hu", "it", "nb", "nl", "no", "pl", "pt", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "xx", "zh"}) + Me.cbTrailerTMDBPref.Location = New System.Drawing.Point(21, 51) + Me.cbTrailerTMDBPref.Name = "cbTrailerTMDBPref" + Me.cbTrailerTMDBPref.Size = New System.Drawing.Size(121, 21) + Me.cbTrailerTMDBPref.TabIndex = 1 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.Label2.Location = New System.Drawing.Point(26, 26) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(111, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Preferred Language:" + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(6, 19) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'Label23 + ' + Me.Label23.AutoSize = True + Me.Label23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label23.Location = New System.Drawing.Point(21, 43) + Me.Label23.Name = "Label23" + Me.Label23.Size = New System.Drawing.Size(51, 13) + Me.Label23.TabIndex = 1 + Me.Label23.Text = "Timeout:" + ' + 'txtTimeout + ' + Me.txtTimeout.Enabled = False + Me.txtTimeout.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTimeout.Location = New System.Drawing.Point(82, 39) + Me.txtTimeout.Name = "txtTimeout" + Me.txtTimeout.Size = New System.Drawing.Size(50, 22) + Me.txtTimeout.TabIndex = 2 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDBXBMC) + Me.GroupBox2.Controls.Add(Me.chkTrailerIMDB) + Me.GroupBox2.Controls.Add(Me.chkTrailerTMDB) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(165, 12) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(161, 94) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Supported Sites:" + ' + 'chkTrailerTMDBXBMC + ' + Me.chkTrailerTMDBXBMC.AutoSize = True + Me.chkTrailerTMDBXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDBXBMC.Location = New System.Drawing.Point(26, 44) + Me.chkTrailerTMDBXBMC.Name = "chkTrailerTMDBXBMC" + Me.chkTrailerTMDBXBMC.Size = New System.Drawing.Size(95, 17) + Me.chkTrailerTMDBXBMC.TabIndex = 1 + Me.chkTrailerTMDBXBMC.Text = "XBMC Format" + Me.chkTrailerTMDBXBMC.UseVisualStyleBackColor = True + ' + 'chkTrailerIMDB + ' + Me.chkTrailerIMDB.AutoSize = True + Me.chkTrailerIMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerIMDB.Location = New System.Drawing.Point(6, 67) + Me.chkTrailerIMDB.Name = "chkTrailerIMDB" + Me.chkTrailerIMDB.Size = New System.Drawing.Size(54, 17) + Me.chkTrailerIMDB.TabIndex = 2 + Me.chkTrailerIMDB.Text = "IMDB" + Me.chkTrailerIMDB.UseVisualStyleBackColor = True + ' + 'chkTrailerTMDB + ' + Me.chkTrailerTMDB.AutoSize = True + Me.chkTrailerTMDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailerTMDB.Location = New System.Drawing.Point(6, 21) + Me.chkTrailerTMDB.Name = "chkTrailerTMDB" + Me.chkTrailerTMDB.Size = New System.Drawing.Size(103, 17) + Me.chkTrailerTMDB.TabIndex = 0 + Me.chkTrailerTMDB.Text = "Youtube/TMDB" + Me.chkTrailerTMDB.UseVisualStyleBackColor = True + ' + 'Panel2 + ' + Me.Panel2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel2.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Controls.Add(Me.btnDown) + Me.Panel2.Controls.Add(Me.btnUp) + Me.Panel2.Controls.Add(Me.cbEnabled) + Me.Panel2.Location = New System.Drawing.Point(0, 0) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(1125, 25) + Me.Panel2.TabIndex = 0 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(500, 7) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(58, 12) + Me.Label3.TabIndex = 1 + Me.Label3.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'frmMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + Me.grpSaveFanart.ResumeLayout(False) + Me.grpSaveFanart.PerformLayout() + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents chkScrapeFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkScrapePoster As System.Windows.Forms.CheckBox + Friend WithEvents chkDownloadTrailer As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox9 As System.Windows.Forms.GroupBox + Friend WithEvents chkUseMPDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkUseIMPA As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents Panel2 As System.Windows.Forms.Panel + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Label23 As System.Windows.Forms.Label + Friend WithEvents txtTimeout As System.Windows.Forms.TextBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents grpSaveFanart As System.Windows.Forms.GroupBox + Friend WithEvents optFanartFolderExtraFanart As System.Windows.Forms.RadioButton + Friend WithEvents optFanartFolderExtraThumbs As System.Windows.Forms.RadioButton + Friend WithEvents chkTrailerIMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDB As System.Windows.Forms.CheckBox + Friend WithEvents chkTrailerTMDBXBMC As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents cbManualETSize As System.Windows.Forms.ComboBox + Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox + Friend WithEvents cbTrailerTMDBPref As System.Windows.Forms.ComboBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents cbActorThumbsSize As System.Windows.Forms.ComboBox + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/frmMediaSettingsHolder.resx b/Addons/scraper.YouTube.Trailer/frmMediaSettingsHolder.resx new file mode 100644 index 0000000..023cf14 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/frmMediaSettingsHolder.resx @@ -0,0 +1,237 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + 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 + 6bKz54D4Hdc/dStsxIkAAAAAAElFTkSuQmCC +</value> + </data> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/frmMediaSettingsHolder.vb b/Addons/scraper.YouTube.Trailer/frmMediaSettingsHolder.vb new file mode 100644 index 0000000..401240a --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/frmMediaSettingsHolder.vb @@ -0,0 +1,172 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order + 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.PostScraperOrder = order - 1).PostScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Sub CheckTrailer() + Me.txtTimeout.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerIMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDB.Enabled = Me.chkDownloadTrailer.Checked + Me.chkTrailerTMDBXBMC.Enabled = Me.chkDownloadTrailer.Checked + If Not Me.chkDownloadTrailer.Checked Then + Me.txtTimeout.Text = "2" + Me.chkTrailerTMDB.Checked = False + Me.chkTrailerIMDB.Checked = False + Me.chkTrailerTMDBXBMC.Checked = False + End If + End Sub + + Private Sub chkDownloadTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDownloadTrailer.CheckedChanged + RaiseEvent ModuleSettingsChanged() + CheckTrailer() + End Sub + + Private Sub chkTrailerTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDB.CheckedChanged + chkTrailerTMDBXBMC.Enabled = chkTrailerTMDB.Checked + cbTrailerTMDBPref.Enabled = chkTrailerTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerIMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerIMDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkTrailerTMDBXBMC_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailerTMDBXBMC.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkScrapeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapeFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + grpSaveFanart.Enabled = chkScrapeFanart.Checked + End Sub + + Private Sub chkScrapePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrapePoster.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseIMPA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseIMPA.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseMPDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseMPDB.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub chkUseTMDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseTMDB.CheckedChanged + cbManualETSize.Enabled = chkUseTMDB.Checked + RaiseEvent ModuleSettingsChanged() + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).PostScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Sub SetUp() + Me.txtTimeout.Text = Master.eSettings.TrailerTimeout.ToString + Me.Label23.Text = Master.eLang.GetString(7, "Timeout:") + Me.GroupBox2.Text = Master.eLang.GetString(8, "Supported Sites:") + Me.GroupBox9.Text = Master.eLang.GetString(9, "Get Images From:") + Me.grpSaveFanart.Text = Master.eLang.GetString(8001, "Save Fanart In:") + Me.chkDownloadTrailer.Text = Master.eLang.GetString(529, "Enable Trailer Support", True) + Me.Label3.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + Me.chkScrapePoster.Text = Master.eLang.GetString(101, "Get Posters") + Me.chkScrapeFanart.Text = Master.eLang.GetString(102, "Get Fanart") + Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + Me.GroupBox3.Text = Master.eLang.GetString(497, "Images", True) + Me.GroupBox4.Text = Master.eLang.GetString(108, "TMDB Extrathumbs Size:") + Me.GroupBox1.Text = Master.eLang.GetString(109, "Trailers") + Me.GroupBox5.Text = Master.eLang.GetString(110, "Youtube/TMDB Trailer:") + Me.chkTrailerTMDBXBMC.Text = Master.eLang.GetString(111, "XBMC Format") + Me.Label2.Text = Master.eLang.GetString(112, "Preferred language") + Me.grpSaveFanart.Text = Master.eLang.GetString(113, "Save Fanart In:") + End Sub + + Private Sub txtTimeout_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTimeout.TextChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraFanart.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub optFanartFolderExtraThumbs_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles optFanartFolderExtraThumbs.CheckedChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbManualETSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbManualETSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbActorThumbsSize_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbActorThumbsSize.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub cbTrailerTMDBPref_SelectedIndexChanged(ByVal sender As System.Object, e As System.EventArgs) Handles cbTrailerTMDBPref.SelectedIndexChanged + RaiseEvent ModuleSettingsChanged() + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/frmTVInfoSettingsHolder.Designer.vb b/Addons/scraper.YouTube.Trailer/frmTVInfoSettingsHolder.Designer.vb new file mode 100644 index 0000000..4a8cc4e --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/frmTVInfoSettingsHolder.Designer.vb @@ -0,0 +1,169 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTVInfoSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTVInfoSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'frmTVInfoSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTVInfoSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.YouTube.Trailer/frmTVInfoSettingsHolder.resx b/Addons/scraper.YouTube.Trailer/frmTVInfoSettingsHolder.resx new file mode 100644 index 0000000..0950d0f --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/frmTVInfoSettingsHolder.resx @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/frmTVInfoSettingsHolder.vb b/Addons/scraper.YouTube.Trailer/frmTVInfoSettingsHolder.vb new file mode 100644 index 0000000..98761ce --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/frmTVInfoSettingsHolder.vb @@ -0,0 +1,80 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTVInfoSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupScraperChanged(cbEnabled.Checked, 0) + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + orderChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + 'Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/frmTVMediaSettingsHolder.Designer.vb b/Addons/scraper.YouTube.Trailer/frmTVMediaSettingsHolder.Designer.vb new file mode 100644 index 0000000..f5cb735 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/frmTVMediaSettingsHolder.Designer.vb @@ -0,0 +1,170 @@ +<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ +Partial Class frmTVMediaSettingsHolder + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + <System.Diagnostics.DebuggerNonUserCode()> _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + <System.Diagnostics.DebuggerStepThrough()> _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmTVMediaSettingsHolder)) + Me.lblVersion = New System.Windows.Forms.Label() + Me.cbEnabled = New System.Windows.Forms.CheckBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.pnlSettings = New System.Windows.Forms.Panel() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Panel1.SuspendLayout() + Me.pnlSettings.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'lblVersion + ' + Me.lblVersion.Location = New System.Drawing.Point(286, 393) + Me.lblVersion.Name = "lblVersion" + Me.lblVersion.Size = New System.Drawing.Size(90, 16) + Me.lblVersion.TabIndex = 74 + Me.lblVersion.Text = "Version:" + ' + 'cbEnabled + ' + Me.cbEnabled.AutoSize = True + Me.cbEnabled.Location = New System.Drawing.Point(10, 5) + Me.cbEnabled.Name = "cbEnabled" + Me.cbEnabled.Size = New System.Drawing.Size(68, 17) + Me.cbEnabled.TabIndex = 0 + Me.cbEnabled.Text = "Enabled" + Me.cbEnabled.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.btnDown) + Me.Panel1.Controls.Add(Me.cbEnabled) + Me.Panel1.Controls.Add(Me.btnUp) + Me.Panel1.Location = New System.Drawing.Point(0, 0) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(1125, 25) + Me.Panel1.TabIndex = 0 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(500, 7) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(58, 12) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Scraper order" + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(591, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(566, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'pnlSettings + ' + Me.pnlSettings.Controls.Add(Me.Label1) + Me.pnlSettings.Controls.Add(Me.PictureBox1) + Me.pnlSettings.Controls.Add(Me.Panel1) + Me.pnlSettings.Location = New System.Drawing.Point(12, 1) + Me.pnlSettings.Name = "pnlSettings" + Me.pnlSettings.Size = New System.Drawing.Size(617, 369) + Me.pnlSettings.TabIndex = 0 + ' + 'Label1 + ' + Me.Label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.Blue + Me.Label1.Location = New System.Drawing.Point(37, 337) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(225, 31) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "These settings are specific to this module." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Please refer to the global settings " & _ + "for more options." + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'PictureBox1 + ' + Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.InitialImage = CType(resources.GetObject("PictureBox1.InitialImage"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(3, 335) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(30, 31) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 96 + Me.PictureBox1.TabStop = False + ' + 'frmTVMediaSettingsHolder + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(652, 388) + Me.Controls.Add(Me.pnlSettings) + Me.Controls.Add(Me.lblVersion) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "frmTVMediaSettingsHolder" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Scraper Setup" + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.pnlSettings.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblVersion As System.Windows.Forms.Label + Friend WithEvents cbEnabled As System.Windows.Forms.CheckBox + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents pnlSettings As System.Windows.Forms.Panel + Friend WithEvents btnDown As System.Windows.Forms.Button + Friend WithEvents btnUp As System.Windows.Forms.Button + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + +End Class diff --git a/Addons/scraper.YouTube.Trailer/frmTVMediaSettingsHolder.resx b/Addons/scraper.YouTube.Trailer/frmTVMediaSettingsHolder.resx new file mode 100644 index 0000000..d47391f --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/frmTVMediaSettingsHolder.resx @@ -0,0 +1,197 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="btnDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm + Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q + A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk + QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m + zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN + K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje + KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd + //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ + JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 + COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh + 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 + IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== +</value> + </data> + <data name="btnUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA + CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A + ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje + PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH + m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF + jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh + /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y + uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX + g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT + uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX + IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g + GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 + ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA + CxEBf2RfkQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> + <data name="PictureBox1.InitialImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEAAA + CxABrSO9dQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L + 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 + 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK + C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT + 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd + PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR + 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q + JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY + 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb + wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs + wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA + h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe + jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G + YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC +</value> + </data> +</root> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/frmTVMediaSettingsHolder.vb b/Addons/scraper.YouTube.Trailer/frmTVMediaSettingsHolder.vb new file mode 100644 index 0000000..06928ef --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/frmTVMediaSettingsHolder.vb @@ -0,0 +1,80 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +Public Class frmTVMediaSettingsHolder + +#Region "Events" + + Public Event ModuleSettingsChanged() + + Public Event SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + +#End Region 'Events + +#Region "Methods" + + Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order + 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order + 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 1) + orderChanged() + End If + End Sub + + Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + If order > 0 Then + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.ScraperOrder = order - 1).ScraperOrder = order + ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder = order - 1 + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, -1) + orderChanged() + End If + End Sub + + Private Sub cbEnabled_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEnabled.CheckedChanged + RaiseEvent SetupPostScraperChanged(cbEnabled.Checked, 0) + End Sub + + Public Sub New() + InitializeComponent() + Me.SetUp() + orderChanged() + End Sub + + Sub orderChanged() + Dim order As Integer = ModulesManager.Instance.externalScrapersModules.FirstOrDefault(Function(p) p.AssemblyName = EmberNativeScraperModule._AssemblyName).ScraperOrder + btnDown.Enabled = (order < ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).Count - 1) + btnUp.Enabled = (order > 1) + End Sub + + Private Sub SetUp() + Me.Label2.Text = Master.eLang.GetString(168, "Scrape Order", True) + Me.cbEnabled.Text = Master.eLang.GetString(774, "Enabled", True) + 'Me.Label1.Text = String.Format(Master.eLang.GetString(103, "These settings are specific to this module.{0}Please refer to the global settings for more options."), vbCrLf) + End Sub + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/packages.config b/Addons/scraper.YouTube.Trailer/packages.config new file mode 100644 index 0000000..053d0bc6 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/packages.config @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="SharpZipLib" version="0.86.0" /> + <package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net35" /> +</packages> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/scraper.YouTube.Trailer.vbproj b/Addons/scraper.YouTube.Trailer/scraper.YouTube.Trailer.vbproj new file mode 100644 index 0000000..d36e98c --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/scraper.YouTube.Trailer.vbproj @@ -0,0 +1,342 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{194445BE-3721-4270-984D-FA978D5F34A0}</ProjectGuid> + <OutputType>Library</OutputType> + <RootNamespace>EmberScraperModule</RootNamespace> + <AssemblyName>scraper.YouTube.Trailer</AssemblyName> + <FileAlignment>512</FileAlignment> + <MyType>Windows</MyType> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + <OptionExplicit>On</OptionExplicit> + <OptionCompare>Binary</OptionCompare> + <OptionStrict>On</OptionStrict> + <OptionInfer>On</OptionInfer> + <FileUpgradeFlags> + </FileUpgradeFlags> + <OldToolsVersion>3.5</OldToolsVersion> + <UpgradeBackupLocation /> + <PublishUrl>publish\</PublishUrl> + <Install>true</Install> + <InstallFrom>Disk</InstallFrom> + <UpdateEnabled>false</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <IsWebBootstrapper>false</IsWebBootstrapper> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> + <RestorePackages>true</RestorePackages> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> + <DebugSymbols>true</DebugSymbols> + <DefineDebug>true</DefineDebug> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Dev\Modules\</OutputPath> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> + <DefineTrace>true</DefineTrace> + <OutputPath>..\..\EmberMM-Deploy\Modules\</OutputPath> + <Optimize>true</Optimize> + <NoWarn>42353,42354,42355</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <WarningsAsErrors>41998,41999,42004,42016,42017,42018,42019,42020,42021,42022,42024,42025,42026,42029,42030,42031,42032,42036,42099,42104,42105,42106,42107,42108,42109</WarningsAsErrors> + <CodeAnalysisLogFile>..\..\EmberMM\Modules\scraper.EmberCore.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile> + <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression> + <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.vb</CodeAnalysisModuleSuppressionsFile> + <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> + <CodeAnalysisRuleSetDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories> + <CodeAnalysisRuleDirectories>;D:\Applications\Development\Microsoft Visual Studio 2010\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories> + </PropertyGroup> + <ItemGroup> + <Reference Include="ICSharpCode.SharpZipLib"> + <HintPath>..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Data.SQLite"> + <HintPath>..\..\packages\System.Data.SQLite.1.0.84.0\lib\net20\System.Data.SQLite.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="System.Data.SQLite.Linq"> + <HintPath>..\..\packages\System.Data.SQLite.1.0.84.0\lib\net20\System.Data.SQLite.Linq.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Import Include="Microsoft.VisualBasic" /> + <Import Include="System" /> + <Import Include="System.Collections" /> + <Import Include="System.Collections.Generic" /> + <Import Include="System.Diagnostics" /> + <Import Include="System.Drawing" /> + <Import Include="System.Linq" /> + <Import Include="System.Web" /> + <Import Include="System.Windows.Forms" /> + <Import Include="System.Xml.Linq" /> + </ItemGroup> + <ItemGroup> + <Compile Include="frmTVMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmTVMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTVMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmTVInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmTVInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmTVInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperTVNativeModule.vb" /> + <Compile Include="Scraper\clsScrapeTrailers.vb" /> + <Compile Include="Scraper\clsScrapeImages.vb" /> + <Compile Include="Scraper\clsScrapeIMDB.vb" /> + <Compile Include="Scraper\clsScrapeIMPA.vb" /> + <Compile Include="Scraper\clsScrapeMPDB.vb" /> + <Compile Include="Scraper\clsScrapeOFDB.vb" /> + <Compile Include="Scraper\clsScrapeTMDB.vb" /> + <Compile Include="Scraper\clsScrapeYouTube.vb" /> + <Compile Include="Scraper\dlgIMDBSearchResults.Designer.vb"> + <DependentUpon>dlgIMDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgIMDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgImgSelect.Designer.vb"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgImgSelect.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailer.Designer.vb"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailer.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.Designer.vb"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + </Compile> + <Compile Include="Scraper\dlgTrailerFormat.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="frmMediaSettingsHolder.Designer.vb"> + <DependentUpon>frmMediaSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmMediaSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="My Project\AssemblyInfo.vb" /> + <Compile Include="My Project\Application.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Application.myapp</DependentUpon> + </Compile> + <Compile Include="My Project\Resources.Designer.vb"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> + <Compile Include="My Project\Settings.Designer.vb"> + <AutoGen>True</AutoGen> + <DependentUpon>Settings.settings</DependentUpon> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + </Compile> + <Compile Include="frmInfoSettingsHolder.Designer.vb"> + <DependentUpon>frmInfoSettingsHolder.vb</DependentUpon> + </Compile> + <Compile Include="frmInfoSettingsHolder.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="scraperMovieNativeModule.vb" /> + <Compile Include="TVScraper\clsScrapeTVDB.vb" /> + <Compile Include="TVScraper\dlgTVChangeEp.Designer.vb"> + <DependentUpon>dlgTVChangeEp.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVChangeEp.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVDBSearchResults.Designer.vb"> + <DependentUpon>dlgTVDBSearchResults.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVDBSearchResults.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVEpisodePoster.Designer.vb"> + <DependentUpon>dlgTVEpisodePoster.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVEpisodePoster.vb"> + <SubType>Form</SubType> + </Compile> + <Compile Include="TVScraper\dlgTVImageSelect.Designer.vb"> + <DependentUpon>dlgTVImageSelect.vb</DependentUpon> + </Compile> + <Compile Include="TVScraper\dlgTVImageSelect.vb"> + <SubType>Form</SubType> + </Compile> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="frmTVMediaSettingsHolder.resx"> + <DependentUpon>frmTVMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmTVInfoSettingsHolder.resx"> + <DependentUpon>frmTVInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgIMDBSearchResults.resx"> + <DependentUpon>dlgIMDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgImgSelect.resx"> + <DependentUpon>dlgImgSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailer.resx"> + <DependentUpon>dlgTrailer.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="Scraper\dlgTrailerFormat.resx"> + <DependentUpon>dlgTrailerFormat.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmMediaSettingsHolder.resx"> + <DependentUpon>frmMediaSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="frmInfoSettingsHolder.resx"> + <DependentUpon>frmInfoSettingsHolder.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="My Project\Resources.resx"> + <Generator>VbMyResourcesResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.vb</LastGenOutput> + <CustomToolNamespace>My.Resources</CustomToolNamespace> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVChangeEp.resx"> + <DependentUpon>dlgTVChangeEp.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVDBSearchResults.resx"> + <DependentUpon>dlgTVDBSearchResults.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVEpisodePoster.resx"> + <DependentUpon>dlgTVEpisodePoster.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + <EmbeddedResource Include="TVScraper\dlgTVImageSelect.resx"> + <DependentUpon>dlgTVImageSelect.vb</DependentUpon> + <SubType>Designer</SubType> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <None Include="My Project\Application.myapp"> + <Generator>MyApplicationCodeGenerator</Generator> + <LastGenOutput>Application.Designer.vb</LastGenOutput> + </None> + <None Include="My Project\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <CustomToolNamespace>My</CustomToolNamespace> + <LastGenOutput>Settings.Designer.vb</LastGenOutput> + </None> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> + <Install>false</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> + <Visible>False</Visible> + <ProductName>Windows Installer 3.1</ProductName> + <Install>true</Install> + </BootstrapperPackage> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\EmberAPI\EmberAPI.vbproj"> + <Project>{208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}</Project> + <Name>EmberAPI</Name> + <Private>False</Private> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="Langs\scraper.EmberCore.Debug_%28db_DB%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.English_%28en_US%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.English_%28en_US%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.German_%28de_DE%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.German_%28de_DE%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.Norwegian_%28no_NO%29-Help.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Langs\scraper.EmberCore.Norwegian_%28no_NO%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="x64\SQLite.Interop.dll"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + <Content Include="x86\SQLite.Interop.dll"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <PropertyGroup> + <PreBuildEvent> + </PreBuildEvent> + </PropertyGroup> + <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> +</Project> \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/scraperMovieNativeModule.vb b/Addons/scraper.YouTube.Trailer/scraperMovieNativeModule.vb new file mode 100644 index 0000000..6889071 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/scraperMovieNativeModule.vb @@ -0,0 +1,702 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO + +Imports EmberAPI + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberNativeScraperModule + Implements Interfaces.EmberMovieScraperModule + + +#Region "Fields" + + Public Shared ConfigOptions As New Structures.ScrapeOptions + Public Shared ConfigScrapeModifier As New Structures.ScrapeModifier + Public Shared _AssemblyName As String + + Private dFImgSelect As dlgImgSelect = Nothing + + ''' <summary> + ''' Scraping Here + ''' </summary> + ''' <remarks></remarks> + Private IMDB As New IMDB.Scraper + Private MySettings As New _MySettings + Private _Name As String = "Ember Native Movie Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmInfoSettingsHolder + Private _setupPost As frmMediaSettingsHolder + +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberMovieScraperModule.ModuleSettingsChanged + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + Public Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) Implements Interfaces.EmberMovieScraperModule.MovieScraperEvent + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.PostScraperSetupChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberMovieScraperModule.ScraperSetupChanged + + Public Event SetupNeedsRestart() Implements Interfaces.EmberMovieScraperModule.SetupNeedsRestart + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberMovieScraperModule.IsScraper + Get + Return True + End Get + End Property + + ReadOnly Property ModuleName() As String Implements Interfaces.EmberMovieScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberMovieScraperModule.ModuleVersion + Get + Return FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Property PostScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Property ScraperEnabled() As Boolean Implements Interfaces.EmberMovieScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean Implements Interfaces.EmberMovieScraperModule.QueryPostScraperCapabilities + Select Case cap + Case Enums.PostScraperCapabilities.Fanart + If MySettings.UseTMDB Then Return True + Case Enums.PostScraperCapabilities.Poster + If MySettings.UseIMPA OrElse MySettings.UseMPDB OrElse MySettings.UseTMDB Then Return True + Case Enums.PostScraperCapabilities.Trailer + If MySettings.DownloadTrailers Then Return True + End Select + Return False + End Function + + Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.DownloadTrailer + Using dTrailer As New dlgTrailer + dTrailer.IMDBURL = MySettings.IMDBURL + sURL = dTrailer.ShowDialog(DBMovie.Movie.IMDBID, DBMovie.Filename) + End Using + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef studio As List(Of String)) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.GetMovieStudio + Dim IMDB As New IMDB.Scraper + IMDB.UseOFDBTitle = MySettings.UseOFDBTitle + IMDB.UseOFDBOutline = MySettings.UseOFDBOutline + IMDB.UseOFDBPlot = MySettings.UseOFDBPlot + IMDB.UseOFDBGenre = MySettings.UseOFDBGenre + IMDB.IMDBURL = MySettings.IMDBURL + studio = IMDB.GetMovieStudios(DBMovie.Movie.IMDBID) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + + Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberMovieScraperModule.Init + _AssemblyName = sAssemblyName + LoadSettings() + End Sub + + Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupPostScraper + Dim Spanel As New Containers.SettingsPanel + _setupPost = New frmMediaSettingsHolder + LoadSettings() + _setupPost.cbEnabled.Checked = _PostScraperEnabled + _setupPost.chkTrailerIMDB.Checked = MySettings.UseIMDBTrailer + _setupPost.chkTrailerTMDB.Checked = MySettings.UseTMDBTrailer + _setupPost.cbTrailerTMDBPref.Text = MySettings.UseTMDBTrailerPref + _setupPost.chkTrailerTMDBXBMC.Checked = MySettings.UseTMDBTrailerXBMC + _setupPost.chkScrapePoster.Checked = ConfigScrapeModifier.Poster + _setupPost.chkScrapeFanart.Checked = ConfigScrapeModifier.Fanart + _setupPost.chkUseTMDB.Checked = MySettings.UseTMDB + _setupPost.chkUseIMPA.Checked = MySettings.UseIMPA + _setupPost.chkUseMPDB.Checked = MySettings.UseMPDB + _setupPost.cbManualETSize.Text = MySettings.ManualETSize + _setupPost.cbActorThumbsSize.Text = MySettings.ActorThumbsSize + _setupPost.txtTimeout.Text = MySettings.TrailerTimeout.ToString + _setupPost.chkDownloadTrailer.Checked = MySettings.DownloadTrailers + _setupPost.CheckTrailer() + _setupPost.orderChanged() + Spanel.Name = String.Concat(Me._Name, "PostScraper") + Spanel.Text = Master.eLang.GetString(104, "Ember Native Movie Scrapers") + Spanel.Prefix = "NativeMovieMedia_" + Spanel.Order = 110 + Spanel.Parent = "pnlMovieMedia" + Spanel.Type = Master.eLang.GetString(36, "Movies", True) + Spanel.ImageIndex = If(Me._PostScraperEnabled, 9, 10) + Spanel.Panel = Me._setupPost.pnlSettings + + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + Return Spanel + End Function + Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberMovieScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmInfoSettingsHolder + LoadSettings() + _setup.cbEnabled.Checked = _ScraperEnabled + _setup.chkTitle.Checked = ConfigOptions.bTitle + _setup.chkYear.Checked = ConfigOptions.bYear + _setup.chkMPAA.Checked = ConfigOptions.bMPAA + _setup.chkRelease.Checked = ConfigOptions.bRelease + _setup.chkRuntime.Checked = ConfigOptions.bRuntime + _setup.chkRating.Checked = ConfigOptions.bRating + _setup.chkVotes.Checked = ConfigOptions.bVotes + _setup.chkStudio.Checked = ConfigOptions.bStudio + _setup.chkTagline.Checked = ConfigOptions.bTagline + _setup.chkOutline.Checked = ConfigOptions.bOutline + _setup.chkPlot.Checked = ConfigOptions.bPlot + _setup.chkCast.Checked = ConfigOptions.bCast + _setup.chkDirector.Checked = ConfigOptions.bDirector + _setup.chkWriters.Checked = ConfigOptions.bWriters + _setup.chkProducers.Checked = ConfigOptions.bProducers + _setup.chkGenre.Checked = ConfigOptions.bGenre + _setup.chkTrailer.Checked = ConfigOptions.bTrailer + _setup.chkMusicBy.Checked = ConfigOptions.bMusicBy + _setup.chkCrew.Checked = ConfigOptions.bOtherCrew + _setup.chkCountry.Checked = ConfigOptions.bCountry + _setup.chkTop250.Checked = ConfigOptions.bTop250 + _setup.chkCertification.Checked = ConfigOptions.bCert + _setup.chkOFDBTitle.Checked = MySettings.UseOFDBTitle + _setup.chkOFDBOutline.Checked = MySettings.UseOFDBOutline + _setup.chkOFDBPlot.Checked = MySettings.UseOFDBPlot + _setup.chkOFDBGenre.Checked = MySettings.UseOFDBGenre + _setup.chkFullCast.Checked = ConfigOptions.bFullCast + _setup.chkFullCrew.Checked = ConfigOptions.bFullCrew + + If String.IsNullOrEmpty(MySettings.IMDBURL) Then + MySettings.IMDBURL = "akas.imdb.com" + End If + _setup.txtIMDBURL.Text = MySettings.IMDBURL + _setup.orderChanged() + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(104, "Ember Native Movie Scrapers") + SPanel.Prefix = "NativeMovieInfo_" + SPanel.Order = 110 + SPanel.Parent = "pnlMovieData" + SPanel.Type = Master.eLang.GetString(36, "Movies", True) + SPanel.ImageIndex = If(_ScraperEnabled, 9, 10) + SPanel.Panel = _setup.pnlSettings + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + Return SPanel + End Function + Sub LoadSettings() + ConfigOptions.bTitle = AdvancedSettings.GetBooleanSetting("DoTitle", True) + ConfigOptions.bYear = AdvancedSettings.GetBooleanSetting("DoYear", True) + ConfigOptions.bMPAA = AdvancedSettings.GetBooleanSetting("DoMPAA", True) + ConfigOptions.bRelease = AdvancedSettings.GetBooleanSetting("DoRelease", True) + ConfigOptions.bRuntime = AdvancedSettings.GetBooleanSetting("DoRuntime", True) + ConfigOptions.bRating = AdvancedSettings.GetBooleanSetting("DoRating", True) + ConfigOptions.bVotes = AdvancedSettings.GetBooleanSetting("DoVotes", True) + ConfigOptions.bStudio = AdvancedSettings.GetBooleanSetting("DoStudio", True) + ConfigOptions.bTagline = AdvancedSettings.GetBooleanSetting("DoTagline", True) + ConfigOptions.bOutline = AdvancedSettings.GetBooleanSetting("DoOutline", True) + ConfigOptions.bPlot = AdvancedSettings.GetBooleanSetting("DoPlot", True) + ConfigOptions.bCast = AdvancedSettings.GetBooleanSetting("DoCast", True) + ConfigOptions.bDirector = AdvancedSettings.GetBooleanSetting("DoDirector", True) + ConfigOptions.bWriters = AdvancedSettings.GetBooleanSetting("DoWriters", True) + ConfigOptions.bProducers = AdvancedSettings.GetBooleanSetting("DoProducers", True) + ConfigOptions.bGenre = AdvancedSettings.GetBooleanSetting("DoGenres", True) + ConfigOptions.bTrailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + ConfigOptions.bMusicBy = AdvancedSettings.GetBooleanSetting("DoMusic", True) + ConfigOptions.bOtherCrew = AdvancedSettings.GetBooleanSetting("DoOtherCrews", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("DoFullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("DoFullCrews", True) + ConfigOptions.bTop250 = AdvancedSettings.GetBooleanSetting("DoTop250", True) + ConfigOptions.bCountry = AdvancedSettings.GetBooleanSetting("DoCountry", True) + ConfigOptions.bCert = AdvancedSettings.GetBooleanSetting("DoCert", True) + ConfigOptions.bFullCast = AdvancedSettings.GetBooleanSetting("FullCast", True) + ConfigOptions.bFullCrew = AdvancedSettings.GetBooleanSetting("FullCrew", True) + + MySettings.IMDBURL = AdvancedSettings.GetSetting("IMDBURL", "akas.imdb.com") + MySettings.UseOFDBTitle = AdvancedSettings.GetBooleanSetting("UseOFDBTitle", False) + MySettings.UseOFDBOutline = AdvancedSettings.GetBooleanSetting("UseOFDBOutline", False) + MySettings.UseOFDBPlot = AdvancedSettings.GetBooleanSetting("UseOFDBPlot", False) + MySettings.UseOFDBGenre = AdvancedSettings.GetBooleanSetting("UseOFDBGenre", False) + MySettings.DownloadTrailers = AdvancedSettings.GetBooleanSetting("DownloadTraliers", False) + + MySettings.TrailerTimeout = Convert.ToInt32(AdvancedSettings.GetSetting("TrailerTimeout", "10")) + MySettings.UseIMPA = AdvancedSettings.GetBooleanSetting("UseIMPA", False) + MySettings.UseMPDB = AdvancedSettings.GetBooleanSetting("UseMPDB", False) + MySettings.UseTMDB = AdvancedSettings.GetBooleanSetting("UseTMDB", True) + MySettings.UseIMDBTrailer = AdvancedSettings.GetBooleanSetting("UseIMDBTrailer", True) + MySettings.UseTMDBTrailer = AdvancedSettings.GetBooleanSetting("UseTMDBTrailer", True) + MySettings.UseTMDBTrailerXBMC = AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) + MySettings.ManualETSize = Convert.ToString(AdvancedSettings.GetSetting("ManualETSize", "thumb")) + MySettings.ActorThumbsSize = Convert.ToString(AdvancedSettings.GetSetting("ActorThumbsSize", "SY275_SX400")) + MySettings.UseTMDBTrailerPref = Convert.ToString(AdvancedSettings.GetSetting("UseTMDBTrailerPref", "en")) + + ConfigScrapeModifier.DoSearch = True + ConfigScrapeModifier.Meta = True + ConfigScrapeModifier.NFO = True + ConfigScrapeModifier.Extra = True + ConfigScrapeModifier.Actors = True + + ConfigScrapeModifier.Poster = AdvancedSettings.GetBooleanSetting("DoPoster", True) + ConfigScrapeModifier.Fanart = AdvancedSettings.GetBooleanSetting("DoFanart", True) + ConfigScrapeModifier.Trailer = AdvancedSettings.GetBooleanSetting("DoTrailer", True) + End Sub + + Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.PostScraper + 'LoadSettings() + Dim Poster As New Images + Dim Fanart As New Images + Dim pResults As Containers.ImgResult + Dim fResults As Containers.ImgResult + Dim tURL As String = String.Empty + Dim Trailer As New Trailers + LoadSettings() + Dim saveModifier As Structures.ScrapeModifier = Master.GlobalScrapeMod + Master.GlobalScrapeMod = Functions.ScrapeModifierAndAlso(Master.GlobalScrapeMod, ConfigScrapeModifier) + + Trailer.IMDBURL = MySettings.IMDBURL + Dim doSave As Boolean = False + If Master.GlobalScrapeMod.Poster AndAlso (MySettings.UseIMPA OrElse MySettings.UseMPDB OrElse MySettings.UseTMDB) Then + Poster.Clear() + If Poster.IsAllowedToDownload(DBMovie, Enums.ImageType.Posters) Then + pResults = New Containers.ImgResult + If ScrapeImages.GetPreferredImage(Poster, DBMovie.Movie.IMDBID, Enums.ImageType.Posters, pResults, DBMovie.Filename, False, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Poster.Image) Then + pResults.ImagePath = Poster.SaveAsPoster(DBMovie) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(76, "A poster of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size")) + Using dImgSelect As New dlgImgSelect + dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Posters) + If Not String.IsNullOrEmpty(pResults.ImagePath) Then + DBMovie.PosterPath = pResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.PosterItem, True) '4, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Thumb = pResults.Posters + End If + End If + End Using + End If + End If + End If + End If + Dim didEts As Boolean + If Master.GlobalScrapeMod.Fanart AndAlso MySettings.UseTMDB Then + Fanart.Clear() + If Fanart.IsAllowedToDownload(DBMovie, Enums.ImageType.Fanart) Then + fResults = New Containers.ImgResult + didEts = True + If ScrapeImages.GetPreferredImage(Fanart, DBMovie.Movie.IMDBID, Enums.ImageType.Fanart, fResults, DBMovie.Filename, Master.GlobalScrapeMod.Extra, If(ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk, True, False)) Then + If Not IsNothing(Fanart.Image) Then + fResults.ImagePath = Fanart.SaveAsFanart(DBMovie) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) ' + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + ElseIf ScrapeType = Enums.ScrapeType.FullAsk OrElse ScrapeType = Enums.ScrapeType.NewAsk OrElse ScrapeType = Enums.ScrapeType.MarkAsk OrElse ScrapeType = Enums.ScrapeType.UpdateAsk Then + MsgBox(Master.eLang.GetString(78, "Fanart of your preferred size could not be found. Please choose another."), MsgBoxStyle.Information, Master.eLang.GetString(77, "No Preferred Size:")) + + Using dImgSelect As New dlgImgSelect + dImgSelect.IMDBURL = MySettings.IMDBURL + fResults = dImgSelect.ShowDialog(DBMovie, Enums.ImageType.Fanart) + If Not String.IsNullOrEmpty(fResults.ImagePath) Then + DBMovie.FanartPath = fResults.ImagePath + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.FanartItem, True) + If Master.GlobalScrapeMod.NFO AndAlso Not Master.eSettings.NoSaveImagesToNfo Then + DBMovie.Movie.Fanart = fResults.Fanart + End If + End If + End Using + End If + End If + End If + End If + If Master.GlobalScrapeMod.Trailer AndAlso MySettings.DownloadTrailers Then + tURL = Trailer.DownloadSingleTrailer(DBMovie.Filename, DBMovie.Movie.IMDBID, DBMovie.isSingle, DBMovie.Movie.Trailer) + If Not String.IsNullOrEmpty(tURL) Then + If tURL.Substring(0, 22) = "http://www.youtube.com" Then + If AdvancedSettings.GetBooleanSetting("UseTMDBTrailerXBMC", False) Then + DBMovie.Movie.Trailer = Replace(tURL, "http://www.youtube.com/watch?v=", "plugin://plugin.video.youtube/?action=play_video&videoid=") + Else + DBMovie.Movie.Trailer = tURL + End If + ElseIf tURL.Substring(0, 7) = "http://" Then + DBMovie.Movie.Trailer = tURL + Else + DBMovie.TrailerPath = tURL + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.TrailerItem, True) + End If + End If + End If + If Master.GlobalScrapeMod.Extra Then + If Master.eSettings.AutoET AndAlso DBMovie.isSingle Then + Try + ScrapeImages.GetPreferredFAasET(DBMovie.Movie.IMDBID, DBMovie.Filename) + RaiseEvent MovieScraperEvent(Enums.MovieScraperEventType.ThumbsItem, True) + Catch ex As Exception + End Try + End If + End If + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then + For Each act As MediaContainers.Person In DBMovie.Movie.Actors + Dim img As New Images + img.FromWeb(act.Thumb) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(DBMovie.Filename).FullName, DBMovie) + End If + Next + End If + Master.GlobalScrapeMod = saveModifier + Return New Interfaces.ModuleResult With {.breakChain = False, .BoolProperty = didEts} + End Function + + Sub SaveSettings() + AdvancedSettings.SetBooleanSetting("DoFullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("DoFullCrews", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("DoTitle", ConfigOptions.bTitle) + AdvancedSettings.SetBooleanSetting("DoYear", ConfigOptions.bYear) + AdvancedSettings.SetBooleanSetting("DoMPAA", ConfigOptions.bMPAA) + AdvancedSettings.SetBooleanSetting("DoRelease", ConfigOptions.bRelease) + AdvancedSettings.SetBooleanSetting("DoRuntime", ConfigOptions.bRuntime) + AdvancedSettings.SetBooleanSetting("DoRating", ConfigOptions.bRating) + AdvancedSettings.SetBooleanSetting("DoVotes", ConfigOptions.bVotes) + AdvancedSettings.SetBooleanSetting("DoStudio", ConfigOptions.bStudio) + AdvancedSettings.SetBooleanSetting("DoTagline", ConfigOptions.bTagline) + AdvancedSettings.SetBooleanSetting("DoOutline", ConfigOptions.bOutline) + AdvancedSettings.SetBooleanSetting("DoPlot", ConfigOptions.bPlot) + AdvancedSettings.SetBooleanSetting("DoCast", ConfigOptions.bCast) + AdvancedSettings.SetBooleanSetting("DoDirector", ConfigOptions.bDirector) + AdvancedSettings.SetBooleanSetting("DoWriters", ConfigOptions.bWriters) + AdvancedSettings.SetBooleanSetting("DoProducers", ConfigOptions.bProducers) + AdvancedSettings.SetBooleanSetting("DoGenres", ConfigOptions.bGenre) + AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigOptions.bTrailer) + AdvancedSettings.SetBooleanSetting("DoMusic", ConfigOptions.bMusicBy) + AdvancedSettings.SetBooleanSetting("DoOtherCrews", ConfigOptions.bOtherCrew) + AdvancedSettings.SetBooleanSetting("DoCountry", ConfigOptions.bCountry) + AdvancedSettings.SetBooleanSetting("DoTop250", ConfigOptions.bTop250) + AdvancedSettings.SetBooleanSetting("DoCert", ConfigOptions.bCert) + AdvancedSettings.SetSetting("IMDBURL", MySettings.IMDBURL) + + AdvancedSettings.SetBooleanSetting("FullCast", ConfigOptions.bFullCast) + AdvancedSettings.SetBooleanSetting("FullCrew", ConfigOptions.bFullCrew) + AdvancedSettings.SetBooleanSetting("UseOFDBTitle", MySettings.UseOFDBTitle) + AdvancedSettings.SetBooleanSetting("UseOFDBOutline", MySettings.UseOFDBOutline) + AdvancedSettings.SetBooleanSetting("UseOFDBPlot", MySettings.UseOFDBPlot) + AdvancedSettings.SetBooleanSetting("UseOFDBGenre", MySettings.UseOFDBGenre) + AdvancedSettings.SetBooleanSetting("DownloadTraliers", MySettings.DownloadTrailers) + + AdvancedSettings.SetSetting("TrailerTimeout", MySettings.TrailerTimeout.ToString) + AdvancedSettings.SetBooleanSetting("UseIMPA", MySettings.UseIMPA) + AdvancedSettings.SetBooleanSetting("UseMPDB", MySettings.UseMPDB) + AdvancedSettings.SetBooleanSetting("UseTMDB", MySettings.UseTMDB) + AdvancedSettings.SetBooleanSetting("UseIMDBTrailer", MySettings.UseIMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailer", MySettings.UseTMDBTrailer) + AdvancedSettings.SetBooleanSetting("UseTMDBTrailerXBMC", MySettings.UseTMDBTrailerXBMC) + + AdvancedSettings.SetSetting("ManualETSize", MySettings.ManualETSize.ToString) + AdvancedSettings.SetSetting("ActorThumbsSize", MySettings.ActorThumbsSize.ToString) + AdvancedSettings.SetSetting("UseTMDBTrailerPref", MySettings.UseTMDBTrailerPref.ToString) + + AdvancedSettings.SetBooleanSetting("DoPoster", ConfigScrapeModifier.Poster) + AdvancedSettings.SetBooleanSetting("DoFanart", ConfigScrapeModifier.Fanart) + 'AdvancedSettings.SetBooleanSetting("DoTrailer", ConfigScrapeModifier.Trailer) + End Sub + + Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupPostScraper + MySettings.DownloadTrailers = _setupPost.chkDownloadTrailer.Checked + MySettings.UseIMDBTrailer = _setupPost.chkTrailerIMDB.Checked + MySettings.UseTMDBTrailer = _setupPost.chkTrailerTMDB.Checked + MySettings.UseTMDBTrailerXBMC = _setupPost.chkTrailerTMDBXBMC.Checked + MySettings.TrailerTimeout = Convert.ToInt32(_setupPost.txtTimeout.Text) + MySettings.UseTMDB = _setupPost.chkUseTMDB.Checked + MySettings.UseIMPA = _setupPost.chkUseIMPA.Checked + MySettings.UseMPDB = _setupPost.chkUseMPDB.Checked + MySettings.ManualETSize = _setupPost.cbManualETSize.Text + MySettings.ActorThumbsSize = _setupPost.cbActorThumbsSize.Text + MySettings.UseTMDBTrailerPref = _setupPost.cbTrailerTMDBPref.Text + ConfigScrapeModifier.Poster = _setupPost.chkScrapePoster.Checked + ConfigScrapeModifier.Fanart = _setupPost.chkScrapeFanart.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + RemoveHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + _setupPost.Dispose() + End If + End Sub + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberMovieScraperModule.SaveSetupScraper + If Not String.IsNullOrEmpty(_setup.txtIMDBURL.Text) Then + MySettings.IMDBURL = Strings.Replace(_setup.txtIMDBURL.Text, "http://", String.Empty) + Else + MySettings.IMDBURL = "akas.imdb.com" + End If + MySettings.UseOFDBTitle = _setup.chkOFDBTitle.Checked + MySettings.UseOFDBOutline = _setup.chkOFDBOutline.Checked + MySettings.UseOFDBPlot = _setup.chkOFDBPlot.Checked + MySettings.UseOFDBGenre = _setup.chkOFDBGenre.Checked + ConfigOptions.bTitle = _setup.chkTitle.Checked + ConfigOptions.bYear = _setup.chkYear.Checked + ConfigOptions.bMPAA = _setup.chkMPAA.Checked + ConfigOptions.bRelease = _setup.chkRelease.Checked + ConfigOptions.bRuntime = _setup.chkRuntime.Checked + ConfigOptions.bRating = _setup.chkRating.Checked + ConfigOptions.bVotes = _setup.chkVotes.Checked + ConfigOptions.bStudio = _setup.chkStudio.Checked + ConfigOptions.bTagline = _setup.chkTagline.Checked + ConfigOptions.bOutline = _setup.chkOutline.Checked + ConfigOptions.bPlot = _setup.chkPlot.Checked + ConfigOptions.bCast = _setup.chkCast.Checked + ConfigOptions.bDirector = _setup.chkDirector.Checked + ConfigOptions.bWriters = _setup.chkWriters.Checked + ConfigOptions.bProducers = _setup.chkProducers.Checked + ConfigOptions.bGenre = _setup.chkGenre.Checked + ConfigOptions.bTrailer = _setup.chkTrailer.Checked + ConfigOptions.bMusicBy = _setup.chkMusicBy.Checked + ConfigOptions.bOtherCrew = _setup.chkCrew.Checked + ConfigOptions.bCountry = _setup.chkCountry.Checked + ConfigOptions.bTop250 = _setup.chkTop250.Checked + ConfigOptions.bCert = _setup.chkCertification.Checked + ConfigOptions.bFullCrew = _setup.chkFullCrew.Checked + ConfigOptions.bFullCast = _setup.chkFullCast.Checked + SaveSettings() + 'ModulesManager.Instance.SaveSettings() + If DoDispose Then + RemoveHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + RemoveHandler _setup.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + _setup.Dispose() + End If + End Sub + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.Scraper + 'LoadSettings() + IMDB.IMDBURL = MySettings.IMDBURL + IMDB.UseOFDBTitle = MySettings.UseOFDBTitle + IMDB.UseOFDBOutline = MySettings.UseOFDBOutline + IMDB.UseOFDBPlot = MySettings.UseOFDBPlot + IMDB.UseOFDBGenre = MySettings.UseOFDBGenre + Dim tTitle As String = String.Empty + Dim OldTitle As String = DBMovie.Movie.Title + + If Master.GlobalScrapeMod.NFO AndAlso Not Master.GlobalScrapeMod.DoSearch Then + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + IMDB.GetMovieInfo(DBMovie.Movie.IMDBID, DBMovie.Movie, Options.bFullCrew, Options.bFullCast, False, Options, False) + ElseIf Not ScrapeType = Enums.ScrapeType.SingleScrape Then + DBMovie.Movie = IMDB.GetSearchMovieInfo(DBMovie.Movie.Title, DBMovie, ScrapeType, Options) + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End If + + If ScrapeType = Enums.ScrapeType.SingleScrape AndAlso Master.GlobalScrapeMod.DoSearch _ + AndAlso ModulesManager.Instance.externalScrapersModules.OrderBy(Function(y) y.ScraperOrder).FirstOrDefault(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled).AssemblyName = _AssemblyName Then + DBMovie.Movie.IMDBID = String.Empty + DBMovie.ClearExtras = True + DBMovie.PosterPath = String.Empty + DBMovie.FanartPath = String.Empty + DBMovie.TrailerPath = String.Empty + DBMovie.ExtraPath = String.Empty + DBMovie.SubPath = String.Empty + DBMovie.NfoPath = String.Empty + DBMovie.Movie.Clear() + End If + If String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + Select Case ScrapeType + Case Enums.ScrapeType.FilterAuto, Enums.ScrapeType.FullAuto, Enums.ScrapeType.MarkAuto, Enums.ScrapeType.NewAuto, Enums.ScrapeType.UpdateAuto + Return New Interfaces.ModuleResult With {.breakChain = False} + End Select + If ScrapeType = Enums.ScrapeType.SingleScrape Then + Using dSearch As New dlgIMDBSearchResults + dSearch.IMDBURL = MySettings.IMDBURL + Dim tmpTitle As String = DBMovie.Movie.Title + If String.IsNullOrEmpty(tmpTitle) Then + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name, False) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + tmpTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name, False) + Else + tmpTitle = StringUtils.FilterName(If(DBMovie.isSingle, Directory.GetParent(DBMovie.Filename).Name, Path.GetFileNameWithoutExtension(DBMovie.Filename))) + End If + End If + Dim filterOptions As Structures.ScrapeOptions = Functions.ScrapeOptionsAndAlso(Options, ConfigOptions) + If dSearch.ShowDialog(tmpTitle, filterOptions) = Windows.Forms.DialogResult.OK Then + If Not String.IsNullOrEmpty(Master.tmpMovie.IMDBID) Then + DBMovie.Movie.IMDBID = Master.tmpMovie.IMDBID + End If + If Not String.IsNullOrEmpty(DBMovie.Movie.IMDBID) Then + + Master.currMovie.ClearExtras = True + Master.currMovie.PosterPath = String.Empty + Master.currMovie.FanartPath = String.Empty + Master.currMovie.TrailerPath = String.Empty + Master.currMovie.ExtraPath = String.Empty + Master.currMovie.SubPath = String.Empty + Master.currMovie.NfoPath = String.Empty + + + IMDB.GetMovieInfo(DBMovie.Movie.IMDBID, DBMovie.Movie, filterOptions.bFullCrew, filterOptions.bFullCast, False, filterOptions, False) + End If + Else + Return New Interfaces.ModuleResult With {.breakChain = False, .Cancelled = True} + End If + End Using + End If + End If + + If Not String.IsNullOrEmpty(DBMovie.Movie.Title) Then + tTitle = StringUtils.FilterTokens(DBMovie.Movie.Title) + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = tTitle + If Master.eSettings.DisplayYear AndAlso Not String.IsNullOrEmpty(DBMovie.Movie.Year) Then + DBMovie.ListTitle = String.Format("{0} ({1})", tTitle, DBMovie.Movie.Year) + Else + DBMovie.ListTitle = tTitle + End If + Else + If FileUtils.Common.isVideoTS(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).Name) + ElseIf FileUtils.Common.isBDRip(DBMovie.Filename) Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(Directory.GetParent(Directory.GetParent(DBMovie.Filename).FullName).FullName).Name) + Else + If DBMovie.UseFolder AndAlso DBMovie.isSingle Then + DBMovie.ListTitle = StringUtils.FilterName(Directory.GetParent(DBMovie.Filename).Name) + Else + DBMovie.ListTitle = StringUtils.FilterName(Path.GetFileNameWithoutExtension(DBMovie.Filename)) + End If + End If + If Not OldTitle = DBMovie.Movie.Title OrElse String.IsNullOrEmpty(DBMovie.Movie.SortTitle) Then DBMovie.Movie.SortTitle = DBMovie.ListTitle + End If + + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Function SelectImageOfType(ByRef mMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Interfaces.ModuleResult Implements Interfaces.EmberMovieScraperModule.SelectImageOfType + If preload AndAlso _DLType = Enums.ImageType.Fanart AndAlso Not IsNothing(dFImgSelect) Then + pResults = dFImgSelect.ShowDialog() + dFImgSelect = Nothing + Else + Using dImgSelect As New dlgImgSelect + If preload Then + dFImgSelect = New dlgImgSelect + dFImgSelect.PreLoad(mMovie, Enums.ImageType.Fanart, _isEdit) + End If + dImgSelect.IMDBURL = MySettings.IMDBURL + pResults = dImgSelect.ShowDialog(mMovie, _DLType, _isEdit) + End Using + End If + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + Public Sub PostScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.PostScraperOrderChanged + _setup.orderChanged() + End Sub + + Public Sub ScraperOrderChanged() Implements EmberAPI.Interfaces.EmberMovieScraperModule.ScraperOrderChanged + _setupPost.orderChanged() + End Sub + +#End Region 'Methods + +#Region "Nested Types" + + Structure _MySettings + +#Region "Fields" + + Dim DownloadTrailers As Boolean + Dim IMDBURL As String + Dim UseOFDBGenre As Boolean + Dim UseOFDBOutline As Boolean + Dim UseOFDBPlot As Boolean + Dim UseOFDBTitle As Boolean + Dim TrailerTimeout As Integer + Dim UseTMDB As Boolean + Dim UseIMPA As Boolean + Dim UseMPDB As Boolean + Dim UseTMDBTrailer As Boolean + Dim UseIMDBTrailer As Boolean + Dim UseTMDBTrailerXBMC As Boolean + Dim ManualETSize As String + Dim ActorThumbsSize As String + Dim UseTMDBTrailerPref As String +#End Region 'Fields + + End Structure + +#End Region 'Nested Types + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/scraperTVNativeModule.vb b/Addons/scraper.YouTube.Trailer/scraperTVNativeModule.vb new file mode 100644 index 0000000..450e6d6 --- /dev/null +++ b/Addons/scraper.YouTube.Trailer/scraperTVNativeModule.vb @@ -0,0 +1,221 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see <http://www.gnu.org/licenses/>. # +' ################################################################################ + +Imports System.IO +Imports EmberAPI + +''' <summary> +''' Native Scraper +''' </summary> +''' <remarks></remarks> +Public Class EmberNativeTVScraperModule + Implements Interfaces.EmberTVScraperModule + +#Region "Fields" + + Public Shared TVScraper As New Scraper + + Private _Name As String = "Ember Native TV Scrapers" + Private _PostScraperEnabled As Boolean = False + Private _ScraperEnabled As Boolean = False + Private _setup As frmTVInfoSettingsHolder + Private _setupPost As frmTVMediaSettingsHolder +#End Region 'Fields + +#Region "Events" + + Public Event ModuleSettingsChanged() Implements Interfaces.EmberTVScraperModule.ModuleSettingsChanged + + Public Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberTVScraperModule.SetupPostScraperChanged + + Public Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) Implements Interfaces.EmberTVScraperModule.SetupScraperChanged + + Public Event TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) Implements Interfaces.EmberTVScraperModule.TVScraperEvent + +#End Region 'Events + +#Region "Properties" + + Public ReadOnly Property IsBusy() As Boolean Implements Interfaces.EmberTVScraperModule.IsBusy + Get + Return TVScraper.IsBusy + End Get + End Property + + Public ReadOnly Property IsPostScraper() As Boolean Implements Interfaces.EmberTVScraperModule.IsPostScraper + Get + Return True + End Get + End Property + + Public ReadOnly Property IsScraper() As Boolean Implements Interfaces.EmberTVScraperModule.IsScraper + Get + Return True + End Get + End Property + + Public ReadOnly Property ModuleName() As String Implements Interfaces.EmberTVScraperModule.ModuleName + Get + Return _Name + End Get + End Property + + Public ReadOnly Property ModuleVersion() As String Implements Interfaces.EmberTVScraperModule.ModuleVersion + Get + Return FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly.Location).FileVersion.ToString + End Get + End Property + + Public Property PostScraperEnabled() As Boolean Implements Interfaces.EmberTVScraperModule.PostScraperEnabled + Get + Return _PostScraperEnabled + End Get + Set(ByVal value As Boolean) + _PostScraperEnabled = value + End Set + End Property + + Public Property ScraperEnabled() As Boolean Implements Interfaces.EmberTVScraperModule.ScraperEnabled + Get + Return _ScraperEnabled + End Get + Set(ByVal value As Boolean) + _ScraperEnabled = value + End Set + End Property + +#End Region 'Properties + +#Region "Methods" + + Public Sub CancelAsync() Implements Interfaces.EmberTVScraperModule.CancelAsync + TVScraper.CancelAsync() + End Sub + + Public Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String, ByRef epDet As MediaContainers.EpisodeDetails) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ChangeEpisode + epDet = TVScraper.ChangeEpisode(ShowID, TVDBID, Lang) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function GetLangs(ByVal sMirror As String, ByRef Langs As List(Of Containers.TVLanguage)) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetLangs + Langs = TVScraper.GetLangs(sMirror) + Return New Interfaces.ModuleResult With {.breakChain = True} + End Function + + Public Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByRef epDetails As MediaContainers.EpisodeDetails) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetSingleEpisode + epDetails = TVScraper.GetSingleEpisode(ShowID, TVDBID, Season, Episode, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images, ByRef Image As Images) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.GetSingleImage + Image = TVScraper.GetSingleImage(Title, ShowID, TVDBID, Type, Season, Episode, Lang, Ordering, CurrentImage) + Return New Interfaces.ModuleResult With {.breakChain = True} + End Function + + Public Sub Handler_ScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent TVScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Sub Init(ByVal sAssemblyName As String) Implements Interfaces.EmberTVScraperModule.Init + AddHandler TVScraper.ScraperEvent, AddressOf Handler_ScraperEvent + End Sub + + Public Function InjectSetupPostScraper() As Containers.SettingsPanel Implements Interfaces.EmberTVScraperModule.InjectSetupPostScraper + Dim SPanel As New Containers.SettingsPanel + _setupPost = New frmTVMediaSettingsHolder + _setupPost.cbEnabled.Checked = _PostScraperEnabled + SPanel.Name = String.Concat(Me._Name, "PostScraper") + SPanel.Text = Master.eLang.GetString(0, "Ember Native TV Scrapers") + SPanel.Type = Master.eLang.GetString(698, "TV Shows", True) + SPanel.ImageIndex = If(Me._ScraperEnabled, 9, 10) + SPanel.Order = 100 + SPanel.Panel = Me._setupPost.pnlSettings + SPanel.Parent = "pnlTVMedia" + AddHandler _setupPost.SetupPostScraperChanged, AddressOf Handle_SetupPostScraperChanged + AddHandler _setupPost.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged + Return SPanel + End Function + + 'Public Event ScraperUpdateMediaList(ByVal col As Integer, ByVal v As Boolean) Implements Interfaces.EmberTVScraperModule.ScraperUpdateMediaList + Public Function InjectSetupScraper() As Containers.SettingsPanel Implements Interfaces.EmberTVScraperModule.InjectSetupScraper + Dim SPanel As New Containers.SettingsPanel + _setup = New frmTVInfoSettingsHolder + _setup.cbEnabled.Checked = _ScraperEnabled + SPanel.Name = String.Concat(Me._Name, "Scraper") + SPanel.Text = Master.eLang.GetString(0, "Ember Native TV Scrapers") + SPanel.Prefix = "NativeTV_" + SPanel.Type = Master.eLang.GetString(698, "TV Shows", True) + SPanel.ImageIndex = If(Me._ScraperEnabled, 9, 10) + SPanel.Order = 100 + SPanel.Panel = Me._setup.pnlSettings + SPanel.Parent = "pnlTVData" + AddHandler _setup.SetupScraperChanged, AddressOf Handle_SetupScraperChanged + AddHandler _setup.ModuleSettingsChanged, AddressOf Handle_PostModuleSettingsChanged + Return SPanel + End Function + Private Sub Handle_ModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_PostModuleSettingsChanged() + RaiseEvent ModuleSettingsChanged() + End Sub + + Private Sub Handle_SetupPostScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + PostScraperEnabled = state + RaiseEvent SetupPostScraperChanged(String.Concat(Me._Name, "PostScraper"), state, difforder) + End Sub + + Private Sub Handle_SetupScraperChanged(ByVal state As Boolean, ByVal difforder As Integer) + ScraperEnabled = state + RaiseEvent SetupScraperChanged(String.Concat(Me._Name, "Scraper"), state, difforder) + End Sub + Public Function PostScraper(ByRef DBTV As Structures.DBTV, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.PostScraper + End Function + + Public Function SaveImages() As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.SaveImages + TVScraper.SaveImages() + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberTVScraperModule.SaveSetupPostScraper + End Sub + + Public Sub SaveSetupScraper(ByVal DoDispose As Boolean) Implements Interfaces.EmberTVScraperModule.SaveSetupScraper + End Sub + + Public Function ScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ScrapeEpisode + TVScraper.ScrapeEpisode(ShowID, ShowTitle, TVDBID, iEpisode, iSeason, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function Scraper(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.Scraper + TVScraper.SingleScrape(ShowID, ShowTitle, TVDBID, Lang, Ordering, Options, ScrapeType, WithCurrent) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + + Public Function ScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Interfaces.ModuleResult Implements Interfaces.EmberTVScraperModule.ScrapeSeason + TVScraper.ScrapeSeason(ShowID, ShowTitle, TVDBID, iSeason, Lang, Ordering, Options) + Return New Interfaces.ModuleResult With {.breakChain = False} + End Function + +#End Region 'Methods + +End Class \ No newline at end of file diff --git a/Addons/scraper.YouTube.Trailer/x64/SQLite.Interop.dll b/Addons/scraper.YouTube.Trailer/x64/SQLite.Interop.dll new file mode 100644 index 0000000..860c0e5 Binary files /dev/null and b/Addons/scraper.YouTube.Trailer/x64/SQLite.Interop.dll differ diff --git a/Addons/scraper.YouTube.Trailer/x86/SQLite.Interop.dll b/Addons/scraper.YouTube.Trailer/x86/SQLite.Interop.dll new file mode 100644 index 0000000..6f6fd4f Binary files /dev/null and b/Addons/scraper.YouTube.Trailer/x86/SQLite.Interop.dll differ diff --git a/Ember Media Manager.sln b/Ember Media Manager.sln index bfd1c7b..d667315 100644 --- a/Ember Media Manager.sln +++ b/Ember Media Manager.sln @@ -7,15 +7,19 @@ Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Ember Media Manager", "Embe {EF6A550E-DD76-4F4D-8250-8598140F828B} = {EF6A550E-DD76-4F4D-8250-8598140F828B} {2A08A524-88DA-432F-92E6-8DC63C5376DA} = {2A08A524-88DA-432F-92E6-8DC63C5376DA} {E567C031-1F7B-4637-9B3A-806988DE50CF} = {E567C031-1F7B-4637-9B3A-806988DE50CF} - {64D6F035-F186-4193-AF35-D20126B8DA64} = {64D6F035-F186-4193-AF35-D20126B8DA64} {84B2143A-D04F-4262-923D-21AEDF86E2B7} = {84B2143A-D04F-4262-923D-21AEDF86E2B7} + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8} = {EFC11645-FAB4-4C30-A498-29F5ECDF77E8} + {8DAFAF56-AD78-4B47-866F-E8179511AF5B} = {8DAFAF56-AD78-4B47-866F-E8179511AF5B} {6FE33C61-E2C2-4982-9536-63AEF0A98AAA} = {6FE33C61-E2C2-4982-9536-63AEF0A98AAA} {859C1085-518B-49D2-9C84-D91C4094097F} = {859C1085-518B-49D2-9C84-D91C4094097F} {F6CACA89-E8E4-45D9-B942-97FBD4ADD106} = {F6CACA89-E8E4-45D9-B942-97FBD4ADD106} + {2EB03DAA-1A5D-47C5-9883-56DCD0F70D23} = {2EB03DAA-1A5D-47C5-9883-56DCD0F70D23} {B413DEAF-4FDC-416A-B3E0-968C1C8F3F83} = {B413DEAF-4FDC-416A-B3E0-968C1C8F3F83} {B0BDF9C2-EB9C-4090-B9A9-B703DF00CCEF} = {B0BDF9C2-EB9C-4090-B9A9-B703DF00CCEF} + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6} = {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6} {E7FDD1C9-BCF7-4624-B033-D3888E422A8B} = {E7FDD1C9-BCF7-4624-B033-D3888E422A8B} {62356BCF-D15A-4BF1-B980-395CEC0004A9} = {62356BCF-D15A-4BF1-B980-395CEC0004A9} + {A9188CF1-BD07-4D24-BC4A-906A43012F37} = {A9188CF1-BD07-4D24-BC4A-906A43012F37} EndProjectSection EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "EmberAPI", "EmberAPI\EmberAPI.vbproj", "{208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}" @@ -48,79 +52,328 @@ Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.EmberCore", "Addons EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.EmberCore.XML", "Addons\scraper.EmberCore.XML\scraper.EmberCore.XML.vbproj", "{E567C031-1F7B-4637-9B3A-806988DE50CF}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{8564C91B-7F49-482F-A4B3-C3D7E818648F}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.Config = .nuget\NuGet.Config - .nuget\NuGet.exe = .nuget\NuGet.exe - .nuget\NuGet.targets = .nuget\NuGet.targets +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.EmberCore.TMDB", "Addons\scraper.EmberCore.TMDB\scraper.EmberCore.TMDB.vbproj", "{2EB03DAA-1A5D-47C5-9883-56DCD0F70D23}" + ProjectSection(ProjectDependencies) = postProject + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8} = {EFC11645-FAB4-4C30-A498-29F5ECDF77E8} EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WatTmdb", "WatTmdb\WatTmdb.csproj", "{EFC11645-FAB4-4C30-A498-29F5ECDF77E8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FanartTVAPI", "FanartTVAPI\FanartTVAPI.csproj", "{70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RottenTomatoesAPI", "RottenTomatoesAPI\RottenTomatoesAPI.csproj", "{8DAFAF56-AD78-4B47-866F-E8179511AF5B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Removed", "Removed", "{620861D6-4C88-4A5F-B3D5-C1D45468D16F}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.FanartTV.Poster", "Addons\scraper.FanartTV.Poster\scraper.FanartTV.Poster.vbproj", "{A5277330-A443-46AB-A058-016A3B6AF8AC}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.IMDB.Data", "Addons\scraper.IMDB.Data\scraper.IMDB.Data.vbproj", "{D3C1A3C4-A060-40DF-ACE4-143F7F102A24}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.IMDB.Poster", "Addons\scraper.IMDB.Poster\scraper.IMDB.Poster.vbproj", "{6A5A835E-D798-4A21-963C-C8E7A5F99D57}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.IMPA.Poster", "Addons\scraper.IMPA.Poster\scraper.IMPA.Poster.vbproj", "{D9878E03-87D7-429E-AA0C-A7116A31FA7F}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.MPDB.Poster", "Addons\scraper.MPDB.Poster\scraper.MPDB.Poster.vbproj", "{72A8EF23-3379-4C72-B212-A14A3C286D9C}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.OFDB.Data", "Addons\scraper.OFDB.Data\scraper.OFDB.Data.vbproj", "{39C49E1A-75BA-4AD1-9286-58E83D22BC1E}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.TMDB.Data", "Addons\scraper.TMDB.Data\scraper.TMDB.Data.vbproj", "{A9188CF1-BD07-4D24-BC4A-906A43012F37}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.TMDB.Poster", "Addons\scraper.TMDB.Poster\scraper.TMDB.Poster.vbproj", "{2B684C20-7E1A-4DA0-8C26-96DA1407B2C3}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.TVDB.Data", "Addons\scraper.TVDB.Data\scraper.TVDB.Data.vbproj", "{F642E719-61E2-4847-AB55-DB47C0F38649}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.TVDB.Poster", "Addons\scraper.TVDB.Poster\scraper.TVDB.Poster.vbproj", "{3FAF50AA-AD5F-455A-8711-6D791C457F0F}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "scraper.YouTube.Trailer", "Addons\scraper.YouTube.Trailer\scraper.YouTube.Trailer.vbproj", "{194445BE-3721-4270-984D-FA978D5F34A0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9B57D3AB-AF12-4012-B945-284C2448DC81}.Debug|Any CPU.ActiveCfg = Debug|x86 + {9B57D3AB-AF12-4012-B945-284C2448DC81}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {9B57D3AB-AF12-4012-B945-284C2448DC81}.Debug|Mixed Platforms.Build.0 = Debug|x86 {9B57D3AB-AF12-4012-B945-284C2448DC81}.Debug|x86.ActiveCfg = Debug|x86 {9B57D3AB-AF12-4012-B945-284C2448DC81}.Debug|x86.Build.0 = Debug|x86 + {9B57D3AB-AF12-4012-B945-284C2448DC81}.Release|Any CPU.ActiveCfg = Release|x86 + {9B57D3AB-AF12-4012-B945-284C2448DC81}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {9B57D3AB-AF12-4012-B945-284C2448DC81}.Release|Mixed Platforms.Build.0 = Release|x86 {9B57D3AB-AF12-4012-B945-284C2448DC81}.Release|x86.ActiveCfg = Release|x86 {9B57D3AB-AF12-4012-B945-284C2448DC81}.Release|x86.Build.0 = Release|x86 + {208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}.Debug|Any CPU.ActiveCfg = Debug|x86 + {208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}.Debug|Mixed Platforms.Build.0 = Debug|x86 {208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}.Debug|x86.ActiveCfg = Debug|x86 {208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}.Debug|x86.Build.0 = Debug|x86 + {208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}.Release|Any CPU.ActiveCfg = Release|x86 + {208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}.Release|Mixed Platforms.Build.0 = Release|x86 {208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}.Release|x86.ActiveCfg = Release|x86 {208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}.Release|x86.Build.0 = Release|x86 + {EAAB0601-6478-44D2-A39C-89B0850D7833}.Debug|Any CPU.ActiveCfg = Debug|x86 + {EAAB0601-6478-44D2-A39C-89B0850D7833}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {EAAB0601-6478-44D2-A39C-89B0850D7833}.Debug|Mixed Platforms.Build.0 = Debug|x86 {EAAB0601-6478-44D2-A39C-89B0850D7833}.Debug|x86.ActiveCfg = Debug|x86 {EAAB0601-6478-44D2-A39C-89B0850D7833}.Debug|x86.Build.0 = Debug|x86 + {EAAB0601-6478-44D2-A39C-89B0850D7833}.Release|Any CPU.ActiveCfg = Release|x86 + {EAAB0601-6478-44D2-A39C-89B0850D7833}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {EAAB0601-6478-44D2-A39C-89B0850D7833}.Release|Mixed Platforms.Build.0 = Release|x86 {EAAB0601-6478-44D2-A39C-89B0850D7833}.Release|x86.ActiveCfg = Release|x86 {EAAB0601-6478-44D2-A39C-89B0850D7833}.Release|x86.Build.0 = Release|x86 + {B413DEAF-4FDC-416A-B3E0-968C1C8F3F83}.Debug|Any CPU.ActiveCfg = Debug|x86 + {B413DEAF-4FDC-416A-B3E0-968C1C8F3F83}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {B413DEAF-4FDC-416A-B3E0-968C1C8F3F83}.Debug|Mixed Platforms.Build.0 = Debug|x86 {B413DEAF-4FDC-416A-B3E0-968C1C8F3F83}.Debug|x86.ActiveCfg = Debug|x86 {B413DEAF-4FDC-416A-B3E0-968C1C8F3F83}.Debug|x86.Build.0 = Debug|x86 + {B413DEAF-4FDC-416A-B3E0-968C1C8F3F83}.Release|Any CPU.ActiveCfg = Release|x86 + {B413DEAF-4FDC-416A-B3E0-968C1C8F3F83}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {B413DEAF-4FDC-416A-B3E0-968C1C8F3F83}.Release|Mixed Platforms.Build.0 = Release|x86 {B413DEAF-4FDC-416A-B3E0-968C1C8F3F83}.Release|x86.ActiveCfg = Release|x86 {B413DEAF-4FDC-416A-B3E0-968C1C8F3F83}.Release|x86.Build.0 = Release|x86 + {F6CACA89-E8E4-45D9-B942-97FBD4ADD106}.Debug|Any CPU.ActiveCfg = Debug|x86 + {F6CACA89-E8E4-45D9-B942-97FBD4ADD106}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {F6CACA89-E8E4-45D9-B942-97FBD4ADD106}.Debug|Mixed Platforms.Build.0 = Debug|x86 {F6CACA89-E8E4-45D9-B942-97FBD4ADD106}.Debug|x86.ActiveCfg = Debug|x86 {F6CACA89-E8E4-45D9-B942-97FBD4ADD106}.Debug|x86.Build.0 = Debug|x86 + {F6CACA89-E8E4-45D9-B942-97FBD4ADD106}.Release|Any CPU.ActiveCfg = Release|x86 + {F6CACA89-E8E4-45D9-B942-97FBD4ADD106}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {F6CACA89-E8E4-45D9-B942-97FBD4ADD106}.Release|Mixed Platforms.Build.0 = Release|x86 {F6CACA89-E8E4-45D9-B942-97FBD4ADD106}.Release|x86.ActiveCfg = Release|x86 {F6CACA89-E8E4-45D9-B942-97FBD4ADD106}.Release|x86.Build.0 = Release|x86 + {B0BDF9C2-EB9C-4090-B9A9-B703DF00CCEF}.Debug|Any CPU.ActiveCfg = Debug|x86 + {B0BDF9C2-EB9C-4090-B9A9-B703DF00CCEF}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {B0BDF9C2-EB9C-4090-B9A9-B703DF00CCEF}.Debug|Mixed Platforms.Build.0 = Debug|x86 {B0BDF9C2-EB9C-4090-B9A9-B703DF00CCEF}.Debug|x86.ActiveCfg = Debug|x86 {B0BDF9C2-EB9C-4090-B9A9-B703DF00CCEF}.Debug|x86.Build.0 = Debug|x86 + {B0BDF9C2-EB9C-4090-B9A9-B703DF00CCEF}.Release|Any CPU.ActiveCfg = Release|x86 + {B0BDF9C2-EB9C-4090-B9A9-B703DF00CCEF}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {B0BDF9C2-EB9C-4090-B9A9-B703DF00CCEF}.Release|Mixed Platforms.Build.0 = Release|x86 {B0BDF9C2-EB9C-4090-B9A9-B703DF00CCEF}.Release|x86.ActiveCfg = Release|x86 {B0BDF9C2-EB9C-4090-B9A9-B703DF00CCEF}.Release|x86.Build.0 = Release|x86 + {84B2143A-D04F-4262-923D-21AEDF86E2B7}.Debug|Any CPU.ActiveCfg = Debug|x86 + {84B2143A-D04F-4262-923D-21AEDF86E2B7}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {84B2143A-D04F-4262-923D-21AEDF86E2B7}.Debug|Mixed Platforms.Build.0 = Debug|x86 {84B2143A-D04F-4262-923D-21AEDF86E2B7}.Debug|x86.ActiveCfg = Debug|x86 {84B2143A-D04F-4262-923D-21AEDF86E2B7}.Debug|x86.Build.0 = Debug|x86 + {84B2143A-D04F-4262-923D-21AEDF86E2B7}.Release|Any CPU.ActiveCfg = Release|x86 + {84B2143A-D04F-4262-923D-21AEDF86E2B7}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {84B2143A-D04F-4262-923D-21AEDF86E2B7}.Release|Mixed Platforms.Build.0 = Release|x86 {84B2143A-D04F-4262-923D-21AEDF86E2B7}.Release|x86.ActiveCfg = Release|x86 {84B2143A-D04F-4262-923D-21AEDF86E2B7}.Release|x86.Build.0 = Release|x86 + {2A08A524-88DA-432F-92E6-8DC63C5376DA}.Debug|Any CPU.ActiveCfg = Debug|x86 + {2A08A524-88DA-432F-92E6-8DC63C5376DA}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {2A08A524-88DA-432F-92E6-8DC63C5376DA}.Debug|Mixed Platforms.Build.0 = Debug|x86 {2A08A524-88DA-432F-92E6-8DC63C5376DA}.Debug|x86.ActiveCfg = Debug|x86 {2A08A524-88DA-432F-92E6-8DC63C5376DA}.Debug|x86.Build.0 = Debug|x86 + {2A08A524-88DA-432F-92E6-8DC63C5376DA}.Release|Any CPU.ActiveCfg = Release|x86 + {2A08A524-88DA-432F-92E6-8DC63C5376DA}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {2A08A524-88DA-432F-92E6-8DC63C5376DA}.Release|Mixed Platforms.Build.0 = Release|x86 {2A08A524-88DA-432F-92E6-8DC63C5376DA}.Release|x86.ActiveCfg = Release|x86 {2A08A524-88DA-432F-92E6-8DC63C5376DA}.Release|x86.Build.0 = Release|x86 + {E7FDD1C9-BCF7-4624-B033-D3888E422A8B}.Debug|Any CPU.ActiveCfg = Debug|x86 + {E7FDD1C9-BCF7-4624-B033-D3888E422A8B}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {E7FDD1C9-BCF7-4624-B033-D3888E422A8B}.Debug|Mixed Platforms.Build.0 = Debug|x86 {E7FDD1C9-BCF7-4624-B033-D3888E422A8B}.Debug|x86.ActiveCfg = Debug|x86 {E7FDD1C9-BCF7-4624-B033-D3888E422A8B}.Debug|x86.Build.0 = Debug|x86 + {E7FDD1C9-BCF7-4624-B033-D3888E422A8B}.Release|Any CPU.ActiveCfg = Release|x86 + {E7FDD1C9-BCF7-4624-B033-D3888E422A8B}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {E7FDD1C9-BCF7-4624-B033-D3888E422A8B}.Release|Mixed Platforms.Build.0 = Release|x86 {E7FDD1C9-BCF7-4624-B033-D3888E422A8B}.Release|x86.ActiveCfg = Release|x86 {E7FDD1C9-BCF7-4624-B033-D3888E422A8B}.Release|x86.Build.0 = Release|x86 + {64D6F035-F186-4193-AF35-D20126B8DA64}.Debug|Any CPU.ActiveCfg = Debug|x86 + {64D6F035-F186-4193-AF35-D20126B8DA64}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 {64D6F035-F186-4193-AF35-D20126B8DA64}.Debug|x86.ActiveCfg = Debug|x86 - {64D6F035-F186-4193-AF35-D20126B8DA64}.Debug|x86.Build.0 = Debug|x86 + {64D6F035-F186-4193-AF35-D20126B8DA64}.Release|Any CPU.ActiveCfg = Release|x86 + {64D6F035-F186-4193-AF35-D20126B8DA64}.Release|Mixed Platforms.ActiveCfg = Release|x86 {64D6F035-F186-4193-AF35-D20126B8DA64}.Release|x86.ActiveCfg = Release|x86 - {64D6F035-F186-4193-AF35-D20126B8DA64}.Release|x86.Build.0 = Release|x86 + {6FE33C61-E2C2-4982-9536-63AEF0A98AAA}.Debug|Any CPU.ActiveCfg = Debug|x86 + {6FE33C61-E2C2-4982-9536-63AEF0A98AAA}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {6FE33C61-E2C2-4982-9536-63AEF0A98AAA}.Debug|Mixed Platforms.Build.0 = Debug|x86 {6FE33C61-E2C2-4982-9536-63AEF0A98AAA}.Debug|x86.ActiveCfg = Debug|x86 {6FE33C61-E2C2-4982-9536-63AEF0A98AAA}.Debug|x86.Build.0 = Debug|x86 + {6FE33C61-E2C2-4982-9536-63AEF0A98AAA}.Release|Any CPU.ActiveCfg = Release|x86 + {6FE33C61-E2C2-4982-9536-63AEF0A98AAA}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {6FE33C61-E2C2-4982-9536-63AEF0A98AAA}.Release|Mixed Platforms.Build.0 = Release|x86 {6FE33C61-E2C2-4982-9536-63AEF0A98AAA}.Release|x86.ActiveCfg = Release|x86 {6FE33C61-E2C2-4982-9536-63AEF0A98AAA}.Release|x86.Build.0 = Release|x86 + {859C1085-518B-49D2-9C84-D91C4094097F}.Debug|Any CPU.ActiveCfg = Debug|x86 + {859C1085-518B-49D2-9C84-D91C4094097F}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {859C1085-518B-49D2-9C84-D91C4094097F}.Debug|Mixed Platforms.Build.0 = Debug|x86 {859C1085-518B-49D2-9C84-D91C4094097F}.Debug|x86.ActiveCfg = Debug|x86 {859C1085-518B-49D2-9C84-D91C4094097F}.Debug|x86.Build.0 = Debug|x86 + {859C1085-518B-49D2-9C84-D91C4094097F}.Release|Any CPU.ActiveCfg = Release|x86 + {859C1085-518B-49D2-9C84-D91C4094097F}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {859C1085-518B-49D2-9C84-D91C4094097F}.Release|Mixed Platforms.Build.0 = Release|x86 {859C1085-518B-49D2-9C84-D91C4094097F}.Release|x86.ActiveCfg = Release|x86 {859C1085-518B-49D2-9C84-D91C4094097F}.Release|x86.Build.0 = Release|x86 + {62356BCF-D15A-4BF1-B980-395CEC0004A9}.Debug|Any CPU.ActiveCfg = Debug|x86 + {62356BCF-D15A-4BF1-B980-395CEC0004A9}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {62356BCF-D15A-4BF1-B980-395CEC0004A9}.Debug|Mixed Platforms.Build.0 = Debug|x86 {62356BCF-D15A-4BF1-B980-395CEC0004A9}.Debug|x86.ActiveCfg = Debug|x86 {62356BCF-D15A-4BF1-B980-395CEC0004A9}.Debug|x86.Build.0 = Debug|x86 + {62356BCF-D15A-4BF1-B980-395CEC0004A9}.Release|Any CPU.ActiveCfg = Release|x86 + {62356BCF-D15A-4BF1-B980-395CEC0004A9}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {62356BCF-D15A-4BF1-B980-395CEC0004A9}.Release|Mixed Platforms.Build.0 = Release|x86 {62356BCF-D15A-4BF1-B980-395CEC0004A9}.Release|x86.ActiveCfg = Release|x86 {62356BCF-D15A-4BF1-B980-395CEC0004A9}.Release|x86.Build.0 = Release|x86 + {EF6A550E-DD76-4F4D-8250-8598140F828B}.Debug|Any CPU.ActiveCfg = Debug|x86 + {EF6A550E-DD76-4F4D-8250-8598140F828B}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 {EF6A550E-DD76-4F4D-8250-8598140F828B}.Debug|x86.ActiveCfg = Debug|x86 {EF6A550E-DD76-4F4D-8250-8598140F828B}.Debug|x86.Build.0 = Debug|x86 + {EF6A550E-DD76-4F4D-8250-8598140F828B}.Release|Any CPU.ActiveCfg = Release|x86 + {EF6A550E-DD76-4F4D-8250-8598140F828B}.Release|Mixed Platforms.ActiveCfg = Release|x86 {EF6A550E-DD76-4F4D-8250-8598140F828B}.Release|x86.ActiveCfg = Release|x86 {EF6A550E-DD76-4F4D-8250-8598140F828B}.Release|x86.Build.0 = Release|x86 + {E567C031-1F7B-4637-9B3A-806988DE50CF}.Debug|Any CPU.ActiveCfg = Debug|x86 + {E567C031-1F7B-4637-9B3A-806988DE50CF}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 {E567C031-1F7B-4637-9B3A-806988DE50CF}.Debug|x86.ActiveCfg = Debug|x86 {E567C031-1F7B-4637-9B3A-806988DE50CF}.Debug|x86.Build.0 = Debug|x86 + {E567C031-1F7B-4637-9B3A-806988DE50CF}.Release|Any CPU.ActiveCfg = Release|x86 + {E567C031-1F7B-4637-9B3A-806988DE50CF}.Release|Mixed Platforms.ActiveCfg = Release|x86 {E567C031-1F7B-4637-9B3A-806988DE50CF}.Release|x86.ActiveCfg = Release|x86 {E567C031-1F7B-4637-9B3A-806988DE50CF}.Release|x86.Build.0 = Release|x86 + {2EB03DAA-1A5D-47C5-9883-56DCD0F70D23}.Debug|Any CPU.ActiveCfg = Debug|x86 + {2EB03DAA-1A5D-47C5-9883-56DCD0F70D23}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {2EB03DAA-1A5D-47C5-9883-56DCD0F70D23}.Debug|x86.ActiveCfg = Debug|x86 + {2EB03DAA-1A5D-47C5-9883-56DCD0F70D23}.Debug|x86.Build.0 = Debug|x86 + {2EB03DAA-1A5D-47C5-9883-56DCD0F70D23}.Release|Any CPU.ActiveCfg = Release|x86 + {2EB03DAA-1A5D-47C5-9883-56DCD0F70D23}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {2EB03DAA-1A5D-47C5-9883-56DCD0F70D23}.Release|x86.ActiveCfg = Release|x86 + {2EB03DAA-1A5D-47C5-9883-56DCD0F70D23}.Release|x86.Build.0 = Release|x86 + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8}.Debug|x86.ActiveCfg = Debug|Any CPU + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8}.Debug|x86.Build.0 = Debug|Any CPU + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8}.Release|Any CPU.Build.0 = Release|Any CPU + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8}.Release|x86.ActiveCfg = Release|Any CPU + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8}.Release|x86.Build.0 = Release|Any CPU + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}.Debug|x86.ActiveCfg = Debug|Any CPU + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}.Debug|x86.Build.0 = Debug|Any CPU + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}.Release|Any CPU.Build.0 = Release|Any CPU + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}.Release|x86.ActiveCfg = Release|Any CPU + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}.Release|x86.Build.0 = Release|Any CPU + {8DAFAF56-AD78-4B47-866F-E8179511AF5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8DAFAF56-AD78-4B47-866F-E8179511AF5B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8DAFAF56-AD78-4B47-866F-E8179511AF5B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8DAFAF56-AD78-4B47-866F-E8179511AF5B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8DAFAF56-AD78-4B47-866F-E8179511AF5B}.Debug|x86.ActiveCfg = Debug|Any CPU + {8DAFAF56-AD78-4B47-866F-E8179511AF5B}.Debug|x86.Build.0 = Debug|Any CPU + {8DAFAF56-AD78-4B47-866F-E8179511AF5B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8DAFAF56-AD78-4B47-866F-E8179511AF5B}.Release|Any CPU.Build.0 = Release|Any CPU + {8DAFAF56-AD78-4B47-866F-E8179511AF5B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8DAFAF56-AD78-4B47-866F-E8179511AF5B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8DAFAF56-AD78-4B47-866F-E8179511AF5B}.Release|x86.ActiveCfg = Release|Any CPU + {8DAFAF56-AD78-4B47-866F-E8179511AF5B}.Release|x86.Build.0 = Release|Any CPU + {A5277330-A443-46AB-A058-016A3B6AF8AC}.Debug|Any CPU.ActiveCfg = Debug|x86 + {A5277330-A443-46AB-A058-016A3B6AF8AC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {A5277330-A443-46AB-A058-016A3B6AF8AC}.Debug|x86.ActiveCfg = Debug|x86 + {A5277330-A443-46AB-A058-016A3B6AF8AC}.Debug|x86.Build.0 = Debug|x86 + {A5277330-A443-46AB-A058-016A3B6AF8AC}.Release|Any CPU.ActiveCfg = Release|x86 + {A5277330-A443-46AB-A058-016A3B6AF8AC}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {A5277330-A443-46AB-A058-016A3B6AF8AC}.Release|Mixed Platforms.Build.0 = Release|x86 + {A5277330-A443-46AB-A058-016A3B6AF8AC}.Release|x86.ActiveCfg = Release|x86 + {A5277330-A443-46AB-A058-016A3B6AF8AC}.Release|x86.Build.0 = Release|x86 + {D3C1A3C4-A060-40DF-ACE4-143F7F102A24}.Debug|Any CPU.ActiveCfg = Debug|x86 + {D3C1A3C4-A060-40DF-ACE4-143F7F102A24}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {D3C1A3C4-A060-40DF-ACE4-143F7F102A24}.Debug|x86.ActiveCfg = Debug|x86 + {D3C1A3C4-A060-40DF-ACE4-143F7F102A24}.Debug|x86.Build.0 = Debug|x86 + {D3C1A3C4-A060-40DF-ACE4-143F7F102A24}.Release|Any CPU.ActiveCfg = Release|x86 + {D3C1A3C4-A060-40DF-ACE4-143F7F102A24}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {D3C1A3C4-A060-40DF-ACE4-143F7F102A24}.Release|x86.ActiveCfg = Release|x86 + {D3C1A3C4-A060-40DF-ACE4-143F7F102A24}.Release|x86.Build.0 = Release|x86 + {6A5A835E-D798-4A21-963C-C8E7A5F99D57}.Debug|Any CPU.ActiveCfg = Debug|x86 + {6A5A835E-D798-4A21-963C-C8E7A5F99D57}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {6A5A835E-D798-4A21-963C-C8E7A5F99D57}.Debug|x86.ActiveCfg = Debug|x86 + {6A5A835E-D798-4A21-963C-C8E7A5F99D57}.Debug|x86.Build.0 = Debug|x86 + {6A5A835E-D798-4A21-963C-C8E7A5F99D57}.Release|Any CPU.ActiveCfg = Release|x86 + {6A5A835E-D798-4A21-963C-C8E7A5F99D57}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {6A5A835E-D798-4A21-963C-C8E7A5F99D57}.Release|x86.ActiveCfg = Release|x86 + {6A5A835E-D798-4A21-963C-C8E7A5F99D57}.Release|x86.Build.0 = Release|x86 + {D9878E03-87D7-429E-AA0C-A7116A31FA7F}.Debug|Any CPU.ActiveCfg = Debug|x86 + {D9878E03-87D7-429E-AA0C-A7116A31FA7F}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {D9878E03-87D7-429E-AA0C-A7116A31FA7F}.Debug|x86.ActiveCfg = Debug|x86 + {D9878E03-87D7-429E-AA0C-A7116A31FA7F}.Debug|x86.Build.0 = Debug|x86 + {D9878E03-87D7-429E-AA0C-A7116A31FA7F}.Release|Any CPU.ActiveCfg = Release|x86 + {D9878E03-87D7-429E-AA0C-A7116A31FA7F}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {D9878E03-87D7-429E-AA0C-A7116A31FA7F}.Release|x86.ActiveCfg = Release|x86 + {D9878E03-87D7-429E-AA0C-A7116A31FA7F}.Release|x86.Build.0 = Release|x86 + {72A8EF23-3379-4C72-B212-A14A3C286D9C}.Debug|Any CPU.ActiveCfg = Debug|x86 + {72A8EF23-3379-4C72-B212-A14A3C286D9C}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {72A8EF23-3379-4C72-B212-A14A3C286D9C}.Debug|x86.ActiveCfg = Debug|x86 + {72A8EF23-3379-4C72-B212-A14A3C286D9C}.Debug|x86.Build.0 = Debug|x86 + {72A8EF23-3379-4C72-B212-A14A3C286D9C}.Release|Any CPU.ActiveCfg = Release|x86 + {72A8EF23-3379-4C72-B212-A14A3C286D9C}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {72A8EF23-3379-4C72-B212-A14A3C286D9C}.Release|x86.ActiveCfg = Release|x86 + {72A8EF23-3379-4C72-B212-A14A3C286D9C}.Release|x86.Build.0 = Release|x86 + {39C49E1A-75BA-4AD1-9286-58E83D22BC1E}.Debug|Any CPU.ActiveCfg = Debug|x86 + {39C49E1A-75BA-4AD1-9286-58E83D22BC1E}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {39C49E1A-75BA-4AD1-9286-58E83D22BC1E}.Debug|x86.ActiveCfg = Debug|x86 + {39C49E1A-75BA-4AD1-9286-58E83D22BC1E}.Debug|x86.Build.0 = Debug|x86 + {39C49E1A-75BA-4AD1-9286-58E83D22BC1E}.Release|Any CPU.ActiveCfg = Release|x86 + {39C49E1A-75BA-4AD1-9286-58E83D22BC1E}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {39C49E1A-75BA-4AD1-9286-58E83D22BC1E}.Release|x86.ActiveCfg = Release|x86 + {39C49E1A-75BA-4AD1-9286-58E83D22BC1E}.Release|x86.Build.0 = Release|x86 + {A9188CF1-BD07-4D24-BC4A-906A43012F37}.Debug|Any CPU.ActiveCfg = Debug|x86 + {A9188CF1-BD07-4D24-BC4A-906A43012F37}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {A9188CF1-BD07-4D24-BC4A-906A43012F37}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {A9188CF1-BD07-4D24-BC4A-906A43012F37}.Debug|x86.ActiveCfg = Debug|x86 + {A9188CF1-BD07-4D24-BC4A-906A43012F37}.Debug|x86.Build.0 = Debug|x86 + {A9188CF1-BD07-4D24-BC4A-906A43012F37}.Release|Any CPU.ActiveCfg = Release|x86 + {A9188CF1-BD07-4D24-BC4A-906A43012F37}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {A9188CF1-BD07-4D24-BC4A-906A43012F37}.Release|Mixed Platforms.Build.0 = Release|x86 + {A9188CF1-BD07-4D24-BC4A-906A43012F37}.Release|x86.ActiveCfg = Release|x86 + {A9188CF1-BD07-4D24-BC4A-906A43012F37}.Release|x86.Build.0 = Release|x86 + {2B684C20-7E1A-4DA0-8C26-96DA1407B2C3}.Debug|Any CPU.ActiveCfg = Debug|x86 + {2B684C20-7E1A-4DA0-8C26-96DA1407B2C3}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {2B684C20-7E1A-4DA0-8C26-96DA1407B2C3}.Debug|x86.ActiveCfg = Debug|x86 + {2B684C20-7E1A-4DA0-8C26-96DA1407B2C3}.Debug|x86.Build.0 = Debug|x86 + {2B684C20-7E1A-4DA0-8C26-96DA1407B2C3}.Release|Any CPU.ActiveCfg = Release|x86 + {2B684C20-7E1A-4DA0-8C26-96DA1407B2C3}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {2B684C20-7E1A-4DA0-8C26-96DA1407B2C3}.Release|x86.ActiveCfg = Release|x86 + {2B684C20-7E1A-4DA0-8C26-96DA1407B2C3}.Release|x86.Build.0 = Release|x86 + {F642E719-61E2-4847-AB55-DB47C0F38649}.Debug|Any CPU.ActiveCfg = Debug|x86 + {F642E719-61E2-4847-AB55-DB47C0F38649}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {F642E719-61E2-4847-AB55-DB47C0F38649}.Debug|x86.ActiveCfg = Debug|x86 + {F642E719-61E2-4847-AB55-DB47C0F38649}.Debug|x86.Build.0 = Debug|x86 + {F642E719-61E2-4847-AB55-DB47C0F38649}.Release|Any CPU.ActiveCfg = Release|x86 + {F642E719-61E2-4847-AB55-DB47C0F38649}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {F642E719-61E2-4847-AB55-DB47C0F38649}.Release|x86.ActiveCfg = Release|x86 + {F642E719-61E2-4847-AB55-DB47C0F38649}.Release|x86.Build.0 = Release|x86 + {3FAF50AA-AD5F-455A-8711-6D791C457F0F}.Debug|Any CPU.ActiveCfg = Debug|x86 + {3FAF50AA-AD5F-455A-8711-6D791C457F0F}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {3FAF50AA-AD5F-455A-8711-6D791C457F0F}.Debug|x86.ActiveCfg = Debug|x86 + {3FAF50AA-AD5F-455A-8711-6D791C457F0F}.Debug|x86.Build.0 = Debug|x86 + {3FAF50AA-AD5F-455A-8711-6D791C457F0F}.Release|Any CPU.ActiveCfg = Release|x86 + {3FAF50AA-AD5F-455A-8711-6D791C457F0F}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {3FAF50AA-AD5F-455A-8711-6D791C457F0F}.Release|x86.ActiveCfg = Release|x86 + {3FAF50AA-AD5F-455A-8711-6D791C457F0F}.Release|x86.Build.0 = Release|x86 + {194445BE-3721-4270-984D-FA978D5F34A0}.Debug|Any CPU.ActiveCfg = Debug|x86 + {194445BE-3721-4270-984D-FA978D5F34A0}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {194445BE-3721-4270-984D-FA978D5F34A0}.Debug|x86.ActiveCfg = Debug|x86 + {194445BE-3721-4270-984D-FA978D5F34A0}.Debug|x86.Build.0 = Debug|x86 + {194445BE-3721-4270-984D-FA978D5F34A0}.Release|Any CPU.ActiveCfg = Release|x86 + {194445BE-3721-4270-984D-FA978D5F34A0}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {194445BE-3721-4270-984D-FA978D5F34A0}.Release|x86.ActiveCfg = Release|x86 + {194445BE-3721-4270-984D-FA978D5F34A0}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -133,11 +386,23 @@ Global {84B2143A-D04F-4262-923D-21AEDF86E2B7} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} {2A08A524-88DA-432F-92E6-8DC63C5376DA} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} {E7FDD1C9-BCF7-4624-B033-D3888E422A8B} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} - {64D6F035-F186-4193-AF35-D20126B8DA64} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} {6FE33C61-E2C2-4982-9536-63AEF0A98AAA} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} {859C1085-518B-49D2-9C84-D91C4094097F} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} {62356BCF-D15A-4BF1-B980-395CEC0004A9} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} - {EF6A550E-DD76-4F4D-8250-8598140F828B} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} - {E567C031-1F7B-4637-9B3A-806988DE50CF} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} + {A5277330-A443-46AB-A058-016A3B6AF8AC} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} + {D3C1A3C4-A060-40DF-ACE4-143F7F102A24} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} + {6A5A835E-D798-4A21-963C-C8E7A5F99D57} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} + {D9878E03-87D7-429E-AA0C-A7116A31FA7F} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} + {72A8EF23-3379-4C72-B212-A14A3C286D9C} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} + {39C49E1A-75BA-4AD1-9286-58E83D22BC1E} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} + {A9188CF1-BD07-4D24-BC4A-906A43012F37} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} + {2B684C20-7E1A-4DA0-8C26-96DA1407B2C3} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} + {F642E719-61E2-4847-AB55-DB47C0F38649} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} + {3FAF50AA-AD5F-455A-8711-6D791C457F0F} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} + {194445BE-3721-4270-984D-FA978D5F34A0} = {4FD2B635-11BD-4532-96F6-97ECB41072A1} + {EF6A550E-DD76-4F4D-8250-8598140F828B} = {620861D6-4C88-4A5F-B3D5-C1D45468D16F} + {E567C031-1F7B-4637-9B3A-806988DE50CF} = {620861D6-4C88-4A5F-B3D5-C1D45468D16F} + {2EB03DAA-1A5D-47C5-9883-56DCD0F70D23} = {620861D6-4C88-4A5F-B3D5-C1D45468D16F} + {64D6F035-F186-4193-AF35-D20126B8DA64} = {620861D6-4C88-4A5F-B3D5-C1D45468D16F} EndGlobalSection EndGlobal diff --git a/Ember Media Manager/Bin/MediaInfo.dll b/Ember Media Manager/Bin/MediaInfo.dll new file mode 100644 index 0000000..ea8c039 Binary files /dev/null and b/Ember Media Manager/Bin/MediaInfo.dll differ diff --git a/Ember Media Manager/Bin/ffmpeg.exe b/Ember Media Manager/Bin/ffmpeg.exe new file mode 100644 index 0000000..8c60c8e Binary files /dev/null and b/Ember Media Manager/Bin/ffmpeg.exe differ diff --git a/Ember Media Manager/Ember Media Manager.vbproj b/Ember Media Manager/Ember Media Manager.vbproj index 0906a5c..0f278a7 100644 --- a/Ember Media Manager/Ember Media Manager.vbproj +++ b/Ember Media Manager/Ember Media Manager.vbproj @@ -66,6 +66,9 @@ <Reference Include="ICSharpCode.SharpZipLib"> <HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> </Reference> + <Reference Include="RestSharp"> + <HintPath>..\packages\RestSharp.104.1\lib\net35\RestSharp.dll</HintPath> + </Reference> <Reference Include="System" /> <Reference Include="System.Data" /> <Reference Include="System.Data.SQLite"> @@ -363,9 +366,9 @@ </EmbeddedResource> <EmbeddedResource Include="My Project\Resources.resx"> <Generator>VbMyResourcesResXFileCodeGenerator</Generator> - <LastGenOutput>Resources.Designer.vb</LastGenOutput> <CustomToolNamespace>My.Resources</CustomToolNamespace> <SubType>Designer</SubType> + <LastGenOutput>Resources.Designer.vb</LastGenOutput> </EmbeddedResource> </ItemGroup> <ItemGroup> @@ -381,7 +384,9 @@ </None> </ItemGroup> <ItemGroup> - <None Include="packages.config" /> + <None Include="packages.config"> + <SubType>Designer</SubType> + </None> <None Include="Resources\actor_silhouette.jpg" /> </ItemGroup> <ItemGroup> @@ -472,6 +477,12 @@ <None Include="Resources\Wizard.jpg" /> </ItemGroup> <ItemGroup> + <Content Include="Bin\ffmpeg.exe"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + <Content Include="Bin\MediaInfo.dll"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> <Content Include="Images\Flags\achan_1.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -481,6 +492,9 @@ <Content Include="Images\Flags\achan_6.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Images\Flags\achan_7.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Images\Flags\achan_8.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -523,6 +537,12 @@ <Content Include="Images\Flags\acodec_dts.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Images\Flags\acodec_dtshd_hra.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + <Content Include="Images\Flags\acodec_dtshd_ma.png"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Images\Flags\acodec_dtshr.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -4627,11 +4647,15 @@ <Content Include="Images\Studios\Zweites Deutsches Fernsehen %28ZDF%29.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> + <Content Include="Langs\Debug_%28db_DB%29.xml"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> <Content Include="Langs\English_%28en_US%29-Help.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <Content Include="Langs\English_%28en_US%29.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <SubType>Designer</SubType> </Content> <Content Include="Langs\German_%28de_DE%29-Help.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> @@ -4648,20 +4672,26 @@ <Content Include="Langs\html\template MovieHomepage\German_%28de_DE%29.html"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Langs\html\template MovieHomepage\images\bg.jpg"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <Content Include="Langs\html\template MovieHomepage\images\default.jpg"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + <Content Include="Langs\html\template MovieHomepage\images\dvd.jpg"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </Content> + <Content Include="Langs\html\template MovieHomepage\images\haken.png"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> <Content Include="Langs\html\template MovieHomepage\images\hd.jpg"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> <Content Include="Langs\html\template MovieHomepage\images\imdb.jpg"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> <Content Include="Langs\html\template MovieHomepage\images\movie_folder.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> <Content Include="Langs\html\template MovieHomepage\images\youtube.jpg"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> <Content Include="Langs\html\template MovieHomepage\style.css"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> @@ -4765,13 +4795,14 @@ <Content Include="Langs\Languages.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Langs\Português_%28pt_BR%29-Help.xml"> + <Content Include="Langs\Norwegian_%28no_NO%29-Help.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - <Content Include="Langs\Português_%28pt_BR%29.xml"> + <Content Include="Langs\Norwegian_%28no_NO%29.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> <Content Include="logo.ico" /> + <Content Include="Resources\haswatched.png" /> <Content Include="Themes\movie-Default.xml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> @@ -4794,6 +4825,14 @@ <Project>{208AA35E-C6AE-4D2D-A9DD-B6EFD19A4279}</Project> <Name>EmberAPI</Name> </ProjectReference> + <ProjectReference Include="..\FanartTVAPI\FanartTVAPI.csproj"> + <Project>{70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6}</Project> + <Name>FanartTVAPI</Name> + </ProjectReference> + <ProjectReference Include="..\WatTmdb\WatTmdb.csproj"> + <Project>{EFC11645-FAB4-4C30-A498-29F5ECDF77E8}</Project> + <Name>WatTmdb</Name> + </ProjectReference> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> diff --git a/Ember Media Manager/Images/Flags/achan_7.png b/Ember Media Manager/Images/Flags/achan_7.png new file mode 100644 index 0000000..5ae9a64 Binary files /dev/null and b/Ember Media Manager/Images/Flags/achan_7.png differ diff --git a/Ember Media Manager/Images/Flags/acodec_dtshd_hra.png b/Ember Media Manager/Images/Flags/acodec_dtshd_hra.png new file mode 100644 index 0000000..4a31f50 Binary files /dev/null and b/Ember Media Manager/Images/Flags/acodec_dtshd_hra.png differ diff --git a/Ember Media Manager/Images/Flags/acodec_dtshd_ma.png b/Ember Media Manager/Images/Flags/acodec_dtshd_ma.png new file mode 100644 index 0000000..4a31f50 Binary files /dev/null and b/Ember Media Manager/Images/Flags/acodec_dtshd_ma.png differ diff --git a/Ember Media Manager/Images/Genres/Genres.xml b/Ember Media Manager/Images/Genres/Genres.xml index f950aee..79e90c5 100644 --- a/Ember Media Manager/Images/Genres/Genres.xml +++ b/Ember Media Manager/Images/Genres/Genres.xml @@ -85,9 +85,6 @@ <name searchstring="Enfants" language="Français"> <icon>children.jpg</icon> </name> - <name searchstring="Kinder-" language="German"> - <icon>children.jpg</icon> - </name> <name searchstring="Infantil" language="Español"> <icon>children.jpg</icon> </name> @@ -418,7 +415,7 @@ <name searchstring="Guerra" language="Italian"> <icon>war.jpg</icon> </name> - <name searchstring="Western" language="English|Français|Español"> + <name searchstring="Western" language="English|German|Français|Español"> <icon>western.jpg</icon> </name> <name searchstring="Wrestling" language="English"> @@ -442,6 +439,9 @@ <name searchstring="Corto" language="Español"> <icon>short.jpg</icon> </name> + <name searchstring="Mondo" language="German"> + <icon>documentary.jpg</icon> + </name> <default> <icon>default.jpg</icon> </default> diff --git a/Ember Media Manager/Langs/Debug_(db_DB).xml b/Ember Media Manager/Langs/Debug_(db_DB).xml new file mode 100644 index 0000000..25b9e5f --- /dev/null +++ b/Ember Media Manager/Langs/Debug_(db_DB).xml @@ -0,0 +1,902 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="1">1</string> + <string id="2">2</string> + <string id="3">3</string> + <string id="4">4</string> + <string id="5">5</string> + <string id="6">6</string> + <string id="7">7</string> + <string id="8">8</string> + <string id="9">9</string> + <string id="10">10</string> + <string id="11">11</string> + <string id="12">12</string> + <string id="13">13</string> + <string id="14">14</string> + <string id="15">15</string> + <string id="16">16</string> + <string id="17">17</string> + <string id="18">18</string> + <string id="19">19</string> + <string id="20">20</string> + <string id="21">21</string> + <string id="22">22</string> + <string id="23">23</string> + <string id="24">24</string> + <string id="25">25</string> + <string id="26">26</string> + <string id="27">27</string> + <string id="28">28</string> + <string id="29">29</string> + <string id="30">30</string> + <string id="31">31</string> + <string id="32">32</string> + <string id="33">33</string> + <string id="34">34</string> + <string id="35">35</string> + <string id="36">36</string> + <string id="37">37</string> + <string id="38">38</string> + <string id="39">39</string> + <string id="40">40</string> + <string id="41">41</string> + <string id="42">42</string> + <string id="43">43</string> + <string id="44">44</string> + <string id="45">45</string> + <string id="46">46</string> + <string id="47">47</string> + <string id="48">48</string> + <string id="49">49</string> + <string id="50">50</string> + <string id="51">51</string> + <string id="52">52</string> + <string id="53">53</string> + <string id="54">54</string> + <string id="55">55</string> + <string id="56">56</string> + <string id="57">57</string> + <string id="58">58</string> + <string id="59">59</string> + <string id="60">60</string> + <string id="61">61</string> + <string id="62">62</string> + <string id="63">63</string> + <string id="64">64</string> + <string id="65">65</string> + <string id="66">66</string> + <string id="67">67</string> + <string id="68">68</string> + <string id="69">69</string> + <string id="70">70</string> + <string id="71">71</string> + <string id="72">72</string> + <string id="73">73</string> + <string id="74">74</string> + <string id="75">75</string> + <string id="76">76</string> + <string id="77">77</string> + <string id="78">78</string> + <string id="79">79</string> + <string id="80">80</string> + <string id="81">81</string> + <string id="82">82</string> + <string id="83">83</string> + <string id="84">84</string> + <string id="85">85</string> + <string id="86">86</string> + <string id="87">87</string> + <string id="88">88</string> + <string id="89">89</string> + <string id="90">90</string> + <string id="91">91</string> + <string id="92">92</string> + <string id="93">93</string> + <string id="94">94</string> + <string id="95">95</string> + <string id="96">96</string> + <string id="97">97</string> + <string id="98">98</string> + <string id="99">99</string> + <string id="100">100</string> + <string id="101">101</string> + <string id="102">102</string> + <string id="103">103</string> + <string id="104">104</string> + <string id="105">105</string> + <string id="106">106</string> + <string id="107">107</string> + <string id="108">108</string> + <string id="109">109</string> + <string id="110">110</string> + <string id="111">111</string> + <string id="112">112</string> + <string id="113">113</string> + <string id="114">114</string> + <string id="115">115</string> + <string id="116">116</string> + <string id="117">117</string> + <string id="118">118</string> + <string id="119">119</string> + <string id="120">120</string> + <string id="121">121</string> + <string id="122">122</string> + <string id="123">123</string> + <string id="124">124</string> + <string id="125">125</string> + <string id="126">126</string> + <string id="127">127</string> + <string id="128">128</string> + <string id="129">129</string> + <string id="130">130</string> + <string id="131">131</string> + <string id="132">132</string> + <string id="133">133</string> + <string id="134">134</string> + <string id="135">135</string> + <string id="136">136</string> + <string id="137">137</string> + <string id="138">138</string> + <string id="139">139</string> + <string id="140">140</string> + <string id="141">141</string> + <string id="142">142</string> + <string id="143">143</string> + <string id="144">144</string> + <string id="145">145</string> + <string id="146">146</string> + <string id="147">147</string> + <string id="148">148</string> + <string id="149">149</string> + <string id="150">150</string> + <string id="151">151</string> + <string id="152">152</string> + <string id="153">153</string> + <string id="154">154</string> + <string id="155">155</string> + <string id="156">156</string> + <string id="157">157</string> + <string id="158">158</string> + <string id="159">159</string> + <string id="160">160</string> + <string id="161">161</string> + <string id="162">162</string> + <string id="163">163</string> + <string id="164">164</string> + <string id="165">165</string> + <string id="166">166</string> + <string id="167">167</string> + <string id="168">168</string> + <string id="169">169</string> + <string id="170">170</string> + <string id="171">171</string> + <string id="172">172</string> + <string id="173">173</string> + <string id="174">174</string> + <string id="175">175</string> + <string id="176">176</string> + <string id="177">177</string> + <string id="178">178</string> + <string id="179">179</string> + <string id="180">180</string> + <string id="181">181</string> + <string id="182">182</string> + <string id="183">183</string> + <string id="184">184</string> + <string id="185">185</string> + <string id="186">186</string> + <string id="187">187</string> + <string id="188">188</string> + <string id="189">189</string> + <string id="190">190</string> + <string id="191">191</string> + <string id="192">192</string> + <string id="193">193</string> + <string id="194">194</string> + <string id="195">195</string> + <string id="196">196</string> + <string id="197">197</string> + <string id="198">198</string> + <string id="199">199</string> + <string id="200">200</string> + <string id="201">201</string> + <string id="202">202</string> + <string id="203">203</string> + <string id="204">204</string> + <string id="205">205</string> + <string id="206">206</string> + <string id="207">207</string> + <string id="208">208</string> + <string id="209">209</string> + <string id="210">210</string> + <string id="211">211</string> + <string id="212">212</string> + <string id="213">213</string> + <string id="214">214</string> + <string id="215">215</string> + <string id="216">216</string> + <string id="217">217</string> + <string id="218">218</string> + <string id="219">219</string> + <string id="220">220</string> + <string id="221">221</string> + <string id="222">222</string> + <string id="223">223</string> + <string id="224">224</string> + <string id="225">225</string> + <string id="226">226</string> + <string id="227">227</string> + <string id="228">228</string> + <string id="229">229</string> + <string id="230">230</string> + <string id="231">231</string> + <string id="232">232</string> + <string id="233">233</string> + <string id="234">234</string> + <string id="235">235</string> + <string id="236">236</string> + <string id="237">237</string> + <string id="238">238</string> + <string id="239">239</string> + <string id="240">240</string> + <string id="241">241</string> + <string id="242">242</string> + <string id="243">243</string> + <string id="244">244</string> + <string id="245">245</string> + <string id="246">246</string> + <string id="247">247</string> + <string id="248">248</string> + <string id="249">249</string> + <string id="250">250</string> + <string id="251">251</string> + <string id="252">252</string> + <string id="253">253</string> + <string id="254">254</string> + <string id="255">255</string> + <string id="256">256</string> + <string id="257">257</string> + <string id="258">258</string> + <string id="259">259</string> + <string id="260">260</string> + <string id="261">261</string> + <string id="262">262</string> + <string id="263">263</string> + <string id="264">264</string> + <string id="265">265</string> + <string id="266">266</string> + <string id="267">267</string> + <string id="268">268</string> + <string id="269">269</string> + <string id="270">270</string> + <string id="271">271</string> + <string id="272">272</string> + <string id="273">273</string> + <string id="274">274</string> + <string id="275">275</string> + <string id="276">276</string> + <string id="277">277</string> + <string id="278">278</string> + <string id="279">279</string> + <string id="280">280</string> + <string id="281">281</string> + <string id="282">282</string> + <string id="283">283</string> + <string id="284">284</string> + <string id="285">285</string> + <string id="286">286</string> + <string id="287">287</string> + <string id="288">288</string> + <string id="289">289</string> + <string id="290">290</string> + <string id="291">291</string> + <string id="292">292</string> + <string id="293">293</string> + <string id="294">294</string> + <string id="295">295</string> + <string id="296">296</string> + <string id="297">297</string> + <string id="298">298</string> + <string id="299">299</string> + <string id="300">300</string> + <string id="301">301</string> + <string id="302">302</string> + <string id="303">303</string> + <string id="304">304</string> + <string id="305">305</string> + <string id="306">306</string> + <string id="307">307</string> + <string id="308">308</string> + <string id="309">309</string> + <string id="310">310</string> + <string id="311">311</string> + <string id="312">312</string> + <string id="313">313</string> + <string id="314">314</string> + <string id="315">315</string> + <string id="316">316</string> + <string id="317">317</string> + <string id="318">318</string> + <string id="319">319</string> + <string id="320">320</string> + <string id="321">321</string> + <string id="322">322</string> + <string id="323">323</string> + <string id="324">324</string> + <string id="325">325</string> + <string id="326">326</string> + <string id="327">327</string> + <string id="328">328</string> + <string id="329">329</string> + <string id="330">330</string> + <string id="331">331</string> + <string id="332">332</string> + <string id="333">333</string> + <string id="334">334</string> + <string id="335">335</string> + <string id="336">336</string> + <string id="337">337</string> + <string id="338">338</string> + <string id="339">339</string> + <string id="340">340</string> + <string id="341">341</string> + <string id="342">342</string> + <string id="343">343</string> + <string id="344">344</string> + <string id="345">345</string> + <string id="346">346</string> + <string id="347">347</string> + <string id="348">348</string> + <string id="349">349</string> + <string id="350">350</string> + <string id="351">351</string> + <string id="352">352</string> + <string id="353">353</string> + <string id="354">354</string> + <string id="355">355</string> + <string id="356">356</string> + <string id="357">357</string> + <string id="358">358</string> + <string id="359">359</string> + <string id="360">360</string> + <string id="361">361</string> + <string id="362">362</string> + <string id="363">363</string> + <string id="364">364</string> + <string id="365">365</string> + <string id="366">366</string> + <string id="367">367</string> + <string id="368">368</string> + <string id="369">369</string> + <string id="370">370</string> + <string id="371">371</string> + <string id="372">372</string> + <string id="373">373</string> + <string id="374">374</string> + <string id="375">375</string> + <string id="376">376</string> + <string id="377">377</string> + <string id="378">378</string> + <string id="379">379</string> + <string id="380">380</string> + <string id="381">381</string> + <string id="382">382</string> + <string id="383">383</string> + <string id="384">384</string> + <string id="385">385</string> + <string id="386">386</string> + <string id="387">387</string> + <string id="388">388</string> + <string id="389">389</string> + <string id="390">390</string> + <string id="391">391</string> + <string id="392">392</string> + <string id="393">393</string> + <string id="394">394</string> + <string id="395">395</string> + <string id="396">396</string> + <string id="397">397</string> + <string id="398">398</string> + <string id="399">399</string> + <string id="400">400</string> + <string id="401">401</string> + <string id="402">402</string> + <string id="403">403</string> + <string id="404">404</string> + <string id="405">405</string> + <string id="406">406</string> + <string id="407">407</string> + <string id="408">408</string> + <string id="409">409</string> + <string id="410">410</string> + <string id="411">411</string> + <string id="412">412</string> + <string id="413">413</string> + <string id="414">414</string> + <string id="415">415</string> + <string id="416">416</string> + <string id="417">417</string> + <string id="418">418</string> + <string id="419">419</string> + <string id="420">420</string> + <string id="421">421</string> + <string id="422">422</string> + <string id="423">423</string> + <string id="424">424</string> + <string id="425">425</string> + <string id="426">426</string> + <string id="427">427</string> + <string id="428">428</string> + <string id="429">429</string> + <string id="430">430</string> + <string id="431">431</string> + <string id="432">432</string> + <string id="433">433</string> + <string id="434">434</string> + <string id="435">435</string> + <string id="436">436</string> + <string id="437">437</string> + <string id="438">438</string> + <string id="439">439</string> + <string id="440">440</string> + <string id="441">441</string> + <string id="442">442</string> + <string id="443">443</string> + <string id="444">444</string> + <string id="445">445</string> + <string id="446">446</string> + <string id="447">447</string> + <string id="448">448</string> + <string id="449">449</string> + <string id="450">450</string> + <string id="451">451</string> + <string id="452">452</string> + <string id="453">453</string> + <string id="454">454</string> + <string id="455">455</string> + <string id="456">456</string> + <string id="457">457</string> + <string id="458">458</string> + <string id="459">459</string> + <string id="460">460</string> + <string id="461">461</string> + <string id="462">462</string> + <string id="463">463</string> + <string id="464">464</string> + <string id="465">465</string> + <string id="466">466</string> + <string id="467">467</string> + <string id="468">468</string> + <string id="469">469</string> + <string id="470">470</string> + <string id="471">471</string> + <string id="472">472</string> + <string id="473">473</string> + <string id="474">474</string> + <string id="475">475</string> + <string id="476">476</string> + <string id="477">477</string> + <string id="478">478</string> + <string id="479">479</string> + <string id="480">480</string> + <string id="481">481</string> + <string id="482">482</string> + <string id="483">483</string> + <string id="484">484</string> + <string id="485">485</string> + <string id="486">486</string> + <string id="487">487</string> + <string id="488">488</string> + <string id="489">489</string> + <string id="490">490</string> + <string id="491">491</string> + <string id="492">492</string> + <string id="493">493</string> + <string id="494">494</string> + <string id="495">495</string> + <string id="496">496</string> + <string id="497">497</string> + <string id="498">498</string> + <string id="499">499</string> + <string id="500">500</string> + <string id="501">501</string> + <string id="502">502</string> + <string id="503">503</string> + <string id="504">504</string> + <string id="505">505</string> + <string id="506">506</string> + <string id="507">507</string> + <string id="508">508</string> + <string id="509">509</string> + <string id="510">510</string> + <string id="511">511</string> + <string id="512">512</string> + <string id="513">513</string> + <string id="514">514</string> + <string id="515">515</string> + <string id="516">516</string> + <string id="517">517</string> + <string id="518">518</string> + <string id="519">519</string> + <string id="520">520</string> + <string id="521">521</string> + <string id="522">522</string> + <string id="523">523</string> + <string id="524">524</string> + <string id="525">525</string> + <string id="526">526</string> + <string id="527">527</string> + <string id="528">528</string> + <string id="529">529</string> + <string id="530">530</string> + <string id="531">531</string> + <string id="532">532</string> + <string id="533">533</string> + <string id="534">534</string> + <string id="535">535</string> + <string id="536">536</string> + <string id="537">537</string> + <string id="538">538</string> + <string id="539">539</string> + <string id="540">540</string> + <string id="541">541</string> + <string id="542">542</string> + <string id="543">543</string> + <string id="544">544</string> + <string id="545">545</string> + <string id="546">546</string> + <string id="547">547</string> + <string id="548">548</string> + <string id="549">549</string> + <string id="550">550</string> + <string id="551">551</string> + <string id="552">552</string> + <string id="553">553</string> + <string id="554">554</string> + <string id="555">555</string> + <string id="556">556</string> + <string id="557">557</string> + <string id="558">558</string> + <string id="559">559</string> + <string id="560">560</string> + <string id="561">561</string> + <string id="562">562</string> + <string id="563">563</string> + <string id="564">564</string> + <string id="565">565</string> + <string id="566">566</string> + <string id="567">567</string> + <string id="568">568</string> + <string id="569">569</string> + <string id="570">570</string> + <string id="571">571</string> + <string id="572">572</string> + <string id="573">573</string> + <string id="574">574</string> + <string id="575">575</string> + <string id="576">576</string> + <string id="577">577</string> + <string id="578">578</string> + <string id="579">579</string> + <string id="580">580</string> + <string id="581">581</string> + <string id="582">582</string> + <string id="583">583</string> + <string id="584">584</string> + <string id="585">585</string> + <string id="586">586</string> + <string id="587">587</string> + <string id="588">588</string> + <string id="589">589</string> + <string id="590">590</string> + <string id="591">591</string> + <string id="592">592</string> + <string id="593">593</string> + <string id="594">594</string> + <string id="595">595</string> + <string id="596">596</string> + <string id="597">597</string> + <string id="598">598</string> + <string id="599">599</string> + <string id="600">600</string> + <string id="601">601</string> + <string id="602">602</string> + <string id="603">603</string> + <string id="604">604</string> + <string id="605">605</string> + <string id="606">606</string> + <string id="607">607</string> + <string id="608">608</string> + <string id="609">609</string> + <string id="610">610</string> + <string id="611">611</string> + <string id="612">612</string> + <string id="613">613</string> + <string id="614">614</string> + <string id="615">615</string> + <string id="616">616</string> + <string id="617">617</string> + <string id="618">618</string> + <string id="619">619</string> + <string id="620">620</string> + <string id="621">621</string> + <string id="622">622</string> + <string id="623">623</string> + <string id="624">624</string> + <string id="625">625</string> + <string id="626">626</string> + <string id="627">627</string> + <string id="628">628</string> + <string id="629">629</string> + <string id="630">630</string> + <string id="631">631</string> + <string id="632">632</string> + <string id="633">633</string> + <string id="634">634</string> + <string id="635">635</string> + <string id="636">636</string> + <string id="637">637</string> + <string id="638">638</string> + <string id="639">639</string> + <string id="640">640</string> + <string id="641">641</string> + <string id="642">642</string> + <string id="643">643</string> + <string id="644">644</string> + <string id="645">645</string> + <string id="646">646</string> + <string id="647">647</string> + <string id="648">648</string> + <string id="649">649</string> + <string id="650">650</string> + <string id="651">651</string> + <string id="652">652</string> + <string id="653">653</string> + <string id="654">654</string> + <string id="655">655</string> + <string id="656">656</string> + <string id="657">657</string> + <string id="658">658</string> + <string id="659">659</string> + <string id="660">660</string> + <string id="661">661</string> + <string id="662">662</string> + <string id="663">663</string> + <string id="664">664</string> + <string id="665">665</string> + <string id="666">666</string> + <string id="667">667</string> + <string id="668">668</string> + <string id="669">669</string> + <string id="670">670</string> + <string id="671">671</string> + <string id="672">672</string> + <string id="673">673</string> + <string id="674">674</string> + <string id="675">675</string> + <string id="676">676</string> + <string id="677">677</string> + <string id="678">678</string> + <string id="679">679</string> + <string id="680">680</string> + <string id="681">681</string> + <string id="682">682</string> + <string id="683">683</string> + <string id="684">684</string> + <string id="685">685</string> + <string id="686">686</string> + <string id="687">687</string> + <string id="688">688</string> + <string id="689">689</string> + <string id="690">690</string> + <string id="691">691</string> + <string id="692">692</string> + <string id="693">693</string> + <string id="694">694</string> + <string id="695">695</string> + <string id="696">696</string> + <string id="697">697</string> + <string id="698">698</string> + <string id="699">699</string> + <string id="700">700</string> + <string id="701">701</string> + <string id="702">702</string> + <string id="703">703</string> + <string id="704">704</string> + <string id="705">705</string> + <string id="706">706</string> + <string id="707">707</string> + <string id="708">708</string> + <string id="709">709</string> + <string id="710">710</string> + <string id="711">711</string> + <string id="712">712</string> + <string id="713">713</string> + <string id="714">714</string> + <string id="715">715</string> + <string id="716">716</string> + <string id="717">717</string> + <string id="718">718</string> + <string id="719">719</string> + <string id="720">720</string> + <string id="721">721</string> + <string id="722">722</string> + <string id="723">723</string> + <string id="724">724</string> + <string id="725">725</string> + <string id="726">726</string> + <string id="727">727</string> + <string id="728">728</string> + <string id="729">729</string> + <string id="730">730</string> + <string id="731">731</string> + <string id="732">732</string> + <string id="733">733</string> + <string id="734">734</string> + <string id="735">735</string> + <string id="736">736</string> + <string id="737">737</string> + <string id="738">738</string> + <string id="739">739</string> + <string id="740">740</string> + <string id="741">741</string> + <string id="742">742</string> + <string id="743">743</string> + <string id="744">744</string> + <string id="745">745</string> + <string id="746">746</string> + <string id="747">747</string> + <string id="748">748</string> + <string id="749">749</string> + <string id="750">750</string> + <string id="751">751</string> + <string id="752">752</string> + <string id="753">753</string> + <string id="754">754</string> + <string id="755">755</string> + <string id="756">756</string> + <string id="757">757</string> + <string id="758">758</string> + <string id="759">759</string> + <string id="760">760</string> + <string id="761">761</string> + <string id="762">762</string> + <string id="763">763</string> + <string id="764">764</string> + <string id="765">765</string> + <string id="766">766</string> + <string id="767">767</string> + <string id="768">768</string> + <string id="769">769</string> + <string id="770">770</string> + <string id="771">771</string> + <string id="772">772</string> + <string id="773">773</string> + <string id="774">774</string> + <string id="775">775</string> + <string id="776">776</string> + <string id="777">777</string> + <string id="778">778</string> + <string id="779">779</string> + <string id="780">780</string> + <string id="781">781</string> + <string id="782">782</string> + <string id="783">783</string> + <string id="784">784</string> + <string id="785">785</string> + <string id="786">786</string> + <string id="787">787</string> + <string id="788">788</string> + <string id="789">789</string> + <string id="790">790</string> + <string id="791">791</string> + <string id="792">792</string> + <string id="793">793</string> + <string id="794">794</string> + <string id="795">795</string> + <string id="796">796</string> + <string id="797">797</string> + <string id="798">798</string> + <string id="799">799</string> + <string id="800">800</string> + <string id="801">801</string> + <string id="802">802</string> + <string id="803">803</string> + <string id="804">804</string> + <string id="805">805</string> + <string id="806">806</string> + <string id="807">807</string> + <string id="808">808</string> + <string id="809">809</string> + <string id="810">810</string> + <string id="811">811</string> + <string id="812">812</string> + <string id="813">813</string> + <string id="814">814</string> + <string id="815">815</string> + <string id="816">816</string> + <string id="817">817</string> + <string id="818">818</string> + <string id="819">819</string> + <string id="820">820</string> + <string id="821">821</string> + <string id="822">822</string> + <string id="823">823</string> + <string id="824">824</string> + <string id="825">825</string> + <string id="826">826</string> + <string id="827">827</string> + <string id="828">828</string> + <string id="829">829</string> + <string id="830">830</string> + <string id="831">831</string> + <string id="832">832</string> + <string id="833">833</string> + <string id="834">834</string> + <string id="835">835</string> + <string id="836">836</string> + <string id="837">837</string> + <string id="838">838</string> + <string id="839">839</string> + <string id="840">840</string> + <string id="841">841</string> + <string id="842">842</string> + <string id="843">843</string> + <string id="844">844</string> + <string id="845">845</string> + <string id="846">846</string> + <string id="847">847</string> + <string id="848">848</string> + <string id="849">849</string> + <string id="850">850</string> + <string id="851">851</string> + <string id="852">852</string> + <string id="853">853</string> + <string id="854">854</string> + <string id="855">855</string> + <string id="856">856</string> + <string id="857">857</string> + <string id="858">858</string> + <string id="859">859</string> + <string id="860">860</string> + <string id="861">861</string> + <string id="862">862</string> + <string id="863">863</string> + <string id="864">864</string> + <string id="865">865</string> + <string id="866">866</string> + <string id="867">867</string> + <string id="868">868</string> + <string id="869">869</string> + <string id="870">870</string> + <string id="871">871</string> + <string id="872">872</string> + <string id="873">873</string> + <string id="874">874</string> + <string id="875">875</string> + <string id="876">876</string> + <string id="877">877</string> + <string id="878">878</string> + <string id="879">879</string> + <string id="880">880</string> + <string id="881">881</string> + <string id="882">882</string> + <string id="883">883</string> + <string id="884">884</string> + <string id="885">885</string> + <string id="886">886</string> + <string id="887">887</string> + <string id="888">888</string> + <string id="889">889</string> + <string id="890">890</string> + <string id="891">891</string> + <string id="892">892</string> + <string id="893">893</string> + <string id="894">894</string> + <string id="895">895</string> + <string id="896">896</string> + <string id="897">897</string> + <string id="898">898</string> + <string id="899">899</string> + <string id="900">900</string> +</strings> diff --git a/Ember Media Manager/Langs/English_(en_US)-Help.xml b/Ember Media Manager/Langs/English_(en_US)-Help.xml index 81f1175..bf50c58 100644 --- a/Ember Media Manager/Langs/English_(en_US)-Help.xml +++ b/Ember Media Manager/Langs/English_(en_US)-Help.xml @@ -1,362 +1,369 @@ <strings> - <string control="Core_chkShowGenresText">If enabled, the value of the genre images will always be displayed. If disabled, the text will only be visible when you hover your mouse over one of the genre images.</string> - <string control="Core_chkSourceFromFolder">If enabled, Ember will check the folder name for source types. If disabled, Ember will only check the file name.</string> - <string control="Core_chkNoDisplayFanart">If enabled, fanart will not be displayed in the main window. This is helpful to speed up the interface on slow computers.</string> - <string control="Core_chkNoDisplayPoster">If enabled, posters will not be displayed in the main window. This is helpful to speed up the interface on slow computers.</string> - <string control="Core_chkShowDims">If enabled, the dimensions of the images (posters and fanart) will be overlayed on top of the images.</string> - <string control="Core_chkUpdates">If enabled, Ember will check for a new version at each start up.</string> - <string control="Core_chkOverwriteNfo">If enabled, NFO files will be overwritten when saving. If disabled, they will be renamed to *.info.</string> - <string control="Core_chkLogErrors">If enabled, all errors will be logged to a file located in <Ember Installation Directory>\Log\errlog.txt.</string> - <string control="Core_cbEpTheme">Select the theme to apply for the episode layout.</string> - <string control="Core_cbTVShowTheme">Select the theme to apply for the TV Show and Season layout.</string> - <string control="Core_cbMovieTheme">Select the theme to apply for the movie layout.</string> - <string control="Core_btnDLTrans">Download addons for Ember, including modules, themes, translations to other languages, and export templates.</string> - <string control="Core_cbIntLang">Select the language to use for Ember's interface. (You must restart Ember for changes to take effect)</string> - <string control="Core_chkCleanFolderJPG">Clean all files named "folder.jpg".</string> - <string control="Core_chkCleanExtrathumbs">Clean all "extrathumbs" folders.</string> - <string control="Core_chkCleanMovieTBN">Clean all files named "movie.tbn".</string> - <string control="Core_chkCleanMovieNameJPG">Clean all files named <movie>.jpg.</string> - <string control="Core_chkCleanMovieTBNb">Clean all files named <movie>.tbn.</string> - <string control="Core_chkCleanMovieJPG">Clean all files named "movie.jpg".</string> - <string control="Core_chkCleanFanartJPG">Clean all files named "fanart.jpg".</string> - <string control="Core_chkCleanPosterJPG">Clean all files named "poster.jpg".</string> - <string control="Core_chkCleanMovieFanartJPG">Clean all files named <movie>-fanart.jpg.</string> - <string control="Core_chkCleanPosterTBN">Clean all files named "poster.tbn".</string> - <string control="Core_chkCleanMovieNFO">Clean all files named "movie.nfo".</string> - <string control="Core_chkCleanDotFanartJPG">Clean all files named <movie>.fanart.jpg.</string> - <string control="Core_chkCleanMovieNFOb">Clean all files named <movie>.nfo.</string> - <string control="Core_chkWhitelistVideo">Automatically whitelist all files which have an extension in the "Valid Video Extensions" list.</string> - <string control="Core_btnRemoveWhitelist">Remove the selected extension from the whitelist.</string> - <string control="Core_btnAddWhitelist">Add the entered extension to the whitelist.</string> - <string control="Core_txtWhitelist">Enter an extension to add to the whitelist.</string> - <string control="Core_lstWhitelist">This list contains all the current extensions that will be skipped during cleaning.</string> - <string control="Core_chkYAMJCompatibleSets">If enabled, Ember will save sets information in a format that is compatible with YAMJ. If disabled, Ember will save sets information in a format that is compatible with XBMC.</string> - <string control="Core_chkAskCheckboxScrape">If enabled, when clicking on a checkbox in the movies list a non-automatic will be used. If disabled, an automatic scrape will be used.</string> - <string control="Core_chkMarkNew">If enabled, new movies will be "marked". If disabled, new movies will still be colored green until updated or the next Ember session.</string> - <string control="Core_lbGenre">Select the language(s) of the genres you would like Ember to display.</string> - <string control="Core_txtCheckTitleTol">Enter the tolerance level you would like Ember to use when title matching. The higher the number, the more lenient the algorithm is. 0 = disabled</string> - <string control="Core_chkCheckTitles">Enable this to have Ember check the differences between the title of the movie and it's file name. This is useful to make sure that the scraped data is actually for the selected movie file.</string> - <string control="Core_btnRemoveToken">Remove the selected sort token from the list.</string> - <string control="Core_btnAddToken">Add the entered sort token to the list.</string> - <string control="Core_txtSortToken">Enter in a sort token to add to the list.</string> - <string control="Core_lstSortTokens">A list of all current sort tokens. (If the movie title begins with a sort token, then the sort token will be moved to the end. For example: Sort Token = "The", Title = "The Dark Knight", Result = "Dark Knight, The")</string> - <string control="Core_chkDisplayYear">If enabled, Ember will display the year of the movie in the main movie list.</string> - <string control="Core_chkMovieExtraCol">Hide the Extrathumbs column from the main movie list.</string> - <string control="Core_chkMovieSubCol">Hide the Subtitles column from the main movie list.</string> - <string control="Core_chkMovieTrailerCol">Hide the Trailers column from the main movie list.</string> - <string control="Core_chkMovieInfoCol">Hide the Info column from the main movie list.</string> - <string control="Core_chkMovieFanartCol">Hide the Fanart column from the main movie list.</string> - <string control="Core_chkMoviePosterCol">Hide the Poster column from the main movie list.</string> - <string control="Core_chkMovieNameMultiOnly">If enabled, "<movie>.ext" items will only be utilized in folders that have multiple movies. This is useful when you have a mixture of multiple movie and single movie folders and you wish to reduce the number of extra files.</string> - <string control="Core_rbBracketTrailer">Save trailer files as "<movie>[trailer].ext".</string> - <string control="Core_rbDashTrailer">Save trailer files as "<movie>-trailer.ext".</string> - <string control="Core_chkVideoTSParent">If enabled, Ember will save the meta files in the parent directory (YAMJ compatible). If disabled, Ember will save the meta files directly to the VIDEO_TS folder (XBMC compatible). This setting applies to BDMV folders, as well.</string> - <string control="Core_chkMovieNameNFO">Save nfo files as "<movie>.nfo".</string> - <string control="Core_chkMovieNFO">Save nfo files as "movie.nfo".</string> - <string control="Core_chkMovieNameDotFanartJPG">Save fanart files as "<movie>.fanart.jpg".</string> - <string control="Core_chkMovieNameFanartJPG">Save fanart files as "<movie>-fanart.jpg".</string> - <string control="Core_chkFanartJPG">Save fanart files as "fanart.jpg"</string> - <string control="Core_chkFolderJPG">Save poster files as "folder.jpg"</string> - <string control="Core_chkPosterJPG">Save poster files as "poster.jpg"</string> - <string control="Core_chkPosterTBN">Save poster files as "poster.tbn"</string> - <string control="Core_chkMovieNameJPG">Save poster files as "<movie>.jpg"</string> - <string control="Core_chkMovieJPG">Save poster files as "movie.jpg"</string> - <string control="Core_chkMovieNameTBN">Save poster files as "<movie>.tbn"</string> - <string control="Core_chkMovieTBN">Save poster files as "movie.tbn"</string> - <string control="Core_lvMovies">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colID">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colName">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colPath">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colRecur">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colFolder">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colSingle">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_btnMovieRem">Remove the selected source(s) from the sources list.</string> - <string control="Core_btnMovieAddFolder">Add a new folder to the sources list.</string> - <string control="Core_txtPosterWidth">Resize poster files to the entered width.</string> - <string control="Core_txtPosterHeight">Resize poster files to the entered height.</string> - <string control="Core_tbPosterQual">Adjust the quality of the poster files. (0 = original quality)</string> - <string control="Core_chkResizePoster">Resize poster files before saving.</string> - <string control="Core_cbPosterSize">Select the preferred poster size you would like to retreive from the image servers. During automatic scrapers, Ember will attempt to find a poster of this size first. If a poster of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkOverwritePoster">If enabled, existing poster files will be overwritten if new ones are selected. If disabled, poster files will only be saved if a current one does not already exist.</string> - <string control="Core_txtFanartWidth">Resize fanart files to the entered width.</string> - <string control="Core_txtFanartHeight">Resize fanart files to the entered height.</string> - <string control="Core_chkFanartOnly">If enabled, Ember will only retrieve fanart of the selected size. (NOTE: If there are no fanart images of the selected size available, no fanart images will be retrieved)</string> - <string control="Core_tbFanartQual">Adjust the quality of the fanart files. (0 = original quality)</string> - <string control="Core_chkResizeFanart">Resize fanart files before saving.</string> - <string control="Core_cbFanartSize">Select the preferred fanart size you would like to retrieve from the image servers. Durint automatic scrapers, Ember will attempt to find a fanart image of this size first. If a fanart image of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkOverwriteFanart">If enabled, existing fanart files will be overwritten if new ones are selected. If disabled, fanart files will only be saved if a current one does not already exist.</string> - <string control="Core_chkNoSaveImagesToNfo">If enabled, Ember will not save URLs to the poster and fanart images in the nfo files. (Recommended for YAMJ compatibility)</string> - <string control="Core_chkSingleScrapeImages">Select images while scraping a single movie file.</string> - <string control="Core_chkUseImgCacheUpdaters">Save images to the image cache when scraping multiple movie files.</string> - <string control="Core_chkPersistImgCache">If enabled, Ember will not clear the image cache between sessions.</string> - <string control="Core_chkUseImgCache">Enable Ember's image cache.</string> - <string control="Core_chkUseETasFA">If enabled and no fanart is available for the selected movie, Ember will use one of the extracted thumbnails as the fanart image.</string> - <string control="Core_chkNoSpoilers">If enabled, extrathumbs will only be extracted from the first half of the movie in order to avoid "spoilers".</string> - <string control="Core_txtAutoThumbs">Enter the number of extrathumbs you would like to automatically generate.</string> - <string control="Core_chkAutoThumbs">If enabled, Ember will automatically extract the entered number of extrathumbs during scraping.</string> - <string control="Core_txtProxyDomain">Enter the domain for your proxy. (Optional - not necessary for most proxies)</string> - <string control="Core_txtProxyPassword">Enter the password needed to access your proxy.</string> - <string control="Core_txtProxyUsername">Enter the username needed to access your proxy.</string> - <string control="Core_chkEnableCredentials">Enable if your proxy requires authentication.</string> - <string control="Core_txtProxyPort">Enter the port needed to access your proxy.</string> - <string control="Core_txtProxyURI">Enter the IP or URL needed to access your proxy.</string> - <string control="Core_chkEnableProxy">If enabled, Ember will use the entered proxy for all internet communications.</string> - <string control="Core_btnDown">Move the selected filter up in the list. (Filters are processed in order from top to bottom)</string> - <string control="Core_btnUp">Move the selected filter down in the list. (Filters are processed in order from top to bottom)</string> - <string control="Core_chkProperCase">Automatically apply proper casing to movie titles. (Example: "the dark knight" becomes "The Dark Knight")</string> - <string control="Core_btnRemoveFilter">Remove the selected filter from the list.</string> - <string control="Core_btnAddFilter">Add the entered filter to the list.</string> - <string control="Core_txtFilter">Enter text or regex to use as a filter. Special: "a[->]b" = replace all occurrances of "a" with "b" (Example: ".[->]_" will replace all periods in the title with underscores.)</string> - <string control="Core_lstFilters">The list of all current filters that will be used when generating titles for movies.</string> - <string control="Core_chkMissingExtra">If enabled, Ember will display movies missing extrathumbs when utilizing the Missing Items Filter.</string> - <string control="Core_chkMissingSubs">If enabled, Ember will display movies missing subtitle files when utilizing the Missing Items Filter.</string> - <string control="Core_chkMissingTrailer">If enabled, Ember will display movies missing trailers when utilizing the Missing Items Filter.</string> - <string control="Core_chkMissingNFO">If enabled, Ember will display movies missing nfo files when utilizing the Missing Items Filter.</string> - <string control="Core_chkMissingFanart">If enabled, Ember will display movies missing fanart when utilizing the Missing Items Filter.</string> - <string control="Core_chkMissingPoster">If enabled, Ember will display movies missing posters when utilizing the Missing Items Filter.</string> - <string control="Core_chkAutoBD">If enabled, Ember will automatically save new fanart images to the entered backdrops folder.</string> - <string control="Core_btnBrowse">Open a folder browser to select a backdrops folder.</string> - <string control="Core_txtBDPath">The path to the backdrops folder.</string> - <string control="Core_btnRemoveNoStack">Remove the selected extension from the No Stack Extensions list.</string> - <string control="Core_btnAddNoStack">Add the entered extension to the No Stack Extensions list.</string> - <string control="Core_txtNoStack">Enter an extension to add to the No Stack Extensions list.</string> - <string control="Core_lstNoStack">The list of extensions Ember will not stack into single files when adding them to the library.</string> - <string control="Core_btnRemMovieExt">Remove the selected extension from the Valid Video Extensions list.</string> - <string control="Core_btnAddMovieExt">Add the entered extension to the Valid Video Extensions list.</string> - <string control="Core_txtMovieExt">Enter an extension to add to the Valid Video Extensions list.</string> - <string control="Core_lstMovieExts">The list of extensions Ember will look for when updating the library.</string> - <string control="Core_btnEditSource">Edit the selected source.</string> - <string control="Core_chkScanOrderModify">If enabled, Ember will add new files in order of there last modified time. If disabled, Ember will add new files to the library in alphabetical order.</string> - <string control="Core_chkSortBeforeScan">If enabled, Ember will sort all single files in the top directory of the source into their own folders.</string> - <string control="Core_chkIgnoreLastScan">If enabled, Ember will scan all folders/files regardless of the last scan time. If disabled, Ember will only scan files/folders added after the last time files were scanned.</string> - <string control="Core_chkCleanDB">If enabled, Ember will clean the movie database after each scan. (Remove entries for files that no longer exist or no longer match selected setting values)</string> - <string control="Core_chkAutoDetectVTS">If enabled, Ember will attempt to recognize VIDEO_TS folders even if the folder is not named "VIDEO_TS". If disabled, Ember will still handle VIDEO_TS folders if the folder is named "VIDEO_TS". This setting also applies to BDMV folders.</string> - <string control="Core_chkSkipStackedSizeCheck">If enabled, Ember will not skip files smaller than the entered "Skip Files Smaller Than" size if they contain stacking markers (such as "CD1" or "DVD2").</string> - <string control="Core_txtSkipLessThan">Ember will use the entered size as the minimum size for movie files. Any files smaller than this will be skipped when updating the library.</string> - <string control="Core_txtTVSkipLessThan">Ember will use the entered size as the minimum size for episode files. Any files smaller than this will be skipped when updating the library.</string> - <string control="Core_cbTrailerQuality">Select the preferred quality of the downloaded trailers.</string> - <string control="Core_chkDeleteAllTrailers">If enabled, Ember will delete all existing trailers for the movie before saving the new one.</string> - <string control="Core_chkOverwriteTrailer">If enabled, existing trailer files will be overwritten when saving new ones. If disabled, new trailer files will only be saved if one does not already exist.</string> - <string control="Core_chkNoDLTrailer">If enabled, trailer files will not be downloaded. Instead, the trailer url will be saved to the nfo.</string> - <string control="Core_chkSingleScrapeTrailer">If enabled, trailers will be downloaded while scraping a single movie.</string> - <string control="Core_chkUpdaterTrailer">If enabled, trailers will be downloaded during "All Items" scrapers.</string> - <string control="Core_chkDownloadTrailer">Enable Ember's trailer support.</string> - <string control="Core_chkAutoETSize">Select the size of the fanart you would like to download as extrathumbs.</string> - <string control="Core_cbAutoETSize">If enabled, Ember will automatically download all fanart of the selected size as extrathumbs.</string> - <string control="Core_txtETWidth">Resize extrathumbs to the entered width.</string> - <string control="Core_txtETHeight">Resize extrathumbs to the entered height.</string> - <string control="Core_chkETPadding">If enabled, Ember will add "black bars" to the edges of the extrathumbs if they are smaller than the entered size.</string> - <string control="Core_rbETCustom">Resize extrathumbs to the entered size, regardless of the native resolution.</string> - <string control="Core_rbETNative">Save extrathumbs using the same resolution as the video.</string> - <string control="Core_lvTVSources">The list of all current TV Show sources. (Paths that will be scanned for TV Show files)</string> - <string control="Core_ColumnHeader1">The list of all current TV Show sources. (Paths that will be scanned for TV Show files)</string> - <string control="Core_ColumnHeader2">The list of all current TV Show sources. (Paths that will be scanned for TV Show files)</string> - <string control="Core_ColumnHeader3">The list of all current TV Show sources. (Paths that will be scanned for TV Show files)</string> - <string control="Core_chkTVScanOrderModify">If enabled, Ember will add new files in order of there last modified time. If disabled, Ember will add new files to the library in alphabetical order.</string> - <string control="Core_chkTVIgnoreLastScan">If enabled, Ember will scan all folders/files regardless of the last scan time. If disabled, Ember will only scan files/folders added after the last time files were scanned.</string> - <string control="Core_chkTVCleanDB">If enabled, Ember will clean the TV Show database after each scan. (Remove entries for files that no longer exist or no longer match selected setting values)</string> - <string control="Core_btnAddTVSource">Add a new folder to the sources list.</string> - <string control="Core_btnEditTVSource">Edit the selected source.</string> - <string control="Core_btnRemTVSource">Remove the selected source(s) from the sources list.</string> - <string control="Core_chkSeasonAllJPG">Save All Seasons poster files as "season-all.jpg".</string> - <string control="Core_chkSeasonAllTBN">Save All Seasons poster files as "season-all.tbn".</string> - <string control="Core_chkEpisodeDotFanart">Save episode fanart files as "<episode>.fanart.jpg".</string> - <string control="Core_chkEpisodeDashFanart">Save episode fanart files as "<episode>-fanart.jpg".</string> - <string control="Core_chkEpisodeJPG">Save episode poster files as "<episode>.jpg".</string> - <string control="Core_chkEpisodeTBN">Save episode poster files as "<episode>.tbn".</string> - <string control="Core_chkSeasonDotFanart">Save season fanart files as "<season>.fanart.jpg". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonDashFanart">Save season fanart files as "<season>-fanart.jpg". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonFanartJPG">Save season fanart files as "fanart.jpg". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonFolderJPG">Save season fanart files as "folder.jpg". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonNameJPG">Save season poster files as "<season>.jpg". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonNameTBN">Save season poster files as "<season>.tbn". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonPosterJPG">Save season poster files as "poster.jpg". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonPosterTBN">Save season poster files as "poster.tbn". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonXTBN">Save season poster files as "seasonX.tbn". (Example: season2.tbn)</string> - <string control="Core_chkSeasonXXTBN">Save season poster files as "seasonXX.tbn". (Example: season02.tbn)</string> - <string control="Core_chkShowDotFanart">Save show fanart files as "<show>.fanart.jpg".</string> - <string control="Core_chkShowDashFanart">Save show fanart files as "<show>-fanart.jpg".</string> - <string control="Core_chkShowFanartJPG">Save show fanart files as "fanart.jpg".</string> - <string control="Core_chkShowJPG">Save show poster files as "<show>.jpg".</string> - <string control="Core_chkShowTBN">Save show poster files as "<show>.tbn".</string> - <string control="Core_chkShowPosterJPG">Save show poster files as "poster.jpg".</string> - <string control="Core_chkShowPosterTBN">Save show poster files as "poster.tbn".</string> - <string control="Core_chkShowFolderJPG">Save show poster files as "folder.jpg".</string> - <string control="Core_btnAddShowRegex">Add the entered regex to the TV Show Regex list.</string> - <string control="Core_txtSeasonRegex">Enter the regex to use to detect the season number.</string> - <string control="Core_cboSeasonRetrieve">Choose if you would like to process the season regex against the directory name or the episode file name.</string> - <string control="Core_txtEpRegex">Enter the regex to use to detect the episode number.</string> - <string control="Core_cboEpRetrieve">Choose if you would like to process the episode regex against the directory name, the episode file name, or the results of the season regex.</string> - <string control="Core_btnEditShowRegex">Edit the selected TV Show regex.</string> - <string control="Core_btnRemoveShowRegex">Remove the selected TV Show regex from the list.</string> - <string control="Core_lvShowRegex">The list of current TV Show regex.</string> - <string control="Core_colRegID">The list of current TV Show regex.</string> - <string control="Core_colSeason">The list of current TV Show regex.</string> - <string control="Core_colSeasonApply">The list of current TV Show regex.</string> - <string control="Core_colEpisode">The list of current TV Show regex.</string> - <string control="Core_colEpApply">The list of current TV Show regex.</string> - <string control="Core_chkDisplayMissingEpisodes">If enabled, episodes that are missing from your collection will be displayed in the episode list, but will be colored a light gray.</string> - <string control="Core_chkEpisodeNfoCol">Hide the Info column from the episode list.</string> - <string control="Core_chkEpisodeFanartCol">Hide the Fanart column from the episode list.</string> - <string control="Core_chkEpisodePosterCol">Hide the Poster column from the episode list.</string> - <string control="Core_chkSeasonFanartCol">Hide the Fanart column from the season list.</string> - <string control="Core_chkSeasonPosterCol">Hide the Poster column from the poster list.</string> - <string control="Core_chkShowNfoCol">Hide the Info column from the show list.</string> - <string control="Core_chkShowFanartCol">Hide the Fanart column from the show list.</string> - <string control="Core_chkShowPosterCol">Hide the Poster column from the show list.</string> - <string control="Core_chkDisplayAllSeason">If enabled, if an All Season poster exists for the selected show, it will be displayed on the right of the interface.</string> - <string control="Core_cbRatingRegion">Select the region of the ratings you would like to display in the interface.</string> - <string control="Core_chkNoFilterEpisode">If enabled, Ember will not attempt to filter episode file names for titles and instead will build them from the show name, season, and episode until a proper title has been fetched.</string> - <string control="Core_btnEpFilterDown">Move the selected filter up in the list. (Filters are processed in order from top to bottom)</string> - <string control="Core_btnEpFilterUp">Move the selected filter down in the list. (Filters are processed in order from top to bottom)</string> - <string control="Core_chkEpProperCase">Automatically apply proper casing to episode titles. (Example: "stole beer from golfer" becomes "Stole Beer From Golfer")</string> - <string control="Core_btnRemoveEpFilter">Remove the selected filter from the filter list.</string> - <string control="Core_btnAddEpFilter">Add the entered filter to the filter list.</string> - <string control="Core_txtEpFilter">Enter a filter to add to the filter list.</string> - <string control="Core_lstEpFilters">The list of all current filters that will be used when generating titles for episodes.</string> - <string control="Core_btnShowFilterDown">Move the selected filter up in the list. (Filters are processed in order from top to bottom)</string> - <string control="Core_btnShowFilterUp">Move the selected filter down in the list. (Filters are processed in order from top to bottom)</string> - <string control="Core_chkShowProperCase">Automatically apply proper casing to episode titles. (Example: "my name is earl" becomes "My Name is Earl")</string> - <string control="Core_btnRemoveShowFilter">Remove the selected filter from the filter list.</string> - <string control="Core_btnAddShowFilter">Add the entered filter to the filter list.</string> - <string control="Core_txtShowFilter">Enter a filter to add to the filter list.</string> - <string control="Core_lstShowFilters">The list of all current filters that will be used when generating titles for shows.</string> - <string control="Core_chkGetEnglishImages">If enabled, all English images will be retrieved, regardless of the selected language.</string> - <string control="Core_chkOnlyTVImagesLanguage">If enabled, only images for the preferred language will be retrieved.</string> - <string control="Core_txtShowPosterWidth">Resize show poster files to the entered width.</string> - <string control="Core_txtShowPosterHeight">Resize show poster files to the entered height.</string> - <string control="Core_tbShowPosterQual">Adjust the quality of the show poster files. (0 = original quality)</string> - <string control="Core_chkResizeShowPoster">Resize show poster files before saving.</string> - <string control="Core_cbShowPosterSize">Select the preferred show poster type you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a poster of this type first. If a poster of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkOverwriteShowPoster">If enabled, existing show poster files will be overwritten if new ones are selected. If disabled, show poster files will only be saved if a current one does not already exist.</string> - <string control="Core_txtShowFanartWidth">Resize show fanart files to the entered width.</string> - <string control="Core_txtShowFanartHeight">Resize show fanart files to the entered height.</string> - <string control="Core_tbShowFanartQual">Adjust the quality of the show fanart files. (0 = original quality)</string> - <string control="Core_chkResizeShowFanart">Resize show fanart files before saving.</string> - <string control="Core_cbShowFanartSize">Select the preferred fanart size you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a fanart image of this size first. If a fanart image of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkOverwriteShowFanart">If enabled, existing show fanart files will be overwritten if new ones are selected. If disabled, show fanart files will only be saved if a current one does not already exist.</string> - <string control="Core_txtSeaPosterWidth">Resize season poster files to the entered width.</string> - <string control="Core_txtSeaPosterHeight">Resize season poster files to the entered height.</string> - <string control="Core_tbSeaPosterQual">Adjust the quality of the season poster files. (0 = original quality)</string> - <string control="Core_chkSeaResizePoster">Resize season poster files before saving.</string> - <string control="Core_cbSeaPosterSize">Select the preferred season poster type you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a poster of this type first. If a poster of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkSeaOverwritePoster">If enabled, existing season poster files will be overwritten if new ones are selected. If disabled, season poster files will only be saved if a current one does not already exist.</string> - <string control="Core_txtSeaFanartWidth">Resize season fanart files to the entered width.</string> - <string control="Core_txtSeaFanartHeight">Resize season fanart files to the entered height.</string> - <string control="Core_tbSeaFanartQual">Adjust the quality of the season fanart files. (0 = original quality)</string> - <string control="Core_chkSeaResizeFanart">Resize season fanart files before saving.</string> - <string control="Core_cbSeaFanartSize">Select the preferred fanart size you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a fanart image of this size first. If a fanart image of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkSeaOverwriteFanart">If enabled, existing season fanart files will be overwritten if new ones are selected. If disabled, season fanart files will only be saved if a current one does not already exist.</string> - <string control="Core_txtEpPosterWidth">Resize episode poster files to the entered width.</string> - <string control="Core_txtEpPosterHeight">Resize episode poster files to the entered height.</string> - <string control="Core_tbEpPosterQual">Adjust the quality of the episode poster files. (0 = original quality)</string> - <string control="Core_chkResizeEpPoster">Resize episode poster files before saving.</string> - <string control="Core_chkOverwriteEpPoster">If enabled, existing episode poster files will be overwritten if new ones are selected. If disabled, episode poster files will only be saved if a current one does not already exist.</string> - <string control="Core_txtEpFanartWidth">Resize episode fanart files to the entered width.</string> - <string control="Core_txtEpFanartHeight">Resize episode fanart files to the entered height.</string> - <string control="Core_tbEpFanartQual">Adjust the quality of the episode fanart files. (0 = original quality)</string> - <string control="Core_chkResizeEpFanart">Resize episode fanart files before saving.</string> - <string control="Core_cbEpFanartSize">Select the preferred fanart size you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a fanart image of this size first. If a fanart image of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkOverwriteEpFanart">If enabled, existing episode fanart files will be overwritten if new ones are selected. If disabled, episode fanart files will only be saved if a current one does not already exist.</string> - <string control="Core_chkScraperShowRating">Enable scraping show rating.</string> - <string control="Core_chkScraperShowActors">Enable scraping show actors.</string> - <string control="Core_chkScraperShowStudio">Enable scraping show studios.</string> - <string control="Core_chkScraperShowPremiered">Enable scraping show premiered date.</string> - <string control="Core_chkScraperShowEGU">Enable scraping the Episode Guide URL.</string> - <string control="Core_chkScraperShowMPAA">Enable scraping show MPAA.</string> - <string control="Core_chkScraperShowPlot">Enable scraping show plot.</string> - <string control="Core_chkScraperShowGenre">Enable scraping show genre.</string> - <string control="Core_chkScraperShowTitle">Enable scraping show title.</string> - <string control="Core_chkScraperEpActors">Enable scraping episode actors.</string> - <string control="Core_chkScraperEpCredits">Enable scraping episode credits.</string> - <string control="Core_chkScraperEpDirector">Enable scraping episode directors.</string> - <string control="Core_chkScraperEpPlot">Enable scraping episode plot.</string> - <string control="Core_chkScraperEpRating">Enable scraping episode rating.</string> - <string control="Core_chkScraperEpAired">Enable scraping episode aired date.</string> - <string control="Core_chkScraperEpTitle">Enable scraping episode title.</string> - <string control="Core_chkScraperEpEpisode">Enable scraping episode number.</string> - <string control="Core_chkScraperEpSeason">Enable scraping season number.</string> - <string control="Core_chkEpLockTitle">If enabled, the episode title will only be scraped if a current one does not exist.</string> - <string control="Core_chkEpLockRating">If enabled, the episode rating will only be scraped if a current one does not exist.</string> - <string control="Core_chkEpLockPlot">If enabled, the episode plot will only be scraped if a current one does not exist.</string> - <string control="Core_chkShowLockPlot">If enabled, the show plot will only be scraped if a current one does not exist.</string> - <string control="Core_chkShowLockGenre">If enabled, the show genre will only be scraped if a current one does not exist.</string> - <string control="Core_chkShowLockStudio">If enabled, the show studio will only be scraped if a current one does not exist.</string> - <string control="Core_chkShowLockRating">If enabled, the show rating will only be scraped if a current one does not exist.</string> - <string control="Core_chkShowLockTitle">If enabled, the show title will only be scraped if a current one does not exist.</string> - <string control="Core_lstTVMetaData">The list of extensions that have default meta data entries.</string> - <string control="Core_txtTVDefFIExt">Enter an extension to create a default meta data entry.</string> - <string control="Core_btnRemoveTVMetaDataFT">Remove the default meta data for the selected extension from the default meta data list.</string> - <string control="Core_btnEditTVMetaDataFT">Edit the default meta data for the selected extension in the default meta data list.</string> - <string control="Core_btnNewTVMetaDataFT">Create default meta data for the entered extension and add the to the default meta data list.</string> - <string control="Core_cboTVMetaDataOverlay">If the selected language is found in the episode, a special icon indicator will be overlayed on the meta data audio icon.</string> - <string control="Core_chkTVScanMetaData">If enabled, Ember will scan episode files for meta data.</string> - <string control="Core_cboTVUpdate">Select the time to wait between updating cached TV information files.</string> - <string control="Core_txtAPIKey">Enter the TVDB API Key of the media center/player you use. This is not necessary for Ember to function. It is only used when saving the Episode Guide URL to the nfo.</string> - <string control="Core_txtTVDBMirror">Enter the mirror to use when retrieving information from theTVDB.</string> - <string control="Core_btnTVLanguageFetch">Click to download all available languages from theTVDB.</string> - <string control="Core_cbTVLanguage">Select the preferred language to use when downloading show information and images.</string> - <string control="Core_chkCertification">Enable scraping movie certification.</string> - <string control="Core_chkTop250">Enable scraping movie Top 250 ranking.</string> - <string control="Core_chkCountry">Enable scraping movie production country.</string> - <string control="Core_txtGenreLimit">Limit the number of scraped genres to the entered value.</string> - <string control="Core_txtActorLimit">Limit the number of scraped actors to the entered value.</string> - <string control="Core_chkCrew">Enable scraping movie other crew. (Scrape Full Crew must be enabled)</string> - <string control="Core_chkMusicBy">Enable scraping movie musicians. (Scrape Full Crew must be enabled)</string> - <string control="Core_chkProducers">Enable scraping movie producers. (Scrape Full Crew must be enabled)</string> - <string control="Core_chkWriters">Enable scraping movie writers.</string> - <string control="Core_chkStudio">Enable scraping movie studio.</string> - <string control="Core_chkRuntime">Enable scraping movie runtime.</string> - <string control="Core_chkPlot">Enable scraping movie plot.</string> - <string control="Core_chkOutline">Enable scraping movie outline.</string> - <string control="Core_chkGenre">Enable scraping movie genre.</string> - <string control="Core_chkDirector">Enable scraping movie director.</string> - <string control="Core_chkTagline">Enable scraping movie tagline.</string> - <string control="Core_chkCast">Enable scraping movie cast.</string> - <string control="Core_chkVotes">Enable scraping movie votes.</string> - <string control="Core_chkTrailer">Enable scraping movie trailer url.</string> - <string control="Core_chkRating">Enable scraping movie rating.</string> - <string control="Core_chkRelease">Enable scraping movie release date.</string> - <string control="Core_chkMPAA">Enable scraping movie MPAA.</string> - <string control="Core_chkYear">Enable scraping movie year.</string> - <string control="Core_chkTitle">Enable scraping movie title.</string> - <string control="Core_lstMetaData">The list of extensions that have default meta data entries.</string> - <string control="Core_txtDefFIExt">Enter an extension to create a default meta data entry.</string> - <string control="Core_btnRemoveMetaDataFT">Remove the default meta data for the selected extension from the default meta data list.</string> - <string control="Core_btnEditMetaDataFT">Edit the default meta data for the selected extension in the default meta data list.</string> - <string control="Core_btnNewMetaDataFT">Create default meta data for the entered extension and add the to the default meta data list.</string> - <string control="Core_chkIFOScan">If enabled, Ember will process *.ifo files for meta data information.</string> - <string control="Core_cbLanguages">If the selected language is found in the movie, a special icon indicator will be overlayed on the meta data audio icon.</string> - <string control="Core_txtRuntimeFormat">Enter the format you wish to use for the movie duration retrieved from scanning meta data. Note you can also use <0m> for 0 padding minutes</string> - <string control="Core_chkScanMediaInfo">If enabled, Ember will scan movie files for meta data.</string> - <string control="Core_chkUseMIDuration">Use the movie duration retrieved from scanning meta data as the runtime of the movie.</string> - <string control="Core_chkLockOutline">If enabled, the movie outline will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockPlot">If enabled, the movie plot will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockTrailer">If enabled, the movie trailer will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockGenre">If enabled, the movie genre will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockRealStudio">If enabled, the movie studio will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockRating">If enabled, the movie rating will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockTagline">If enabled, the movie tagline will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockTitle">If enabled, the movie title will only be scraped if a current one does not exist.</string> - <string control="Core_cbForce">Select the region of the title you would like Ember to look for.</string> - <string control="Core_chkForceTitle">If enabled, Ember will check for alternative titles in the selected language. This is useful for fetching titles in your native language when scraping foreign films.</string> - <string control="Core_chkOutlineForPlot">If enabled, Ember will use the outline for the plot if the plot is empty.</string> - <string control="Core_chkCastWithImg">If enabled, Ember will only scrape cast entries that have valid images.</string> - <string control="Core_chkUseCertForMPAA">If enabled, Ember will use the certifcation of the selected region in place of the MPAA rating.</string> - <string control="Core_chkFullCast">If enabled, all cast members will be scraped instead of only top billed.</string> - <string control="Core_chkFullCrew">If enabled, all crew members will be scraped (if individually enabled).</string> - <string control="Core_cbCert">Select the region to filter certification ratings.</string> - <string control="Core_chkCert">Only scrape the certificaton rating for the selected region.</string> - <string control="Core_chkMarkNewShows">If enabled, new shows will be "marked". If disabled, new shows will still be colored green until updated or the next Ember session.</string> - <string control="Core_chkMarkNewEpisodes">If enabled, new episodes will be "marked". If disabled, new episodes will still be colored green until updated or the next Ember session.</string> - <string control="Core_cbOrdering">Select the default ordering Ember will use when scraping information for a show.</string> - <string control="Core_chkOnlyValueForCert">If enabled, Ember will only save the value of the certification to the MPAA field. (Example: "Germany:18" will save as "18")</string> - <string control="Core_rbBanner">If enabled, Ember will attempt to download a banner (wide) image of the selected type as the default show poster.</string> - <string control="Core_rbPoster">If enabled, Ember will attempt to download a poster image of the selected type as the default show poster.</string> - <string control="Core_btnResetShowFilters">This will reset the show filters to the default list. WARNING: This WILL delete any custom filters you have entered.</string> - <string control="Core_btnResetEpFilter">This will reset the episode filters to the default list. WARNING: This WILL delete any custom filters you have entered.</string> - <string control="Core_btnResetMovieFilters">This will reset the movie filters to the default list. WARNING: This WILL delete any custom filters you have entered.</string> - <string control="Core_btnResetValidExts">This will reset the valid extensions to the default list. WARNING: This WILL delete any custom extensions you have entered.</string> - <string control="Core_ResetShowRegex">This will reset the show regex to the default list. WARNING: This WILL delete any custom regex you have entered.</string> - <string control="Core_chkClickScrape">Enable Click Scrape on main screen column marks.</string> -</strings> \ No newline at end of file + <string control="Core_chkShowGenresText">If enabled, the value of the genre images will always be displayed. If disabled, the text will only be visible when you hover your mouse over one of the genre images.</string> + <string control="Core_chkSourceFromFolder">If enabled, Ember will check the folder name for source types. If disabled, Ember will only check the file name.</string> + <string control="Core_chkNoDisplayFanart">If enabled, fanart will not be displayed in the main window. This is helpful to speed up the interface on slow computers.</string> + <string control="Core_chkNoDisplayPoster">If enabled, posters will not be displayed in the main window. This is helpful to speed up the interface on slow computers.</string> + <string control="Core_chkShowDims">If enabled, the dimensions of the images (posters and fanart) will be overlayed on top of the images.</string> + <string control="Core_chkUpdates">If enabled, Ember will check for a new version at each start up.</string> + <string control="Core_chkOverwriteNfo">If enabled, NFO files will be overwritten when saving. If disabled, they will be renamed to *.info.</string> + <string control="Core_chkLogErrors">If enabled, all errors will be logged to a file located in <Ember Installation Directory>\Log\errlog.txt.</string> + <string control="Core_cbEpTheme">Select the theme to apply for the episode layout.</string> + <string control="Core_cbTVShowTheme">Select the theme to apply for the TV Show and Season layout.</string> + <string control="Core_cbMovieTheme">Select the theme to apply for the movie layout.</string> + <string control="Core_btnDLTrans">Download addons for Ember, including modules, themes, translations to other languages, and export templates.</string> + <string control="Core_cbIntLang">Select the language to use for Ember's interface. (You must restart Ember for changes to take effect)</string> + <string control="Core_chkCleanFolderJPG">Clean all files named "folder.jpg".</string> + <string control="Core_chkCleanExtrathumbs">Clean all "extrathumbs" folders.</string> + <string control="Core_chkCleanMovieTBN">Clean all files named "movie.tbn".</string> + <string control="Core_chkCleanMovieNameJPG">Clean all files named <movie>.jpg.</string> + <string control="Core_chkCleanMovieTBNb">Clean all files named <movie>.tbn.</string> + <string control="Core_chkCleanMovieJPG">Clean all files named "movie.jpg".</string> + <string control="Core_chkCleanFanartJPG">Clean all files named "fanart.jpg".</string> + <string control="Core_chkCleanPosterJPG">Clean all files named "poster.jpg".</string> + <string control="Core_chkCleanMovieFanartJPG">Clean all files named <movie>-fanart.jpg.</string> + <string control="Core_chkCleanPosterTBN">Clean all files named "poster.tbn".</string> + <string control="Core_chkCleanMovieNFO">Clean all files named "movie.nfo".</string> + <string control="Core_chkCleanDotFanartJPG">Clean all files named <movie>.fanart.jpg.</string> + <string control="Core_chkCleanMovieNFOb">Clean all files named <movie>.nfo.</string> + <string control="Core_chkWhitelistVideo">Automatically whitelist all files which have an extension in the "Valid Video Extensions" list.</string> + <string control="Core_btnRemoveWhitelist">Remove the selected extension from the whitelist.</string> + <string control="Core_btnAddWhitelist">Add the entered extension to the whitelist.</string> + <string control="Core_txtWhitelist">Enter an extension to add to the whitelist.</string> + <string control="Core_lstWhitelist">This list contains all the current extensions that will be skipped during cleaning.</string> + <string control="Core_chkYAMJCompatibleSets">If enabled, Ember will save sets information in a format that is compatible with YAMJ. If disabled, Ember will save sets information in a format that is compatible with XBMC.</string> + <string control="Core_chkAskCheckboxScrape">If enabled, when clicking on a checkbox in the movies list a non-automatic will be used. If disabled, an automatic scrape will be used.</string> + <string control="Core_chkMarkNew">If enabled, new movies will be "marked". If disabled, new movies will still be colored green until updated or the next Ember session.</string> + <string control="Core_lbGenre">Select the language(s) of the genres you would like Ember to display.</string> + <string control="Core_txtCheckTitleTol">Enter the tolerance level you would like Ember to use when title matching. The higher the number, the more lenient the algorithm is. 0 = disabled</string> + <string control="Core_chkCheckTitles">Enable this to have Ember check the differences between the title of the movie and it's file name. This is useful to make sure that the scraped data is actually for the selected movie file.</string> + <string control="Core_btnRemoveToken">Remove the selected sort token from the list.</string> + <string control="Core_btnAddToken">Add the entered sort token to the list.</string> + <string control="Core_txtSortToken">Enter in a sort token to add to the list.</string> + <string control="Core_lstSortTokens">A list of all current sort tokens. (If the movie title begins with a sort token, then the sort token will be moved to the end. For example: Sort Token = "The", Title = "The Dark Knight", Result = "Dark Knight, The")</string> + <string control="Core_chkDisplayYear">If enabled, Ember will display the year of the movie in the main movie list.</string> + <string control="Core_chkMovieExtraCol">Hide the Extrathumbs column from the main movie list.</string> + <string control="Core_chkMovieSubCol">Hide the Subtitles column from the main movie list.</string> + <string control="Core_chkMovieTrailerCol">Hide the Trailers column from the main movie list.</string> + <string control="Core_chkMovieInfoCol">Hide the Info column from the main movie list.</string> + <string control="Core_chkMovieFanartCol">Hide the Fanart column from the main movie list.</string> + <string control="Core_chkMoviePosterCol">Hide the Poster column from the main movie list.</string> + <string control="Core_chkMovieNameMultiOnly">If enabled, "<movie>.ext" items will only be utilized in folders that have multiple movies. This is useful when you have a mixture of multiple movie and single movie folders and you wish to reduce the number of extra files.</string> + <string control="Core_rbBracketTrailer">Save trailer files as "<movie>[trailer].ext".</string> + <string control="Core_rbDashTrailer">Save trailer files as "<movie>-trailer.ext".</string> + <string control="Core_chkVideoTSParent">If enabled, Ember will save the meta files in the parent directory (YAMJ compatible). If disabled, Ember will save the meta files directly to the VIDEO_TS folder (XBMC compatible). This setting applies to BDMV folders, as well.</string> + <string control="Core_chkMovieNameNFO">Save nfo files as "<movie>.nfo".</string> + <string control="Core_chkMovieNFO">Save nfo files as "movie.nfo".</string> + <string control="Core_chkMovieNameDotFanartJPG">Save fanart files as "<movie>.fanart.jpg".</string> + <string control="Core_chkMovieNameFanartJPG">Save fanart files as "<movie>-fanart.jpg".</string> + <string control="Core_chkFanartJPG">Save fanart files as "fanart.jpg"</string> + <string control="Core_chkFolderJPG">Save poster files as "folder.jpg"</string> + <string control="Core_chkPosterJPG">Save poster files as "poster.jpg"</string> + <string control="Core_chkPosterTBN">Save poster files as "poster.tbn"</string> + <string control="Core_chkMovieNameJPG">Save poster files as "<movie>.jpg"</string> + <string control="Core_chkMovieJPG">Save poster files as "movie.jpg"</string> + <string control="Core_chkMovieNameTBN">Save poster files as "<movie>.tbn"</string> + <string control="Core_chkMovieTBN">Save poster files as "movie.tbn"</string> + <string control="Core_lvMovies">The list of all current movie sources. (Paths that will be scanned for movie files)</string> + <string control="Core_colID">The list of all current movie sources. (Paths that will be scanned for movie files)</string> + <string control="Core_colName">The list of all current movie sources. (Paths that will be scanned for movie files)</string> + <string control="Core_colPath">The list of all current movie sources. (Paths that will be scanned for movie files)</string> + <string control="Core_colRecur">The list of all current movie sources. (Paths that will be scanned for movie files)</string> + <string control="Core_colFolder">The list of all current movie sources. (Paths that will be scanned for movie files)</string> + <string control="Core_colSingle">The list of all current movie sources. (Paths that will be scanned for movie files)</string> + <string control="Core_btnMovieRem">Remove the selected source(s) from the sources list.</string> + <string control="Core_btnMovieAddFolder">Add a new folder to the sources list.</string> + <string control="Core_txtPosterWidth">Resize poster files to the entered width.</string> + <string control="Core_txtPosterHeight">Resize poster files to the entered height.</string> + <string control="Core_tbPosterQual">Adjust the quality of the poster files. (0 = original quality)</string> + <string control="Core_chkResizePoster">Resize poster files before saving.</string> + <string control="Core_cbPosterSize">Select the preferred poster size you would like to retreive from the image servers. During automatic scrapers, Ember will attempt to find a poster of this size first. If a poster of the selected size cannot be found, the first available image will be used instead.</string> + <string control="Core_chkOverwritePoster">If enabled, existing poster files will be overwritten if new ones are selected. If disabled, poster files will only be saved if a current one does not already exist.</string> + <string control="Core_txtFanartWidth">Resize fanart files to the entered width.</string> + <string control="Core_txtFanartHeight">Resize fanart files to the entered height.</string> + <string control="Core_chkFanartOnly">If enabled, Ember will only retrieve fanart of the selected size. (NOTE: If there are no fanart images of the selected size available, no fanart images will be retrieved)</string> + <string control="Core_tbFanartQual">Adjust the quality of the fanart files. (0 = original quality)</string> + <string control="Core_chkResizeFanart">Resize fanart files before saving.</string> + <string control="Core_cbFanartSize">Select the preferred fanart size you would like to retrieve from the image servers. Durint automatic scrapers, Ember will attempt to find a fanart image of this size first. If a fanart image of the selected size cannot be found, the first available image will be used instead.</string> + <string control="Core_chkOverwriteFanart">If enabled, existing fanart files will be overwritten if new ones are selected. If disabled, fanart files will only be saved if a current one does not already exist.</string> + <string control="Core_chkNoSaveImagesToNfo">If enabled, Ember will not save URLs to the poster and fanart images in the nfo files. (Recommended for YAMJ compatibility)</string> + <string control="Core_chkSingleScrapeImages">Select images while scraping a single movie file.</string> + <string control="Core_chkUseImgCacheUpdaters">Save images to the image cache when scraping multiple movie files.</string> + <string control="Core_chkPersistImgCache">If enabled, Ember will not clear the image cache between sessions.</string> + <string control="Core_chkUseImgCache">Enable Ember's image cache.</string> + <string control="Core_chkUseETasFA">If enabled and no fanart is available for the selected movie, Ember will use one of the extracted thumbnails as the fanart image.</string> + <string control="Core_chkNoSpoilers">If enabled, extrathumbs will only be extracted from the first half of the movie in order to avoid "spoilers".</string> + <string control="Core_txtAutoThumbs">Enter the number of extrathumbs you would like to automatically generate.</string> + <string control="Core_chkAutoThumbs">If enabled, Ember will automatically extract the entered number of extrathumbs during scraping.</string> + <string control="Core_txtProxyDomain">Enter the domain for your proxy. (Optional - not necessary for most proxies)</string> + <string control="Core_txtProxyPassword">Enter the password needed to access your proxy.</string> + <string control="Core_txtProxyUsername">Enter the username needed to access your proxy.</string> + <string control="Core_chkEnableCredentials">Enable if your proxy requires authentication.</string> + <string control="Core_txtProxyPort">Enter the port needed to access your proxy.</string> + <string control="Core_txtProxyURI">Enter the IP or URL needed to access your proxy.</string> + <string control="Core_chkEnableProxy">If enabled, Ember will use the entered proxy for all internet communications.</string> + <string control="Core_btnDown">Move the selected filter up in the list. (Filters are processed in order from top to bottom)</string> + <string control="Core_btnUp">Move the selected filter down in the list. (Filters are processed in order from top to bottom)</string> + <string control="Core_chkProperCase">Automatically apply proper casing to movie titles. (Example: "the dark knight" becomes "The Dark Knight")</string> + <string control="Core_btnRemoveFilter">Remove the selected filter from the list.</string> + <string control="Core_btnAddFilter">Add the entered filter to the list.</string> + <string control="Core_txtFilter">Enter text or regex to use as a filter. Special: "a[->]b" = replace all occurrances of "a" with "b" (Example: ".[->]_" will replace all periods in the title with underscores.)</string> + <string control="Core_lstFilters">The list of all current filters that will be used when generating titles for movies.</string> + <string control="Core_chkMissingExtra">If enabled, Ember will display movies missing extrathumbs when utilizing the Missing Items Filter.</string> + <string control="Core_chkMissingSubs">If enabled, Ember will display movies missing subtitle files when utilizing the Missing Items Filter.</string> + <string control="Core_chkMissingTrailer">If enabled, Ember will display movies missing trailers when utilizing the Missing Items Filter.</string> + <string control="Core_chkMissingNFO">If enabled, Ember will display movies missing nfo files when utilizing the Missing Items Filter.</string> + <string control="Core_chkMissingFanart">If enabled, Ember will display movies missing fanart when utilizing the Missing Items Filter.</string> + <string control="Core_chkMissingPoster">If enabled, Ember will display movies missing posters when utilizing the Missing Items Filter.</string> + <string control="Core_chkAutoBD">If enabled, Ember will automatically save new fanart images to the entered backdrops folder.</string> + <string control="Core_btnBrowse">Open a folder browser to select a backdrops folder.</string> + <string control="Core_txtBDPath">The path to the backdrops folder.</string> + <string control="Core_btnRemoveNoStack">Remove the selected extension from the No Stack Extensions list.</string> + <string control="Core_btnAddNoStack">Add the entered extension to the No Stack Extensions list.</string> + <string control="Core_txtNoStack">Enter an extension to add to the No Stack Extensions list.</string> + <string control="Core_lstNoStack">The list of extensions Ember will not stack into single files when adding them to the library.</string> + <string control="Core_btnRemMovieExt">Remove the selected extension from the Valid Video Extensions list.</string> + <string control="Core_btnAddMovieExt">Add the entered extension to the Valid Video Extensions list.</string> + <string control="Core_txtMovieExt">Enter an extension to add to the Valid Video Extensions list.</string> + <string control="Core_lstMovieExts">The list of extensions Ember will look for when updating the library.</string> + <string control="Core_btnEditSource">Edit the selected source.</string> + <string control="Core_chkScanOrderModify">If enabled, Ember will add new files in order of there last modified time. If disabled, Ember will add new files to the library in alphabetical order.</string> + <string control="Core_chkSortBeforeScan">If enabled, Ember will sort all single files in the top directory of the source into their own folders.</string> + <string control="Core_chkIgnoreLastScan">If enabled, Ember will scan all folders/files regardless of the last scan time. If disabled, Ember will only scan files/folders added after the last time files were scanned.</string> + <string control="Core_chkCleanDB">If enabled, Ember will clean the movie database after each scan. (Remove entries for files that no longer exist or no longer match selected setting values)</string> + <string control="Core_chkAutoDetectVTS">If enabled, Ember will attempt to recognize VIDEO_TS folders even if the folder is not named "VIDEO_TS". If disabled, Ember will still handle VIDEO_TS folders if the folder is named "VIDEO_TS". This setting also applies to BDMV folders.</string> + <string control="Core_chkSkipStackedSizeCheck">If enabled, Ember will not skip files smaller than the entered "Skip Files Smaller Than" size if they contain stacking markers (such as "CD1" or "DVD2").</string> + <string control="Core_txtSkipLessThan">Ember will use the entered size as the minimum size for movie files. Any files smaller than this will be skipped when updating the library.</string> + <string control="Core_txtTVSkipLessThan">Ember will use the entered size as the minimum size for episode files. Any files smaller than this will be skipped when updating the library.</string> + <string control="Core_cbTrailerQuality">Select the preferred quality of the downloaded trailers.</string> + <string control="Core_chkDeleteAllTrailers">If enabled, Ember will delete all existing trailers for the movie before saving the new one.</string> + <string control="Core_chkOverwriteTrailer">If enabled, existing trailer files will be overwritten when saving new ones. If disabled, new trailer files will only be saved if one does not already exist.</string> + <string control="Core_chkNoDLTrailer">If enabled, trailer files will not be downloaded. Instead, the trailer url will be saved to the nfo.</string> + <string control="Core_chkSingleScrapeTrailer">If enabled, trailers will be downloaded while scraping a single movie.</string> + <string control="Core_chkUpdaterTrailer">If enabled, trailers will be downloaded during "All Items" scrapers.</string> + <string control="Core_chkDownloadTrailer">Enable Ember's trailer support.</string> + <string control="Core_chkAutoETSize">Select the size of the fanart you would like to download as extrathumbs.</string> + <string control="Core_cbAutoETSize">If enabled, Ember will automatically download all fanart of the selected size as extrathumbs.</string> + <string control="Core_txtETWidth">Resize extrathumbs to the entered width.</string> + <string control="Core_txtETHeight">Resize extrathumbs to the entered height.</string> + <string control="Core_chkETPadding">If enabled, Ember will add "black bars" to the edges of the extrathumbs if they are smaller than the entered size.</string> + <string control="Core_rbETCustom">Resize extrathumbs to the entered size, regardless of the native resolution.</string> + <string control="Core_rbETNative">Save extrathumbs using the same resolution as the video.</string> + <string control="Core_lvTVSources">The list of all current TV Show sources. (Paths that will be scanned for TV Show files)</string> + <string control="Core_ColumnHeader1">The list of all current TV Show sources. (Paths that will be scanned for TV Show files)</string> + <string control="Core_ColumnHeader2">The list of all current TV Show sources. (Paths that will be scanned for TV Show files)</string> + <string control="Core_ColumnHeader3">The list of all current TV Show sources. (Paths that will be scanned for TV Show files)</string> + <string control="Core_chkTVScanOrderModify">If enabled, Ember will add new files in order of there last modified time. If disabled, Ember will add new files to the library in alphabetical order.</string> + <string control="Core_chkTVIgnoreLastScan">If enabled, Ember will scan all folders/files regardless of the last scan time. If disabled, Ember will only scan files/folders added after the last time files were scanned.</string> + <string control="Core_chkTVCleanDB">If enabled, Ember will clean the TV Show database after each scan. (Remove entries for files that no longer exist or no longer match selected setting values)</string> + <string control="Core_btnAddTVSource">Add a new folder to the sources list.</string> + <string control="Core_btnEditTVSource">Edit the selected source.</string> + <string control="Core_btnRemTVSource">Remove the selected source(s) from the sources list.</string> + <string control="Core_chkSeasonAllJPG">Save All Seasons poster files as "season-all.jpg".</string> + <string control="Core_chkSeasonAllTBN">Save All Seasons poster files as "season-all.tbn".</string> + <string control="Core_chkEpisodeDotFanart">Save episode fanart files as "<episode>.fanart.jpg".</string> + <string control="Core_chkEpisodeDashFanart">Save episode fanart files as "<episode>-fanart.jpg".</string> + <string control="Core_chkEpisodeJPG">Save episode poster files as "<episode>.jpg".</string> + <string control="Core_chkEpisodeTBN">Save episode poster files as "<episode>.tbn".</string> + <string control="Core_chkSeasonDotFanart">Save season fanart files as "<season>.fanart.jpg". (Will only save inside the season directory, if it exists)</string> + <string control="Core_chkSeasonDashFanart">Save season fanart files as "<season>-fanart.jpg". (Will only save inside the season directory, if it exists)</string> + <string control="Core_chkSeasonFanartJPG">Save season fanart files as "fanart.jpg". (Will only save inside the season directory, if it exists)</string> + <string control="Core_chkSeasonFolderJPG">Save season fanart files as "folder.jpg". (Will only save inside the season directory, if it exists)</string> + <string control="Core_chkSeasonNameJPG">Save season poster files as "<season>.jpg". (Will only save inside the season directory, if it exists)</string> + <string control="Core_chkSeasonNameTBN">Save season poster files as "<season>.tbn". (Will only save inside the season directory, if it exists)</string> + <string control="Core_chkSeasonPosterJPG">Save season poster files as "poster.jpg". (Will only save inside the season directory, if it exists)</string> + <string control="Core_chkSeasonPosterTBN">Save season poster files as "poster.tbn". (Will only save inside the season directory, if it exists)</string> + <string control="Core_chkSeasonXTBN">Save season poster files as "seasonX.tbn". (Example: season2.tbn)</string> + <string control="Core_chkSeasonXXTBN">Save season poster files as "seasonXX.tbn". (Example: season02.tbn)</string> + <string control="Core_chkShowDotFanart">Save show fanart files as "<show>.fanart.jpg".</string> + <string control="Core_chkShowDashFanart">Save show fanart files as "<show>-fanart.jpg".</string> + <string control="Core_chkShowFanartJPG">Save show fanart files as "fanart.jpg".</string> + <string control="Core_chkShowJPG">Save show poster files as "<show>.jpg".</string> + <string control="Core_chkShowTBN">Save show poster files as "<show>.tbn".</string> + <string control="Core_chkShowPosterJPG">Save show poster files as "poster.jpg".</string> + <string control="Core_chkShowPosterTBN">Save show poster files as "poster.tbn".</string> + <string control="Core_chkShowFolderJPG">Save show poster files as "folder.jpg".</string> + <string control="Core_btnAddShowRegex">Add the entered regex to the TV Show Regex list.</string> + <string control="Core_txtSeasonRegex">Enter the regex to use to detect the season number.</string> + <string control="Core_cboSeasonRetrieve">Choose if you would like to process the season regex against the directory name or the episode file name.</string> + <string control="Core_txtEpRegex">Enter the regex to use to detect the episode number.</string> + <string control="Core_cboEpRetrieve">Choose if you would like to process the episode regex against the directory name, the episode file name, or the results of the season regex.</string> + <string control="Core_btnEditShowRegex">Edit the selected TV Show regex.</string> + <string control="Core_btnRemoveShowRegex">Remove the selected TV Show regex from the list.</string> + <string control="Core_lvShowRegex">The list of current TV Show regex.</string> + <string control="Core_colRegID">The list of current TV Show regex.</string> + <string control="Core_colSeason">The list of current TV Show regex.</string> + <string control="Core_colSeasonApply">The list of current TV Show regex.</string> + <string control="Core_colEpisode">The list of current TV Show regex.</string> + <string control="Core_colEpApply">The list of current TV Show regex.</string> + <string control="Core_chkDisplayMissingEpisodes">If enabled, episodes that are missing from your collection will be displayed in the episode list, but will be colored a light gray.</string> + <string control="Core_chkEpisodeNfoCol">Hide the Info column from the episode list.</string> + <string control="Core_chkEpisodeFanartCol">Hide the Fanart column from the episode list.</string> + <string control="Core_chkEpisodePosterCol">Hide the Poster column from the episode list.</string> + <string control="Core_chkSeasonFanartCol">Hide the Fanart column from the season list.</string> + <string control="Core_chkSeasonPosterCol">Hide the Poster column from the poster list.</string> + <string control="Core_chkShowNfoCol">Hide the Info column from the show list.</string> + <string control="Core_chkShowFanartCol">Hide the Fanart column from the show list.</string> + <string control="Core_chkShowPosterCol">Hide the Poster column from the show list.</string> + <string control="Core_chkDisplayAllSeason">If enabled, if an All Season poster exists for the selected show, it will be displayed on the right of the interface.</string> + <string control="Core_cbRatingRegion">Select the region of the ratings you would like to display in the interface.</string> + <string control="Core_chkNoFilterEpisode">If enabled, Ember will not attempt to filter episode file names for titles and instead will build them from the show name, season, and episode until a proper title has been fetched.</string> + <string control="Core_btnEpFilterDown">Move the selected filter up in the list. (Filters are processed in order from top to bottom)</string> + <string control="Core_btnEpFilterUp">Move the selected filter down in the list. (Filters are processed in order from top to bottom)</string> + <string control="Core_chkEpProperCase">Automatically apply proper casing to episode titles. (Example: "stole beer from golfer" becomes "Stole Beer From Golfer")</string> + <string control="Core_btnRemoveEpFilter">Remove the selected filter from the filter list.</string> + <string control="Core_btnAddEpFilter">Add the entered filter to the filter list.</string> + <string control="Core_txtEpFilter">Enter a filter to add to the filter list.</string> + <string control="Core_lstEpFilters">The list of all current filters that will be used when generating titles for episodes.</string> + <string control="Core_btnShowFilterDown">Move the selected filter up in the list. (Filters are processed in order from top to bottom)</string> + <string control="Core_btnShowFilterUp">Move the selected filter down in the list. (Filters are processed in order from top to bottom)</string> + <string control="Core_chkShowProperCase">Automatically apply proper casing to episode titles. (Example: "my name is earl" becomes "My Name is Earl")</string> + <string control="Core_btnRemoveShowFilter">Remove the selected filter from the filter list.</string> + <string control="Core_btnAddShowFilter">Add the entered filter to the filter list.</string> + <string control="Core_txtShowFilter">Enter a filter to add to the filter list.</string> + <string control="Core_lstShowFilters">The list of all current filters that will be used when generating titles for shows.</string> + <string control="Core_chkGetEnglishImages">If enabled, all English images will be retrieved, regardless of the selected language.</string> + <string control="Core_chkOnlyTVImagesLanguage">If enabled, only images for the preferred language will be retrieved.</string> + <string control="Core_txtShowPosterWidth">Resize show poster files to the entered width.</string> + <string control="Core_txtShowPosterHeight">Resize show poster files to the entered height.</string> + <string control="Core_tbShowPosterQual">Adjust the quality of the show poster files. (0 = original quality)</string> + <string control="Core_chkResizeShowPoster">Resize show poster files before saving.</string> + <string control="Core_cbShowPosterSize">Select the preferred show poster type you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a poster of this type first. If a poster of the selected size cannot be found, the first available image will be used instead.</string> + <string control="Core_chkOverwriteShowPoster">If enabled, existing show poster files will be overwritten if new ones are selected. If disabled, show poster files will only be saved if a current one does not already exist.</string> + <string control="Core_txtShowFanartWidth">Resize show fanart files to the entered width.</string> + <string control="Core_txtShowFanartHeight">Resize show fanart files to the entered height.</string> + <string control="Core_tbShowFanartQual">Adjust the quality of the show fanart files. (0 = original quality)</string> + <string control="Core_chkResizeShowFanart">Resize show fanart files before saving.</string> + <string control="Core_cbShowFanartSize">Select the preferred fanart size you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a fanart image of this size first. If a fanart image of the selected size cannot be found, the first available image will be used instead.</string> + <string control="Core_chkOverwriteShowFanart">If enabled, existing show fanart files will be overwritten if new ones are selected. If disabled, show fanart files will only be saved if a current one does not already exist.</string> + <string control="Core_txtSeaPosterWidth">Resize season poster files to the entered width.</string> + <string control="Core_txtSeaPosterHeight">Resize season poster files to the entered height.</string> + <string control="Core_tbSeaPosterQual">Adjust the quality of the season poster files. (0 = original quality)</string> + <string control="Core_chkSeaResizePoster">Resize season poster files before saving.</string> + <string control="Core_cbSeaPosterSize">Select the preferred season poster type you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a poster of this type first. If a poster of the selected size cannot be found, the first available image will be used instead.</string> + <string control="Core_chkSeaOverwritePoster">If enabled, existing season poster files will be overwritten if new ones are selected. If disabled, season poster files will only be saved if a current one does not already exist.</string> + <string control="Core_txtSeaFanartWidth">Resize season fanart files to the entered width.</string> + <string control="Core_txtSeaFanartHeight">Resize season fanart files to the entered height.</string> + <string control="Core_tbSeaFanartQual">Adjust the quality of the season fanart files. (0 = original quality)</string> + <string control="Core_chkSeaResizeFanart">Resize season fanart files before saving.</string> + <string control="Core_cbSeaFanartSize">Select the preferred fanart size you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a fanart image of this size first. If a fanart image of the selected size cannot be found, the first available image will be used instead.</string> + <string control="Core_chkSeaOverwriteFanart">If enabled, existing season fanart files will be overwritten if new ones are selected. If disabled, season fanart files will only be saved if a current one does not already exist.</string> + <string control="Core_txtEpPosterWidth">Resize episode poster files to the entered width.</string> + <string control="Core_txtEpPosterHeight">Resize episode poster files to the entered height.</string> + <string control="Core_tbEpPosterQual">Adjust the quality of the episode poster files. (0 = original quality)</string> + <string control="Core_chkResizeEpPoster">Resize episode poster files before saving.</string> + <string control="Core_chkOverwriteEpPoster">If enabled, existing episode poster files will be overwritten if new ones are selected. If disabled, episode poster files will only be saved if a current one does not already exist.</string> + <string control="Core_txtEpFanartWidth">Resize episode fanart files to the entered width.</string> + <string control="Core_txtEpFanartHeight">Resize episode fanart files to the entered height.</string> + <string control="Core_tbEpFanartQual">Adjust the quality of the episode fanart files. (0 = original quality)</string> + <string control="Core_chkResizeEpFanart">Resize episode fanart files before saving.</string> + <string control="Core_cbEpFanartSize">Select the preferred fanart size you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a fanart image of this size first. If a fanart image of the selected size cannot be found, the first available image will be used instead.</string> + <string control="Core_chkOverwriteEpFanart">If enabled, existing episode fanart files will be overwritten if new ones are selected. If disabled, episode fanart files will only be saved if a current one does not already exist.</string> + <string control="Core_chkScraperShowRating">Enable scraping show rating.</string> + <string control="Core_chkScraperShowActors">Enable scraping show actors.</string> + <string control="Core_chkScraperShowStudio">Enable scraping show studios.</string> + <string control="Core_chkScraperShowPremiered">Enable scraping show premiered date.</string> + <string control="Core_chkScraperShowEGU">Enable scraping the Episode Guide URL.</string> + <string control="Core_chkScraperShowMPAA">Enable scraping show MPAA.</string> + <string control="Core_chkScraperShowPlot">Enable scraping show plot.</string> + <string control="Core_chkScraperShowGenre">Enable scraping show genre.</string> + <string control="Core_chkScraperShowTitle">Enable scraping show title.</string> + <string control="Core_chkScraperEpActors">Enable scraping episode actors.</string> + <string control="Core_chkScraperEpCredits">Enable scraping episode credits.</string> + <string control="Core_chkScraperEpDirector">Enable scraping episode directors.</string> + <string control="Core_chkScraperEpPlot">Enable scraping episode plot.</string> + <string control="Core_chkScraperEpRating">Enable scraping episode rating.</string> + <string control="Core_chkScraperEpAired">Enable scraping episode aired date.</string> + <string control="Core_chkScraperEpTitle">Enable scraping episode title.</string> + <string control="Core_chkScraperEpEpisode">Enable scraping episode number.</string> + <string control="Core_chkScraperEpSeason">Enable scraping season number.</string> + <string control="Core_chkEpLockTitle">If enabled, the episode title will only be scraped if a current one does not exist.</string> + <string control="Core_chkEpLockRating">If enabled, the episode rating will only be scraped if a current one does not exist.</string> + <string control="Core_chkEpLockPlot">If enabled, the episode plot will only be scraped if a current one does not exist.</string> + <string control="Core_chkShowLockPlot">If enabled, the show plot will only be scraped if a current one does not exist.</string> + <string control="Core_chkShowLockGenre">If enabled, the show genre will only be scraped if a current one does not exist.</string> + <string control="Core_chkShowLockStudio">If enabled, the show studio will only be scraped if a current one does not exist.</string> + <string control="Core_chkShowLockRating">If enabled, the show rating will only be scraped if a current one does not exist.</string> + <string control="Core_chkShowLockTitle">If enabled, the show title will only be scraped if a current one does not exist.</string> + <string control="Core_lstTVMetaData">The list of extensions that have default meta data entries.</string> + <string control="Core_txtTVDefFIExt">Enter an extension to create a default meta data entry.</string> + <string control="Core_btnRemoveTVMetaDataFT">Remove the default meta data for the selected extension from the default meta data list.</string> + <string control="Core_btnEditTVMetaDataFT">Edit the default meta data for the selected extension in the default meta data list.</string> + <string control="Core_btnNewTVMetaDataFT">Create default meta data for the entered extension and add the to the default meta data list.</string> + <string control="Core_cboTVMetaDataOverlay">If the selected language is found in the episode, a special icon indicator will be overlayed on the meta data audio icon.</string> + <string control="Core_chkTVScanMetaData">If enabled, Ember will scan episode files for meta data.</string> + <string control="Core_cboTVUpdate">Select the time to wait between updating cached TV information files.</string> + <string control="Core_txtAPIKey">Enter the TVDB API Key of the media center/player you use. This is not necessary for Ember to function. It is only used when saving the Episode Guide URL to the nfo.</string> + <string control="Core_txtTVDBMirror">Enter the mirror to use when retrieving information from theTVDB.</string> + <string control="Core_btnTVLanguageFetch">Click to download all available languages from theTVDB.</string> + <string control="Core_cbTVLanguage">Select the preferred language to use when downloading show information and images.</string> + <string control="Core_chkCertification">Enable scraping movie certification.</string> + <string control="Core_chkTop250">Enable scraping movie Top 250 ranking.</string> + <string control="Core_chkCountry">Enable scraping movie production country.</string> + <string control="Core_txtGenreLimit">Limit the number of scraped genres to the entered value.</string> + <string control="Core_txtActorLimit">Limit the number of scraped actors to the entered value.</string> + <string control="Core_chkCrew">Enable scraping movie other crew. (Scrape Full Crew must be enabled)</string> + <string control="Core_chkMusicBy">Enable scraping movie musicians. (Scrape Full Crew must be enabled)</string> + <string control="Core_chkProducers">Enable scraping movie producers. (Scrape Full Crew must be enabled)</string> + <string control="Core_chkWriters">Enable scraping movie writers.</string> + <string control="Core_chkStudio">Enable scraping movie studio.</string> + <string control="Core_chkRuntime">Enable scraping movie runtime.</string> + <string control="Core_chkPlot">Enable scraping movie plot.</string> + <string control="Core_chkOutline">Enable scraping movie outline.</string> + <string control="Core_chkGenre">Enable scraping movie genre.</string> + <string control="Core_chkDirector">Enable scraping movie director.</string> + <string control="Core_chkTagline">Enable scraping movie tagline.</string> + <string control="Core_chkCast">Enable scraping movie cast.</string> + <string control="Core_chkVotes">Enable scraping movie votes.</string> + <string control="Core_chkTrailer">Enable scraping movie trailer url.</string> + <string control="Core_chkRating">Enable scraping movie rating.</string> + <string control="Core_chkRelease">Enable scraping movie release date.</string> + <string control="Core_chkMPAA">Enable scraping movie MPAA.</string> + <string control="Core_chkYear">Enable scraping movie year.</string> + <string control="Core_chkTitle">Enable scraping movie title.</string> + <string control="Core_lstMetaData">The list of extensions that have default meta data entries.</string> + <string control="Core_txtDefFIExt">Enter an extension to create a default meta data entry.</string> + <string control="Core_btnRemoveMetaDataFT">Remove the default meta data for the selected extension from the default meta data list.</string> + <string control="Core_btnEditMetaDataFT">Edit the default meta data for the selected extension in the default meta data list.</string> + <string control="Core_btnNewMetaDataFT">Create default meta data for the entered extension and add the to the default meta data list.</string> + <string control="Core_chkIFOScan">If enabled, Ember will process *.ifo files for meta data information.</string> + <string control="Core_cbLanguages">If the selected language is found in the movie, a special icon indicator will be overlayed on the meta data audio icon.</string> + <string control="Core_txtRuntimeFormat">Enter the format you wish to use for the movie duration retrieved from scanning meta data. Note you can also use <0m> for 0 padding minutes</string> + <string control="Core_chkScanMediaInfo">If enabled, Ember will scan movie files for meta data.</string> + <string control="Core_chkUseMIDuration">Use the movie duration retrieved from scanning meta data as the runtime of the movie.</string> + <string control="Core_chkLockOutline">If enabled, the movie outline will only be scraped if a current one does not exist.</string> + <string control="Core_chkLockPlot">If enabled, the movie plot will only be scraped if a current one does not exist.</string> + <string control="Core_chkLockTrailer">If enabled, the movie trailer will only be scraped if a current one does not exist.</string> + <string control="Core_chkLockGenre">If enabled, the movie genre will only be scraped if a current one does not exist.</string> + <string control="Core_chkLockRealStudio">If enabled, the movie studio will only be scraped if a current one does not exist.</string> + <string control="Core_chkLockRating">If enabled, the movie rating will only be scraped if a current one does not exist.</string> + <string control="Core_chkLockTagline">If enabled, the movie tagline will only be scraped if a current one does not exist.</string> + <string control="Core_chkLockTitle">If enabled, the movie title will only be scraped if a current one does not exist.</string> + <string control="Core_cbForce">Select the region of the title you would like Ember to look for.</string> + <string control="Core_chkForceTitle">If enabled, Ember will check for alternative titles in the selected language. This is useful for fetching titles in your native language when scraping foreign films.</string> + <string control="Core_chkOutlineForPlot">If enabled, Ember will use the outline for the plot if the plot is empty.</string> + <string control="Core_chkCastWithImg">If enabled, Ember will only scrape cast entries that have valid images.</string> + <string control="Core_chkUseCertForMPAA">If enabled, Ember will use the certifcation of the selected region in place of the MPAA rating.</string> + <string control="Core_chkFullCast">If enabled, all cast members will be scraped instead of only top billed.</string> + <string control="Core_chkFullCrew">If enabled, all crew members will be scraped (if individually enabled).</string> + <string control="Core_cbCert">Select the region to filter certification ratings.</string> + <string control="Core_chkCert">Only scrape the certificaton rating for the selected region.</string> + <string control="Core_chkMarkNewShows">If enabled, new shows will be "marked". If disabled, new shows will still be colored green until updated or the next Ember session.</string> + <string control="Core_chkMarkNewEpisodes">If enabled, new episodes will be "marked". If disabled, new episodes will still be colored green until updated or the next Ember session.</string> + <string control="Core_cbOrdering">Select the default ordering Ember will use when scraping information for a show.</string> + <string control="Core_chkOnlyValueForCert">If enabled, Ember will only save the value of the certification to the MPAA field. (Example: "Germany:18" will save as "18")</string> + <string control="Core_rbBanner">If enabled, Ember will attempt to download a banner (wide) image of the selected type as the default show poster.</string> + <string control="Core_rbPoster">If enabled, Ember will attempt to download a poster image of the selected type as the default show poster.</string> + <string control="Core_btnResetShowFilters">This will reset the show filters to the default list. WARNING: This WILL delete any custom filters you have entered.</string> + <string control="Core_btnResetEpFilter">This will reset the episode filters to the default list. WARNING: This WILL delete any custom filters you have entered.</string> + <string control="Core_btnResetMovieFilters">This will reset the movie filters to the default list. WARNING: This WILL delete any custom filters you have entered.</string> + <string control="Core_btnResetValidExts">This will reset the valid extensions to the default list. WARNING: This WILL delete any custom extensions you have entered.</string> + <string control="Core_ResetShowRegex">This will reset the show regex to the default list. WARNING: This WILL delete any custom regex you have entered.</string> + <string control="Core_chkClickScrape">Enable Click Scrape on main screen column marks.</string> + <string control="Core_chkSpecialDateAdd">If enabled Ember will respect the FileBuilt-Date of videofile instead of using the current date when importing new movies into the database. That results in more stable searches when filtering for newest movies!</string> + <string control="Core_chkLockLanguageV">If enabled, the language field (video metadata) will not be updated.</string> + <string control="Core_chkLockLanguageA">If enabled, the language field (audio metadata) will not be updated.</string> + <string control="Core_chkLockMPAA">If enabled, the certification/MPAA field will not be updated.</string> + <string control="Core_chkUseMPAAFSK">If enabled, MPAA values will be converted to FSK if no FSK values are found. Priority: FSK -> MPAA</string> + <string control="Core_chkMovieWatchedCol">Hide the Watched column from the main movie list.</string> + <string control="Core_chkEpisodeWatchedCol">Hide the Watched column from the episode list.</string> + </strings> diff --git a/Ember Media Manager/Langs/English_(en_US).xml b/Ember Media Manager/Langs/English_(en_US).xml index 5d3a6ff..181f3c2 100644 --- a/Ember Media Manager/Langs/English_(en_US).xml +++ b/Ember Media Manager/Langs/English_(en_US).xml @@ -1,4 +1,3 @@ -<?xml version="1.0" encoding="utf-8"?> <strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <string id="1">&File</string> <string id="2">E&xit</string> @@ -189,7 +188,7 @@ <string id="187">&Format / Indent</string> <string id="188">&Parse</string> <string id="189">&Save</string> - <string id="190">Manual NFO Editor | </string> + <string id="190">Manual NFO Editor |</string> <string id="191">This is not a proper XML document</string> <string id="192">File is not valid.</string> <string id="193">File is valid.</string> @@ -218,7 +217,7 @@ <string id="216">Enter Path and Press "Go" to Begin.</string> <string id="217">Path to Sort:</string> <string id="218">Select the folder which contains the files you wish to sort.</string> - <string id="219">Moving </string> + <string id="219">Moving</string> <string id="220">WARNING: If you continue, all files will be sorted into separate folders.</string> <string id="221">The folder you entered does not exist. Please enter a valid path.</string> <string id="222">Folder Not Found</string> @@ -266,7 +265,7 @@ <string id="264">Clear Cache</string> <string id="265">Change Poster (Download)</string> <string id="266">Change Fanart (Download)</string> - <string id="267">Master.eLang.GetString(148, "One or more cache resources is currently in use and cannot be deleted at the moment.</string> + <string id="267">One or more cache resources is currently in use and cannot be deleted at the moment.</string> <string id="268">Cannot Clear Cache</string> <string id="269">Size: {0}x{1}</string> <string id="270">The trailer could not be played. This could be due to an invalid URI or you do not have the proper player to play the trailer type.</string> @@ -278,7 +277,7 @@ <string id="276">Apply</string> <string id="277">New Addon</string> <string id="278">Year</string> - <string id="279">Edit Addon - </string> + <string id="279">Edit Addon -</string> <string id="280">Addon Files</string> <string id="281">Video</string> <string id="282">Audio</string> @@ -302,68 +301,68 @@ <string id="300">Yes</string> <string id="301">Country</string> <string id="302">Original Title</string> - <string id="303"></string> - <string id="304"></string> - <string id="305"></string> - <string id="306"></string> - <string id="307"></string> - <string id="308"></string> - <string id="309"></string> - <string id="310"></string> - <string id="311"></string> - <string id="312"></string> - <string id="313"></string> - <string id="314"></string> - <string id="315"></string> - <string id="316"></string> - <string id="317"></string> - <string id="318"></string> - <string id="319"></string> - <string id="320"></string> - <string id="321"></string> + <string id="303"/> + <string id="304"/> + <string id="305"/> + <string id="306"/> + <string id="307"/> + <string id="308"/> + <string id="309"/> + <string id="310"/> + <string id="311"/> + <string id="312"/> + <string id="313"/> + <string id="314"/> + <string id="315"/> + <string id="316"/> + <string id="317"/> + <string id="318"/> + <string id="319"/> + <string id="320"/> + <string id="321"/> <string id="322">X-Large</string> <string id="323">Large</string> <string id="324">Medium</string> <string id="325">Small</string> - <string id="326"></string> - <string id="327"></string> - <string id="328"></string> - <string id="329"></string> - <string id="330"></string> - <string id="331"></string> - <string id="332"></string> - <string id="333"></string> - <string id="334"></string> - <string id="335"></string> - <string id="336"></string> - <string id="337"></string> - <string id="338"></string> - <string id="339"></string> - <string id="340"></string> - <string id="341"></string> - <string id="342"></string> - <string id="343"></string> - <string id="344"></string> - <string id="345"></string> - <string id="346"></string> - <string id="347"></string> - <string id="348"></string> - <string id="349"></string> + <string id="326"/> + <string id="327"/> + <string id="328"/> + <string id="329"/> + <string id="330"/> + <string id="331"/> + <string id="332"/> + <string id="333"/> + <string id="334"/> + <string id="335"/> + <string id="336"/> + <string id="337"/> + <string id="338"/> + <string id="339"/> + <string id="340"/> + <string id="341"/> + <string id="342"/> + <string id="343"/> + <string id="344"/> + <string id="345"/> + <string id="346"/> + <string id="347"/> + <string id="348"/> + <string id="349"/> <string id="350">DVD</string> <string id="351">Invalid</string> - <string id="352"></string> - <string id="353"></string> - <string id="354"></string> + <string id="352"/> + <string id="353"/> + <string id="354"/> <string id="355">Exists</string> - <string id="356"></string> - <string id="357"></string> - <string id="358"></string> - <string id="359"></string> - <string id="360"></string> + <string id="356"/> + <string id="357"/> + <string id="358"/> + <string id="359"/> + <string id="360"/> <string id="361">Finished</string> <string id="362">Done</string> - <string id="363"></string> - <string id="364"></string> + <string id="363"/> + <string id="364"/> <string id="365">Sets Manager</string> <string id="366">Sets</string> <string id="367">Movies In Set</string> @@ -371,18 +370,18 @@ <string id="369">Loading Movies and Sets...</string> <string id="370">Canceling Load...</string> <string id="371">Add and configure movie boxed sets.</string> - <string id="372"></string> + <string id="372"/> <string id="373">Download</string> - <string id="374"></string> - <string id="375"></string> - <string id="376"></string> - <string id="377"></string> - <string id="378"></string> - <string id="379"></string> - <string id="380"></string> - <string id="381"></string> - <string id="382"></string> - <string id="383"></string> + <string id="374"/> + <string id="375"/> + <string id="376"/> + <string id="377"/> + <string id="378"/> + <string id="379"/> + <string id="380"/> + <string id="381"/> + <string id="382"/> + <string id="383"/> <string id="384">Custom Scraper</string> <string id="385">Create a custom scraper</string> <string id="386">Selection Filter</string> @@ -421,13 +420,13 @@ <string id="419">Meta Data is not available for this movie. Try rescanning.</string> <string id="420">Settings</string> <string id="421">Connection</string> - <string id="422"></string> - <string id="423"></string> - <string id="424"></string> + <string id="422"/> + <string id="423"/> + <string id="424"/> <string id="425">Username:</string> <string id="426">Password:</string> - <string id="427"></string> - <string id="428"></string> + <string id="427"/> + <string id="428"/> <string id="429">Miscellaneous</string> <string id="430">Interface Language:</string> <string id="431">Enable Panel Animation</string> @@ -444,12 +443,12 @@ <string id="442">WARNING: Using the Expert Mode Cleaner could potentially delete wanted files. Take care when using this tool.</string> <string id="443">Download Addons...</string> <string id="444">File</string> - <string id="445"></string> - <string id="446"></string> + <string id="445"/> + <string id="446"/> <string id="447">Downloading Files...</string> - <string id="448"></string> - <string id="449"></string> - <string id="450"></string> + <string id="448"/> + <string id="449"/> + <string id="450"/> <string id="451">Folder/File Name Filters</string> <string id="452">Convert Names to Proper Case</string> <string id="453">Always Display Genre Text</string> @@ -473,10 +472,10 @@ <string id="471">File Naming</string> <string id="472">Use <movie> Only for Folders with Multiple Movies</string> <string id="473">YAMJ Compatible VIDEO_TS File Placement/Naming</string> - <string id="474"></string> - <string id="475"></string> - <string id="476"></string> - <string id="477"></string> + <string id="474">Frodo Compatible VIDEO_TS File Placement/Naming</string> + <string id="475"/> + <string id="476"/> + <string id="477"/> <string id="478">Quality:</string> <string id="479">Max Width:</string> <string id="480">Max Height:</string> @@ -484,9 +483,9 @@ <string id="482">Preferred Size:</string> <string id="483">Overwrite Existing</string> <string id="484">Loading Settings...</string> - <string id="485"></string> - <string id="486"></string> - <string id="487"></string> + <string id="485"/> + <string id="486"/> + <string id="487"/> <string id="488">Global Locks</string> <string id="489">Lock Trailer</string> <string id="490">Lock Genre</string> @@ -508,7 +507,7 @@ <string id="506">Number To Create:</string> <string id="507">Extract During Scrapers</string> <string id="508">Use Outline for Plot if Plot is Empty</string> - <string id="509"></string> + <string id="509"/> <string id="510">Scrape Only Actors With Images</string> <string id="511">Use Certification for MPAA</string> <string id="512">Scrape Full Cast</string> @@ -522,17 +521,17 @@ <string id="520">Backdrops Folder</string> <string id="521">Automatically Save Fanart To Backdrops Folder</string> <string id="522">Delete All Existing</string> - <string id="523"></string> + <string id="523"/> <string id="524">Only Get URLs When Scraping</string> <string id="525">Get During Single Scrape</string> - <string id="526"></string> + <string id="526"/> <string id="527">Get During Automated Scrapers</string> - <string id="528"></string> + <string id="528"/> <string id="529">Enable Trailer Support</string> <string id="530">No Stack Extensions</string> - <string id="531"></string> - <string id="532"></string> - <string id="533"></string> + <string id="531"/> + <string id="532"/> + <string id="533"/> <string id="534">Valid Video Extensions</string> <string id="535">Edit Source</string> <string id="536">Miscellaneous Options</string> @@ -553,20 +552,20 @@ <string id="551">Use Image Cache</string> <string id="552">Select the folder where you wish to store your backdrops.</string> <string id="553">File System</string> - <string id="554"></string> + <string id="554"/> <string id="555">Files and Sources</string> <string id="556">Scrapers - Data</string> <string id="557">Scrapers - Images & Trailers</string> <string id="558">Wide</string> - <string id="559"></string> - <string id="560"></string> - <string id="561"></string> - <string id="562"></string> - <string id="563"></string> - <string id="564"></string> - <string id="565"></string> - <string id="566"></string> - <string id="567"></string> + <string id="559"/> + <string id="560"/> + <string id="561"/> + <string id="562"/> + <string id="563"/> + <string id="564"/> + <string id="565"/> + <string id="566"/> + <string id="567"/> <string id="568">Generating Actors Cache:</string> <string id="569">All</string> <string id="570">[none]</string> @@ -587,12 +586,12 @@ <string id="585">Check for Trailer</string> <string id="586">Check for Subs</string> <string id="587">Check for Extrathumbs</string> - <string id="588"></string> - <string id="589"></string> - <string id="590"></string> + <string id="588"/> + <string id="589"/> + <string id="590"/> <string id="591">Top 250</string> - <string id="592"></string> - <string id="593"></string> + <string id="592"/> + <string id="593"/> <string id="594">Metadata Editor</string> <string id="595">Video Streams</string> <string id="596">Audio Streams</string> @@ -629,18 +628,18 @@ <string id="627">Selected Items: {0}</string> <string id="628">Enable IFO Parsing</string> <string id="629">Themes</string> - <string id="630"></string> - <string id="631"></string> - <string id="632"></string> - <string id="633"></string> - <string id="634"></string> + <string id="630"/> + <string id="631"/> + <string id="632"/> + <string id="633"/> + <string id="634"/> <string id="635">You have selected {0} folders to open. Are you sure you want to do this?</string> - <string id="636"></string> - <string id="637"></string> - <string id="638"></string> - <string id="639"></string> - <string id="640"></string> - <string id="641"></string> + <string id="636"/> + <string id="637"/> + <string id="638"/> + <string id="639"/> + <string id="640"/> + <string id="641"/> <string id="642">Sort Title</string> <string id="643">YAMJ Compatible Sets Saving</string> <string id="644">Cleaning Database...</string> @@ -653,7 +652,7 @@ <string id="651">No Information is Available for This Show</string> <string id="652">No Information is Available for This Episode</string> <string id="653">TV Shows</string> - <string id="654">Season </string> + <string id="654">Season</string> <string id="655">Season Specials</string> <string id="656">Edit Episode</string> <string id="657">Edit the details for the selected episode.</string> @@ -688,7 +687,7 @@ <string id="686">Season Fanart</string> <string id="687">Episode Posters</string> <string id="688">Episode Fanart</string> - <string id="689"> [MISSING]</string> + <string id="689">[MISSING]</string> <string id="690">Edit Regex</string> <string id="691">Show Match Regex</string> <string id="692">Season Match Regex:</string> @@ -701,12 +700,12 @@ <string id="699">Regex</string> <string id="700">TV Show</string> <string id="701">TV Episode</string> - <string id="702"></string> - <string id="703"></string> - <string id="704"></string> + <string id="702"/> + <string id="703"/> + <string id="704"/> <string id="705">TV Source</string> <string id="706">Select the parent folder for your TV Series folders/files.</string> - <string id="707"></string> + <string id="707"/> <string id="708">Donate</string> <string id="709">Clean Database</string> <string id="710">Force Title Language:</string> @@ -775,29 +774,29 @@ <string id="773">Delete Episode</string> <string id="774">Enabled</string> <string id="775">Disabled</string> - <string id="776"></string> + <string id="776"/> <string id="777">Writer</string> - <string id="778"></string> - <string id="779"></string> - <string id="780"></string> - <string id="781"></string> - <string id="782"></string> + <string id="778"/> + <string id="779"/> + <string id="780"/> + <string id="781"/> + <string id="782"/> <string id="783">Plot Summary:</string> - <string id="784"></string> - <string id="785"></string> + <string id="784"/> + <string id="785"/> <string id="786">All Seasons Poster</string> - <string id="787"></string> - <string id="788"></string> - <string id="789"></string> - <string id="790"></string> - <string id="791"></string> + <string id="787"/> + <string id="788"/> + <string id="789"/> + <string id="790"/> + <string id="791"/> <string id="792">Donate</string> <string id="793">&Versions...</string> <string id="794">&Module Settings...</string> <string id="795">Interface</string> <string id="796">Scan in order of last write time</string> <string id="797">Default Episode Ordering:</string> - <string id="798"></string> + <string id="798"/> <string id="799">Scraper - Trailers</string> <string id="800">Preferred Quality:</string> <string id="801">TVDB Mirror</string> @@ -813,8 +812,8 @@ <string id="811">PasteBin URL:</string> <string id="812">Old Title: {0} | New Title: {1}</string> <string id="813">Movie Scraped</string> - <string id="814">Added Episode: </string> - <string id="815">Added Movie: </string> + <string id="814">Added Episode:</string> + <string id="815">Added Movie:</string> <string id="816">An Error Has Occurred</string> <string id="817">New Movie Added</string> <string id="818">New Episode Added</string> @@ -825,17 +824,17 @@ <string id="823">Audio & Video Codec Mapping</string> <string id="824">Video Source:</string> <string id="825">Downloads:</string> - <string id="826"></string> - <string id="827"></string> - <string id="828">Enable Actors Cache</string> + <string id="826"/> + <string id="827"/> + <string id="828">Enable Actor Thumbs</string> <string id="829">Watch for ""Dump"" Folder</string> <string id="830">Edit the details for the selected season.</string> - <string id="831"></string> + <string id="831"/> <string id="832">Display All Season Poster</string> <string id="833">These are Scraper specific settings and act as a filter.\nYou should also check Ember Global Settings.</string> <string id="834">* Inside Season Folder</string> <string id="835">Only Save the Value to NFO</string> - <string id="836"></string> + <string id="836"/> <string id="837">Scrapers - Images</string> <string id="838">Banner</string> <string id="839">Absolute</string> @@ -845,9 +844,9 @@ <string id="843">Are you sure you want to reset to the default list of valid video extensions?</string> <string id="844">Are you sure you want to reset to the default list of show regex?</string> <string id="845">>> No Item Selected <<</string> - <string id="846"></string> - <string id="847"></string> - <string id="848"></string> + <string id="846"/> + <string id="847"/> + <string id="848"/> <string id="849">Enable Click Scrape</string> <string id="850">&Check For Updates...</string> <string id="851">No Updates at this time</string> @@ -866,7 +865,28 @@ <string id="864">Setting menus...</string> <string id="865">Version {0}.{1}.{2}.{3}</string> <string id="866">Metadata</string> - <string id="867">XBMC Frodo</string> - <string id="868">Top 250</string> - <string id="869">EmberMM.com &Wiki...</string> + <string id="867">XBMC Frodo</string> + <string id="868">Top 250</string> + <string id="869">EmberMM.com &Wiki...</string> + <string id="870"/> + <string id="871"/> + <string id="872"/> + <string id="873"/> + <string id="874">Use file creation date of videofile</string> + <string id="875"/> + <string id="876"/> + <string id="877"/> + <string id="878"/> + <string id="879">Lock Language (video)</string> + <string id="880">Lock Language (audio)</string> + <string id="881">Lock MPAA/Certification</string> + <string id="882">Use MPAA as Fallback for FSK Rating</string> + <string id="883">Watched</string> + <string id="884">Hide Watched Column</string> + <string id="885">Lock Subtitle</string> + <string id="886">Retry</string> + <string id="887">Abort</string> + <string id="888">Database Compatibility</string> + <string id="889">Database is not compatible!</string> + <string id="890">Your database is not compatible with this version of Ember!\n\nYou can ....</string> </strings> diff --git a/Ember Media Manager/Langs/German_(de_DE)-Help.xml b/Ember Media Manager/Langs/German_(de_DE)-Help.xml index c9cfa32..7997179 100644 --- a/Ember Media Manager/Langs/German_(de_DE)-Help.xml +++ b/Ember Media Manager/Langs/German_(de_DE)-Help.xml @@ -6,9 +6,9 @@ <string control="Core_chkShowDims">Wenn aktiviert blendet ember die Abmessungen der Poster und Fanarts oben in den Bildern ein.</string> <string control="Core_chkUpdates">Wenn aktiviert prüft Ember bei jedem Start ob eine neue Version verfügbar ist.</string> <string control="Core_chkOverwriteNfo">Wenn aktiviert werden NFO Dateien beim speichern überschrieben. Wenn deaktiviert werden diese nach .INFO verschoben</string> - <string control="Core_chkLogErrors">Wenn aktiviert werden alle Fehler in folgendes Logfile geschrieben: <Ember Installation Directory>\Log\errlog.txt.</string> + <string control="Core_chkLogErrors">Wenn aktiviert werden alle Fehler in folgendes Logfile geschrieben: <Ember Installations-Verzeichniss>\Log\errlog.txt.</string> <string control="Core_cbEpTheme">Wähle das Theme für das Episoden Layout.</string> - <string control="Core_cbTVShowTheme">Wähle das Theme für das das TV-Serien and Staffel Layout.</string> + <string control="Core_cbTVShowTheme">Wähle das Theme für das das TV-Serien und Staffel Layout.</string> <string control="Core_cbMovieTheme">Wähle das Theme für das das Film Layout.</string> <string control="Core_btnDLTrans">Lade Erweiterungen für Ember herunter, z.B. Module, Themes, Übersetzungen oder Export Templates.</string> <string control="Core_cbIntLang">Wähle die Sprache für die Ember Oberfläche. (Ember muss anschließend neugestartet werden)</string> @@ -26,9 +26,9 @@ <string control="Core_chkCleanDotFanartJPG">Alle <movie>.fanart.jpg Dateien löschen.</string> <string control="Core_chkCleanMovieNFOb">Alle <movie>.nfo Dateien löschen.</string> <string control="Core_chkWhitelistVideo">Alle Erweiterungen die unter "Gültige Video Erweiterungen" aufgeführt sind automatisch der Whitelist hinzufügen.</string> - <string control="Core_btnRemoveWhitelist">Die Gewählte Erweiterung aus der Whitelist entfernen.</string> - <string control="Core_btnAddWhitelist">Die angegebene Erweiterung zur Whitelist hinzufügen.</string> - <string control="Core_txtWhitelist">Gib eine Erweiterung zum hinzufügen ein.</string> + <string control="Core_btnRemoveWhitelist">Die gewählte Erweiterung aus der Whitelist entfernen.</string> + <string control="Core_btnAddWhitelist">Die eingegebene Erweiterung zur Whitelist hinzufügen.</string> + <string control="Core_txtWhitelist">Gib eine Erweiterung zum Hinzufügen ein.</string> <string control="Core_lstWhitelist">Diese Liste beinhaltet alle Erweiterungen die beim säubern übersprungen werden.</string> <string control="Core_chkYAMJCompatibleSets">Wenn aktiviert speichert Ember Sets YAMJ kompatibel. Wenn deaktiviert werden Sets zu XBMC kompatibel gespeichert.</string> <string control="Core_chkAskCheckboxScrape">Wenn aktiviert bewirkt ein klick auf die Movie Checkbox das nicht automatische scrappen. Wenn deaktiviert ist der automatische scrap möglich.</string> @@ -37,8 +37,8 @@ <string control="Core_txtCheckTitleTol">Enter the tolerance level you would like Ember to use when title matching. The higher the number, the more lenient the algorithm is. 0 = disabled</string> <string control="Core_chkCheckTitles">Aktiviere dies um Ember nach Unterschiedlichen Titeln und Dateinamen suchen zu lassen. Dies ist hilfreich um sicherzustellen, dass die Informationen für den richtigen Film sind.</string> <string control="Core_btnRemoveToken">Löscht das gewählte Token aus der Liste.</string> - <string control="Core_btnAddToken">Fügt das eingegebene Token in die Liste hinzu.</string> - <string control="Core_txtSortToken">Gib ein Token ein.</string> + <string control="Core_btnAddToken">Fügt das eingegebene Token der Liste hinzu.</string> + <string control="Core_txtSortToken">Gib ein Sortier-Token ein um ihn der Liste hinzuzufügen.</string> <string control="Core_lstSortTokens">Eine Liste aller aktueller Sort-Tokens. (Wenn ein Filmtitel mit einem dieser Sort-Tokens beginnt, wird das Token ans Ende verschoben. z.B.: Sort Token = "The", Titel = "The Dark Knight", Ergebnis = "Dark Knight, The")</string> <string control="Core_chkDisplayYear">Wenn aktiviert zeigt Ember in der Medienliste das Jahr in Klammern hinter dem Titel.</string> <string control="Core_chkMovieExtraCol">Verstecke die Extrathumb Spalte in der Medienliste.</string> @@ -63,35 +63,35 @@ <string control="Core_chkMovieJPG">Poster Dateien als "movie.jpg" speichern.</string> <string control="Core_chkMovieNameTBN">Poster Dateien als "<movie>.tbn" speichern.</string> <string control="Core_chkMovieTBN">Poster Dateien als "movie.tbn" speichern.</string> - <string control="Core_lvMovies">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colID">Die Liste aller aktuellen Filmquellen (Movie sources). (Diese Pfade werden nach Filmen durchsucht)</string> - <string control="Core_colName">Die Liste aller aktuellen Filmquellen (Movie sources). (Diese Pfade werden nach Filmen durchsucht)</string> - <string control="Core_colPath">Die Liste aller aktuellen Filmquellen (Movie sources). (Diese Pfade werden nach Filmen durchsucht)</string> - <string control="Core_colRecur">Die Liste aller aktuellen Filmquellen (Movie sources). (Diese Pfade werden nach Filmen durchsucht)</string> - <string control="Core_colFolder">Die Liste aller aktuellen Filmquellen (Movie sources). (Diese Pfade werden nach Filmen durchsucht)</string> - <string control="Core_colSingle">Die Liste aller aktuellen Filmquellen (Movie sources). (Diese Pfade werden nach Filmen durchsucht)</string> - <string control="Core_btnMovieRem">Die gewählte Filmquelle entfernen.</string> + <string control="Core_lvMovies">Die Liste aller aktuellen Filmquellen. (Diese Pfade werden nach Filmen durchsucht)</string> + <string control="Core_colID">Die Liste aller aktuellen Filmquellen. (Diese Pfade werden nach Filmen durchsucht)</string> + <string control="Core_colName">Die Liste aller aktuellen Filmquellen. (Diese Pfade werden nach Filmen durchsucht)</string> + <string control="Core_colPath">Die Liste aller aktuellen Filmquellen. (Diese Pfade werden nach Filmen durchsucht)</string> + <string control="Core_colRecur">Die Liste aller aktuellen Filmquellen. (Diese Pfade werden nach Filmen durchsucht)</string> + <string control="Core_colFolder">Die Liste aller aktuellen Filmquellen. (Diese Pfade werden nach Filmen durchsucht)</string> + <string control="Core_colSingle">Die Liste aller aktuellen Filmquellen. (Diese Pfade werden nach Filmen durchsucht)</string> + <string control="Core_btnMovieRem">Die gewählte Filmquelle(n) entfernen.</string> <string control="Core_btnMovieAddFolder">Eine neue Filmquelle anlegen.</string> - <string control="Core_txtPosterWidth">Poster auf die angegebene Größe ändern.</string> - <string control="Core_txtPosterHeight">Poster auf die angegebene Größe ändern.</string> + <string control="Core_txtPosterWidth">Poster auf die angegebene Breite ändern.</string> + <string control="Core_txtPosterHeight">Poster auf die angegebene Höhe ändern.</string> <string control="Core_tbPosterQual">Die Qualität von Poster auf diesen Wert ändern (0 = Original Qualität)</string> <string control="Core_chkResizePoster">Die Größe von Postern vor dem Scannen verändern.</string> <string control="Core_cbPosterSize">Wähle deine bevorzugte Größe von Postern. Ember wird versuchen Poster in deiner gewünschten Größe zu scrapen, falls solche nicht verfügbar sind wird nach der nächst kleineren Größe gesucht.</string> <string control="Core_chkOverwritePoster">Wenn aktiviert werden vorhandene Poster beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist..</string> - <string control="Core_txtFanartWidth">Die Größe von Fanart Dateien wird auf diesen Wert verändert.</string> + <string control="Core_txtFanartWidth">Fanart auf die angegebene Breite ändern.</string> <string control="Core_txtFanartHeight">Die Größe von Fanart Dateien wird auf diesen Wert verändert.</string> <string control="Core_chkFanartOnly">Wenn aktiviert wird Ember nur versuchen Fanarts in dieser größe zu laden. (Beachte, dass wenn kein Fanart in der gewünschten Größe vorhanden ist, keines gespeichert wird)</string> <string control="Core_tbFanartQual">Die Qualität von Fanart Bildern (0 = Original Qualität)</string> - <string control="Core_chkResizeFanart">Größe vor dem speichern ändern.</string> + <string control="Core_chkResizeFanart">Größe des Fanarts vor dem Speichern ändern.</string> <string control="Core_cbFanartSize">Wähle deine bevorzugte Größe von Fanarts. Ember wird versuchen Fanarts in deiner gewünschten Größe zu scrapen, falls solche nicht verfügbar sind wird nach der nächst kleineren Größe gesucht.</string> - <string control="Core_chkOverwriteFanart">Wenn aktiviert werden vorhandene Fanarts beim speichern überschrieben. Wenn nicht aktiviert wird das Fanart nur gespeichert, wenn aktuell keines vorhanden ist..</string> + <string control="Core_chkOverwriteFanart">Wenn aktiviert werden vorhandene Fanarts beim speichern überschrieben. Wenn nicht aktiviert wird das Fanart nur gespeichert, wenn aktuell keines vorhanden ist.</string> <string control="Core_chkNoSaveImagesToNfo">Wenn aktiviert wird Ember NICHT die URLs von Bildern in den NFO-Dateien speichern. (Für die YAMJ kompatibilität)</string> - <string control="Core_chkSingleScrapeImages">Bilder beim einzelnen scrapen aussuchen</string> + <string control="Core_chkSingleScrapeImages">Bilder beim einzelnen Scrapen aussuchen.</string> <string control="Core_chkUseImgCacheUpdaters">Bilder im Bildercache speichern beim automatischen scrapen</string> <string control="Core_chkPersistImgCache">Wenn aktiviert bleibt der Imagecache nach Beenden vorhanden.</string> <string control="Core_chkUseImgCache">Embers Imagecache benutzen.</string> <string control="Core_chkUseETasFA">Wenn aktiviert und kein Fanart verfügbar ist, wird Ember ein Extrathumb als Fanart speichern.</string> - <string control="Core_chkNoSpoilers">Wenn aktiviert werden nur Frames aus der ersten Hälfte des Films extrahiert. (Um Spoiler zu verhindern)</string> + <string control="Core_chkNoSpoilers">Wenn aktiviert werden nur Frames aus der ersten Hälfte des Films extrahiert um Spoiler zu verhindern.</string> <string control="Core_txtAutoThumbs">Gib die Anzahl an Frames an, die Ember aus dem Video extrahieren soll.</string> <string control="Core_chkAutoThumbs">Wenn aktiviert wird Ember die angegebene Anzahl an Frames aus dem Video extrahieren.</string> <string control="Core_txtProxyDomain">Gib die Domäne für die Anmeldung am Proxy ein. (Bei den meisten Proxy Servern nicht nötig)</string> @@ -106,7 +106,7 @@ <string control="Core_chkProperCase">Ändere die Filmtitel in Jedes-Wort-Groß. (z.B.: "the dark knight" wird "The Dark Knight")</string> <string control="Core_btnRemoveFilter">Entfernt den aktuellen Filter.</string> <string control="Core_btnAddFilter">Fügt den angegebenen Filter der Liste hinzu.</string> - <string control="Core_txtFilter">Gib einen Text oder RegExp als Filter ein. Special: "a[->]b" = replace all occurrances of "a" with "b" (Example: ".[->]_" will replace all periods in the title with underscores.)</string> + <string control="Core_txtFilter">Gib einen Text oder RegExp als Filter ein. Special: "a[->]b" = ersetzt alle "a" durch ein "b" (Beispiel: ".[->]_" ersetzt alle Punkte durch einen Unterstrich.)</string> <string control="Core_lstFilters">Die Liste aller aktuell aktivierten Filter die benutzt werden um den Filmtitel zu erkennen.</string> <string control="Core_chkMissingExtra">Wenn aktiviert wird Ember bei "Fehlendem Einträge Filter" Filme anzeigen, die über keine Extrathumbs verfügen.</string> <string control="Core_chkMissingSubs">Wenn aktiviert wird Ember bei dem "Fehlendem Einträge Filter" Filme anzeigen, die über keine Untertitel verfügen.</string> @@ -119,23 +119,23 @@ <string control="Core_txtBDPath">Der Pfad zum Backdrop Verzeichnis.</string> <string control="Core_btnRemoveNoStack">Entfernt die gewählte Erweiterung aus der Nicht-Stapeln-Liste.</string> <string control="Core_btnAddNoStack">Fügt die angegebene Erweiterung der Nicht-Stapeln-Liste hinzu.</string> - <string control="Core_txtNoStack">Gib eine Erweiterung zum hinzufügen an.</string> + <string control="Core_txtNoStack">Gib eine Erweiterung an um sie der Nicht-Stapeln-Liste hinzuzufügen.</string> <string control="Core_lstNoStack">Die Liste an Erweiterungen welche nicht zu einzelnen Filmen zusammengefasst (=gestapelt) werden.</string> <string control="Core_btnRemMovieExt">Entfernt die gewählte Erweiterung aus der Gültige-Erweiterungen-Liste.</string> <string control="Core_btnAddMovieExt">Fügt die angegebene Erweiterung der Gültige-Erweiterungen-Liste.</string> - <string control="Core_txtMovieExt">Gib eine Erweiterung zum hinzufügen an.</string> + <string control="Core_txtMovieExt">Gib eine neue Erweiterung ein um sie der Gültige-Erweiterungen-Liste hinzuzufügen.</string> <string control="Core_lstMovieExts">Die Liste an Erweiterungen nach denen Ember in den Quellen suchen wird.</string> <string control="Core_btnEditSource">Die gewählte Quelle editieren.</string> <string control="Core_chkScanOrderModify">Wenn aktiviert wird Ember neue Videos in der Reihenfolge des zuletzt geänderten Zeitraums einlesen, wenn deaktiviert legt Ember neue Dateien alphabetisch an.</string> - <string control="Core_chkSortBeforeScan">Wenn aktiviert, wird Ember vor einem Scan alle Einzel Dateien im Haupt Verzeichnis der Source in ihre eigenen Ordner sortieren.</string> - <string control="Core_chkIgnoreLastScan">Wenn aktiviert wird Ember die letzte Scanzeit beim lesen ignorieren. Wenn deaktiviert wird Ember nur Dateien einlesen die jünger als die letzte Scanzeit sind..</string> - <string control="Core_chkCleanDB">Wenn aktiviert wird Ember nach jedem Scanvorgang die Datenbank säubern.</string> + <string control="Core_chkSortBeforeScan">Wenn aktiviert, wird Ember vor einem Scan alle einzelnen Dateien im Hauptverzeichnis der Source in ihre eigenen Ordner sortieren.</string> + <string control="Core_chkIgnoreLastScan">Wenn aktiviert wird Ember die letzte Scanzeit beim lesen ignorieren. Wenn deaktiviert wird Ember nur Dateien einlesen die jünger als die letzte Scanzeit sind.</string> + <string control="Core_chkCleanDB">Wenn aktiviert wird Ember nach jedem Scanvorgang die Datenbank säubern (Dateien die nicht mehr vorhanden sind werden aus der Datenbank entfernt).</string> <string control="Core_chkAutoDetectVTS">Wenn aktiviert wird Ember versuchen VideoTS Verz. zu erkennen obwohl sie nicht so benannt sind. Wenn deaktiviert werden nur "VIDEO_TS" erkannt.</string> - <string control="Core_chkSkipStackedSizeCheck">Wenn aktiviert wird Ember nur Dateien scannen die größer als die angegebene Größe sind.</string> - <string control="Core_txtSkipLessThan">Ember wird Dateien die kleiner als die angegebene Größe sind beim scannen überspringen.</string> - <string control="Core_txtTVSkipLessThan">Ember wird Dateien die kleiner als die angegebene Größe sind beim scannen überspringen.</string> + <string control="Core_chkSkipStackedSizeCheck">Wenn aktiviert wird Ember Dateien die kleiner sind als die minimale Grösse nicht überspringen wenn sie gestapelt sind (wie z.B. "CD1" oder "DVD2"</string> + <string control="Core_txtSkipLessThan">Ember wird Dateien die kleiner als die angegebene Größe sind beim scannen von Filmen überspringen.</string> + <string control="Core_txtTVSkipLessThan">Ember wird Dateien die kleiner als die angegebene Größe sind beim scannen von Episoden überspringen.</string> <string control="Core_cbTrailerQuality">Wähle dein bevorzugtes Trailer Format.</string> - <string control="Core_chkDeleteAllTrailers">If enabled, Ember will delete all existing trailers for the movie before saving the new one.</string> + <string control="Core_chkDeleteAllTrailers">Wenn aktiviert wird Ember alle existierenden Trailer löschen bevor der neue Trailer gespeichert wird.</string> <string control="Core_chkOverwriteTrailer">Wenn aktiviert wird Ember Trailer beim speichern überschreiben.</string> <string control="Core_chkNoDLTrailer">Wenn aktiviert werden keine Trailer heruntergeladen, es wird nur die URL in der NFO-Datei gespeichert.</string> <string control="Core_chkSingleScrapeTrailer">Wenn aktiviert werden Trailer beim einzeln Scrapen gescraped.</string> @@ -144,7 +144,7 @@ <string control="Core_chkAutoETSize">Wähle die Größe für Fanarts die als Extrathumbs gespeichert werden sollen.</string> <string control="Core_cbAutoETSize">Wenn aktiviert werden automatisch alle Fanarts der angegebebnen Größe als Extrathumbs gespeichert.</string> <string control="Core_txtETWidth">Verändere die Größe von Extrathumbs zu der angegebenen.</string> - <string control="Core_txtETHeight">Verändere die Größe von Extrathumbs zu der angegebenen.</string> + <string control="Core_txtETHeight">Verändere die Größe von Extrathumbs auf die angegebene Grösse.</string> <string control="Core_chkETPadding">Wenn aktiviert wird Ember schwarze Balken in den Extrathumbs erzeugen um die Größe zu erreichen.</string> <string control="Core_rbETCustom">Verändere die Größe von Extrathumbs auf die angegebene.</string> <string control="Core_rbETNative">Speichere Extrathumbs in ihrer ursprünglichen Größe.</string> @@ -153,11 +153,11 @@ <string control="Core_ColumnHeader2">Die Liste aller angelegten Serien Quellverzeichnisse. (Verzeichnisse werden nach TV-Serien durchsucht)</string> <string control="Core_ColumnHeader3">Die Liste aller angelegten Serien Quellverzeichnisse. (Verzeichnisse werden nach TV-Serien durchsucht)</string> <string control="Core_chkTVScanOrderModify">Wenn aktiviert wird Ember neue Videos in der Reihenfolge des zuletzt geänderten Zeitraums einlesen, wenn deaktiviert legt Ember neue Dateien alphabetisch an.</string> - <string control="Core_chkTVIgnoreLastScan">>Wenn aktiviert wird Ember die letzte Scanzeit beim lesen ignorieren. Wenn deaktiviert wird Ember nur Dateien einlesen die jünger als die letzte Scanzeit sind..</string> - <string control="Core_chkTVCleanDB">Wenn aktiviert wird Ember nach jedem Scanvorgang die Datenbank säubern.</string> - <string control="Core_btnAddTVSource">Fügt eine neue Quelle ein.</string> - <string control="Core_btnEditTVSource">Die aktuelle Quelle editieren.</string> - <string control="Core_btnRemTVSource">Die aktuelle Quelle aus der Liste löschen.</string> + <string control="Core_chkTVIgnoreLastScan">Wenn aktiviert wird Ember die letzte Scanzeit beim lesen ignorieren. Wenn deaktiviert wird Ember nur Dateien einlesen die jünger als die letzte Scanzeit sind.</string> + <string control="Core_chkTVCleanDB">Wenn aktiviert wird Ember nach jedem Scanvorgang die Datenbank säubern. (Entfernt Einträge deren Dateien nicht mehr vorhanden sind oder nicht mehr mit den Einstellungen übereinstimmen)</string> + <string control="Core_btnAddTVSource">Eine neue Filmquelle anlegen.</string> + <string control="Core_btnEditTVSource">Die gewählte Quelle editieren.</string> + <string control="Core_btnRemTVSource">Die gewählte Filmquelle(n) entfernen.</string> <string control="Core_chkSeasonAllJPG">Das Alle-Staffeln Poster als "season-all.jpg" speichern.</string> <string control="Core_chkSeasonAllTBN">Das Alle-Staffeln Poster als "season-all.tbn" speichern.</string> <string control="Core_chkEpisodeDotFanart">Das Episoden Fanart Poster als "<episode>.fanart.jpg" speichern.</string> @@ -187,8 +187,8 @@ <string control="Core_cboSeasonRetrieve">Wähle ob die Staffel anhand des Verzeichnis- oder Dateinamens erkannt werden soll.</string> <string control="Core_txtEpRegex">Gib das Regex zum erkennen der Episoden Nummer ein.</string> <string control="Core_cboEpRetrieve">Wähle ob die Nummer der Episode aus dem Dateinamen, Verzeichnisnamen oder dem Ergebnis der Staffel suche erkannt werden soll.</string> - <string control="Core_btnEditShowRegex">Das gewählte Regex editieren.</string> - <string control="Core_btnRemoveShowRegex">Das gewählte Regex aus der Liste löschen.</string> + <string control="Core_btnEditShowRegex">Das gewählte Serien Regex editieren.</string> + <string control="Core_btnRemoveShowRegex">Das gewählte Serien Regex aus der Liste löschen.</string> <string control="Core_lvShowRegex">Die Liste der vorhandenen Serien Regex.</string> <string control="Core_colRegID">Die Liste der vorhandenen Serien Regex.</string> <string control="Core_colSeason">Die Liste der vorhandenen Serien Regex.</string> @@ -207,70 +207,70 @@ <string control="Core_chkDisplayAllSeason">Wenn aktiviert und ein Alle-Staffeln-Poster vorhanden ist wird es rechts angezeigt.</string> <string control="Core_cbRatingRegion">Wähle die Region der Bewertung/Altersfreigabe.</string> <string control="Core_chkNoFilterEpisode">Wenn aktiviert wird Ember versuchen die Episodentitel zu filtern. Wenn deaktiviert wird Ember die Titel scrapen.</string> - <string control="Core_btnEpFilterDown">Schiebe den gewählten Filter in der Liste oben unten. (Filter werden von oben nach unten abgearbeitet)</string> + <string control="Core_btnEpFilterDown">Schiebe den gewählten Filter in der Liste nach oben. (Filter werden von oben nach unten abgearbeitet)</string> <string control="Core_btnEpFilterUp">Schiebe den gewählten Filter in der Liste nach unten. (Filter werden von oben nach unten abgearbeitet)</string> <string control="Core_chkEpProperCase">Ändere die Episodentitel in Jedes-Wort-Groß. (z.B.: "the dark knight" wird "The Dark Knight")</string> - <string control="Core_btnRemoveEpFilter">Entfernt den aktuellen Filter.</string> - <string control="Core_btnAddEpFilter">Fügt den angegebenen Filter der Liste hinzu.</string> - <string control="Core_txtEpFilter">Fügt den angegebenen Filter der Liste hinzu.</string> + <string control="Core_btnRemoveEpFilter">Entfernt den Filter von der Liste.</string> + <string control="Core_btnAddEpFilter">Fügt den Filter der Liste hinzu.</string> + <string control="Core_txtEpFilter">Gib einen Filter ein.</string> <string control="Core_lstEpFilters">Die Liste aller gewählten Filter die zum filtern von Episodentitel verwendet werden.</string> <string control="Core_btnShowFilterDown">Schiebe den gewählten Filter in der Liste nach oben. (Filter werden von oben nach unten abgearbeitet)</string> <string control="Core_btnShowFilterUp">Schiebe den gewählten Filter in der Liste nach unten. (Filter werden von oben nach unten abgearbeitet)</string> <string control="Core_chkShowProperCase">Ändere die Episodentitel in Jedes-Wort-Groß. (z.B.: "the dark knight" wird "The Dark Knight")</string> - <string control="Core_btnRemoveShowFilter">Entfernt den aktuellen Filter.</string> - <string control="Core_btnAddShowFilter">Fügt den angegebenen Filter der Liste hinzu.</string> + <string control="Core_btnRemoveShowFilter">Entfernt den Filter von der Liste.</string> + <string control="Core_btnAddShowFilter">Fügt den Filter der Liste hinzu.</string> <string control="Core_txtShowFilter">Gib einen Filter ein.</string> - <string control="Core_lstShowFilters">Die Liste aller Filter die benutzt werden um den Serientitel zu erkennen..</string> + <string control="Core_lstShowFilters">Die Liste aller Filter die benutzt werden um den Serientitel zu erkennen.</string> <string control="Core_chkGetEnglishImages">Wenn aktiviert werden auch englische Bilder geladen - egal welche Sprache eingestellt ist.</string> <string control="Core_chkOnlyTVImagesLanguage">Wenn aktiviert werden nur Bilder der gewählten Sprache geladen.</string> - <string control="Core_txtShowPosterWidth">Verändere die Größe von Postern auf die angegebene.</string> - <string control="Core_txtShowPosterHeight">Verändere die Größe von Postern auf die angegebene.</string> + <string control="Core_txtShowPosterWidth">Verändere die Größe von Postern auf die angegebene Breite.</string> + <string control="Core_txtShowPosterHeight">Verändere die Größe von Postern auf die angegebene Höhe.</string> <string control="Core_tbShowPosterQual">Die Qualität von Postern (0 = Original Qualität)</string> <string control="Core_chkResizeShowPoster">Postergröße verändern vor dem speichern</string> <string control="Core_cbShowPosterSize">Wähle deinen Bevorzugten Serien Poster Typ. Während des Scrapens wird Ember versuchen ein Bild von diesem Typ zu laden.</string> - <string control="Core_chkOverwriteShowPoster">Wenn aktiviert werden vorhandene Poster beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist..</string> - <string control="Core_txtShowFanartWidth">Verändere die Größe von Serien Fanarts auf die angegebene.</string> - <string control="Core_txtShowFanartHeight">Verändere die Größe von Serien Fanarts auf die angegebene.</string> - <string control="Core_tbShowFanartQual">Die Qualität von Fanart Bildern (0 = Original Qualität)</string> - <string control="Core_chkResizeShowFanart">Fanartgröße verändern vor dem speichern</string> - <string control="Core_cbShowFanartSize">Wähle deine bevorzugte Größe von Serien Fanarts. Ember wird versuchen Poster in deiner gewünschten Größe zu scrapen, falls solche nicht verfügbar sind wird nach der nächst kleineren Größe gesucht.</string> - <string control="Core_chkOverwriteShowFanart">Wenn aktiviert werden vorhandene Serien Fanarts beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist..</string> - <string control="Core_txtSeaPosterWidth">Verändere die Größe von Staffel Postern auf die angegebene.</string> - <string control="Core_txtSeaPosterHeight">Verändere die Größe von Staffel Postern auf die angegebene.</string> + <string control="Core_chkOverwriteShowPoster">Wenn aktiviert werden vorhandene Poster beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist.</string> + <string control="Core_txtShowFanartWidth">Verändere die Größe von Serien Fanarts auf die angegebene Breite.</string> + <string control="Core_txtShowFanartHeight">Verändere die Größe von Serien Fanarts auf die angegebene Höhe.</string> + <string control="Core_tbShowFanartQual">Die Qualität von Serien Fanart (0 = Original Qualität)</string> + <string control="Core_chkResizeShowFanart">Fanartgröße verändern vor dem Speichern.</string> + <string control="Core_cbShowFanartSize">Wähle deine bevorzugte Größe von Episoden Fanarts. Ember wird versuchen Fanarts in deiner gewünschten Größe zu scrapen, falls solche nicht verfügbar sind wird nach der nächst kleineren Größe gesucht.</string> + <string control="Core_chkOverwriteShowFanart">Wenn aktiviert werden vorhandene Serien Fanarts beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist.</string> + <string control="Core_txtSeaPosterWidth">Verändere die Größe von Serien Poster auf die angegebene Breite.</string> + <string control="Core_txtSeaPosterHeight">Verändere die Größe von Serien Poster auf die angegebene Höhe.</string> <string control="Core_tbSeaPosterQual">Die Qualität von Staffel Postern (0 = Original Qualität)</string> - <string control="Core_chkSeaResizePoster">Staffel Poster Größe verändern vor dem speichern</string> + <string control="Core_chkSeaResizePoster">Staffel Poster Größe verändern vor dem speichern.</string> <string control="Core_cbSeaPosterSize">Wähle deine bevorzugte Größe von Staffel Postern. Ember wird versuchen Poster in deiner gewünschten Größe zu scrapen, falls solche nicht verfügbar sind wird nach der nächst kleineren Größe gesucht.</string> - <string control="Core_chkSeaOverwritePoster">Wenn aktiviert werden vorhandene Staffel Poster beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist..</string> - <string control="Core_txtSeaFanartWidth">Verändere die Größe von Staffel Fanart auf die angegebene.</string> - <string control="Core_txtSeaFanartHeight">Verändere die Größe von Staffel Fanart auf die angegebene.</string> + <string control="Core_chkSeaOverwritePoster">Wenn aktiviert werden vorhandene Staffel Poster beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist.</string> + <string control="Core_txtSeaFanartWidth">Verändere die Größe von Staffel Fanarts auf die angegebene Breite.</string> + <string control="Core_txtSeaFanartHeight">Verändere die Größe von Episoden Fanart auf die angegebene Höhe.</string> <string control="Core_tbSeaFanartQual">Die Qualität von Staffel Fanart (0 = Original Qualität)</string> - <string control="Core_chkSeaResizeFanart">Staffel Fanart Größe verändern vor dem speichern</string> - <string control="Core_cbSeaFanartSize">Wähle deine bevorzugte Größe von Staffel Fanarts. Ember wird versuchen Fanarts in deiner gewünschten Größe zu scrapen, falls solche nicht verfügbar sind wird nach der nächst kleineren Größe gesucht.</string> - <string control="Core_chkSeaOverwriteFanart">Wenn aktiviert werden vorhandene Staffel Fanarts beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist..</string> - <string control="Core_txtEpPosterWidth">Verändere die Größe von Episoden Postern auf die angegebene.</string> - <string control="Core_txtEpPosterHeight">Verändere die Größe von Episoden Postern auf die angegebene.</string> + <string control="Core_chkSeaResizeFanart">Staffel Fanart Größe verändern vor dem speichern.</string> + <string control="Core_cbSeaFanartSize">Wähle deine bevorzugte Größe von Episoden Fanarts. Ember wird versuchen Fanarts in deiner gewünschten Größe zu scrapen, falls solche nicht verfügbar sind wird nach der nächst kleineren Größe gesucht.</string> + <string control="Core_chkSeaOverwriteFanart">Wenn aktiviert werden vorhandene Staffel Fanarts beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist.</string> + <string control="Core_txtEpPosterWidth">Verändere die Größe von Episoden Postern auf die angegebene Breite.</string> + <string control="Core_txtEpPosterHeight">Verändere die Größe von Episoden Postern auf die angegebene Höhe.</string> <string control="Core_tbEpPosterQual">Die Qualität von Episoden Postern (0 = Original Qualität)</string> <string control="Core_chkResizeEpPoster">Episoden Poster Größe verändern vor dem speichern</string> - <string control="Core_chkOverwriteEpPoster">Wenn aktiviert werden vorhandene Episoden Fanarts beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist..</string> - <string control="Core_txtEpFanartWidth">Verändere die Größe von Episoden Fanart auf die angegebene.</string> - <string control="Core_txtEpFanartHeight">Verändere die Größe von Episoden Fanart auf die angegebene.</string> + <string control="Core_chkOverwriteEpPoster">Wenn aktiviert werden vorhandene Episoden Fanarts beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist.</string> + <string control="Core_txtEpFanartWidth">Verändere die Größe von Episoden Fanart auf die angegebene Breite.</string> + <string control="Core_txtEpFanartHeight">Verändere die Größe von Episoden Fanart auf die angegebene Höhe.</string> <string control="Core_tbEpFanartQual">Die Qualität von Episoden Fanart (0 = Original Qualität)</string> - <string control="Core_chkResizeEpFanart">Episoden Fanart Größe verändern vor dem speichern</string> + <string control="Core_chkResizeEpFanart">Episoden Fanart Größe verändern vor dem speichern.</string> <string control="Core_cbEpFanartSize">Wähle deine bevorzugte Größe von Episoden Fanarts. Ember wird versuchen Fanarts in deiner gewünschten Größe zu scrapen, falls solche nicht verfügbar sind wird nach der nächst kleineren Größe gesucht.</string> - <string control="Core_chkOverwriteEpFanart">Wenn aktiviert werden vorhandene Episoden Fanarts beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist..</string> + <string control="Core_chkOverwriteEpFanart">Wenn aktiviert werden vorhandene Episoden Fanarts beim speichern überschrieben. Wenn nicht aktiviert wird das Poster nur gespeichert, wenn aktuell keines vorhanden ist.</string> <string control="Core_chkScraperShowRating">Das Scrapen von TV-Serien Bewertungen einschalten.</string> <string control="Core_chkScraperShowActors">Das Scrapen von TV-Serien Schauspielern einschalten.</string> <string control="Core_chkScraperShowStudio">Das Scrapen von TV-Serien Studios einschalten.</string> <string control="Core_chkScraperShowPremiered">Das Scrapen von TV-Serien Premiereterminen einschalten.</string> <string control="Core_chkScraperShowEGU">Das Scrapen von EpisodenGuide URLs einschalten.</string> <string control="Core_chkScraperShowMPAA">Das Scrapen von MPAA-Informationen einschalten.</string> - <string control="Core_chkScraperShowPlot">Das Scrapen von TV-Serien Inhaltsangaben (=Plot) einschalten.</string> - <string control="Core_chkScraperShowGenre">Das Scrapen von TV-Serien Genres einschalten.</string> + <string control="Core_chkScraperShowPlot">Das Scrapen von TV-Serien Inhaltsangaben einschalten.</string> + <string control="Core_chkScraperShowGenre">Das Scrapen von Genres einschalten.</string> <string control="Core_chkScraperShowTitle">Das Scrapen von TV-Serien Titeln einschalten.</string> <string control="Core_chkScraperEpActors">Das Scrapen von Episoden Schauspielern einschalten.</string> <string control="Core_chkScraperEpCredits">Das Scrapen von Episoden Credits einschalten.</string> <string control="Core_chkScraperEpDirector">Das Scrapen von Episoden Regisseuren einschalten.</string> - <string control="Core_chkScraperEpPlot">Das Scrapen von Episoden Inhaltsangaben (=Plot) einschalten.</string> + <string control="Core_chkScraperEpPlot">Das Scrapen von Episoden Inhaltsangaben einschalten.</string> <string control="Core_chkScraperEpRating">Das Scrapen von Episoden Bewertungen einschalten.</string> <string control="Core_chkScraperEpAired">Das Scrapen von Episoden Austrahlungsterminen einschalten.</string> <string control="Core_chkScraperEpTitle">Das Scrapen von Episoden Titeln einschalten.</string> @@ -298,6 +298,7 @@ <string control="Core_cbTVLanguage">Wähle die bevorzugte Sprache in der nach Informationen und Bildern gesucht werden soll.</string> <string control="Core_chkCertification">Das Scrapen von Altersbeschränkungen einschalten.</string> <string control="Core_chkTop250">Das Scrapen von IMDB Top250 einschalten.</string> + <string control="Core_chkCountry">Das Scrapen von Ländern einschalten.</string> <string control="Core_txtGenreLimit">Die Anzahl an gescrapeten Genres limitieren.</string> <string control="Core_txtActorLimit">Die Anzahl an gescrapeten Schauspielern limitieren.</string> <string control="Core_chkCrew">Das Scrapen von der restlichen Crew einschalten. ("Gesamte Crew Scrapen" muss eingeschaltet sein)</string> @@ -305,28 +306,28 @@ <string control="Core_chkProducers">Das Scrapen von Produzenten einschalten. ("Gesamte Crew Scrapen" muss eingeschaltet sein)</string> <string control="Core_chkWriters">Das Scrapen von Autoren einschalten.</string> <string control="Core_chkStudio">Das Scrapen von Studios einschalten.</string> - <string control="Core_chkRuntime">Das Scrapen von Spielzeiten (=Duration) einschalten.</string> - <string control="Core_chkPlot">Das Scrapen von Inhaltsangaben (=Plot, Inhalt) einschalten.</string> - <string control="Core_chkOutline">Das Scrapen von Kurzbeschreibungen (=Outline) einschalten.</string> + <string control="Core_chkRuntime">Das Scrapen von Spielzeiten einschalten.</string> + <string control="Core_chkPlot">Das Scrapen von Inhaltsangaben einschalten.</string> + <string control="Core_chkOutline">Das Scrapen von Kurzbeschreibungen einschalten.</string> <string control="Core_chkGenre">Das Scrapen von Genres einschalten.</string> <string control="Core_chkDirector">Das Scrapen von Regisseuren einschalten.</string> <string control="Core_chkTagline">Das Scrapen von Taglines einschalten.</string> <string control="Core_chkCast">Das Scrapen von Schauspielern einschalten.</string> - <string control="Core_chkVotes">Das Scrapen von Anzahl Bewertungen (=Stimmen) einschalten.</string> + <string control="Core_chkVotes">Das Scrapen von Anzahl Bewertungen einschalten.</string> <string control="Core_chkTrailer">Das Scrapen von Trailer URLs einschalten.</string> <string control="Core_chkRating">Das Scrapen von Bewertungen einschalten.</string> <string control="Core_chkRelease">Das Scrapen von Premiere-Daten einschalten.</string> <string control="Core_chkMPAA">Das Scrapen von MPAA-Informationen einschalten.</string> <string control="Core_chkYear">Das Scrapen von Filmjahren einschalten.</string> <string control="Core_chkTitle">Das Scrapen von Filmtiteln einschalten.</string> - <string control="Core_lstMetaData">Die Liste der Erweiterungen die einen Default Metadatensatz haben.</string> - <string control="Core_txtDefFIExt">Gib eine Erweiterung für einen neuen default Metadatensatz ein.</string> - <string control="Core_btnRemoveMetaDataFT">Die Default Metadaten der gewählten Erweiterung entfernen.</string> - <string control="Core_btnEditMetaDataFT">Die Default Metadaten der gewählten Erweiterung editieren.</string> - <string control="Core_btnNewMetaDataFT">Default Metadaten für die gewählte Erweiterung anlegen und der Liste der Default Metadatan hinzufügen.</string> - <string control="Core_chkIFOScan">Wenn aktiviert werden Metadaten aus .IFO Dateien gelesen.</string> + <string control="Core_lstMetaData">Die Liste der Erweiterungen die einen Defaultmetadaten Eintrag haben.</string> + <string control="Core_txtDefFIExt">Gib eine Erweiterung ein.</string> + <string control="Core_btnRemoveMetaDataFT">Die Defaultmetadaten der gewählten Erweiterung entfernen.</string> + <string control="Core_btnEditMetaDataFT">Die gewählten Defaultmetadaten editieren.</string> + <string control="Core_btnNewMetaDataFT">Fügt die eingegebenen Defaultmetadaten der Liste hinzu.</string> + <string control="Core_chkIFOScan">Wenn aktiviert werden Metadaten aus *.IFO Dateien gelesen.</string> <string control="Core_cbLanguages">Wenn ein Film die gewählte Sprache beinhaltet wird ein Overlay bei dem Audio Metadaten Symbol eingeblendet.</string> - <string control="Core_txtRuntimeFormat">Wähle das Format für die Spielzeit von Filmen gescannt aus den Metadaten.</string> + <string control="Core_txtRuntimeFormat">Wähle das Format für die Spielzeit von Filmen gescannt aus den Metadaten. Benutze <0m> um die Minuten auzufüllen.</string> <string control="Core_chkScanMediaInfo">Wenn aktiviert werden Metadaten aus den Dateien gescannt.</string> <string control="Core_chkUseMIDuration">Benutze die Spielzeit aus den Metadaten als Filmlänge.</string> <string control="Core_chkLockOutline">Wenn aktiviert wird die Kurzbeschreibung nur verändert wenn sie leer ist.</string> @@ -335,7 +336,7 @@ <string control="Core_chkLockGenre">Wenn aktiviert werden das Genre nicht verändert sofern mindestens eins zugewiesen ist.</string> <string control="Core_chkLockRealStudio">Wenn aktiviert wird das Studio nicht verändert sofern eines vorhanden ist.</string> <string control="Core_chkLockRating">Wenn aktiviert wird die Bewertung nicht verändert sofern eine vorhanden ist.</string> - <string control="Core_chkLockTagline">Wenn aktiviert wird die Tagline nicht verändert sofern sie nicht leer ist.</string> + <string control="Core_chkLockTagline">Wenn aktiviert wird der Titel nicht verändert sofern er nicht leer ist.</string> <string control="Core_chkLockTitle">Wenn aktiviert wird der Titel nicht verändert sofern er nicht leer ist.</string> <string control="Core_cbForce">Wähle die Region die benutzt werden soll im Titel in der eigenen Sprache zu erhalten.</string> <string control="Core_chkForceTitle">Wenn aktiviert wird Ember nach Filmtiteln in der gewählten Sprache suchen. Dies ist Hilfreich um Titel in der eigenen Sprache bei Fremdsprachigen Filmen zu erhalten.</string> @@ -357,5 +358,10 @@ <string control="Core_btnResetMovieFilters">Dies wird die Film Filter wieder auf den Standard zurücksetzen. WARNUNG: Dies WIRD jegliche eigene Änderung löschen.</string> <string control="Core_btnResetValidExts">Dies wird die Liste der gültigen Erweiterungen wieder auf den Standard zurücksetzen. WARNUNG: Dies WIRD jegliche eigene Änderung löschen.</string> <string control="Core_ResetShowRegex">Dies wird die Serien RegEx wieder auf den Standard zurücksetzen. WARNUNG: Dies WIRD jegliche eigene Änderung löschen.</string> + <string control="Core_chkClickScrape">Aktiviere Click-Scrape im Hauptmenü beim Anklicken der Tabellen-Markierungen.</string> + <string control="Core_chkSpecialDateAdd">Wenn aktiviert wird beim Einlesen von Filmen in die Datenbank, das Erstelldatum der Videodatei berücksichtigt statt das aktuelle Datum. Dadurch wird die Sortierung der neuesten Filme zuverlässig und unabhängig von der Datenbank!</string> + <string control="Core_chkLockLanguageV">Wenn aktiviert wird das Sprachfeld (Video Metadata) nicht aktualisiert.</string> + <string control="Core_chkLockLanguageA">Wenn aktiviert wird das Sprachfeld (Audio Metadata) nicht aktualisiert.</string> + <string control="Core_chkLockMPAA">Wenn aktiviert wird die Altersfreigabe nicht aktualisiert.</string> + <string control="Core_chkUseMPAAFSK">Wenn aktiviert werden die MPAA Freigabewerte in FSK konvertiert falls keine FSK Freigabe gefunden wird. Priorität: FSK -> MPAA</string> </strings> -<!-- Rev2123 --> diff --git a/Ember Media Manager/Langs/German_(de_DE).xml b/Ember Media Manager/Langs/German_(de_DE).xml index 458fdde..9c0000e 100644 --- a/Ember Media Manager/Langs/German_(de_DE).xml +++ b/Ember Media Manager/Langs/German_(de_DE).xml @@ -1,4 +1,3 @@ -<?xml version="1.0" encoding="utf-8"?> <strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <string id="1">&Datei</string> <string id="2">Beenden</string> @@ -18,7 +17,7 @@ <string id="16">Staffel Ergebnis</string> <string id="17">C&ache leeren</string> <string id="18">Al&le Filme neu laden</string> - <string id="19">Exit</string> + <string id="19">Schliessen</string> <string id="20">Genres</string> <string id="21">Titel</string> <string id="22">Neu laden</string> @@ -30,13 +29,13 @@ <string id="28">Hinzufügen</string> <string id="29">Setzen</string> <string id="30">Entfernen</string> - <string id="31">Film Re-Scrapen</string> + <string id="31">Ausgewählte Filme (Re)Scrapen</string> <string id="32">Film wechseln</string> <string id="33">Beinhaltendes Verzeichnis öffnen</string> <string id="34">Film löschen</string> <string id="35">Alle markieren</string> <string id="36">Filme</string> - <string id="37">Filter aus</string> + <string id="37">Filter löschen</string> <string id="38">Generell</string> <string id="39">Intolerant</string> <string id="40">Unvollständige</string> @@ -52,7 +51,7 @@ <string id="50">Quelle:</string> <string id="51">Genre:</string> <string id="52">Filter</string> - <string id="53">Scraper Abbrechen...</string> + <string id="53">Scraper wird abbgebrochen...</string> <string id="54">Scraper Abbrechen</string> <string id="55">Keine Informationen über diesen Film verfügbar</string> <string id="56">Altersfreigabe</string> @@ -98,7 +97,7 @@ <string id="96">Nur gesperrte Filme anzeigen.</string> <string id="97">Nur Filme der gewählten Quelle anzeigen.</string> <string id="98">Genre wählen...</string> - <string id="99">Speichere Daten und beende..</string> + <string id="99">Breche alle Prozesse ab...</string> <string id="100">Schauspieler</string> <string id="101">Bist du sicher, dass du fortfahren möchtest?</string> <string id="102">WARNUNG: Wenn du fortfährst werden alle nicht erlaubten Dateitypen gelöscht!</string> @@ -122,10 +121,10 @@ <string id="120">Dateinamensäuberung abbrechen</string> <string id="121">Breche Backdrop Kopiervorgang ab</string> <string id="122">Kopiervorgang abbrechen</string> - <string id="123">reset</string> - <string id="124">speichern</string> - <string id="125">Breche Scraper ab...</string> - <string id="126">Scraper stoppen</string> + <string id="123">leeren</string> + <string id="124">Reguläre Ausdrücke aktualisieren</string> + <string id="125">Scraper wird abbgebrochen...</string> + <string id="126">Scraper Abbrechen</string> <string id="127">Scrape Medien (Alle Filme - Fragen):</string> <string id="128">Scrape Medien (Alle Filme - Automatisch):</string> <string id="129">Dateinamen säubern:</string> @@ -141,10 +140,10 @@ <string id="139">Scrapen:</string> <string id="140">Metadata scannen:</string> <string id="141">Keine Daten aus dem Internet verfügbar, bitte Internetverbindung prüfen und erneut versuchen.</string> - <string id="142">Fehler beim herunterladen der Details.</string> + <string id="142">Fehler beim Herunterladen der Details.</string> <string id="143">Nur {0} aktualisieren</string> - <string id="144">Aktualisieren</string> - <string id="145">Nur</string> + <string id="144">Update</string> + <string id="145">Nur</string> <string id="146">Staffel (Re)Scrapen</string> <string id="147">Episode (Re)Scrapen</string> <string id="148">Poster</string> @@ -163,7 +162,7 @@ <string id="161">Bitte gebe eine URL zur Prüfung ein.</string> <string id="162">Keine Thumb URL eingegeben</string> <string id="163">Film (Re)Scrapen</string> - <string id="164">(Re)Scrape gewählten Film</string> + <string id="164">Ausgewählte Filme (Re)Scrapen</string> <string id="165">Erstelle Filmliste...</string> <string id="166">Erstellung abbrechen...</string> <string id="167">Abbruch</string> @@ -172,7 +171,7 @@ <string id="170">Sperre aufheben</string> <string id="171">Name:</string> <string id="172">Beschreibung:</string> - <string id="173">Erweiterungs Version:</string> + <string id="173">Addon Version:</string> <string id="174">Verzeichnis</string> <string id="175">Dateiname</string> <string id="176">Neues Verzeichnis</string> @@ -189,10 +188,10 @@ <string id="187">&Formatieren</string> <string id="188">&Parsen</string> <string id="189">&Speichern</string> - <string id="190">NFO Editor | </string> + <string id="190">NFO Editor |</string> <string id="191">Dies ist kein gültiges XML-Dokument</string> <string id="192">Datei ist nicht gültig.</string> - <string id="193">Datei ist gültig</string> + <string id="193">Datei ist gültig.</string> <string id="194">Nicht gültig</string> <string id="195">Gültig</string> <string id="196">Möchtest du die Änderungen speichern?</string> @@ -218,7 +217,7 @@ <string id="216">Verzeichnis wählen und "Los" drücken</string> <string id="217">Pfad zum sortieren:</string> <string id="218">Wählen den Pfad in dem sich die Dateien zum sortieren befinden.</string> - <string id="219">Verschiebe </string> + <string id="219">Verschiebe</string> <string id="220">WARNUNG: Wenn du fortfährst werden alle Dateien in separate Verzeichnisse verschoben.</string> <string id="221">Der eingegebene Pfad existiert nicht. Bitte wähle einen gültigen.</string> <string id="222">Verzeichnis nicht gefunden</string> @@ -266,20 +265,20 @@ <string id="264">Cache leeren</string> <string id="265">Poster wechseln (Herunterladen)</string> <string id="266">Fanart wechseln (Herunterladen)</string> - <string id="267">Master.eLang.GetString(148, "Ein oder mehrere Ressources sind in Benutzung und können derzeit nicht gelöscht werden</string> + <string id="267">Ein oder mehrere Ressources sind in Benutzung und können derzeit nicht gelöscht werden.</string> <string id="268">Konnte Cache nicht leeren</string> <string id="269">Größe: {0}x{1}</string> <string id="270">Trailer konnte nicht gestartet werden. Dies könnte an einer Fehlerhaften URI oder an deinem Player liegen.</string> <string id="271">Fehler bei der Wiedergabe</string> - <string id="272">Erweiterungs Datei</string> + <string id="272">Addon Datei</string> <string id="273">Speichern</string> <string id="274">Zurücksetzen</string> <string id="275">Filter</string> <string id="276">Übernehmen</string> - <string id="277">Neu</string> + <string id="277">Neues Addon</string> <string id="278">Jahr</string> - <string id="279">Erweiterung Edit. - </string> - <string id="280">Erweiterungs Dateien</string> + <string id="279">Bearbeite Addon</string> + <string id="280">Addon Dateien</string> <string id="281">Video</string> <string id="282">Audio</string> <string id="283">Unbekannt</string> @@ -293,77 +292,77 @@ <string id="291">Templates</string> <string id="292">Ungültiger Eintrag</string> <string id="293">Sonstiges</string> - <string id="294">Neu</string> + <string id="294">Neues erstellen</string> <string id="295">Erweiterung löschen</string> - <string id="296">Um mit dem Löschen fortzufahren musst du bestätigen, dass du der Besitzer dieser Erweiterung bist</string> + <string id="296">Um mit dem Löschen fortzufahren musst du bestätigen, dass du der Besitzer dieser Erweiterung bist.</string> <string id="297">Besitz Bestätigen</string> <string id="298">Ember Media Manager neu starten?</string> - <string id="299">Die Änderungen benötigen einen Neustart von Ember\n\nMöchtest du jetzt neu starten?</string> + <string id="299">Die Änderungen benötigen einen Neustart von Ember.\n\nMöchtest du jetzt neu starten?</string> <string id="300">Ja</string> <string id="301">Land</string> <string id="302">Originaltitel</string> - <string id="303"></string> - <string id="304"></string> - <string id="305"></string> - <string id="306"></string> - <string id="307"></string> - <string id="308"></string> - <string id="309"></string> - <string id="310"></string> - <string id="311"></string> - <string id="312"></string> - <string id="313"></string> - <string id="314"></string> - <string id="315"></string> - <string id="316"></string> - <string id="317"></string> - <string id="318"></string> - <string id="319"></string> - <string id="320"></string> - <string id="321"></string> + <string id="303"/> + <string id="304"/> + <string id="305"/> + <string id="306"/> + <string id="307"/> + <string id="308"/> + <string id="309"/> + <string id="310"/> + <string id="311"/> + <string id="312"/> + <string id="313"/> + <string id="314"/> + <string id="315"/> + <string id="316"/> + <string id="317"/> + <string id="318"/> + <string id="319"/> + <string id="320"/> + <string id="321"/> <string id="322">Sehr groß</string> <string id="323">Groß</string> <string id="324">Mittel</string> <string id="325">Klein</string> - <string id="326"></string> - <string id="327"></string> - <string id="328"></string> - <string id="329"></string> - <string id="330"></string> - <string id="331"></string> - <string id="332"></string> - <string id="333"></string> - <string id="334"></string> - <string id="335"></string> - <string id="336"></string> - <string id="337"></string> - <string id="338"></string> - <string id="339"></string> - <string id="340"></string> - <string id="341"></string> - <string id="342"></string> - <string id="343"></string> - <string id="344"></string> - <string id="345"></string> - <string id="346"></string> - <string id="347"></string> - <string id="348"></string> - <string id="349"></string> - <string id="350">DVD</string> + <string id="326"/> + <string id="327"/> + <string id="328"/> + <string id="329"/> + <string id="330"/> + <string id="331"/> + <string id="332"/> + <string id="333"/> + <string id="334"/> + <string id="335"/> + <string id="336"/> + <string id="337"/> + <string id="338"/> + <string id="339"/> + <string id="340"/> + <string id="341"/> + <string id="342"/> + <string id="343"/> + <string id="344"/> + <string id="345"/> + <string id="346"/> + <string id="347"/> + <string id="348"/> + <string id="349"/> + <string id="350">DVD</string> <string id="351">Ungültig</string> - <string id="352"></string> - <string id="353"></string> - <string id="354"></string> + <string id="352"/> + <string id="353"/> + <string id="354"/> <string id="355">Existiert</string> - <string id="356"></string> - <string id="357"></string> - <string id="358"></string> - <string id="359"></string> - <string id="360"></string> + <string id="356"/> + <string id="357"/> + <string id="358"/> + <string id="359"/> + <string id="360"/> <string id="361">Fertiggestellt</string> <string id="362">Alles fertiggestellt</string> - <string id="363"></string> - <string id="364"></string> + <string id="363"/> + <string id="364"/> <string id="365">Sets Manager</string> <string id="366">Sets</string> <string id="367">Filme im Set</string> @@ -371,23 +370,23 @@ <string id="369">Lade Filme und Sets...</string> <string id="370">Breche laden ab...</string> <string id="371">Filme zu Filmboxen hinzufügen.</string> - <string id="372"></string> + <string id="372"/> <string id="373">Herunterladen</string> - <string id="374"></string> - <string id="375"></string> - <string id="376"></string> - <string id="377"></string> - <string id="378"></string> - <string id="379"></string> - <string id="380"></string> - <string id="381"></string> - <string id="382"></string> - <string id="383"></string> + <string id="374"/> + <string id="375"/> + <string id="376"/> + <string id="377"/> + <string id="378"/> + <string id="379"/> + <string id="380"/> + <string id="381"/> + <string id="382"/> + <string id="383"/> <string id="384">Benutzerdefinierter Scraper</string> <string id="385">Benutzerdefinierten Scraper erstellen</string> <string id="386">Auswahl Filter</string> <string id="387">Update Modus</string> - <string id="388">Modi</string> + <string id="388">Modifikator</string> <string id="389">Starten</string> <string id="390">Optionen</string> <string id="391">Sonstige Crew</string> @@ -395,7 +394,7 @@ <string id="393">Produzenten</string> <string id="394">Autoren</string> <string id="395">Studio</string> - <string id="396">Länge</string> + <string id="396">Laufzeit</string> <string id="397">Tagline</string> <string id="398">Schauspieler</string> <string id="399">Anz. Stimmen</string> @@ -406,7 +405,7 @@ <string id="404">Weiter ></string> <string id="405">Willkommen beim EMM</string> <string id="406">TIPP: Auswählen, die den Text <movie> beinhalten, werden den Filmdatei-Namen verwenden.</string> - <string id="407">Hinzufügen</string> + <string id="407">Quelle hinzufügen</string> <string id="408">Das war nicht schwer, oder? Wie bereits erwähnt können die Einstellungen jederzeit im Einstellungs-Fenster verändert werden.</string> <string id="409">Das war alles!{0}Ember Media Manager ist jetzt bereit!</string> <string id="410">Pfad</string> @@ -414,21 +413,21 @@ <string id="412">Verzeichnisnamen benutzen</string> <string id="413">Einzelner Film</string> <string id="414">Zuerst solltest du Ember Media Manager mitteilen wo sich deine Filme befinden. Erzeuge eine neue Quelle und trage dort das Quellverzeichnis ein. Du kannst soviele Quellen anlegen wie du möchtest.</string> - <string id="415">Du startest entweder Ember zum ersten mal oder hast ein Upgrade auf eine neue Version durchgeführt. Da sind ein paar Dinge die Ember noch von dir wissen muss. {0}Dieser Assistent wird dich durch die Einstellungen begleiten um sich deinen Wünschen und Gegebenheiten anzupassen.{0}{0}In diesem Assistent werden nur die wichtigsten Einstellungen angeboten, du kannst diese und andere Einstellungen jederzeit im "Einstellungen..." Dialog unter dem "Bearbeiten" Menüpunkt verändern.</string> + <string id="415">Du startest entweder Ember zum ersten mal oder hast ein Upgrade auf eine neue Version durchgeführt. Da sind ein paar Dinge die Ember noch von dir wissen muss. Dieser Assistent wird dich durch die Einstellungen begleiten um sich deinen Wünschen und Gegebenheiten anzupassen.{0}{0}In diesem Assistent werden nur die wichtigsten Einstellungen angeboten, du kannst diese und andere Einstellungen jederzeit im "Einstellungen..." Dialog unter dem "Bearbeiten" Menüpunkt verändern.</string> <string id="416">Jetzt, wo Ember Media Manager weiß, WO er nach den Dateien schauen muss, brauchen wir ihm nur noch sagen, WONACH er suchen soll. Bitte wähle eine Kombination aus Dateitypen nach denen Ember Media Manager suchen und in welchen er speichern soll. Du kannst in jeder Sektion natürlich mehrere auswählen.</string> <string id="417">Einige Optionen, die dich noch interessieren könnten:{0}{0}Benutzerdefinierte Filter - Wenn deine Dateinamen oder Verzeichnisse Tags wie "DVDRip", BluRay", "x264", etc. beinhalten, du diese aber beim lesen herausfiltern möchtest, kannst du Benutzerdefinierte Reguläre-Ausdrücke (RegExp) verwenden.{0}{0}Bilder - Diese Sektion erlaubt die Wahl, welche Webseiten zum "Scrapen" verwendet werden, sowie was deine bevorzugte Bildgröße ist.{0}{0}Sperren - In dieser Sektion wird es dir ermöglicht bestimmte Informationen zu sperren, was bedeutet, dass diese Informationen - selbst beim Re-scrapen - nicht automatisch verändert werden. Dies ist besonders hilfreich, wenn du den Titel, Inhalt oder die Kurzbeschreibung manuell editiert hast.</string> <string id="418">Bist du sicher, dass du die gewählte Quelle entfernen möchtest? Dies wird alle Filme der gewählten Quelle aus der Datenbank entfernen</string> <string id="419">Es sind keine Metadaten für diesen Film verfügbar.</string> <string id="420">Einstellungen</string> <string id="421">Kommunikation</string> - <string id="422"></string> - <string id="423"></string> - <string id="424"></string> + <string id="422"/> + <string id="423"/> + <string id="424"/> <string id="425">Benutzer:</string> <string id="426">Passwort:</string> - <string id="427"></string> - <string id="428"></string> - <string id="429">Gemischtes</string> + <string id="427"/> + <string id="428"/> + <string id="429">Diverses</string> <string id="430">Sprache:</string> <string id="431">Panel Animation einschalten</string> <string id="432">Automatisch nach Updates suchen</string> @@ -444,12 +443,12 @@ <string id="442">WARNUNG: Der Experten-Modus könnte auch erwünschte Dateien löschen!</string> <string id="443">Erweiterungen laden...</string> <string id="444">Datei</string> - <string id="445"></string> - <string id="446"></string> + <string id="445"/> + <string id="446"/> <string id="447">Lade Dateien herunter...</string> - <string id="448"></string> - <string id="449"></string> - <string id="450"></string> + <string id="448"/> + <string id="449"/> + <string id="450"/> <string id="451">Pfad-/Dateiname Filter</string> <string id="452">Jedes Wort groß schreiben</string> <string id="453">Immer Genre-Text anzeigen</string> @@ -473,20 +472,20 @@ <string id="471">Datei Benennung</string> <string id="472">Benutze <movie> nur für Verz. mit mehreren Filmen</string> <string id="473">YAMJ Kompatible VIDEO_TS Datei Sortierung/Benennung</string> - <string id="474"></string> - <string id="475"></string> - <string id="476"></string> - <string id="477"></string> + <string id="474">Frodo Kompatible VIDEO_TS Datei Sortierung/Benennung</string> + <string id="475"/> + <string id="476"/> + <string id="477"/> <string id="478">Poster Qualität:</string> <string id="479">Max Breite:</string> <string id="480">Max Höhe:</string> <string id="481">Größe automatisch verändern:</string> - <string id="482">Bevorzugte Größe</string> + <string id="482">Bevorzugte Größe:</string> <string id="483">Existierende überschreiben</string> <string id="484">Lade Einstellungen...</string> - <string id="485"></string> - <string id="486"></string> - <string id="487"></string> + <string id="485"/> + <string id="486"/> + <string id="487"/> <string id="488">Globales sperren</string> <string id="489">Trailer sperren</string> <string id="490">Genre sperren</string> @@ -494,8 +493,8 @@ <string id="492">Bewertung sperren</string> <string id="493">Tagline sperren</string> <string id="494">Titel sperren</string> - <string id="495">Kurzbeschr. sperren</string> - <string id="496">Beschreibung sperren</string> + <string id="495">Kurzbeschreibung sperren</string> + <string id="496">Handlung sperren</string> <string id="497">Bilder</string> <string id="498">URLs nicht in Nfo speichern</string> <string id="499">Beim Einzelscrapen holen</string> @@ -508,33 +507,33 @@ <string id="506">Anzahl:</string> <string id="507">Beim scrapen extrahieren</string> <string id="508">Benutze Kurzbeschr. falls Beschr. nicht vorhanden</string> - <string id="509"></string> + <string id="509"/> <string id="510">Nur Schauspieler mit Bild berücksichtigen</string> <string id="511">FSK berücksichtigen</string> <string id="512">Alle Schauspieler (Cast)</string> <string id="513">Alle Mitarbeiter (Crew)</string> <string id="514">Altersfreigaben Region:</string> - <string id="515">Lautzeit Format</string> + <string id="515">Laufzeit Format</string> <string id="516">Benutze Spielzeit als Länge</string> <string id="517">Metadaten scannen</string> <string id="518">Verändert Embers Aussehen und Verhalten</string> - <string id="519">Entfernen</string> + <string id="519">Markierte entfernen</string> <string id="520">Backdrops Verzeichnis</string> <string id="521">Speichere automatisch Fanart im Backdrops-Verz.</string> <string id="522">Alle vorhandenen überschreiben</string> - <string id="523"></string> + <string id="523"/> <string id="524">Nur URLs holen beim Scrapen</string> <string id="525">Hole beim einzelnen Scrapen</string> - <string id="526"></string> + <string id="526"/> <string id="527">Hole beim automatischen Scrapen</string> - <string id="528"></string> + <string id="528"/> <string id="529">Trailer Supp. aktivieren</string> <string id="530">Erweiter. nicht stapeln</string> - <string id="531"></string> - <string id="532"></string> - <string id="533"></string> + <string id="531"/> + <string id="532"/> + <string id="533"/> <string id="534">Gültige Video Erweiterungen</string> - <string id="535">Editieren</string> + <string id="535">Quelle editieren</string> <string id="536">Diverse Optionen</string> <string id="537">Erkenne VIDEO_TS Verzeichnisse</string> <string id="538">auch bei gestapelten Dateien</string> @@ -544,8 +543,8 @@ <string id="542">Rahmen</string> <string id="543">Breite:</string> <string id="544">Höhe:</string> - <string id="545">Benutzerdef. Größe</string> - <string id="546">Native Größe</string> + <string id="545">Benutze benutzerdef. Größe</string> + <string id="546">Benutze native Größe</string> <string id="547">Caching</string> <string id="548">Mehrfach Scrapen</string> <string id="549">Neue TV-Serien "fest" markieren</string> @@ -553,21 +552,21 @@ <string id="551">Image Cache benutzen</string> <string id="552">Wähle das Verzeichnis für die Backdrops</string> <string id="553">Datei Einstellungen</string> - <string id="554"></string> + <string id="554"/> <string id="555">Dateien und Quellen</string> <string id="556">Scraper - Daten</string> - <string id="557">Scraper - Bilder</string> + <string id="557">Scraper - Bilder & Trailer</string> <string id="558">Banner</string> - <string id="559"></string> - <string id="560"></string> - <string id="561"></string> - <string id="562"></string> - <string id="563"></string> - <string id="564"></string> - <string id="565"></string> - <string id="566"></string> - <string id="567"></string> - <string id="568">Schauspl.Cache aktivieren:</string> + <string id="559"/> + <string id="560"/> + <string id="561"/> + <string id="562"/> + <string id="563"/> + <string id="564"/> + <string id="565"/> + <string id="566"/> + <string id="567"/> + <string id="568">Generiere Schauspl. Cache:</string> <string id="569">Alle</string> <string id="570">[keine]</string> <string id="571">[Deaktiviert]</string> @@ -578,7 +577,7 @@ <string id="576">Überprüfe Filmdetails:</string> <string id="577">Scrape Felder - Global</string> <string id="578">Limit:</string> - <string id="579">Tags:</string> + <string id="579">Datei Quelle</string> <string id="580">Zeige nur Filme der gewählten Quelle.</string> <string id="581">Fehlende Einträge Filter</string> <string id="582">Prüfe Poster</string> @@ -587,12 +586,12 @@ <string id="585">Prüfe Trailer</string> <string id="586">Prüfe Untertit.</string> <string id="587">Prüfe Extrathumbs</string> - <string id="588"></string> - <string id="589"></string> - <string id="590"></string> + <string id="588"/> + <string id="589"/> + <string id="590"/> <string id="591">Top 250</string> - <string id="592"></string> - <string id="593"></string> + <string id="592"/> + <string id="593"/> <string id="594">Metadaten Editor</string> <string id="595">Video Streams</string> <string id="596">Audio Streams</string> @@ -607,8 +606,8 @@ <string id="605">Scan Type</string> <string id="606">Breite</string> <string id="607">Höhe</string> - <string id="608">Verhä.</string> - <string id="609">Länge</string> + <string id="608">Seitenverhältnis</string> + <string id="609">Dauer</string> <string id="610">Sprache</string> <string id="611">Kanäle</string> <string id="612">Bevorzugt</string> @@ -618,38 +617,38 @@ <string id="616">Progressive</string> <string id="617">Video Stream</string> <string id="618">Audio Stream</string> - <string id="619">Untert. Stream</string> + <string id="619">Untertitel Stream</string> <string id="620">Movie Theme</string> <string id="621">Neue Episoden "fest" markieren</string> - <string id="622">Medien Scrapen (Fragen):</string> - <string id="623">Medien Scrapen (Automatisch):</string> + <string id="622">Medien Scrapen (Aktueller Filter - Fragen)</string> + <string id="623">Medien Scrapen (Aktueller Filter - Automatisch)</string> <string id="624">Aktueller Filter</string> <string id="625">Standard nach Dateityp</string> <string id="626">Dateityp</string> <string id="627">Gewählte Einträge: {0}</string> <string id="628">IFO Parsing einschalten</string> <string id="629">Themes</string> - <string id="630"></string> - <string id="631"></string> - <string id="632"></string> - <string id="633"></string> - <string id="634"></string> + <string id="630"/> + <string id="631"/> + <string id="632"/> + <string id="633"/> + <string id="634"/> <string id="635">Du hast {0} Verzeichnisse zum öffnen gewählt. Bist du Sicher?</string> - <string id="636"></string> - <string id="637"></string> - <string id="638"></string> - <string id="639"></string> - <string id="640"></string> - <string id="641"></string> - <string id="642">Sort. Titel</string> + <string id="636"/> + <string id="637"/> + <string id="638"/> + <string id="639"/> + <string id="640"/> + <string id="641"/> + <string id="642">Sortier Titel</string> <string id="643">YAMJ Kompatibles speichern</string> <string id="644">Säubere Datenbank...</string> <string id="645">Premiere: {0}</string> - <string id="646">Aus der Datenbank entfernen</string> + <string id="646">Aus Datenbank entfernen</string> <string id="647">Ausgestrahlt: {0}</string> <string id="648">Staffel: {0}, Episode: {1}</string> <string id="649">Alle aktualisieren</string> - <string id="650">Staffel</string> + <string id="650">Staffel </string> <string id="651">Keine Informationen über diese Serie vorhanden</string> <string id="652">Keine Informationen über diese Episode vorhanden</string> <string id="653">TV Serien</string> @@ -663,11 +662,11 @@ <string id="661">Episode Laden</string> <string id="662">Als Poster speichern</string> <string id="663">Serie Editieren</string> - <string id="664">Die Details der gewählten Serie editieren.</string> + <string id="664">TV Serien Theme</string> <string id="665">Premiere:</string> <string id="666">TV Serien Theme</string> <string id="667">Episode Theme</string> - <string id="668">Datenbank nach Update säubern</string> + <string id="668">Datenbank nach Bibliotheksaktualisierung säubern</string> <string id="669">Letzte Scanzeit beim Update ignorieren</string> <string id="670">Serien Verzeichnis/Datei Filter</string> <string id="671">Episoden Verzeichnis/Datei Filter</string> @@ -688,8 +687,8 @@ <string id="686">Staffel Fanart</string> <string id="687">Episoden Poster</string> <string id="688">Episoden Fanart</string> - <string id="689"> [FEHLT]</string> - <string id="690">Editieren</string> + <string id="689">[FEHLT]</string> + <string id="690">Edit Regex</string> <string id="691">Serien Match Regex</string> <string id="692">Staffel Match Regex:</string> <string id="693">Episode Match Regex:</string> @@ -701,12 +700,12 @@ <string id="699">Regex</string> <string id="700">Serie</string> <string id="701">Episode</string> - <string id="702"></string> - <string id="703"></string> - <string id="704"></string> + <string id="702"/> + <string id="703"/> + <string id="704"/> <string id="705">Serien Quelle</string> <string id="706">Wähle das Serien Verzeichnis</string> - <string id="707">IMDB Bewertung</string> + <string id="707"/> <string id="708">Spende</string> <string id="709">Datenbank säubern</string> <string id="710">Nur Titel der Sprache:</string> @@ -762,7 +761,7 @@ <string id="760">Lade Serien Zip:</string> <string id="761">Prüfe Serie:</string> <string id="762">Prüfe Episode:</string> - <string id="763">Bist du sicher, dass du die gewählte Serie und alle enthaltenen Episoden löschen möchtest?</string> + <string id="763">Bist du sicher, dass du die gewählte Serie(n) und alle enthaltenen Episoden löschen möchtest?</string> <string id="764">Bist du sicher, dass du die gewählte Episode löschen möchtest?</string> <string id="765">Bist du sicher, dass du die gewählte Staffel und alle enthaltenen Episoden löschen möchtest?</string> <string id="766">Serie (Re)Scrapen</string> @@ -773,37 +772,37 @@ <string id="771">Staffel löschen</string> <string id="772">Episode wechseln</string> <string id="773">Episode löschen</string> - <string id="774">eingeschaltet</string> - <string id="775">ausgeschaltet</string> - <string id="776"></string> + <string id="774">Aktiviert</string> + <string id="775">Deaktiviert</string> + <string id="776"/> <string id="777">Autor</string> - <string id="778"></string> - <string id="779"></string> - <string id="780"></string> - <string id="781"></string> - <string id="782"></string> + <string id="778"/> + <string id="779"/> + <string id="780"/> + <string id="781"/> + <string id="782"/> <string id="783">Inhalt:</string> - <string id="784"></string> - <string id="785"></string> + <string id="784"/> + <string id="785"/> <string id="786">Alle-Staffeln Poster</string> - <string id="787"></string> - <string id="788"></string> - <string id="789"></string> - <string id="790"></string> - <string id="791"></string> + <string id="787"/> + <string id="788"/> + <string id="789"/> + <string id="790"/> + <string id="791"/> <string id="792">Spende</string> <string id="793">&Versionen...</string> <string id="794">&Modul Einstellungen...</string> <string id="795">Oberfläche</string> <string id="796">In der Reihenfolge des letzten Schreibvorgangs scannen</string> <string id="797">Standard Episoden Sortierung:</string> - <string id="798"></string> + <string id="798"/> <string id="799">Scraper - Trailer</string> <string id="800">Bevorzugte Qualität:</string> <string id="801">TVDB Mirror</string> <string id="802">Module</string> <string id="803">Als nächstes verrate Ember wo sich deine TV-Serien befinden. Du kannst so viele Quellen eintragen wie du möchtest.</string> - <string id="804">Und zu guter Letzt musst du Ember noch sagen, nach welchen Serien Dateien Ember suchen muss. Wähle einfach eine Kombination aus Dateien die Ember laden und speichern soll. Du kannst auch mehrere wählen!</string> + <string id="804">Und zu guter Letzt musst du Ember noch sagen, nach welchen Serien Dateien Ember suchen muss. Wähle einfach eine Kombination aus Dateien die Ember laden und speichern soll. Du kannst auch mehrere wählen!</string> <string id="805">Bei PasteBin.com hochladen</string> <string id="806">In die Zwischenablage kopieren</string> <string id="807">Ein Hochladen zu Pastebin.com ist ein Fehler aufgetreten</string> @@ -813,44 +812,73 @@ <string id="811">PasteBin URL:</string> <string id="812">Bisheriger Titel: {0} | Neuer Titel: {1}</string> <string id="813">Film Scraped</string> - <string id="814">Episode hinzugefügt: </string> - <string id="815">Film hinzugefügt: </string> + <string id="814">Neue Episode hinzugefügt</string> + <string id="815">Neuen Film hinzugefügt</string> <string id="816">Ein Fehler ist aufgetreten</string> <string id="817">Neuen Film hinzugefügt</string> <string id="818">Neue Episode hinzugefügt</string> <string id="819">TV RegEx Profile</string> <string id="820">RegEx Profile</string> <string id="821">Beschreibung</string> - <string id="822">Miscellaneous</string> + <string id="822">Diverses</string> <string id="823">Audio & Video Codec Mapping</string> <string id="824">Video Source:</string> <string id="825">Downloads:</string> - <string id="826"></string> - <string id="827"></string> - <string id="828">Aktiviere Schauspl.Cache</string> + <string id="826"/> + <string id="827"/> + <string id="828">Aktiviere Actor Thumbs</string> <string id="829">Überwachen des ""Dump"" Ordners</string> <string id="830">Details für die gewählte Staffel editieren.</string> - <string id="831"></string> + <string id="831"/> <string id="832">Alle-Staffeln Poster zeigen</string> <string id="833">Dies sind Scraper spezifische Einstellungen.\nDu solltest auch die Globalen Einstellungen prüfen.</string> <string id="834">* Im Staffel Verzeichnis</string> <string id="835">Nur Wert speichern</string> - <string id="836"></string> - <string id="837">Scraper - Bilder</string> + <string id="836"/> + <string id="837">Fragen On Click Scrape</string> <string id="838">Banner</string> <string id="839">Absolut</string> - <string id="840">Bist du sicher, dass du die Serien Filter zurücksetzen möchtest?</string> - <string id="841">Bist du sicher, dass du die Episoden Filter zurücksetzen möchtest?</string> - <string id="842">Bist du sicher, dass du die Film Filter zurücksetzen möchtest?</string> - <string id="843">Bist du sicher, dass du die gültigen Video Extensions zurücksetzen möchtest?</string> - <string id="844">Bist du sicher, dass du die Serien RegEx zurücksetzen möchtest?</string> - <string id="845">>> Kein Eintrag gewählt <<</string> - <string id="846"></string> - <string id="847"></string> - <string id="848"></string> - <string id="849">Einschalten Click Scrape</string> - <string id="850">Nach Updates Su&chen</string> - <string id="851">Kein Update vorhanden</string> - <string id="852">Fragen On Click Scrape</string> + <string id="840">Sind sie sich sicher das sie die Show-Filter auf die Standardwerte zurücksetzen wollen ?</string> + <string id="841">Sind sie sich sicher das sie die Folgen(Episoden)-Filter auf die Standardwerte zurücksetzen wollen ?</string> + <string id="842">Sind sie sich sicher das sie die Filme-Filter auf die Standardwerte zurücksetzen wollen ?</string> + <string id="843">Sind sie sich sicher das sie die Liste der zulässigen Video- Dateierweiterungen auf die Standardwerte zurücksetzen wollen ?</string> + <string id="844">Sind sie sich sicher das sie die Liste der regulären Ausdrücke für Shows auf die Standardwerte zurücksetzen wollen ?</string> + <string id="845">>> Kein Eintrag ausgewählt <<</string> + <string id="846"/> + <string id="847"/> + <string id="848"/> + <string id="849">Click-Scrape aktivieren</string> + <string id="850">&Überprüfe auf Updates...</string> + <string id="851">Zur Zeit keine Updates verfügbar</string> + <string id="852">Fragen bei Click-Scrape</string> + <string id="853">Scrape Medien (Alle Filme - Überspringen):</string> + <string id="854">Grundeinstellung</string> + <string id="855">Erstellen von Standard-Optionen...</string> + <string id="856">Lade Module...</string> + <string id="857">Erstelle Grafische Benutzeroberfläche...</string> + <string id="858">Lade Datenbank...</string> + <string id="859">Laufendes Modul...</string> + <string id="860">Medien werden geladen...</string> + <string id="861">Command Line Scraping...</string> + <string id="862">Lade Übersetzungen...</string> + <string id="863">Positionieren von Steuerelementen...</string> + <string id="864">Stelle Menüs ein...</string> + <string id="865">Version {0}.{1}.{2}.{3}</string> + <string id="866">Metadaten</string> + <string id="867">XBMC Frodo</string> + <string id="868">Top 250</string> + <string id="869">EmberMM.com &Wiki...</string> + <string id="870"/> + <string id="871"/> + <string id="872"/> + <string id="873"/> + <string id="874"/> + <string id="875"/> + <string id="876"/> + <string id="877"/> + <string id="878"/> + <string id="879">Sprache sperren (Video)</string> + <string id="880">Sprache sperren (Audio)</string> + <string id="881">Altersfreigabe sperren</string> + <string id="882">Benutze MPAA wenn keine FSK Freigabe vorliegt</string> </strings> -<!-- Edit F089 Rev2292 --> diff --git a/Ember Media Manager/Langs/Norwegian_(no_NO)-Help.xml b/Ember Media Manager/Langs/Norwegian_(no_NO)-Help.xml new file mode 100644 index 0000000..1e0a8ce --- /dev/null +++ b/Ember Media Manager/Langs/Norwegian_(no_NO)-Help.xml @@ -0,0 +1,367 @@ +<strings> + <string control="Core_chkShowGenresText">Hvis påslått så vil bildeteksten alltid bli vist. Hvis avslått, så vil teksten kun vises når musepekeren er over sjangerbildet.</string> + <string control="Core_chkSourceFromFolder">Hvis påslått, så vil EMM alltid sjekke mappenavnet for kildetypen. Hvis avslått, så vil EMM kun sjekke filnavnet.</string> + <string control="Core_chkNoDisplayFanart">Hvis påslått, så vil fankunst ikke vises i hovedvinduet. Dette er bra for å øke hastigheten av grensesnittet på tregere maskiner.</string> + <string control="Core_chkNoDisplayPoster">Hvis påslått, så vil plakater ikke bli vist i hovedvinduet. Dette er bra for å øke hastigheten av grensesnittet på tregere maskiner.</string> + <string control="Core_chkShowDims">Hvis påslått, så vil dimensjonene til bilder (plakater og fankunst) bli vist over bildene.</string> + <string control="Core_chkUpdates">Hvis påslåt, så vil EMM se etter ny versjon når EMM starter.</string> + <string control="Core_chkOverwriteNfo">Hvis påslått, så vil Nfo-filer bli overskrevet når detaljer lagres. Hvis avslått, så vil de bli omdøpt til *.info.</string> + <string control="Core_chkLogErrors">Hvis påslått, så vil alle feilmeldinger bli lagret i <EMM installasjonmappe>\Log\errlog.txt.</string> + <string control="Core_cbEpTheme">Velg temaet for episodeoppsett.</string> + <string control="Core_cbTVShowTheme">Velg temaet for TVserie- og sesongoppsett.</string> + <string control="Core_cbMovieTheme">Velg temaet for filmoppsett.</string> + <string control="Core_btnDLTrans">Last ned programutvidelser for EMM, inkludert moduler, temaer, oversettelser til andre språk, og eksporttemplater.</string> + <string control="Core_cbIntLang">Velg språket som brukes i EMMs grensesnitt (krever omstart).</string> + <string control="Core_chkCleanFolderJPG">Rens all "folder.jpg"-filer.</string> + <string control="Core_chkCleanExtrathumbs">Rens alle "extrathumbs"-mapper.</string> + <string control="Core_chkCleanMovieTBN">Rens alle "movie.tbn"-filer.</string> + <string control="Core_chkCleanMovieNameJPG">Rens alle "<film>.jpg"-filer.</string> + <string control="Core_chkCleanMovieTBNb">Rens alle "<film>.tbn-filer.</string> + <string control="Core_chkCleanMovieJPG">Rens alle "movie.jpg"-filer.</string> + <string control="Core_chkCleanFanartJPG">Rens alle "fanart.jpg"-filer.</string> + <string control="Core_chkCleanPosterJPG">Rens alle "poster.jpg"-filer</string> + <string control="Core_chkCleanMovieFanartJPG">Rens alle "<film>-fanart.jpg"-filer</string> + <string control="Core_chkCleanPosterTBN">Rens alle "poster.tbn"-filer.</string> + <string control="Core_chkCleanMovieNFO">Rens alle "movie.nfo"-filer.</string> + <string control="Core_chkCleanDotFanartJPG">Rens alle "<film>.fanart.jpg"-filer.</string> + <string control="Core_chkCleanMovieNFOb">Rens alle "<movie>.nfo"-filer.</string> + <string control="Core_chkWhitelistVideo">Automatisk tillat alle filer som har en filtype i "Gyldig filtype"-listen.</string> + <string control="Core_btnRemoveWhitelist">Fjern valgte filtype fra listen.</string> + <string control="Core_btnAddWhitelist">Legg til innførte filtype til listen.</string> + <string control="Core_txtWhitelist">Skriv inn en filtype til å legge til i listen.</string> + <string control="Core_lstWhitelist">Denne listen inneholder alle nåværende filtyper som vil bli hoppet over når databasen renses.</string> + <string control="Core_chkYAMJCompatibleSets">Hvis påslåt, så vil EMM lagre all samling-informasjon i et format som er YAMJ-kompatibelt. Hvis avslått, så vil informasjonen lagres i XBMC-format.</string> + <string control="Core_chkAskCheckboxScrape">Hvis påslått, så vil en manuell detaljhenter bli brukt ved markering i filmlisten. Hvis avslått, så vil en automatisk detaljhenter bli brukt.</string> + <string control="Core_chkMarkNew">Hvis påslått, så vil nye filmer bli "markert" i filmlisten. Hvis avslått, så vil nye filmer bli vist med tykk, grønn farge til filmen er oppdatert eller til neste EMM-sesjon.</string> + <string control="Core_lbGenre">Velg språk du vil at EMM skal bruke.</string> + <string control="Core_txtCheckTitleTol">Velg toleransenivået du vil at EMM skal bruke når tittel skal matches. Høyere tall, jo snillere er EMM. 0 = avslått.</string> + <string control="Core_chkCheckTitles">Slå på denne for at EMM skal sjeffe forskjellen mellom filmnavn og filnavn. Dette er for at automatisk detaljhenting er for riktig film.</string> + <string control="Core_btnRemoveToken">Fjern valgt token fra listen.</string> + <string control="Core_btnAddToken">Legg til den innskrevne sorteringstoken i listen.</string> + <string control="Core_txtSortToken">Skriv inn en sorteringstoken til å legge til i listen.</string> + <string control="Core_lstSortTokens">Liste over alle nåværende sorteringstoken. (Hvis tittelen begynner med en sorteringstoken, så vil tokenen bli flyttet til slutten av tittelen. Eksempel: Sorteringstoken = "The", Title = "The Dark Knight", Resultat = "Dark Knight, The".)</string> + <string control="Core_chkDisplayYear">Hvis påslått, EMM vil vise filmens år i filmlisten.</string> + <string control="Core_chkMovieExtraCol">Gjem ekstrakunst-seksjonen fra filmlisten.</string> + <string control="Core_chkMovieSubCol">Gjem undertekstseksjonen fra filmlisten.</string> + <string control="Core_chkMovieTrailerCol">Gjem trailerseksjonen fra filmlisten.</string> + <string control="Core_chkMovieInfoCol">Gjem infoseksjonen fra filmlisten.</string> + <string control="Core_chkMovieFanartCol">Gjen fankunstseksjonen fra filmlisten.</string> + <string control="Core_chkMoviePosterCol">Gjem plakatseksjonen fra filmlisten.</string> + <string control="Core_chkMovieNameMultiOnly">Hvis påslått, så vil "<film>.ext" kun bli brukt i mapper som har flere filmer.</string> + <string control="Core_rbBracketTrailer">Lagre trailere som "<film>[trailer].ext".</string> + <string control="Core_rbDashTrailer">Lagre trailere som <movie>-trailer.ext".</string> + <string control="Core_chkVideoTSParent">Hvis påslått, så vil EMM lagre metadata i filmmappen (YAMJ). Hvis avslått, så vil EMM lagre metadata i VIDEO_TSmappen (XBMC). Dette angår også BDMVmapper.</string> + <string control="Core_chkMovieNameNFO">Lagre Nfofiler som "<film>.nfo".</string> + <string control="Core_chkMovieNFO">Lagre Nfofiler som "movie.nfo".</string> + <string control="Core_chkMovieNameDotFanartJPG">Lagre fankunst som "<film>.fanart.jpg".</string> + <string control="Core_chkMovieNameFanartJPG">Lagre fankunst som "<film>-fanart.jpg".</string> + <string control="Core_chkFanartJPG">Lagre fankunst som "fanart.jpg".</string> + <string control="Core_chkFolderJPG">Lagre plakater som "folder.jpg".</string> + <string control="Core_chkPosterJPG">Lagre plakater som "poster.jpg".</string> + <string control="Core_chkPosterTBN">Lagre plakater som "poster.tbn".</string> + <string control="Core_chkMovieNameJPG">Lagre plakater som "<film>.jpg".</string> + <string control="Core_chkMovieJPG">Lagre plakater som "movie.jpg".</string> + <string control="Core_chkMovieNameTBN">Lagre plakater som "<film>.tbn".</string> + <string control="Core_chkMovieTBN">Lagre plakater som "movie.tbn".</string> + <string control="Core_lvMovies">Liste over alle nåværende filmkilder (baner som vil ble skannet for filmfiler).</string> + <string control="Core_colID">Liste over alle nåværende filmkilder (baner som vil ble skannet for filmfiler).</string> + <string control="Core_colName">Liste over alle nåværende filmkilder (baner som vil ble skannet for filmfiler).</string> + <string control="Core_colPath">Liste over alle nåværende filmkilder (baner som vil ble skannet for filmfiler).</string> + <string control="Core_colRecur">Liste over alle nåværende filmkilder (baner som vil ble skannet for filmfiler).</string> + <string control="Core_colFolder">Liste over alle nåværende filmkilder (baner som vil ble skannet for filmfiler).</string> + <string control="Core_colSingle">Liste over alle nåværende filmkilder (baner som vil ble skannet for filmfiler).</string> + <string control="Core_btnMovieRem">Fjern valgte kilder fra kildelisten.</string> + <string control="Core_btnMovieAddFolder">Legg til en ny mappe til kildelisten</string> + <string control="Core_txtPosterWidth">Forandre størrelsen på plakater til den innførte bredden.</string> + <string control="Core_txtPosterHeight">Forandre størrelsen på plakater til den innførte høyden.</string> + <string control="Core_tbPosterQual">Justér kvaliteten til plakatfiler (0 = original kvalitet).</string> + <string control="Core_chkResizePoster">Forandre størrelsen på plakatfiler før lagring.</string> + <string control="Core_cbPosterSize">Velg den foretrukne plakatstørrelsen du vil EMM skal hente under automatisk detaljhenting. Hvis den ikke finnes, så vil den nærmeste størrelsen brukes.</string> + <string control="Core_chkOverwritePoster">Hvis påslått, så vil eksisterende plakatfiler bli overskrevet hvis nye plakater er valgt. Hvis avslått, plakater vil kun bli lagret hvis en ikke allerede finnes.</string> + <string control="Core_txtFanartWidth">Forandre størrelsen på fankunst til den innførte bredden.</string> + <string control="Core_txtFanartHeight">Forandre størrelsen på fankunst til den innførte høyden.</string> + <string control="Core_chkFanartOnly">Hvis påslått, så vil EMM hente fankunst kun med valgt størrelse (BEMERK: Hvis det ikke er fankunst med valgt størrelse tilgjengelig, så vil ingen fankunst bli hentet).</string> + <string control="Core_tbFanartQual">Justér kvaliteten til fankunstfiler (0 = original kvalitet).</string> + <string control="Core_chkResizeFanart">Forandre størrelsen på fankunstfiler før lagring.</string> + <string control="Core_cbFanartSize">Velg den foretrukne fankunststørrelsen du vil EMM skal hente under automatisk detaljhenting. Hvis den ikke finnes, så vil den nærmeste størrelsen brukes.</string> + <string control="Core_chkOverwriteFanart">Hvis påslått, så vil eksisterende fankunstfiler bli overskrevet hvis nye plakater er valgt. Hvis avslått, fankunst vil kun bli lagret hvis en ikke allerede finnes.</string> + <string control="Core_chkNoSaveImagesToNfo">Hvis påslått, så vil EMM ikke lagre URLer til plakater og fankunst i Nfo. (Anbefalt for YAMJ)</string> + <string control="Core_chkSingleScrapeImages">Velg bilder under detaljhenting av en enkelt film.</string> + <string control="Core_chkUseImgCacheUpdaters">Lagre bilder til bildemellomlager under detaljhenting for flere filmer.</string> + <string control="Core_chkPersistImgCache">Hvis påslått, så vil EMM ikke tømme mellomlageret.</string> + <string control="Core_chkUseImgCache">Slå på EMMs bildemellomlager.</string> + <string control="Core_chkUseETasFA">Hvis påslått og ingen fankunst er tilgjengelig for filmen, EMM vil bruke et bilde fra filmen som fankunst.</string> + <string control="Core_chkNoSpoilers">Hvis påslått, så vil ekstrakunst kun hentes fra den første halvdelen av filmen. Dette for å unngå spoilere.</string> + <string control="Core_txtAutoThumbs">Før inn antall ekstrakunstbilder vil skal automatisk lages.</string> + <string control="Core_chkAutoThumbs">Hvis påslått, så vil EMM automatisk hente det innførte tallet av ekstrakunst fra filmen.</string> + <string control="Core_txtProxyDomain">Før inn domenet til proxien din. (Valgfritt, ikke nødvendig for de fleste proxier)</string> + <string control="Core_txtProxyPassword">Før inn passordet til din proxy.</string> + <string control="Core_txtProxyUsername">Før inn brukernavnet til din proxy.</string> + <string control="Core_chkEnableCredentials">Slå på hvis din proxy krever innlogging.</string> + <string control="Core_txtProxyPort">Før inn porten til din proxy.</string> + <string control="Core_txtProxyURI">Før inn IP-adressen eller URL til din proxy.</string> + <string control="Core_chkEnableProxy">Hvis påslått, EMM vil bruke valgt proxy for all internettilgang.</string> + <string control="Core_btnDown">Flytt valgt filter opp i listen. (Filtre er brukt fra toppen og ned)</string> + <string control="Core_btnUp">Flytt valgt filter ned i listen. (Filtre er brukt fra toppen og ned)</string> + <string control="Core_chkProperCase">Bruk riktig forbokstav i filmtitler. (Eksempel: "the dark knight" blir "The Dark Knight")</string> + <string control="Core_btnRemoveFilter">Fjern valgt filter fra listen.</string> + <string control="Core_btnAddFilter">Legg til det innførte filteret til listen.</string> + <string control="Core_txtFilter">Før inn text eller Regex for å bruke det som Filter. Spesielle: "a[->]b" = erstatter alle a med b.</string> + <string control="Core_lstFilters">Liste over alle filtre som vil bli brukt under generering av filmtitler.</string> + <string control="Core_chkMissingExtra">Hvis påslått, EMM vil vise filmer med manglende ekstrakunst når du bruker Manglende Objekter-filter.</string> + <string control="Core_chkMissingSubs">Hvis påslått, EMM vil vise filmer med manglende undertekst når du bruker Manglende Objekter-filter.</string> + <string control="Core_chkMissingTrailer">Hvis påslått, EMM vil vise filmer med manglende trailer når du bruker Manglende Objekter-filter.</string> + <string control="Core_chkMissingNFO">Hvis påslått, EMM vil vise filmer med manglende Nfo-filer når du bruker Manglende Objekter-filter.</string> + <string control="Core_chkMissingFanart">Hvis påslått, EMM vil vise filmer med manglende fankunst når du bruker Manglende Objekter-filter.</string> + <string control="Core_chkMissingPoster">Hvis påslått, EMM vil vise filmer med manglende plakater når du bruker Manglende Objekter-filter.</string> + <string control="Core_chkAutoBD">Hvis påslått, EMM vil automatisk lagre ny fankunst i den innførte bakgrunnsmappen.</string> + <string control="Core_btnBrowse">Åpne en mappeutforsker for å velge en bakgrunnsmappe.</string> + <string control="Core_txtBDPath">Banen til bakgrunnsmappen.</string> + <string control="Core_btnRemoveNoStack">Fjern den valgte filtypen fra No Stack-listen.</string> + <string control="Core_btnAddNoStack">Legg til den innførte filtypen til No Stack-listen.</string> + <string control="Core_txtNoStack">Før inn en filtype for å legge til i No Stack-listen.</string> + <string control="Core_lstNoStack">Listen over filtyper EMM ikke vil stable inn i enkle filer når filmer legges til i biblioteket.</string> + <string control="Core_btnRemMovieExt">Fjern valgt filtypen fra Tillatte Videofiltyper-listen.</string> + <string control="Core_btnAddMovieExt">Legg til den innførte filtypen til Tillatte Videofiltyper-listen.</string> + <string control="Core_txtMovieExt">Før inn en filtype for å legge inn i Tillatte Videofiltyper-listen.</string> + <string control="Core_lstMovieExts">Liste over filtyper som EMM vil se etter i en bibliotekoppdatering.</string> + <string control="Core_btnEditSource">Endre valgt kilde.</string> + <string control="Core_chkScanOrderModify">Hvis påslått, EMM vil legge til nye filer etter deres siste modifiserte tidspunkt. Hvis avslått, så vil de ble lagt til alfabetisk.</string> + <string control="Core_chkSortBeforeScan">Hvis påslått, EMM vil sortere filer i toppmappen i kildene inn i egne mapper.</string> + <string control="Core_chkIgnoreLastScan">Hvis påslått, EMM vil skanne alle mapper/filer uansett om de var der forrige skan. Hvis avslått, så vil EMM skanne alle mapper/filer.</string> + <string control="Core_chkCleanDB">Hvis påslått, EMM vil rense databasen etter hver skanning. (Fjerne ting som ikke lenger eksisterer)</string> + <string control="Core_chkAutoDetectVTS">Hvis påslått, så vil EMM prøve å gjenkjenne VIDEO_TS-mapper, selv om de ikke heter VIDEO_TS. Hvis avslått, så vil kun mapper som heter VIDEO_TS bli gjenkjent som det. Dette gjelder også BDMV-mapper.</string> + <string control="Core_chkSkipStackedSizeCheck">Hvis påslått, EMM vil ikke hoppe over filer mindre enn den innførte "Hopp over mindre enn" størrelsen hvis de stablende elementer (som "CD1" eller "DVD2").</string> + <string control="Core_txtSkipLessThan">EMM vil bruke den innførte størrelsen for minimumstørrelse for alle filmfiler. Filer mindre enn dette vil bli hoppet over under bibliotekoppdateringer.</string> + <string control="Core_txtTVSkipLessThan">EMM vil bruke den innførte størrelsen for minimumstørrelse for alle episodefiler. Filer mindre enn dette vil bli hoppet over under bibliotekoppdateringer.</string> + <string control="Core_cbTrailerQuality">Velg den foretrukne kvaliteten til trailere.</string> + <string control="Core_chkDeleteAllTrailers">Hvis påslått, så vil EMM slette alle lagrede trailere for valgt film før den lagrer en ny.</string> + <string control="Core_chkOverwriteTrailer">Hvis påslått, så vil eksisterende trailere bli overskrevet når nye lagres. Hvis avslått, så vil nye trailere kun bli lagret hvis ingen eksisterer fra før.</string> + <string control="Core_chkNoDLTrailer">Hvis påslått, så vil trailere ikke bli lastet ned. Istedet vil URL til trailer bli lagret i Nfo.</string> + <string control="Core_chkSingleScrapeTrailer">Hvis påslått, trailere vil bli lastet ned under detaljhenting av én film.</string> + <string control="Core_chkUpdaterTrailer">Hvis påslått, så vil trailere bli lastet ned under "alle objekter"-detaljhentere.</string> + <string control="Core_chkDownloadTrailer">Slå på EMMs trailerfunksjon.</string> + <string control="Core_chkAutoETSize">Velg størrelsen på fankunst du vil lagre som ekstrakunst.</string> + <string control="Core_cbAutoETSize">Hvis påslått, så vil EMM automatisk laste ned all fankunst med valgt størrelse som ekstrakunst.</string> + <string control="Core_txtETWidth">Forandre bredden på ekstrakunst til denne bredden.</string> + <string control="Core_txtETHeight">Forandre høyden på ekstrakunst til denne høyden.</string> + <string control="Core_chkETPadding">Hvis påslått, så vil EMM legge til svarte områder dersom ekstrakunsten er mindre enn den valgte størrelsen.</string> + <string control="Core_rbETCustom">Forandre størrelsen på ekstrakunst til den valgte størrelsen, uansett originalstørrelse.</string> + <string control="Core_rbETNative">Lagre ekstrakunsten med samme størrelse som video.</string> + <string control="Core_lvTVSources">Liste over alle nåværende TVkilder. (Baner som skal skannes for TVserier)</string> + <string control="Core_ColumnHeader1">Liste over alle nåværende TVkilder. (Baner som skal skannes for TVserier)</string> + <string control="Core_ColumnHeader2">Liste over alle nåværende TVkilder. (Baner som skal skannes for TVserier)</string> + <string control="Core_ColumnHeader3">Liste over alle nåværende TVkilder. (Baner som skal skannes for TVserier)</string> + <string control="Core_chkTVScanOrderModify">Hvis påslått, EMM vil legge til nye filer etter deres siste modifiserte tidspunkt. Hvis avslått, så vil de ble lagt til alfabetisk.</string> + <string control="Core_chkTVIgnoreLastScan">Hvis påslått, EMM vil skanne alle mapper/filer uansett om de var der forrige skan. Hvis avslått, så vil EMM skanne alle mapper/filer.</string> + <string control="Core_chkTVCleanDB">Hvis påslått, så vil EMM rense TVseriedatabasen etter hvert gjennomskan. (Fjerne alle episoder som ikke lenger eksisterer)</string> + <string control="Core_btnAddTVSource">Legg til en ny mappe til kildelisten</string> + <string control="Core_btnEditTVSource">Endre valgt kilde.</string> + <string control="Core_btnRemTVSource">Fjern valgte kilder fra kildelisten.</string> + <string control="Core_chkSeasonAllJPG">Lagre alle-sesongerplakatfiler som "season-all.jpg".</string> + <string control="Core_chkSeasonAllTBN">Lagre alle-sesongerplakatfiler som "season-all.tbn".</string> + <string control="Core_chkEpisodeDotFanart">Lagre episodefankunst som "<episode>.fanart.jpg".</string> + <string control="Core_chkEpisodeDashFanart">Lagre episodefankunst som "<episode>-fanart.jpg".</string> + <string control="Core_chkEpisodeJPG">Lagre episodeplakat som "<episode>.jpg".</string> + <string control="Core_chkEpisodeTBN">Lagre episodeplakat som "<episode>.tbn".</string> + <string control="Core_chkSeasonDotFanart">Lagre sesong-fankunst som "<sesong>.fanart.jpg". (Kun i sesongmappen, hvis den eksisterer)</string> + <string control="Core_chkSeasonDashFanart">Lagre sesong-fankunst som "<sesong>-fanart.jpg". (Kun i sesongmappen, hvis den eksisterer)</string> + <string control="Core_chkSeasonFanartJPG">Lagre sesong-fankunst som "fanart.jpg". (Kun i sesongmappen, hvis den eksisterer)</string> + <string control="Core_chkSeasonFolderJPG">Lagre sesong-fankunst som "folder.jpg". (Kun i sesongmappen, hvis den eksisterer)</string> + <string control="Core_chkSeasonNameJPG">Lagre sesong-plakat som "<sesong>.jpg". (Kun i sesongmappen, hvis den eksisterer)</string> + <string control="Core_chkSeasonNameTBN">Lagre sesong-plakat som "<sesong>.tbn". (Kun i sesongmappen, hvis den eksisterer)</string> + <string control="Core_chkSeasonPosterJPG">Lagre sesong-fankunst som "poster.jpg". (Kun i sesongmappen, hvis den eksisterer)</string> + <string control="Core_chkSeasonPosterTBN">Lagre sesong-fankunst som "sesong.tbn". (Kun i sesongmappen, hvis den eksisterer)</string> + <string control="Core_chkSeasonXTBN">Lagre sesongplakat som "seasonX.tbn". (Eksempel: season2.tbn)</string> + <string control="Core_chkSeasonXXTBN">Lagre sesongplakat som "seasonXX.tbn". (Eksempel: season02.tbn)</string> + <string control="Core_chkShowDotFanart">Lagre seriefankunst som "<serie>.fanart.jpg".</string> + <string control="Core_chkShowDashFanart">Lagre seriefankunst som "<serie>-fanart.jpg".</string> + <string control="Core_chkShowFanartJPG">Lagre seriefankunst som "fanart.jpg".</string> + <string control="Core_chkShowJPG">Lagre serieplakat som "<serie>.jpg".</string> + <string control="Core_chkShowTBN">Lagre serieplakat som "<serie>.tbn".</string> + <string control="Core_chkShowPosterJPG">Lagre serieplakat som "poster.jpg".</string> + <string control="Core_chkShowPosterTBN">Lagre serieplakat som "poster.tbn".</string> + <string control="Core_chkShowFolderJPG">"Lagre serieplakat som "folder.jpg".</string> + <string control="Core_btnAddShowRegex">Legg til den innførte Regex til TVserie-Regexlisten.</string> + <string control="Core_txtSeasonRegex">Legg til Regex til å finne sesongtall.</string> + <string control="Core_cboSeasonRetrieve">Velg hvis du vil at Regex skal sjekke mappenavn eller filnavn for sesongtall.</string> + <string control="Core_txtEpRegex">Legg til Regex til å finne episodetall.</string> + <string control="Core_cboEpRetrieve">Velg hvis du vil at Regex skal sjekke mappenavn eller filnavn for episodetall.</string> + <string control="Core_btnEditShowRegex">Endre valgt TVserie-Regex.</string> + <string control="Core_btnRemoveShowRegex">Fjern valgte TVserie-Regex fra listen.</string> + <string control="Core_lvShowRegex">Liste over nåværende TVserie-Regex.</string> + <string control="Core_colRegID">Liste over nåværende TVserie-Regex.</string> + <string control="Core_colSeason">Liste over nåværende TVserie-Regex.</string> + <string control="Core_colSeasonApply">Liste over nåværende TVserie-Regex.</string> + <string control="Core_colEpisode">Liste over nåværende TVserie-Regex.</string> + <string control="Core_colEpApply">Liste over nåværende TVserie-Regex.</string> + <string control="Core_chkDisplayMissingEpisodes">Hvis påslått, så vil episoder du mangler bli vist i listen, men påført en lys grå farge.</string> + <string control="Core_chkEpisodeNfoCol">Gjem infoseksjonen fra episodelisten.</string> + <string control="Core_chkEpisodeFanartCol">Gjem fankunstseksjonen fra episodelisten.</string> + <string control="Core_chkEpisodePosterCol">Gjem plakatseksjonen fra episodelisten.</string> + <string control="Core_chkSeasonFanartCol">Gjem fankunstseksjonen fra sesonglisten.</string> + <string control="Core_chkSeasonPosterCol">Gjem plakatseksjonen fra plakatlisten.</string> + <string control="Core_chkShowNfoCol">Gjem infoseksjonen fra serielisten.</string> + <string control="Core_chkShowFanartCol">Gjem fankunstseksjonen fra serielisten.</string> + <string control="Core_chkShowPosterCol">Gjem plakatseksjonen fra serielisten.</string> + <string control="Core_chkDisplayAllSeason">Hvis påslått, hvis en "alle sesonger"-plakat eksisterer for valgt serie så vil den bli vist til høyre i hovedbildet.</string> + <string control="Core_cbRatingRegion">Velg regionen for filmvurderinger du vil skal vises i hovedbildet.</string> + <string control="Core_chkNoFilterEpisode">Hvis påslått, EMM vik ikke filtrere episodetitler fra filnavn, og heller bygge tittel utifra serienavn, sesong og episode til en skikkelig tittel har blitt hentet.</string> + <string control="Core_btnEpFilterDown">Flytt valgt filter opp i listen. (Filtre er brukt fra toppen og ned)</string> + <string control="Core_btnEpFilterUp">Flytt valgt filter ned i listen. (Filtre er brukt fra toppen og ned)</string> + <string control="Core_chkEpProperCase">Automatisk legg til riktig førbokstav i episodetitler. (Eksempel: "stole beer from a golfer" blir "Stole Beer From A Golfer")</string> + <string control="Core_btnRemoveEpFilter">Fjern det valgte filteret fra filterlisten.</string> + <string control="Core_btnAddEpFilter">Legg til det innførte filteret til filterlisten.</string> + <string control="Core_txtEpFilter">Før inn et filter for å legge til i filterlisten.</string> + <string control="Core_lstEpFilters">Liste over alle filtere som vil bli brukt under generering av episodetitler.</string> + <string control="Core_btnShowFilterDown">Flytt valgt filter opp i listen. (Filtre er brukt fra toppen og ned)</string> + <string control="Core_btnShowFilterUp">Flytt valgt filter ned i listen. (Filtre er brukt fra toppen og ned)</string> + <string control="Core_chkShowProperCase">Automatisk bruk riktig førbokstav i serietitler. (Eksempel: "my name is earl" blir "My Name Is Earl")</string> + <string control="Core_btnRemoveShowFilter">Fjern det valgte filteret fra filterlisten.</string> + <string control="Core_btnAddShowFilter">Legg til det innførte filteret til filterlisten.</string> + <string control="Core_txtShowFilter">Før inn et filter for å legge til i filterlisten.</string> + <string control="Core_lstShowFilters">Liste over alle filtere som vil bli brukt under generering av serietitler.</string> + <string control="Core_chkGetEnglishImages">Hvis påslåt, alle engelske bilder vil bli lastet ned, uansett valgt språk.</string> + <string control="Core_chkOnlyTVImagesLanguage">Hvis påslått, alle bilder med foretrukket språk vil bli lastet ned.</string> + <string control="Core_txtShowPosterWidth">Forandre serieplakatbredde til valgt bredde.</string> + <string control="Core_txtShowPosterHeight">Forandre serieplakathøyde til valgt høyde.</string> + <string control="Core_tbShowPosterQual">Endre kvaliteten på serieplakater. (0 = original kvalitet)</string> + <string control="Core_chkResizeShowPoster">Forandre størrelsen på plakater før de lagres.</string> + <string control="Core_cbShowPosterSize">Velg den foretrukne plakattypen du vil skal hentes fra serverene. Under detaljhenting vil EMM prøve å finne denne typen først. Hvis den ikke finnes, så vil første type funnet bli brukt.</string> + <string control="Core_chkOverwriteShowPoster">Hvis påslått, eksisterende plakatfiler vil bli overskrevet hvis nye er valgt. Hvis avslått, plakater vil kun bli lagret hvis ingen allerede eksisterer.</string> + <string control="Core_txtShowFanartWidth">Forandre bredden til fankunst til den valgte bredden.</string> + <string control="Core_txtShowFanartHeight">Forandre høyden til fankunst til den valgte høyden.</string> + <string control="Core_tbShowFanartQual">Endre kvaliteten til fankunsten. (0 = original kvalitet)</string> + <string control="Core_chkResizeShowFanart">Forandre størrelsen på fankunst før den blir lagret.</string> + <string control="Core_cbShowFanartSize">Velg den foretrukne størrelsen på fankunsten du vil skal hentes fra serveren. Under detaljhenting så vil EMM prøve å finne denne først. Hvis den ikke finnes, så vil første bilde bli brukt.</string> + <string control="Core_chkOverwriteShowFanart">Hvis påslått, eksisterende fankunstfiler vil bli overskrevet hvis nye er valgt. Hvis avslått, fankunst vil kun bli lagret hvis ingen allerede eksisterer.</string> + <string control="Core_txtSeaPosterWidth">Forandre bredden til sesongplakater til valgt bredde.</string> + <string control="Core_txtSeaPosterHeight">Forandre høyden til sesongplakater til valgt høyden.</string> + <string control="Core_tbSeaPosterQual">Endre kvaliteten på sesongplakater. (0 = original kvalitet)</string> + <string control="Core_chkSeaResizePoster">Forandre størrelsen på sesongplakater før lagring.</string> + <string control="Core_cbSeaPosterSize">Velg den foretrukne sesongplakattypen du vil skal hentes fra serverene. Under detaljhenting vil EMM prøve å finne denne typen først. Hvis den ikke finnes, så vil første type funnet bli brukt.</string> + <string control="Core_chkSeaOverwritePoster">Hvis påslått, eksisterende sesongplakatfiler vil bli overskrevet hvis nye er valgt. Hvis avslått, nye plakater vil kun bli lagret hvis ingen allerede eksisterer.</string> + <string control="Core_txtSeaFanartWidth">Forandre bredden til sesongfankunst til innført bredde.</string> + <string control="Core_txtSeaFanartHeight">Forandre høyden til sesongfankunst til innført høyde.</string> + <string control="Core_tbSeaFanartQual">Endre kvaliteten på sesongfankunstfiler. (0 = original kvalitet)</string> + <string control="Core_chkSeaResizeFanart">Forandre størrelsen på fankunstfiler før lagring.</string> + <string control="Core_cbSeaFanartSize">Velg den foretrukne størrelsen på fankunsten du vil skal hentes fra serveren. Under detaljhenting så vil EMM prøve å finne denne først. Hvis den ikke finnes, så vil første bilde bli brukt.</string> + <string control="Core_chkSeaOverwriteFanart">Hvis påslått, eksisterende sesongfankunstfiler vil bli overskrevet hvis nye er valgt. Hvis avslått, ny fankunst vil kun bli lagret hvis ingen allerede eksisterer.</string> + <string control="Core_txtEpPosterWidth">Forandre bredden til episodeplakater til innført bredde.</string> + <string control="Core_txtEpPosterHeight">Forandre høyden til episodeplakater til innført høyde.</string> + <string control="Core_tbEpPosterQual">Endre kvaliteten på episodeplakatfiler. (0 = original kvalitet)</string> + <string control="Core_chkResizeEpPoster">Forandre størrelsen på episodeplakatfiler før lagring.</string> + <string control="Core_chkOverwriteEpPoster">Hvis påslått, eksisterende episodeplakatfiler vil bli overskrevet hvis nye er valgt. Hvis avslått, nye plakater vil kun bli lagret hvis ingen allerede eksisterer.</string> + <string control="Core_txtEpFanartWidth">Forandre bredden til episodefankunst til innført bredde.</string> + <string control="Core_txtEpFanartHeight">Forandre høyden til episodefankunst til innført høyde.</string> + <string control="Core_tbEpFanartQual">Endre kvaliteten på episodefankunstfiler. (0 = original kvalitet)</string> + <string control="Core_chkResizeEpFanart">Forandre størrelsen på episodefankunstfiler før lagring.</string> + <string control="Core_cbEpFanartSize">Velg den foretrukne størrelsen på fankunsten du vil skal hentes fra serveren. Under detaljhenting så vil EMM prøve å finne denne først. Hvis den ikke finnes, så vil første bilde bli brukt.</string> + <string control="Core_chkOverwriteEpFanart">Hvis påslått, eksisterende episodepfankunstfiler vil bli overskrevet hvis nye er valgt. Hvis avslått, ny fankunst vil kun bli lagret hvis ingen allerede eksisterer.</string> + <string control="Core_chkScraperShowRating">Slå på detaljhenting av seriens vurdering.</string> + <string control="Core_chkScraperShowActors">Slå på detaljhenting av seriens skuespillere.</string> + <string control="Core_chkScraperShowStudio">Slå på detaljhenting av seriens studio.</string> + <string control="Core_chkScraperShowPremiered">Slå på detaljhenting av seriens premieredato.</string> + <string control="Core_chkScraperShowEGU">Slå på detaljhenting av seriens episodeguide-URL.</string> + <string control="Core_chkScraperShowMPAA">Slå på detaljhenting av seriens MPAA-markering.</string> + <string control="Core_chkScraperShowPlot">Slå på detaljhenting av seriens historie.</string> + <string control="Core_chkScraperShowGenre">Slå på detaljhenting av seriens sjanger.</string> + <string control="Core_chkScraperShowTitle">Slå på detaljhenting av seriens tittel.</string> + <string control="Core_chkScraperEpActors">Slå på detaljhenting av episodens skuespillere</string> + <string control="Core_chkScraperEpCredits">Slå på detaljhenting av episodensakreditter.</string> + <string control="Core_chkScraperEpDirector">Slå på detaljhenting av episodens regissører.</string> + <string control="Core_chkScraperEpPlot">Slå på detaljhenting av episodens historie.</string> + <string control="Core_chkScraperEpRating">Slå på detaljhenting av episodens vurdering.</string> + <string control="Core_chkScraperEpAired">Slå på detaljhenting av episodens </string> + <string control="Core_chkScraperEpTitle">Slå på detaljhenting av episodens tittel.</string> + <string control="Core_chkScraperEpEpisode">Slå på detaljhenting av episodens nummer.</string> + <string control="Core_chkScraperEpSeason">Slå på detaljhenting av sesongens nummer.</string> + <string control="Core_chkEpLockTitle">Hvis påslått, episodetittelen vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkEpLockRating">Hvis påslått, episodevurdering vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkEpLockPlot">Hvis påslått, episodehistorien vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkShowLockPlot">Hvis påslått, seriehistorien vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkShowLockGenre">Hvis påslått, seriesjanger vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkShowLockStudio">Hvis påslått, seriestudio vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkShowLockRating">Hvis påslått, serievurdering vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkShowLockTitle">Hvis påslått, serietittelen vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_lstTVMetaData">Liste over filtyper som har standard metadatafelt.</string> + <string control="Core_txtTVDefFIExt">Før inn en filtype for å lage et standard metadatafelt.</string> + <string control="Core_btnRemoveTVMetaDataFT">Fjern standard metadata fra valgt filtype i listen over standard metadata.</string> + <string control="Core_btnEditTVMetaDataFT">Endre standard metadata fra valgt filtype i listen over standard metadata.</string> + <string control="Core_btnNewTVMetaDataFT">Lag standard metadata for valgt filtype og legg den til i listen over standard metadata.</string> + <string control="Core_cboTVMetaDataOverlay">Hvis valgt språk blir funnet i episoden, så vil et spesielt ikon bli lagt over lydmetadataikonen.</string> + <string control="Core_chkTVScanMetaData">Hvis påslått, EMM vil skanne episodefiler for metadata.</string> + <string control="Core_cboTVUpdate">Velg ventetid mellom oppdateringer av TV-info-mellomlager.</string> + <string control="Core_txtAPIKey">Skriv inn TVDB API-nøkkelen til mediacenteret/spilleren din. Dette er ikke nødvendig for at EMM skal fungere. Den vil kun bli brukt når episodeguide-URLer blir lagret.</string> + <string control="Core_txtTVDBMirror">Før inn speilserver til theTVDB.</string> + <string control="Core_btnTVLanguageFetch">Klikk her for å laste ned tilgjengelige språk fra theTVDB.</string> + <string control="Core_cbTVLanguage">Velg det foretrukne språket å bruke når du laster ned serieinformasjon og bilder.</string> + <string control="Core_chkCertification">Slå på detaljhenting av aldersgrense.</string> + <string control="Core_chkTop250">Slå på detaljhenting av IMDB Top 250-plassering.</string> + <string control="Core_chkCountry">Slå på detaljhenting av filmens produksjonsland.</string> + <string control="Core_txtGenreLimit">Begrens antall detaljhentede sjangre til den innførte verdien.</string> + <string control="Core_txtActorLimit">Begrens antall skuespillere til den innførte verdien.</string> + <string control="Core_chkCrew">Begrens detaljhenting av andre crew. (Detaljhenting av fullt crew må være påslått)</string> + <string control="Core_chkMusicBy">Begrens detaljhenting av musikere. (Detaljhenting av fullt crew må være påslått)</string> + <string control="Core_chkProducers">Begrens detaljhenting av filmprodusenter. (Detaljhenting av full crew må være påslått)</string> + <string control="Core_chkWriters">Slå på detaljhenting av manusforfattere.</string> + <string control="Core_chkStudio">Slå på detaljhenting av studio.</string> + <string control="Core_chkRuntime">Slå på detaljhenting av filmlengde.</string> + <string control="Core_chkPlot">Slå på detaljhenting av filmens historie.</string> + <string control="Core_chkOutline">Slå på detaljhenting av filmens beskrivelse.</string> + <string control="Core_chkGenre">Slå på detaljhenting av filmens sjanger.</string> + <string control="Core_chkDirector">Slå på detaljhetning av filmens regissør.</string> + <string control="Core_chkTagline">Slå på detaljhetning av filmens undertittel.</string> + <string control="Core_chkCast">Slå på detaljhetning av filmens skuespillerbeholdning.</string> + <string control="Core_chkVotes">Slå på detaljhetning av filmens poeng.</string> + <string control="Core_chkTrailer">Slå på detaljhetning av filmens trailer-URL.</string> + <string control="Core_chkRating">Slå på detaljhetning av filmens vurdering.</string> + <string control="Core_chkRelease">Slå på detaljhetning av filmens premieredato.</string> + <string control="Core_chkMPAA">Slå på detaljhetning av filmens MPAA-markering.</string> + <string control="Core_chkYear">Slå på detaljhetning av filmens år.</string> + <string control="Core_chkTitle">Slå på detaljhetning av filmens tittel.</string> + <string control="Core_lstMetaData">Liste over filtyper som har standard metadatafelt.</string> + <string control="Core_txtDefFIExt">Før inn en filtype for å lage et standard metadatafelt.</string> + <string control="Core_btnRemoveMetaDataFT">Fjern standard metadata fra valgt filtype i listen over standard metadata.</string> + <string control="Core_btnEditMetaDataFT">Endre standard metadata fra valgt filtype i listen over standard metadata.</string> + <string control="Core_btnNewMetaDataFT">Lag standard metadata for valgt filtype og legg den til i listen over standard metadata.</string> + <string control="Core_chkIFOScan">Hvis påslått, så vil EMM skanne .IFO-filer for metadata.</string> + <string control="Core_cbLanguages">Hvis valgt språk blir funnet i filmen, så vil et spesielt ikon bli lagt over lydmetadataikonen.</string> + <string control="Core_txtRuntimeFormat">Før inn formatet du vil bruke for filmens varighet, hentet fra metadata. Merk at du kan bruke <0m> for 0 bufferminutter.</string> + <string control="Core_chkScanMediaInfo">Hvis påslått, EMM vil skanne filmfiler for metadata.</string> + <string control="Core_chkUseMIDuration">Bruk varighetslengde hentet fra metadata som filmens varighet.</string> + <string control="Core_chkLockOutline">Hvis påslått, filmbeskrivelse vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkLockPlot">Hvis påslått, filmhistorien vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkLockTrailer">Hvis påslått, filmtrailer vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkLockGenre">Hvis påslått, filmsjanger vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkLockRealStudio">Hvis påslått, filmstudio vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkLockRating">Hvis påslått, vurdering vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkLockTagline">Hvis påslått, undertittel vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_chkLockTitle">Hvis påslått, filmtittel vil kun bli detaljhentet hvis en ikke allerede eksisterer.</string> + <string control="Core_cbForce">Velg regiontittel du vil at EMM skal se etter.</string> + <string control="Core_chkForceTitle">Hvis påslått, så vil EMM sjekke for alternative titler på det valgte språket. Dette er gunstig for å finne titler i ditt språk.</string> + <string control="Core_chkOutlineForPlot">Hvis påslått, så vil EMM bruke filmbeskrivelse hvis filmhistorien er tom.</string> + <string control="Core_chkCastWithImg">Hvis påslått, så vil EMM kun detaljhente skuespillere som har riktig type bilder.</string> + <string control="Core_chkUseCertForMPAA">Hvis påslått, så vil EMM bruke aldersgrensen i valgt region istedet for MPAAsertifisering.</string> + <string control="Core_chkFullCast">Hvis påslått, så vil alle skuespillere bli detaljhentet, istedet for kun hovedrolleinnehavere.</string> + <string control="Core_chkFullCrew">Hvis påslått, så vil alle crewmedlemmer bli detaljhentet. (Hvis individuelt påslått)</string> + <string control="Core_cbCert">Velg regionen for aldersgrenser.</string> + <string control="Core_chkCert">Detaljhent kun aldersgrense for valgt region.</string> + <string control="Core_chkMarkNewShows">Hvis påslått, så vil nye serier bli "markert" i filmlisten. Hvis avslått, så vil nye serier bli vist med tykk, grønn farge til serien er oppdatert eller til neste EMM-sesjon.</string> + <string control="Core_chkMarkNewEpisodes">Hvis påslått, så vil nye episoder bli "markert" i filmlisten. Hvis avslått, så vil nye episoder bli vist med tykk, grønn farge til episoden er oppdatert eller til neste EMM-sesjon.</string> + <string control="Core_cbOrdering">Velg standard rekkefølge EMM vil bruke under detaljhenting av serieinformasjon.</string> + <string control="Core_chkOnlyValueForCert">Hvis påslått, så vil EMM kun lagre verdien av aldergrensen. (Eksempel: "Norge: 18" blir "18")</string> + <string control="Core_rbBanner">Hvis påslått, så vil EMM laste ned et bannerbilde (bredt bilde) av valgt type som standard TVserie-plakat.</string> + <string control="Core_rbPoster">Hvis påslått, så vil EMM prøveå laste ned plakater av valgt type som standard TVserie-plakat.</string> + <string control="Core_btnResetShowFilters">Dette vil resette seriefiltere til standardliste. ADVARSEL: Dette vil slette alle selvvalgte filtere du har lagt inn.</string> + <string control="Core_btnResetEpFilter">Dette vil resette episodefiltere til standardliste. ADVARSEL: Dette vil slette alle selvvalgte filtere du har lagt inn.</string> + <string control="Core_btnResetMovieFilters">Dette vil resette filmfiltere til standardliste. ADVARSEL: Dette vil slette alle selvvalgte filtere du har lagt inn.</string> + <string control="Core_btnResetValidExts">Dette vil resette godkjente filtyper til standardliste. ADVARSEL: Dette vil slette alle selvvalgte filtere du har lagt inn.</string> + <string control="Core_ResetShowRegex">Dette vil resette serieRegex til standardliste. ADVARSEL: Dette vil slette alle selvvalgte filtere du har lagt inn.</string> + <string control="Core_chkClickScrape">Slå på Klikkdetaljhenting på hovedbildemarkeringer.</string> + <string control="Core_chkSpecialDateAdd">Hvis påslått, så vil EMM respektere fildatoen i videofilen istedet for å bruke dagens dato når videoen importeres til databasen. Dette resulterer mer stabile søk når nye filmer sorteres.</string> + <string control="Core_chkLockLanguageV">Hvis påslått, så vil språk (videometadata) ikke bli oppdatert.</string> + <string control="Core_chkLockLanguageA">Hvis påslått, så vil språk (lydmetadata) ikke bli oppdatert.</string> + <string control="Core_chkLockMPAA">Hvis påslått, så vil MPAA/aldersgrense ikke bli oppdatert.</string> + <string control="Core_chkUseMPAAFSK">Hvis påslått, så vil MPAA-verdier bli konvertert til FSK hvis ingen FSK-verdier ble funnet. Prioritet: FSK -> MPAA</string> +</strings> diff --git a/Ember Media Manager/Langs/Norwegian_(no_NO).xml b/Ember Media Manager/Langs/Norwegian_(no_NO).xml new file mode 100644 index 0000000..eb09012 --- /dev/null +++ b/Ember Media Manager/Langs/Norwegian_(no_NO).xml @@ -0,0 +1,884 @@ +<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <string id="1">&Fil</string> + <string id="2">&Avslutt</string> + <string id="3">&Endre</string> + <string id="4">&Innstillinger...</string> + <string id="5">&Hjelp</string> + <string id="6">&Om...</string> + <string id="7">Laster media:</string> + <string id="8">&Verktøy</string> + <string id="9">&Rens Filer</string> + <string id="10">&Sortér filer i mapper</string> + <string id="11">Kopiér eksisterende fankunst til &bakgrunnmappe</string> + <string id="12">Tilbakestill studio&merke-metadata</string> + <string id="13">Mappenavn</string> + <string id="14">S&amlingmanager</string> + <string id="15">Filnavn</string> + <string id="16">Sesongresultat</string> + <string id="17">Nullstill alle mellomlagre</string> + <string id="18">Omlast alle filmer</string> + <string id="19">Lukk</string> + <string id="20">Sjangere</string> + <string id="21">Tittel</string> + <string id="22">Omlast</string> + <string id="23">Merk</string> + <string id="24">Lås</string> + <string id="25">Endre filmdetaljer</string> + <string id="26">Detaljer</string> + <string id="27">>> Velg sjanger <<</string> + <string id="28">Legg til</string> + <string id="29">Samling</string> + <string id="30">Fjern</string> + <string id="31">Detaljhent valgte filmer (på nytt)</string> + <string id="32">Forandre film</string> + <string id="33">Åpne tilhørende mappe</string> + <string id="34">Slett film</string> + <string id="35">Merk alle</string> + <string id="36">Filmer</string> + <string id="37">Nullstill filtere</string> + <string id="38">Generelt</string> + <string id="39">Ute av toleranse</string> + <string id="40">Manglende objekter</string> + <string id="41">Duplikater</string> + <string id="42">Spesifikt</string> + <string id="43">Låst</string> + <string id="44">Forandrer</string> + <string id="45">Og</string> + <string id="46">Eller</string> + <string id="47">Ny</string> + <string id="48">Merket</string> + <string id="49">År:</string> + <string id="50">Kilde:</string> + <string id="51">Sjanger:</string> + <string id="52">Filtre</string> + <string id="53">Avbryter Detaljhenter...</string> + <string id="54">Avbryt Detaljhenter</string> + <string id="55">Ingen informasjon tilgjengelig for denne filmen</string> + <string id="56">Sertifisering(er)</string> + <string id="57">Slippdato</string> + <string id="58">Oppdatér</string> + <string id="59">Metadata</string> + <string id="60">Filbane</string> + <string id="61">IMDB ID</string> + <string id="62">Direktør</string> + <string id="63">Rollebesetning</string> + <string id="64">Beskrivelse</string> + <string id="65">Handling</string> + <string id="66">Informasjon</string> + <string id="67">Detaljhent media</string> + <string id="68">Alle filmer</string> + <string id="69">Automatisk (Tving beste treff)</string> + <string id="70">Alle objekter</string> + <string id="71">Kun Nfo</string> + <string id="72">Kun Plakat</string> + <string id="73">Kun Fankunst</string> + <string id="74">Kun Ekstrakunst</string> + <string id="75">Kun trailer</string> + <string id="76">Kun metadata</string> + <string id="77">Spør (Krev innspill hvis ingen eksakte treff)</string> + <string id="78">Manglende filmobjekter</string> + <string id="79">Nye filmer</string> + <string id="80">Markerte filmer</string> + <string id="81">Selvvalgt Detaljhenter...</string> + <string id="82">Oppdatér bibliotek</string> + <string id="83">Mediacentere</string> + <string id="84">Detaljhent/last ned data fra internettet for flere filmer.</string> + <string id="85">Skanner kilder for nytt innhold, og renser databasen.</string> + <string id="86">Sender en kommando til XBMC for å starte dens interne "Oppdater Bibliotek"-prosess.</string> + <string id="87">Markér eller avmarkér alle filmene i listen.</string> + <string id="88">Søk i filmtitlene ved å skrive her.</string> + <string id="89">Spill av filmfilen i systemets standardavspiller.</string> + <string id="90">Skan på nytt og lagre metadataen for den valgte filmen.</string> + <string id="91">Vis kun filmer som har IMDB ID-duplikater.</string> + <string id="92">Vis kun filmer hvor dens tittelmatch er ute av toleranse.</string> + <string id="93">Vis kun filmer som har manglende objekter</string> + <string id="94">Vis kun nye filmer.</string> + <string id="95">Vis kun markerte filmer.</string> + <string id="96">Vis kun låste filmer.</string> + <string id="97">Vis kun filmer fra valgte kilde.</string> + <string id="98">Velg sjanger...</string> + <string id="99">Avbryter alle prosesser...</string> + <string id="100">Skuespiller</string> + <string id="101">Er du sikker på at du vil fortsette?</string> + <string id="102">ADVARSEL: Hvis du fortsetter, så vil alle ikke-hvitlistefiletyper bli slettet!</string> + <string id="103">ADVARSEL: Hvis du fortsetter, så vil alle følgende typer bli permanent slettet:</string> + <string id="104">Er du sikker?</string> + <string id="105">Fjern all merking</string> + <string id="106">>> Flere <<</string> + <string id="107">Umarkert</string> + <string id="108">Lås opp</string> + <string id="109">ADVARSEL: DETTE VIL PERMANENT SLETTE MERKEDE FILMER PERMANENT FRA HARDDISKEN</string> + <string id="110">Oppdatér media:</string> + <string id="111">Kunne ikke laste mapper. Vennligst sjekk innstillingene.</string> + <string id="112">Spilletid: {0}</string> + <string id="113">Velg språket du vil at Ember skal bruke når detaljer for TV-serier hentes.</string> + <string id="114">* Dette MÅ være påslått for å bruke ekstrafankunst og filnavn-valg som movie.tbn, fanart.jpg og videre.</string> + <string id="115">Legg til Regex</string> + <string id="116">Utfører føroppgaver (Henter data)...</string> + <string id="117">Ukjent film ({0})</string> + <string id="118">{0} Stemmer</string> + <string id="119">Avbryter filrenser</string> + <string id="120">Avbryt filrenser</string> + <string id="121">Avbryter bakgrunnkopi</string> + <string id="122">Avbryt kopiér</string> + <string id="123">Nullstill</string> + <string id="124">Oppdatér Regex</string> + <string id="125">Avbryter Detaljhenter...</string> + <string id="126">Avbryt Detaljhenter</string> + <string id="127">Detaljhenter media (Alle filmer - Spør):</string> + <string id="128">Detaljhenter media (Alle Filmer - Automatisk):</string> + <string id="129">Renser filer:</string> + <string id="130">Kopierer fankunst til bakgrunnsmappe:</string> + <string id="131">{0} som {1}</string> + <string id="132">Detaljhenter media (Manglende filmobjekter - Automatisk):</string> + <string id="133">Detaljhenter media (Manglende filmobjekter - Spør):</string> + <string id="134">Detaljhenter media (Nye filmer - Spør):</string> + <string id="135">Detaljhenter media (Nye filmer - Automatisk):</string> + <string id="136">Detaljhenter media (Markerte filmer - Spør):</string> + <string id="137">Detaljhenter media (Markerte filmer - Automatisk):</string> + <string id="138">Detaljhenter {0} på nytt</string> + <string id="139">Detaljhenter:</string> + <string id="140">Skanner metadata</string> + <string id="141">Kan ikke hente filmdetaljer fra internett. Vennligst sjekk tilkoblingen, og prøv på nytt</string> + <string id="142">Kunne ikke hente detaljer</string> + <string id="143">Oppdatér kun {0}</string> + <string id="144">Oppdatér</string> + <string id="145">Kun</string> + <string id="146">Detaljhent sesong (på nytt)</string> + <string id="147">Detaljhent episode (på nytt)</string> + <string id="148">Plakat</string> + <string id="149">Fankunst</string> + <string id="150">Nfo</string> + <string id="151">Trailer</string> + <string id="152">Undertekst</string> + <string id="153">Ekstrakunst</string> + <string id="154">Skuespillernavn:</string> + <string id="155">Skuespillerrolle:</string> + <string id="156">Skuespillerbilde (URL):</string> + <string id="157">Ny skuespiller</string> + <string id="158">Endre skuespiller</string> + <string id="159">Valgt URL er ikke gyldig.</string> + <string id="160">Ugyldig URL</string> + <string id="161">Vennligst skriv inn en URL for å verifisere</string> + <string id="162">Ingen hodebilde-URL spesifisert</string> + <string id="163">Detaljhent film (på nytt)</string> + <string id="164">Detaljhent valgte filmer (på nytt)</string> + <string id="165">Lager filmliste...</string> + <string id="166">Avbryter listelaging</string> + <string id="167">Avbryt</string> + <string id="168">Detaljhent-rekkefølge</string> + <string id="169">Lås alt</string> + <string id="170">Lås opp alt</string> + <string id="171">Navn:</string> + <string id="172">Beskrivelse:</string> + <string id="173">Utvidelseversjon:</string> + <string id="174">Mappe</string> + <string id="175">Filnavn</string> + <string id="176">Ny mappe</string> + <string id="177">Nytt filnavn</string> + <string id="178">Min. EMM-versjon:</string> + <string id="179">OK</string> + <string id="180">Sniktitt</string> + <string id="181">Skriv inn URL til bilde:</string> + <string id="182">Manuell fankunst</string> + <string id="183">Manuell plakat</string> + <string id="184">Bildeviser</string> + <string id="185">Pass til</string> + <string id="186">Full størrelse</string> + <string id="187">&Format / Innrykk</string> + <string id="188">&Les</string> + <string id="189">&Lagre</string> + <string id="190">Manuell Nfo-skriver</string> + <string id="191">Dette er ikke et skikkelig XML-dokument.</string> + <string id="192">Filen er ikke gyldig.</string> + <string id="193">Filen er gyldig.</string> + <string id="194">Ugyldig</string> + <string id="195">Gyldig</string> + <string id="196">Vil du lagre forandringene?</string> + <string id="197">Lagre?</string> + <string id="198">Filmkilde</string> + <string id="199">Kildenavn:</string> + <string id="200">Kildebane:</string> + <string id="201">Kildevalg:</string> + <string id="202">Kun én film i hver mappe*</string> + <string id="203">Bruk mappenavn for førstegangs listevisning</string> + <string id="204">Søk rekursivt</string> + <string id="205">Velg hovedmappe for filmmapper/filer</string> + <string id="206">Samlingnavn</string> + <string id="207">Forandre samling</string> + <string id="208">Legg til ny samling</string> + <string id="209">En ny versjon er tilgjengelig</string> + <string id="210">Kunne ikke laste oppdatér-applikasjon</string> + <string id="211">Klikk her</string> + <string id="212">for å besøke embermm.com</string> + <string id="213">Sortér filer i mapper</string> + <string id="214">Gå</string> + <string id="215">Status</string> + <string id="216">Skriv inn bane og trykk "Gå" for å begynne</string> + <string id="217">Bane å sortere</string> + <string id="218">Velg mappen som inneholder filene du vil sortere</string> + <string id="219">Flytter</string> + <string id="220">ADVARSEL: Hvis du fortsetter, så vil alle filer bli sortert inn i egne mapper</string> + <string id="221">Mappen du valgte eksisterer ikke. Vennligst velg en gyldig bane.</string> + <string id="222">Mappe ikke funnet</string> + <string id="223">Velg studio</string> + <string id="224">Forandre detaljene til valgt film.</string> + <string id="225">Lokal trailer funnet</string> + <string id="226">Studio:</string> + <string id="227">Trailer URL:</string> + <string id="228">Kreditter:</string> + <string id="229">MPAA Aldersgrensegrunn:</string> + <string id="230">Manuell forandring</string> + <string id="231">Skuespillere:</string> + <string id="232">Navn</string> + <string id="233">Rolle</string> + <string id="234">Hodebilde</string> + <string id="235">MPAA Aldersgrense:</string> + <string id="236">Premiere/slippdato</string> + <string id="237">Sertifisering(er):</string> + <string id="238">Spilletid:</string> + <string id="239">Direktør:</string> + <string id="240">Topp 250:</string> + <string id="241">Handling:</string> + <string id="242">Handling i et nøtteskall:</string> + <string id="243">Undertittel:</string> + <string id="244">Stemmer:</string> + <string id="245">Rangering:</string> + <string id="246">Tittel:</string> + <string id="247">Fjern plakat</string> + <string id="248">Bytt plakat (Detaljhent)</string> + <string id="249">Bytt plakat (lokal)</string> + <string id="250">Fjern fankunst</string> + <string id="251">Bytt fankunst (Detaljhent)</string> + <string id="252">Bytt fankunst (lokal)</string> + <string id="253">Du har ekstrakunst i kø for å bli overført til filmmappen.</string> + <string id="254">Overfør nå</string> + <string id="255">Sett som fankunst</string> + <string id="256">Bildeekstrakt</string> + <string id="257">Max. EMM-versjon</string> + <string id="258">Kategori</string> + <string id="259">Bane til nytt skjermdumpbilde:</string> + <string id="260">Nåværende skjermdump</string> + <string id="261">Skjermdumpbildet må være JPG, 150 KB eller mindre i størrelse, og 133x95 piksler i dimensjon.</string> + <string id="262">Versjon:</string> + <string id="263">Installert:</string> + <string id="264">Rens mellomlager</string> + <string id="265">Bytt plakat (Last ned)</string> + <string id="266">Bytt fankunst (Last ned)</string> + <string id="267">En eller flere resurser i mellomlageret er i bruk, og kan ikke slettes.</string> + <string id="268">Kan ikke rense mellomlager</string> + <string id="269">Størrelse: {0}x{1}</string> + <string id="270">Kunne ikke spille av traileren. Dette kan være grunnet ugyldig URL eller at du ikke har riktig avspiller.</string> + <string id="271">Kunne spille av trailer.</string> + <string id="272">Utvidelsesfil</string> + <string id="273">Lagre</string> + <string id="274">Nullstill</string> + <string id="275">Filter</string> + <string id="276">Påfør</string> + <string id="277">Ny utvidelse</string> + <string id="278">År</string> + <string id="279">Forandre utvidelse</string> + <string id="280">Utvidelsesfiler</string> + <string id="281">Video</string> + <string id="282">Lyd</string> + <string id="283">Ukjent</string> + <string id="284">Kansellert</string> + <string id="285">Utvidelser</string> + <string id="286">Innlogging</string> + <string id="287">Innlogging til utvidelsesserver</string> + <string id="288">Henter "{0}" utvidelser</string> + <string id="289">Logger inn...</string> + <string id="290">Oversettelser</string> + <string id="291">Templater</string> + <string id="292">Ugyldig innførsel</string> + <string id="293">Andre</string> + <string id="294">Lag ny</string> + <string id="295">Slett utvidelse</string> + <string id="296">For å fortsette med sletting, må du bekrefte at du er eieren av utvidelsen.</string> + <string id="297">Bekreft eierskap</string> + <string id="298">Start EMM på nytt?</string> + <string id="299">Nye endringer krever en omstart av EMM for å bli ferdig.\n\nVil du starte EMM på nytt nå?</string> + <string id="300">Ja</string> + <string id="301">Land</string> + <string id="302">Original Tittel</string> + <string id="303"/> + <string id="304"/> + <string id="305"/> + <string id="306"/> + <string id="307"/> + <string id="308"/> + <string id="309"/> + <string id="310"/> + <string id="311"/> + <string id="312"/> + <string id="313"/> + <string id="314"/> + <string id="315"/> + <string id="316"/> + <string id="317"/> + <string id="318"/> + <string id="319"/> + <string id="320"/> + <string id="321"/> + <string id="322">X-Stor</string> + <string id="323">Stor</string> + <string id="324">Medium</string> + <string id="325">Liten</string> + <string id="326"/> + <string id="327"/> + <string id="328"/> + <string id="329"/> + <string id="330"/> + <string id="331"/> + <string id="332"/> + <string id="333"/> + <string id="334"/> + <string id="335"/> + <string id="336"/> + <string id="337"/> + <string id="338"/> + <string id="339"/> + <string id="340"/> + <string id="341"/> + <string id="342"/> + <string id="343"/> + <string id="344"/> + <string id="345"/> + <string id="346"/> + <string id="347"/> + <string id="348"/> + <string id="349"/> + <string id="350">DVD</string> + <string id="351">Ugyldig</string> + <string id="352"/> + <string id="353"/> + <string id="354"/> + <string id="355">Eksisterer</string> + <string id="356"/> + <string id="357"/> + <string id="358"/> + <string id="359"/> + <string id="360"/> + <string id="361">Ferdig</string> + <string id="362">Ferdig</string> + <string id="363"/> + <string id="364"/> + <string id="365">Samlingmanager</string> + <string id="366">Samlinger</string> + <string id="367">Filmer i samling</string> + <string id="368">Ingen valgt</string> + <string id="369">Laster film og samlinger...</string> + <string id="370">Avbryter lasting...</string> + <string id="371">Legg til og konfigurer filmsamlinger.</string> + <string id="372"/> + <string id="373">Last ned</string> + <string id="374"/> + <string id="375"/> + <string id="376"/> + <string id="377"/> + <string id="378"/> + <string id="379"/> + <string id="380"/> + <string id="381"/> + <string id="382"/> + <string id="383"/> + <string id="384">Selvvalgt Detjalhenter</string> + <string id="385">Lag en ny selvvalgt Detaljhenter</string> + <string id="386">Valgfilter</string> + <string id="387">Oppdatér modus</string> + <string id="388">Modifiseringer</string> + <string id="389">Start</string> + <string id="390">Valg</string> + <string id="391">Andre crew</string> + <string id="392">Musikk av</string> + <string id="393">Produsenter</string> + <string id="394">Forfattere</string> + <string id="395">Studio</string> + <string id="396">Spilletid</string> + <string id="397">Undertittel</string> + <string id="398">Rollebesetning</string> + <string id="399">Stemmer</string> + <string id="400">Rangering</string> + <string id="401">MPAA</string> + <string id="402">Ember Oppstarthjelper</string> + <string id="403">< Tilbake</string> + <string id="404">Neste ></string> + <string id="405">Velkommen til Ember Media Manager</string> + <string id="406">TIPS: Valg som inneholder teksten <film> betyr at EMM vil bruke filnavnet til filmen.</string> + <string id="407">Legg til kilde</string> + <string id="408">Det var vel ikke så vanskelig? Som nevnt tidligere, så kan du forandre disse valgene på et senere tidspunkt i Innstillingene.</string> + <string id="409">Det var dét!{0}Ember Media Manager er klar!</string> + <string id="410">Bane</string> + <string id="411">Rekursivt</string> + <string id="412">Bruk mappenavn</string> + <string id="413">Kun én video</string> + <string id="414">Først, la oss fortelle EMM hvor det kan finne filmene dine. Du kan legge til så mange kilder du vil.</string> + <string id="415">Dette er enten den første gangen du kjører EMM, eller så ha du oppgradert til en nyere versjon. Det er noen ting EMM trenger for å fungere skikkelig. Denne hjelperen vil hjelpe deg konfigurere EMM.{0}{0}Bare en håndfull valg vil bli vist i denne hjelperen. Du kan forandre disse, eller andre valg, når du vil i Innstillingene, som du finner i Edit-menyen.</string> + <string id="416">Nå som EMM vet HVOR det kan finne filene, må vi fortelle det HVILKE filer det må søke etter. Velg de filene du vil at EMM skal bruke. Du kan velge flere typer i hver seksjon, hvis du ønsker.</string> + <string id="417">Noen valg du kan være interessert i: {0}{0}Selvvalgte filtre - Hvis filnavnene inneholder ting som "DVDRip", "BluRay", "x264", eller lignende, og du ønsker å filtrere ut disse i medialisten, så kan du bruke Selvvalgte filtre-valget. Selvvalgte filtre-funksjonen støtter Regex.{0}{0}Bilder- Den seksjonen tillater deg å velge hvilke nettsider EMM skal "detaljhente" bilder fra, og hvilke størrelser du ønsker.{0}{0}Låser - Denne seksjonen tillater deg å "låse" visse detaljer, sånn at de ikke blir forandrer hvis du detaljhenter på nytt. Dette er nyttig hvis du manuelt oppdaterer tittel, handling eller lignende, og ikke ønsker at dette forsvinner.</string> + <string id="418">Er du sikker på at du vil fjerne valgte kilder? Dette vil også fjerne filmene i disse mappene fra EMM-databasen.</string> + <string id="419">Metadata er ikke tilgjengelig for denne filmen. Prøv å skanne på nytt.</string> + <string id="420">Innstillinger</string> + <string id="421">Tilkobling</string> + <string id="422"/> + <string id="423"/> + <string id="424"/> + <string id="425">Brukernavn:</string> + <string id="426">Passord:</string> + <string id="427"/> + <string id="428"/> + <string id="429">Diverse</string> + <string id="430">Grensesnittspråk</string> + <string id="431">Slå på Panelanimasjon</string> + <string id="432">Se etter oppdateringer</string> + <string id="433">Skriv over ikke-standard Nfofiler</string> + <string id="434">(Hvis umarkert, ikke-standard Nfofiler vil bli omdøt til <filnavn>.info)</string> + <string id="435">Lagre feilmeldinger til fil</string> + <string id="436">Vis Overlay hvis video inneholder en lydstrøm med følgende språk:</string> + <string id="437">Rens filer</string> + <string id="438">Standard</string> + <string id="439">Ekspert</string> + <string id="440">Tillatte videofiltyper</string> + <string id="441">Tillatte filtyper:</string> + <string id="442">ADVARSEL: Ekspertmodus-renser kan potensielt slette ønskede filer. Vis varsomhet når du bruker dette verktøyet.</string> + <string id="443">Last ned programutvidelser...</string> + <string id="444">Fil</string> + <string id="445"/> + <string id="446"/> + <string id="447">Laster ned filer...</string> + <string id="448"/> + <string id="449"/> + <string id="450"/> + <string id="451">Mappe/fil-filtre</string> + <string id="452">Konverter navn til riktig forbokstav</string> + <string id="453">Alltid vis sjangertekst</string> + <string id="454">Sjangerspråkfilter</string> + <string id="455">Ikke vis fankunst</string> + <string id="456">Ikke vis plakat</string> + <string id="457">Vis bildedimensjoner</string> + <string id="458">Hjelp</string> + <string id="459">Markér nye filmer</string> + <string id="460">Medialistevalg</string> + <string id="461">Ikkematch-toleranse:</string> + <string id="462">Sjekk tittelmatch-konfidens</string> + <string id="463">Sortér tokens til ignoranse</string> + <string id="464">Vis år i listetittel</string> + <string id="465">Gjem ekstrakunstseksjon</string> + <string id="466">Gjem undertekstseksjon</string> + <string id="467">Gjem trailerseksjon</string> + <string id="468">Gjem informasjonseksjon</string> + <string id="469">Gjem fankunstseksjon</string> + <string id="470">Gjem plakatseksjon</string> + <string id="471">Filnavn</string> + <string id="472">bruk <film> kun for mapper med flere filmer</string> + <string id="473">YAMJ-kompatibel VIDEO-TS filplassering/navn</string> + <string id="474">Frodo kompatibel VIDEO_TS filplassering/navn</string> + <string id="475"/> + <string id="476"/> + <string id="477"/> + <string id="478">Kvalitet:</string> + <string id="479">Max bredde:</string> + <string id="480">Max høyde:</string> + <string id="481">Automatisk forandre størrelse:</string> + <string id="482">Foretrukker størrelse:</string> + <string id="483">Overskriv eksisterende</string> + <string id="484">Laster innstillinger...</string> + <string id="485"/> + <string id="486"/> + <string id="487"/> + <string id="488">Globale låser</string> + <string id="489">Lås trailer</string> + <string id="490">Lås sjanger</string> + <string id="491">Lås studio</string> + <string id="492">Lås rangering</string> + <string id="493">Lås undertittle</string> + <string id="494">Lås tittel</string> + <string id="495">Lås beskrivelse</string> + <string id="496">Lås handling</string> + <string id="497">Bilder</string> + <string id="498">Ikke skriv URLer i Nfo</string> + <string id="499">Hent ved singel Detaljhent</string> + <string id="500">MoviePosterDB.com</string> + <string id="501">TheMovieDB.org</string> + <string id="502">IMPAwards.com</string> + <string id="503">Bruk hvis man ikke finner fankunst</string> + <string id="504">Metadata er ikke tilgjengelig for denne episoden. Prøv å skanne på nytt</string> + <string id="505">Ingen handlingdetaljer (spoilers)</string> + <string id="506">Antall å lage:</string> + <string id="507">Ekstrakt under Detaljhent</string> + <string id="508">Bruk beskrivelse hvis handling er tom</string> + <string id="509"/> + <string id="510">Detaljhent kun skuespillere med bilder</string> + <string id="511">Bruk MPAA-sertifisering</string> + <string id="512">Detaljhent full rollebesetning</string> + <string id="513">Detaljhent fullt crew</string> + <string id="514">Bruk følgende sertifiseringsspråk:</string> + <string id="515">Oppgitt spilletidformat</string> + <string id="516">Bruk oppgitt spilletid for spilletid</string> + <string id="517">Skan metadata</string> + <string id="518">Konfigurer EMMs utseende og operasjon</string> + <string id="519">Fjerne valgte</string> + <string id="520">Bakgrunnsmappe</string> + <string id="521">Automatisk lagre fankunst til bakgrunnsmappe</string> + <string id="522">Slett all eksisterende</string> + <string id="523"/> + <string id="524">Hent kun URLer under Detaljhenting</string> + <string id="525">Hent under singel Detaljhenting</string> + <string id="526"/> + <string id="527">Hent under automatisk Detaljhenting</string> + <string id="528"/> + <string id="529">Slå på trailere</string> + <string id="530">No Stack-utvidelser</string> + <string id="531"/> + <string id="532"/> + <string id="533"/> + <string id="534">Gyldig videofiltyper</string> + <string id="535">Forandre kilde</string> + <string id="536">Andre valg</string> + <string id="537">Gjenkjenn VIDEO_TS-mapper</string> + <string id="538">Hopp over størrelsesjekk for stablede filer</string> + <string id="539">MB</string> + <string id="540">Hopp over filer mindre enn:</string> + <string id="541">Størrelser (Ekstraktede bilder)</string> + <string id="542">Polstring</string> + <string id="543">Bredde:</string> + <string id="544">Høyde:</string> + <string id="545">Bruk selvvalgt størrelse</string> + <string id="546">Bruk original oppløsning</string> + <string id="547">Mellomlagrer</string> + <string id="548">Bruk under automatisk Detaljhenting</string> + <string id="549">Markér nye serier</string> + <string id="550">Vedvarende mellomlagring for bilder</string> + <string id="551">Bruk mellomlager for bilder</string> + <string id="552">Velg mappen hvor du ønsker å lagre bakgrunner</string> + <string id="553">Filsystem</string> + <string id="554"/> + <string id="555">Filer og kilder</string> + <string id="556">Detaljhent - Data</string> + <string id="557">Detaljhentere - Bilder og trailere</string> + <string id="558">Bred</string> + <string id="559"/> + <string id="560"/> + <string id="561"/> + <string id="562"/> + <string id="563"/> + <string id="564"/> + <string id="565"/> + <string id="566"/> + <string id="567"/> + <string id="568">Genererer skuespillermellomlager:</string> + <string id="569">Alle</string> + <string id="570">[ingen]</string> + <string id="571">[Avslått]</string> + <string id="572">Henter plakater:</string> + <string id="573">Henter fankunst:</string> + <string id="574">Henter trailere:</string> + <string id="575">Generer ekstrakunst</string> + <string id="576">Verifiserer filmdetaljer</string> + <string id="577">Detaljområder - Globalt</string> + <string id="578">Grense:</string> + <string id="579">Filkilde:</string> + <string id="580">Vis kun filmer fra valgte kilde.</string> + <string id="581">Manglende objekt-filter</string> + <string id="582">Se etter plakat</string> + <string id="583">Se etter fankunst</string> + <string id="584">Se etter Nfo</string> + <string id="585">Se etter trailer</string> + <string id="586">Se etter undertekst</string> + <string id="587">Se etter ekstrakunst</string> + <string id="588"/> + <string id="589"/> + <string id="590"/> + <string id="591">Topp 250</string> + <string id="592"/> + <string id="593"/> + <string id="594">Metadata-endrer</string> + <string id="595">Videostrømmer</string> + <string id="596">Lydstrømmer</string> + <string id="597">Undertekststrømmer</string> + <string id="598">Strømtype</string> + <string id="599">Last ned alle fankunstbilder med følgende størrelse som ekstrakunst:</string> + <string id="600">Ekstra sortering</string> + <string id="601">Dato lagt til</string> + <string id="602">Kilder</string> + <string id="603">Endre metadata</string> + <string id="604">Kodek</string> + <string id="605">Skantype</string> + <string id="606">Bredde</string> + <string id="607">Høyde</string> + <string id="608">Aspekt</string> + <string id="609">Lengde</string> + <string id="610">Språk</string> + <string id="611">Kanaler</string> + <string id="612">Foretrukne</string> + <string id="613">Strøm-forandrer</string> + <string id="614">Aspektforhold</string> + <string id="615">Flettet</string> + <string id="616">Progressivt</string> + <string id="617">Videostrøm</string> + <string id="618">Lydstrøm</string> + <string id="619">Undertekststrøm</string> + <string id="620">Filmtema</string> + <string id="621">Markér nye episoder</string> + <string id="622">Detaljhenter media (Nåværende filter - Spør):</string> + <string id="623">Detaljhenter media (Nåværende filter - Automatisk):</string> + <string id="624">Nåværende filter</string> + <string id="625">Standarder ved filtyper</string> + <string id="626">Filtyper</string> + <string id="627">Valgte objekter: {0}</string> + <string id="628">Slå på IFO-lesing</string> + <string id="629">Temaer</string> + <string id="630"/> + <string id="631"/> + <string id="632"/> + <string id="633"/> + <string id="634"/> + <string id="635">Du har valgt {0} mapper å åpne. Er du sikker på at du vil gjøre dette?</string> + <string id="636"/> + <string id="637"/> + <string id="638"/> + <string id="639"/> + <string id="640"/> + <string id="641"/> + <string id="642">Sortér tittel</string> + <string id="643">Lagrer YAMJ-kompatible samlinger</string> + <string id="644">Renser databasen...</string> + <string id="645">Sluppet: {0}</string> + <string id="646">Fjern fra databasen</string> + <string id="647">Spilledato: {0}</string> + <string id="648">Sesong: {0}, episode: {0}</string> + <string id="649">Oppdatér alt</string> + <string id="650">Sesong</string> + <string id="651">Ingen informasjon tilgjengelig for denne serien</string> + <string id="652">Ingen informasjon tilgjengelig for denne episoden</string> + <string id="653">Tvserier</string> + <string id="654">Sesong</string> + <string id="655">Sesongspesialer</string> + <string id="656">Endre episodedetaljer</string> + <string id="657">Endre detaljer for valgte episoder</string> + <string id="658">På luften:</string> + <string id="659">Sesong:</string> + <string id="660">Episode:</string> + <string id="661">Last episode</string> + <string id="662">Lagre som plakat</string> + <string id="663">Endre detaljer</string> + <string id="664">Endre detaljene for valgt serie.</string> + <string id="665">Første gang på lufta:</string> + <string id="666">TVserietema</string> + <string id="667">Episodetema</string> + <string id="668">Rens databasen etter bibliotekoppdatering</string> + <string id="669">Ignorér siste skantid ved oppdatering av bibliotek</string> + <string id="670">Serie mappe/filnavn-filtre</string> + <string id="671">Episode mappe/filnavn-filtre</string> + <string id="672">Proxy</string> + <string id="673">Slå på proxy</string> + <string id="674">Proxy-URL:</string> + <string id="675">Proxy-port:</string> + <string id="676">Legitimasjon</string> + <string id="677">Slå på legitimasjon</string> + <string id="678">Domene</string> + <string id="679">TV-aldersgrenseregion</string> + <string id="680">Serier</string> + <string id="681">Sesonger</string> + <string id="682">Episoder</string> + <string id="683">Vis plakater</string> + <string id="684">Vis fankunst</string> + <string id="685">Sesongplakater</string> + <string id="686">Sesongfankunst</string> + <string id="687">Episodeplakater</string> + <string id="688">Episodefankunst</string> + <string id="689">[MANGLER]</string> + <string id="690">Endre Regex</string> + <string id="691">Seriematchende Regex</string> + <string id="692">Sesongmatchende Regex</string> + <string id="693">Episodematchende Regex</string> + <string id="694">Anvend på</string> + <string id="695">Endre Regex</string> + <string id="696">Serie-regex</string> + <string id="697">Episode-regex</string> + <string id="698">Tvserier</string> + <string id="699">Regex</string> + <string id="700">Tvserie</string> + <string id="701">Episode</string> + <string id="702"/> + <string id="703"/> + <string id="704"/> + <string id="705">TV-kilde</string> + <string id="706">Velg hovedmappen for TV-serier</string> + <string id="707"/> + <string id="708">Donér</string> + <string id="709">Rens databasen</string> + <string id="710">Tving tittelspråk:</string> + <string id="711">Inkludér mappenavn i kildetypesjekk</string> + <string id="712">Sortér filer i mapper før hver bibliotekoppdatering</string> + <string id="713">Lokal trailer:</string> + <string id="714">Bekreft objekter som skal slettes</string> + <string id="715">Velg alle filer</string> + <string id="716">Detaljhent på nytt</string> + <string id="717">Forbereder for oppdatering...</string> + <string id="718">Vi er nå klare til å oppdatere. EMM vil nå lukkes sånn at oppdateringen kan starte.\n\nVil du fortsette?</string> + <string id="719">Ja</string> + <string id="720">Nei</string> + <string id="721">Oppdater</string> + <string id="722">Sertifisering</string> + <string id="723">EpisodeGuideURL</string> + <string id="724">Sluppet</string> + <string id="725">Skuespillere</string> + <string id="726">Sesong {0}</string> + <string id="727">Episode</string> + <string id="728">På lufta</string> + <string id="729">Kreditteringer</string> + <string id="730">Foretrukket type:</string> + <string id="731">Oppdaterer serie:</string> + <string id="732"><h>=Timer. <m>Minutter. <s>Sekunder</string> + <string id="733">Hvis manglende episoder</string> + <string id="734">Bygg episodetittel istedenfor filtrering</string> + <string id="735">Alle sesonger-plakat</string> + <string id="736">Hent bilder kun i det foretrukne språket</string> + <string id="737">Og hent engelske bilder</string> + <string id="738">API-nøkkel:</string> + <string id="739">Episoderekkefølge:</string> + <string id="740">Hent serieinformasjon på nytt hver:</string> + <string id="741">Foretrukket språk:</string> + <string id="742">Hent tilgjengelige språk:</string> + <string id="743">Serie</string> + <string id="744">TVsesong</string> + <string id="745">Ingen</string> + <string id="746">Blank</string> + <string id="747">Grafisk</string> + <string id="748">Tekst</string> + <string id="749">Uke</string> + <string id="750">Annenhver uke</string> + <string id="751">Måned</string> + <string id="752">Aldri</string> + <string id="753">Alltid</string> + <string id="754">Modulinnstillinger</string> + <string id="755">Episode#</string> + <string id="756">Laster alle episoder:</string> + <string id="757">Lagrer alle bilder:</string> + <string id="758">Søker theTVDB</string> + <string id="759">Velg bilder:</string> + <string id="760">Laster ned SerieZIP:</string> + <string id="761">Verifiserer TVserie:</string> + <string id="762">Verifiserer episode:</string> + <string id="763">Er du sikker på at du vil slette valgte TVserie og påfølgende episoder?</string> + <string id="764">Er du sikker på at du vil slette valgte episode?</string> + <string id="765">Er du sikker på at du vil slette valgte sesong, og dens episoder?</string> + <string id="766">Detaljhent serie (på nytt)</string> + <string id="767">Forandre serie</string> + <string id="768">Slett TVserie</string> + <string id="769">Endre sesongdetaljer</string> + <string id="770">Bytt bilder</string> + <string id="771">Slett sesong</string> + <string id="772">Forandre episode</string> + <string id="773">Slett episode</string> + <string id="774">Påslått</string> + <string id="775">Avslått</string> + <string id="776"/> + <string id="777">Forfatter</string> + <string id="778"/> + <string id="779"/> + <string id="780"/> + <string id="781"/> + <string id="782"/> + <string id="783">Handling</string> + <string id="784"/> + <string id="785"/> + <string id="786">Alle sesonger-plakat</string> + <string id="787"/> + <string id="788"/> + <string id="789"/> + <string id="790"/> + <string id="791"/> + <string id="792">Donér</string> + <string id="793">&Versjoner</string> + <string id="794">&Modulinnstillinger</string> + <string id="795">Grensesnitt</string> + <string id="796">Skan etter siste skrivetid</string> + <string id="797">Standard episoderekkefølge</string> + <string id="798"/> + <string id="799">Detaljhenter - Trailer</string> + <string id="800">Foretrukket kvalitet</string> + <string id="801">TVDB-speilserver</string> + <string id="802">Moduler</string> + <string id="803">Nå, la oss fortelle EMM hvor det kan finne alle TVseriene dine. Du kan legge til så mange kilder du vil.</string> + <string id="804">Og til slutt, la oss fortelle EMM hvilke TVserie-filer det skal se etter. Velg de filene du vil ha. Du kan velge flere i samme seksjon.</string> + <string id="805">Send til PasteBin.com</string> + <string id="806">Kopier til utklippstavle</string> + <string id="807">Noe skjedde under sendingen til PasteBin.com</string> + <string id="808">Feilmeldingleser</string> + <string id="809">Før du sender feilmeldingsskjema, vennligst verifiser at feilmeldingen ikke allerede har blitt sendt. Du kan se alle kjente feil her:</string> + <string id="810">http://www.embermm.com/projects/embermm/issues</string> + <string id="811">PasteBin URL:</string> + <string id="812">Gammel tittel: {0} | Ny tittel: {1}</string> + <string id="813">Film detaljhentet</string> + <string id="814">La til episode:</string> + <string id="815">La til film:</string> + <string id="816">En feil har skjedd</string> + <string id="817">Ny film lagt til</string> + <string id="818">Ny episode lagt til</string> + <string id="819">TV RegEx-profiler</string> + <string id="820">RegEx-profiler</string> + <string id="821">Beskrivelse</string> + <string id="822">Diverse</string> + <string id="823">Lyd- og videokodekkobling</string> + <string id="824">Videokilde:</string> + <string id="825">Nedlastinger:</string> + <string id="826"/> + <string id="827"/> + <string id="828">Slå på skuespillerbilder</string> + <string id="829">Se etter "Dump"mappe</string> + <string id="830">Endre detaljer for valgte sesonger.</string> + <string id="831"/> + <string id="832">Vis "alle sesonger"-plakater</string> + <string id="833">Disse er Detaljhenterspesifikke innstillinger og fungerer som et filter.\nDu kan også bruke EMM globale innstillinger</string> + <string id="834">* I hver sesongmappe</string> + <string id="835">Skriv kun verdien til Nfo</string> + <string id="836"/> + <string id="837">Detaljhenter - Bilder</string> + <string id="838">Banner</string> + <string id="839">Absolutt</string> + <string id="840">Er du sikker på at du vil nullstille til standard liste for seriefilter?</string> + <string id="841">Er du sikker på at du vil nullstille til standard liste for episodefilter?</string> + <string id="842">Er du sikker på at du vil nullstille til standard liste for filmfilter?</string> + <string id="843">Er du sikker på at du vil nullstille til standard liste for gyldige videofiltyper?</string> + <string id="844">Er du sikker på at du vil nullstille til standard liste for serieregex?</string> + <string id="845">>> Intet objekt valgt <<</string> + <string id="846"/> + <string id="847"/> + <string id="848"/> + <string id="849">Slå på klikk-detaljhent</string> + <string id="850">&Sjekk for oppdateringer</string> + <string id="851">Ingen oppdateringer nå</string> + <string id="852">Spør ved klikk-detaljhent</string> + <string id="853">Detaljhenter media (Alle filmer - Hopp over)</string> + <string id="854">Grunnleggende oppsettvalg.</string> + <string id="855">Lager standardvalg.</string> + <string id="856">Laster moduler...</string> + <string id="857">Lager brukergrensesnitt.</string> + <string id="858">Laster database...</string> + <string id="859">Kjører modul...</string> + <string id="860">Laster media...</string> + <string id="861">Kommandolinje-detaljhenting...</string> + <string id="862">Laster oversettelser...</string> + <string id="863">Posisjonkontroll...</string> + <string id="864">Lager menyer...</string> + <string id="865">Versjon {0}.{1}.{2}.{3}</string> + <string id="866">Metadata.</string> + <string id="867">XBMC Frodo</string> + <string id="868">Topp 250</string> + <string id="869">EmberMM.com &Wiki...</string> + <string id="870"/> + <string id="871"/> + <string id="872"/> + <string id="873"/> + <string id="874"/> + <string id="875"/> + <string id="876"/> + <string id="877"/> + <string id="878"/> + <string id="879">Lås språk (video)</string> + <string id="880">Lås Språk (lyd)</string> + <string id="881">Lås MPAA/Aldersgrense</string> + <string id="882">Bruk MPAA som reserve for FSK gradering</string> +</strings> diff --git "a/Ember Media Manager/Langs/Portugu\303\252s_(pt_BR)-Help.xml" "b/Ember Media Manager/Langs/Portugu\303\252s_(pt_BR)-Help.xml" deleted file mode 100644 index 58e328f..0000000 --- "a/Ember Media Manager/Langs/Portugu\303\252s_(pt_BR)-Help.xml" +++ /dev/null @@ -1,362 +0,0 @@ -<strings> - <string control="Core_chkShowGenresText">If enabled, the value of the genre images will always be displayed. If disabled, the text will only be visible when you hover your mouse over one of the genre images.</string> - <string control="Core_chkSourceFromFolder">If enabled, Ember will check the folder name for source types. If disabled, Ember will only check the file name.</string> - <string control="Core_chkNoDisplayFanart">If enabled, fanart will not be displayed in the main window. This is helpful to speed up the interface on slow computers.</string> - <string control="Core_chkNoDisplayPoster">If enabled, posters will not be displayed in the main window. This is helpful to speed up the interface on slow computers.</string> - <string control="Core_chkShowDims">If enabled, the dimensions of the images (posters and fanart) will be overlayed on top of the images.</string> - <string control="Core_chkUpdates">If enabled, Ember will check for a new version at each start up.</string> - <string control="Core_chkOverwriteNfo">Marcada faz com que os arquivos NFOs fora do padrão sejam sobrescritos quando o Ember buscar as informações dos filmes. Desmarcada faz com que os arquivos NFOs não sejam sobrescritos e um novo arquivo, com a extensão .INFO, seja criado.</string> - <string control="Core_chkLogErrors">If enabled, all errors will be logged to a file located in <Ember Installation Directory>\Log\errlog.txt.</string> - <string control="Core_cbEpTheme">Select the theme to apply for the episode layout.</string> - <string control="Core_cbTVShowTheme">Select the theme to apply for the TV Show and Season layout.</string> - <string control="Core_cbMovieTheme">Select the theme to apply for the movie layout.</string> - <string control="Core_btnDLTrans">Download addons for Ember, including modules, themes, translations to other languages, and export templates.</string> - <string control="Core_cbIntLang">Select the language to use for Ember's interface. (You must restart Ember for changes to take effect)</string> - <string control="Core_chkCleanFolderJPG">Clean all files named "folder.jpg".</string> - <string control="Core_chkCleanExtrathumbs">Clean all "extrathumbs" folders.</string> - <string control="Core_chkCleanMovieTBN">Clean all files named "movie.tbn".</string> - <string control="Core_chkCleanMovieNameJPG">Clean all files named <movie>.jpg.</string> - <string control="Core_chkCleanMovieTBNb">Clean all files named <movie>.tbn.</string> - <string control="Core_chkCleanMovieJPG">Clean all files named "movie.jpg".</string> - <string control="Core_chkCleanFanartJPG">Clean all files named "fanart.jpg".</string> - <string control="Core_chkCleanPosterJPG">Clean all files named "poster.jpg".</string> - <string control="Core_chkCleanMovieFanartJPG">Clean all files named <movie>-fanart.jpg.</string> - <string control="Core_chkCleanPosterTBN">Clean all files named "poster.tbn".</string> - <string control="Core_chkCleanMovieNFO">Clean all files named "movie.nfo".</string> - <string control="Core_chkCleanDotFanartJPG">Clean all files named <movie>.fanart.jpg.</string> - <string control="Core_chkCleanMovieNFOb">Clean all files named <movie>.nfo.</string> - <string control="Core_chkWhitelistVideo">Automatically whitelist all files which have an extension in the "Valid Video Extensions" list.</string> - <string control="Core_btnRemoveWhitelist">Remove the selected extension from the whitelist.</string> - <string control="Core_btnAddWhitelist">Add the entered extension to the whitelist.</string> - <string control="Core_txtWhitelist">Enter an extension to add to the whitelist.</string> - <string control="Core_lstWhitelist">This list contains all the current extensions that will be skipped during cleaning.</string> - <string control="Core_chkYAMJCompatibleSets">If enabled, Ember will save sets information in a format that is compatible with YAMJ. If disabled, Ember will save sets information in a format that is compatible with XBMC.</string> - <string control="Core_chkAskCheckboxScrape">If enabled, when clicking on a checkbox in the movies list a non-automatic will be used. If disabled, an automatic scrape will be used.</string> - <string control="Core_chkMarkNew">If enabled, new movies will be "marked". If disabled, new movies will still be colored green until updated or the next Ember session.</string> - <string control="Core_lbGenre">Select the language(s) of the genres you would like Ember to display.</string> - <string control="Core_txtCheckTitleTol">Enter the tolerance level you would like Ember to use when title matching. The higher the number, the more lenient the algorithm is. 0 = disabled</string> - <string control="Core_chkCheckTitles">Enable this to have Ember check the differences between the title of the movie and it's file name. This is useful to make sure that the scraped data is actually for the selected movie file.</string> - <string control="Core_btnRemoveToken">Remove the selected sort token from the list.</string> - <string control="Core_btnAddToken">Add the entered sort token to the list.</string> - <string control="Core_txtSortToken">Enter in a sort token to add to the list.</string> - <string control="Core_lstSortTokens">A list of all current sort tokens. (If the movie title begins with a sort token, then the sort token will be moved to the end. For example: Sort Token = "The", Title = "The Dark Knight", Result = "Dark Knight, The")</string> - <string control="Core_chkDisplayYear">If enabled, Ember will display the year of the movie in the main movie list.</string> - <string control="Core_chkMovieExtraCol">Hide the Extrathumbs column from the main movie list.</string> - <string control="Core_chkMovieSubCol">Hide the Subtitles column from the main movie list.</string> - <string control="Core_chkMovieTrailerCol">Hide the Trailers column from the main movie list.</string> - <string control="Core_chkMovieInfoCol">Hide the Info column from the main movie list.</string> - <string control="Core_chkMovieFanartCol">Hide the Fanart column from the main movie list.</string> - <string control="Core_chkMoviePosterCol">Hide the Poster column from the main movie list.</string> - <string control="Core_chkMovieNameMultiOnly">If enabled, "<movie>.ext" items will only be utilized in folders that have multiple movies. This is useful when you have a mixture of multiple movie and single movie folders and you wish to reduce the number of extra files.</string> - <string control="Core_rbBracketTrailer">Save trailer files as "<movie>[trailer].ext".</string> - <string control="Core_rbDashTrailer">Save trailer files as "<movie>-trailer.ext".</string> - <string control="Core_chkVideoTSParent">If enabled, Ember will save the meta files in the parent directory (YAMJ compatible). If disabled, Ember will save the meta files directly to the VIDEO_TS folder (XBMC compatible). This setting applies to BDMV folders, as well.</string> - <string control="Core_chkMovieNameNFO">Save nfo files as "<movie>.nfo".</string> - <string control="Core_chkMovieNFO">Save nfo files as "movie.nfo".</string> - <string control="Core_chkMovieNameDotFanartJPG">Save fanart files as "<movie>.fanart.jpg".</string> - <string control="Core_chkMovieNameFanartJPG">Save fanart files as "<movie>-fanart.jpg".</string> - <string control="Core_chkFanartJPG">Save fanart files as "fanart.jpg"</string> - <string control="Core_chkFolderJPG">Save poster files as "folder.jpg"</string> - <string control="Core_chkPosterJPG">Save poster files as "poster.jpg"</string> - <string control="Core_chkPosterTBN">Save poster files as "poster.tbn"</string> - <string control="Core_chkMovieNameJPG">Save poster files as "<movie>.jpg"</string> - <string control="Core_chkMovieJPG">Save poster files as "movie.jpg"</string> - <string control="Core_chkMovieNameTBN">Save poster files as "<movie>.tbn"</string> - <string control="Core_chkMovieTBN">Save poster files as "movie.tbn"</string> - <string control="Core_lvMovies">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colID">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colName">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colPath">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colRecur">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colFolder">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_colSingle">The list of all current movie sources. (Paths that will be scanned for movie files)</string> - <string control="Core_btnMovieRem">Remove the selected source(s) from the sources list.</string> - <string control="Core_btnMovieAddFolder">Add a new folder to the sources list.</string> - <string control="Core_txtPosterWidth">Resize poster files to the entered width.</string> - <string control="Core_txtPosterHeight">Resize poster files to the entered height.</string> - <string control="Core_tbPosterQual">Adjust the quality of the poster files. (0 = original quality)</string> - <string control="Core_chkResizePoster">Resize poster files before saving.</string> - <string control="Core_cbPosterSize">Select the preferred poster size you would like to retreive from the image servers. During automatic scrapers, Ember will attempt to find a poster of this size first. If a poster of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkOverwritePoster">If enabled, existing poster files will be overwritten if new ones are selected. If disabled, poster files will only be saved if a current one does not already exist.</string> - <string control="Core_txtFanartWidth">Resize fanart files to the entered width.</string> - <string control="Core_txtFanartHeight">Resize fanart files to the entered height.</string> - <string control="Core_chkFanartOnly">If enabled, Ember will only retrieve fanart of the selected size. (NOTE: If there are no fanart images of the selected size available, no fanart images will be retrieved)</string> - <string control="Core_tbFanartQual">Adjust the quality of the fanart files. (0 = original quality)</string> - <string control="Core_chkResizeFanart">Resize fanart files before saving.</string> - <string control="Core_cbFanartSize">Select the preferred fanart size you would like to retrieve from the image servers. Durint automatic scrapers, Ember will attempt to find a fanart image of this size first. If a fanart image of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkOverwriteFanart">If enabled, existing fanart files will be overwritten if new ones are selected. If disabled, fanart files will only be saved if a current one does not already exist.</string> - <string control="Core_chkNoSaveImagesToNfo">If enabled, Ember will not save URLs to the poster and fanart images in the nfo files. (Recommended for YAMJ compatibility)</string> - <string control="Core_chkSingleScrapeImages">Select images while scraping a single movie file.</string> - <string control="Core_chkUseImgCacheUpdaters">Save images to the image cache when scraping multiple movie files.</string> - <string control="Core_chkPersistImgCache">If enabled, Ember will not clear the image cache between sessions.</string> - <string control="Core_chkUseImgCache">Enable Ember's image cache.</string> - <string control="Core_chkUseETasFA">If enabled and no fanart is available for the selected movie, Ember will use one of the extracted thumbnails as the fanart image.</string> - <string control="Core_chkNoSpoilers">If enabled, extrathumbs will only be extracted from the first half of the movie in order to avoid "spoilers".</string> - <string control="Core_txtAutoThumbs">Enter the number of extrathumbs you would like to automatically generate.</string> - <string control="Core_chkAutoThumbs">If enabled, Ember will automatically extract the entered number of extrathumbs during scraping.</string> - <string control="Core_txtProxyDomain">Enter the domain for your proxy. (Optional - not necessary for most proxies)</string> - <string control="Core_txtProxyPassword">Enter the password needed to access your proxy.</string> - <string control="Core_txtProxyUsername">Enter the username needed to access your proxy.</string> - <string control="Core_chkEnableCredentials">Enable if your proxy requires authentication.</string> - <string control="Core_txtProxyPort">Enter the port needed to access your proxy.</string> - <string control="Core_txtProxyURI">Enter the IP or URL needed to access your proxy.</string> - <string control="Core_chkEnableProxy">If enabled, Ember will use the entered proxy for all internet communications.</string> - <string control="Core_btnDown">Move the selected filter up in the list. (Filters are processed in order from top to bottom)</string> - <string control="Core_btnUp">Move the selected filter down in the list. (Filters are processed in order from top to bottom)</string> - <string control="Core_chkProperCase">Automatically apply proper casing to movie titles. (Example: "the dark knight" becomes "The Dark Knight")</string> - <string control="Core_btnRemoveFilter">Remove the selected filter from the list.</string> - <string control="Core_btnAddFilter">Add the entered filter to the list.</string> - <string control="Core_txtFilter">Enter text or regex to use as a filter. Special: "a[->]b" = replace all occurrances of "a" with "b" (Example: ".[->]_" will replace all periods in the title with underscores.)</string> - <string control="Core_lstFilters">The list of all current filters that will be used when generating titles for movies.</string> - <string control="Core_chkMissingExtra">If enabled, Ember will display movies missing extrathumbs when utilizing the Missing Items Filter.</string> - <string control="Core_chkMissingSubs">If enabled, Ember will display movies missing subtitle files when utilizing the Missing Items Filter.</string> - <string control="Core_chkMissingTrailer">If enabled, Ember will display movies missing trailers when utilizing the Missing Items Filter.</string> - <string control="Core_chkMissingNFO">If enabled, Ember will display movies missing nfo files when utilizing the Missing Items Filter.</string> - <string control="Core_chkMissingFanart">If enabled, Ember will display movies missing fanart when utilizing the Missing Items Filter.</string> - <string control="Core_chkMissingPoster">If enabled, Ember will display movies missing posters when utilizing the Missing Items Filter.</string> - <string control="Core_chkAutoBD">If enabled, Ember will automatically save new fanart images to the entered backdrops folder.</string> - <string control="Core_btnBrowse">Open a folder browser to select a backdrops folder.</string> - <string control="Core_txtBDPath">The path to the backdrops folder.</string> - <string control="Core_btnRemoveNoStack">Remove the selected extension from the No Stack Extensions list.</string> - <string control="Core_btnAddNoStack">Add the entered extension to the No Stack Extensions list.</string> - <string control="Core_txtNoStack">Enter an extension to add to the No Stack Extensions list.</string> - <string control="Core_lstNoStack">The list of extensions Ember will not stack into single files when adding them to the library.</string> - <string control="Core_btnRemMovieExt">Remove the selected extension from the Valid Video Extensions list.</string> - <string control="Core_btnAddMovieExt">Add the entered extension to the Valid Video Extensions list.</string> - <string control="Core_txtMovieExt">Enter an extension to add to the Valid Video Extensions list.</string> - <string control="Core_lstMovieExts">The list of extensions Ember will look for when updating the library.</string> - <string control="Core_btnEditSource">Edit the selected source.</string> - <string control="Core_chkScanOrderModify">If enabled, Ember will add new files in order of there last modified time. If disabled, Ember will add new files to the library in alphabetical order.</string> - <string control="Core_chkSortBeforeScan">If enabled, Ember will sort all single files in the top directory of the source into their own folders.</string> - <string control="Core_chkIgnoreLastScan">If enabled, Ember will scan all folders/files regardless of the last scan time. If disabled, Ember will only scan files/folders added after the last time files were scanned.</string> - <string control="Core_chkCleanDB">If enabled, Ember will clean the movie database after each scan. (Remove entries for files that no longer exist or no longer match selected setting values)</string> - <string control="Core_chkAutoDetectVTS">If enabled, Ember will attempt to recognize VIDEO_TS folders even if the folder is not named "VIDEO_TS". If disabled, Ember will still handle VIDEO_TS folders if the folder is named "VIDEO_TS". This setting also applies to BDMV folders.</string> - <string control="Core_chkSkipStackedSizeCheck">If enabled, Ember will not skip files smaller than the entered "Skip Files Smaller Than" size if they contain stacking markers (such as "CD1" or "DVD2").</string> - <string control="Core_txtSkipLessThan">Ember will use the entered size as the minimum size for movie files. Any files smaller than this will be skipped when updating the library.</string> - <string control="Core_txtTVSkipLessThan">Ember will use the entered size as the minimum size for episode files. Any files smaller than this will be skipped when updating the library.</string> - <string control="Core_cbTrailerQuality">Select the preferred quality of the downloaded trailers.</string> - <string control="Core_chkDeleteAllTrailers">If enabled, Ember will delete all existing trailers for the movie before saving the new one.</string> - <string control="Core_chkOverwriteTrailer">If enabled, existing trailer files will be overwritten when saving new ones. If disabled, new trailer files will only be saved if one does not already exist.</string> - <string control="Core_chkNoDLTrailer">If enabled, trailer files will not be downloaded. Instead, the trailer url will be saved to the nfo.</string> - <string control="Core_chkSingleScrapeTrailer">If enabled, trailers will be downloaded while scraping a single movie.</string> - <string control="Core_chkUpdaterTrailer">If enabled, trailers will be downloaded during "All Items" scrapers.</string> - <string control="Core_chkDownloadTrailer">Enable Ember's trailer support.</string> - <string control="Core_chkAutoETSize">Select the size of the fanart you would like to download as extrathumbs.</string> - <string control="Core_cbAutoETSize">If enabled, Ember will automatically download all fanart of the selected size as extrathumbs.</string> - <string control="Core_txtETWidth">Resize extrathumbs to the entered width.</string> - <string control="Core_txtETHeight">Resize extrathumbs to the entered height.</string> - <string control="Core_chkETPadding">If enabled, Ember will add "black bars" to the edges of the extrathumbs if they are smaller than the entered size.</string> - <string control="Core_rbETCustom">Resize extrathumbs to the entered size, regardless of the native resolution.</string> - <string control="Core_rbETNative">Save extrathumbs using the same resolution as the video.</string> - <string control="Core_lvTVSources">The list of all current TV Show sources. (Paths that will be scanned for TV Show files)</string> - <string control="Core_ColumnHeader1">The list of all current TV Show sources. (Paths that will be scanned for TV Show files)</string> - <string control="Core_ColumnHeader2">The list of all current TV Show sources. (Paths that will be scanned for TV Show files)</string> - <string control="Core_ColumnHeader3">The list of all current TV Show sources. (Paths that will be scanned for TV Show files)</string> - <string control="Core_chkTVScanOrderModify">If enabled, Ember will add new files in order of there last modified time. If disabled, Ember will add new files to the library in alphabetical order.</string> - <string control="Core_chkTVIgnoreLastScan">If enabled, Ember will scan all folders/files regardless of the last scan time. If disabled, Ember will only scan files/folders added after the last time files were scanned.</string> - <string control="Core_chkTVCleanDB">If enabled, Ember will clean the TV Show database after each scan. (Remove entries for files that no longer exist or no longer match selected setting values)</string> - <string control="Core_btnAddTVSource">Add a new folder to the sources list.</string> - <string control="Core_btnEditTVSource">Edit the selected source.</string> - <string control="Core_btnRemTVSource">Remove the selected source(s) from the sources list.</string> - <string control="Core_chkSeasonAllJPG">Save All Seasons poster files as "season-all.jpg".</string> - <string control="Core_chkSeasonAllTBN">Save All Seasons poster files as "season-all.tbn".</string> - <string control="Core_chkEpisodeDotFanart">Save episode fanart files as "<episode>.fanart.jpg".</string> - <string control="Core_chkEpisodeDashFanart">Save episode fanart files as "<episode>-fanart.jpg".</string> - <string control="Core_chkEpisodeJPG">Save episode poster files as "<episode>.jpg".</string> - <string control="Core_chkEpisodeTBN">Save episode poster files as "<episode>.tbn".</string> - <string control="Core_chkSeasonDotFanart">Save season fanart files as "<season>.fanart.jpg". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonDashFanart">Save season fanart files as "<season>-fanart.jpg". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonFanartJPG">Save season fanart files as "fanart.jpg". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonFolderJPG">Save season fanart files as "folder.jpg". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonNameJPG">Save season poster files as "<season>.jpg". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonNameTBN">Save season poster files as "<season>.tbn". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonPosterJPG">Save season poster files as "poster.jpg". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonPosterTBN">Save season poster files as "poster.tbn". (Will only save inside the season directory, if it exists)</string> - <string control="Core_chkSeasonXTBN">Save season poster files as "seasonX.tbn". (Example: season2.tbn)</string> - <string control="Core_chkSeasonXXTBN">Save season poster files as "seasonXX.tbn". (Example: season02.tbn)</string> - <string control="Core_chkShowDotFanart">Save show fanart files as "<show>.fanart.jpg".</string> - <string control="Core_chkShowDashFanart">Save show fanart files as "<show>-fanart.jpg".</string> - <string control="Core_chkShowFanartJPG">Save show fanart files as "fanart.jpg".</string> - <string control="Core_chkShowJPG">Save show poster files as "<show>.jpg".</string> - <string control="Core_chkShowTBN">Save show poster files as "<show>.tbn".</string> - <string control="Core_chkShowPosterJPG">Save show poster files as "poster.jpg".</string> - <string control="Core_chkShowPosterTBN">Save show poster files as "poster.tbn".</string> - <string control="Core_chkShowFolderJPG">Save show poster files as "folder.jpg".</string> - <string control="Core_btnAddShowRegex">Add the entered regex to the TV Show Regex list.</string> - <string control="Core_txtSeasonRegex">Enter the regex to use to detect the season number.</string> - <string control="Core_cboSeasonRetrieve">Choose if you would like to process the season regex against the directory name or the episode file name.</string> - <string control="Core_txtEpRegex">Enter the regex to use to detect the episode number.</string> - <string control="Core_cboEpRetrieve">Choose if you would like to process the episode regex against the directory name, the episode file name, or the results of the season regex.</string> - <string control="Core_btnEditShowRegex">Edit the selected TV Show regex.</string> - <string control="Core_btnRemoveShowRegex">Remove the selected TV Show regex from the list.</string> - <string control="Core_lvShowRegex">The list of current TV Show regex.</string> - <string control="Core_colRegID">The list of current TV Show regex.</string> - <string control="Core_colSeason">The list of current TV Show regex.</string> - <string control="Core_colSeasonApply">The list of current TV Show regex.</string> - <string control="Core_colEpisode">The list of current TV Show regex.</string> - <string control="Core_colEpApply">The list of current TV Show regex.</string> - <string control="Core_chkDisplayMissingEpisodes">If enabled, episodes that are missing from your collection will be displayed in the episode list, but will be colored a light gray.</string> - <string control="Core_chkEpisodeNfoCol">Hide the Info column from the episode list.</string> - <string control="Core_chkEpisodeFanartCol">Hide the Fanart column from the episode list.</string> - <string control="Core_chkEpisodePosterCol">Hide the Poster column from the episode list.</string> - <string control="Core_chkSeasonFanartCol">Hide the Fanart column from the season list.</string> - <string control="Core_chkSeasonPosterCol">Hide the Poster column from the poster list.</string> - <string control="Core_chkShowNfoCol">Hide the Info column from the show list.</string> - <string control="Core_chkShowFanartCol">Hide the Fanart column from the show list.</string> - <string control="Core_chkShowPosterCol">Hide the Poster column from the show list.</string> - <string control="Core_chkDisplayAllSeason">If enabled, if an All Season poster exists for the selected show, it will be displayed on the right of the interface.</string> - <string control="Core_cbRatingRegion">Select the region of the ratings you would like to display in the interface.</string> - <string control="Core_chkNoFilterEpisode">If enabled, Ember will not attempt to filter episode file names for titles and instead will build them from the show name, season, and episode until a proper title has been fetched.</string> - <string control="Core_btnEpFilterDown">Move the selected filter up in the list. (Filters are processed in order from top to bottom)</string> - <string control="Core_btnEpFilterUp">Move the selected filter down in the list. (Filters are processed in order from top to bottom)</string> - <string control="Core_chkEpProperCase">Automatically apply proper casing to episode titles. (Example: "stole beer from golfer" becomes "Stole Beer From Golfer")</string> - <string control="Core_btnRemoveEpFilter">Remove the selected filter from the filter list.</string> - <string control="Core_btnAddEpFilter">Add the entered filter to the filter list.</string> - <string control="Core_txtEpFilter">Enter a filter to add to the filter list.</string> - <string control="Core_lstEpFilters">The list of all current filters that will be used when generating titles for episodes.</string> - <string control="Core_btnShowFilterDown">Move the selected filter up in the list. (Filters are processed in order from top to bottom)</string> - <string control="Core_btnShowFilterUp">Move the selected filter down in the list. (Filters are processed in order from top to bottom)</string> - <string control="Core_chkShowProperCase">Automatically apply proper casing to episode titles. (Example: "my name is earl" becomes "My Name is Earl")</string> - <string control="Core_btnRemoveShowFilter">Remove the selected filter from the filter list.</string> - <string control="Core_btnAddShowFilter">Add the entered filter to the filter list.</string> - <string control="Core_txtShowFilter">Enter a filter to add to the filter list.</string> - <string control="Core_lstShowFilters">The list of all current filters that will be used when generating titles for shows.</string> - <string control="Core_chkGetEnglishImages">If enabled, all English images will be retrieved, regardless of the selected language.</string> - <string control="Core_chkOnlyTVImagesLanguage">If enabled, only images for the preferred language will be retrieved.</string> - <string control="Core_txtShowPosterWidth">Resize show poster files to the entered width.</string> - <string control="Core_txtShowPosterHeight">Resize show poster files to the entered height.</string> - <string control="Core_tbShowPosterQual">Adjust the quality of the show poster files. (0 = original quality)</string> - <string control="Core_chkResizeShowPoster">Resize show poster files before saving.</string> - <string control="Core_cbShowPosterSize">Select the preferred show poster type you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a poster of this type first. If a poster of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkOverwriteShowPoster">If enabled, existing show poster files will be overwritten if new ones are selected. If disabled, show poster files will only be saved if a current one does not already exist.</string> - <string control="Core_txtShowFanartWidth">Resize show fanart files to the entered width.</string> - <string control="Core_txtShowFanartHeight">Resize show fanart files to the entered height.</string> - <string control="Core_tbShowFanartQual">Adjust the quality of the show fanart files. (0 = original quality)</string> - <string control="Core_chkResizeShowFanart">Resize show fanart files before saving.</string> - <string control="Core_cbShowFanartSize">Select the preferred fanart size you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a fanart image of this size first. If a fanart image of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkOverwriteShowFanart">If enabled, existing show fanart files will be overwritten if new ones are selected. If disabled, show fanart files will only be saved if a current one does not already exist.</string> - <string control="Core_txtSeaPosterWidth">Resize season poster files to the entered width.</string> - <string control="Core_txtSeaPosterHeight">Resize season poster files to the entered height.</string> - <string control="Core_tbSeaPosterQual">Adjust the quality of the season poster files. (0 = original quality)</string> - <string control="Core_chkSeaResizePoster">Resize season poster files before saving.</string> - <string control="Core_cbSeaPosterSize">Select the preferred season poster type you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a poster of this type first. If a poster of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkSeaOverwritePoster">If enabled, existing season poster files will be overwritten if new ones are selected. If disabled, season poster files will only be saved if a current one does not already exist.</string> - <string control="Core_txtSeaFanartWidth">Resize season fanart files to the entered width.</string> - <string control="Core_txtSeaFanartHeight">Resize season fanart files to the entered height.</string> - <string control="Core_tbSeaFanartQual">Adjust the quality of the season fanart files. (0 = original quality)</string> - <string control="Core_chkSeaResizeFanart">Resize season fanart files before saving.</string> - <string control="Core_cbSeaFanartSize">Select the preferred fanart size you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a fanart image of this size first. If a fanart image of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkSeaOverwriteFanart">If enabled, existing season fanart files will be overwritten if new ones are selected. If disabled, season fanart files will only be saved if a current one does not already exist.</string> - <string control="Core_txtEpPosterWidth">Resize episode poster files to the entered width.</string> - <string control="Core_txtEpPosterHeight">Resize episode poster files to the entered height.</string> - <string control="Core_tbEpPosterQual">Adjust the quality of the episode poster files. (0 = original quality)</string> - <string control="Core_chkResizeEpPoster">Resize episode poster files before saving.</string> - <string control="Core_chkOverwriteEpPoster">If enabled, existing episode poster files will be overwritten if new ones are selected. If disabled, episode poster files will only be saved if a current one does not already exist.</string> - <string control="Core_txtEpFanartWidth">Resize episode fanart files to the entered width.</string> - <string control="Core_txtEpFanartHeight">Resize episode fanart files to the entered height.</string> - <string control="Core_tbEpFanartQual">Adjust the quality of the episode fanart files. (0 = original quality)</string> - <string control="Core_chkResizeEpFanart">Resize episode fanart files before saving.</string> - <string control="Core_cbEpFanartSize">Select the preferred fanart size you would like to retreive from the image servers. During the show scraper, Ember will attempt to find a fanart image of this size first. If a fanart image of the selected size cannot be found, the first available image will be used instead.</string> - <string control="Core_chkOverwriteEpFanart">If enabled, existing episode fanart files will be overwritten if new ones are selected. If disabled, episode fanart files will only be saved if a current one does not already exist.</string> - <string control="Core_chkScraperShowRating">Enable scraping show rating.</string> - <string control="Core_chkScraperShowActors">Enable scraping show actors.</string> - <string control="Core_chkScraperShowStudio">Enable scraping show studios.</string> - <string control="Core_chkScraperShowPremiered">Enable scraping show premiered date.</string> - <string control="Core_chkScraperShowEGU">Enable scraping the Episode Guide URL.</string> - <string control="Core_chkScraperShowMPAA">Enable scraping show MPAA.</string> - <string control="Core_chkScraperShowPlot">Enable scraping show plot.</string> - <string control="Core_chkScraperShowGenre">Enable scraping show genre.</string> - <string control="Core_chkScraperShowTitle">Enable scraping show title.</string> - <string control="Core_chkScraperEpActors">Enable scraping episode actors.</string> - <string control="Core_chkScraperEpCredits">Enable scraping episode credits.</string> - <string control="Core_chkScraperEpDirector">Enable scraping episode directors.</string> - <string control="Core_chkScraperEpPlot">Enable scraping episode plot.</string> - <string control="Core_chkScraperEpRating">Enable scraping episode rating.</string> - <string control="Core_chkScraperEpAired">Enable scraping episode aired date.</string> - <string control="Core_chkScraperEpTitle">Enable scraping episode title.</string> - <string control="Core_chkScraperEpEpisode">Enable scraping episode number.</string> - <string control="Core_chkScraperEpSeason">Enable scraping season number.</string> - <string control="Core_chkEpLockTitle">If enabled, the episode title will only be scraped if a current one does not exist.</string> - <string control="Core_chkEpLockRating">If enabled, the episode rating will only be scraped if a current one does not exist.</string> - <string control="Core_chkEpLockPlot">If enabled, the episode plot will only be scraped if a current one does not exist.</string> - <string control="Core_chkShowLockPlot">If enabled, the show plot will only be scraped if a current one does not exist.</string> - <string control="Core_chkShowLockGenre">If enabled, the show genre will only be scraped if a current one does not exist.</string> - <string control="Core_chkShowLockStudio">If enabled, the show studio will only be scraped if a current one does not exist.</string> - <string control="Core_chkShowLockRating">If enabled, the show rating will only be scraped if a current one does not exist.</string> - <string control="Core_chkShowLockTitle">If enabled, the show title will only be scraped if a current one does not exist.</string> - <string control="Core_lstTVMetaData">The list of extensions that have default meta data entries.</string> - <string control="Core_txtTVDefFIExt">Enter an extension to create a default meta data entry.</string> - <string control="Core_btnRemoveTVMetaDataFT">Remove the default meta data for the selected extension from the default meta data list.</string> - <string control="Core_btnEditTVMetaDataFT">Edit the default meta data for the selected extension in the default meta data list.</string> - <string control="Core_btnNewTVMetaDataFT">Create default meta data for the entered extension and add the to the default meta data list.</string> - <string control="Core_cboTVMetaDataOverlay">If the selected language is found in the episode, a special icon indicator will be overlayed on the meta data audio icon.</string> - <string control="Core_chkTVScanMetaData">If enabled, Ember will scan episode files for meta data.</string> - <string control="Core_cboTVUpdate">Select the time to wait between updating cached TV information files.</string> - <string control="Core_txtAPIKey">Enter the TVDB API Key of the media center/player you use. This is not necessary for Ember to function. It is only used when saving the Episode Guide URL to the nfo.</string> - <string control="Core_txtTVDBMirror">Enter the mirror to use when retrieving information from theTVDB.</string> - <string control="Core_btnTVLanguageFetch">Click to download all available languages from theTVDB.</string> - <string control="Core_cbTVLanguage">Select the preferred language to use when downloading show information and images.</string> - <string control="Core_chkCertification">Enable scraping movie certification.</string> - <string control="Core_chkTop250">Enable scraping movie Top 250 ranking.</string> - <string control="Core_chkCountry">Enable scraping movie production country.</string> - <string control="Core_txtGenreLimit">Limit the number of scraped genres to the entered value.</string> - <string control="Core_txtActorLimit">Limit the number of scraped actors to the entered value.</string> - <string control="Core_chkCrew">Enable scraping movie other crew. (Scrape Full Crew must be enabled)</string> - <string control="Core_chkMusicBy">Enable scraping movie musicians. (Scrape Full Crew must be enabled)</string> - <string control="Core_chkProducers">Enable scraping movie producers. (Scrape Full Crew must be enabled)</string> - <string control="Core_chkWriters">Enable scraping movie writers.</string> - <string control="Core_chkStudio">Enable scraping movie studio.</string> - <string control="Core_chkRuntime">Enable scraping movie runtime.</string> - <string control="Core_chkPlot">Enable scraping movie plot.</string> - <string control="Core_chkOutline">Enable scraping movie outline.</string> - <string control="Core_chkGenre">Enable scraping movie genre.</string> - <string control="Core_chkDirector">Enable scraping movie director.</string> - <string control="Core_chkTagline">Enable scraping movie tagline.</string> - <string control="Core_chkCast">Enable scraping movie cast.</string> - <string control="Core_chkVotes">Enable scraping movie votes.</string> - <string control="Core_chkTrailer">Enable scraping movie trailer url.</string> - <string control="Core_chkRating">Enable scraping movie rating.</string> - <string control="Core_chkRelease">Enable scraping movie release date.</string> - <string control="Core_chkMPAA">Enable scraping movie MPAA.</string> - <string control="Core_chkYear">Enable scraping movie year.</string> - <string control="Core_chkTitle">Enable scraping movie title.</string> - <string control="Core_lstMetaData">The list of extensions that have default meta data entries.</string> - <string control="Core_txtDefFIExt">Enter an extension to create a default meta data entry.</string> - <string control="Core_btnRemoveMetaDataFT">Remove the default meta data for the selected extension from the default meta data list.</string> - <string control="Core_btnEditMetaDataFT">Edit the default meta data for the selected extension in the default meta data list.</string> - <string control="Core_btnNewMetaDataFT">Create default meta data for the entered extension and add the to the default meta data list.</string> - <string control="Core_chkIFOScan">If enabled, Ember will process *.ifo files for meta data information.</string> - <string control="Core_cbLanguages">If the selected language is found in the movie, a special icon indicator will be overlayed on the meta data audio icon.</string> - <string control="Core_txtRuntimeFormat">Enter the format you wish to use for the movie duration retrieved from scanning meta data. Note you can also use <0m> for 0 padding minutes</string> - <string control="Core_chkScanMediaInfo">If enabled, Ember will scan movie files for meta data.</string> - <string control="Core_chkUseMIDuration">Use the movie duration retrieved from scanning meta data as the runtime of the movie.</string> - <string control="Core_chkLockOutline">If enabled, the movie outline will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockPlot">If enabled, the movie plot will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockTrailer">If enabled, the URL movie trailer will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockGenre">If enabled, the movie genre will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockRealStudio">If enabled, the movie studio will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockRating">If enabled, the movie rating will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockTagline">If enabled, the movie tagline will only be scraped if a current one does not exist.</string> - <string control="Core_chkLockTitle">If enabled, the movie title will only be scraped if a current one does not exist.</string> - <string control="Core_cbForce">Select the region of the title you would like Ember to look for.</string> - <string control="Core_chkForceTitle">If enabled, Ember will check for alternative titles in the selected language. This is useful for fetching titles in your native language when scraping foreign films.</string> - <string control="Core_chkOutlineForPlot">If enabled, Ember will use the outline for the plot if the plot is empty.</string> - <string control="Core_chkCastWithImg">If enabled, Ember will only scrape cast entries that have valid images.</string> - <string control="Core_chkUseCertForMPAA">If enabled, Ember will use the certifcation of the selected region in place of the MPAA rating.</string> - <string control="Core_chkFullCast">If enabled, all cast members will be scraped instead of only top billed.</string> - <string control="Core_chkFullCrew">If enabled, all crew members will be scraped (if individually enabled).</string> - <string control="Core_cbCert">Select the region to filter certification ratings.</string> - <string control="Core_chkCert">Only scrape the certificaton rating for the selected region.</string> - <string control="Core_chkMarkNewShows">If enabled, new shows will be "marked". If disabled, new shows will still be colored green until updated or the next Ember session.</string> - <string control="Core_chkMarkNewEpisodes">If enabled, new episodes will be "marked". If disabled, new episodes will still be colored green until updated or the next Ember session.</string> - <string control="Core_cbOrdering">Select the default ordering Ember will use when scraping information for a show.</string> - <string control="Core_chkOnlyValueForCert">If enabled, Ember will only save the value of the certification to the MPAA field. (Example: "Germany:18" will save as "18")</string> - <string control="Core_rbBanner">If enabled, Ember will attempt to download a banner (wide) image of the selected type as the default show poster.</string> - <string control="Core_rbPoster">If enabled, Ember will attempt to download a poster image of the selected type as the default show poster.</string> - <string control="Core_btnResetShowFilters">This will reset the show filters to the default list. WARNING: This WILL delete any custom filters you have entered.</string> - <string control="Core_btnResetEpFilter">This will reset the episode filters to the default list. WARNING: This WILL delete any custom filters you have entered.</string> - <string control="Core_btnResetMovieFilters">This will reset the movie filters to the default list. WARNING: This WILL delete any custom filters you have entered.</string> - <string control="Core_btnResetValidExts">This will reset the valid extensions to the default list. WARNING: This WILL delete any custom extensions you have entered.</string> - <string control="Core_ResetShowRegex">This will reset the show regex to the default list. WARNING: This WILL delete any custom regex you have entered.</string> - <string control="Core_chkClickScrape">Enable Click Scrape on main screen column marks.</string> -</strings> \ No newline at end of file diff --git "a/Ember Media Manager/Langs/Portugu\303\252s_(pt_BR).xml" "b/Ember Media Manager/Langs/Portugu\303\252s_(pt_BR).xml" deleted file mode 100644 index 387f3e7..0000000 --- "a/Ember Media Manager/Langs/Portugu\303\252s_(pt_BR).xml" +++ /dev/null @@ -1,856 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<strings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <string id="1">&Arquivo</string> - <string id="2">S&air</string> - <string id="3">&Editar</string> - <string id="4">&Configurações</string> - <string id="5">&Ajuda</string> - <string id="6">&Sobre...</string> - <string id="7">Carregando Mídia:</string> - <string id="8">&Ferramentas</string> - <string id="9">&Limpar Arquivos</string> - <string id="10">&Ordenar Arquivos Dentro das Pastas</string> - <string id="11">Copiar Fanart Existente para &Pasta Backdrops</string> - <string id="12">Reverter as informações do Estúdio</string> - <string id="13">Nome da Pasta</string> - <string id="14">Criar &Coletânea</string> - <string id="15">Nome do Arquivo</string> - <string id="16">Resultado</string> - <string id="17">Limpar &Toda a Memória</string> - <string id="18">Re&carregar Todos os Filmes</string> - <string id="19">Fechar</string> - <string id="20">Gêneros</string> - <string id="21">Título</string> - <string id="22">Recarregar</string> - <string id="23">Marcar</string> - <string id="24">Travar</string> - <string id="25">Editar o Filme</string> - <string id="26">Detalhes</string> - <string id="27">>> Selecione Gênero <<</string> - <string id="28">Adicionar</string> - <string id="29">Definir</string> - <string id="30">Remover</string> - <string id="31">Procurar Filmes Selecionados</string> - <string id="32">Alterar Filme</string> - <string id="33">Abrir a Pasta do Filme</string> - <string id="34">Deletar o Filme</string> - <string id="35">Marcar Todos</string> - <string id="36">Filmes</string> - <string id="37">Limpar Filtros</string> - <string id="38">Geral</string> - <string id="39">Fora da Tolerância</string> - <string id="40">Faltando Itens</string> - <string id="41">Duplicados</string> - <string id="42">Específico</string> - <string id="43">Travados</string> - <string id="44"></string> - <string id="45">e</string> - <string id="46">ou</string> - <string id="47">Novos</string> - <string id="48">Marcados</string> - <string id="49">Ano:</string> - <string id="50">Fonte:</string> - <string id="51">Gênero:</string> - <string id="52">Filtros</string> - <string id="53">Cancelando a Busca...</string> - <string id="54">Cancelar a Busca</string> - <string id="55">Não Existe Informação Disponível Para Este Filme</string> - <string id="56">Certificação</string> - <string id="57">Lançamento</string> - <string id="58">Atualizar</string> - <string id="59">Metadados do Arquivo</string> - <string id="60">Caminho Completo Para o Arquivo</string> - <string id="61">IMDB ID</string> - <string id="62">Diretor</string> - <string id="63">Elenco</string> - <string id="64">Resumo</string> - <string id="65">Sinopse</string> - <string id="66">Informações</string> - <string id="67">Buscar Mídia</string> - <string id="68">Todos os Filmes</string> - <string id="69">Automático (Forçar o Melhor Resultado)</string> - <string id="70">Todos os Itens</string> - <string id="71">Somente NFO</string> - <string id="72">Somente Poster</string> - <string id="73">Somente Fanart</string> - <string id="74">Somente Extrathumbs</string> - <string id="75">Somente Trailer (URL)</string> - <string id="76">Somente Metadados do Arquivo</string> - <string id="77">Perguntar (Caso Não Ache o Melhor Resultado)</string> - <string id="78">Filmes Faltando Itens</string> - <string id="79">Novos Filmes</string> - <string id="80">Filmes Marcados</string> - <string id="81">Busca Personalizada...</string> - <string id="82">Atualizar Biblioteca</string> - <string id="83">Programas</string> - <string id="84">Buscar/Baixar os dados dos filmes usando o modo automático.</string> - <string id="85">Adicionar novos conteúdos e ou atualizar o banco de dados.</string> - <string id="86">Enviar um comando para o XBMC para iniciar processo de atualização da biblioteca.</string> - <string id="87">Marcar ou desmarcar todos os filmes da lista.</string> - <string id="88">Digite neste campo o que deseja pesquisar.</string> - <string id="89">Reproduzir o arquivo do filme com o media play padrão do sistema.</string> - <string id="90">Reescaneia e salva os metadados do filme selecionado.</string> - <string id="91">Mostra os filmes com as IDs do IMDb duplicadas.</string> - <string id="92">Mostra só os filmes cujo título correspondente está fora da tolerância.</string> - <string id="93">Mostra filmes faltando itens</string> - <string id="94">Mostra os filmes atualizados nesta sessão.</string> - <string id="95">Mostra os filmes marcados</string> - <string id="96">Mostra os filmes travados</string> - <string id="97">Mostra os filmes da fonte escolhida</string> - <string id="98">Selecionar Gênero...</string> - <string id="99">Cancelando Todos os Processos...</string> - <string id="100">Ator</string> - <string id="101">Você tem certeza que quer continuar?</string> - <string id="102">AVISO: Se você continuar, todos os tipos de arquivo protegidos não serão excluídos.</string> - <string id="103">AVISO: Se você continuar, todos os arquivos dos seguintes tipos serão excluídos permanentemente:</string> - <string id="104">Você tem certeza?</string> - <string id="105">Desmarcar todas</string> - <string id="106">>> Multiplos <<</string> - <string id="107">Desmarcar</string> - <string id="108">Destravar</string> - <string id="109">AVISO: Isso vai apagar o filme selecionado do disco rígido</string> - <string id="110">Atualizando mídia:</string> - <string id="111">Não é possível carregar os diretórios. Verifique as configurações.</string> - <string id="112">Tempo Total: {0}</string> - <string id="113">Agora, selecione o idioma padrão que você gostaria de Ember para procurar quando buscando por Seriados.</string> - <string id="114">* Isso deve ser habilitado para usar extrathumbs e arquivo de opções de nomes como movie.tbn, fanart.jpg, etc.</string> - <string id="115">Adicione um Regex</string> - <string id="116">Executar tarefas preliminares (Coleta de Dados)...</string> - <string id="117">Filme desconhecido ({0})</string> - <string id="118">{0} Votos</string> - <string id="119">Cancelando limpeza arquivos...</string> - <string id="120">Cancelar Limpeza</string> - <string id="121">Cancelando cópida do Backdrop..</string> - <string id="122">Cancelar Cópia</string> - <string id="123">Limpar</string> - <string id="124">Atualize o Regex</string> - <string id="125">Cancelando a Busca...</string> - <string id="126">Cancelar a Busca</string> - <string id="127">Buscando Mídia (Todos os Filmes - Perguntar):</string> - <string id="128">Buscando Mídia (Todos os Filmes - Auto):</string> - <string id="129">Limpando arquivos:</string> - <string id="130">Copiando Fanart para diretório Backdrops:</string> - <string id="131">{0} como {1}</string> - <string id="132">Buscando Mídia (Filmes faltando itens - Auto):</string> - <string id="133">Buscando Mídia (Filmes faltando itens - Perguntar):</string> - <string id="134">Buscando Mídia (Novos Filmes - Perguntar):</string> - <string id="135">Buscando Mídia (Novos Filmes - Auto):</string> - <string id="136">Buscando Mídia (Filmes Marcados - Perguntar):</string> - <string id="137">Buscando Mídia (Filmes Marcados - Auto):</string> - <string id="138">Buscando Novamente {0}</string> - <string id="139">Buscando:</string> - <string id="140">Buscando Dados dos Arquivos:</string> - <string id="141">Não é possível recuperar detalhes do filme a partir da Internet. Verifique sua conexão e tente novamente.</string> - <string id="142">Erro Recuperando Detalhes</string> - <string id="143">Atualizar somente os Filmes</string> - <string id="144">Atualizar</string> - <string id="145">Só</string> - <string id="146">Buscar Temporada</string> - <string id="147">Buscar Episódio</string> - <string id="148">Poster</string> - <string id="149">Fanart</string> - <string id="150">NFO</string> - <string id="151">Trailer</string> - <string id="152">Legendas</string> - <string id="153">Extrathumbs</string> - <string id="154">Nome do Ator:</string> - <string id="155">Personagem:</string> - <string id="156">Imagem do Ator (URL):</string> - <string id="157">Novo Ator</string> - <string id="158">Editar Ator</string> - <string id="159">URL especificada não é válida.</string> - <string id="160">URL inválida</string> - <string id="161">Por favor entre uma URL para verificar.</string> - <string id="162">Nenhuma URL Thumb específicada</string> - <string id="163">Buscar Informações do Filme</string> - <string id="164">Buscar Filmes Selecionados</string> - <string id="165">Compilando Lista de Filmes...</string> - <string id="166">Cancelando Compilação...</string> - <string id="167">Cancelar</string> - <string id="168">Ordem do Buscador</string> - <string id="169">Travar todos</string> - <string id="170">Destravar todos</string> - <string id="171">Nome:</string> - <string id="172">Descrição:</string> - <string id="173">Addon Versão:</string> - <string id="174">Pasta</string> - <string id="175">Nome do arquivo</string> - <string id="176">Nova Pasta</string> - <string id="177">Novo Filename</string> - <string id="178">Min. Ember Versão:</string> - <string id="179">OK</string> - <string id="180">Prévia</string> - <string id="181">Endereço da Imagem:</string> - <string id="182">Adicionar Manualmente um Fanart</string> - <string id="183">Adicionar Manualmente um Poster</string> - <string id="184">Visualizador de Imagens</string> - <string id="185">Ajustado</string> - <string id="186">Tamanho Real</string> - <string id="187">&Formatar</string> - <string id="188">&Validar o Arquivo</string> - <string id="189">&Salvar</string> - <string id="190">Editor Manual de NFO | </string> - <string id="191">Este não é um documento XML apropriado</string> - <string id="192">Arquivo não é válido.</string> - <string id="193">Arquivo é válido.</string> - <string id="194">Não é Válido</string> - <string id="195">Válido</string> - <string id="196">Você quer salvar as mudanças?</string> - <string id="197">Gravar?</string> - <string id="198">Fonte do Filme</string> - <string id="199">Nome da Fonte:</string> - <string id="200">Pasta da Fonte:</string> - <string id="201">Opções da Fonte:</string> - <string id="202">Apenas detectar um filme por pasta*</string> - <string id="203">Usar nome da pasta para listagem inicial</string> - <string id="204">Buscar Recursivamente</string> - <string id="205">Selecione a pasta superior para suas pastas de filmes / arquivos.</string> - <string id="206">Nome da Coletânea:</string> - <string id="207">Editar a Coletânea</string> - <string id="208">Adicionar Nova Coletânea</string> - <string id="209">Uma nova versão está disponível</string> - <string id="210">Falhou em carregar atualização do aplicativo</string> - <string id="211">Clique aqui</string> - <string id="212">para visitar embermm.com</string> - <string id="213">Ordenar arquivos dentro do diretório</string> - <string id="214">Ir</string> - <string id="215">Status</string> - <string id="216">Coloque o caminho e pressione "Ir" para iniciar.</string> - <string id="217">Pasta para ordenar:</string> - <string id="218">Selecione a pasta que contém os arquivos que você deseja ordenar.</string> - <string id="219">Movendo </string> - <string id="220">ATENÇÃO: Se você continuar, todos os arquivos serão ordenados em pastas separadas.</string> - <string id="221">A pasta que você digitou não existe. Por favor, digite um caminho válido.</string> - <string id="222">Pasta não encontrada</string> - <string id="223">Selecionar o Estúdio</string> - <string id="224">Edita os detalhes do filme selecionado.</string> - <string id="225">Trailer Local Encontrado</string> - <string id="226">Estúdio:</string> - <string id="227">URL do Trailer:</string> - <string id="228">Créditos:</string> - <string id="229">Descrição da Classificação Indicativa:</string> - <string id="230">Edição Manual</string> - <string id="231">Atores:</string> - <string id="232">Nome</string> - <string id="233">Personagem</string> - <string id="234">Thumb</string> - <string id="235">Classif. Indicat.:</string> - <string id="236">Lançamento:</string> - <string id="237">Certificação:</string> - <string id="238">Duração:</string> - <string id="239">Diretor:</string> - <string id="240">Top 250:</string> - <string id="241">Sinopse:</string> - <string id="242">Resumo:</string> - <string id="243">Tagline:</string> - <string id="244">Votos:</string> - <string id="245">Avaliação:</string> - <string id="246">Título:</string> - <string id="247">Remover Poster</string> - <string id="248">Alterar Poster (Buscador)</string> - <string id="249">Alterar Poster (Procura Local)</string> - <string id="250">Remover Fanart</string> - <string id="251">Alterar Fanart (Buscador)</string> - <string id="252">Alterar Fanart (Procura Local)</string> - <string id="253">Você tem arquivos extrathumbs para serem transferidos para a pasta do filme.</string> - <string id="254">Transferir Agora</string> - <string id="255">Definir como Fanart</string> - <string id="256">Extrair Imagem</string> - <string id="257">Max. Ember Version:</string> - <string id="258">Categoria:</string> - <string id="259">Pasta para a nova imagem:</string> - <string id="260">Atual Screen Shot:</string> - <string id="261">Imagem Screen Shot deve ser no formato JPEG, igual ou menor que 150 KB em tamanho, e igual ou menor que 133x95 na dimensão.</string> - <string id="262">Versão:</string> - <string id="263">Instalado:</string> - <string id="264">Limpar Cache</string> - <string id="265">Alterar Poster (Baixar)</string> - <string id="266">Alterar Fanart (Baixar)</string> - <string id="267">Master.eLang.GetString(148, "Um ou mais recursos de cache está atualmente em uso e não pode ser excluída no momento.</string> - <string id="268">Não posso limpar cache</string> - <string id="269">Tamanho: {0}x{1}</string> - <string id="270">O trailer não pôde ser reproduzido. Isto pode ser devido a um URL inválido ou você não tem o codec ou o player apropriado para reproduzir o arquivo.</string> - <string id="271">Erro ao rodar o Trailer</string> - <string id="272">Arquivo Addon</string> - <string id="273">Salvar</string> - <string id="274">Renovar</string> - <string id="275">Filtro</string> - <string id="276">Aplicar</string> - <string id="277">Novo Addon</string> - <string id="278">Ano</string> - <string id="279">Editar Addon - </string> - <string id="280">Addon Arquivos</string> - <string id="281">Video</string> - <string id="282">Audio</string> - <string id="283">Desconhecido</string> - <string id="284">Cancelado</string> - <string id="285">Addons</string> - <string id="286">Login</string> - <string id="287">Login para o servidor</string> - <string id="288">Buscando "{0}" Addons...</string> - <string id="289">Logando em...</string> - <string id="290">Traduções</string> - <string id="291">Modelos</string> - <string id="292">Entrada Inválida</string> - <string id="293">Outro</string> - <string id="294">Criar Novo</string> - <string id="295">Deletar Addon</string> - <string id="296">Para continuar com a exclusão, você precisa confirmar que você é o proprietário do Addon.</string> - <string id="297">Confirme Propriedade</string> - <string id="298">Restarte Administrador do Media Manager?</string> - <string id="299">Recente alterações requerem um reinício do Ember Media Manager para completar.\n\nVocê gostaria de reiniciar o Ember Media Manager agora?</string> - <string id="300">Sim</string> - <string id="301">País</string> - <string id="302">Título Original</string> - <string id="303"></string> - <string id="304"></string> - <string id="305"></string> - <string id="306"></string> - <string id="307"></string> - <string id="308"></string> - <string id="309"></string> - <string id="310"></string> - <string id="311"></string> - <string id="312"></string> - <string id="313"></string> - <string id="314"></string> - <string id="315"></string> - <string id="316"></string> - <string id="317"></string> - <string id="318"></string> - <string id="319"></string> - <string id="320"></string> - <string id="321"></string> - <string id="322">Extra Grande</string> - <string id="323">Grande</string> - <string id="324">Médio</string> - <string id="325">Pequeno</string> - <string id="326"></string> - <string id="327"></string> - <string id="328"></string> - <string id="329"></string> - <string id="330"></string> - <string id="331"></string> - <string id="332"></string> - <string id="333"></string> - <string id="334"></string> - <string id="335"></string> - <string id="336"></string> - <string id="337"></string> - <string id="338"></string> - <string id="339"></string> - <string id="340"></string> - <string id="341"></string> - <string id="342"></string> - <string id="343"></string> - <string id="344"></string> - <string id="345"></string> - <string id="346"></string> - <string id="347"></string> - <string id="348"></string> - <string id="349"></string> - <string id="350">DVD</string> - <string id="351">Invalido</string> - <string id="352"></string> - <string id="353"></string> - <string id="354"></string> - <string id="355">Existe</string> - <string id="356"></string> - <string id="357"></string> - <string id="358"></string> - <string id="359"></string> - <string id="360"></string> - <string id="361">Finalizado</string> - <string id="362">Pronto</string> - <string id="363"></string> - <string id="364"></string> - <string id="365">Criar Coletânea</string> - <string id="366">Coletâneas</string> - <string id="367">Filmes na Coletânea</string> - <string id="368">Nenhum Selecionado</string> - <string id="369">Carregando filmes e conjuntos...</string> - <string id="370">Cancelado Carregamento...</string> - <string id="371">Adicione e configure filmes em coletâneas.</string> - <string id="372"></string> - <string id="373">Baixar</string> - <string id="374"></string> - <string id="375"></string> - <string id="376"></string> - <string id="377"></string> - <string id="378"></string> - <string id="379"></string> - <string id="380"></string> - <string id="381"></string> - <string id="382"></string> - <string id="383"></string> - <string id="384">Personalizar a Busca</string> - <string id="385">Cria uma Busca Personalizada</string> - <string id="386">Seleção de Filtro</string> - <string id="387">Modo de Atualizar</string> - <string id="388">Modificadores</string> - <string id="389">Início</string> - <string id="390">Opções</string> - <string id="391">Outros</string> - <string id="392">Músicos</string> - <string id="393">Produtores</string> - <string id="394">Escritores</string> - <string id="395">Estúdio</string> - <string id="396">Duração</string> - <string id="397">Tagline</string> - <string id="398">Elenco</string> - <string id="399">Votos</string> - <string id="400">Avaliação</string> - <string id="401">Classif. Indicat.</string> - <string id="402">Assistente de Inicialização</string> - <string id="403">< Voltar</string> - <string id="404">Próximo ></string> - <string id="405">Bem-vindo ao Ember Media Manager</string> - <string id="406">DICA: Seleções contendo o texto <filme> significa que o Ember Media Manager irá usar o nome do arquivo para o filme.</string> - <string id="407">Adicionar Fonte</string> - <string id="408">Não foi difícil, foi? Como mencionado anteriormente, você pode alterar essas ou quaisquer outras opções na caixa de diálogo Configurações.</string> - <string id="409">É isso!{0}Ember Media Manager está pronto!</string> - <string id="410">Pasta</string> - <string id="411">Recursivo</string> - <string id="412">Usar Nome da Pasta</string> - <string id="413">Apenas um Vídeo</string> - <string id="414">Primeiro, vamos dizer Ember Media Manager onde localizar todos os seus filmes. Você pode adicionar tantas como fontes como você deseja.</string> - <string id="415">Esta é a primeira vez que abriu o Ember Media Manager ou atualizou para uma versão mais recente. Existem algumas coisas que Ember Media Manager precisa saber para funcionar corretamente. Este assistente o guiará através da configuração do Ember Media Manager. {0} {0} Apenas um punhado de configurações serão abordadas neste assistente. Você pode alterar estes ou qualquer outra definição a qualquer momento, selecionando "Configurações ..." a partir do menu "Editar.</string> - <string id="416">Agora que Ember Media Manager sabe onde procurar os arquivos, é preciso dizer-lhe que os arquivos a procurar. Basta selecionar qualquer combinação de tipo de arquivos que você deseja Ember Media Manager para carregar e de guardar. Você pode selecionar mais de um de cada seção, se desejar.</string> - <string id="417">Algumas opções que você pode estar interessado em:{0}{0}Filtros Personalizados - Se os arquivos do seu filme tem coisas como "DVDRip", "Blu-Ray", "x264", etc em sua pasta ou nome do arquivo e você deseja filtrar os nomes de ao carregar na lista de mídia, você pode utilizar a opção Custom Filter. O filtro personalizado é RegEx compatível para o máximo de usabilidade {0} {0} Imagens -.. Esta seção permite selecionar os sites que a "raspar" a partir de imagens, bem como seleccionar o tamanho preferido para as imagens Ember Media Manager seleciona {0} {0} Bloqueios - Esta seção lhe permite "bloquear" determinadas informações que ele não é atualizado, mesmo se você raspar novamente o filme. Isso é útil se você editar manualmente o título, esboço, ou parcela de um filme e deseja manter as alterações</string> - <string id="418">Tem certeza que deseja remover as fontes selecionadas? Isto irá remover os filmes a partir destas fontes do banco de dados Ember.</string> - <string id="419">Os metadados ainda não estão disponíveis para este filme. Clique no botão Atualizar desta janela para reescanear e salvar os metadados do filme selecionado.</string> - <string id="420">Configurações</string> - <string id="421">Conexão</string> - <string id="422"></string> - <string id="423"></string> - <string id="424"></string> - <string id="425">Usuário:</string> - <string id="426">Senha:</string> - <string id="427"></string> - <string id="428"></string> - <string id="429">Diversos</string> - <string id="430">Idioma da Interface:</string> - <string id="431">Ativar animação do painel</string> - <string id="432">Procurar por atualizações</string> - <string id="433">Sobrescrever NFOs fora do padrão</string> - <string id="434">(Leia as explicações abaixo)</string> - <string id="435">Criar relatório de erros nos arquivos</string> - <string id="436">Mostrar ícone se o filme possuir o idioma:</string> - <string id="437">Limpar Arquivos</string> - <string id="438">Padrão</string> - <string id="439">Avançado</string> - <string id="440">Proteger Extensões</string> - <string id="441">Extensões Protegidas:</string> - <string id="442">Aviso: usando a limpeza no modo avançado poderá apagar arquivos desejados. Tome cuidado ao usar esta ferramenta.</string> - <string id="443">Baixar Complementos</string> - <string id="444">Arquivo</string> - <string id="445"></string> - <string id="446"></string> - <string id="447">Baixando os Arquivos...</string> - <string id="448"></string> - <string id="449"></string> - <string id="450"></string> - <string id="451">Filtros de Nome de Arquivo e Pasta</string> - <string id="452">Colocar as Primeiras Letras dos Títulos em Maiúsculas</string> - <string id="453">Mostrar o texto do gênero no logo</string> - <string id="454">Filtro de Idioma</string> - <string id="455">Não mostrar fanart</string> - <string id="456">Não mostrar poster</string> - <string id="457">Mostrar dimensões da imagem</string> - <string id="458">Explicações</string> - <string id="459">Marcar Novos Filmes</string> - <string id="460">Opções Para a Listagem dos Títulos</string> - <string id="461">Tolerância de Erros:</string> - <string id="462">Conferir Acerto do Título </string> - <string id="463">Artigos Para Serem Ignorados</string> - <string id="464">Mostrar Ano na Lista de Títulos</string> - <string id="465">Ocultar Coluna de Extrathumbs</string> - <string id="466">Ocultar Coluna de Legendas</string> - <string id="467">Ocultar Coluna de Trailer</string> - <string id="468">Ocultar Coluna de NFO</string> - <string id="469">Ocultar Coluna de Fanart</string> - <string id="470">Ocultar Coluna de Poster</string> - <string id="471">Nome dos Arquivos</string> - <string id="472">Usar <filme> para pastas com múltiplos filmes</string> - <string id="473">YAMJ Compatible VIDEO_TS File Placement/Naming</string> - <string id="474"></string> - <string id="475"></string> - <string id="476"></string> - <string id="477"></string> - <string id="478">Qualidade:</string> - <string id="479">Largura:</string> - <string id="480">Altura:</string> - <string id="481">Redimensionar Automaticamente:</string> - <string id="482">Tamanho Preferido:</string> - <string id="483">Sobrescrever Existentes</string> - <string id="484">Carregando as Configurações</string> - <string id="485"></string> - <string id="486"></string> - <string id="487"></string> - <string id="488">Trava Global</string> - <string id="489">Travar Trailer</string> - <string id="490">Travar Gênero</string> - <string id="491">Travar Estúdio</string> - <string id="492">Travar Avaliaçã</string> - <string id="493">Travar Tagline</string> - <string id="494">Travar Título</string> - <string id="495">Travar Resumo</string> - <string id="496">Travar Sinopse</string> - <string id="497">Imagens</string> - <string id="498">Não Gravar URLs no NFO</string> - <string id="499">Selecionar Manualmente</string> - <string id="500">MoviePosterDB.com</string> - <string id="501">TheMovideDB.org</string> - <string id="502">IMPAwards.com</string> - <string id="503">Usar a Imagem Extraída</string> - <string id="504">Meta Data não esta disponível para este episódio. Tente rescanear.</string> - <string id="505">Evitar Spoilers</string> - <string id="506">Quantidade:</string> - <string id="507">Extrair do Filme ao Buscar</string> - <string id="508">Usar o Resumo na Sinopse Se Ela Estiver Em Branco</string> - <string id="509"></string> - <string id="510">Buscar Somente Atores Com Imagens</string> - <string id="511">Usar Classificação Indicativa</string> - <string id="512">Buscar Todo o Elenco</string> - <string id="513">Buscar Toda a Equipe</string> - <string id="514">Usar a Certificação do:</string> - <string id="515">Formato Duração</string> - <string id="516">Usar Duração do Metadados</string> - <string id="517">Buscar Metadados nos Arquivos de Video</string> - <string id="518">Configura a aparência e modo de operação do Ember.</string> - <string id="519">Remover Selecionado</string> - <string id="520">Pasta Backdrops</string> - <string id="521">Gravar Fanart automaticamente na pasta Backdrops</string> - <string id="522">Deletar Existentes</string> - <string id="523"></string> - <string id="524">Salvar só as URLs</string> - <string id="525">Selecionar Manualmente</string> - <string id="526"></string> - <string id="527">Em Buscas no Modo Aut.</string> - <string id="528"></string> - <string id="529">Ativar Suporte a Trailers</string> - <string id="530">Extensões Não Empilhadas</string> - <string id="531"></string> - <string id="532"></string> - <string id="533"></string> - <string id="534">Extensões de Vídeo Válidos</string> - <string id="535">Editar Fonte</string> - <string id="536">Opções Diversas</string> - <string id="537">Reconhecer pastas VIDEO_TS</string> - <string id="538">Ignorar arquivos agrupados</string> - <string id="539">MB</string> - <string id="540">Ignorar arquivos menores que:</string> - <string id="541">Redimensionar (Só o Extraído)</string> - <string id="542">Preencher</string> - <string id="543">Largura:</string> - <string id="544">Altura:</string> - <string id="545">Usar Tamanho Personalizado</string> - <string id="546">Usar Resolução Nativa</string> - <string id="547">Cache de Imagens</string> - <string id="548">Em Buscas no Modo Aut.</string> - <string id="549">Marcar Novas Séries</string> - <string id="550">Manter o Cache de Imagens</string> - <string id="551">Ativar Cache de Imagens</string> - <string id="552">Selecione a pasta onde você deseja armazenar seus backdrops.</string> - <string id="553">Sistema de Arquivos</string> - <string id="554"></string> - <string id="555">Arquivos e Fontes</string> - <string id="556">Buscador - Dados</string> - <string id="557">Buscador - Imagens e Trailers</string> - <string id="558">Esticado</string> - <string id="559"></string> - <string id="560"></string> - <string id="561"></string> - <string id="562"></string> - <string id="563"></string> - <string id="564"></string> - <string id="565"></string> - <string id="566"></string> - <string id="567"></string> - <string id="568">Gerando Imagem dos Atores:</string> - <string id="569">Todos</string> - <string id="570">[none]</string> - <string id="571">[Desativado]</string> - <string id="572">Buscando por Posters:</string> - <string id="573">Buscando por Fanart:</string> - <string id="574">Buscando por Trailers:</string> - <string id="575">Gerando Extrathumbs:</string> - <string id="576">Verificando Detalhes do Filme:</string> - <string id="577">Campos do Buscador - Global</string> - <string id="578">Limite:</string> - <string id="579">Mídia:</string> - <string id="580">Mostra os filmes do arquivo selecionado.</string> - <string id="581">Opções do Faltando Itens</string> - <string id="582">Títulos Faltando Pôsteres</string> - <string id="583">Títulos Faltando Fanart</string> - <string id="584">Títulos Faltando o NFO</string> - <string id="585">Títulos Faltando Trailers</string> - <string id="586">Títulos Faltando Legendas</string> - <string id="587">Títulos Faltando Extrathumbs</string> - <string id="588"></string> - <string id="589"></string> - <string id="590"></string> - <string id="591">Top 250</string> - <string id="592"></string> - <string id="593"></string> - <string id="594">Editora Metadata</string> - <string id="595">Video</string> - <string id="596">Audio</string> - <string id="597">Legenda</string> - <string id="598">Tipo</string> - <string id="599">Baixar os Extrathumbs Como Especificado Abaixo:</string> - <string id="600">Ordenar Filmes Por</string> - <string id="601">Data da Inclusão</string> - <string id="602">Fonte</string> - <string id="603">Editar os Metadados do Arquivo</string> - <string id="604">Codec</string> - <string id="605">Varredura</string> - <string id="606">Largura</string> - <string id="607">Altura</string> - <string id="608">Aspecto</string> - <string id="609">Duração</string> - <string id="610">Idioma</string> - <string id="611">Canais</string> - <string id="612">Preferido</string> - <string id="613">Editor do Metadados do Arquivo</string> - <string id="614">Aspecto</string> - <string id="615">Interlaced</string> - <string id="616">Progressive</string> - <string id="617">Video</string> - <string id="618">Audio</string> - <string id="619">Legenda</string> - <string id="620">Filme</string> - <string id="621">Marcar Novos Episódios</string> - <string id="622">Buscando Mídia (Filtro Atual - Perguntar):</string> - <string id="623">Buscando Mídia (Filtro Atual - Auto):</string> - <string id="624">Filtro Atual</string> - <string id="625">Tipo de Arquivo Padrão</string> - <string id="626">Extensão</string> - <string id="627">Itens Selecionados: {0}</string> - <string id="628">Buscar Metadados nos NFO Existentes</string> - <string id="629">Temas</string> - <string id="630"></string> - <string id="631"></string> - <string id="632"></string> - <string id="633"></string> - <string id="634"></string> - <string id="635">Você selecionou {0} diretórios para abrir. Você tem certeza que quer fazer isto?</string> - <string id="636"></string> - <string id="637"></string> - <string id="638"></string> - <string id="639"></string> - <string id="640"></string> - <string id="641"></string> - <string id="642">Título na Coletânea</string> - <string id="643">YAMJ Compatible Sets Saving</string> - <string id="644">Limpando base de dados...</string> - <string id="645">Estreou: {0}</string> - <string id="646">Remover do Banco de Dados</string> - <string id="647">Estreou: {0}</string> - <string id="648">Temporada: {0}, Episódio: {1}</string> - <string id="649">Atualizar tudo</string> - <string id="650">Temporada</string> - <string id="651">Não Existe Informação Disponível Para Este Seriado</string> - <string id="652">Não Existe Informação Disponível Para Este Episódio</string> - <string id="653">Seriados</string> - <string id="654">Temporada </string> - <string id="655">Temporada Especiais</string> - <string id="656">Editar o Episódio</string> - <string id="657">Editar os detalhes para o Episódio selecionado.</string> - <string id="658">Estreou:</string> - <string id="659">Temporada:</string> - <string id="660">Episódio:</string> - <string id="661">Carregando Episódio</string> - <string id="662">Gravar Como Poster</string> - <string id="663">Editar a Série</string> - <string id="664">Editar os detalhes para o Seriado selecionado.</string> - <string id="665">Estreou:</string> - <string id="666">Seriado</string> - <string id="667">Episódio</string> - <string id="668">Limpar o BD após atualizar a biblioteca</string> - <string id="669">Ignorar última busca ao atualizar a bib.</string> - <string id="670">Filtro de Série - Pasta/Arquivo</string> - <string id="671">Filtro de Episódio - Pasta/Arquivo</string> - <string id="672">Proxy</string> - <string id="673">Ativar Proxy</string> - <string id="674">Proxy URL:</string> - <string id="675">Porta:</string> - <string id="676">Credenciais</string> - <string id="677">Ativar Credenciais</string> - <string id="678">Domínio:</string> - <string id="679">País da Classificação Etária</string> - <string id="680">Seriados</string> - <string id="681">Temporadas</string> - <string id="682">Episódios</string> - <string id="683">Poster da Série</string> - <string id="684">Fanart da Série</string> - <string id="685">Poster da Temporada</string> - <string id="686">Fanart da Temporada</string> - <string id="687">Poster do Episódio</string> - <string id="688">Fanart do Episódio</string> - <string id="689"> [MISSING]</string> - <string id="690">Editar o Regex</string> - <string id="691">Regex de Série Correspondente</string> - <string id="692">Regex de Temporada Correspondente:</string> - <string id="693">Regex de Episódio Correspondente:</string> - <string id="694">Aplicar para</string> - <string id="695">Editar o Regex</string> - <string id="696">Regex da Série</string> - <string id="697">Regex do Episódio</string> - <string id="698">Seriados</string> - <string id="699">Regex</string> - <string id="700">Seriado</string> - <string id="701">Episódio</string> - <string id="702"></string> - <string id="703"></string> - <string id="704"></string> - <string id="705">Fonte de Séries</string> - <string id="706">Selecionar a pasta pai para seu seriados.</string> - <string id="707"></string> - <string id="708">Doar</string> - <string id="709">Limpar Base de Dados</string> - <string id="710">Forçar Título:</string> - <string id="711">Incluir nome da pasta na verificação do tipo da fonte</string> - <string id="712">Colocar todos os arquivos em novas pastas após atualizar a biblioteca</string> - <string id="713">Trailer Local:</string> - <string id="714">Confirme os itens para serem apagados</string> - <string id="715">Alternar Todos</string> - <string id="716">Buscar</string> - <string id="717">Preparando para atualização ...</string> - <string id="718">Agora estamos prontos para atualizar. Ember será fechado para que a atualização pode começar.\n\nVocê tem certeza que quer continuar?</string> - <string id="719">SIM</string> - <string id="720">NAO</string> - <string id="721">Upgrade</string> - <string id="722">Certificação</string> - <string id="723">URL</string> - <string id="724">Estreou</string> - <string id="725">Atores</string> - <string id="726">Temporada {0}</string> - <string id="727">Episódio</string> - <string id="728">Estreou</string> - <string id="729">Créditos</string> - <string id="730">Tipo Preferido:</string> - <string id="731">Atualizando a Série:</string> - <string id="732"><h> = Horas, <m> = Minutos</string> - <string id="733">Mostrar Episódios Faltantes</string> - <string id="734">Construir título do episódio em vez de filtrar</string> - <string id="735">Poster de Todas as Temporadas</string> - <string id="736">Somente pegar imagens para o idioma selecionada</string> - <string id="737">Também baixar imagens em Inglês</string> - <string id="738">Chave API:</string> - <string id="739">Ordem dos Episódios:</string> - <string id="740">Buscar por informações da Série a cada:</string> - <string id="741">Idioma Preferido:</string> - <string id="742">Idiomas disponíveis localizados</string> - <string id="743">Seriado</string> - <string id="744">Temporada</string> - <string id="745">Nenhum</string> - <string id="746">Em Branco</string> - <string id="747">Imagem</string> - <string id="748">Texto</string> - <string id="749">Semana</string> - <string id="750">Bi-Semanal</string> - <string id="751">Mês</string> - <string id="752">Nunca</string> - <string id="753">Sempre</string> - <string id="754">Ajuste Modulo</string> - <string id="755">Episódio #</string> - <string id="756">Carregando todos os episódios:</string> - <string id="757">Salvando todas as imagens:</string> - <string id="758">Procurando no theTVDB:</string> - <string id="759">Selecione as Imagens:</string> - <string id="760">Baixando ZIP da Série:</string> - <string id="761">Verificando os Seriados:</string> - <string id="762">Verificando ps Episódios:</string> - <string id="763">Você tem certeza que deseja apagar o Seriado selecionado e todos os episódios?</string> - <string id="764">Você tem certeza que deseja apagar o Episoódio selecionado?</string> - <string id="765">Você tem certeza que deseja apagar a Temporada selecionada e todos os episódios?</string> - <string id="766">Buscar Seriado</string> - <string id="767">Alterar Seriado</string> - <string id="768">Apagar Seriado</string> - <string id="769">Editar Temporada</string> - <string id="770">Alterar Imagens</string> - <string id="771">Apagar Temporada</string> - <string id="772">Alterar Episódio</string> - <string id="773">Apagar Episódio</string> - <string id="774">Habilitado</string> - <string id="775">Desabilitado</string> - <string id="776"></string> - <string id="777">Escritor</string> - <string id="778"></string> - <string id="779"></string> - <string id="780"></string> - <string id="781"></string> - <string id="782"></string> - <string id="783">Sinopse:</string> - <string id="784"></string> - <string id="785"></string> - <string id="786">Poster Todas as Temporadas</string> - <string id="787"></string> - <string id="788"></string> - <string id="789"></string> - <string id="790"></string> - <string id="791"></string> - <string id="792">Doar</string> - <string id="793">&Versões...</string> - <string id="794">&Configuração dos Módulos...</string> - <string id="795">Interface</string> - <string id="796">Ao atualizar a biblioteca ordenar os títulos na ordem da criação dos arquivos</string> - <string id="797">Ordem padrão dos episódios:</string> - <string id="798"></string> - <string id="799">Buscador - Trailers</string> - <string id="800">Qualidade Preferida:</string> - <string id="801">Página do TVDB</string> - <string id="802">Módulos</string> - <string id="803">Em seguida, vamos dizer ao Ember Media Manager onde localizar todos os seus seriados. Você pode adicionar quantas fontes desejar.</string> - <string id="804">E, finalmente, vamos dizer ao Ember Media Manager quais arquivos de seriado procurar. Basta selecionar qualquer combinação de tipo de arquivos que você deseja que o Ember Media Manager carregue e grave. Você pode selecionar mais de um de por cada seção, se desejar.</string> - <string id="805">Envie para PasteBin.com</string> - <string id="806">Copiar para Clipboard</string> - <string id="807">Um erro ocorreu quando tentou enviar dados para o Pastebin.com</string> - <string id="808">Visualizador do Log de Erros</string> - <string id="809">Antes de submeter relatórios de bugs, por favor, verifique se o erro já não foi relatado. Você pode ver uma lista de todos os bugs conhecidos aqui:</string> - <string id="810">http://www.embermm.com/projects/embermm/issues</string> - <string id="811">PasteBin URL:</string> - <string id="812">Título Anterior: {0} | Novo Título: {1}</string> - <string id="813">Dados Coletados</string> - <string id="814">Episódios Adicionados: </string> - <string id="815">Filmes Adicionados: </string> - <string id="816">Um Erro Ocorreu</string> - <string id="817">Novo filme adicionado</string> - <string id="818">Novo episódio adicionado</string> - <string id="819">Perfis RegEx de Seriados</string> - <string id="820">Perfil do RegEx</string> - <string id="821">Descrição</string> - <string id="822">Miscelânea</string> - <string id="823">Audio & Video Codec Mapping</string> - <string id="824">Fonte do Video:</string> - <string id="825">Downloads:</string> - <string id="826"></string> - <string id="827"></string> - <string id="828">Ativar Cache dos Atores</string> - <string id="829">Watch for ""Dump"" Folder</string> - <string id="830">Editar os detalhes para a Temporada selecionada.</string> - <string id="831"></string> - <string id="832">Poster de Todas as Temporadas</string> - <string id="833">These are Scraper specific settings and act as a filter.\nYou should also Checar Ember Global Settings.</string> - <string id="834">* Inside Temporada Folder</string> - <string id="835">Salvar Só a Informação Numérica no NFO</string> - <string id="836"></string> - <string id="837">Buscador - Imagens</string> - <string id="838">Baner</string> - <string id="839">Absoluto</string> - <string id="840">Você tem certeza que deseja retornar para o padrão os filtros da lista da Série?</string> - <string id="841">Você tem certeza que deseja retornar para o padrão os filtros da lista de Episódio?</string> - <string id="842">Você tem certeza que deseja retornar para o padrão os filtros da lista de Filmes?</string> - <string id="843">Você tem certeza que deseja retornar para o padrão a lista de Extensões de Vídeo Válidos?</string> - <string id="844">Você tem certeza que deseja voltar a lista regex de Séries para o padrão?</string> - <string id="845">>> Nenhum Item Selecionado <<</string> - <string id="846"></string> - <string id="847"></string> - <string id="848"></string> - <string id="849">Buscar ao Selecionar o Filme</string> - <string id="850">&Procurar por Atualizações</string> - <string id="851">Nenhuma atualização neste momento</string> - <string id="852">Perguntar ao Buscar o Filme</string> - <string id="853">Atualizar Somente os Seriados</string> -</strings> \ No newline at end of file diff --git a/Ember Media Manager/Langs/html/English_(en_US).html b/Ember Media Manager/Langs/html/English_(en_US).html new file mode 100644 index 0000000..ceb9434 --- /dev/null +++ b/Ember Media Manager/Langs/html/English_(en_US).html @@ -0,0 +1,292 @@ +<$NEED_POSTERS> +<$NEED_FANART> +<$NEED_FLAGS> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + +<head> +<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> +<title>:.My Movie Collection.: + + + + + + + + + +<$MOVIE> +
+
+
+ +
+

<$MOVIENAME> (<$YEAR>)

+

<$TAGLINE>

+
+

Rating:  <$RATING>  (<$VOTES> Votes)

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Director:

<$DIRECTOR>

Genre:

<$GENRES>

Runtime:

<$RUNTIME>

VideoBitrate:

<$VIDEOBITRATE>

AudioBitrate:

<$AUDIOBITRATE>

FSK:

<$MPAA> years

+
+ +
+ +
+ +
+

Links: +Show IMDB Info +Show Trailer +Film-Ordner öffnen +


+

<$PLOT>

+
+ + + + + +
+ + + + +
+ +<$/MOVIE> + + + + + + + + + + + + + + + + + + + + diff --git a/Ember Media Manager/Langs/html/German_(de_DE).html b/Ember Media Manager/Langs/html/German_(de_DE).html new file mode 100644 index 0000000..59f0f3f --- /dev/null +++ b/Ember Media Manager/Langs/html/German_(de_DE).html @@ -0,0 +1,294 @@ +<$NEED_POSTERS> +<$NEED_FANART> +<$NEED_FLAGS> + + + + + +:.My Movie Collection.: + + + + + + + + + +<$MOVIE> +
+
+
+ +
+

<$MOVIENAME> (<$YEAR>)

+

<$TAGLINE>

+
+

Wertung:  <$RATING>  (<$VOTES> Stimmen)

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Regisseur:

<$DIRECTOR>

Genre:

<$GENRES>

Länge:

<$RUNTIME>

VideoBitrate:

<$VIDEOBITRATE>

AudioBitrate:

<$AUDIOBITRATE>

FSK:

<$MPAA> Jahre

+
+ +
+ +
+ +
+

Links: +IMDB-Eintrag anzeigen +Trailer anzeigen +Film öffnen +


+

<$PLOT>

+
+ + + + + +
+ + + + +
+ +<$/MOVIE> + + + + + + + + + + + + + + + + + + + + diff --git a/Ember Media Manager/Langs/html/function.js b/Ember Media Manager/Langs/html/function.js new file mode 100644 index 0000000..7f7d4ac --- /dev/null +++ b/Ember Media Manager/Langs/html/function.js @@ -0,0 +1,778 @@ +"use strict"; + +//Area of global Array Declaration - used to save the EMBER Variables from HTML-Template to Javascript global arrays +var version = "version 1.70"; +var iCount; +var DataSource = []; +var DataURL = []; +var DataFilename = []; +var DataBild = []; +var DataName = []; +var DataGenre = []; +var DataDate = []; +var DataFanart = []; +var DataYear = []; +var DataRating = []; +var DataActors = []; + +var DataVidBitrate = []; +var DataAudBitrate = []; +var DataWatched = []; +var DataThreed = []; +var DataPlot = []; +var DataNow; + +//Here are string fragments which will be fused together with function-variables to build the whole site navigation dynamically +var navilinks_full, navilinks, moviewall, moviewall_full; +var string_navigation_1 = '
  • '; +Control1 = document.getElementById("movie" + selectedmovie); +Control1.style.display = 'block'; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function for displaying last modified date on template header ----- Erweiterung von User cimex Vielen Dank!! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_DisplayLastModified() +{ +var T; +T = document.getElementById("div_displaylastmodified"); +T.innerHTML = '

    Update: ' + DataNow + '

    '; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function for building left and right navigation of site----- +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_BuildNavigation(selectedmovie) +{ +var y, Control1, Control2, Control3, i, arr2str, result1, result2,result3,result4; +Control1 = document.getElementById("navigation"); +Control2 = document.getElementById("div_moviewall"); +Control3 = document.getElementById("div_moviecounter"); +var myregexp1 = new RegExp('1080'); +var myregexp2 = new RegExp('720'); +var myregexp3 = new RegExp('576'); +var myregexp4 = new RegExp('default'); +var myregexp5 = new RegExp('1'); +var bluraycounter = 0; +var dvdcounter = 0; +var othercounter = 0; +var moviecounter = 0; +var watchedcounter = 0; +var threedcounter = 0; + +//execute only for buildung up navigation for ALL movies (PageLoad, Reset-Button)! +if (selectedmovie === 0) { +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar +y = iCount; // this will make sure to add navigation of ALL movies! +func_ShowDetails(1); +} +else // only navigation elements of one specific movie will be added! +{ +y = selectedmovie; +} +//Navigation builder for left and right sidebar +for (i = selectedmovie;i <= y; i++) +{ +if (i === 0) { +i = 1; } +arr2str = DataSource[i].toString(); +result1 = arr2str.search(myregexp1); +result2 = arr2str.search(myregexp2); +result3 = arr2str.search(myregexp3); +result4 = arr2str.search(myregexp4); + + if (DataThreed [i].toString() !== "") // Returns true if not empty("") or zero (0) -> MULTIVIEW<>"" or MULTIVIEW<>"0" --> Found: 3D Movie! + { + threedcounter = threedcounter + 1 + } + +if (result1 !== -1 || result2 !== -1) // Found something! Bluray +{ + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" --> Found: Watched Movie! + { + //Navigation Build: Include Watched Movie/HD Icon! + navilinks = string_navigation_1HD1 + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + DataName[i] + string_navigation_3 + string_navigation_3HD2 + string_watched3 + string_navigation_4; + watchedcounter = watchedcounter + 1; + } + + else + { + //Navigation Build: Include HD Icon! + navilinks = string_navigation_1HD1 + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + DataName[i] + string_navigation_3 + string_navigation_3HD2 + string_navigation_4; + } +bluraycounter = bluraycounter + 1; +} +else if(result3 !== -1 || result4 !== -1) // Found something! DVD + { + + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" --> Found: Watched Movie! + { + //Navigation Build: Include Watched Movie/DVD Icon! + navilinks = string_navigation_1DVD1 + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + DataName[i] + string_navigation_3 + string_navigation_3DVD2 + string_watched3 + string_navigation_4; + watchedcounter = watchedcounter + 1; + } + else + { + //Navigation Build: Include DVD Icon! + navilinks = string_navigation_1DVD1 + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + DataName[i] + string_navigation_3 + string_navigation_3DVD2 + string_navigation_4; + } +dvdcounter = dvdcounter + 1; +} + +else +{ + + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" --> Found: Watched Movie! + { + navilinks = string_navigation_1 + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + DataName[i] + string_navigation_3 + string_navigation_3 + string_watched3 + string_navigation_4; + watchedcounter = watchedcounter + 1; + } + else + { + //Navigation Build: Movie is not DVD, not Bluray and also not watched --> no icons, basic string + navilinks = string_navigation_1 + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + DataName[i] + string_navigation_3 + string_navigation_3 + string_navigation_4; + } + +othercounter = othercounter + 1; +} +//Navigation builder to build whole page dynamically +navilinks_full = navilinks_full + navilinks; +moviewall = string_moviewalllink_1 + i + string_moviewalllink_2 + i + string_moviewalllink_3 + string_moviewallpic_1 + DataBild[i] + string_moviewallpic_2 + DataName[i] + string_moviewallpic_3 + DataName[i] + string_moviewallpic_4; +moviewall_full = moviewall_full + moviewall; +} +if (selectedmovie === 0) { // only needed when function not called from another function +selectedmovie = 1; +moviecounter = dvdcounter + bluraycounter + othercounter; +Control1.innerHTML = '
      ' + navilinks_full + '

    ' + version + '

    '; +Control2.innerHTML = moviewall_full; +Control3.innerHTML = '

    Total: ' + moviecounter + '   Blurays: ' + bluraycounter + '  DVD: ' + dvdcounter + '  3D: ' + threedcounter + '  Rest: ' + othercounter + '  Watched: ' + watchedcounter + '

    '; +} +} + + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Custom Search [Date]----- +// Displays latest added movies - result also considers watched/unwatched state of checkboxes! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchDate() { +var todaydate = new Date(); //Date Object +var tt = todaydate.getDate(); //today: day +var mm = todaydate.getMonth() + 1; //today: month +var jjjj = todaydate.getFullYear(); //today: year +var timestamp_now = Date.UTC(jjjj, mm, tt); // today: timestamp +var timestamp_movie = new Array(iCount); +timestamp_movie[0] = new Array(2); +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +// Loop through all entries and search for dates lower than "selectedday" +for (i = 1;i <= iCount; i++){ +var moviedate = DataDate[i].split("."); // i.e. moviedate[0]=24; moviedate[1]=12; moviedate[2]=2003; +timestamp_movie[i-1] = [i,Date.UTC(moviedate[2], moviedate[1], moviedate[0])]; // Timestamp in ms +} + +// Array sorted with Quicksort function/ ascending --> Newest Movies first! +timestamp_movie.quicksortCol(0, (timestamp_movie.length-1), 1); + +//Loop through all movies and build navigation with new sorted moviearray! +for (i = iCount;i > 0; i--){ + + var z = timestamp_movie[i-1][0]; +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[z].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[z].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Custom Search [Year]----- +// Displays all movies sorted, beginning with newest - result also considers watched/unwatched state of checkboxes! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchYear() { +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +var year_movie = new Array(iCount); +year_movie[0] = new Array(2); +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + + +// Populate array with timestamps of all movies +for (i = 1;i <= iCount; i++){ +year_movie[i-1] = [i,DataYear[i]]; // Timestamp in ms +} + +// Array sorted with Quicksort function/ ascending +year_movie.quicksortCol(0, (year_movie.length-1), 1); + +//Loop through all movies and build navigation with new sorted moviearray! +for (i = iCount;i > 0; i--){ + + var z = year_movie[i-1][0]; + + // Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[z].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[z].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Custom Search [Genre]----- +// Displays all movies containing the selected genre - result also considers watched/unwatched state of checkboxes! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchGenre(selectedgenre) { + +var myregexp = new RegExp(selectedgenre); // NEW RegeExp Object +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +// Loop through all entries and check if criteria matches +for (i = 1;i <= iCount; i++) +{ +var arr2str = DataGenre[i].toString(); +var result = arr2str.search(myregexp); + +// in case of ALL display all movies by setting result = 1 +if(selectedgenre == 'ALLE') +{ + result = 1; +} + +if (result !== -1) // Match! +{ +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[i].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } +} +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; + +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Custom Search [Titel]----- +// Displays all movies beginning with selected letter - result also considers watched/unwatched state of checkboxes! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchTitel(selectedLetter) { + +var myregexp = new RegExp(selectedLetter); // NEW RegeExp Object +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +// Loop through all entries and check if movie genre contains "selectedgenre" +for (i = 1;i <= iCount; i++) +{ +var arr2str = DataName[i].toString(); +var result = arr2str.search(myregexp); + +if (result !== -1) // Found movie with selected letter +{ + +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[i].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } +} +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; + +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Custom Search [Wertung]----- Erweiterung von User furryhamster Control2ielen Dank!! +// Sorting of movies, beginning with highest rated movies - result also considers watched/unwatched state of checkboxes! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchWertung() { +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +var rating_movie = new Array(iCount); +rating_movie[0] = new Array(2); +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +for (i = 1;i <= iCount; i++){ +rating_movie[i-1] = [i,DataRating[i]]; // Timestamp in ms +} + +// Array sorted with Quicksort function/ ascending +rating_movie.quicksortCol(0, (rating_movie.length-1), 1); + +//Loop through all movies and build navigation with new sorted moviearray! +for (i = iCount;i > 0; i--){ +//get one specific movie from sorted array and hand over to Buildnavigation-Function! + var z = rating_movie[i-1][0]; + +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[z].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[z].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: [VideoBITRATE-Liste] +// Sorting of movies, beginning with highest Videobitrate movies - result also considers watched/unwatched state of checkboxes! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchQualiVideo() { +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +var vidbitrate_movie = new Array(iCount); +vidbitrate_movie[0] = new Array(2); +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +for (i = 1;i <= iCount; i++){ +vidbitrate_movie[i-1] = [i,DataVidBitrate[i]]; // Control2ideoBitrate +} + +// Sort the array (numeric sorting) ascending +vidbitrate_movie.sort(function(x,y){return x[1]-y[1]}); + +//Loop through all movies and build navigation with new sorted moviearray! +for (i = iCount;i > 0; i--){ +//get one specific movie from sorted array and hand over to Buildnavigation-Function! + var z = vidbitrate_movie[i-1][0]; + +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[z].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[z].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: [AudioBITRATE-Liste] +// Sorting of movies, beginning with highest Audiobitrate movies - result also considers watched/unwatched state of checkboxes! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchQualiAudio() { +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +var audiobitrate_movie = new Array(iCount); +audiobitrate_movie[0] = new Array(2); +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +for (i = 1;i <= iCount; i++){ +audiobitrate_movie[i-1] = [i,DataAudBitrate[i]]; // AudioBitrate +} + +//Sort the array (numeric sorting) ascending +audiobitrate_movie.sort(function(x,y){return x[1]-y[1]}); + +//Loop through all movies and build navigation with new sorted moviearray! +for (i = iCount;i > 0; i--){ +//get one specific movie from sorted array and hand over to Buildnavigation-Function! + var z = audiobitrate_movie[i-1][0]; + +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[z].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[z].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Un/Watched Movies ----- +// Depending on checked/unchecked Checkboxes show only filtered selection of movies +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_WatchedMovies() { + +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +// Loop through all entries and check movie PLAYCOUNT(i) (DataWatched[i]) + + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + for (i = 1;i <= iCount; i++) + { + + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + for (i = 1;i <= iCount; i++) + { + + if (DataWatched[i].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + for (i = 1;i <= iCount; i++) + { + + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + + } + } + + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; + +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Custom Search [Schauspieler]----- Erweiterung von User furryhamster Vielen Dank!! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchActor(actor) { +var myregexp = new RegExp(actor); // NEW RegeExp Object +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +// Loop through all entries and check if movie actors contains "actor" +for (i = 1;i <= iCount; i++) +{ +var arr2str = DataActors[i].toString(); +var result = arr2str.search(myregexp); + +var arr2strLower = arr2str.toLowerCase(); +var result2 = arr2strLower.search(myregexp); + +if (result !== -1 || result2 !== -1) // Found something! +{ +func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! +} +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; +} + + + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Custom Search [3D MOVIE]----- +// Displays all movies which have MULTIVIEW Scanned <> zero - result also considers watched/unwatched state of checkboxes! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchThreeD() { + +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +// Loop through all entries and check if movie genre contains "selectedgenre" +for (i = 1;i <= iCount; i++) +{ + +//Now look if 3Dmovie +if (DataThreed[i].toString() !== "") // Returns true if not empty("") or zero (0) -> MULTIVIEW<>"" or MULTIVIEW<>"0" --> Found: 3D Movie! +{ + +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[i].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } +} +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; + +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Open Movie Folder ----- +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_OpenFolder(Counter) { +var Adresse = window.location.href; +var searchURL = new RegExp('file:'); // NEW RegeExp Object +var result = Adresse.search(searchURL); + +if (result !== -1) // HTML Page is local! +{ +window.open ('file:///' + DataURL[Counter] + '/' + DataFilename[Counter]); +} +else // HTML Page is placed in internet! +{ +alert( 'Kein Zugriff auf Ordner m�glich!' ); +} +} + + + +/* ****************************************************************************** * // CREDIT: Quaese, Quelle: http://www.tutorials.de/javascript-ajax/283260-javascript-zweidimensionales-array-sortieren.html + * Arrayobjekt um Methode erweitern - Array mit Quicksort nach Spalten sortieren + * + * Parameter: intLower - Untergrenze des Teilbereichs (beim Start i.A. 0) + * intUpper - Obergrenze des Teilbereichs (beim Start i.A. Array.length-1) + * intCol - Spalte, nach der sortiert werden soll (beginnend bei 0) + * ****************************************************************************** */ +Array.prototype.quicksortCol = function(intLower, intUpper, intCol){ + var i = intLower, j = intUpper; + var varHelp = new Array(); + // Teilen des Bereiches und Vergleichswert ermitteln + var varX = this[parseInt(Math.floor(intLower+intUpper)/2)][intCol]; + + // Teilbereiche bearbeiten bis: + // - "linker" Bereich enth�lt alle "kleineren" Werte + // - "rechter" Bereich enth�lt alle "gr�sseren" Werte + do{ + // Solange Wert im linken Teil kleiner ist -> Grenzeindex inkrementieren + while(this[i][intCol] < varX) i++; + // Solange Wert im rechten Teil gr�sser ist -> Grenzindex dekrementieren + while(varX < this[j][intCol]) j--; + + // Untergrenze kleiner als Obergrenze -> Tausch notwendig + if(i<=j){ + var varHelp = this[i]; + this[i] = this[j]; + this[j] = varHelp; + i++; + j--; + } + }while(i + + \ No newline at end of file diff --git a/Ember Media Manager/Langs/html/template MovieHomepage/English_(en_US).html b/Ember Media Manager/Langs/html/template MovieHomepage/English_(en_US).html index 7183a3f..e07f8e5 100644 --- a/Ember Media Manager/Langs/html/template MovieHomepage/English_(en_US).html +++ b/Ember Media Manager/Langs/html/template MovieHomepage/English_(en_US).html @@ -49,16 +49,24 @@

    <$MOVIENAME> (<$Y

    Director:

    <$DIRECTOR>

    - +

    Genre:

    <$GENRES>

    - +

    Runtime:

    <$RUNTIME>

    + + +

    VideoBitrate:

    +

    <$VIDEOBITRATE>

    -

    MPAA:

    +

    AudioBitrate:

    +

    <$AUDIOBITRATE>

    + + +

    FSK:

    <$MPAA> years

    @@ -70,9 +78,9 @@

    <$MOVIENAME> (<$Y

    Links: -Show IMDB Info -Show Trailer -Film-Ordner öffnen +Show IMDB Info +Show Trailer +Play movie (Internet Explorer only!)


    <$PLOT>


    @@ -88,6 +96,7 @@

    <$MOVIENAME> (<$Y DataURL[<$COUNT>] = "<$DIRNAME>"; DataYear[<$COUNT>] = "<$YEAR>"; DataBild[<$COUNT>] = "<$POSTER_FILE>"; +DataFilename[<$COUNT>] = "<$FILENAME>"; DataName[<$COUNT>] = "<$MOVIENAME>"; DataGenre[<$COUNT>] = "<$GENRES>"; DataDate[<$COUNT>] = "<$DATEADD>"; @@ -95,6 +104,14 @@

    <$MOVIENAME> (<$Y DataSource[<$COUNT>] = "<$FLAG_VRES>"; DataRating[<$COUNT>] = "<$RATING>"; DataActors[<$COUNT>] = "<$ACTORS>"; +DataWatched[<$COUNT>] = "<$PLAYCOUNT>"; +DataVidBitrate[<$COUNT>] = "<$VIDEOBITRATE>"; +DataAudBitrate[<$COUNT>] = "<$AUDIOBITRATE>"; +DataThreed[<$COUNT>] = "<$VIDEOMULTIVIEW>"; +DataSet[<$COUNT>] = "<$SET>"; +DataNow = "<$NOW>"; +DataMoviesets = "<$MOVIESETS>"; +DataTVShows = "<$TVSHOWS>"; @@ -118,34 +135,122 @@

    <$MOVIENAME> (<$Y + + + + + + + + + +
    +
    + + + + +
    +
    + +
    + + + +
    +

    @@ -154,8 +259,8 @@

    ...and still growing

  • '; -var string_navigation_3 = '
  • '; +var string_navigation_1HD1 = '
  • '; +Control1 = document.getElementById("movie" + selectedmovie); +Control1.style.display = 'block'; } -Z = document.getElementById("backgrounddiv" + selectedmovie); -Z.innerHTML = ''; -Q = document.getElementById("movie" + selectedmovie); -Q.style.display = 'block'; + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function for displaying last modified date on template header ----- Erweiterung von User cimex Vielen Dank!! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_DisplayLastModified() +{ +var T; +T = document.getElementById("div_displaylastmodified"); +T.innerHTML = '

    Update: ' + DataNow + '

    '; } + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// //---- Function for building left and right navigation of site----- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// function func_BuildNavigation(selectedmovie) { -var y, Q, V, i, arr2str, result1, result2; -Q = document.getElementById("navigation"); -V = document.getElementById("div_moviewall"); +var y, Control1, Control2, Control3, i, arr2str, result1, result2,result3,result4; +Control1 = document.getElementById("navigation"); +Control2 = document.getElementById("div_moviewall"); +Control3 = document.getElementById("div_moviecounter"); var myregexp1 = new RegExp('1080'); var myregexp2 = new RegExp('720'); +var myregexp3 = new RegExp('576'); +var myregexp4 = new RegExp('default'); +var myregexp5 = new RegExp('1'); +var bluraycounter = 0; +var dvdcounter = 0; +var othercounter = 0; +var moviecounter = 0; +var watchedcounter = 0; +var threedcounter = 0; //execute only for buildung up navigation for ALL movies (PageLoad, Reset-Button)! if (selectedmovie === 0) { @@ -76,65 +132,81 @@ i = 1; } arr2str = DataSource[i].toString(); result1 = arr2str.search(myregexp1); result2 = arr2str.search(myregexp2); -if (result1 !== -1 || result2 !== -1) // Found something! +result3 = arr2str.search(myregexp3); +result4 = arr2str.search(myregexp4); + + if (DataThreed [i].toString() !== "") // Returns true if not empty("") or zero (0) -> MULTIVIEW<>"" or MULTIVIEW<>"0" --> Found: 3D Movie! + { + threedcounter = threedcounter + 1 + } + +if (result1 !== -1 || result2 !== -1) // Found something! Bluray { -navilinks = string_navigation_1HD + i + string_navigation_2 + DataName[i] + string_navigation_3; + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" --> Found: Watched Movie! + { + //Navigation Build: Include Watched Movie/HD Icon! + navilinks = string_navigation_1HD1 + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + DataName[i] + string_navigation_3 + string_navigation_3HD2 + string_watched3 + string_navigation_4; + watchedcounter = watchedcounter + 1; + } + + else + { + //Navigation Build: Include HD Icon! + navilinks = string_navigation_1HD1 + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + DataName[i] + string_navigation_3 + string_navigation_3HD2 + string_navigation_4; + } +bluraycounter = bluraycounter + 1; } +else if(result3 !== -1 || result4 !== -1) // Found something! DVD + { + + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" --> Found: Watched Movie! + { + //Navigation Build: Include Watched Movie/DVD Icon! + navilinks = string_navigation_1DVD1 + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + DataName[i] + string_navigation_3 + string_navigation_3DVD2 + string_watched3 + string_navigation_4; + watchedcounter = watchedcounter + 1; + } + else + { + //Navigation Build: Include DVD Icon! + navilinks = string_navigation_1DVD1 + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + DataName[i] + string_navigation_3 + string_navigation_3DVD2 + string_navigation_4; + } +dvdcounter = dvdcounter + 1; +} + else { -navilinks = string_navigation_1 + i + string_navigation_2 + DataName[i] + string_navigation_3; + + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" --> Found: Watched Movie! + { + navilinks = string_navigation_1 + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + DataName[i] + string_navigation_3 + string_navigation_3 + string_watched3 + string_navigation_4; + watchedcounter = watchedcounter + 1; + } + else + { + //Navigation Build: Movie is not DVD, not Bluray and also not watched --> no icons, basic string + navilinks = string_navigation_1 + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + DataName[i] + string_navigation_3 + string_navigation_3 + string_navigation_4; + } + +othercounter = othercounter + 1; } +//Navigation builder to build whole page dynamically navilinks_full = navilinks_full + navilinks; moviewall = string_moviewalllink_1 + i + string_moviewalllink_2 + i + string_moviewalllink_3 + string_moviewallpic_1 + DataBild[i] + string_moviewallpic_2 + DataName[i] + string_moviewallpic_3 + DataName[i] + string_moviewallpic_4; moviewall_full = moviewall_full + moviewall; } if (selectedmovie === 0) { // only needed when function not called from another function selectedmovie = 1; -Q.innerHTML = '
      ' + navilinks_full + '

    ' + version + '

    '; -V.innerHTML = moviewall_full; +moviecounter = dvdcounter + bluraycounter + othercounter; +Control1.innerHTML = '
      ' + navilinks_full + '

    ' + version + '

    '; +Control2.innerHTML = moviewall_full; +Control3.innerHTML = '

    Total: ' + moviecounter + '   Blurays: ' + bluraycounter + '  DVD: ' + dvdcounter + '  3D: ' + threedcounter + '  Rest: ' + othercounter + '  Watched: ' + watchedcounter + '

    '; } } -/* ****************************************************************************** * // CREDIT: Quaese, Quelle: http://www.tutorials.de/javascript-ajax/283260-javascript-zweidimensionales-array-sortieren.html - * Arrayobjekt um Methode erweitern - Array mit Quicksort nach Spalten sortieren - * - * Parameter: intLower - Untergrenze des Teilbereichs (beim Start i.A. 0) - * intUpper - Obergrenze des Teilbereichs (beim Start i.A. Array.length-1) - * intCol - Spalte, nach der sortiert werden soll (beginnend bei 0) - * ****************************************************************************** */ -Array.prototype.quicksortCol = function(intLower, intUpper, intCol){ - var i = intLower, j = intUpper; - var varHelp = new Array(); - // Teilen des Bereiches und Vergleichswert ermitteln - var varX = this[parseInt(Math.floor(intLower+intUpper)/2)][intCol]; - - // Teilbereiche bearbeiten bis: - // - "linker" Bereich enth�lt alle "kleineren" Werte - // - "rechter" Bereich enth�lt alle "gr�sseren" Werte - do{ - // Solange Wert im linken Teil kleiner ist -> Grenzeindex inkrementieren - while(this[i][intCol] < varX) i++; - // Solange Wert im rechten Teil gr�sser ist -> Grenzindex dekrementieren - while(varX < this[j][intCol]) j--; - - // Untergrenze kleiner als Obergrenze -> Tausch notwendig - if(i<=j){ - var varHelp = this[i]; - this[i] = this[j]; - this[j] = varHelp; - i++; - j--; - } - }while(i Newest Movies first! timestamp_movie.quicksortCol(0, (timestamp_movie.length-1), 1); +//Loop through all movies and build navigation with new sorted moviearray! for (i = iCount;i > 0; i--){ -var z = timestamp_movie[i-1][0]; -func_BuildNavigation(z); + var z = timestamp_movie[i-1][0]; +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[z].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[z].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } } -Q.innerHTML = '
      ' + navilinks_full + '
    '; -V.innerHTML = moviewall_full; +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// //---- Function: Custom Search [Year]----- +// Displays all movies sorted, beginning with newest - result also considers watched/unwatched state of checkboxes! //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// function func_SearchYear() { var doOnce = 0; -var Q = document.getElementById("navigation"); -var V = document.getElementById("div_moviewall"); +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); var i; var year_movie = new Array(iCount); year_movie[0] = new Array(2); navilinks_full = ""; // deletes all entries of left sidebar moviewall_full = ""; // deletes all entries of right sidebar + +// Populate array with timestamps of all movies for (i = 1;i <= iCount; i++){ year_movie[i-1] = [i,DataYear[i]]; // Timestamp in ms } @@ -190,53 +287,156 @@ year_movie[i-1] = [i,DataYear[i]]; // Timestamp in ms // Array sorted with Quicksort function/ ascending year_movie.quicksortCol(0, (year_movie.length-1), 1); +//Loop through all movies and build navigation with new sorted moviearray! for (i = iCount;i > 0; i--){ -var z = year_movie[i-1][0]; -func_BuildNavigation(z); + var z = year_movie[i-1][0]; + + // Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[z].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[z].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } } -Q.innerHTML = '
      ' + navilinks_full + '
    '; -V.innerHTML = moviewall_full; +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// //---- Function: Custom Search [Genre]----- +// Displays all movies containing the selected genre - result also considers watched/unwatched state of checkboxes! //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// function func_SearchGenre(selectedgenre) { + var myregexp = new RegExp(selectedgenre); // NEW RegeExp Object var doOnce = 0; -var Q = document.getElementById("navigation"); -var V = document.getElementById("div_moviewall"); +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); var i; navilinks_full = ""; // deletes all entries of left sidebar moviewall_full = ""; // deletes all entries of right sidebar -// Circle through all entries and test if movie genre contains "selectedgenre" +// Loop through all entries and check if criteria matches for (i = 1;i <= iCount; i++) { var arr2str = DataGenre[i].toString(); var result = arr2str.search(myregexp); -if (result !== -1) // Found something! +// in case of ALL display all movies by setting result = 1 +if(selectedgenre == 'ALLE') { -doOnce = 1; -func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + result = 1; } + +if (result !== -1) // Match! +{ +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[i].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } } -if(doOnce === 1) // only when at least 1 match found refresh and show left and right sidebar +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; + +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Custom Search [Titel]----- +// Displays all movies beginning with selected letter - result also considers watched/unwatched state of checkboxes! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchTitel(selectedLetter) { + +var myregexp = new RegExp(selectedLetter); // NEW RegeExp Object +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +// Loop through all entries and check if movie genre contains "selectedgenre" +for (i = 1;i <= iCount; i++) { -Q.innerHTML = '
      ' + navilinks_full + '
    '; -V.innerHTML = moviewall_full; +var arr2str = DataName[i].toString(); +var result = arr2str.search(myregexp); + +if (result !== -1) // Found movie with selected letter +{ + +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[i].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } } +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; + } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// -//---- Function: Custom Search [Wertung]----- Erweiterung von User furryhamster Vielen Dank!! +//---- Function: Custom Search [Wertung]----- Erweiterung von User furryhamster Control2ielen Dank!! +// Sorting of movies, beginning with highest rated movies - result also considers watched/unwatched state of checkboxes! //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// function func_SearchWertung() { var doOnce = 0; -var Q = document.getElementById("navigation"); -var V = document.getElementById("div_moviewall"); +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); var i; var rating_movie = new Array(iCount); rating_movie[0] = new Array(2); @@ -250,14 +450,203 @@ rating_movie[i-1] = [i,DataRating[i]]; // Timestamp in ms // Array sorted with Quicksort function/ ascending rating_movie.quicksortCol(0, (rating_movie.length-1), 1); +//Loop through all movies and build navigation with new sorted moviearray! for (i = iCount;i > 0; i--){ +//get one specific movie from sorted array and hand over to Buildnavigation-Function! + var z = rating_movie[i-1][0]; + +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[z].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[z].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: [VideoBITRATE-Liste] +// Sorting of movies, beginning with highest Videobitrate movies - result also considers watched/unwatched state of checkboxes! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchQualiVideo() { +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +var vidbitrate_movie = new Array(iCount); +vidbitrate_movie[0] = new Array(2); +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar -var z = rating_movie[i-1][0]; -func_BuildNavigation(z); +for (i = 1;i <= iCount; i++){ +vidbitrate_movie[i-1] = [i,DataVidBitrate[i]]; // Control2ideoBitrate } -Q.innerHTML = '
      ' + navilinks_full + '
    '; -V.innerHTML = moviewall_full; +// Sort the array (numeric sorting) ascending +vidbitrate_movie.sort(function(x,y){return x[1]-y[1]}); + +//Loop through all movies and build navigation with new sorted moviearray! +for (i = iCount;i > 0; i--){ +//get one specific movie from sorted array and hand over to Buildnavigation-Function! + var z = vidbitrate_movie[i-1][0]; + +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[z].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[z].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: [AudioBITRATE-Liste] +// Sorting of movies, beginning with highest Audiobitrate movies - result also considers watched/unwatched state of checkboxes! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchQualiAudio() { +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +var audiobitrate_movie = new Array(iCount); +audiobitrate_movie[0] = new Array(2); +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +for (i = 1;i <= iCount; i++){ +audiobitrate_movie[i-1] = [i,DataAudBitrate[i]]; // AudioBitrate +} + +//Sort the array (numeric sorting) ascending +audiobitrate_movie.sort(function(x,y){return x[1]-y[1]}); + +//Loop through all movies and build navigation with new sorted moviearray! +for (i = iCount;i > 0; i--){ +//get one specific movie from sorted array and hand over to Buildnavigation-Function! + var z = audiobitrate_movie[i-1][0]; + +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[z].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[z].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(z); // Calls LoadPage Function and add match to left and right navigation string variable! + } + +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Un/Watched Movies ----- +// Depending on checked/unchecked Checkboxes show only filtered selection of movies +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_WatchedMovies() { + +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +// Loop through all entries and check movie PLAYCOUNT(i) (DataWatched[i]) + + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + for (i = 1;i <= iCount; i++) + { + + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + for (i = 1;i <= iCount; i++) + { + + if (DataWatched[i].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + for (i = 1;i <= iCount; i++) + { + + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + + } + } + + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; + } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// @@ -266,13 +655,13 @@ V.innerHTML = moviewall_full; function func_SearchActor(actor) { var myregexp = new RegExp(actor); // NEW RegeExp Object var doOnce = 0; -var Q = document.getElementById("navigation"); -var V = document.getElementById("div_moviewall"); +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); var i; navilinks_full = ""; // deletes all entries of left sidebar moviewall_full = ""; // deletes all entries of right sidebar -// Circle through all entries and test if movie actors contains "actor" +// Loop through all entries and check if movie actors contains "actor" for (i = 1;i <= iCount; i++) { var arr2str = DataActors[i].toString(); @@ -283,31 +672,283 @@ var result2 = arr2strLower.search(myregexp); if (result !== -1 || result2 !== -1) // Found something! { -doOnce = 1; func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! } } -if(doOnce === 1) // only when at least 1 match found refresh and show left and right sidebar + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Build Moviesetnavigation----- +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_BuildMoviesets() { +var Control1 = document.getElementById("navigation"); +var i; +var arrmoviesets=DataMoviesets.split("|"); +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + + +// Loop through all entries and check if movie contains "movieset" +//Navigation builder to build whole page dynamically +for (var i=0; i < arrmoviesets.length; i++) { -Q.innerHTML = '
      ' + navilinks_full + '
    '; -V.innerHTML = moviewall_full; +navilinks = string_navigation_1Movieset + i + string_navigation_2 + string_tabindexstart + i + string_tabindexend + arrmoviesets[i] + string_navigation_3 + string_navigation_4; +navilinks_full = navilinks_full + navilinks; } + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; } +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Show Moviesets----- +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_DisplayMovieset(moviesetindex) { +var arrmoviesets=DataMoviesets.split("|"); +var movieset=arrmoviesets[moviesetindex]; +var myregexp = new RegExp(movieset); // NEW RegeExp Object +var doOnce = 0; +var Control2 = document.getElementById("div_moviewall"); +var i; + +moviewall_full = ""; // deletes all entries of right sidebar + +// Loop through all entries and check if movie contains "movieset" +for (i = 1;i <= iCount; i++) +{ +var arr2str = DataSet[i].toString(); +var result = arr2str.search(myregexp); + +var arr2strLower = arr2str.toLowerCase(); +var result2 = arr2strLower.search(myregexp); +if (result !== -1 || result2 !== -1) // Found something! +{ +func_BuildNavigationMoviesets(i); // Calls LoadPage Function and add match to left and right navigation string variable! +} +} + +Control2.innerHTML = moviewall_full; +} //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// -//---- Function: Open Movie Folder ----- +//---- Function for building left and right navigation of site----- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// -function func_OpenFolder(Counter) { -var Adresse = window.location.href; -var searchURL = new RegExp('file:'); // NEW RegeExp Object -var result = Adresse.search(searchURL); +function func_BuildNavigationMoviesets(selectedmovie) +{ +var y, Control1, Control2, Control3, i, arr2str, result1, result2,result3,result4; +Control1 = document.getElementById("navigation"); +Control2 = document.getElementById("div_moviewall"); +Control3 = document.getElementById("div_moviecounter"); +var myregexp1 = new RegExp('1080'); +var myregexp2 = new RegExp('720'); +var myregexp3 = new RegExp('576'); +var myregexp4 = new RegExp('default'); +var myregexp5 = new RegExp('1'); +var bluraycounter = 0; +var dvdcounter = 0; +var othercounter = 0; +var moviecounter = 0; +var watchedcounter = 0; +var threedcounter = 0; -if (result !== -1) // Lokal +//execute only for buildung up navigation for ALL movies (PageLoad, Reset-Button)! +if (selectedmovie === 0) { +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar +y = iCount; // this will make sure to add navigation of ALL movies! +func_ShowDetails(1); +} +else // only navigation elements of one specific movie will be added! { -window.open (DataURL[Counter] + '/'); +y = selectedmovie; } -else // Seite ist im Internet +//Navigation builder for left and right sidebar +for (i = selectedmovie;i <= y; i++) { -alert( 'Kein Zugriff auf Ordner m�glich!' ); +if (i === 0) { +i = 1; } +arr2str = DataSource[i].toString(); +result1 = arr2str.search(myregexp1); +result2 = arr2str.search(myregexp2); +result3 = arr2str.search(myregexp3); +result4 = arr2str.search(myregexp4); + + + +//Navigation builder to build whole page dynamically +//navilinks_full = navilinks_full + navilinks; +moviewall = string_moviewalllink_1 + i + string_moviewalllink_2 + i + string_moviewalllink_3 + string_moviewallpic_1 + DataBild[i] + string_moviewallpic_2 + DataName[i] + string_moviewallpic_3 + DataName[i] + string_moviewallpic_4; +moviewall_full = moviewall_full + moviewall; +} +if (selectedmovie === 0) { // only needed when function not called from another function +selectedmovie = 1; +moviecounter = dvdcounter + bluraycounter + othercounter; +Control1.innerHTML = '
      ' + navilinks_full + '

    ' + version + '

    '; +Control2.innerHTML = moviewall_full; +Control3.innerHTML = '

    Total: ' + moviecounter + '   Blurays: ' + bluraycounter + '  DVD: ' + dvdcounter + '  3D: ' + threedcounter + '  Rest: ' + othercounter + '  Watched: ' + watchedcounter + '

    '; } +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Build TVSHOWnavigation----- +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_BuildTvShows() { +var Control1 = document.getElementById("navigation"); +var i; +var arrtvshowpackage=DataTVShows.split("|"); +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + + +// Loop through all entries and check if movie contains "movieset" +//Navigation builder to build whole page dynamically +for (var i=0; i < arrtvshowpackage.length; i++) +{ + +var arrtvshow=arrtvshowpackage[i].split("*"); +var seasonposters = ""; + for (var z=2; z < arrtvshow.length; z++) + { + seasonposters = seasonposters + "|" + arrtvshow[z] + } +seasonposters = "'" + seasonposters + "'" +escape(seasonposters) +navilinks = string_navigation_1TvShow + seasonposters + string_navigation_2 + string_tabindexstart + i + string_tabindexend + arrtvshow[1] + string_navigation_3 + string_navigation_4; +navilinks_full = navilinks_full + navilinks; +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Show TvSeasonPosters----- +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_DisplayTvSeason(seasonposters) { +var Control2 = document.getElementById("div_moviewall"); +var i; + +var arrseasonposter=seasonposters.split("|"); + +moviewall_full = ""; // deletes all entries of right sidebar + for (var i=1; i < arrseasonposter.length; i++) + { + func_BuildNavigationTVSeason(arrseasonposter[i]); // Calls LoadPage Function and add match to left and right navigation string variable! + } +Control2.innerHTML = moviewall_full; +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Show TVShowInfo----- +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_ShowDetailsTvSeason(tvshowID) { +//---- TODO - NOT USED at moment, maybe later show TV Season Details...----- +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function for building left and right navigation of site----- +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_BuildNavigationTVSeason(seasonposter) +{ +//Navigation builder to build whole page dynamically +//navilinks_full = navilinks_full + navilinks; +moviewall = string_tvshowwalllink_1 + "0" + string_tvshowwalllink_2 + "0" + string_tvshowwalllink_3 + string_tvshowwallpic_1 + "export/" + seasonposter + ".jpg" + string_tvshowwallpic_2 + "-" + string_tvshowwallpic_3 + "-" + string_tvshowwallpic_4; +moviewall_full = moviewall_full + moviewall; + +} + + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Custom Search [3D MOVIE]----- +// Displays all movies which have MULTIVIEW Scanned <> zero - result also considers watched/unwatched state of checkboxes! +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_SearchThreeD() { + +var doOnce = 0; +var Control1 = document.getElementById("navigation"); +var Control2 = document.getElementById("div_moviewall"); +var i; +navilinks_full = ""; // deletes all entries of left sidebar +moviewall_full = ""; // deletes all entries of right sidebar + +// Loop through all entries and check if movie genre contains "selectedgenre" +for (i = 1;i <= iCount; i++) +{ + +//Now look if 3Dmovie +if (DataThreed[i].toString() !== "") // Returns true if not empty("") or zero (0) -> MULTIVIEW<>"" or MULTIVIEW<>"0" --> Found: 3D Movie! +{ + +// Also consider watched/unwatched state of checkboxes and display accordingly ! + // if watched checkbox is checked -> show watched movies + if(document.getElementById('unwatched').checked == false && document.getElementById('watched').checked == true) + { + if (DataWatched[i].toString() !== "") // Returns true if not empty("") or zero (0) -> PLAYCOUNT<>"" or PLAYCOUNT<>"0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // if unwatched checkbox is checked -> show unwatched movies + else if(document.getElementById('unwatched').checked == true && document.getElementById('watched').checked == false) + { + if (DataWatched[i].toString() == "") // Returns true if empty("") and zero (0) -> PLAYCOUNT="" or PLAYCOUNT="0" + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } + } + // in other case if both checkboxes unchecked/checked show all movies unfiltered... + else + { + func_BuildNavigation(i); // Calls LoadPage Function and add match to left and right navigation string variable! + } +} +} + +Control1.innerHTML = '
      ' + navilinks_full + '
    '; +Control2.innerHTML = moviewall_full; + +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +//---- Function: Open Movie Folder ----- +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++// +function func_OpenFolder(Counter) { + +window.open ('file:///' + DataURL[Counter] + '/' + DataFilename[Counter], '_blank'); + +} + + +/* ****************************************************************************** * // CREDIT: Quaese, Quelle: http://www.tutorials.de/javascript-ajax/283260-javascript-zweidimensionales-array-sortieren.html + * Arrayobjekt um Methode erweitern - Array mit Quicksort nach Spalten sortieren + * + * Parameter: intLower - Untergrenze des Teilbereichs (beim Start i.A. 0) + * intUpper - Obergrenze des Teilbereichs (beim Start i.A. Array.length-1) + * intCol - Spalte, nach der sortiert werden soll (beginnend bei 0) + * ****************************************************************************** */ +Array.prototype.quicksortCol = function(intLower, intUpper, intCol){ + var i = intLower, j = intUpper; + var varHelp = new Array(); + // Teilen des Bereiches und Vergleichswert ermitteln + var varX = this[parseInt(Math.floor(intLower+intUpper)/2)][intCol]; + + // Teilbereiche bearbeiten bis: + // - "linker" Bereich enth�lt alle "kleineren" Werte + // - "rechter" Bereich enth�lt alle "gr�sseren" Werte + do{ + // Solange Wert im linken Teil kleiner ist -> Grenzeindex inkrementieren + while(this[i][intCol] < varX) i++; + // Solange Wert im rechten Teil gr�sser ist -> Grenzindex dekrementieren + while(varX < this[j][intCol]) j--; + + // Untergrenze kleiner als Obergrenze -> Tausch notwendig + if(i<=j){ + var varHelp = this[i]; + this[i] = this[j]; + this[j] = varHelp; + i++; + j--; + } + }while(i - + - + @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/Ember Media Manager/Resources/haswatched.png b/Ember Media Manager/Resources/haswatched.png new file mode 100644 index 0000000..bc598ec Binary files /dev/null and b/Ember Media Manager/Resources/haswatched.png differ diff --git a/Ember Media Manager/dlgEditEpisode.Designer.vb b/Ember Media Manager/dlgEditEpisode.Designer.vb index 3741e5d..305b7d4 100644 --- a/Ember Media Manager/dlgEditEpisode.Designer.vb +++ b/Ember Media Manager/dlgEditEpisode.Designer.vb @@ -22,727 +22,741 @@ Partial Class dlgEditEpisode 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgEditEpisode)) - Me.pnlTop = New System.Windows.Forms.Panel() - Me.Label2 = New System.Windows.Forms.Label() - Me.Label1 = New System.Windows.Forms.Label() - Me.PictureBox1 = New System.Windows.Forms.PictureBox() - Me.TabControl1 = New System.Windows.Forms.TabControl() - Me.TabPage1 = New System.Windows.Forms.TabPage() - Me.btnActorDown = New System.Windows.Forms.Button() - Me.btnActorUp = New System.Windows.Forms.Button() - Me.txtAired = New System.Windows.Forms.TextBox() - Me.txtEpisode = New System.Windows.Forms.TextBox() - Me.lblEpisode = New System.Windows.Forms.Label() - Me.txtSeason = New System.Windows.Forms.TextBox() - Me.lblSeason = New System.Windows.Forms.Label() - Me.lblCredits = New System.Windows.Forms.Label() - Me.txtCredits = New System.Windows.Forms.TextBox() - Me.btnEditActor = New System.Windows.Forms.Button() - Me.btnAddActor = New System.Windows.Forms.Button() - Me.btnManual = New System.Windows.Forms.Button() - Me.btnRemove = New System.Windows.Forms.Button() - Me.lblActors = New System.Windows.Forms.Label() - Me.lvActors = New System.Windows.Forms.ListView() - Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colRole = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colThumb = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.lblDirector = New System.Windows.Forms.Label() - Me.txtDirector = New System.Windows.Forms.TextBox() - Me.lblPlot = New System.Windows.Forms.Label() - Me.txtPlot = New System.Windows.Forms.TextBox() - Me.pbStar5 = New System.Windows.Forms.PictureBox() - Me.pbStar4 = New System.Windows.Forms.PictureBox() - Me.pbStar3 = New System.Windows.Forms.PictureBox() - Me.pbStar2 = New System.Windows.Forms.PictureBox() - Me.pbStar1 = New System.Windows.Forms.PictureBox() - Me.lblRating = New System.Windows.Forms.Label() - Me.lblAired = New System.Windows.Forms.Label() - Me.lblTitle = New System.Windows.Forms.Label() - Me.txtTitle = New System.Windows.Forms.TextBox() - Me.TabPage2 = New System.Windows.Forms.TabPage() - Me.btnSetPosterDL = New System.Windows.Forms.Button() - Me.btnRemovePoster = New System.Windows.Forms.Button() - Me.lblPosterSize = New System.Windows.Forms.Label() - Me.btnSetPosterScrape = New System.Windows.Forms.Button() - Me.btnSetPoster = New System.Windows.Forms.Button() - Me.pbPoster = New System.Windows.Forms.PictureBox() - Me.TabPage3 = New System.Windows.Forms.TabPage() - Me.lblFanartSize = New System.Windows.Forms.Label() - Me.btnSetFanartDL = New System.Windows.Forms.Button() - Me.btnRemoveFanart = New System.Windows.Forms.Button() - Me.btnSetFanartScrape = New System.Windows.Forms.Button() - Me.btnSetFanart = New System.Windows.Forms.Button() - Me.pbFanart = New System.Windows.Forms.PictureBox() - Me.TabPage4 = New System.Windows.Forms.TabPage() - Me.pnlFrameExtrator = New System.Windows.Forms.Panel() - Me.TabPage5 = New System.Windows.Forms.TabPage() - Me.pnlFileInfo = New System.Windows.Forms.Panel() - Me.Cancel_Button = New System.Windows.Forms.Button() - Me.OK_Button = New System.Windows.Forms.Button() - Me.ofdImage = New System.Windows.Forms.OpenFileDialog() - Me.pnlTop.SuspendLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TabControl1.SuspendLayout() - Me.TabPage1.SuspendLayout() - CType(Me.pbStar5, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStar4, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStar3, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TabPage2.SuspendLayout() - CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TabPage3.SuspendLayout() - CType(Me.pbFanart, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TabPage4.SuspendLayout() - Me.TabPage5.SuspendLayout() - Me.SuspendLayout() - ' - 'pnlTop - ' - Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue - Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlTop.Controls.Add(Me.Label2) - Me.pnlTop.Controls.Add(Me.Label1) - Me.pnlTop.Controls.Add(Me.PictureBox1) - Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top - Me.pnlTop.Location = New System.Drawing.Point(0, 0) - Me.pnlTop.Name = "pnlTop" - Me.pnlTop.Size = New System.Drawing.Size(854, 64) - Me.pnlTop.TabIndex = 2 - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.BackColor = System.Drawing.Color.Transparent - Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label2.ForeColor = System.Drawing.Color.White - Me.Label2.Location = New System.Drawing.Point(61, 38) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(214, 13) - Me.Label2.TabIndex = 1 - Me.Label2.Text = "Edit the details for the selected episode." - ' - 'Label1 - ' - Me.Label1.AutoSize = True - Me.Label1.BackColor = System.Drawing.Color.Transparent - Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label1.ForeColor = System.Drawing.Color.White - Me.Label1.Location = New System.Drawing.Point(58, 3) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(155, 32) - Me.Label1.TabIndex = 0 - Me.Label1.Text = "Edit Episode" - ' - 'PictureBox1 - ' - Me.PictureBox1.BackColor = System.Drawing.Color.Transparent - Me.PictureBox1.ErrorImage = Nothing - Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) - Me.PictureBox1.InitialImage = Nothing - Me.PictureBox1.Location = New System.Drawing.Point(7, 8) - Me.PictureBox1.Name = "PictureBox1" - Me.PictureBox1.Size = New System.Drawing.Size(48, 48) - Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox1.TabIndex = 0 - Me.PictureBox1.TabStop = False - ' - 'TabControl1 - ' - Me.TabControl1.Controls.Add(Me.TabPage1) - Me.TabControl1.Controls.Add(Me.TabPage2) - Me.TabControl1.Controls.Add(Me.TabPage3) - Me.TabControl1.Controls.Add(Me.TabPage4) - Me.TabControl1.Controls.Add(Me.TabPage5) - Me.TabControl1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.TabControl1.Location = New System.Drawing.Point(4, 70) - Me.TabControl1.Name = "TabControl1" - Me.TabControl1.SelectedIndex = 0 - Me.TabControl1.Size = New System.Drawing.Size(844, 478) - Me.TabControl1.TabIndex = 3 - ' - 'TabPage1 - ' - Me.TabPage1.Controls.Add(Me.btnActorDown) - Me.TabPage1.Controls.Add(Me.btnActorUp) - Me.TabPage1.Controls.Add(Me.txtAired) - Me.TabPage1.Controls.Add(Me.txtEpisode) - Me.TabPage1.Controls.Add(Me.lblEpisode) - Me.TabPage1.Controls.Add(Me.txtSeason) - Me.TabPage1.Controls.Add(Me.lblSeason) - Me.TabPage1.Controls.Add(Me.lblCredits) - Me.TabPage1.Controls.Add(Me.txtCredits) - Me.TabPage1.Controls.Add(Me.btnEditActor) - Me.TabPage1.Controls.Add(Me.btnAddActor) - Me.TabPage1.Controls.Add(Me.btnManual) - Me.TabPage1.Controls.Add(Me.btnRemove) - Me.TabPage1.Controls.Add(Me.lblActors) - Me.TabPage1.Controls.Add(Me.lvActors) - Me.TabPage1.Controls.Add(Me.lblDirector) - Me.TabPage1.Controls.Add(Me.txtDirector) - Me.TabPage1.Controls.Add(Me.lblPlot) - Me.TabPage1.Controls.Add(Me.txtPlot) - Me.TabPage1.Controls.Add(Me.pbStar5) - Me.TabPage1.Controls.Add(Me.pbStar4) - Me.TabPage1.Controls.Add(Me.pbStar3) - Me.TabPage1.Controls.Add(Me.pbStar2) - Me.TabPage1.Controls.Add(Me.pbStar1) - Me.TabPage1.Controls.Add(Me.lblRating) - Me.TabPage1.Controls.Add(Me.lblAired) - Me.TabPage1.Controls.Add(Me.lblTitle) - Me.TabPage1.Controls.Add(Me.txtTitle) - Me.TabPage1.Location = New System.Drawing.Point(4, 22) - Me.TabPage1.Name = "TabPage1" - Me.TabPage1.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage1.Size = New System.Drawing.Size(836, 452) - Me.TabPage1.TabIndex = 0 - Me.TabPage1.Text = "Details" - Me.TabPage1.UseVisualStyleBackColor = True - ' - 'btnActorDown - ' - Me.btnActorDown.Image = CType(resources.GetObject("btnActorDown.Image"), System.Drawing.Image) - Me.btnActorDown.Location = New System.Drawing.Point(328, 423) - Me.btnActorDown.Name = "btnActorDown" - Me.btnActorDown.Size = New System.Drawing.Size(23, 23) - Me.btnActorDown.TabIndex = 20 - Me.btnActorDown.UseVisualStyleBackColor = True - ' - 'btnActorUp - ' - Me.btnActorUp.Image = CType(resources.GetObject("btnActorUp.Image"), System.Drawing.Image) - Me.btnActorUp.Location = New System.Drawing.Point(304, 423) - Me.btnActorUp.Name = "btnActorUp" - Me.btnActorUp.Size = New System.Drawing.Size(23, 23) - Me.btnActorUp.TabIndex = 19 - Me.btnActorUp.UseVisualStyleBackColor = True - ' - 'txtAired - ' - Me.txtAired.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtAired.Location = New System.Drawing.Point(111, 67) - Me.txtAired.Name = "txtAired" - Me.txtAired.Size = New System.Drawing.Size(88, 22) - Me.txtAired.TabIndex = 9 - ' - 'txtEpisode - ' - Me.txtEpisode.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtEpisode.Location = New System.Drawing.Point(59, 67) - Me.txtEpisode.Name = "txtEpisode" - Me.txtEpisode.Size = New System.Drawing.Size(46, 22) - Me.txtEpisode.TabIndex = 7 - ' - 'lblEpisode - ' - Me.lblEpisode.AutoSize = True - Me.lblEpisode.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblEpisode.Location = New System.Drawing.Point(59, 51) - Me.lblEpisode.Name = "lblEpisode" - Me.lblEpisode.Size = New System.Drawing.Size(51, 13) - Me.lblEpisode.TabIndex = 6 - Me.lblEpisode.Text = "Episode:" - ' - 'txtSeason - ' - Me.txtSeason.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtSeason.Location = New System.Drawing.Point(7, 67) - Me.txtSeason.Name = "txtSeason" - Me.txtSeason.Size = New System.Drawing.Size(46, 22) - Me.txtSeason.TabIndex = 5 - ' - 'lblSeason - ' - Me.lblSeason.AutoSize = True - Me.lblSeason.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblSeason.Location = New System.Drawing.Point(7, 51) - Me.lblSeason.Name = "lblSeason" - Me.lblSeason.Size = New System.Drawing.Size(47, 13) - Me.lblSeason.TabIndex = 4 - Me.lblSeason.Text = "Season:" - ' - 'lblCredits - ' - Me.lblCredits.AutoSize = True - Me.lblCredits.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblCredits.Location = New System.Drawing.Point(217, 139) - Me.lblCredits.Name = "lblCredits" - Me.lblCredits.Size = New System.Drawing.Size(46, 13) - Me.lblCredits.TabIndex = 13 - Me.lblCredits.Text = "Credits:" - ' - 'txtCredits - ' - Me.txtCredits.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtCredits.Location = New System.Drawing.Point(217, 155) - Me.txtCredits.Name = "txtCredits" - Me.txtCredits.Size = New System.Drawing.Size(408, 22) - Me.txtCredits.TabIndex = 14 - ' - 'btnEditActor - ' - Me.btnEditActor.Image = CType(resources.GetObject("btnEditActor.Image"), System.Drawing.Image) - Me.btnEditActor.Location = New System.Drawing.Point(35, 423) - Me.btnEditActor.Name = "btnEditActor" - Me.btnEditActor.Size = New System.Drawing.Size(23, 23) - Me.btnEditActor.TabIndex = 18 - Me.btnEditActor.UseVisualStyleBackColor = True - ' - 'btnAddActor - ' - Me.btnAddActor.Image = CType(resources.GetObject("btnAddActor.Image"), System.Drawing.Image) - Me.btnAddActor.Location = New System.Drawing.Point(6, 423) - Me.btnAddActor.Name = "btnAddActor" - Me.btnAddActor.Size = New System.Drawing.Size(23, 23) - Me.btnAddActor.TabIndex = 17 - Me.btnAddActor.UseVisualStyleBackColor = True - ' - 'btnManual - ' - Me.btnManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnManual.Location = New System.Drawing.Point(738, 423) - Me.btnManual.Name = "btnManual" - Me.btnManual.Size = New System.Drawing.Size(92, 23) - Me.btnManual.TabIndex = 22 - Me.btnManual.Text = "Manual Edit" - Me.btnManual.UseVisualStyleBackColor = True - ' - 'btnRemove - ' - Me.btnRemove.Image = CType(resources.GetObject("btnRemove.Image"), System.Drawing.Image) - Me.btnRemove.Location = New System.Drawing.Point(602, 423) - Me.btnRemove.Name = "btnRemove" - Me.btnRemove.Size = New System.Drawing.Size(23, 23) - Me.btnRemove.TabIndex = 21 - Me.btnRemove.UseVisualStyleBackColor = True - ' - 'lblActors - ' - Me.lblActors.AutoSize = True - Me.lblActors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblActors.Location = New System.Drawing.Point(7, 188) - Me.lblActors.Name = "lblActors" - Me.lblActors.Size = New System.Drawing.Size(43, 13) - Me.lblActors.TabIndex = 15 - Me.lblActors.Text = "Actors:" - ' - 'lvActors - ' - Me.lvActors.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colName, Me.colRole, Me.colThumb}) - Me.lvActors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lvActors.FullRowSelect = True - Me.lvActors.Location = New System.Drawing.Point(7, 204) - Me.lvActors.Name = "lvActors" - Me.lvActors.Size = New System.Drawing.Size(618, 213) - Me.lvActors.TabIndex = 16 - Me.lvActors.UseCompatibleStateImageBehavior = False - Me.lvActors.View = System.Windows.Forms.View.Details - ' - 'colName - ' - Me.colName.Text = "Name" - Me.colName.Width = 110 - ' - 'colRole - ' - Me.colRole.Text = "Role" - Me.colRole.Width = 100 - ' - 'colThumb - ' - Me.colThumb.Text = "Thumb" - Me.colThumb.Width = 387 - ' - 'lblDirector - ' - Me.lblDirector.AutoSize = True - Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblDirector.Location = New System.Drawing.Point(7, 139) - Me.lblDirector.Name = "lblDirector" - Me.lblDirector.Size = New System.Drawing.Size(51, 13) - Me.lblDirector.TabIndex = 11 - Me.lblDirector.Text = "Director:" - ' - 'txtDirector - ' - Me.txtDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtDirector.Location = New System.Drawing.Point(7, 155) - Me.txtDirector.Name = "txtDirector" - Me.txtDirector.Size = New System.Drawing.Size(192, 22) - Me.txtDirector.TabIndex = 12 - ' - 'lblPlot - ' - Me.lblPlot.AutoSize = True - Me.lblPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblPlot.Location = New System.Drawing.Point(217, 7) - Me.lblPlot.Name = "lblPlot" - Me.lblPlot.Size = New System.Drawing.Size(31, 13) - Me.lblPlot.TabIndex = 2 - Me.lblPlot.Text = "Plot:" - ' - 'txtPlot - ' - Me.txtPlot.AcceptsReturn = True - Me.txtPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtPlot.Location = New System.Drawing.Point(217, 26) - Me.txtPlot.Multiline = True - Me.txtPlot.Name = "txtPlot" - Me.txtPlot.Size = New System.Drawing.Size(611, 108) - Me.txtPlot.TabIndex = 3 - ' - 'pbStar5 - ' - Me.pbStar5.Location = New System.Drawing.Point(104, 110) - Me.pbStar5.Name = "pbStar5" - Me.pbStar5.Size = New System.Drawing.Size(24, 24) - Me.pbStar5.TabIndex = 67 - Me.pbStar5.TabStop = False - ' - 'pbStar4 - ' - Me.pbStar4.Location = New System.Drawing.Point(80, 110) - Me.pbStar4.Name = "pbStar4" - Me.pbStar4.Size = New System.Drawing.Size(24, 24) - Me.pbStar4.TabIndex = 66 - Me.pbStar4.TabStop = False - ' - 'pbStar3 - ' - Me.pbStar3.Location = New System.Drawing.Point(56, 110) - Me.pbStar3.Name = "pbStar3" - Me.pbStar3.Size = New System.Drawing.Size(24, 24) - Me.pbStar3.TabIndex = 65 - Me.pbStar3.TabStop = False - ' - 'pbStar2 - ' - Me.pbStar2.Location = New System.Drawing.Point(32, 110) - Me.pbStar2.Name = "pbStar2" - Me.pbStar2.Size = New System.Drawing.Size(24, 24) - Me.pbStar2.TabIndex = 64 - Me.pbStar2.TabStop = False - ' - 'pbStar1 - ' - Me.pbStar1.Location = New System.Drawing.Point(8, 110) - Me.pbStar1.Name = "pbStar1" - Me.pbStar1.Size = New System.Drawing.Size(24, 24) - Me.pbStar1.TabIndex = 63 - Me.pbStar1.TabStop = False - ' - 'lblRating - ' - Me.lblRating.AutoSize = True - Me.lblRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblRating.Location = New System.Drawing.Point(7, 94) - Me.lblRating.Name = "lblRating" - Me.lblRating.Size = New System.Drawing.Size(44, 13) - Me.lblRating.TabIndex = 10 - Me.lblRating.Text = "Rating:" - ' - 'lblAired - ' - Me.lblAired.AutoSize = True - Me.lblAired.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblAired.Location = New System.Drawing.Point(111, 51) - Me.lblAired.Name = "lblAired" - Me.lblAired.Size = New System.Drawing.Size(38, 13) - Me.lblAired.TabIndex = 8 - Me.lblAired.Text = "Aired:" - ' - 'lblTitle - ' - Me.lblTitle.AutoSize = True - Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblTitle.Location = New System.Drawing.Point(7, 7) - Me.lblTitle.Name = "lblTitle" - Me.lblTitle.Size = New System.Drawing.Size(32, 13) - Me.lblTitle.TabIndex = 0 - Me.lblTitle.Text = "Title:" - ' - 'txtTitle - ' - Me.txtTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtTitle.Location = New System.Drawing.Point(7, 26) - Me.txtTitle.Name = "txtTitle" - Me.txtTitle.Size = New System.Drawing.Size(192, 22) - Me.txtTitle.TabIndex = 1 - ' - 'TabPage2 - ' - Me.TabPage2.Controls.Add(Me.btnSetPosterDL) - Me.TabPage2.Controls.Add(Me.btnRemovePoster) - Me.TabPage2.Controls.Add(Me.lblPosterSize) - Me.TabPage2.Controls.Add(Me.btnSetPosterScrape) - Me.TabPage2.Controls.Add(Me.btnSetPoster) - Me.TabPage2.Controls.Add(Me.pbPoster) - Me.TabPage2.Location = New System.Drawing.Point(4, 22) - Me.TabPage2.Name = "TabPage2" - Me.TabPage2.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage2.Size = New System.Drawing.Size(836, 452) - Me.TabPage2.TabIndex = 1 - Me.TabPage2.Text = "Poster" - Me.TabPage2.UseVisualStyleBackColor = True - ' - 'btnSetPosterDL - ' - Me.btnSetPosterDL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnSetPosterDL.Image = CType(resources.GetObject("btnSetPosterDL.Image"), System.Drawing.Image) - Me.btnSetPosterDL.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnSetPosterDL.Location = New System.Drawing.Point(735, 180) - Me.btnSetPosterDL.Name = "btnSetPosterDL" - Me.btnSetPosterDL.Size = New System.Drawing.Size(96, 83) - Me.btnSetPosterDL.TabIndex = 3 - Me.btnSetPosterDL.Text = "Change Poster (Download)" - Me.btnSetPosterDL.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnSetPosterDL.UseVisualStyleBackColor = True - ' - 'btnRemovePoster - ' - Me.btnRemovePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnRemovePoster.Image = CType(resources.GetObject("btnRemovePoster.Image"), System.Drawing.Image) - Me.btnRemovePoster.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnRemovePoster.Location = New System.Drawing.Point(735, 363) - Me.btnRemovePoster.Name = "btnRemovePoster" - Me.btnRemovePoster.Size = New System.Drawing.Size(96, 83) - Me.btnRemovePoster.TabIndex = 4 - Me.btnRemovePoster.Text = "Remove Poster" - Me.btnRemovePoster.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnRemovePoster.UseVisualStyleBackColor = True - ' - 'lblPosterSize - ' - Me.lblPosterSize.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblPosterSize.Location = New System.Drawing.Point(8, 8) - Me.lblPosterSize.Name = "lblPosterSize" - Me.lblPosterSize.Size = New System.Drawing.Size(104, 23) - Me.lblPosterSize.TabIndex = 0 - Me.lblPosterSize.Text = "Size: (XXXXxXXXX)" - Me.lblPosterSize.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.lblPosterSize.Visible = False - ' - 'btnSetPosterScrape - ' - Me.btnSetPosterScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnSetPosterScrape.Image = CType(resources.GetObject("btnSetPosterScrape.Image"), System.Drawing.Image) - Me.btnSetPosterScrape.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnSetPosterScrape.Location = New System.Drawing.Point(735, 93) - Me.btnSetPosterScrape.Name = "btnSetPosterScrape" - Me.btnSetPosterScrape.Size = New System.Drawing.Size(96, 83) - Me.btnSetPosterScrape.TabIndex = 2 - Me.btnSetPosterScrape.Text = "Change Poster (Scrape)" - Me.btnSetPosterScrape.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnSetPosterScrape.UseVisualStyleBackColor = True - ' - 'btnSetPoster - ' - Me.btnSetPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnSetPoster.Image = CType(resources.GetObject("btnSetPoster.Image"), System.Drawing.Image) - Me.btnSetPoster.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnSetPoster.Location = New System.Drawing.Point(735, 6) - Me.btnSetPoster.Name = "btnSetPoster" - Me.btnSetPoster.Size = New System.Drawing.Size(96, 83) - Me.btnSetPoster.TabIndex = 1 - Me.btnSetPoster.Text = "Change Poster (Local)" - Me.btnSetPoster.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnSetPoster.UseVisualStyleBackColor = True - ' - 'pbPoster - ' - Me.pbPoster.BackColor = System.Drawing.Color.DimGray - Me.pbPoster.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pbPoster.Location = New System.Drawing.Point(6, 6) - Me.pbPoster.Name = "pbPoster" - Me.pbPoster.Size = New System.Drawing.Size(724, 440) - Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbPoster.TabIndex = 0 - Me.pbPoster.TabStop = False - ' - 'TabPage3 - ' - Me.TabPage3.Controls.Add(Me.lblFanartSize) - Me.TabPage3.Controls.Add(Me.btnSetFanartDL) - Me.TabPage3.Controls.Add(Me.btnRemoveFanart) - Me.TabPage3.Controls.Add(Me.btnSetFanartScrape) - Me.TabPage3.Controls.Add(Me.btnSetFanart) - Me.TabPage3.Controls.Add(Me.pbFanart) - Me.TabPage3.Location = New System.Drawing.Point(4, 22) - Me.TabPage3.Name = "TabPage3" - Me.TabPage3.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage3.Size = New System.Drawing.Size(836, 452) - Me.TabPage3.TabIndex = 6 - Me.TabPage3.Text = "Fanart" - Me.TabPage3.UseVisualStyleBackColor = True - ' - 'lblFanartSize - ' - Me.lblFanartSize.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblFanartSize.Location = New System.Drawing.Point(8, 8) - Me.lblFanartSize.Name = "lblFanartSize" - Me.lblFanartSize.Size = New System.Drawing.Size(104, 23) - Me.lblFanartSize.TabIndex = 0 - Me.lblFanartSize.Text = "Size: (XXXXxXXXX)" - Me.lblFanartSize.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.lblFanartSize.Visible = False - ' - 'btnSetFanartDL - ' - Me.btnSetFanartDL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnSetFanartDL.Image = CType(resources.GetObject("btnSetFanartDL.Image"), System.Drawing.Image) - Me.btnSetFanartDL.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnSetFanartDL.Location = New System.Drawing.Point(735, 180) - Me.btnSetFanartDL.Name = "btnSetFanartDL" - Me.btnSetFanartDL.Size = New System.Drawing.Size(96, 83) - Me.btnSetFanartDL.TabIndex = 3 - Me.btnSetFanartDL.Text = "Change Fanart (Download)" - Me.btnSetFanartDL.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnSetFanartDL.UseVisualStyleBackColor = True - ' - 'btnRemoveFanart - ' - Me.btnRemoveFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnRemoveFanart.Image = CType(resources.GetObject("btnRemoveFanart.Image"), System.Drawing.Image) - Me.btnRemoveFanart.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnRemoveFanart.Location = New System.Drawing.Point(735, 363) - Me.btnRemoveFanart.Name = "btnRemoveFanart" - Me.btnRemoveFanart.Size = New System.Drawing.Size(96, 83) - Me.btnRemoveFanart.TabIndex = 4 - Me.btnRemoveFanart.Text = "Remove Fanart" - Me.btnRemoveFanart.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnRemoveFanart.UseVisualStyleBackColor = True - ' - 'btnSetFanartScrape - ' - Me.btnSetFanartScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnSetFanartScrape.Image = CType(resources.GetObject("btnSetFanartScrape.Image"), System.Drawing.Image) - Me.btnSetFanartScrape.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnSetFanartScrape.Location = New System.Drawing.Point(735, 93) - Me.btnSetFanartScrape.Name = "btnSetFanartScrape" - Me.btnSetFanartScrape.Size = New System.Drawing.Size(96, 83) - Me.btnSetFanartScrape.TabIndex = 2 - Me.btnSetFanartScrape.Text = "Change Fanart (Scrape)" - Me.btnSetFanartScrape.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnSetFanartScrape.UseVisualStyleBackColor = True - ' - 'btnSetFanart - ' - Me.btnSetFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnSetFanart.Image = CType(resources.GetObject("btnSetFanart.Image"), System.Drawing.Image) - Me.btnSetFanart.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnSetFanart.Location = New System.Drawing.Point(735, 6) - Me.btnSetFanart.Name = "btnSetFanart" - Me.btnSetFanart.Size = New System.Drawing.Size(96, 83) - Me.btnSetFanart.TabIndex = 1 - Me.btnSetFanart.Text = "Change Fanart (Local)" - Me.btnSetFanart.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnSetFanart.UseVisualStyleBackColor = True - ' - 'pbFanart - ' - Me.pbFanart.BackColor = System.Drawing.Color.DimGray - Me.pbFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pbFanart.Location = New System.Drawing.Point(6, 6) - Me.pbFanart.Name = "pbFanart" - Me.pbFanart.Size = New System.Drawing.Size(724, 440) - Me.pbFanart.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbFanart.TabIndex = 30 - Me.pbFanart.TabStop = False - ' - 'TabPage4 - ' - Me.TabPage4.Controls.Add(Me.pnlFrameExtrator) - Me.TabPage4.Location = New System.Drawing.Point(4, 22) - Me.TabPage4.Name = "TabPage4" - Me.TabPage4.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage4.Size = New System.Drawing.Size(836, 452) - Me.TabPage4.TabIndex = 3 - Me.TabPage4.Text = "Frame Extraction" - Me.TabPage4.UseVisualStyleBackColor = True - ' - 'pnlFrameExtrator - ' - Me.pnlFrameExtrator.Location = New System.Drawing.Point(1, 0) - Me.pnlFrameExtrator.Name = "pnlFrameExtrator" - Me.pnlFrameExtrator.Size = New System.Drawing.Size(834, 452) - Me.pnlFrameExtrator.TabIndex = 0 - ' - 'TabPage5 - ' - Me.TabPage5.Controls.Add(Me.pnlFileInfo) - Me.TabPage5.Location = New System.Drawing.Point(4, 22) - Me.TabPage5.Name = "TabPage5" - Me.TabPage5.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage5.Size = New System.Drawing.Size(836, 452) - Me.TabPage5.TabIndex = 5 - Me.TabPage5.Text = "Meta Data" - Me.TabPage5.UseVisualStyleBackColor = True - ' - 'pnlFileInfo - ' - Me.pnlFileInfo.Location = New System.Drawing.Point(-4, 0) - Me.pnlFileInfo.Name = "pnlFileInfo" - Me.pnlFileInfo.Size = New System.Drawing.Size(844, 452) - Me.pnlFileInfo.TabIndex = 0 - ' - 'Cancel_Button - ' - Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Cancel_Button.Location = New System.Drawing.Point(781, 553) - Me.Cancel_Button.Name = "Cancel_Button" - Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) - Me.Cancel_Button.TabIndex = 1 - Me.Cancel_Button.Text = "Cancel" - ' - 'OK_Button - ' - Me.OK_Button.Location = New System.Drawing.Point(708, 553) - Me.OK_Button.Name = "OK_Button" - Me.OK_Button.Size = New System.Drawing.Size(67, 23) - Me.OK_Button.TabIndex = 0 - Me.OK_Button.Text = "OK" - ' - 'dlgEditEpisode - ' - Me.AcceptButton = Me.OK_Button - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(854, 582) - Me.Controls.Add(Me.TabControl1) - Me.Controls.Add(Me.Cancel_Button) - Me.Controls.Add(Me.OK_Button) - Me.Controls.Add(Me.pnlTop) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "dlgEditEpisode" - Me.ShowInTaskbar = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Edit Episode" - Me.pnlTop.ResumeLayout(False) - Me.pnlTop.PerformLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() - Me.TabControl1.ResumeLayout(False) - Me.TabPage1.ResumeLayout(False) - Me.TabPage1.PerformLayout() - CType(Me.pbStar5, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStar4, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStar3, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).EndInit() - Me.TabPage2.ResumeLayout(False) - CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() - Me.TabPage3.ResumeLayout(False) - CType(Me.pbFanart, System.ComponentModel.ISupportInitialize).EndInit() - Me.TabPage4.ResumeLayout(False) - Me.TabPage5.ResumeLayout(False) - Me.ResumeLayout(False) + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgEditEpisode)) + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.TabControl1 = New System.Windows.Forms.TabControl() + Me.TabPage1 = New System.Windows.Forms.TabPage() + Me.btnActorDown = New System.Windows.Forms.Button() + Me.btnActorUp = New System.Windows.Forms.Button() + Me.txtAired = New System.Windows.Forms.TextBox() + Me.txtEpisode = New System.Windows.Forms.TextBox() + Me.lblEpisode = New System.Windows.Forms.Label() + Me.txtSeason = New System.Windows.Forms.TextBox() + Me.lblSeason = New System.Windows.Forms.Label() + Me.lblCredits = New System.Windows.Forms.Label() + Me.txtCredits = New System.Windows.Forms.TextBox() + Me.btnEditActor = New System.Windows.Forms.Button() + Me.btnAddActor = New System.Windows.Forms.Button() + Me.btnManual = New System.Windows.Forms.Button() + Me.btnRemove = New System.Windows.Forms.Button() + Me.lblActors = New System.Windows.Forms.Label() + Me.lvActors = New System.Windows.Forms.ListView() + Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colRole = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colThumb = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.lblDirector = New System.Windows.Forms.Label() + Me.txtDirector = New System.Windows.Forms.TextBox() + Me.lblPlot = New System.Windows.Forms.Label() + Me.txtPlot = New System.Windows.Forms.TextBox() + Me.pbStar5 = New System.Windows.Forms.PictureBox() + Me.pbStar4 = New System.Windows.Forms.PictureBox() + Me.pbStar3 = New System.Windows.Forms.PictureBox() + Me.pbStar2 = New System.Windows.Forms.PictureBox() + Me.pbStar1 = New System.Windows.Forms.PictureBox() + Me.lblRating = New System.Windows.Forms.Label() + Me.lblAired = New System.Windows.Forms.Label() + Me.lblTitle = New System.Windows.Forms.Label() + Me.txtTitle = New System.Windows.Forms.TextBox() + Me.TabPage2 = New System.Windows.Forms.TabPage() + Me.btnSetPosterDL = New System.Windows.Forms.Button() + Me.btnRemovePoster = New System.Windows.Forms.Button() + Me.lblPosterSize = New System.Windows.Forms.Label() + Me.btnSetPosterScrape = New System.Windows.Forms.Button() + Me.btnSetPoster = New System.Windows.Forms.Button() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.TabPage3 = New System.Windows.Forms.TabPage() + Me.lblFanartSize = New System.Windows.Forms.Label() + Me.btnSetFanartDL = New System.Windows.Forms.Button() + Me.btnRemoveFanart = New System.Windows.Forms.Button() + Me.btnSetFanartScrape = New System.Windows.Forms.Button() + Me.btnSetFanart = New System.Windows.Forms.Button() + Me.pbFanart = New System.Windows.Forms.PictureBox() + Me.TabPage4 = New System.Windows.Forms.TabPage() + Me.pnlFrameExtrator = New System.Windows.Forms.Panel() + Me.TabPage5 = New System.Windows.Forms.TabPage() + Me.pnlFileInfo = New System.Windows.Forms.Panel() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.OK_Button = New System.Windows.Forms.Button() + Me.ofdImage = New System.Windows.Forms.OpenFileDialog() + Me.chkWatched = New System.Windows.Forms.CheckBox() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TabControl1.SuspendLayout() + Me.TabPage1.SuspendLayout() + CType(Me.pbStar5, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStar4, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStar3, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TabPage2.SuspendLayout() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TabPage3.SuspendLayout() + CType(Me.pbFanart, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TabPage4.SuspendLayout() + Me.TabPage5.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(854, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(214, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Edit the details for the selected episode." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(155, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Edit Episode" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.ErrorImage = Nothing + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.InitialImage = Nothing + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'TabControl1 + ' + Me.TabControl1.Controls.Add(Me.TabPage1) + Me.TabControl1.Controls.Add(Me.TabPage2) + Me.TabControl1.Controls.Add(Me.TabPage3) + Me.TabControl1.Controls.Add(Me.TabPage4) + Me.TabControl1.Controls.Add(Me.TabPage5) + Me.TabControl1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.TabControl1.Location = New System.Drawing.Point(4, 70) + Me.TabControl1.Name = "TabControl1" + Me.TabControl1.SelectedIndex = 0 + Me.TabControl1.Size = New System.Drawing.Size(844, 478) + Me.TabControl1.TabIndex = 3 + ' + 'TabPage1 + ' + Me.TabPage1.Controls.Add(Me.btnActorDown) + Me.TabPage1.Controls.Add(Me.btnActorUp) + Me.TabPage1.Controls.Add(Me.txtAired) + Me.TabPage1.Controls.Add(Me.txtEpisode) + Me.TabPage1.Controls.Add(Me.lblEpisode) + Me.TabPage1.Controls.Add(Me.txtSeason) + Me.TabPage1.Controls.Add(Me.lblSeason) + Me.TabPage1.Controls.Add(Me.lblCredits) + Me.TabPage1.Controls.Add(Me.txtCredits) + Me.TabPage1.Controls.Add(Me.btnEditActor) + Me.TabPage1.Controls.Add(Me.btnAddActor) + Me.TabPage1.Controls.Add(Me.btnManual) + Me.TabPage1.Controls.Add(Me.btnRemove) + Me.TabPage1.Controls.Add(Me.lblActors) + Me.TabPage1.Controls.Add(Me.lvActors) + Me.TabPage1.Controls.Add(Me.lblDirector) + Me.TabPage1.Controls.Add(Me.txtDirector) + Me.TabPage1.Controls.Add(Me.lblPlot) + Me.TabPage1.Controls.Add(Me.txtPlot) + Me.TabPage1.Controls.Add(Me.pbStar5) + Me.TabPage1.Controls.Add(Me.pbStar4) + Me.TabPage1.Controls.Add(Me.pbStar3) + Me.TabPage1.Controls.Add(Me.pbStar2) + Me.TabPage1.Controls.Add(Me.pbStar1) + Me.TabPage1.Controls.Add(Me.lblRating) + Me.TabPage1.Controls.Add(Me.lblAired) + Me.TabPage1.Controls.Add(Me.lblTitle) + Me.TabPage1.Controls.Add(Me.txtTitle) + Me.TabPage1.Location = New System.Drawing.Point(4, 22) + Me.TabPage1.Name = "TabPage1" + Me.TabPage1.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage1.Size = New System.Drawing.Size(836, 452) + Me.TabPage1.TabIndex = 0 + Me.TabPage1.Text = "Details" + Me.TabPage1.UseVisualStyleBackColor = True + ' + 'btnActorDown + ' + Me.btnActorDown.Image = CType(resources.GetObject("btnActorDown.Image"), System.Drawing.Image) + Me.btnActorDown.Location = New System.Drawing.Point(328, 423) + Me.btnActorDown.Name = "btnActorDown" + Me.btnActorDown.Size = New System.Drawing.Size(23, 23) + Me.btnActorDown.TabIndex = 20 + Me.btnActorDown.UseVisualStyleBackColor = True + ' + 'btnActorUp + ' + Me.btnActorUp.Image = CType(resources.GetObject("btnActorUp.Image"), System.Drawing.Image) + Me.btnActorUp.Location = New System.Drawing.Point(304, 423) + Me.btnActorUp.Name = "btnActorUp" + Me.btnActorUp.Size = New System.Drawing.Size(23, 23) + Me.btnActorUp.TabIndex = 19 + Me.btnActorUp.UseVisualStyleBackColor = True + ' + 'txtAired + ' + Me.txtAired.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtAired.Location = New System.Drawing.Point(111, 67) + Me.txtAired.Name = "txtAired" + Me.txtAired.Size = New System.Drawing.Size(88, 22) + Me.txtAired.TabIndex = 9 + ' + 'txtEpisode + ' + Me.txtEpisode.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtEpisode.Location = New System.Drawing.Point(59, 67) + Me.txtEpisode.Name = "txtEpisode" + Me.txtEpisode.Size = New System.Drawing.Size(46, 22) + Me.txtEpisode.TabIndex = 7 + ' + 'lblEpisode + ' + Me.lblEpisode.AutoSize = True + Me.lblEpisode.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblEpisode.Location = New System.Drawing.Point(59, 51) + Me.lblEpisode.Name = "lblEpisode" + Me.lblEpisode.Size = New System.Drawing.Size(51, 13) + Me.lblEpisode.TabIndex = 6 + Me.lblEpisode.Text = "Episode:" + ' + 'txtSeason + ' + Me.txtSeason.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtSeason.Location = New System.Drawing.Point(7, 67) + Me.txtSeason.Name = "txtSeason" + Me.txtSeason.Size = New System.Drawing.Size(46, 22) + Me.txtSeason.TabIndex = 5 + ' + 'lblSeason + ' + Me.lblSeason.AutoSize = True + Me.lblSeason.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblSeason.Location = New System.Drawing.Point(7, 51) + Me.lblSeason.Name = "lblSeason" + Me.lblSeason.Size = New System.Drawing.Size(47, 13) + Me.lblSeason.TabIndex = 4 + Me.lblSeason.Text = "Season:" + ' + 'lblCredits + ' + Me.lblCredits.AutoSize = True + Me.lblCredits.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblCredits.Location = New System.Drawing.Point(217, 139) + Me.lblCredits.Name = "lblCredits" + Me.lblCredits.Size = New System.Drawing.Size(46, 13) + Me.lblCredits.TabIndex = 13 + Me.lblCredits.Text = "Credits:" + ' + 'txtCredits + ' + Me.txtCredits.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtCredits.Location = New System.Drawing.Point(217, 155) + Me.txtCredits.Name = "txtCredits" + Me.txtCredits.Size = New System.Drawing.Size(408, 22) + Me.txtCredits.TabIndex = 14 + ' + 'btnEditActor + ' + Me.btnEditActor.Image = CType(resources.GetObject("btnEditActor.Image"), System.Drawing.Image) + Me.btnEditActor.Location = New System.Drawing.Point(35, 423) + Me.btnEditActor.Name = "btnEditActor" + Me.btnEditActor.Size = New System.Drawing.Size(23, 23) + Me.btnEditActor.TabIndex = 18 + Me.btnEditActor.UseVisualStyleBackColor = True + ' + 'btnAddActor + ' + Me.btnAddActor.Image = CType(resources.GetObject("btnAddActor.Image"), System.Drawing.Image) + Me.btnAddActor.Location = New System.Drawing.Point(6, 423) + Me.btnAddActor.Name = "btnAddActor" + Me.btnAddActor.Size = New System.Drawing.Size(23, 23) + Me.btnAddActor.TabIndex = 17 + Me.btnAddActor.UseVisualStyleBackColor = True + ' + 'btnManual + ' + Me.btnManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnManual.Location = New System.Drawing.Point(738, 423) + Me.btnManual.Name = "btnManual" + Me.btnManual.Size = New System.Drawing.Size(92, 23) + Me.btnManual.TabIndex = 22 + Me.btnManual.Text = "Manual Edit" + Me.btnManual.UseVisualStyleBackColor = True + ' + 'btnRemove + ' + Me.btnRemove.Image = CType(resources.GetObject("btnRemove.Image"), System.Drawing.Image) + Me.btnRemove.Location = New System.Drawing.Point(602, 423) + Me.btnRemove.Name = "btnRemove" + Me.btnRemove.Size = New System.Drawing.Size(23, 23) + Me.btnRemove.TabIndex = 21 + Me.btnRemove.UseVisualStyleBackColor = True + ' + 'lblActors + ' + Me.lblActors.AutoSize = True + Me.lblActors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblActors.Location = New System.Drawing.Point(7, 188) + Me.lblActors.Name = "lblActors" + Me.lblActors.Size = New System.Drawing.Size(43, 13) + Me.lblActors.TabIndex = 15 + Me.lblActors.Text = "Actors:" + ' + 'lvActors + ' + Me.lvActors.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colName, Me.colRole, Me.colThumb}) + Me.lvActors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lvActors.FullRowSelect = True + Me.lvActors.Location = New System.Drawing.Point(7, 204) + Me.lvActors.Name = "lvActors" + Me.lvActors.Size = New System.Drawing.Size(618, 213) + Me.lvActors.TabIndex = 16 + Me.lvActors.UseCompatibleStateImageBehavior = False + Me.lvActors.View = System.Windows.Forms.View.Details + ' + 'colName + ' + Me.colName.Text = "Name" + Me.colName.Width = 110 + ' + 'colRole + ' + Me.colRole.Text = "Role" + Me.colRole.Width = 100 + ' + 'colThumb + ' + Me.colThumb.Text = "Thumb" + Me.colThumb.Width = 387 + ' + 'lblDirector + ' + Me.lblDirector.AutoSize = True + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(7, 139) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(51, 13) + Me.lblDirector.TabIndex = 11 + Me.lblDirector.Text = "Director:" + ' + 'txtDirector + ' + Me.txtDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtDirector.Location = New System.Drawing.Point(7, 155) + Me.txtDirector.Name = "txtDirector" + Me.txtDirector.Size = New System.Drawing.Size(192, 22) + Me.txtDirector.TabIndex = 12 + ' + 'lblPlot + ' + Me.lblPlot.AutoSize = True + Me.lblPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlot.Location = New System.Drawing.Point(217, 7) + Me.lblPlot.Name = "lblPlot" + Me.lblPlot.Size = New System.Drawing.Size(31, 13) + Me.lblPlot.TabIndex = 2 + Me.lblPlot.Text = "Plot:" + ' + 'txtPlot + ' + Me.txtPlot.AcceptsReturn = True + Me.txtPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtPlot.Location = New System.Drawing.Point(217, 26) + Me.txtPlot.Multiline = True + Me.txtPlot.Name = "txtPlot" + Me.txtPlot.Size = New System.Drawing.Size(611, 108) + Me.txtPlot.TabIndex = 3 + ' + 'pbStar5 + ' + Me.pbStar5.Location = New System.Drawing.Point(104, 110) + Me.pbStar5.Name = "pbStar5" + Me.pbStar5.Size = New System.Drawing.Size(24, 24) + Me.pbStar5.TabIndex = 67 + Me.pbStar5.TabStop = False + ' + 'pbStar4 + ' + Me.pbStar4.Location = New System.Drawing.Point(80, 110) + Me.pbStar4.Name = "pbStar4" + Me.pbStar4.Size = New System.Drawing.Size(24, 24) + Me.pbStar4.TabIndex = 66 + Me.pbStar4.TabStop = False + ' + 'pbStar3 + ' + Me.pbStar3.Location = New System.Drawing.Point(56, 110) + Me.pbStar3.Name = "pbStar3" + Me.pbStar3.Size = New System.Drawing.Size(24, 24) + Me.pbStar3.TabIndex = 65 + Me.pbStar3.TabStop = False + ' + 'pbStar2 + ' + Me.pbStar2.Location = New System.Drawing.Point(32, 110) + Me.pbStar2.Name = "pbStar2" + Me.pbStar2.Size = New System.Drawing.Size(24, 24) + Me.pbStar2.TabIndex = 64 + Me.pbStar2.TabStop = False + ' + 'pbStar1 + ' + Me.pbStar1.Location = New System.Drawing.Point(8, 110) + Me.pbStar1.Name = "pbStar1" + Me.pbStar1.Size = New System.Drawing.Size(24, 24) + Me.pbStar1.TabIndex = 63 + Me.pbStar1.TabStop = False + ' + 'lblRating + ' + Me.lblRating.AutoSize = True + Me.lblRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblRating.Location = New System.Drawing.Point(7, 94) + Me.lblRating.Name = "lblRating" + Me.lblRating.Size = New System.Drawing.Size(44, 13) + Me.lblRating.TabIndex = 10 + Me.lblRating.Text = "Rating:" + ' + 'lblAired + ' + Me.lblAired.AutoSize = True + Me.lblAired.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblAired.Location = New System.Drawing.Point(111, 51) + Me.lblAired.Name = "lblAired" + Me.lblAired.Size = New System.Drawing.Size(38, 13) + Me.lblAired.TabIndex = 8 + Me.lblAired.Text = "Aired:" + ' + 'lblTitle + ' + Me.lblTitle.AutoSize = True + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(7, 7) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(32, 13) + Me.lblTitle.TabIndex = 0 + Me.lblTitle.Text = "Title:" + ' + 'txtTitle + ' + Me.txtTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTitle.Location = New System.Drawing.Point(7, 26) + Me.txtTitle.Name = "txtTitle" + Me.txtTitle.Size = New System.Drawing.Size(192, 22) + Me.txtTitle.TabIndex = 1 + ' + 'TabPage2 + ' + Me.TabPage2.Controls.Add(Me.btnSetPosterDL) + Me.TabPage2.Controls.Add(Me.btnRemovePoster) + Me.TabPage2.Controls.Add(Me.lblPosterSize) + Me.TabPage2.Controls.Add(Me.btnSetPosterScrape) + Me.TabPage2.Controls.Add(Me.btnSetPoster) + Me.TabPage2.Controls.Add(Me.pbPoster) + Me.TabPage2.Location = New System.Drawing.Point(4, 22) + Me.TabPage2.Name = "TabPage2" + Me.TabPage2.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage2.Size = New System.Drawing.Size(836, 452) + Me.TabPage2.TabIndex = 1 + Me.TabPage2.Text = "Poster" + Me.TabPage2.UseVisualStyleBackColor = True + ' + 'btnSetPosterDL + ' + Me.btnSetPosterDL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnSetPosterDL.Image = CType(resources.GetObject("btnSetPosterDL.Image"), System.Drawing.Image) + Me.btnSetPosterDL.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnSetPosterDL.Location = New System.Drawing.Point(735, 180) + Me.btnSetPosterDL.Name = "btnSetPosterDL" + Me.btnSetPosterDL.Size = New System.Drawing.Size(96, 83) + Me.btnSetPosterDL.TabIndex = 3 + Me.btnSetPosterDL.Text = "Change Poster (Download)" + Me.btnSetPosterDL.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnSetPosterDL.UseVisualStyleBackColor = True + ' + 'btnRemovePoster + ' + Me.btnRemovePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnRemovePoster.Image = CType(resources.GetObject("btnRemovePoster.Image"), System.Drawing.Image) + Me.btnRemovePoster.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnRemovePoster.Location = New System.Drawing.Point(735, 363) + Me.btnRemovePoster.Name = "btnRemovePoster" + Me.btnRemovePoster.Size = New System.Drawing.Size(96, 83) + Me.btnRemovePoster.TabIndex = 4 + Me.btnRemovePoster.Text = "Remove Poster" + Me.btnRemovePoster.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnRemovePoster.UseVisualStyleBackColor = True + ' + 'lblPosterSize + ' + Me.lblPosterSize.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblPosterSize.Location = New System.Drawing.Point(8, 8) + Me.lblPosterSize.Name = "lblPosterSize" + Me.lblPosterSize.Size = New System.Drawing.Size(104, 23) + Me.lblPosterSize.TabIndex = 0 + Me.lblPosterSize.Text = "Size: (XXXXxXXXX)" + Me.lblPosterSize.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblPosterSize.Visible = False + ' + 'btnSetPosterScrape + ' + Me.btnSetPosterScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnSetPosterScrape.Image = CType(resources.GetObject("btnSetPosterScrape.Image"), System.Drawing.Image) + Me.btnSetPosterScrape.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnSetPosterScrape.Location = New System.Drawing.Point(735, 93) + Me.btnSetPosterScrape.Name = "btnSetPosterScrape" + Me.btnSetPosterScrape.Size = New System.Drawing.Size(96, 83) + Me.btnSetPosterScrape.TabIndex = 2 + Me.btnSetPosterScrape.Text = "Change Poster (Scrape)" + Me.btnSetPosterScrape.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnSetPosterScrape.UseVisualStyleBackColor = True + ' + 'btnSetPoster + ' + Me.btnSetPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnSetPoster.Image = CType(resources.GetObject("btnSetPoster.Image"), System.Drawing.Image) + Me.btnSetPoster.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnSetPoster.Location = New System.Drawing.Point(735, 6) + Me.btnSetPoster.Name = "btnSetPoster" + Me.btnSetPoster.Size = New System.Drawing.Size(96, 83) + Me.btnSetPoster.TabIndex = 1 + Me.btnSetPoster.Text = "Change Poster (Local)" + Me.btnSetPoster.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnSetPoster.UseVisualStyleBackColor = True + ' + 'pbPoster + ' + Me.pbPoster.BackColor = System.Drawing.Color.DimGray + Me.pbPoster.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pbPoster.Location = New System.Drawing.Point(6, 6) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(724, 440) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 0 + Me.pbPoster.TabStop = False + ' + 'TabPage3 + ' + Me.TabPage3.Controls.Add(Me.lblFanartSize) + Me.TabPage3.Controls.Add(Me.btnSetFanartDL) + Me.TabPage3.Controls.Add(Me.btnRemoveFanart) + Me.TabPage3.Controls.Add(Me.btnSetFanartScrape) + Me.TabPage3.Controls.Add(Me.btnSetFanart) + Me.TabPage3.Controls.Add(Me.pbFanart) + Me.TabPage3.Location = New System.Drawing.Point(4, 22) + Me.TabPage3.Name = "TabPage3" + Me.TabPage3.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage3.Size = New System.Drawing.Size(836, 452) + Me.TabPage3.TabIndex = 6 + Me.TabPage3.Text = "Fanart" + Me.TabPage3.UseVisualStyleBackColor = True + ' + 'lblFanartSize + ' + Me.lblFanartSize.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblFanartSize.Location = New System.Drawing.Point(8, 8) + Me.lblFanartSize.Name = "lblFanartSize" + Me.lblFanartSize.Size = New System.Drawing.Size(104, 23) + Me.lblFanartSize.TabIndex = 0 + Me.lblFanartSize.Text = "Size: (XXXXxXXXX)" + Me.lblFanartSize.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblFanartSize.Visible = False + ' + 'btnSetFanartDL + ' + Me.btnSetFanartDL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnSetFanartDL.Image = CType(resources.GetObject("btnSetFanartDL.Image"), System.Drawing.Image) + Me.btnSetFanartDL.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnSetFanartDL.Location = New System.Drawing.Point(735, 180) + Me.btnSetFanartDL.Name = "btnSetFanartDL" + Me.btnSetFanartDL.Size = New System.Drawing.Size(96, 83) + Me.btnSetFanartDL.TabIndex = 3 + Me.btnSetFanartDL.Text = "Change Fanart (Download)" + Me.btnSetFanartDL.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnSetFanartDL.UseVisualStyleBackColor = True + ' + 'btnRemoveFanart + ' + Me.btnRemoveFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnRemoveFanart.Image = CType(resources.GetObject("btnRemoveFanart.Image"), System.Drawing.Image) + Me.btnRemoveFanart.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnRemoveFanart.Location = New System.Drawing.Point(735, 363) + Me.btnRemoveFanart.Name = "btnRemoveFanart" + Me.btnRemoveFanart.Size = New System.Drawing.Size(96, 83) + Me.btnRemoveFanart.TabIndex = 4 + Me.btnRemoveFanart.Text = "Remove Fanart" + Me.btnRemoveFanart.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnRemoveFanart.UseVisualStyleBackColor = True + ' + 'btnSetFanartScrape + ' + Me.btnSetFanartScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnSetFanartScrape.Image = CType(resources.GetObject("btnSetFanartScrape.Image"), System.Drawing.Image) + Me.btnSetFanartScrape.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnSetFanartScrape.Location = New System.Drawing.Point(735, 93) + Me.btnSetFanartScrape.Name = "btnSetFanartScrape" + Me.btnSetFanartScrape.Size = New System.Drawing.Size(96, 83) + Me.btnSetFanartScrape.TabIndex = 2 + Me.btnSetFanartScrape.Text = "Change Fanart (Scrape)" + Me.btnSetFanartScrape.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnSetFanartScrape.UseVisualStyleBackColor = True + ' + 'btnSetFanart + ' + Me.btnSetFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnSetFanart.Image = CType(resources.GetObject("btnSetFanart.Image"), System.Drawing.Image) + Me.btnSetFanart.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnSetFanart.Location = New System.Drawing.Point(735, 6) + Me.btnSetFanart.Name = "btnSetFanart" + Me.btnSetFanart.Size = New System.Drawing.Size(96, 83) + Me.btnSetFanart.TabIndex = 1 + Me.btnSetFanart.Text = "Change Fanart (Local)" + Me.btnSetFanart.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnSetFanart.UseVisualStyleBackColor = True + ' + 'pbFanart + ' + Me.pbFanart.BackColor = System.Drawing.Color.DimGray + Me.pbFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pbFanart.Location = New System.Drawing.Point(6, 6) + Me.pbFanart.Name = "pbFanart" + Me.pbFanart.Size = New System.Drawing.Size(724, 440) + Me.pbFanart.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbFanart.TabIndex = 30 + Me.pbFanart.TabStop = False + ' + 'TabPage4 + ' + Me.TabPage4.Controls.Add(Me.pnlFrameExtrator) + Me.TabPage4.Location = New System.Drawing.Point(4, 22) + Me.TabPage4.Name = "TabPage4" + Me.TabPage4.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage4.Size = New System.Drawing.Size(836, 452) + Me.TabPage4.TabIndex = 3 + Me.TabPage4.Text = "Frame Extraction" + Me.TabPage4.UseVisualStyleBackColor = True + ' + 'pnlFrameExtrator + ' + Me.pnlFrameExtrator.Location = New System.Drawing.Point(1, 0) + Me.pnlFrameExtrator.Name = "pnlFrameExtrator" + Me.pnlFrameExtrator.Size = New System.Drawing.Size(834, 452) + Me.pnlFrameExtrator.TabIndex = 0 + ' + 'TabPage5 + ' + Me.TabPage5.Controls.Add(Me.pnlFileInfo) + Me.TabPage5.Location = New System.Drawing.Point(4, 22) + Me.TabPage5.Name = "TabPage5" + Me.TabPage5.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage5.Size = New System.Drawing.Size(836, 452) + Me.TabPage5.TabIndex = 5 + Me.TabPage5.Text = "Meta Data" + Me.TabPage5.UseVisualStyleBackColor = True + ' + 'pnlFileInfo + ' + Me.pnlFileInfo.Location = New System.Drawing.Point(-4, 0) + Me.pnlFileInfo.Name = "pnlFileInfo" + Me.pnlFileInfo.Size = New System.Drawing.Size(844, 452) + Me.pnlFileInfo.TabIndex = 0 + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(781, 553) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'OK_Button + ' + Me.OK_Button.Location = New System.Drawing.Point(708, 553) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'chkWatched + ' + Me.chkWatched.AutoSize = True + Me.chkWatched.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkWatched.Location = New System.Drawing.Point(4, 557) + Me.chkWatched.Name = "chkWatched" + Me.chkWatched.Size = New System.Drawing.Size(72, 17) + Me.chkWatched.TabIndex = 7 + Me.chkWatched.Text = "Watched" + Me.chkWatched.UseVisualStyleBackColor = True + ' + 'dlgEditEpisode + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(854, 582) + Me.Controls.Add(Me.chkWatched) + Me.Controls.Add(Me.TabControl1) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.pnlTop) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgEditEpisode" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Edit Episode" + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.TabControl1.ResumeLayout(False) + Me.TabPage1.ResumeLayout(False) + Me.TabPage1.PerformLayout() + CType(Me.pbStar5, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStar4, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStar3, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).EndInit() + Me.TabPage2.ResumeLayout(False) + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.TabPage3.ResumeLayout(False) + CType(Me.pbFanart, System.ComponentModel.ISupportInitialize).EndInit() + Me.TabPage4.ResumeLayout(False) + Me.TabPage5.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() - End Sub + End Sub Friend WithEvents pnlTop As System.Windows.Forms.Panel Friend WithEvents Label2 As System.Windows.Forms.Label Friend WithEvents Label1 As System.Windows.Forms.Label @@ -801,5 +815,6 @@ Partial Class dlgEditEpisode Friend WithEvents btnActorUp As System.Windows.Forms.Button Friend WithEvents pnlFrameExtrator As System.Windows.Forms.Panel Friend WithEvents ofdImage As System.Windows.Forms.OpenFileDialog + Friend WithEvents chkWatched As System.Windows.Forms.CheckBox End Class diff --git a/Ember Media Manager/dlgEditEpisode.resx b/Ember Media Manager/dlgEditEpisode.resx index 7ef0fdf..971bba2 100644 --- a/Ember Media Manager/dlgEditEpisode.resx +++ b/Ember Media Manager/dlgEditEpisode.resx @@ -161,581 +161,577 @@ - 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 + rkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A - ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje - PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH - m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF - jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh - /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y - uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX - g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT - uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX - IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g - GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 - ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + 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 - bf5cAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACf0lE + QVQ4T6WPW0jTURzHf6lvtcQwc+aFRTm6ECYRJpbSQ/rgQ/gQhkYICgVq6sMisBCEIoUyCwokwpcoSYjw + IcIuoJWWOufcppvOXTDnnFu6Tf3f9u38TbeR9VIHPufy4/f9nHMIwH+xPkkB+1+wEUJemu9pVusvqzQL + 3XVKb+9tWh7uJP/Y8yhB0PlHQryHAub+pNHKTIOxIgH26+pv7q6rhwPjXRQ0dUcEIf7HVoQAW7/Hantf + vB2sLcBkhQIz1YkYr9rrczytyXW9bo4IILh+w00QvSSaS1sXjVdgs07AfLcSulIFBksS8KVMXT9cnRsl + WLVEMUXg50i0aap4Qx5ESyF4UxHcczoMtN3Ap0vHTEGHNjkkLEYJOEcE0UfSbFs+N5bNCdZycCMHIEyc + g+CshVn/zDc7qT0kBF20tuSMEkj+X0CkkH8whdMdtwrWi+C0avCGQgj2GojzjUDwwwVhbZn44AJJq94o + QdBEWLFQaHlIwetP9wnT58FeAF6fD8FSBmGmHNJSNzNwrF8GtLriiQgkj4mkRQvx9r5iztTEbj0BbjSb + Pb0EnC4LovPaS3b9eq/H7aCmmxpKS1VGBFhxkehjf3IONPGWj+Cn2sEbi7H2eQckwykd4Enw+33U2nKL + lMl7aHOEBU8etdOUcZTevep8E7S8B3yzwFI/YCtyB9w9B++03CNVRtpGjCh2g7AgJiaGGjUN2xvq6+Y6 + Ox7Cax1yj3wdeNDR8Xhf1tEj6yF5bAa3COTzrvideWfPFEzn5uTcT09NPclqSoaKoWbNmYz9DBUjjZHI + iAsL5INcjNtGu1lAIYdjiNJZLWMDeS8HUxhJjHhGbFjw74B+AsJFYFrRskcjAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAZlJREFUOE9j+P//PwMlGKfmJRcdPRec1+9ecF6ve+lFJx9cluA0YO5Zg8fTT4n9n35K - 9P+cs/ovSTZg2intmxOOi/8HYSD7PskGTDphcK37qPR/EJ50Qv8uQQOmnnIynnbKLWDqKVf/aac9/fuP - mz5pOyT3H4T7jpm8mH7Ky3/qKTcgdg+YftrdFGYgOAw6jxhJtB7SBCrWgWLd/y0HNf43HVABYxC77ZAu - XL71kNb/9sM6UiC9YAPq9uoo1+xV/4+JNYBiMIwqX71HTQVuQPUuU5nibdr/i7ZqwXHxNq3/yBhFbqv2 - //Id+rJwA0CMgk1Gwbkb9UqBuASEs9frvspar/MfhIHst7kbgOIgvFG3FKg2dOmpuWDX40wHicv0riUs - 0/0PwXp3CMYCuoLgWXo3g2bp/odgPdLTgUu//gPnft3/IOzSr/cUpwuYGRgYgFgAiBWBWAOIdRkZGNS1 - EpU6jMo1T4CwdpJSJ0gMJAdVA1IrAA8DIIcZiNmBmBOIuYGYF2guIyKxMDCCxKByIDUgtcx4A5HYLA4A - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T6XSS0sCYRQG4BEXERG46UI3yCRNnZmw/AGZFUagJO2rZSFEJi6MFtFNhAxBBSlokW7NQIlIKLvJ + FyJtBKEoqKCCfsPpO2pD1repFs9wfM87x81wAPAvzBDt3QxYdvOibzcv+KI3pjFWBzFDtJPrfQyTRgiT + BtjOia+sDmKGKER0xa2rJkB0vmd1EDNEgWxvwXfRCiiQFe9YHSQNQWLqC5FhW5AMWUPXFqv/yvi0lukA + tHnZ/xImo9YgGaZGbOHrEWPVAe+5oXk100PL+goeVk41sHyiKsEZs8/9akYL62f6FunAUlrftZhWw0+a + L6p3nuNulXTAc2Rsc6Z0MJ/USpypalW7pA7ch2K7dADNHRjsjoTgohbQbJx/m4nrAdH53bFPc5TgXbQ7 + ESU7pfekA99NxYTCZIyHMuGW1UHMENkjQnE8wkOZ8PvvwOwXHwb9PCCzX3hmdRAn50oUVCeloXgZx6m1 + U8oNg7sni3TTSi9muKt0sKsoHcAH/SGnaqhaqo6qp3dl0r8AJ8OsssMOduXSgb8D7gMxXmeO6KXG2gAA + AABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAetJREFUOE9j+P//PwMlGEXzfQdj37t2Bs24DLxnZ5B5z96oEFkebsAtV7OIKwaq/y9p - Kfy/bqW7Bd2QG3YGjZd1lf9f1lH6f8PesPf/wZmMIDVgA656WHGd1lH+f1xRGoxPqcv9v2iJMOSyrUHj - aW0loJwUGJ/SVPx/3kzbFG7ATk4uxgOK0j0HlGX+gzFQ0SE1uf9nLHVXnLM3rDmqrfh/P1AMLq8kvf+A - rAQ33ACYc3cqy/TuUJL+vxOIdyhI/d8DdMk+LcX/2xUkIWIQuf1LNBVZYHowYmAj0JANQIVgDLR1PdAg - GH+jkvTe+doqrFgDEVlwhZL08RXAsEDD7zaZGsBtxumCBYrSDQsVpP4A8X90vEBRaiN67KB4YYaidONM - oEYYngFkgzCqmPSW/0+/w/WBGRNU5RkmKkg1TJSX+g/DE0BsBenNkxSku8BsZKwgtWWSihwHPBZ61RS4 - OuUl/6Ph/bX6qkwgRV0KUr0daPJditJmKNHYoSSb2AS0pUlO8j+Q3vctwBusGYab5aW6wXJA3KIoM/2x - sxVYnoGZAYwFgBRvnKRofba02BZuFmYDIF8HKG4MwkA2iK+QIik6N1NafCGQLQLEfHAXABUxAzHYT2BB - BgZOIJ8XGQPFeJDk2UB6MFIiOdkaALyqHwCXXFYvAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB7UlE + QVQ4T6WQQUgbQRSG18YWjbV4UNudicnMxiiahK4VAwaaFEqhUAoeeyoIXsSTd0WjHmzagHpRD1KFHnKr + 0UANWJMWiqBFaWOpFNSDePWol8Lzzeisu3vUw7fz3v+/98/uagBwKxzN0bPO1wcJc9yu2TlMmP2HySeD + ds0q/r2IvdkzQ/C7ncHfeDRvHxLsJ8xUORqEcsSA/WRHBr7NVwhdmn9exr3bkSBscirZavXDr+7rkPJT + M7UdNtAjkq02DruxcJcVUKj2VpQ4/VAK+kCCQ99b/PCzO5rdSXYM/QhzKKJm+QYtlpoe1VgBikLQl1kz + KBSQNUZgHd9ko53DF6Zfapde8VMbr1Q7jgBBDkOWcVCCt37GINXnDPr1Y7j5rn3esazIGnQzi//CxelK + l2ndrHA0gkVOR5cY+Y+Am0VOcu55RzPHaWoeBxVzVzg1moeTc2fAVCigTTMyOh0goJgSJ6OrM4ymZW2H + kfxMs7/KCsi0MO+7gA4uisOPQ3eEn2YkM+ny05zGrADBpNHUO4bpY34d8Nw463kllxXjAfJeesgE980e + P49LX/Nokjo8at/qDSMDtDFfU+kxsY+g3inAWvSsT29Y6KcPl7CuRx7IAPHAIQ8iv0mKmlaNfa0d1O7b + /HuoeWStxJsB2gW8qh8AcaOVUQAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9wAA - CvcBEOiS5wAAEBpJREFUaEPtmgdQVdfahhdVkaqAGJooSFUUFTC2xJjYojHG5F41sYtKky4oTbpURT1I - VQSOgLQDSBERpIMiFgTkaoyaWGKLJShgef9vEzAkmMkxc///Tv65zDyz9tmz1t7f+33vWnuvPTAA7O/M - 3zp4LvH/FfCftt//zwo8e/Ga9dH18jW73fGCRTTeZ4daHrGQU/eZbdkd5lp1n9mUPWS25feYX8NTtqP+ - tnTMuZBpO+uDbX2rlkU5lX6RbVG4pJgoCqwyy4ltNItOvvC1Q/KFTTP5rfvlDl1MZIkXgllqyw52pC2a - ZV7KZtmXYlhOewlLaj7AfnhylXW9Aut8+Stvq/ZbK/BnAmxIgHs1CSl/xr7I7zCbnn6V91l26LW5mUHQ - O1QG7aQr0Ev5EXqHH0GX/xhmGS1YUxIOt4qlCKyZDF6D/vdRjUviEs87Tk9rCRI50hb/fycg9PR95lxx - l208/mDigqzcvEWZ7i9tS1wxJ+8sjDNeYlLmTzBKvYtRSXehdegHjEy8RYJu9wgZm/4cc49ehXV5KnbW - /hMJjUNfx50xLUltCZqS3V5MFYj9363A4bbHLLzxwaAZqbf8RvCKOyPrF+D45dVwr0qEevwVDI+qgVj4 - BUhGnIIyrwhioS0YsqseLLQdkuGNGLa3FJKRl6EZfxXzc9uQdMELyeemYl+D8osDZ1eEC9oTpQX/KicL - JfybLfTzC7bv7EO2p+mhqvGBy2Us6Bq+zK9B2sXNiD9jgE0FC/BxshXGxu3FqOgUGMcEwaZoNlyOf4iw - mlFYkL4dLOQKZHdXUnsJEmFnsDhzEyyLNyL+rCPSmq3IVqqIbZxWf6QtbXTKRf6/T0AnTeKHna8YWUdb - aXdLq1jYdSw42oK9jfOxt04BvHp5eJyYhJmJLpiWFIBvBMshFVqJCQkx2F07AnvrleBbYYChXPA7r5CA - NgwKP4OASgO4lpoivFYZ0Y2zkNrshpjT4xFRq/0d/2L0uFtPb7KufhOYm8xCT2Iu6D64QW0POtW09rW2 - SoZfxYKCMwipnUzBy1GAqj3EnZaBR9lkLM9Zh68FqzCb7wXmdxNrc5cgsEID3mU6GMnLAAu4ARbcTO1V - zEwOgGe5Cb7ItIJXuR7ZSAfJFxwRfYquXa9/9cpP53Ve0b05EX0ILeCHJ91Uwm52h6xz/XG35IzE9hLx - nS0Yd/ghthxbBF6dDMJrNBBRo0YW0cDyrPUwOxAClV3ZmHtoDRby10Is6BxWpM/D1qMaWMRfA9nwSpgn - +EM+oowEtGNY+En4njTEp2mOmEmV20PVDCe7JZ7fQnbSwcGzs2sfdXZIP38B1tH9qgehBXz3qItdI279 - 3M2sCm/sYN7noJ9yDysE1givVkZo9cge9tQNx/q8pWDe30My4Dzm8Ldi7G43SAcVQjyIfB5nhtnRiyEa - 0AyxwCaohKfT+dNggecwOLgWMiHVmBC3D0uPbOpJxu5aRVgXLsGqoqPwq3gPeZe2Rjx8/pr92PGkB6EF - XHvcxe7Qw+v41ccTJX3OdGjGXsOGIjuEVStiZ5UWgqpG9RBcrUnlH4uhIWUwiDqA3XXK+CRlGyQCKEj/ - VgwLSIR8wGE6bqGsN5GtOPtQ69sC0/hwTIjdC+09h7GrVgUh1Ro0XgV2RdNoMShAzJllCK4a/uLUzeIZ - lx/+wC7d/1Z4AWdud7DW+8/Z3OT2TObXjoWCZIRWKSKwcjQCKrR/Q1DVSMxOcoPzsSkUhDqhBq1IPtgO - CtbvAnGeIEF+jb/i04wxe2MxJcYRC5PXUCK0epLhcWJ8T2JsC6aCd/ozhNSY0NxyKa68cYNV3WgVXkDj - rQ6WfP7+RDHvU92qUd/CqugzCl4dPifHvAVdbCsdT6JGwbvcgALQxIqsFWA+XKYpcN9TvS133A8fej54 - ncWHB7eTHdUoeGN8kuyM+Sn2WHjYEvq8RHxzdB9dVxW57VkfVlxvEV5A051n7OuMyxHMuwmj9jfCsWgS - LYXaFKDeW/E5SVWp1MSX6augHp6GRSlrobgzl+bGGapEwx9AwnachqRvLdlmBmYddMcQvzIMD86GXOAx - MLdWzE1OoYTo4UDThoTK6+3CCyj99vFgrdDGS0No5Rm5Ow8ORSbwPDEG7qX6A/Ao1aPVRJPKPo0C3wCF - gDxohewj/x+hDFPGvev+AKqAZyOWZyynlUwFhpExkPIph87uGLCtV2DCi6Dgx2Fjnh1d+x/fV14/riD0 - JA6ruWkq7lnzWj6kFdoRsXAoHA+3Y/rYWmxAGL7BlX47FxlhTqIVhviUQsK7EmJe9MByJ/t4Uua9aoja - P2b7WXyQsA3+ZD/T6CBsypuLrccnYn6yLSzy5pFtNRFaMwtL01bQQy5/ltACLHIub2TbqyAdcA464ZGw - yzeGc6Ee3IpHwbV4NJwK9XvwKFGDWZQnZYwm63bKtDsF61H9DtRA1L0GeruisDlvNvxOatFDbwz5XgM+ - 5dpUbV2qgjkciyfCqTjLWWgB5rymcE6AhPdpKPvzYSswwoZMcxjuCsHsuE1Yn/k+LLLMYM7bhkEe9GDa - RpneTpkXmgryOFloK1XK4RJmxDnB46QaHI4ZEYY97dYSQ2wr0SPrToJnqSF8yhbECy1ANaCWL+rOWaEB - w31TYJc7GqZ76IXMiTLt3ATVgAOYsMvnl99u1G8bBfQuuNZCz48Pm1gHWEbTO1D+FOSVj0D2CY0eck6o - Yuex0bR4GJJ1OftO4MgTWoCMZ2UucysHc63GUO80WBzRh7pfAgVMGdtaDTnPbGgG8OiYMs/1exdcKyDi - Woa6o6ZA0wjgtDpQrw3U6RG6v1Cvh+9OqsDxqD4cCsaRXcfDscCwSGgBsh4VuczlBAVI9nCqxfuRGzA5 - wga6Qb5Q8k6ETsh+DPXKpmpQ9rk+74JLBaTdCnGlcCRenWB4dpxDpB8MXaViuFuqAJd8fdjmj4VdnhG2 - 5BsJL0DNt4rPnI6DuZRSkGUQdS7F9N3/xMLoqXRcBqlthdDfGYTBrgIwxyrqQ2K5vsLgXI4hroVoF6ji - 5TGGjiLxAXQVieFW4SA4CgxhJRgH6xwSkDtZeAuZ764PY3b0MOFEcDiexGCXfLwfthhaPvSq7FAJSZdc - aPlHwjjMByJOJb/27RvzR60jJcClAJcy1fCigOHnfIkBdOaL42aeFLZkGWFjljE2ZhpQNRbGCW0hm6w2 - C2ZTSIGTiD7sKzDMLQYmgV+RAJq0DqUQdSiGtGsqJJ3zftu3/7jfH9M4Ked8tKWroTtPBE8FkgN4LpDA - DwIpWGcaYl2GMdakjUHoSXcnoQVEVlybLGZX9IrZFYHZ91EMUftCqGzzg6RDOiTsi6HskQQRm5NgViRo - C1XhTd/+4353bFcCKcdctPHV0Z0thqeZgwfQlSWBS4fV8EX8XKxONcBKviGia/cI/yAr+9eDwdreZW3M - +iiYHVWijy3FELPLgYLzXlhnf4QI2hOsP7IIk0J9IeecSUJoLtgV/HZM//Hc8ZZjkHIQoDVJA10Z4niS - LjWAziMSaE4cjQW8RVh2SAcbUmfeyGkulhe6As23n7LVh86GMQuapLYkoj/WxyBjn4tweo2ObVSgTb0c - Eppk4V+mj1HetLRuoJXJiqz3+3F9v22KIGWXjdaDGuhMlcBj/pABPKfzzQnaGOvrhs9iRsI93yquuO2U - 8C9z528+ZmlnbppIWud1M2t6q7Qhj/eQT8EVYsmBVbT5eA+7alRpJ6Xes5vinVKCf7ku5sVsgrrHfjDL - 4n7j+sZTa10AqS2ZaInTxPMkSTw6JD0A7vyFGG2ou4bi0/36iK9LmZnfUv8uAp6wy/c62MJ9dUfYuiwK - mkRwWOZj0JYM7DhhgIg6Vdq8jHxDMFUkjMTwTivSTmokRrpTNdbRQ86SKtgznoK3JAttpjlASWner4Vn - BwbhpwSZAXDnz/P0oLV9MywzVwoaLwrY7dMRwgu48dMzdvfnLlbefm/CEMucp2wTPbQsc+jmZKnNufia - /znCatXopYvbof0ebrupRVVaAeNAH8g5JINtyocYoW8fBWPHSJg7h+ISTx1P46TwMFZ2AE/jpNHOew9r - I8xQVbDG8pngY52ueq/BQs8BTsD3vSLsU895sJVpFDhVgsMiD8PsE+klyxD+ldq0Q9N9K34VOthZo0kv - ZMZYnTUHsbs+xON9sniyXxqP98vgYZTcnyBL/WRfPdkv1831fcSfGCW0gB+fdjOO+/RV4taj5xIfBZcX - s5WpYBtppeFYU4APIq1IgAa4DY37cYOB0OZnO533PKELdxJ6LlUGryIH48EeCpx4sEf+T3lIfe5zRAzC - oxTTg0IL6H7xinG8fv3L17Ard5+O0HUraGYr6QuDBe20NtBHqnXZMAu2p5csI3rZMuxp34ZTgSHsCo0w - xc8Fx/xM0R0piXsRQyko4bgXJo0HPM2G5037lIUWoDdmDNPX1WW2NraspqaWvSYRcfW3R6k65F1k39AX - h/XpJICEfF0I82Ar2OePgVXO2AFY0zmHfB0sS5oFtjofihuSccJvArrDB+NuyDDc+xPu7pTBgyi9ho6s - RSNentsr/CRm/f7ERUTY4sVLmG1QDIsua1eZEVZ3nK0lG60lS63KhrabNywydLEmddxvWJtmhHVphliR - ZArt7fT+tJqzXhaU1h9CqbcJuoKl8GOQIu7+AfcCZNCVMKHhReEalesH57JbZYHCCxAjAX2I9BOjq6vH - Pv3GSmKyNc9LxlLwjBMw1DoCXyUY4av4sfgyfhy1Rlh2UBdfxI6HqqMfxNbSKrSKKraGKsexOgND1yWi - xHMiOgOkccdfCT/2446fEn4KUMAjnkldsusc5YVmmkxRWoINk5X6awL6ieG0iHJ6BomKMqMPlpiMtogV - yFhmdE8L+wTz9ulh3h4DzI6YhCmB86Fs408Wo6yvonmzOuW3rMyE4no+SnfMeP3MTx53dii/4Wd/RbTu - MKgz11dT6e8E7ljoOdAbtBi1UoQcMYxQJkYQaqRCg66nLCctNULV+OPPtZZu5E/fMeP7sV4rXw/ZHEvB - 0nK7ip4ba2me9MBVIB0i6zIgueEIFFYn3JJf6MU3NP9oZYOTdk2n/3A88RkOrm3aZtCgr6Gsw+WJ7iVL - cK0oF9O7CBChAdKEBmFImBBmxPvEdOIDYhaV5EO67lRxEXFzWblhC5R0J9kqmK7YO3y+s0B6nmuVxBzX - BuIUHVcrL3DOU5q6jKeoZ24vr6D06SBREXMaazpimPzHgYu14vNXqzQGf64Vp6YkP53Oj6Xrjyd0CRVC - 8l0FcHNgcG/WtajVI4wIY2IiMZkwJab0ippKYqYQkzix4tSH4Pr0wB33njPh+lAFzen8VG4s/Z5MARsR - hoQu/eYSxjGmN4FDqZX4KwK4Koj3qufKyNmJqwpXVnlCgeAurkgo9YrlbDa8Fy5z/ek7z/Xh4MZw1uSu - wV2Ls6pM7z24e3H35ALn7MPF8k4WerMKcQOFgLvBX0GYa7/pI/Qc+E//+8C73P9v/68G/wNkt3I5c9b2 - 4AAAAABJRU5ErkJggg== + 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 + l+AV3x3A/g9kt3I5oWO4VQAAAABJRU5ErkJggg== - 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 - 7PDNqBYAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAAPx0lE + QVRoQ9WXB1QV19bHDyBYUCyoGEQF6WLDAvZoTOzGZ8mLvYJIR0BFAREQkSoWlKpIb1IuUgQEqaKCHZCH + MXYTW2zY9f/tcxWf3MEXdb3vreVd67dmZt9z9vnvMmdmGIBvmmaN3xLNGr8lmjV+SzRr/JZo1vj01dsP + vHj9lt1qeMX8K++y/dUPmPfxu8yy4A+2ruQusyi4zywL7zD3Y4/Zpopb8sGnvUdurfCydCuZu9suf1aK + cdbMHCJ7S4lBakilQVDU2QWro86ajImp2aOw/3wEizjrxeKqN7HE2iCWfCGFpVwIZql1uSzy3F52/dEl + 9uIN2PPXTZHUKjBw/i4ACwrAsZQCKXzKZmU0GIxKuBT4c4rP5YnJntDeXwD1yIvQjv4T2rEPoBXzEAZJ + 1Via6weHotnYUjYEgcd0ru2unBkaccZ2VHy1p1Ribdj/LgCfE3eZfdFttjLv3qApB9JF05MdX1vmrsME + 0Sn0T3qNwcl/QS/uNtQib0N1/3X0irhJAd0SB9I34RkmHrwE88I4bC3/FeGVHd+GVg3Njav2HJZSl0MB + hPz/BhBb+5D5Vd5rOTrupnu3wJzn2yumIK9+CRxLIqASdhFdd5dBxu8s5PyPo0tgNmR8qtFmWwWYTx3k + /CrRaWc+5LbXo2fYJUxOr0Xk2Y2IOj0Cu451ebX31Hy/tLoI+bR/FVIA4f/lAJ68YrtO3Wc7Tt5X7r+3 + voB5XsacjDLEn1+FsCpdmGROwY9RZugbuhNqQdHoH+wJi+zxWJM3Fr5lapiSsAHM+yLaBRTT8QJkfasw + I9kEpjkrEXbKFvHnzKitlBFSObIisTa+d/T5mP9eAM8pgPvP3/DWUe8cUF0j43sFUw5WY2flZOw82gGB + Fe3hdHgwxkSswchIDyxMm4fWPsUYGB6MgPJu2FnRGW5FuujIxW+9SAHUoqVfFTyKdbEufyj8yrsgqHIc + 4s45IPjEAPiXq/8ecz6o383HNyh5XxkAF90Iv66997y76q6aGjm/S5iSWQXv8iEkXoEEKosJPdEWTgVD + MC91ORakLcb4mI1g7jewLH0mthT1gEuBBnoFJoF5XAXzOkfHSxgT5QHnQn3MSjbDxkJtaiMNRJ21RdBx + 8l2hc+niX2c03tDaPIiPkdQqMHCuP3op5g9qnSsPX8qNjqjLbbG1Gv1i78Pq0HQEHm0Lv7Ie8C/rTi3S + A/MOrIDBXm8obUvBxP1LMS1mGWQ8T2N+wiSsPdgD02OWop1fMQzDN6O9fwEFUIdOfkfgdqQPpsbbYgxV + bgdV04/aLeKMFbWTBvadGl/+4HmD/LNXYA0v33xAUqvAwPn9wQt2mbj55CUzy7q6ibmchk70HcxPM4df + aRf4lPYSs+NoV6wQzQZzuQY5jzOYELMWfQMcIO+ZhRae1OehBhgfNAPSHucgs+UklPwSyH4CbMtptPIq + R1vvUgwM3YXZiSbiZASUK8I8ayYWZx+Ee9F3EF1Y63//2Vv2Z8OjD0hqFRg4lx++YH/QzpN36eEgOdeq + hp4hl2GUbQ3fUkVsLVGFZ4maGK/SnlT+vujoXQDd3XsRcLQLfopeD1kPErm5Bp08ItDeI5bOqynrJ6mt + ePvQ0a0aQ8P8MDBkJ9R3xGJbuRK8S3vQfCVYZ4+kzSATwVVz4VXS9dXxGzmj6+9fZxfu/iZGUqvAwKm6 + 1cBq7j5jE6Pqkpl7HaalRcGnRBFbinvDo0i9CZ4lvTA+0gH2h4aRCBWiO1S3x4BtIrHuZ4kzBAXkXvlv + XM9Bc2cIhgXbYlrUUkqEqjgZTocHiBNjmTkCgSd+hneZPt1ba3KKr15lJVdrWDEhqVVg4FTebGBRZ+4O + knE5/lJ5928wy/6ZxKvA9YhmM2hhff4ACkYNLoW6JKAn5h+YTyJ5pkm42/H3Rwlc6fmw8RTG7ttA7did + xPfHT1H2mBxtg2mxptAJjMDCg7vIrzLS6w6MLbpSzQovnxZoFRg4J/94yhYk1fszl5NQ21MJ2+zBtBWq + k0DtZnE9QtUo7ok5CYuh4heP6dHLoLg1ne6NKqrEsU9AgW06ATm3cmqb0Ri3zxFt3AvQ1SsFClsOgTnU + YGJUNCVEG3tPGoUXX6ljRZerBVoFBk7+bw9bqfpUXmhDO0+vABFWZ+vD+bAmHPN1BDjla9Nu0pPKPpKE + G6GDhwiq3ruo/xMpw5Rpl6OfgCrgXIl5SfNoJ1NCn+3BaO1aCI2AYLC1F6Ef6E/i+2GlyJp8//Na8ZW8 + DiVXqwRaBQaOb9mNoS2cy962966Bun8IVmcNgMMhHazN0SX6fGAdXdtn62FChBnauOZD1qUYMhvpgeVI + 7eNMWd5YRpR/mg2n8H34emym9hsa5AkT0USszRuEyVGWMBZNorbtCZ+ycZgdP58echnjDtZVCLQKDBzj + 1PqVbEMJ5D1OQ8NvO6wz+sM+SxsOOWokujfssnTEOOV2h8FuZ8oY3awbKKuOJMqp9Asog7RjGbS37cYq + 0Xi4H1Glh54m9X0PuBaqU4W1qAqGsM0ZBLucA/Y+pdXdJLU2uWjEMPCkHw9A1uUEumyOgWWaHoySDdFn + mzfGh5pgRfJwGB8wgGHgerR0ogfTesr0Bsr817C2Cj+GW8HjiDLW5+o2wSFXm1p3MJzz+8C1YEqYR5GR + oaTWJheNKHuUx0g7knPHY+jqFg3r9N4YuoNeyOwo0/YnoeyxFwO3ub67dqBx64u+njUnMDN6Ppzz1Jq0 + 5zsoiEO8fQdyRBtyDSdKam1y0Uhb5+J05lAItq4UHV3iYZyoAxX3cBJMvb22FArOKejpEUjnlHk+7msh + X51d42El0qcW1YFtZh8Bdll9iQH8PJuYKqm1yUUj7ZyK0tmaw7QAtYddOYZvN8IQfwtoebqhs0sENLz3 + oOPGFKoGbwEa87XYVlBl12NdtirdZ3qfRqQHqwy9bOLzAujuVhLD7PKovPkksgDS9vkYFfArpgWNoPMC + tF6fBZ2tnmi1Lo1ElNAYCpaP/VJsSzExbBFsM9Rhkdb3k5inUgDpQ0Q2ohGf10KGARW+zJoeJjwIju0R + tFqTgeG+M6DqSq/Kq4shtyYdqpu3o7+vK6Tscv899kuwKcEAP0dYpWlg1YF+n2Rlsi7WZEwLdc5eYiCp + tclFIxYHao2ZRRYJpyAasSlCJ4dg6G/5hQKgm291PqRX50B+XRzk7EVNx34uVsXo6+0Mi9TeMErq945E + LloHZikaJJx2P7ItjdeEzxFHu4jK2M/bRrcXXR4iY539hllnk/BGciBtkwWl9e6QW50AWbru4hQJKYsj + YGYUkBVV4cPYz8QqH0pOwVgUrQ+jeC0sjdXDykQ1TAiaBW0PN0wNmYLl8dpYFNMHQeU7xiWeFgm0Cgyc + gn/da6XuUlDLzA+CWVMlGrHKgYx1KjrY74R5yg/wp2+CFYnTMdjHDQr2yRQI3QvWmU3n/B0W+VB0CMPP + IWMxL6IfhvqaQNaa1l1VjnE75mBhpBqM4sZcTT2X0z67tkSgVWDgnLv1mC3Zf8qXGdNNaknOPsb8ENra + pMOPXqNDKjsgrEoB4SfbYXOBDtRcaGs1op3JjNpDct5/gnzKUmLa2UfSXLq5efua50F9kwtmhajAMcMs + NKf2OMusKRdoFRg4Z248ZPFVN/TlzEUvmTm9VVpQj4vJoAWyMHPvYvr4+A7bypTpS0pF/DUVeLwzNhdq + YVKwCVSc9oCZ5nw07zMwp8qZUVs1XlMSFNfswIw9mggv3zcm83wpSz9bKNAqMHDO3HjE6u80sGm7jiay + 5QfIGQXBMc1AS6skbDqsC/+jyvTx0usDXlQRXwom8ISi+LyXI1VjOT2sTCnDfC5PRKOf5uD/fzxmVS6U + HSxhkzAzu6i+jOVfKBAjqVVg4Fz96ym7/eQFK6y7M7CNaepjZkIPLdNUckottSodC2L+Ad/y7vTSxb/Q + JOGfm6pUpfnov8UVCqujwEwooysouzRX7OdvSYeUaSKGeY55mXkuZdSZ6zWs8sppMZJaBQYOD+Da+yBs + 4k47sUXxtDhVgmMsQiebCHrJ6oPNxeriL7LmcC/SwNaynvRS1h+rUsZiTIA15K2iKRgS2OjrU4gD3gbP + LDffJ8+fs9uP/vqApFaBgfPn45di7j55yW4+eCb7g1dhDlsUB7aSdhrO0kx8v92MAugB/kHjmKcrhD52 + NtDR+bAWfc2pib/YVBwCqK1IXKOfT7E4CWM8w0vrb5+Vf/jsEbv/9AF7+PwRa3jdINAqMHBevnoj5u3b + d9cXbz/upuWQeY4tiqUK0JeWURIJSYGBlw29ZOnRyxZ/8dJrFv6fXZYu9FydwJZRCxrx+Z+A+14chx52 + qReP/17X+y0a2PM3j9i9hlus/mo1K6rIF2gVGDjamppMR0uLWVpYsrKycvaWbKEVt9SUV4vOs4UxVN4E + CoAWW5AFQy8z2GRowiy1rwBzYnWGBuZGjqOq0X3E5/C5n4J8K1mn17sduqj759M7LO/IQWZiuoLpaGsy + le7fsbZt5QVaBQax8aNfCykpNmPGTGbpGcyCCuqURvsezWPLqMzLqKUWp0DdwQXGSfQUjaNH/kcsi9ej + p2gfzI8cCvUN9P60hHp7Oc1pjqVU2SXxGLa1rMQ/50LPWdbuzMBwCGsp2+K9CsakCGlCoFXSwJGhgY3w + iY0/LS1tNnWhmewQ88CNbU3TnvIAOpr745dwPfwS1hdzwvrRUQ9z92nRA2gAlG3dIbOMdqHFlN2lVDlJ + lvBjAtpZZLwY5RDr+eOvxq01NbXfr/Zu7Y+1cCS1CgwcyUmN0I8ngbWUlmZ638/U720cktbWNOnVSN+f + MGkXPcR26GK8/2AM2zIZXSw2U4vxG5Jnl3afJpBteRJarUp93csoKEvvhznDFNu3Fy9AP2laS0py7UYk + tQoMnPeDuZOWRFuiI9GZUCKUKQoVGtJZQb61Uvf+P/5DdbZJ9KhNo6/13bjobZtVISSQ2mUxbZfLqOfF + 8AokQIpEy9HN2n5J+M1uMzYkqOiP/0WhTZvvuC/Kdg/y3Z3oRnQhOhEKRGtChvjiAGSJroQW0Z8YQgwj + RhJjiLG06FgaOryFVAuDdgqdpnTWGmzZYej8nV0n26fJT1pXIjth3THiOJ2XdpliL+o8Ym6gorahTfsO + ilNbSksZ0vzhlIyx5Gsc8T0xmhhOGBD6RB+CByZPiKsiqVVg4PCBRAuiA8EdaBLcWT+COx5MDCUMCb7g + cBIzjOB2fbr1BhE8YDH8/L1Nn48h0TwRI/g8gp9zX3zsIIInS4/QJtQInkRehS8OgMP7kVeCtxJ3wjPR + juCl5cHx1uKl5u3Fy87hC3J4u31Mo71xHJ+jSHAf3Fd7gvvla/C1+JpyBE/kh3tCUqvAwGkc/AXwBb6G + 5nz9RyS1CgzfGs0avx3A/g+DFcTsSl19LAAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAADHZJREFUaEPtmHlwlOUdx2nVseOtVVtrp1arTh2Prq1obdW2tn+ArTMqQkgI92XCrYiK - CohYRAEtgiKCByCIcoiIIGc4cgdC7pskm93N3rtJdjfJHvn2+3v2fTebQwOxM44z/eMzz+67x/v7PN/f - 87zv7gAAA37I/KCLl4n/v8D33X7fmoBtd8KV3uyUe7xZKXeTgfF4MlMHerKIjMStSNGIPncSl5CRMtCV - njLQSRzHn4iSnnK3/djkuwqW3Hzhd5mEbxTwly5Y1G5a6Qw2votQ4xqErMJ7ZG0U2zqN9zkS+4caHyHk - ENaTDQg5hY0aH3PsSlvjOqOnYP6k/kr0KuAvmfdSyLoaEdd6hJ0fkg+08SOEeUyOR9wbyEZEPB9H8W5G - h+ITsgUdTVsQafqUfIZI81ayDR3N29HRsiOK73OyEwjsQpCi7vx5Q/oj0UPAenDKJe21r7sjznUI29ci - bFtD3tXG93hM4HE7X3e8r9GLoEsTdFNO8Gwim8knlBUo6BXBT5WQv/6dvP+JgOPIJENb3eta0Wwf69ts - oZUIN74dxfoOWU10KQrGpCjm0MV0KUlQT45S8WJKahPQvIUCa2BvqMx2e5rHez2ey89UpkcC9rQJhraa - xbGCQ5a3EDK/SVZEkeeWlZrUqjgpTews0lKtSOD9GP7aVbCbauByeeFyOhudLudyl8t1e18iPVvo0HhD - a/XLCFtWEBZregOhhqVkGR8vjz5XiNR/4qR0MU0qPi0l1Usbaml1uD6Er2YFbOaYAJxOh9BBdrndrn9+ - k0gPAcvBcYbWygUsjEWywCCLD9a/SpYgVP8aQsbXNTSpBpHSxShlEql4MUlrlSLahnoLsg01sQ7ne2ip - flMJOJ0eOB2q+O5s9vlazuku0kPAdIACFfNiRQWNSxCse4UC/+a4mKOgC+lSupguxbSUmJaWakFNKq4N - w0pqFSL2d+Cr5kT5XWhrC8LjdsNht8PhsHeRYBKJfQo07BtrCJQ/zwI402wbVfjphQjWLupEhBQiRZRU - p5hKyyhSmpjegt3bUBOLWN+Ct2wxzPWVCLS2oqOjA6FgEF4v0+iaxDt9CtR/PcYQKHsWYeOrqlVU4TXz - KbGAvKQhQi/HocnFS8XEJK1oYp1iXdswYl6OprJXYKqrgMlsgcVsRlNTEyKRCBNpiyXhcjln9ylQt4cC - JXMQ5syHpH2k6OoXyDyK6IgQqRGh7mK6HKVEqLZbWl3aMCoWNi1BU+nL8DjMnPVm2G02mEwNaGhoUMWz - cEki4PF4ru1T4PRXow3+4qcosIiLlm0hRVc+h2DV85QQREZ4sauQpFQjMr0JxUlJonWanNaCYeNieIvn - I9BkZ31AG9tI2keKj1sHm3vbiXos4prdFCiaiVAtZ5cz2M5i2yvmoL3yWUWwSmSEuRpnIta9BSW5zjYM - GxfBU/gCaqtKYLc7EAgE1DpoaWmmgE2tAy7gP5+RQPWuUQZf4XSEpEVqF6KdxbaXP0WJp+MQoWdiUj3F - KNVbYt+QWrhuAbwFL8BqqoXN5mDrGGE2m+SCpi/iE2d8Haj8ItngK5hCAbYI+18VWjaTEk9GRRSzKSPE - SVXqUiIWlQtW6YnFp6W3oN6GLyJc+yIFnkOg2Ql/oE1mW8283j58PvGMBSp2UiA/BaEaziJTUIWWTEN7 - 6YwoIqOYRURKF+P7REzJ9ZaWnlj3FpyLSO1cOHKfhtVsRDAYUu3j8fBaEL0OuLkeLjljgbIdIwy+k5MQ - kj6X/pcii1MpMTUqomSE6RrxYiKl0T2xLmJMS62rZxCufhZtJRNhzFkGk8WJBqORbWTVdx4ZV3zb/VCP - RVyyLdHQnDeBO88zapG2l3K2iyZTIkVDZHQhkSK9Cklagi7EsZtUqHI2vCdSYS9YDZ/XgaYWn+p5uz26 - cEnE7XbfelYCxVsTDU05E9QMtVXMRVvxdLQWTEJr4RNoE4qidAqJGIWKp1BG0KRiafWW1EwEy2chwO+t - yt4Aiz0An1+uwBEEQ8H4q+/Bs74bLfp0uMGTNR5tZXPQWsGFVTQNgZMTEDg1OUrBZArpPNFvsVD5dLiz - J8J0uhh2p1ftPHLxcrtc8e3T56+0Hi1UsGW4wZ0+Fq0lsyG3FP6CqfDljYf/5ESNSfDnRwmcEigTL1bI - 54rOtKKJ6alJWqkIlabClTUJLW4L/K3RnUdax87+l/bhAq7zuj3nn3UC+ZsTDM5jY+Avegr+kmfhy5+K - lpxxaOG6aMmbqPCd0FBSlBFESKe3tCgULxUqmQxHxnhY6sq484TVFdjv92lXX/a/y/N8X8X3+sfWiU0J - BvvR0fAXUqD4GRY8Bc1ZY9GcPR7NOcKEKLkU0hGpsxGjoGwMjvRxOF2Rzxu4RlitVqbgVilYrWZUZG7+ - U78Ecj9OMNgOj0LLqSfRUjgHTXmp8GaMgTdzHLxZ49CkQ6EmkeomFpMSOaYWS0tSi0usrWAibMfGwlJf - DqfbC4vFjMZGi1oPlsrDyF19+/39EsjeOMxgPTgSzSdnoblgDvjHFtzHR8PDdeHJEMYplJBGVIpCgi6l - xKJpdSbV2YaB/AmwHhkDn9vM22aohWu1Mgm7B5asV3Hi7Rse6JdA1vphBsv+ZDSdmInm/NnwZE6G6+go - uLgu3Md1xkIWuqCLeUUqXiyWVnepqJj/BPv/0ChUluTB7WlS9z1m/g5w8CelI+tFZKy8pX8CGR8NNZi+ - HgFv7gxeZGbDlT4JjsMj4TwyuhOuEdfRMUpKEROjYDcxlVacmN6CPm4MZiZdXXoCDaZGdfNmMpnU9cCV - uxDH3ry5fwLHPxhqaNiTBE/2dHjynoLzGHv1YDIlRkVJ0+lFSMQ0KXdMjEkd15JSbSgtyE2BG4PpwEj+ - lVIFm92prgGSQKQDTOAlHF3eT4Gj7z9uqP8qEe6safDkPgn7Efbq/iRKjIxhP8QTK0bB3k3MmdZdrFMq - vg2buDEYmbStoVIJ1NXV8QeNW22ntsz5SFt2U/8SOLJ2iOH0ruHco6fBmf0kbIfZq18nonFfMkU6sR1I - hkITs3OMiVHqW8XYjl5uDHV7ElF6KlNto2bexOUavahqjjCBBUhbemP/BA6vGWKo2JGAxmNTYcuYxZjH - o373cDTsGQHT3hEwEwtnzrJvBKVInJRVl4oTs8XSGtmlDd3cGE7vTkRlUQ5vIyxocdowap8DM3NCvMYs - RNpr1/dP4ODqxwwlW4eh4cgUmNNnoW7feFR/MRynv0xC7e4odV8loZ4YKdVAISUmUkosuWtalImKdbag - pOZKGwlJurwwC/VGK6wV+3GooRlHLPwXIn0uDi299a/92kb3v/3o7wu2DEXdoVQYj85E9Z5xKN+egIqd - nK0vElFFqncloUaglC5WRzGRqucGIGIiFS+m0oprQ8ehZFTvHIbi/CzUVFejaMcYWA+mwMWJ4/l8e1c+ - dk2/BPa9m/ybvE1Dw9UHUlGbNgPlX45F0WfDULJtOEq3kx2cNeHzRFSQSoqJVFQsUYkpKS0xXcxIsVgb - yuLlxlDB7ykqqkBp+nrkbRgczF3/cO7JjQ9/mf5Bwr1nUnyv90JyMP2jITmV+1NRkzYTxV+MxclPhuLU - ZwkoIIXC1uEoppBQokmV7UhEGYXKKaTS0sQkLZVYfFpMyrJ3GPK2TUfOoY3I3fQ4jq595IP4os8ZMGCA - 0JeIeoP25nM5/oSfOW/18/+4P3tzkqtk1zgUbk9G/qcJFBiuKBAoULgtEUWkeHsiJbibiICSSGI6nN2d - SWy5JFR1ERjBNRQlZ8Oj2LXqEaSt/Rf2rnyoKnHQbb/jua8i17KOa8jPydXkSnI5uZRcKDUSqVXVrgvI - gcvIr8hv+dqvB9973eB18x/8cMcbDx3fvvyh9G3LBh8n6duWDk7funRwxtbXydJBMbbxMcncvmxwhoY8 - ztyxPMrnywdlkeydbwzK2rDwwYwVTz+QuWbe348vmXHfe9f/4orBPOc9PPffyF/IA+Q+ci+R438gd0ht - Wo1S67nxAufwwEXkZ+Q6cpNIkF+SG8iN5GYicreQW8lt5HZyB5HZEwwad3LsDf11/f3yWfmuu3jOP5K7 - yUCt4Du1om/TCr9Rq01qlFrVX+2xHpNIyI/lBXIeOZ9IS11ALiQXkYvJpeSyHzFWcoXGTzkKV5Kr4sar - +ViIPybv0d9/Bc8hSIvIrEqbXEIuJtIuF0gNWi1Sk9QmNcbq7nOR9LWINPHuE6Gvqx6j/n3dP9fXec74 - f6H+ftH39bnvnMD3Vbh+3h+8wH8Bp7V0eqbBJKoAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAMV0lE + QVRoQ9WYaXRU5RnHadWjx12rttaeWq169Lh0bEVrq7a1/SC2nqMiZAEihM0ERARERQVUrCKLFtlkUdlF + CYiIKGtYsgdCdrKRZDIzmX0mycwkmcnk3//73nsnN3cGxXzjw4+b+0wy9/97n+e+d4ZBAM5pEhbPJRIW + zyUSFs8lEhY1HLuTrvEXZDzgz8+4nwzW48vLHOzLJ+JIvJIMFeXcTTyC3IzBnpyMwW7iOvacQk7G/c6j + E+8rnX/bJYmufbYkLAqCVXPndVuWusOtHyPSugoRu2A1WaPgWKvyiYLzM5V1iLgE68kGRNyCjSqb4uhq + XWv2lc6ZkCjD2ZCwGKyc/WbEvhJRz3r0uD8jn6rHdehhTdSj3g1kI6K+TQr+LeiVfE62ordtK6JtX5Av + EW3fRrLQ274dvR07FAJfkZ1AaBfCFPWWzB6aKMuPEVewH5h0eXfjAm/UvRY9zjXocawiH6vH1awJWHfy + ddcnKgkEPaqgl3IC32ayhXxOWQEF/ULwCykUbF5RbMxyNsQVXIcnmLqaFqihOT725RyhpehpXa5gX0FW + Ek2KxKSISxPTpPRilNKLSanNQPtWCqyCs6W2wOtrH+v3+a4y5joTcQVn9jhTV8O7scAR20eIWD8kSxTE + uW2pKrVMJ6WK/YRuKZ1aD/g3Idi4DE5LAzwePzxud6vb417s8XjuNuYzElewHxxr6qx/Gz22JYRhLR8g + 0rKQLOLPi5VziZD6n05KE1Ol9N1Suxknpnar1/MZAg1L4LDGBOB2uwS9ZJfX6/m3MadGXMF2IN3UWTuX + wRiSAcMMH25+j8xHpPl9RMwLVFSpFiGliVHKIqT0YopUn5g2gn1ive7V6Kj/UAq43T64XTK8kS2BQMd5 + xrz9TgSW/RSomR0LFTbPR7jpHQr8l8d3eRRoQpqUJqZJaWJqt+QIqlI6MWUElyHqXIFAPRcq6EFXVxg+ + rxcupxMul7OfBDuRYszb70TQsneMKXTqNQZgIAaRwU+/hXDjvD6EkERIESnVJyblpJQqpo2gQD+GqljU + /hH81e/C2lyLUGcnent7EQmH4fezGzoBssKYt9+JoPn70aZQ9SvoMb8nLy4DN8yhxFzypooQeluHXkyV + iokJKaNY/zGMWhejrfodWJpqYLHaYLNa0dbWhmg0yo50xTrh8bhnGPP2OxE07aFA5Uz0cOUjYnxE4PrX + yWyKaAgh0iBkjGKanCrUaOhWvzFUxHos89FW9TZ8LitXvR1OhwMWSwtaWlpkeAYXAiGfz3eDMW+/E8Hp + b581BSumU2Ae55sXEoFrX0W47jVKCISM4I3+QhIhk0hIJyXF+nerx/wu/BVzEGpzMgLQxTES4yPC6+6D + LVpGPXGFht0UKJ+KSCMD8CLdDNtdMxPdta9IwnVCRjBL5WzESD8xTU4ZwR7zPPjKXkdjXSWcThdCoZC8 + Dzo62ingkAK8gf9qzCqIK9TvSjMFyqYgIkaEK9fNsN2nplPiJR1C6OWYVLwYhRKJnaFrPU1z4S99HXZL + IxwOF0fHDKvVon8eHDfm1Igr1H490hQonUQBXowrJYNWT6XENEVEMoMSAp1UrSalIaQ0MX23NCGtW2+g + p/ENCryKULsbwVCXWG258tr48Hy8MadGXKFmJwVKMhBp4MXYBRm08nl0V72gIGQkLxIhpYnx9zT0YrFu + KVLd8n7SS81CtHEWXEUvwW41IxyOyPHx+fgsUAS8vB8uN+bUiCtU7xhhCpyYgIi4CFdJhqzIpMRkRUTK + CKao6MWElIqxY/3EKKWK9dS/gq7K8TAXLoLF5kaL2cwxsms7jzguMWbUE1eozEoxtReP487zslyd7ioG + K59IiQwVIaMJqSQU0tCE4qUitTPgP54JZ+lKBPwutHUEZGinU7lxSdTr9d5pzKgnrlCxLcXUVjhOrlBX + zSx0VUxBZ+kEdJY9hy5BuUKfkCpVMYkyAk1M61aiTk1FmEIhvm9dwQbYnCEEguIJHEU4EtbCCw4Y8xmJ + K5R/kWzy5Y9FV/VMdNbwxip/HqET4xA6OVGhdCKFNJ4bsFjk1BR4C8bDcroCTrdf7jzi4eX1ePTj86Pf + 0uIKpVuTTd6cMeisnAHxkSJYOhmB4rEInhivMgHBEoXQSQFF9GJlGn1SipgmJ6QyEanKhCd/Ajq8NgQ7 + lZ1HjI6T8y/C8wZu8nt9FxrzGYkrlGxJMrmPjkawfDqCla8gUDIZHYXp6OB90VE8XhI4rqIJqVIhjUTd + opBeKlI5Ea7csbA1VXPn6eGlgWAwIHcel/g47fG9pmX6IeIKxzcnmZxHnkWwjAIVLzPwJLTnj0F7wVi0 + FwrGKRRRSENI/RQxIjYGV046TteU8ANcK+x2O7vglV2w262oydvyF2O2RMQVijYlmRyH0tBxcho6ymai + rTgT/tzR8Oelw5+fjjYNCgmMYjEpKTauT8og1lU6Ho6jY2BrPgW31w+bzYrWVpu8H2y1h1C08u6HjdkS + EVco2DjcZD8wCu0nXkR76Uz4CzLgPfYsfLwvfLmCdIkUUlGkKCTQpKSYQUo3hqGScbAfHo2A18qPzZA3 + rt3OTjh9sOW/h+PLb37EmC0RcYX89cNNtn0j0XZ8KtpLZsCXNxGeI2nw8L7wHtMYA3GjCzQxv5DSi8W6 + ZZRSxILHOf8H01BbWQyvr01+7rHye4CLXyld+W8gd+kdAxPIXTfMZPl+BPxFL/AhMwOenAlwHRoF9+Fn + ++A94jkyWkpJYmLEICa7pRPTRjDAjcHKTtdXHUeLpVV+eLNYLPJ54Cl6C0c/vG1gAsc+HWZq2ZMKX8EU + +Iqnw32Us3pgJCXSFLI1EgiJoyrljYlRiEghKSVGkJsCNwbL/lFwWurgcLrlM0B0INoLduBNHFk8QIEj + nzxjav42Bd785+ErmgbnYc7qvlRKjIrhPKiRBqdBzB0n1iclxdROtXFjMLPTjpZaKdDU1MQvNF5GABx5 + c5C96NaBCRxeM9R0elcy9+jn4S6YBschzur3KWjdO5IifTj2q2hSejEK/aAY8XNjaNqTgqqTeXIbtfJD + XJHZj7r2KDswF9kLbxmYwKFVQ001O5LQenQyHLkvss1j0bw7GS17RsDy3QhYiY0rZ9s7glJEJ2XXpHRi + jli3RvUbQ++RNJzenYLa8kJ+jLChw+1A2l4XphZG+Ix5C9nv3zQwgQMrnzZVbhuOlsOTYM15EU17x6L+ + 62Sc/iYVjbsVmr5NRTMxU6qFQlJMSEmxkf27RRlFrG8EBZ7sURCdPlWWj2azHfaafTjY0o7Dti4+4Gbh + 4MI7/27Mloi4wr7lT/2xdOswNB3MhPnIVNTvScep7Umo2cnV+joFdaR+VyoaBJTSxJqIkGrmBiDEhJRe + THZLJ+Y6OBL1O4ejoiQfDfX1KN8xGvYDGfBw4Xi9wHdLn77emC0RcYW9H4/8ffHmYT31+zPRmP0CTn0z + BuVfDkdlVjKqtpMdXDXBVymoIbUUE1KKWIoUk1IGMTPFYmNIIQc3hhq+T3l5Dapy1qN4w5Bw0fonik5s + fOKbnE+THjTmOhMJiznrhhbW7stEQ/ZUVHw9Bic+H4aTXyahlJQJtiWjgkKCSlWqekcKqil0ikKyW6qY + 6JbsmL5bFLJ9NxzFWVNQeHAjijY/gyNrnvxUn+G8QYMk+loi5D/qL59PLuKPF6x87V8PF2xJ9VTuSkfZ + 9pEo+SKJAsmSUgEFyrJSUE4qtqdQgruJEJASqewOV3dnKkcuFXX9BEZQQKFww1PYtexJZK/5D75b+nhd + ymN3/YHXvpbcwBzXk1+R68g15CpyBbmEXERE1n4ConAl+S25na/9bsiDNw5ZO+fRz3Z88Pix7Ysfz8la + NOQYyclaOCRn28IhudsWkIWPxchSyNu+aEiuivg5b8diha8WP5ZPCnZ+8Fj+hrcezV3y0iN5q2b/89j8 + Fx5afdOvrx7Caz7Aa/+D/I08Qh4iDxJR/xO5h9xOREaR9Xy9wHnkUvJLciO5VUiQ35CbyS3kNiLk7iB3 + krvI3eQeIlZPYFK59wxor2u/L/5WvNd9vOafyf1kMBGB7yUi9F1EBL+FiGwio8gq/6tdCqgSgp+LF8gF + 5EIiRupicgm5lFxGriBX/oxtJVer/ELlGnKt7nidir4mjtrvX81rCMSIiFUVY3I5uYyIcbmYiJERWUQm + kU1kjOWO/TBQxJvp31A7PxNn+ruBkrB4LpGweC6RsHjugEH/B6e1dHr2M+x9AAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9wAA - CvcBEOiS5wAAEBpJREFUaEPtmgdQVdfahhdVkaqAGJooSFUUFTC2xJjYojHG5F41sYtKky4oTbpURT1I - VQSOgLQDSBERpIMiFgTkaoyaWGKLJShgef9vEzAkmMkxc///Tv65zDyz9tmz1t7f+33vWnuvPTAA7O/M - 3zp4LvH/FfCftt//zwo8e/Ga9dH18jW73fGCRTTeZ4daHrGQU/eZbdkd5lp1n9mUPWS25feYX8NTtqP+ - tnTMuZBpO+uDbX2rlkU5lX6RbVG4pJgoCqwyy4ltNItOvvC1Q/KFTTP5rfvlDl1MZIkXgllqyw52pC2a - ZV7KZtmXYlhOewlLaj7AfnhylXW9Aut8+Stvq/ZbK/BnAmxIgHs1CSl/xr7I7zCbnn6V91l26LW5mUHQ - O1QG7aQr0Ev5EXqHH0GX/xhmGS1YUxIOt4qlCKyZDF6D/vdRjUviEs87Tk9rCRI50hb/fycg9PR95lxx - l208/mDigqzcvEWZ7i9tS1wxJ+8sjDNeYlLmTzBKvYtRSXehdegHjEy8RYJu9wgZm/4cc49ehXV5KnbW - /hMJjUNfx50xLUltCZqS3V5MFYj9363A4bbHLLzxwaAZqbf8RvCKOyPrF+D45dVwr0qEevwVDI+qgVj4 - BUhGnIIyrwhioS0YsqseLLQdkuGNGLa3FJKRl6EZfxXzc9uQdMELyeemYl+D8osDZ1eEC9oTpQX/KicL - JfybLfTzC7bv7EO2p+mhqvGBy2Us6Bq+zK9B2sXNiD9jgE0FC/BxshXGxu3FqOgUGMcEwaZoNlyOf4iw - mlFYkL4dLOQKZHdXUnsJEmFnsDhzEyyLNyL+rCPSmq3IVqqIbZxWf6QtbXTKRf6/T0AnTeKHna8YWUdb - aXdLq1jYdSw42oK9jfOxt04BvHp5eJyYhJmJLpiWFIBvBMshFVqJCQkx2F07AnvrleBbYYChXPA7r5CA - NgwKP4OASgO4lpoivFYZ0Y2zkNrshpjT4xFRq/0d/2L0uFtPb7KufhOYm8xCT2Iu6D64QW0POtW09rW2 - SoZfxYKCMwipnUzBy1GAqj3EnZaBR9lkLM9Zh68FqzCb7wXmdxNrc5cgsEID3mU6GMnLAAu4ARbcTO1V - zEwOgGe5Cb7ItIJXuR7ZSAfJFxwRfYquXa9/9cpP53Ve0b05EX0ILeCHJ91Uwm52h6xz/XG35IzE9hLx - nS0Yd/ghthxbBF6dDMJrNBBRo0YW0cDyrPUwOxAClV3ZmHtoDRby10Is6BxWpM/D1qMaWMRfA9nwSpgn - +EM+oowEtGNY+En4njTEp2mOmEmV20PVDCe7JZ7fQnbSwcGzs2sfdXZIP38B1tH9qgehBXz3qItdI279 - 3M2sCm/sYN7noJ9yDysE1givVkZo9cge9tQNx/q8pWDe30My4Dzm8Ldi7G43SAcVQjyIfB5nhtnRiyEa - 0AyxwCaohKfT+dNggecwOLgWMiHVmBC3D0uPbOpJxu5aRVgXLsGqoqPwq3gPeZe2Rjx8/pr92PGkB6EF - XHvcxe7Qw+v41ccTJX3OdGjGXsOGIjuEVStiZ5UWgqpG9RBcrUnlH4uhIWUwiDqA3XXK+CRlGyQCKEj/ - VgwLSIR8wGE6bqGsN5GtOPtQ69sC0/hwTIjdC+09h7GrVgUh1Ro0XgV2RdNoMShAzJllCK4a/uLUzeIZ - lx/+wC7d/1Z4AWdud7DW+8/Z3OT2TObXjoWCZIRWKSKwcjQCKrR/Q1DVSMxOcoPzsSkUhDqhBq1IPtgO - CtbvAnGeIEF+jb/i04wxe2MxJcYRC5PXUCK0epLhcWJ8T2JsC6aCd/ozhNSY0NxyKa68cYNV3WgVXkDj - rQ6WfP7+RDHvU92qUd/CqugzCl4dPifHvAVdbCsdT6JGwbvcgALQxIqsFWA+XKYpcN9TvS133A8fej54 - ncWHB7eTHdUoeGN8kuyM+Sn2WHjYEvq8RHxzdB9dVxW57VkfVlxvEV5A051n7OuMyxHMuwmj9jfCsWgS - LYXaFKDeW/E5SVWp1MSX6augHp6GRSlrobgzl+bGGapEwx9AwnachqRvLdlmBmYddMcQvzIMD86GXOAx - MLdWzE1OoYTo4UDThoTK6+3CCyj99vFgrdDGS0No5Rm5Ow8ORSbwPDEG7qX6A/Ao1aPVRJPKPo0C3wCF - gDxohewj/x+hDFPGvev+AKqAZyOWZyynlUwFhpExkPIph87uGLCtV2DCi6Dgx2Fjnh1d+x/fV14/riD0 - JA6ruWkq7lnzWj6kFdoRsXAoHA+3Y/rYWmxAGL7BlX47FxlhTqIVhviUQsK7EmJe9MByJ/t4Uua9aoja - P2b7WXyQsA3+ZD/T6CBsypuLrccnYn6yLSzy5pFtNRFaMwtL01bQQy5/ltACLHIub2TbqyAdcA464ZGw - yzeGc6Ee3IpHwbV4NJwK9XvwKFGDWZQnZYwm63bKtDsF61H9DtRA1L0GeruisDlvNvxOatFDbwz5XgM+ - 5dpUbV2qgjkciyfCqTjLWWgB5rymcE6AhPdpKPvzYSswwoZMcxjuCsHsuE1Yn/k+LLLMYM7bhkEe9GDa - RpneTpkXmgryOFloK1XK4RJmxDnB46QaHI4ZEYY97dYSQ2wr0SPrToJnqSF8yhbECy1ANaCWL+rOWaEB - w31TYJc7GqZ76IXMiTLt3ATVgAOYsMvnl99u1G8bBfQuuNZCz48Pm1gHWEbTO1D+FOSVj0D2CY0eck6o - Yuex0bR4GJJ1OftO4MgTWoCMZ2UucysHc63GUO80WBzRh7pfAgVMGdtaDTnPbGgG8OiYMs/1exdcKyDi - Woa6o6ZA0wjgtDpQrw3U6RG6v1Cvh+9OqsDxqD4cCsaRXcfDscCwSGgBsh4VuczlBAVI9nCqxfuRGzA5 - wga6Qb5Q8k6ETsh+DPXKpmpQ9rk+74JLBaTdCnGlcCRenWB4dpxDpB8MXaViuFuqAJd8fdjmj4VdnhG2 - 5BsJL0DNt4rPnI6DuZRSkGUQdS7F9N3/xMLoqXRcBqlthdDfGYTBrgIwxyrqQ2K5vsLgXI4hroVoF6ji - 5TGGjiLxAXQVieFW4SA4CgxhJRgH6xwSkDtZeAuZ764PY3b0MOFEcDiexGCXfLwfthhaPvSq7FAJSZdc - aPlHwjjMByJOJb/27RvzR60jJcClAJcy1fCigOHnfIkBdOaL42aeFLZkGWFjljE2ZhpQNRbGCW0hm6w2 - C2ZTSIGTiD7sKzDMLQYmgV+RAJq0DqUQdSiGtGsqJJ3zftu3/7jfH9M4Ked8tKWroTtPBE8FkgN4LpDA - DwIpWGcaYl2GMdakjUHoSXcnoQVEVlybLGZX9IrZFYHZ91EMUftCqGzzg6RDOiTsi6HskQQRm5NgViRo - C1XhTd/+4353bFcCKcdctPHV0Z0thqeZgwfQlSWBS4fV8EX8XKxONcBKviGia/cI/yAr+9eDwdreZW3M - +iiYHVWijy3FELPLgYLzXlhnf4QI2hOsP7IIk0J9IeecSUJoLtgV/HZM//Hc8ZZjkHIQoDVJA10Z4niS - LjWAziMSaE4cjQW8RVh2SAcbUmfeyGkulhe6As23n7LVh86GMQuapLYkoj/WxyBjn4tweo2ObVSgTb0c - Eppk4V+mj1HetLRuoJXJiqz3+3F9v22KIGWXjdaDGuhMlcBj/pABPKfzzQnaGOvrhs9iRsI93yquuO2U - 8C9z528+ZmlnbppIWud1M2t6q7Qhj/eQT8EVYsmBVbT5eA+7alRpJ6Xes5vinVKCf7ku5sVsgrrHfjDL - 4n7j+sZTa10AqS2ZaInTxPMkSTw6JD0A7vyFGG2ou4bi0/36iK9LmZnfUv8uAp6wy/c62MJ9dUfYuiwK - mkRwWOZj0JYM7DhhgIg6Vdq8jHxDMFUkjMTwTivSTmokRrpTNdbRQ86SKtgznoK3JAttpjlASWner4Vn - BwbhpwSZAXDnz/P0oLV9MywzVwoaLwrY7dMRwgu48dMzdvfnLlbefm/CEMucp2wTPbQsc+jmZKnNufia - /znCatXopYvbof0ebrupRVVaAeNAH8g5JINtyocYoW8fBWPHSJg7h+ISTx1P46TwMFZ2AE/jpNHOew9r - I8xQVbDG8pngY52ueq/BQs8BTsD3vSLsU895sJVpFDhVgsMiD8PsE+klyxD+ldq0Q9N9K34VOthZo0kv - ZMZYnTUHsbs+xON9sniyXxqP98vgYZTcnyBL/WRfPdkv1831fcSfGCW0gB+fdjOO+/RV4taj5xIfBZcX - s5WpYBtppeFYU4APIq1IgAa4DY37cYOB0OZnO533PKELdxJ6LlUGryIH48EeCpx4sEf+T3lIfe5zRAzC - oxTTg0IL6H7xinG8fv3L17Ard5+O0HUraGYr6QuDBe20NtBHqnXZMAu2p5csI3rZMuxp34ZTgSHsCo0w - xc8Fx/xM0R0piXsRQyko4bgXJo0HPM2G5037lIUWoDdmDNPX1WW2NraspqaWvSYRcfW3R6k65F1k39AX - h/XpJICEfF0I82Ar2OePgVXO2AFY0zmHfB0sS5oFtjofihuSccJvArrDB+NuyDDc+xPu7pTBgyi9ho6s - RSNentsr/CRm/f7ERUTY4sVLmG1QDIsua1eZEVZ3nK0lG60lS63KhrabNywydLEmddxvWJtmhHVphliR - ZArt7fT+tJqzXhaU1h9CqbcJuoKl8GOQIu7+AfcCZNCVMKHhReEalesH57JbZYHCCxAjAX2I9BOjq6vH - Pv3GSmKyNc9LxlLwjBMw1DoCXyUY4av4sfgyfhy1Rlh2UBdfxI6HqqMfxNbSKrSKKraGKsexOgND1yWi - xHMiOgOkccdfCT/2446fEn4KUMAjnkldsusc5YVmmkxRWoINk5X6awL6ieG0iHJ6BomKMqMPlpiMtogV - yFhmdE8L+wTz9ulh3h4DzI6YhCmB86Fs408Wo6yvonmzOuW3rMyE4no+SnfMeP3MTx53dii/4Wd/RbTu - MKgz11dT6e8E7ljoOdAbtBi1UoQcMYxQJkYQaqRCg66nLCctNULV+OPPtZZu5E/fMeP7sV4rXw/ZHEvB - 0nK7ip4ba2me9MBVIB0i6zIgueEIFFYn3JJf6MU3NP9oZYOTdk2n/3A88RkOrm3aZtCgr6Gsw+WJ7iVL - cK0oF9O7CBChAdKEBmFImBBmxPvEdOIDYhaV5EO67lRxEXFzWblhC5R0J9kqmK7YO3y+s0B6nmuVxBzX - BuIUHVcrL3DOU5q6jKeoZ24vr6D06SBREXMaazpimPzHgYu14vNXqzQGf64Vp6YkP53Oj6Xrjyd0CRVC - 8l0FcHNgcG/WtajVI4wIY2IiMZkwJab0ippKYqYQkzix4tSH4Pr0wB33njPh+lAFzen8VG4s/Z5MARsR - hoQu/eYSxjGmN4FDqZX4KwK4Koj3qufKyNmJqwpXVnlCgeAurkgo9YrlbDa8Fy5z/ek7z/Xh4MZw1uSu - wV2Ls6pM7z24e3H35ALn7MPF8k4WerMKcQOFgLvBX0GYa7/pI/Qc+E//+8C73P9v/68G/wNkt3I5c9b2 - 4AAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAAQNklE + QVRoQ9WXB1QV19qGN1WRqoAYmihIVRQVMLbEmNiiMabca0zslSZSFJQmXaqiHqQqAkdAOkgREaSDAhYE + 5GqMmlhiiw0FLO//zYkmxjO5MXfd/67lWetZc+Zde2a/X5k9exiAdxpe8V2CV3yX4BXfJXjFdwle8fHT + F7/R++wFu979lEU232b72++x0OO3mUPFDeZWc5vZV9xlDpW3mH/TQ7a18bp87KnQSdsaQxz8ahZGu5R/ + kbO6eEEpURJUY5Ub12wVk3LmW6eUM2unCjv2KO0/m8SSzoSwtPat7GBnDMs6l8NyzsWy3K4ylty2l/30 + 4CLrfQ7W8+x3+Lzyin8VgD0F4FFLgVQ+Zl8UdltNzrgo+Cwn7NLMrGAY7a+AfvIFGKX+DKMD92AovA+r + zHYsK4uAe9WXCKobD0GT8Y/RzQvik047T05vD5Y42Jnwvwsg7MRt5lp1k605cmfsnOz8gnlZHs8cytww + o+AkzDOfYVzWLzBLu4lhyTeht/8nDE26RgFdFwUyMuMJZh66CLvKNGyr/ycSmwe+iG+xLEtrD56Q01VK + AcT9/wZwoPM+i2i+029K2jX/IYLSnqjGOThyfik8apKgnXABg6PrIBVxBrKRx6EuKIFUWDsGbG8EC+uC + bEQzBu0qh2zUeegmXMTs/E4kn/FGyqmJ2N2k/nTvyUUReV1J8nn/qqQAEv/LATx6ynafvMt2tt7VNN97 + voIFX8JXhXVIP7sOCS0mWFs0Bx+n2GJk/C4Mi0mFeWww7EumY+ORDxFeNwxzMraAhV6A4o5qOp6DTHgL + 5methU3pGiScdEZ6my21lSbimic1HuxMH556VvjfC6CHArjb85xrHX21He0dUuGXMedQO3Y1z8auBhUI + GpXheXQcpiZtxKTkQHyX9w3kwqoxJjEWO+qHYFejGvyqTDCQM7/tAgXQiX4RLQisNoFbuSUi6tUR0zwN + aW3uiD0xGpH1+j8Iz8aMuvbwKiXvPwyAM/0K7rzzTo+W3u6ODtmIi5hT1ILQ+vFkXokMaoqIP6EAz4rx + +CZ3Bb7NW4LpQm8w/6tYnr8AQVU68KkwwFBBJljgFbCQNjpexNSUQHhVWuCLLFt4VxpRGxkg5YwzYo7T + vRuNL1745bTBc5qbC+IVb/rk4BV/etAn4ga1zuX7fbJTkrrKpLe1Y9SBu1h/eB4EDQqIqNNBZJ0WtYgO + vsleCau9odDYnoOZ+5dhrnA5pIJPYVHGLGw6pIN5wmVQjKiGdWIAlCMrKIAuDIo4Br9jpvg03RlTqXI7 + qZoR1G5Jp9dTOxlg38np9fd6uuWfPAXr7nsugs8rr/jDvV52ibj2qI/ZFl/ZynxOwTj1Fhbl2SGiVh1h + tUNF7GwYjJUFX4L5/AjZwNOYIdyEkTvcIR9cDOlg6vN4K0yPmQ/JwDZIBbVCIyKD9BNgQafQP6QeCqG1 + GBO/G18eXCtKxo56VdgVL8CSkkPwr3oPBec2Rd598oL93P1ABJ9XXvHS/V52g1aeIxfvj5X1benWjbuE + VSWOCK9VxbYaPQTXDBMRUqtL5R+JgaEVMIneix0N6vgkdTNkAslkQAcGBSZBOfAA/W+nrLdSW3HtQ0e/ + dlgmRGBM3C7o7zyA7fUaCK3Voes14FgyiRaDIsS2LERIzeCnx6+WTjl/9yd27vb3vF55xZbr3azj9hM2 + M6Uri/l3YW5eCsJqVBFUPRyBVfp/ILhmKKYnu8P18AQyoU1oQS9KCLaVzPqfIU4TFJB/8+/4tmHErjhM + iHXG3JRllAg9UTI8j44WJcahaCIEJz5DaJ0FPVsbS6uvXGE1Vzp4vfKKzde6Wcrp22OlfI73aUZ/D9uS + z8i8NnyPjeDBEJvLR1Mww+BTaUIGdLEoexGZ5DJNxv2Ovzy+gS+9H7xP4sN9W6gdtci8OT5JccXs1A2Y + e8AGxoIkfHdoN91XE/ld2R9WXW7n9cortt54zL7NPB/JfFoxbE8znEvG0VKoTwaNePE9RtWo1sVXGUug + HZGOeanLobotn56NFqpE059AgW09AVm/emqbKZi2zwMD/CswOCQHSkGHwdw7MDMllRJihL2tqxKrL3fx + euUVy7+/318vrPncAFp5hu4ogFOJBbyOjoBHubEYnuVGtJroUtknkfFVUAksgF7obur/g5RhyrRPw59A + FfBqxjeZ39BKpgHTqFjI+VbCYEcs2KYLsBBEkvlRWFPgSPf+x4/Vl4+o8HkVEzjC665aSnvVvVAO7YB+ + ZBycikfD/bAxNpWaEKa/4UbnriVmmJFkiwG+5ZDxqYaUN72wPKh9vCjL3nVE/Z+z5SQ+SNyMAGo/y5hg + rC2YiU1HxmJ2igNWF8yittVFWN00fJm+iF5yhdP4vIoJHKtzz69hW2ogH3gKBhFRcCw0h2uxEdxLh5Hp + 4XApNhbhWaYFq2gvyhg9rFsoqx5kyrP2b1AHSY86GG2PxrqC6fA/pkcvvRHU9zrwrdSnChtSFazhXDoW + LqXZrnxexQQOa0FrBBeAjM8JqAcI4ZBnhlVZ1jDdHorp8WuxMut9rM62grVgM/p50otpM2V6C2X+rami + HqcW2kSVcjqHKfEu8DymBafDZoSp6LipzBSby4yodcfBq9wUvhVzEvi8igkcmoH1QkkPmsijCYP9UuGY + PxyWO2lD5kKZdm2FZuBejNnu++u5O43bTIb+Dm71MPIXwj7OCTYxtAcqnICCyiHIOaojIveoJrYdHk6L + hym1Lte+YzgK+LyKCRwKXtX5zL2SJqrFQJ90rD5oDG3/RDJMGdtUCyWvHOgGCug/ZZ4b93dwq4KEWwUa + DlkCrUOAE9pAoz7QYEQY/kqjEX44pgHnQ8ZwKhpF7ToazkWmJXxexQQORc+qfLbxKBmk9nCpx/tRqzA+ + 0h6GwX5Q80mCQegeDPTOoWpQ9rkxf4eNVZB3L8aF4qF4fpTh8REOiddg6C2Xws1yFWwsNIZD4Ug4Fphh + faHZ2weg5VcjZC5HaLJyMlkBSddyTN7xT8yNmUj/KyC3uRjG24LR3y0PzLmGxlCw3Ni3wbUSA9yK0ZWn + iWeHGbpLpMXoLZHCteJ+cM4zhW3eKNjlUgD549++hax3NIYzR3qZcEFwOB9D/42FeD98PvR8aavsVA3Z + jfnQC4iCebgvJFzKfh/7VzhTAjYW4VyWFp4WMTwqlBGjp1AaVwvksD7bDGuyzbEmy4SqMTeez6uYwGGf + 3bma2RfTZBTEKzZUYZB7LCyCvqYA6EF0KoekUynk3dIg61rwx7H/DrpOzrUQnRla6CuQwMM8WTGe5Mng + pzw52GWZYkWmOZalj0DYMQ8XPq9iAkdU1aXxUo4lz5ljCRl/RSkkNxRDY7M/ZJ0yIEPn6p7JkLA/BmZL + Aa2nKvw29t/gWAY553x0CrXRlyOFh1n9xejNlsG5A1r4ImEmlqaZYLHQFDH1O9/+RVbxrzv99X0qOpnd + IZqQKvGK9aWQcsyFiusu2OV8hEj6Jlh5cB7GhflByTWLAqFnwbHoj9e8yfrDkHPKQ0eyDnozpfEgQ06M + noMyaEsajjmCeVi43wCr0qZeyW0rVebzKiZwtF1/yJbuPxnOVtND6kBBvI7dYShsyEcEbaPjmlWQ0KKE + xFZFBFQYY5gPLa2raGWypVZ587pX2JdAzjEHHft00JMmg/vCAWI8Ib0tUR8j/dzxWexQeBTaxpd2Huf1 + yiuevnqfpbdctZC1K+hjdrSrtKceF1FI5oqxYO8S+vh4D9vrNOlLSlv0NSU4roaASkPMil0Lbc89YDal + r133GnZFkFufhfZ4XTxJlsW9/fJicPqZWH1ou4Xh0z3GSGhInVrY3sjrlVc8ffUBO3+rm83d3XCQrcgm + 0xQEh00h+q3PxNajJohs0KSPl6G/EUIVCadgBCdURf+HelA1VtCLy4ayLrqezNtQC62jZ4CS0rZHD4/3 + 9sMviQpicPppgRH0tqyDTdbivOazeez6iUher7zilV8es5uPelll160xA2xyH7K19NKyyaXJqaXW5eNb + 4ecIr9eiTRf3hfYm3OemHlVpEcyDfKHklAK2thBShPGGaJg7R8HaNQznBNp4GC+Hu3GKYjyMl0eX4D0s + j7RCTdEym8d5Hxv0Nnr35/MqJnBwAfz4MogNaac82eJ0Mk6V4FhdgEEbkmiTZYqAan3RFxkf/lUG2Fan + SxsycyzNnoG47R/i/m5FPNgjj/t7FHA3WukvUKRxis8f7FHq487vCcdG83kVEzh+ftgn4vajPnbt3hOZ + j0IqS9niNLA1tNJwLCvCB1G2FIAOuA8ajyMm4tDHzhY6eh01hAcFeipNAc+j+uPOTjJH3Nmp/JfcJW5z + RPbDvVTLfXxexQSOvqfPRbx48ev5hZsPhxi6F7WxxQeoAvSltSqT+jsHViEbaJNlRpstU9GRD5ciUzgW + m2GC/0Yc9rdEX5QsbkUOJFNvx61wedwR6DY9ad2t/qZPDjGBw2jECGZsaMgc7B1YXV09e0FafOP1YZpO + BWfZd0KwlRkUAAXybTGsQ2yxoXAEbHNHimFHOBUaYGHyNLClhVBdlYKj/mPQF9EfN0MH4dZfcHObAu5E + GzV1Z88b8uzULl6v/OJrP2kJCTZ//gLmEBzLYiq6NKaENxxhy6mNllNLLcmBvrsPVmcaYlnaqD+wPN0M + K9JNsSjZEvpbaP+0lGu9bKit3I9yHwv0hsjh52BV3PwTbgUqoDdxTNPT4mUal/fNZNcqgvi98olSZPwV + ElwUL3+Ghkbs0+9sZcbbCbwVbPIecwEMtIvE14lm+DphJL5KGEVHMyzcZ4gv4kZD09kfUstpFVpCFVtG + leNYmomBK5JQ5jUWPYHyuBGghp9f44a/Gn4JVME9gUVDitsM9blWukxVXoYNUpTj9corvh7Aa3CxSBKs + n6QkM/tggcXw1XF5CjaZfZPCP8Gs3UaYtdME0yPHYULQbKjbB1CLUdaX0HOzNPWPLM6C6kohyrdOefHY + Xxk3tqr/xqMAVXRsNWmwNtbS4OZ6/cfnlVd8aViKkCOUiEGEOjGE0KIodGiIupK83BBN848/1/tyjXDy + 1ik/jvRe/GLAujgyScvtEnpvLKfnRARXgQxIrMiE7KqDUFmaeE15rrfQ1PqjxU0u+nU9AYPxwHcwuGPr + ZpMmYx11A7p/P5pLkeCOkgSvV16RBksQ8oQOYUpYEFbE+8Rk4gNiGpXkQ7rvRGkJaWtFpUFz1AzHOahY + Lto1eLZrnvwstxqZGW5NxHH6X6s+x7VAbeJCgaqR9QZlFbVP+0lKWNO1lkMGKX8cNF8voXCpRnPI53rx + WmrKk0kfSfcfTRgSGoQsweuVV+QGE/0JLut6hBFhRpgTY4nxhCUxgeCCmkjBTCDG0X8LaRpDcGNEcP9f + ahbcGKqgNXcN8T6dj6fpzAhTwpDOuYRxjCC4BA4kZAher7wiN5jgqiBNcNFzZeTaiasKV1ZlQoXgbq5K + qBFcsByDX8Jl7nVe6a/Gcddwrcndg7sX16oKBDcHNxc3J2ecax/OC69XXpEb/DfhJvhP4LvXn8LnlVd8 + l+AV3x3A/g9kt3I5oWO4VQAAAABJRU5ErkJggg== - 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 - 7PDNqBYAAAAASUVORK5CYII= + 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 diff --git a/Ember Media Manager/dlgEditEpisode.vb b/Ember Media Manager/dlgEditEpisode.vb index ac6ec74..a2fcbd8 100644 --- a/Ember Media Manager/dlgEditEpisode.vb +++ b/Ember Media Manager/dlgEditEpisode.vb @@ -93,13 +93,15 @@ Public Class dlgEditEpisode End Sub Private Sub btnRemoveFanart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveFanart.Click - Me.pbFanart.Image = Nothing - Me.Fanart.Image = Nothing + Me.pbFanart.Image = Nothing + Me.pbFanart.Tag = Nothing + Me.Fanart = Nothing End Sub Private Sub btnRemovePoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemovePoster.Click - Me.pbPoster.Image = Nothing - Me.Poster.Image = Nothing + Me.pbPoster.Image = Nothing + Me.pbPoster.Tag = Nothing + Me.Poster = Nothing End Sub Private Sub btnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemove.Click @@ -107,11 +109,12 @@ Public Class dlgEditEpisode End Sub Private Sub btnSetFanartScrape_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetFanartScrape.Click - Dim tImage As Image = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.EpisodeFanart, 0, 0, Master.currShow.ShowLanguage, Master.currShow.Ordering, Me.pbFanart.Image) + Dim tImage As Images = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.EpisodeFanart, 0, 0, Master.currShow.ShowLanguage, Master.currShow.Ordering, CType(Fanart, Images)) If Not IsNothing(tImage) Then - Me.Fanart.Image = New Bitmap(tImage) - Me.pbFanart.Image = tImage + Me.Fanart = tImage + Me.pbFanart.Image = tImage.Image + Me.pbFanart.Tag = tImage Me.lblFanartSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbFanart.Image.Width, Me.pbFanart.Image.Height) Me.lblFanartSize.Visible = True @@ -119,11 +122,12 @@ Public Class dlgEditEpisode End Sub Private Sub btnSetPosterScrape_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetPosterScrape.Click - Dim tImage As Image = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.EpisodePoster, Master.currShow.TVEp.Season, Master.currShow.TVEp.Episode, Master.currShow.ShowLanguage, Master.currShow.Ordering, Me.pbFanart.Image) + Dim tImage As Images = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.EpisodePoster, Master.currShow.TVEp.Season, Master.currShow.TVEp.Episode, Master.currShow.ShowLanguage, Master.currShow.Ordering, CType(Poster, Images)) If Not IsNothing(tImage) Then - Me.Poster.Image = New Bitmap(tImage) - Me.pbPoster.Image = tImage + Me.Poster = tImage + Me.pbPoster.Image = tImage.Image + Me.pbFanart.Tag = tImage Me.lblPosterSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbPoster.Image.Width, Me.pbPoster.Image.Height) Me.lblPosterSize.Visible = True @@ -291,6 +295,13 @@ Public Class dlgEditEpisode If Not String.IsNullOrEmpty(Master.currShow.TVEp.Season.ToString) Then .txtSeason.Text = Master.currShow.TVEp.Season.ToString If Not String.IsNullOrEmpty(Master.currShow.TVEp.Episode.ToString) Then .txtEpisode.Text = Master.currShow.TVEp.Episode.ToString + If Master.currShow.TVEp.Playcount = "" Or Master.currShow.TVEp.Playcount = "0" Then + Me.chkWatched.Checked = False + Else + 'Playcount <> Empty and not 0 -> Tag filled -> Checked! + Me.chkWatched.Checked = True + End If + Dim lvItem As ListViewItem .lvActors.Items.Clear() For Each imdbAct As MediaContainers.Person In Master.currShow.TVEp.Actors @@ -527,6 +538,18 @@ Public Class dlgEditEpisode Master.currShow.TVEp.Actors.Clear() + If chkWatched.Checked Then + 'Only set to 1 if field was empty before (otherwise it would overwrite Playcount everytime which is not desirable) + If String.IsNullOrEmpty(Master.currShow.TVEp.Playcount) Or Master.currShow.TVEp.Playcount = "0" Then + Master.currShow.TVEp.Playcount = "1" + End If + Else + 'Unchecked Watched State -> Set Playcount back to 0, but only if it was filled before (check could save time) + If IsNumeric(Master.currShow.TVEp.Playcount) AndAlso CInt(Master.currShow.TVEp.Playcount) > 0 Then + Master.currShow.TVEp.Playcount = "" + End If + End If + If .lvActors.Items.Count > 0 Then For Each lviActor As ListViewItem In .lvActors.Items Dim addActor As New MediaContainers.Person @@ -591,8 +614,8 @@ Public Class dlgEditEpisode Me.lblDirector.Text = Master.eLang.GetString(239, "Director:") Me.lblCredits.Text = Master.eLang.GetString(228, "Credits:") Me.TabPage4.Text = Master.eLang.GetString(256, "Frame Extraction") - Me.TabPage5.Text = Master.eLang.GetString(59, "Meta Data") + Me.chkWatched.Text = Master.eLang.GetString(883, "Watched") End Sub Private Sub txtEpisode_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtEpisode.KeyPress @@ -605,8 +628,8 @@ Public Class dlgEditEpisode Sub GenericRunCallBack(ByVal mType As Enums.ModuleEventType, ByRef _params As List(Of Object)) If mType = Enums.ModuleEventType.TVFrameExtrator Then - Me.Poster.Image = DirectCast(_params(0), Bitmap) 'New Bitmap(pbFrame.Image) - Me.pbPoster.Image = DirectCast(_params(1), Image) 'pbFrame.Image + 'Me.Poster.Image = DirectCast(_params(0), Bitmap) 'New Bitmap(pbFrame.Image) + ' Me.pbPoster.Image = DirectCast(_params(1), Image) 'pbFrame.Image End If End Sub @@ -634,14 +657,15 @@ Public Class dlgEditEpisode Private Sub btnSetPosterDL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetPosterDL.Click Try Using dImgManual As New dlgImgManual - If dImgManual.ShowDialog(Enums.ImageType.Posters) = DialogResult.OK Then - Poster.FromFile(Path.Combine(Master.TempPath, "poster.jpg")) - pbPoster.Image = Poster.Image - - Me.lblPosterSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbPoster.Image.Width, Me.pbPoster.Image.Height) - Me.lblPosterSize.Visible = True - End If - End Using + Dim tImage As Images = dImgManual.ShowDialog(Enums.ImageType.Posters) + If Not IsNothing(tImage) Then + Poster = tImage + pbPoster.Image = Poster.Image + + Me.lblPosterSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbPoster.Image.Width, Me.pbPoster.Image.Height) + Me.lblPosterSize.Visible = True + End If + End Using Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") End Try @@ -669,15 +693,16 @@ Public Class dlgEditEpisode Private Sub btnSetFanartDL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetFanartDL.Click Try - Using dImgManual As New dlgImgManual - If dImgManual.ShowDialog(Enums.ImageType.Fanart) = DialogResult.OK Then - Fanart.FromFile(Path.Combine(Master.TempPath, "fanart.jpg")) - pbFanart.Image = Fanart.Image - - Me.lblFanartSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbFanart.Image.Width, Me.pbFanart.Image.Height) - Me.lblFanartSize.Visible = True - End If - End Using + Using dImgManual As New dlgImgManual + Dim tImage As Images = dImgManual.ShowDialog(Enums.ImageType.Fanart) + If Not IsNothing(tImage) Then + Fanart = tImage + pbFanart.Image = Fanart.Image + + Me.lblFanartSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbFanart.Image.Width, Me.pbFanart.Image.Height) + Me.lblFanartSize.Visible = True + End If + End Using Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") End Try diff --git a/Ember Media Manager/dlgEditMovie.Designer.vb b/Ember Media Manager/dlgEditMovie.Designer.vb index d5a5d47..49979dd 100644 --- a/Ember Media Manager/dlgEditMovie.Designer.vb +++ b/Ember Media Manager/dlgEditMovie.Designer.vb @@ -22,1349 +22,1362 @@ Partial Class dlgEditMovie 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Me.components = New System.ComponentModel.Container() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgEditMovie)) - Me.OK_Button = New System.Windows.Forms.Button() - Me.Cancel_Button = New System.Windows.Forms.Button() - Me.pnlTop = New System.Windows.Forms.Panel() - Me.Label2 = New System.Windows.Forms.Label() - Me.Label1 = New System.Windows.Forms.Label() - Me.PictureBox1 = New System.Windows.Forms.PictureBox() - Me.TabControl1 = New System.Windows.Forms.TabControl() - Me.TabPage1 = New System.Windows.Forms.TabPage() - Me.txtOriginalTitle = New System.Windows.Forms.TextBox() - Me.lblOriginalTitle = New System.Windows.Forms.Label() - Me.txtCountry = New System.Windows.Forms.TextBox() - Me.lblCountry = New System.Windows.Forms.Label() - Me.txtFileSource = New System.Windows.Forms.TextBox() - Me.lblFileSource = New System.Windows.Forms.Label() - Me.btnActorDown = New System.Windows.Forms.Button() - Me.btnActorUp = New System.Windows.Forms.Button() - Me.Label6 = New System.Windows.Forms.Label() - Me.txtSortTitle = New System.Windows.Forms.TextBox() - Me.lblLocalTrailer = New System.Windows.Forms.Label() - Me.btnPlayTrailer = New System.Windows.Forms.Button() - Me.btnDLTrailer = New System.Windows.Forms.Button() - Me.lbGenre = New System.Windows.Forms.CheckedListBox() - Me.btnStudio = New System.Windows.Forms.Button() - Me.lblStudio = New System.Windows.Forms.Label() - Me.txtStudio = New System.Windows.Forms.TextBox() - Me.lblTrailer = New System.Windows.Forms.Label() - Me.txtTrailer = New System.Windows.Forms.TextBox() - Me.txtReleaseDate = New System.Windows.Forms.TextBox() - Me.lblReleaseDate = New System.Windows.Forms.Label() - Me.lblCredits = New System.Windows.Forms.Label() - Me.txtCredits = New System.Windows.Forms.TextBox() - Me.lblCerts = New System.Windows.Forms.Label() - Me.txtCerts = New System.Windows.Forms.TextBox() - Me.lblRuntime = New System.Windows.Forms.Label() - Me.txtRuntime = New System.Windows.Forms.TextBox() - Me.lblMPAADesc = New System.Windows.Forms.Label() - Me.txtMPAADesc = New System.Windows.Forms.TextBox() - Me.btnEditActor = New System.Windows.Forms.Button() - Me.btnAddActor = New System.Windows.Forms.Button() - Me.btnManual = New System.Windows.Forms.Button() - Me.btnRemove = New System.Windows.Forms.Button() - Me.lblActors = New System.Windows.Forms.Label() - Me.lvActors = New System.Windows.Forms.ListView() - Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colRole = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colThumb = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.lbMPAA = New System.Windows.Forms.ListBox() - Me.lblGenre = New System.Windows.Forms.Label() - Me.lblMPAA = New System.Windows.Forms.Label() - Me.lblDirector = New System.Windows.Forms.Label() - Me.txtDirector = New System.Windows.Forms.TextBox() - Me.txtTop250 = New System.Windows.Forms.TextBox() - Me.lblTop250 = New System.Windows.Forms.Label() - Me.lblPlot = New System.Windows.Forms.Label() - Me.txtPlot = New System.Windows.Forms.TextBox() - Me.lblOutline = New System.Windows.Forms.Label() - Me.txtOutline = New System.Windows.Forms.TextBox() - Me.lblTagline = New System.Windows.Forms.Label() - Me.txtTagline = New System.Windows.Forms.TextBox() - Me.pbStar5 = New System.Windows.Forms.PictureBox() - Me.pbStar4 = New System.Windows.Forms.PictureBox() - Me.pbStar3 = New System.Windows.Forms.PictureBox() - Me.pbStar2 = New System.Windows.Forms.PictureBox() - Me.pbStar1 = New System.Windows.Forms.PictureBox() - Me.txtVotes = New System.Windows.Forms.TextBox() - Me.lblVotes = New System.Windows.Forms.Label() - Me.lblRating = New System.Windows.Forms.Label() - Me.mtxtYear = New System.Windows.Forms.MaskedTextBox() - Me.lblYear = New System.Windows.Forms.Label() - Me.lblTitle = New System.Windows.Forms.Label() - Me.txtTitle = New System.Windows.Forms.TextBox() - Me.TabPage2 = New System.Windows.Forms.TabPage() - Me.btnSetPosterDL = New System.Windows.Forms.Button() - Me.btnRemovePoster = New System.Windows.Forms.Button() - Me.lblPosterSize = New System.Windows.Forms.Label() - Me.btnSetPosterScrape = New System.Windows.Forms.Button() - Me.btnSetPoster = New System.Windows.Forms.Button() - Me.pbPoster = New System.Windows.Forms.PictureBox() - Me.TabPage3 = New System.Windows.Forms.TabPage() - Me.btnSetFanartDL = New System.Windows.Forms.Button() - Me.btnRemoveFanart = New System.Windows.Forms.Button() - Me.lblFanartSize = New System.Windows.Forms.Label() - Me.btnSetFanartScrape = New System.Windows.Forms.Button() - Me.btnSetFanart = New System.Windows.Forms.Button() - Me.pbFanart = New System.Windows.Forms.PictureBox() - Me.TabPage5 = New System.Windows.Forms.TabPage() - Me.pnlETQueue = New System.Windows.Forms.Panel() - Me.Label4 = New System.Windows.Forms.Label() - Me.btnTransferNow = New System.Windows.Forms.Button() - Me.Panel1 = New System.Windows.Forms.Panel() - Me.btnSetAsFanart = New System.Windows.Forms.Button() - Me.btnThumbsRefresh = New System.Windows.Forms.Button() - Me.btnRemoveThumb = New System.Windows.Forms.Button() - Me.btnDown = New System.Windows.Forms.Button() - Me.btnUp = New System.Windows.Forms.Button() - Me.lvThumbs = New System.Windows.Forms.ListView() - Me.ilThumbs = New System.Windows.Forms.ImageList(Me.components) - Me.pbExtraThumbs = New System.Windows.Forms.PictureBox() - Me.TabPage4 = New System.Windows.Forms.TabPage() - Me.pnlFrameExtrator = New System.Windows.Forms.Panel() - Me.TabPage6 = New System.Windows.Forms.TabPage() - Me.pnlFileInfo = New System.Windows.Forms.Panel() - Me.ofdImage = New System.Windows.Forms.OpenFileDialog() - Me.chkMark = New System.Windows.Forms.CheckBox() - Me.btnRescrape = New System.Windows.Forms.Button() - Me.btnChangeMovie = New System.Windows.Forms.Button() - Me.btnClearCache = New System.Windows.Forms.Button() - Me.DelayTimer = New System.Windows.Forms.Timer(Me.components) - Me.pnlTop.SuspendLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TabControl1.SuspendLayout() - Me.TabPage1.SuspendLayout() - CType(Me.pbStar5, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStar4, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStar3, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TabPage2.SuspendLayout() - CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TabPage3.SuspendLayout() - CType(Me.pbFanart, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TabPage5.SuspendLayout() - Me.pnlETQueue.SuspendLayout() - Me.Panel1.SuspendLayout() - CType(Me.pbExtraThumbs, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TabPage4.SuspendLayout() - Me.TabPage6.SuspendLayout() - Me.SuspendLayout() - ' - 'OK_Button - ' - Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.OK_Button.Location = New System.Drawing.Point(708, 553) - Me.OK_Button.Name = "OK_Button" - Me.OK_Button.Size = New System.Drawing.Size(67, 23) - Me.OK_Button.TabIndex = 0 - Me.OK_Button.Text = "OK" - ' - 'Cancel_Button - ' - Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Cancel_Button.Location = New System.Drawing.Point(781, 553) - Me.Cancel_Button.Name = "Cancel_Button" - Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) - Me.Cancel_Button.TabIndex = 1 - Me.Cancel_Button.Text = "Cancel" - ' - 'pnlTop - ' - Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue - Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlTop.Controls.Add(Me.Label2) - Me.pnlTop.Controls.Add(Me.Label1) - Me.pnlTop.Controls.Add(Me.PictureBox1) - Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top - Me.pnlTop.Location = New System.Drawing.Point(0, 0) - Me.pnlTop.Name = "pnlTop" - Me.pnlTop.Size = New System.Drawing.Size(854, 64) - Me.pnlTop.TabIndex = 2 - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.BackColor = System.Drawing.Color.Transparent - Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label2.ForeColor = System.Drawing.Color.White - Me.Label2.Location = New System.Drawing.Point(61, 38) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(205, 13) - Me.Label2.TabIndex = 1 - Me.Label2.Text = "Edit the details for the selected movie." - ' - 'Label1 - ' - Me.Label1.AutoSize = True - Me.Label1.BackColor = System.Drawing.Color.Transparent - Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label1.ForeColor = System.Drawing.Color.White - Me.Label1.Location = New System.Drawing.Point(58, 3) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(137, 32) - Me.Label1.TabIndex = 0 - Me.Label1.Text = "Edit Movie" - ' - 'PictureBox1 - ' - Me.PictureBox1.BackColor = System.Drawing.Color.Transparent - Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) - Me.PictureBox1.Location = New System.Drawing.Point(7, 8) - Me.PictureBox1.Name = "PictureBox1" - Me.PictureBox1.Size = New System.Drawing.Size(48, 48) - Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox1.TabIndex = 0 - Me.PictureBox1.TabStop = False - ' - 'TabControl1 - ' - Me.TabControl1.Controls.Add(Me.TabPage1) - Me.TabControl1.Controls.Add(Me.TabPage2) - Me.TabControl1.Controls.Add(Me.TabPage3) - Me.TabControl1.Controls.Add(Me.TabPage5) - Me.TabControl1.Controls.Add(Me.TabPage4) - Me.TabControl1.Controls.Add(Me.TabPage6) - Me.TabControl1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.TabControl1.Location = New System.Drawing.Point(4, 70) - Me.TabControl1.Name = "TabControl1" - Me.TabControl1.SelectedIndex = 0 - Me.TabControl1.Size = New System.Drawing.Size(844, 478) - Me.TabControl1.TabIndex = 3 - ' - 'TabPage1 - ' - Me.TabPage1.Controls.Add(Me.txtOriginalTitle) - Me.TabPage1.Controls.Add(Me.lblOriginalTitle) - Me.TabPage1.Controls.Add(Me.txtCountry) - Me.TabPage1.Controls.Add(Me.lblCountry) - Me.TabPage1.Controls.Add(Me.txtFileSource) - Me.TabPage1.Controls.Add(Me.lblFileSource) - Me.TabPage1.Controls.Add(Me.btnActorDown) - Me.TabPage1.Controls.Add(Me.btnActorUp) - Me.TabPage1.Controls.Add(Me.Label6) - Me.TabPage1.Controls.Add(Me.txtSortTitle) - Me.TabPage1.Controls.Add(Me.lblLocalTrailer) - Me.TabPage1.Controls.Add(Me.btnPlayTrailer) - Me.TabPage1.Controls.Add(Me.btnDLTrailer) - Me.TabPage1.Controls.Add(Me.lbGenre) - Me.TabPage1.Controls.Add(Me.btnStudio) - Me.TabPage1.Controls.Add(Me.lblStudio) - Me.TabPage1.Controls.Add(Me.txtStudio) - Me.TabPage1.Controls.Add(Me.lblTrailer) - Me.TabPage1.Controls.Add(Me.txtTrailer) - Me.TabPage1.Controls.Add(Me.txtReleaseDate) - Me.TabPage1.Controls.Add(Me.lblReleaseDate) - Me.TabPage1.Controls.Add(Me.lblCredits) - Me.TabPage1.Controls.Add(Me.txtCredits) - Me.TabPage1.Controls.Add(Me.lblCerts) - Me.TabPage1.Controls.Add(Me.txtCerts) - Me.TabPage1.Controls.Add(Me.lblRuntime) - Me.TabPage1.Controls.Add(Me.txtRuntime) - Me.TabPage1.Controls.Add(Me.lblMPAADesc) - Me.TabPage1.Controls.Add(Me.txtMPAADesc) - Me.TabPage1.Controls.Add(Me.btnEditActor) - Me.TabPage1.Controls.Add(Me.btnAddActor) - Me.TabPage1.Controls.Add(Me.btnManual) - Me.TabPage1.Controls.Add(Me.btnRemove) - Me.TabPage1.Controls.Add(Me.lblActors) - Me.TabPage1.Controls.Add(Me.lvActors) - Me.TabPage1.Controls.Add(Me.lbMPAA) - Me.TabPage1.Controls.Add(Me.lblGenre) - Me.TabPage1.Controls.Add(Me.lblMPAA) - Me.TabPage1.Controls.Add(Me.lblDirector) - Me.TabPage1.Controls.Add(Me.txtDirector) - Me.TabPage1.Controls.Add(Me.txtTop250) - Me.TabPage1.Controls.Add(Me.lblTop250) - Me.TabPage1.Controls.Add(Me.lblPlot) - Me.TabPage1.Controls.Add(Me.txtPlot) - Me.TabPage1.Controls.Add(Me.lblOutline) - Me.TabPage1.Controls.Add(Me.txtOutline) - Me.TabPage1.Controls.Add(Me.lblTagline) - Me.TabPage1.Controls.Add(Me.txtTagline) - Me.TabPage1.Controls.Add(Me.pbStar5) - Me.TabPage1.Controls.Add(Me.pbStar4) - Me.TabPage1.Controls.Add(Me.pbStar3) - Me.TabPage1.Controls.Add(Me.pbStar2) - Me.TabPage1.Controls.Add(Me.pbStar1) - Me.TabPage1.Controls.Add(Me.txtVotes) - Me.TabPage1.Controls.Add(Me.lblVotes) - Me.TabPage1.Controls.Add(Me.lblRating) - Me.TabPage1.Controls.Add(Me.mtxtYear) - Me.TabPage1.Controls.Add(Me.lblYear) - Me.TabPage1.Controls.Add(Me.lblTitle) - Me.TabPage1.Controls.Add(Me.txtTitle) - Me.TabPage1.Location = New System.Drawing.Point(4, 22) - Me.TabPage1.Name = "TabPage1" - Me.TabPage1.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage1.Size = New System.Drawing.Size(836, 452) - Me.TabPage1.TabIndex = 0 - Me.TabPage1.Text = "Details" - Me.TabPage1.UseVisualStyleBackColor = True - ' - 'txtOriginalTitle - ' - Me.txtOriginalTitle.BackColor = System.Drawing.SystemColors.Window - Me.txtOriginalTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtOriginalTitle.Location = New System.Drawing.Point(7, 63) - Me.txtOriginalTitle.Name = "txtOriginalTitle" - Me.txtOriginalTitle.Size = New System.Drawing.Size(192, 22) - Me.txtOriginalTitle.TabIndex = 3 - ' - 'lblOriginalTitle - ' - Me.lblOriginalTitle.AutoSize = True - Me.lblOriginalTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblOriginalTitle.Location = New System.Drawing.Point(5, 47) - Me.lblOriginalTitle.Name = "lblOriginalTitle" - Me.lblOriginalTitle.Size = New System.Drawing.Size(76, 13) - Me.lblOriginalTitle.TabIndex = 2 - Me.lblOriginalTitle.Text = "Original Title:" - ' - 'txtCountry - ' - Me.txtCountry.BackColor = System.Drawing.SystemColors.Window - Me.txtCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtCountry.Location = New System.Drawing.Point(8, 224) - Me.txtCountry.Name = "txtCountry" - Me.txtCountry.Size = New System.Drawing.Size(89, 22) - Me.txtCountry.TabIndex = 12 - ' - 'lblCountry - ' - Me.lblCountry.AutoSize = True - Me.lblCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblCountry.Location = New System.Drawing.Point(5, 209) - Me.lblCountry.Name = "lblCountry" - Me.lblCountry.Size = New System.Drawing.Size(52, 13) - Me.lblCountry.TabIndex = 11 - Me.lblCountry.Text = "Country:" - ' - 'txtFileSource - ' - Me.txtFileSource.BackColor = System.Drawing.SystemColors.Window - Me.txtFileSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtFileSource.Location = New System.Drawing.Point(636, 385) - Me.txtFileSource.Name = "txtFileSource" - Me.txtFileSource.Size = New System.Drawing.Size(167, 22) - Me.txtFileSource.TabIndex = 48 - ' - 'lblFileSource - ' - Me.lblFileSource.AutoSize = True - Me.lblFileSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblFileSource.Location = New System.Drawing.Point(633, 370) - Me.lblFileSource.Name = "lblFileSource" - Me.lblFileSource.Size = New System.Drawing.Size(78, 13) - Me.lblFileSource.TabIndex = 47 - Me.lblFileSource.Text = "Video Source:" - ' - 'btnActorDown - ' - Me.btnActorDown.Image = CType(resources.GetObject("btnActorDown.Image"), System.Drawing.Image) - Me.btnActorDown.Location = New System.Drawing.Point(430, 304) - Me.btnActorDown.Name = "btnActorDown" - Me.btnActorDown.Size = New System.Drawing.Size(23, 23) - Me.btnActorDown.TabIndex = 34 - Me.btnActorDown.UseVisualStyleBackColor = True - ' - 'btnActorUp - ' - Me.btnActorUp.Image = CType(resources.GetObject("btnActorUp.Image"), System.Drawing.Image) - Me.btnActorUp.Location = New System.Drawing.Point(406, 304) - Me.btnActorUp.Name = "btnActorUp" - Me.btnActorUp.Size = New System.Drawing.Size(23, 23) - Me.btnActorUp.TabIndex = 33 - Me.btnActorUp.UseVisualStyleBackColor = True - ' - 'Label6 - ' - Me.Label6.AutoSize = True - Me.Label6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label6.Location = New System.Drawing.Point(5, 87) - Me.Label6.Name = "Label6" - Me.Label6.Size = New System.Drawing.Size(56, 13) - Me.Label6.TabIndex = 4 - Me.Label6.Text = "Sort Title:" - ' - 'txtSortTitle - ' - Me.txtSortTitle.BackColor = System.Drawing.SystemColors.Window - Me.txtSortTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtSortTitle.Location = New System.Drawing.Point(7, 102) - Me.txtSortTitle.Name = "txtSortTitle" - Me.txtSortTitle.Size = New System.Drawing.Size(192, 22) - Me.txtSortTitle.TabIndex = 5 - ' - 'lblLocalTrailer - ' - Me.lblLocalTrailer.AutoSize = True - Me.lblLocalTrailer.Font = New System.Drawing.Font("Microsoft Sans Serif", 6.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblLocalTrailer.ForeColor = System.Drawing.Color.Green - Me.lblLocalTrailer.Location = New System.Drawing.Point(487, 414) - Me.lblLocalTrailer.Name = "lblLocalTrailer" - Me.lblLocalTrailer.Size = New System.Drawing.Size(90, 9) - Me.lblLocalTrailer.TabIndex = 51 - Me.lblLocalTrailer.Text = "Local Trailer Found" - Me.lblLocalTrailer.Visible = False - ' - 'btnPlayTrailer - ' - Me.btnPlayTrailer.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnPlayTrailer.Image = Global.Ember_Media_Manager.My.Resources.Resources.Play_Icon - Me.btnPlayTrailer.Location = New System.Drawing.Point(579, 423) - Me.btnPlayTrailer.Name = "btnPlayTrailer" - Me.btnPlayTrailer.Size = New System.Drawing.Size(23, 23) - Me.btnPlayTrailer.TabIndex = 52 - Me.btnPlayTrailer.UseVisualStyleBackColor = True - ' - 'btnDLTrailer - ' - Me.btnDLTrailer.Image = CType(resources.GetObject("btnDLTrailer.Image"), System.Drawing.Image) - Me.btnDLTrailer.Location = New System.Drawing.Point(602, 423) - Me.btnDLTrailer.Name = "btnDLTrailer" - Me.btnDLTrailer.Size = New System.Drawing.Size(23, 23) - Me.btnDLTrailer.TabIndex = 53 - Me.btnDLTrailer.UseVisualStyleBackColor = True - ' - 'lbGenre - ' - Me.lbGenre.BackColor = System.Drawing.SystemColors.Window - Me.lbGenre.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lbGenre.CheckOnClick = True - Me.lbGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lbGenre.FormattingEnabled = True - Me.lbGenre.IntegralHeight = False - Me.lbGenre.Location = New System.Drawing.Point(8, 345) - Me.lbGenre.Name = "lbGenre" - Me.lbGenre.Size = New System.Drawing.Size(192, 100) - Me.lbGenre.Sorted = True - Me.lbGenre.TabIndex = 24 - ' - 'btnStudio - ' - Me.btnStudio.Image = CType(resources.GetObject("btnStudio.Image"), System.Drawing.Image) - Me.btnStudio.Location = New System.Drawing.Point(805, 343) - Me.btnStudio.Name = "btnStudio" - Me.btnStudio.Size = New System.Drawing.Size(23, 23) - Me.btnStudio.TabIndex = 44 - Me.btnStudio.UseVisualStyleBackColor = True - ' - 'lblStudio - ' - Me.lblStudio.AutoSize = True - Me.lblStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblStudio.Location = New System.Drawing.Point(633, 330) - Me.lblStudio.Name = "lblStudio" - Me.lblStudio.Size = New System.Drawing.Size(44, 13) - Me.lblStudio.TabIndex = 42 - Me.lblStudio.Text = "Studio:" - ' - 'txtStudio - ' - Me.txtStudio.BackColor = System.Drawing.SystemColors.Window - Me.txtStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtStudio.Location = New System.Drawing.Point(635, 345) - Me.txtStudio.Name = "txtStudio" - Me.txtStudio.Size = New System.Drawing.Size(167, 22) - Me.txtStudio.TabIndex = 43 - ' - 'lblTrailer - ' - Me.lblTrailer.AutoSize = True - Me.lblTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblTrailer.Location = New System.Drawing.Point(215, 410) - Me.lblTrailer.Name = "lblTrailer" - Me.lblTrailer.Size = New System.Drawing.Size(66, 13) - Me.lblTrailer.TabIndex = 49 - Me.lblTrailer.Text = "Trailer URL:" - ' - 'txtTrailer - ' - Me.txtTrailer.BackColor = System.Drawing.SystemColors.Window - Me.txtTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtTrailer.Location = New System.Drawing.Point(217, 425) - Me.txtTrailer.Name = "txtTrailer" - Me.txtTrailer.Size = New System.Drawing.Size(360, 22) - Me.txtTrailer.TabIndex = 50 - ' - 'txtReleaseDate - ' - Me.txtReleaseDate.BackColor = System.Drawing.SystemColors.Window - Me.txtReleaseDate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtReleaseDate.Location = New System.Drawing.Point(103, 224) - Me.txtReleaseDate.Name = "txtReleaseDate" - Me.txtReleaseDate.Size = New System.Drawing.Size(96, 22) - Me.txtReleaseDate.TabIndex = 14 - ' - 'lblReleaseDate - ' - Me.lblReleaseDate.AutoSize = True - Me.lblReleaseDate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblReleaseDate.Location = New System.Drawing.Point(100, 209) - Me.lblReleaseDate.Name = "lblReleaseDate" - Me.lblReleaseDate.Size = New System.Drawing.Size(76, 13) - Me.lblReleaseDate.TabIndex = 13 - Me.lblReleaseDate.Text = "Release Date:" - ' - 'lblCredits - ' - Me.lblCredits.AutoSize = True - Me.lblCredits.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblCredits.Location = New System.Drawing.Point(215, 330) - Me.lblCredits.Name = "lblCredits" - Me.lblCredits.Size = New System.Drawing.Size(46, 13) - Me.lblCredits.TabIndex = 40 - Me.lblCredits.Text = "Credits:" - ' - 'txtCredits - ' - Me.txtCredits.BackColor = System.Drawing.SystemColors.Window - Me.txtCredits.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtCredits.Location = New System.Drawing.Point(217, 345) - Me.txtCredits.Name = "txtCredits" - Me.txtCredits.Size = New System.Drawing.Size(408, 22) - Me.txtCredits.TabIndex = 41 - ' - 'lblCerts - ' - Me.lblCerts.AutoSize = True - Me.lblCerts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblCerts.Location = New System.Drawing.Point(215, 370) - Me.lblCerts.Name = "lblCerts" - Me.lblCerts.Size = New System.Drawing.Size(86, 13) - Me.lblCerts.TabIndex = 45 - Me.lblCerts.Text = "Certification(s):" - ' - 'txtCerts - ' - Me.txtCerts.BackColor = System.Drawing.SystemColors.Window - Me.txtCerts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtCerts.Location = New System.Drawing.Point(217, 385) - Me.txtCerts.Name = "txtCerts" - Me.txtCerts.Size = New System.Drawing.Size(408, 22) - Me.txtCerts.TabIndex = 46 - ' - 'lblRuntime - ' - Me.lblRuntime.AutoSize = True - Me.lblRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblRuntime.Location = New System.Drawing.Point(5, 249) - Me.lblRuntime.Name = "lblRuntime" - Me.lblRuntime.Size = New System.Drawing.Size(54, 13) - Me.lblRuntime.TabIndex = 15 - Me.lblRuntime.Text = "Runtime:" - ' - 'txtRuntime - ' - Me.txtRuntime.BackColor = System.Drawing.SystemColors.Window - Me.txtRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtRuntime.Location = New System.Drawing.Point(7, 264) - Me.txtRuntime.Name = "txtRuntime" - Me.txtRuntime.Size = New System.Drawing.Size(66, 22) - Me.txtRuntime.TabIndex = 16 - ' - 'lblMPAADesc - ' - Me.lblMPAADesc.AutoSize = True - Me.lblMPAADesc.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblMPAADesc.Location = New System.Drawing.Point(633, 245) - Me.lblMPAADesc.Name = "lblMPAADesc" - Me.lblMPAADesc.Size = New System.Drawing.Size(143, 13) - Me.lblMPAADesc.TabIndex = 38 - Me.lblMPAADesc.Text = "MPAA Rating Description:" - ' - 'txtMPAADesc - ' - Me.txtMPAADesc.BackColor = System.Drawing.SystemColors.Window - Me.txtMPAADesc.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtMPAADesc.Location = New System.Drawing.Point(635, 260) - Me.txtMPAADesc.Multiline = True - Me.txtMPAADesc.Name = "txtMPAADesc" - Me.txtMPAADesc.Size = New System.Drawing.Size(193, 64) - Me.txtMPAADesc.TabIndex = 39 - ' - 'btnEditActor - ' - Me.btnEditActor.Image = CType(resources.GetObject("btnEditActor.Image"), System.Drawing.Image) - Me.btnEditActor.Location = New System.Drawing.Point(246, 303) - Me.btnEditActor.Name = "btnEditActor" - Me.btnEditActor.Size = New System.Drawing.Size(23, 23) - Me.btnEditActor.TabIndex = 32 - Me.btnEditActor.UseVisualStyleBackColor = True - ' - 'btnAddActor - ' - Me.btnAddActor.Image = CType(resources.GetObject("btnAddActor.Image"), System.Drawing.Image) - Me.btnAddActor.Location = New System.Drawing.Point(217, 303) - Me.btnAddActor.Name = "btnAddActor" - Me.btnAddActor.Size = New System.Drawing.Size(23, 23) - Me.btnAddActor.TabIndex = 31 - Me.btnAddActor.UseVisualStyleBackColor = True - ' - 'btnManual - ' - Me.btnManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnManual.Location = New System.Drawing.Point(738, 423) - Me.btnManual.Name = "btnManual" - Me.btnManual.Size = New System.Drawing.Size(92, 23) - Me.btnManual.TabIndex = 54 - Me.btnManual.Text = "Manual Edit" - Me.btnManual.UseVisualStyleBackColor = True - ' - 'btnRemove - ' - Me.btnRemove.Image = CType(resources.GetObject("btnRemove.Image"), System.Drawing.Image) - Me.btnRemove.Location = New System.Drawing.Point(602, 303) - Me.btnRemove.Name = "btnRemove" - Me.btnRemove.Size = New System.Drawing.Size(23, 23) - Me.btnRemove.TabIndex = 35 - Me.btnRemove.UseVisualStyleBackColor = True - ' - 'lblActors - ' - Me.lblActors.AutoSize = True - Me.lblActors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblActors.Location = New System.Drawing.Point(215, 141) - Me.lblActors.Name = "lblActors" - Me.lblActors.Size = New System.Drawing.Size(43, 13) - Me.lblActors.TabIndex = 29 - Me.lblActors.Text = "Actors:" - ' - 'lvActors - ' - Me.lvActors.BackColor = System.Drawing.SystemColors.Window - Me.lvActors.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lvActors.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colName, Me.colRole, Me.colThumb}) - Me.lvActors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lvActors.FullRowSelect = True - Me.lvActors.Location = New System.Drawing.Point(217, 155) - Me.lvActors.Name = "lvActors" - Me.lvActors.Size = New System.Drawing.Size(408, 147) - Me.lvActors.TabIndex = 30 - Me.lvActors.UseCompatibleStateImageBehavior = False - Me.lvActors.View = System.Windows.Forms.View.Details - ' - 'colName - ' - Me.colName.Text = "Name" - Me.colName.Width = 110 - ' - 'colRole - ' - Me.colRole.Text = "Role" - Me.colRole.Width = 100 - ' - 'colThumb - ' - Me.colThumb.Text = "Thumb" - Me.colThumb.Width = 174 - ' - 'lbMPAA - ' - Me.lbMPAA.BackColor = System.Drawing.SystemColors.Window - Me.lbMPAA.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lbMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lbMPAA.FormattingEnabled = True - Me.lbMPAA.Location = New System.Drawing.Point(635, 155) - Me.lbMPAA.Name = "lbMPAA" - Me.lbMPAA.Size = New System.Drawing.Size(193, 80) - Me.lbMPAA.TabIndex = 37 - ' - 'lblGenre - ' - Me.lblGenre.AutoSize = True - Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblGenre.Location = New System.Drawing.Point(5, 330) - Me.lblGenre.Name = "lblGenre" - Me.lblGenre.Size = New System.Drawing.Size(41, 13) - Me.lblGenre.TabIndex = 23 - Me.lblGenre.Text = "Genre:" - ' - 'lblMPAA - ' - Me.lblMPAA.AutoSize = True - Me.lblMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblMPAA.Location = New System.Drawing.Point(633, 141) - Me.lblMPAA.Name = "lblMPAA" - Me.lblMPAA.Size = New System.Drawing.Size(81, 13) - Me.lblMPAA.TabIndex = 36 - Me.lblMPAA.Text = "MPAA Rating:" - ' - 'lblDirector - ' - Me.lblDirector.AutoSize = True - Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblDirector.Location = New System.Drawing.Point(5, 289) - Me.lblDirector.Name = "lblDirector" - Me.lblDirector.Size = New System.Drawing.Size(51, 13) - Me.lblDirector.TabIndex = 21 - Me.lblDirector.Text = "Director:" - ' - 'txtDirector - ' - Me.txtDirector.BackColor = System.Drawing.SystemColors.Window - Me.txtDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtDirector.Location = New System.Drawing.Point(7, 304) - Me.txtDirector.Name = "txtDirector" - Me.txtDirector.Size = New System.Drawing.Size(192, 22) - Me.txtDirector.TabIndex = 22 - ' - 'txtTop250 - ' - Me.txtTop250.BackColor = System.Drawing.SystemColors.Window - Me.txtTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtTop250.Location = New System.Drawing.Point(156, 264) - Me.txtTop250.Name = "txtTop250" - Me.txtTop250.Size = New System.Drawing.Size(43, 22) - Me.txtTop250.TabIndex = 20 - ' - 'lblTop250 - ' - Me.lblTop250.AutoSize = True - Me.lblTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblTop250.Location = New System.Drawing.Point(153, 249) - Me.lblTop250.Name = "lblTop250" - Me.lblTop250.Size = New System.Drawing.Size(51, 13) - Me.lblTop250.TabIndex = 19 - Me.lblTop250.Text = "Top 250:" - ' - 'lblPlot - ' - Me.lblPlot.AutoSize = True - Me.lblPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblPlot.Location = New System.Drawing.Point(441, 7) - Me.lblPlot.Name = "lblPlot" - Me.lblPlot.Size = New System.Drawing.Size(31, 13) - Me.lblPlot.TabIndex = 27 - Me.lblPlot.Text = "Plot:" - ' - 'txtPlot - ' - Me.txtPlot.AcceptsReturn = True - Me.txtPlot.BackColor = System.Drawing.SystemColors.Window - Me.txtPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtPlot.Location = New System.Drawing.Point(443, 22) - Me.txtPlot.Multiline = True - Me.txtPlot.Name = "txtPlot" - Me.txtPlot.Size = New System.Drawing.Size(385, 112) - Me.txtPlot.TabIndex = 28 - ' - 'lblOutline - ' - Me.lblOutline.AutoSize = True - Me.lblOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblOutline.Location = New System.Drawing.Point(215, 7) - Me.lblOutline.Name = "lblOutline" - Me.lblOutline.Size = New System.Drawing.Size(48, 13) - Me.lblOutline.TabIndex = 25 - Me.lblOutline.Text = "Outline:" - ' - 'txtOutline - ' - Me.txtOutline.AcceptsReturn = True - Me.txtOutline.BackColor = System.Drawing.SystemColors.Window - Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtOutline.Location = New System.Drawing.Point(217, 22) - Me.txtOutline.Multiline = True - Me.txtOutline.Name = "txtOutline" - Me.txtOutline.Size = New System.Drawing.Size(220, 112) - Me.txtOutline.TabIndex = 26 - ' - 'lblTagline - ' - Me.lblTagline.AutoSize = True - Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblTagline.Location = New System.Drawing.Point(5, 127) - Me.lblTagline.Name = "lblTagline" - Me.lblTagline.Size = New System.Drawing.Size(48, 13) - Me.lblTagline.TabIndex = 6 - Me.lblTagline.Text = "Tagline:" - ' - 'txtTagline - ' - Me.txtTagline.BackColor = System.Drawing.SystemColors.Window - Me.txtTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtTagline.Location = New System.Drawing.Point(7, 142) - Me.txtTagline.Name = "txtTagline" - Me.txtTagline.Size = New System.Drawing.Size(192, 22) - Me.txtTagline.TabIndex = 7 - ' - 'pbStar5 - ' - Me.pbStar5.Location = New System.Drawing.Point(175, 180) - Me.pbStar5.Name = "pbStar5" - Me.pbStar5.Size = New System.Drawing.Size(24, 24) - Me.pbStar5.TabIndex = 67 - Me.pbStar5.TabStop = False - ' - 'pbStar4 - ' - Me.pbStar4.Location = New System.Drawing.Point(151, 180) - Me.pbStar4.Name = "pbStar4" - Me.pbStar4.Size = New System.Drawing.Size(24, 24) - Me.pbStar4.TabIndex = 66 - Me.pbStar4.TabStop = False - ' - 'pbStar3 - ' - Me.pbStar3.Location = New System.Drawing.Point(127, 180) - Me.pbStar3.Name = "pbStar3" - Me.pbStar3.Size = New System.Drawing.Size(24, 24) - Me.pbStar3.TabIndex = 65 - Me.pbStar3.TabStop = False - ' - 'pbStar2 - ' - Me.pbStar2.Location = New System.Drawing.Point(103, 180) - Me.pbStar2.Name = "pbStar2" - Me.pbStar2.Size = New System.Drawing.Size(24, 24) - Me.pbStar2.TabIndex = 64 - Me.pbStar2.TabStop = False - ' - 'pbStar1 - ' - Me.pbStar1.Location = New System.Drawing.Point(79, 180) - Me.pbStar1.Name = "pbStar1" - Me.pbStar1.Size = New System.Drawing.Size(24, 24) - Me.pbStar1.TabIndex = 63 - Me.pbStar1.TabStop = False - ' - 'txtVotes - ' - Me.txtVotes.BackColor = System.Drawing.SystemColors.Window - Me.txtVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtVotes.Location = New System.Drawing.Point(81, 264) - Me.txtVotes.Name = "txtVotes" - Me.txtVotes.Size = New System.Drawing.Size(66, 22) - Me.txtVotes.TabIndex = 18 - ' - 'lblVotes - ' - Me.lblVotes.AutoSize = True - Me.lblVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblVotes.Location = New System.Drawing.Point(78, 249) - Me.lblVotes.Name = "lblVotes" - Me.lblVotes.Size = New System.Drawing.Size(39, 13) - Me.lblVotes.TabIndex = 17 - Me.lblVotes.Text = "Votes:" - ' - 'lblRating - ' - Me.lblRating.AutoSize = True - Me.lblRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblRating.Location = New System.Drawing.Point(77, 167) - Me.lblRating.Name = "lblRating" - Me.lblRating.Size = New System.Drawing.Size(44, 13) - Me.lblRating.TabIndex = 10 - Me.lblRating.Text = "Rating:" - ' - 'mtxtYear - ' - Me.mtxtYear.BackColor = System.Drawing.SystemColors.Window - Me.mtxtYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.mtxtYear.Location = New System.Drawing.Point(7, 182) - Me.mtxtYear.Mask = "####" - Me.mtxtYear.Name = "mtxtYear" - Me.mtxtYear.PromptChar = Global.Microsoft.VisualBasic.ChrW(32) - Me.mtxtYear.Size = New System.Drawing.Size(50, 22) - Me.mtxtYear.TabIndex = 9 - ' - 'lblYear - ' - Me.lblYear.AutoSize = True - Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblYear.Location = New System.Drawing.Point(5, 167) - Me.lblYear.Name = "lblYear" - Me.lblYear.Size = New System.Drawing.Size(33, 13) - Me.lblYear.TabIndex = 8 - Me.lblYear.Text = "Year:" - ' - 'lblTitle - ' - Me.lblTitle.AutoSize = True - Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblTitle.Location = New System.Drawing.Point(5, 7) - Me.lblTitle.Name = "lblTitle" - Me.lblTitle.Size = New System.Drawing.Size(32, 13) - Me.lblTitle.TabIndex = 0 - Me.lblTitle.Text = "Title:" - ' - 'txtTitle - ' - Me.txtTitle.BackColor = System.Drawing.SystemColors.Window - Me.txtTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtTitle.Location = New System.Drawing.Point(7, 22) - Me.txtTitle.Name = "txtTitle" - Me.txtTitle.Size = New System.Drawing.Size(192, 22) - Me.txtTitle.TabIndex = 1 - ' - 'TabPage2 - ' - Me.TabPage2.Controls.Add(Me.btnSetPosterDL) - Me.TabPage2.Controls.Add(Me.btnRemovePoster) - Me.TabPage2.Controls.Add(Me.lblPosterSize) - Me.TabPage2.Controls.Add(Me.btnSetPosterScrape) - Me.TabPage2.Controls.Add(Me.btnSetPoster) - Me.TabPage2.Controls.Add(Me.pbPoster) - Me.TabPage2.Location = New System.Drawing.Point(4, 22) - Me.TabPage2.Name = "TabPage2" - Me.TabPage2.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage2.Size = New System.Drawing.Size(836, 452) - Me.TabPage2.TabIndex = 1 - Me.TabPage2.Text = "Poster" - Me.TabPage2.UseVisualStyleBackColor = True - ' - 'btnSetPosterDL - ' - Me.btnSetPosterDL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnSetPosterDL.Image = CType(resources.GetObject("btnSetPosterDL.Image"), System.Drawing.Image) - Me.btnSetPosterDL.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnSetPosterDL.Location = New System.Drawing.Point(735, 180) - Me.btnSetPosterDL.Name = "btnSetPosterDL" - Me.btnSetPosterDL.Size = New System.Drawing.Size(96, 83) - Me.btnSetPosterDL.TabIndex = 3 - Me.btnSetPosterDL.Text = "Change Poster (Download)" - Me.btnSetPosterDL.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnSetPosterDL.UseVisualStyleBackColor = True - ' - 'btnRemovePoster - ' - Me.btnRemovePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnRemovePoster.Image = CType(resources.GetObject("btnRemovePoster.Image"), System.Drawing.Image) - Me.btnRemovePoster.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnRemovePoster.Location = New System.Drawing.Point(735, 363) - Me.btnRemovePoster.Name = "btnRemovePoster" - Me.btnRemovePoster.Size = New System.Drawing.Size(96, 83) - Me.btnRemovePoster.TabIndex = 4 - Me.btnRemovePoster.Text = "Remove Poster" - Me.btnRemovePoster.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnRemovePoster.UseVisualStyleBackColor = True - ' - 'lblPosterSize - ' - Me.lblPosterSize.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblPosterSize.Location = New System.Drawing.Point(8, 8) - Me.lblPosterSize.Name = "lblPosterSize" - Me.lblPosterSize.Size = New System.Drawing.Size(105, 23) - Me.lblPosterSize.TabIndex = 0 - Me.lblPosterSize.Text = "Size: (XXXXxXXXX)" - Me.lblPosterSize.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.lblPosterSize.Visible = False - ' - 'btnSetPosterScrape - ' - Me.btnSetPosterScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnSetPosterScrape.Image = CType(resources.GetObject("btnSetPosterScrape.Image"), System.Drawing.Image) - Me.btnSetPosterScrape.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnSetPosterScrape.Location = New System.Drawing.Point(735, 93) - Me.btnSetPosterScrape.Name = "btnSetPosterScrape" - Me.btnSetPosterScrape.Size = New System.Drawing.Size(96, 83) - Me.btnSetPosterScrape.TabIndex = 2 - Me.btnSetPosterScrape.Text = "Change Poster (Scrape)" - Me.btnSetPosterScrape.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnSetPosterScrape.UseVisualStyleBackColor = True - ' - 'btnSetPoster - ' - Me.btnSetPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnSetPoster.Image = CType(resources.GetObject("btnSetPoster.Image"), System.Drawing.Image) - Me.btnSetPoster.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnSetPoster.Location = New System.Drawing.Point(735, 6) - Me.btnSetPoster.Name = "btnSetPoster" - Me.btnSetPoster.Size = New System.Drawing.Size(96, 83) - Me.btnSetPoster.TabIndex = 1 - Me.btnSetPoster.Text = "Change Poster (Local Browse)" - Me.btnSetPoster.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnSetPoster.UseVisualStyleBackColor = True - ' - 'pbPoster - ' - Me.pbPoster.BackColor = System.Drawing.Color.DimGray - Me.pbPoster.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pbPoster.Location = New System.Drawing.Point(6, 6) - Me.pbPoster.Name = "pbPoster" - Me.pbPoster.Size = New System.Drawing.Size(724, 440) - Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbPoster.TabIndex = 0 - Me.pbPoster.TabStop = False - ' - 'TabPage3 - ' - Me.TabPage3.Controls.Add(Me.btnSetFanartDL) - Me.TabPage3.Controls.Add(Me.btnRemoveFanart) - Me.TabPage3.Controls.Add(Me.lblFanartSize) - Me.TabPage3.Controls.Add(Me.btnSetFanartScrape) - Me.TabPage3.Controls.Add(Me.btnSetFanart) - Me.TabPage3.Controls.Add(Me.pbFanart) - Me.TabPage3.Location = New System.Drawing.Point(4, 22) - Me.TabPage3.Name = "TabPage3" - Me.TabPage3.Size = New System.Drawing.Size(836, 452) - Me.TabPage3.TabIndex = 2 - Me.TabPage3.Text = "Fanart" - Me.TabPage3.UseVisualStyleBackColor = True - ' - 'btnSetFanartDL - ' - Me.btnSetFanartDL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnSetFanartDL.Image = CType(resources.GetObject("btnSetFanartDL.Image"), System.Drawing.Image) - Me.btnSetFanartDL.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnSetFanartDL.Location = New System.Drawing.Point(735, 180) - Me.btnSetFanartDL.Name = "btnSetFanartDL" - Me.btnSetFanartDL.Size = New System.Drawing.Size(96, 83) - Me.btnSetFanartDL.TabIndex = 3 - Me.btnSetFanartDL.Text = "Change Fanart (Download)" - Me.btnSetFanartDL.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnSetFanartDL.UseVisualStyleBackColor = True - ' - 'btnRemoveFanart - ' - Me.btnRemoveFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnRemoveFanart.Image = CType(resources.GetObject("btnRemoveFanart.Image"), System.Drawing.Image) - Me.btnRemoveFanart.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnRemoveFanart.Location = New System.Drawing.Point(735, 363) - Me.btnRemoveFanart.Name = "btnRemoveFanart" - Me.btnRemoveFanart.Size = New System.Drawing.Size(96, 83) - Me.btnRemoveFanart.TabIndex = 4 - Me.btnRemoveFanart.Text = "Remove Fanart" - Me.btnRemoveFanart.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnRemoveFanart.UseVisualStyleBackColor = True - ' - 'lblFanartSize - ' - Me.lblFanartSize.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblFanartSize.Location = New System.Drawing.Point(8, 8) - Me.lblFanartSize.Name = "lblFanartSize" - Me.lblFanartSize.Size = New System.Drawing.Size(105, 23) - Me.lblFanartSize.TabIndex = 0 - Me.lblFanartSize.Text = "Size: (XXXXxXXXX)" - Me.lblFanartSize.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - Me.lblFanartSize.Visible = False - ' - 'btnSetFanartScrape - ' - Me.btnSetFanartScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnSetFanartScrape.Image = CType(resources.GetObject("btnSetFanartScrape.Image"), System.Drawing.Image) - Me.btnSetFanartScrape.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnSetFanartScrape.Location = New System.Drawing.Point(735, 93) - Me.btnSetFanartScrape.Name = "btnSetFanartScrape" - Me.btnSetFanartScrape.Size = New System.Drawing.Size(96, 83) - Me.btnSetFanartScrape.TabIndex = 2 - Me.btnSetFanartScrape.Text = "Change Fanart (Scrape)" - Me.btnSetFanartScrape.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnSetFanartScrape.UseVisualStyleBackColor = True - ' - 'btnSetFanart - ' - Me.btnSetFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnSetFanart.Image = CType(resources.GetObject("btnSetFanart.Image"), System.Drawing.Image) - Me.btnSetFanart.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnSetFanart.Location = New System.Drawing.Point(735, 6) - Me.btnSetFanart.Name = "btnSetFanart" - Me.btnSetFanart.Size = New System.Drawing.Size(96, 83) - Me.btnSetFanart.TabIndex = 1 - Me.btnSetFanart.Text = "Change Fanart (Local Browse)" - Me.btnSetFanart.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnSetFanart.UseVisualStyleBackColor = True - ' - 'pbFanart - ' - Me.pbFanart.BackColor = System.Drawing.Color.DimGray - Me.pbFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pbFanart.Location = New System.Drawing.Point(6, 6) - Me.pbFanart.Name = "pbFanart" - Me.pbFanart.Size = New System.Drawing.Size(724, 440) - Me.pbFanart.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbFanart.TabIndex = 1 - Me.pbFanart.TabStop = False - ' - 'TabPage5 - ' - Me.TabPage5.Controls.Add(Me.pnlETQueue) - Me.TabPage5.Controls.Add(Me.Panel1) - Me.TabPage5.Controls.Add(Me.btnThumbsRefresh) - Me.TabPage5.Controls.Add(Me.btnRemoveThumb) - Me.TabPage5.Controls.Add(Me.btnDown) - Me.TabPage5.Controls.Add(Me.btnUp) - Me.TabPage5.Controls.Add(Me.lvThumbs) - Me.TabPage5.Controls.Add(Me.pbExtraThumbs) - Me.TabPage5.Location = New System.Drawing.Point(4, 22) - Me.TabPage5.Name = "TabPage5" - Me.TabPage5.Size = New System.Drawing.Size(836, 452) - Me.TabPage5.TabIndex = 4 - Me.TabPage5.Text = "Extrathumbs" - Me.TabPage5.UseVisualStyleBackColor = True - ' - 'pnlETQueue - ' - Me.pnlETQueue.BackColor = System.Drawing.Color.LightGray - Me.pnlETQueue.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlETQueue.Controls.Add(Me.Label4) - Me.pnlETQueue.Controls.Add(Me.btnTransferNow) - Me.pnlETQueue.Location = New System.Drawing.Point(626, 11) - Me.pnlETQueue.Name = "pnlETQueue" - Me.pnlETQueue.Size = New System.Drawing.Size(201, 69) - Me.pnlETQueue.TabIndex = 1 - Me.pnlETQueue.Visible = False - ' - 'Label4 - ' - Me.Label4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label4.Location = New System.Drawing.Point(3, 3) - Me.Label4.Name = "Label4" - Me.Label4.Size = New System.Drawing.Size(193, 26) - Me.Label4.TabIndex = 0 - Me.Label4.Text = "You have extrathumbs queued to be transferred to the movie directory." - Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'btnTransferNow - ' - Me.btnTransferNow.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnTransferNow.Image = CType(resources.GetObject("btnTransferNow.Image"), System.Drawing.Image) - Me.btnTransferNow.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnTransferNow.Location = New System.Drawing.Point(53, 32) - Me.btnTransferNow.Name = "btnTransferNow" - Me.btnTransferNow.Size = New System.Drawing.Size(103, 32) - Me.btnTransferNow.TabIndex = 1 - Me.btnTransferNow.Text = "Transfer Now" - Me.btnTransferNow.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnTransferNow.UseVisualStyleBackColor = True - ' - 'Panel1 - ' - Me.Panel1.BackColor = System.Drawing.Color.LightGray - Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Panel1.Controls.Add(Me.btnSetAsFanart) - Me.Panel1.Location = New System.Drawing.Point(718, 403) - Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(109, 39) - Me.Panel1.TabIndex = 6 - ' - 'btnSetAsFanart - ' - Me.btnSetAsFanart.Enabled = False - Me.btnSetAsFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnSetAsFanart.Image = CType(resources.GetObject("btnSetAsFanart.Image"), System.Drawing.Image) - Me.btnSetAsFanart.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnSetAsFanart.Location = New System.Drawing.Point(2, 3) - Me.btnSetAsFanart.Name = "btnSetAsFanart" - Me.btnSetAsFanart.Size = New System.Drawing.Size(103, 32) - Me.btnSetAsFanart.TabIndex = 0 - Me.btnSetAsFanart.Text = "Set As Fanart" - Me.btnSetAsFanart.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnSetAsFanart.UseVisualStyleBackColor = True - ' - 'btnThumbsRefresh - ' - Me.btnThumbsRefresh.Image = CType(resources.GetObject("btnThumbsRefresh.Image"), System.Drawing.Image) - Me.btnThumbsRefresh.Location = New System.Drawing.Point(87, 422) - Me.btnThumbsRefresh.Name = "btnThumbsRefresh" - Me.btnThumbsRefresh.Size = New System.Drawing.Size(23, 23) - Me.btnThumbsRefresh.TabIndex = 4 - Me.btnThumbsRefresh.UseVisualStyleBackColor = True - ' - 'btnRemoveThumb - ' - Me.btnRemoveThumb.Image = CType(resources.GetObject("btnRemoveThumb.Image"), System.Drawing.Image) - Me.btnRemoveThumb.Location = New System.Drawing.Point(147, 422) - Me.btnRemoveThumb.Name = "btnRemoveThumb" - Me.btnRemoveThumb.Size = New System.Drawing.Size(23, 23) - Me.btnRemoveThumb.TabIndex = 5 - Me.btnRemoveThumb.UseVisualStyleBackColor = True - ' - 'btnDown - ' - Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) - Me.btnDown.Location = New System.Drawing.Point(28, 422) - Me.btnDown.Name = "btnDown" - Me.btnDown.Size = New System.Drawing.Size(23, 23) - Me.btnDown.TabIndex = 3 - Me.btnDown.UseVisualStyleBackColor = True - ' - 'btnUp - ' - Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) - Me.btnUp.Location = New System.Drawing.Point(4, 422) - Me.btnUp.Name = "btnUp" - Me.btnUp.Size = New System.Drawing.Size(23, 23) - Me.btnUp.TabIndex = 2 - Me.btnUp.UseVisualStyleBackColor = True - ' - 'lvThumbs - ' - Me.lvThumbs.AutoArrange = False - Me.lvThumbs.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lvThumbs.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lvThumbs.FullRowSelect = True - Me.lvThumbs.HideSelection = False - Me.lvThumbs.Location = New System.Drawing.Point(5, 8) - Me.lvThumbs.Name = "lvThumbs" - Me.lvThumbs.Size = New System.Drawing.Size(165, 408) - Me.lvThumbs.SmallImageList = Me.ilThumbs - Me.lvThumbs.Sorting = System.Windows.Forms.SortOrder.Ascending - Me.lvThumbs.TabIndex = 0 - Me.lvThumbs.UseCompatibleStateImageBehavior = False - Me.lvThumbs.View = System.Windows.Forms.View.SmallIcon - ' - 'ilThumbs - ' - Me.ilThumbs.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit - Me.ilThumbs.ImageSize = New System.Drawing.Size(96, 54) - Me.ilThumbs.TransparentColor = System.Drawing.Color.Transparent - ' - 'pbExtraThumbs - ' - Me.pbExtraThumbs.BackColor = System.Drawing.Color.DimGray - Me.pbExtraThumbs.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pbExtraThumbs.Location = New System.Drawing.Point(176, 8) - Me.pbExtraThumbs.Name = "pbExtraThumbs" - Me.pbExtraThumbs.Size = New System.Drawing.Size(653, 437) - Me.pbExtraThumbs.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbExtraThumbs.TabIndex = 2 - Me.pbExtraThumbs.TabStop = False - ' - 'TabPage4 - ' - Me.TabPage4.Controls.Add(Me.pnlFrameExtrator) - Me.TabPage4.Location = New System.Drawing.Point(4, 22) - Me.TabPage4.Name = "TabPage4" - Me.TabPage4.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage4.Size = New System.Drawing.Size(836, 452) - Me.TabPage4.TabIndex = 3 - Me.TabPage4.Text = "Frame Extraction" - Me.TabPage4.UseVisualStyleBackColor = True - ' - 'pnlFrameExtrator - ' - Me.pnlFrameExtrator.Location = New System.Drawing.Point(0, 0) - Me.pnlFrameExtrator.Name = "pnlFrameExtrator" - Me.pnlFrameExtrator.Size = New System.Drawing.Size(834, 452) - Me.pnlFrameExtrator.TabIndex = 0 - ' - 'TabPage6 - ' - Me.TabPage6.Controls.Add(Me.pnlFileInfo) - Me.TabPage6.Location = New System.Drawing.Point(4, 22) - Me.TabPage6.Name = "TabPage6" - Me.TabPage6.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage6.Size = New System.Drawing.Size(836, 452) - Me.TabPage6.TabIndex = 5 - Me.TabPage6.Text = "Meta Data" - Me.TabPage6.UseVisualStyleBackColor = True - ' - 'pnlFileInfo - ' - Me.pnlFileInfo.Location = New System.Drawing.Point(-4, 0) - Me.pnlFileInfo.Name = "pnlFileInfo" - Me.pnlFileInfo.Size = New System.Drawing.Size(844, 452) - Me.pnlFileInfo.TabIndex = 0 - ' - 'chkMark - ' - Me.chkMark.AutoSize = True - Me.chkMark.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMark.Location = New System.Drawing.Point(4, 559) - Me.chkMark.Name = "chkMark" - Me.chkMark.Size = New System.Drawing.Size(86, 17) - Me.chkMark.TabIndex = 5 - Me.chkMark.Text = "Mark Movie" - Me.chkMark.UseVisualStyleBackColor = True - ' - 'btnRescrape - ' - Me.btnRescrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnRescrape.Image = CType(resources.GetObject("btnRescrape.Image"), System.Drawing.Image) - Me.btnRescrape.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnRescrape.Location = New System.Drawing.Point(310, 554) - Me.btnRescrape.Name = "btnRescrape" - Me.btnRescrape.Size = New System.Drawing.Size(98, 23) - Me.btnRescrape.TabIndex = 6 - Me.btnRescrape.Text = "Re-scrape" - Me.btnRescrape.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnRescrape.UseVisualStyleBackColor = True - ' - 'btnChangeMovie - ' - Me.btnChangeMovie.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnChangeMovie.Image = CType(resources.GetObject("btnChangeMovie.Image"), System.Drawing.Image) - Me.btnChangeMovie.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnChangeMovie.Location = New System.Drawing.Point(429, 554) - Me.btnChangeMovie.Name = "btnChangeMovie" - Me.btnChangeMovie.Size = New System.Drawing.Size(107, 23) - Me.btnChangeMovie.TabIndex = 7 - Me.btnChangeMovie.Text = "Change Movie" - Me.btnChangeMovie.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnChangeMovie.UseVisualStyleBackColor = True - ' - 'btnClearCache - ' - Me.btnClearCache.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnClearCache.Image = CType(resources.GetObject("btnClearCache.Image"), System.Drawing.Image) - Me.btnClearCache.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnClearCache.Location = New System.Drawing.Point(751, 66) - Me.btnClearCache.Name = "btnClearCache" - Me.btnClearCache.Size = New System.Drawing.Size(96, 23) - Me.btnClearCache.TabIndex = 4 - Me.btnClearCache.Text = "Clear Cache" - Me.btnClearCache.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnClearCache.UseVisualStyleBackColor = True - Me.btnClearCache.Visible = False - ' - 'DelayTimer - ' - Me.DelayTimer.Interval = 250 - ' - 'dlgEditMovie - ' - Me.AcceptButton = Me.OK_Button - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(854, 582) - Me.Controls.Add(Me.btnClearCache) - Me.Controls.Add(Me.btnChangeMovie) - Me.Controls.Add(Me.btnRescrape) - Me.Controls.Add(Me.chkMark) - Me.Controls.Add(Me.Cancel_Button) - Me.Controls.Add(Me.OK_Button) - Me.Controls.Add(Me.pnlTop) - Me.Controls.Add(Me.TabControl1) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "dlgEditMovie" - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Edit Movie" - Me.pnlTop.ResumeLayout(False) - Me.pnlTop.PerformLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() - Me.TabControl1.ResumeLayout(False) - Me.TabPage1.ResumeLayout(False) - Me.TabPage1.PerformLayout() - CType(Me.pbStar5, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStar4, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStar3, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).EndInit() - Me.TabPage2.ResumeLayout(False) - CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() - Me.TabPage3.ResumeLayout(False) - CType(Me.pbFanart, System.ComponentModel.ISupportInitialize).EndInit() - Me.TabPage5.ResumeLayout(False) - Me.pnlETQueue.ResumeLayout(False) - Me.Panel1.ResumeLayout(False) - CType(Me.pbExtraThumbs, System.ComponentModel.ISupportInitialize).EndInit() - Me.TabPage4.ResumeLayout(False) - Me.TabPage6.ResumeLayout(False) - Me.ResumeLayout(False) - Me.PerformLayout() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgEditMovie)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.TabControl1 = New System.Windows.Forms.TabControl() + Me.TabPage1 = New System.Windows.Forms.TabPage() + Me.txtOriginalTitle = New System.Windows.Forms.TextBox() + Me.lblOriginalTitle = New System.Windows.Forms.Label() + Me.txtCountry = New System.Windows.Forms.TextBox() + Me.lblCountry = New System.Windows.Forms.Label() + Me.txtFileSource = New System.Windows.Forms.TextBox() + Me.lblFileSource = New System.Windows.Forms.Label() + Me.btnActorDown = New System.Windows.Forms.Button() + Me.btnActorUp = New System.Windows.Forms.Button() + Me.Label6 = New System.Windows.Forms.Label() + Me.txtSortTitle = New System.Windows.Forms.TextBox() + Me.lblLocalTrailer = New System.Windows.Forms.Label() + Me.btnPlayTrailer = New System.Windows.Forms.Button() + Me.btnDLTrailer = New System.Windows.Forms.Button() + Me.lbGenre = New System.Windows.Forms.CheckedListBox() + Me.btnStudio = New System.Windows.Forms.Button() + Me.lblStudio = New System.Windows.Forms.Label() + Me.txtStudio = New System.Windows.Forms.TextBox() + Me.lblTrailer = New System.Windows.Forms.Label() + Me.txtTrailer = New System.Windows.Forms.TextBox() + Me.txtReleaseDate = New System.Windows.Forms.TextBox() + Me.lblReleaseDate = New System.Windows.Forms.Label() + Me.lblCredits = New System.Windows.Forms.Label() + Me.txtCredits = New System.Windows.Forms.TextBox() + Me.lblCerts = New System.Windows.Forms.Label() + Me.txtCerts = New System.Windows.Forms.TextBox() + Me.lblRuntime = New System.Windows.Forms.Label() + Me.txtRuntime = New System.Windows.Forms.TextBox() + Me.lblMPAADesc = New System.Windows.Forms.Label() + Me.txtMPAADesc = New System.Windows.Forms.TextBox() + Me.btnEditActor = New System.Windows.Forms.Button() + Me.btnAddActor = New System.Windows.Forms.Button() + Me.btnManual = New System.Windows.Forms.Button() + Me.btnRemove = New System.Windows.Forms.Button() + Me.lblActors = New System.Windows.Forms.Label() + Me.lvActors = New System.Windows.Forms.ListView() + Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colRole = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colThumb = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.lbMPAA = New System.Windows.Forms.ListBox() + Me.lblGenre = New System.Windows.Forms.Label() + Me.lblMPAA = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.txtDirector = New System.Windows.Forms.TextBox() + Me.txtTop250 = New System.Windows.Forms.TextBox() + Me.lblTop250 = New System.Windows.Forms.Label() + Me.lblPlot = New System.Windows.Forms.Label() + Me.txtPlot = New System.Windows.Forms.TextBox() + Me.lblOutline = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.lblTagline = New System.Windows.Forms.Label() + Me.txtTagline = New System.Windows.Forms.TextBox() + Me.pbStar5 = New System.Windows.Forms.PictureBox() + Me.pbStar4 = New System.Windows.Forms.PictureBox() + Me.pbStar3 = New System.Windows.Forms.PictureBox() + Me.pbStar2 = New System.Windows.Forms.PictureBox() + Me.pbStar1 = New System.Windows.Forms.PictureBox() + Me.txtVotes = New System.Windows.Forms.TextBox() + Me.lblVotes = New System.Windows.Forms.Label() + Me.lblRating = New System.Windows.Forms.Label() + Me.mtxtYear = New System.Windows.Forms.MaskedTextBox() + Me.lblYear = New System.Windows.Forms.Label() + Me.lblTitle = New System.Windows.Forms.Label() + Me.txtTitle = New System.Windows.Forms.TextBox() + Me.TabPage2 = New System.Windows.Forms.TabPage() + Me.btnSetPosterDL = New System.Windows.Forms.Button() + Me.btnRemovePoster = New System.Windows.Forms.Button() + Me.lblPosterSize = New System.Windows.Forms.Label() + Me.btnSetPosterScrape = New System.Windows.Forms.Button() + Me.btnSetPoster = New System.Windows.Forms.Button() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.TabPage3 = New System.Windows.Forms.TabPage() + Me.btnSetFanartDL = New System.Windows.Forms.Button() + Me.btnRemoveFanart = New System.Windows.Forms.Button() + Me.lblFanartSize = New System.Windows.Forms.Label() + Me.btnSetFanartScrape = New System.Windows.Forms.Button() + Me.btnSetFanart = New System.Windows.Forms.Button() + Me.pbFanart = New System.Windows.Forms.PictureBox() + Me.TabPage5 = New System.Windows.Forms.TabPage() + Me.pnlETQueue = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + Me.btnTransferNow = New System.Windows.Forms.Button() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.btnSetAsFanart = New System.Windows.Forms.Button() + Me.btnThumbsRefresh = New System.Windows.Forms.Button() + Me.btnRemoveThumb = New System.Windows.Forms.Button() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.lvThumbs = New System.Windows.Forms.ListView() + Me.ilThumbs = New System.Windows.Forms.ImageList(Me.components) + Me.pbExtraThumbs = New System.Windows.Forms.PictureBox() + Me.TabPage4 = New System.Windows.Forms.TabPage() + Me.pnlFrameExtrator = New System.Windows.Forms.Panel() + Me.TabPage6 = New System.Windows.Forms.TabPage() + Me.pnlFileInfo = New System.Windows.Forms.Panel() + Me.ofdImage = New System.Windows.Forms.OpenFileDialog() + Me.chkMark = New System.Windows.Forms.CheckBox() + Me.btnRescrape = New System.Windows.Forms.Button() + Me.btnChangeMovie = New System.Windows.Forms.Button() + Me.btnClearCache = New System.Windows.Forms.Button() + Me.DelayTimer = New System.Windows.Forms.Timer(Me.components) + Me.chkWatched = New System.Windows.Forms.CheckBox() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TabControl1.SuspendLayout() + Me.TabPage1.SuspendLayout() + CType(Me.pbStar5, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStar4, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStar3, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TabPage2.SuspendLayout() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TabPage3.SuspendLayout() + CType(Me.pbFanart, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TabPage5.SuspendLayout() + Me.pnlETQueue.SuspendLayout() + Me.Panel1.SuspendLayout() + CType(Me.pbExtraThumbs, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TabPage4.SuspendLayout() + Me.TabPage6.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(708, 553) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(781, 553) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.LightSteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label1) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(854, 64) + Me.pnlTop.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(205, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Edit the details for the selected movie." + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.BackColor = System.Drawing.Color.Transparent + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.ForeColor = System.Drawing.Color.White + Me.Label1.Location = New System.Drawing.Point(58, 3) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(137, 32) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Edit Movie" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'TabControl1 + ' + Me.TabControl1.Controls.Add(Me.TabPage1) + Me.TabControl1.Controls.Add(Me.TabPage2) + Me.TabControl1.Controls.Add(Me.TabPage3) + Me.TabControl1.Controls.Add(Me.TabPage5) + Me.TabControl1.Controls.Add(Me.TabPage4) + Me.TabControl1.Controls.Add(Me.TabPage6) + Me.TabControl1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.TabControl1.Location = New System.Drawing.Point(4, 70) + Me.TabControl1.Name = "TabControl1" + Me.TabControl1.SelectedIndex = 0 + Me.TabControl1.Size = New System.Drawing.Size(844, 478) + Me.TabControl1.TabIndex = 3 + ' + 'TabPage1 + ' + Me.TabPage1.Controls.Add(Me.txtOriginalTitle) + Me.TabPage1.Controls.Add(Me.lblOriginalTitle) + Me.TabPage1.Controls.Add(Me.txtCountry) + Me.TabPage1.Controls.Add(Me.lblCountry) + Me.TabPage1.Controls.Add(Me.txtFileSource) + Me.TabPage1.Controls.Add(Me.lblFileSource) + Me.TabPage1.Controls.Add(Me.btnActorDown) + Me.TabPage1.Controls.Add(Me.btnActorUp) + Me.TabPage1.Controls.Add(Me.Label6) + Me.TabPage1.Controls.Add(Me.txtSortTitle) + Me.TabPage1.Controls.Add(Me.lblLocalTrailer) + Me.TabPage1.Controls.Add(Me.btnPlayTrailer) + Me.TabPage1.Controls.Add(Me.btnDLTrailer) + Me.TabPage1.Controls.Add(Me.lbGenre) + Me.TabPage1.Controls.Add(Me.btnStudio) + Me.TabPage1.Controls.Add(Me.lblStudio) + Me.TabPage1.Controls.Add(Me.txtStudio) + Me.TabPage1.Controls.Add(Me.lblTrailer) + Me.TabPage1.Controls.Add(Me.txtTrailer) + Me.TabPage1.Controls.Add(Me.txtReleaseDate) + Me.TabPage1.Controls.Add(Me.lblReleaseDate) + Me.TabPage1.Controls.Add(Me.lblCredits) + Me.TabPage1.Controls.Add(Me.txtCredits) + Me.TabPage1.Controls.Add(Me.lblCerts) + Me.TabPage1.Controls.Add(Me.txtCerts) + Me.TabPage1.Controls.Add(Me.lblRuntime) + Me.TabPage1.Controls.Add(Me.txtRuntime) + Me.TabPage1.Controls.Add(Me.lblMPAADesc) + Me.TabPage1.Controls.Add(Me.txtMPAADesc) + Me.TabPage1.Controls.Add(Me.btnEditActor) + Me.TabPage1.Controls.Add(Me.btnAddActor) + Me.TabPage1.Controls.Add(Me.btnManual) + Me.TabPage1.Controls.Add(Me.btnRemove) + Me.TabPage1.Controls.Add(Me.lblActors) + Me.TabPage1.Controls.Add(Me.lvActors) + Me.TabPage1.Controls.Add(Me.lbMPAA) + Me.TabPage1.Controls.Add(Me.lblGenre) + Me.TabPage1.Controls.Add(Me.lblMPAA) + Me.TabPage1.Controls.Add(Me.lblDirector) + Me.TabPage1.Controls.Add(Me.txtDirector) + Me.TabPage1.Controls.Add(Me.txtTop250) + Me.TabPage1.Controls.Add(Me.lblTop250) + Me.TabPage1.Controls.Add(Me.lblPlot) + Me.TabPage1.Controls.Add(Me.txtPlot) + Me.TabPage1.Controls.Add(Me.lblOutline) + Me.TabPage1.Controls.Add(Me.txtOutline) + Me.TabPage1.Controls.Add(Me.lblTagline) + Me.TabPage1.Controls.Add(Me.txtTagline) + Me.TabPage1.Controls.Add(Me.pbStar5) + Me.TabPage1.Controls.Add(Me.pbStar4) + Me.TabPage1.Controls.Add(Me.pbStar3) + Me.TabPage1.Controls.Add(Me.pbStar2) + Me.TabPage1.Controls.Add(Me.pbStar1) + Me.TabPage1.Controls.Add(Me.txtVotes) + Me.TabPage1.Controls.Add(Me.lblVotes) + Me.TabPage1.Controls.Add(Me.lblRating) + Me.TabPage1.Controls.Add(Me.mtxtYear) + Me.TabPage1.Controls.Add(Me.lblYear) + Me.TabPage1.Controls.Add(Me.lblTitle) + Me.TabPage1.Controls.Add(Me.txtTitle) + Me.TabPage1.Location = New System.Drawing.Point(4, 22) + Me.TabPage1.Name = "TabPage1" + Me.TabPage1.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage1.Size = New System.Drawing.Size(836, 452) + Me.TabPage1.TabIndex = 0 + Me.TabPage1.Text = "Details" + Me.TabPage1.UseVisualStyleBackColor = True + ' + 'txtOriginalTitle + ' + Me.txtOriginalTitle.BackColor = System.Drawing.SystemColors.Window + Me.txtOriginalTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtOriginalTitle.Location = New System.Drawing.Point(7, 63) + Me.txtOriginalTitle.Name = "txtOriginalTitle" + Me.txtOriginalTitle.Size = New System.Drawing.Size(192, 22) + Me.txtOriginalTitle.TabIndex = 3 + ' + 'lblOriginalTitle + ' + Me.lblOriginalTitle.AutoSize = True + Me.lblOriginalTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblOriginalTitle.Location = New System.Drawing.Point(5, 47) + Me.lblOriginalTitle.Name = "lblOriginalTitle" + Me.lblOriginalTitle.Size = New System.Drawing.Size(76, 13) + Me.lblOriginalTitle.TabIndex = 2 + Me.lblOriginalTitle.Text = "Original Title:" + ' + 'txtCountry + ' + Me.txtCountry.BackColor = System.Drawing.SystemColors.Window + Me.txtCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtCountry.Location = New System.Drawing.Point(8, 224) + Me.txtCountry.Name = "txtCountry" + Me.txtCountry.Size = New System.Drawing.Size(89, 22) + Me.txtCountry.TabIndex = 12 + ' + 'lblCountry + ' + Me.lblCountry.AutoSize = True + Me.lblCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblCountry.Location = New System.Drawing.Point(5, 209) + Me.lblCountry.Name = "lblCountry" + Me.lblCountry.Size = New System.Drawing.Size(52, 13) + Me.lblCountry.TabIndex = 11 + Me.lblCountry.Text = "Country:" + ' + 'txtFileSource + ' + Me.txtFileSource.BackColor = System.Drawing.SystemColors.Window + Me.txtFileSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtFileSource.Location = New System.Drawing.Point(636, 385) + Me.txtFileSource.Name = "txtFileSource" + Me.txtFileSource.Size = New System.Drawing.Size(167, 22) + Me.txtFileSource.TabIndex = 48 + ' + 'lblFileSource + ' + Me.lblFileSource.AutoSize = True + Me.lblFileSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblFileSource.Location = New System.Drawing.Point(633, 370) + Me.lblFileSource.Name = "lblFileSource" + Me.lblFileSource.Size = New System.Drawing.Size(78, 13) + Me.lblFileSource.TabIndex = 47 + Me.lblFileSource.Text = "Video Source:" + ' + 'btnActorDown + ' + Me.btnActorDown.Image = CType(resources.GetObject("btnActorDown.Image"), System.Drawing.Image) + Me.btnActorDown.Location = New System.Drawing.Point(430, 304) + Me.btnActorDown.Name = "btnActorDown" + Me.btnActorDown.Size = New System.Drawing.Size(23, 23) + Me.btnActorDown.TabIndex = 34 + Me.btnActorDown.UseVisualStyleBackColor = True + ' + 'btnActorUp + ' + Me.btnActorUp.Image = CType(resources.GetObject("btnActorUp.Image"), System.Drawing.Image) + Me.btnActorUp.Location = New System.Drawing.Point(406, 304) + Me.btnActorUp.Name = "btnActorUp" + Me.btnActorUp.Size = New System.Drawing.Size(23, 23) + Me.btnActorUp.TabIndex = 33 + Me.btnActorUp.UseVisualStyleBackColor = True + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label6.Location = New System.Drawing.Point(5, 87) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(56, 13) + Me.Label6.TabIndex = 4 + Me.Label6.Text = "Sort Title:" + ' + 'txtSortTitle + ' + Me.txtSortTitle.BackColor = System.Drawing.SystemColors.Window + Me.txtSortTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtSortTitle.Location = New System.Drawing.Point(7, 102) + Me.txtSortTitle.Name = "txtSortTitle" + Me.txtSortTitle.Size = New System.Drawing.Size(192, 22) + Me.txtSortTitle.TabIndex = 5 + ' + 'lblLocalTrailer + ' + Me.lblLocalTrailer.AutoSize = True + Me.lblLocalTrailer.Font = New System.Drawing.Font("Microsoft Sans Serif", 6.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblLocalTrailer.ForeColor = System.Drawing.Color.Green + Me.lblLocalTrailer.Location = New System.Drawing.Point(487, 414) + Me.lblLocalTrailer.Name = "lblLocalTrailer" + Me.lblLocalTrailer.Size = New System.Drawing.Size(90, 9) + Me.lblLocalTrailer.TabIndex = 51 + Me.lblLocalTrailer.Text = "Local Trailer Found" + Me.lblLocalTrailer.Visible = False + ' + 'btnPlayTrailer + ' + Me.btnPlayTrailer.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnPlayTrailer.Image = Global.Ember_Media_Manager.My.Resources.Resources.Play_Icon + Me.btnPlayTrailer.Location = New System.Drawing.Point(579, 423) + Me.btnPlayTrailer.Name = "btnPlayTrailer" + Me.btnPlayTrailer.Size = New System.Drawing.Size(23, 23) + Me.btnPlayTrailer.TabIndex = 52 + Me.btnPlayTrailer.UseVisualStyleBackColor = True + ' + 'btnDLTrailer + ' + Me.btnDLTrailer.Image = CType(resources.GetObject("btnDLTrailer.Image"), System.Drawing.Image) + Me.btnDLTrailer.Location = New System.Drawing.Point(602, 423) + Me.btnDLTrailer.Name = "btnDLTrailer" + Me.btnDLTrailer.Size = New System.Drawing.Size(23, 23) + Me.btnDLTrailer.TabIndex = 53 + Me.btnDLTrailer.UseVisualStyleBackColor = True + ' + 'lbGenre + ' + Me.lbGenre.BackColor = System.Drawing.SystemColors.Window + Me.lbGenre.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lbGenre.CheckOnClick = True + Me.lbGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lbGenre.FormattingEnabled = True + Me.lbGenre.IntegralHeight = False + Me.lbGenre.Location = New System.Drawing.Point(8, 345) + Me.lbGenre.Name = "lbGenre" + Me.lbGenre.Size = New System.Drawing.Size(192, 100) + Me.lbGenre.Sorted = True + Me.lbGenre.TabIndex = 24 + ' + 'btnStudio + ' + Me.btnStudio.Image = CType(resources.GetObject("btnStudio.Image"), System.Drawing.Image) + Me.btnStudio.Location = New System.Drawing.Point(805, 343) + Me.btnStudio.Name = "btnStudio" + Me.btnStudio.Size = New System.Drawing.Size(23, 23) + Me.btnStudio.TabIndex = 44 + Me.btnStudio.UseVisualStyleBackColor = True + ' + 'lblStudio + ' + Me.lblStudio.AutoSize = True + Me.lblStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblStudio.Location = New System.Drawing.Point(633, 330) + Me.lblStudio.Name = "lblStudio" + Me.lblStudio.Size = New System.Drawing.Size(44, 13) + Me.lblStudio.TabIndex = 42 + Me.lblStudio.Text = "Studio:" + ' + 'txtStudio + ' + Me.txtStudio.BackColor = System.Drawing.SystemColors.Window + Me.txtStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtStudio.Location = New System.Drawing.Point(635, 345) + Me.txtStudio.Name = "txtStudio" + Me.txtStudio.Size = New System.Drawing.Size(167, 22) + Me.txtStudio.TabIndex = 43 + ' + 'lblTrailer + ' + Me.lblTrailer.AutoSize = True + Me.lblTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTrailer.Location = New System.Drawing.Point(215, 410) + Me.lblTrailer.Name = "lblTrailer" + Me.lblTrailer.Size = New System.Drawing.Size(65, 13) + Me.lblTrailer.TabIndex = 49 + Me.lblTrailer.Text = "Trailer URL:" + ' + 'txtTrailer + ' + Me.txtTrailer.BackColor = System.Drawing.SystemColors.Window + Me.txtTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtTrailer.Location = New System.Drawing.Point(217, 425) + Me.txtTrailer.Name = "txtTrailer" + Me.txtTrailer.Size = New System.Drawing.Size(360, 22) + Me.txtTrailer.TabIndex = 50 + ' + 'txtReleaseDate + ' + Me.txtReleaseDate.BackColor = System.Drawing.SystemColors.Window + Me.txtReleaseDate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtReleaseDate.Location = New System.Drawing.Point(103, 224) + Me.txtReleaseDate.Name = "txtReleaseDate" + Me.txtReleaseDate.Size = New System.Drawing.Size(96, 22) + Me.txtReleaseDate.TabIndex = 14 + ' + 'lblReleaseDate + ' + Me.lblReleaseDate.AutoSize = True + Me.lblReleaseDate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblReleaseDate.Location = New System.Drawing.Point(100, 209) + Me.lblReleaseDate.Name = "lblReleaseDate" + Me.lblReleaseDate.Size = New System.Drawing.Size(76, 13) + Me.lblReleaseDate.TabIndex = 13 + Me.lblReleaseDate.Text = "Release Date:" + ' + 'lblCredits + ' + Me.lblCredits.AutoSize = True + Me.lblCredits.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblCredits.Location = New System.Drawing.Point(215, 330) + Me.lblCredits.Name = "lblCredits" + Me.lblCredits.Size = New System.Drawing.Size(46, 13) + Me.lblCredits.TabIndex = 40 + Me.lblCredits.Text = "Credits:" + ' + 'txtCredits + ' + Me.txtCredits.BackColor = System.Drawing.SystemColors.Window + Me.txtCredits.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtCredits.Location = New System.Drawing.Point(217, 345) + Me.txtCredits.Name = "txtCredits" + Me.txtCredits.Size = New System.Drawing.Size(408, 22) + Me.txtCredits.TabIndex = 41 + ' + 'lblCerts + ' + Me.lblCerts.AutoSize = True + Me.lblCerts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblCerts.Location = New System.Drawing.Point(215, 370) + Me.lblCerts.Name = "lblCerts" + Me.lblCerts.Size = New System.Drawing.Size(86, 13) + Me.lblCerts.TabIndex = 45 + Me.lblCerts.Text = "Certification(s):" + ' + 'txtCerts + ' + Me.txtCerts.BackColor = System.Drawing.SystemColors.Window + Me.txtCerts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtCerts.Location = New System.Drawing.Point(217, 385) + Me.txtCerts.Name = "txtCerts" + Me.txtCerts.Size = New System.Drawing.Size(408, 22) + Me.txtCerts.TabIndex = 46 + ' + 'lblRuntime + ' + Me.lblRuntime.AutoSize = True + Me.lblRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblRuntime.Location = New System.Drawing.Point(5, 249) + Me.lblRuntime.Name = "lblRuntime" + Me.lblRuntime.Size = New System.Drawing.Size(54, 13) + Me.lblRuntime.TabIndex = 15 + Me.lblRuntime.Text = "Runtime:" + ' + 'txtRuntime + ' + Me.txtRuntime.BackColor = System.Drawing.SystemColors.Window + Me.txtRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtRuntime.Location = New System.Drawing.Point(7, 264) + Me.txtRuntime.Name = "txtRuntime" + Me.txtRuntime.Size = New System.Drawing.Size(66, 22) + Me.txtRuntime.TabIndex = 16 + ' + 'lblMPAADesc + ' + Me.lblMPAADesc.AutoSize = True + Me.lblMPAADesc.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblMPAADesc.Location = New System.Drawing.Point(633, 245) + Me.lblMPAADesc.Name = "lblMPAADesc" + Me.lblMPAADesc.Size = New System.Drawing.Size(142, 13) + Me.lblMPAADesc.TabIndex = 38 + Me.lblMPAADesc.Text = "MPAA Rating Description:" + ' + 'txtMPAADesc + ' + Me.txtMPAADesc.BackColor = System.Drawing.SystemColors.Window + Me.txtMPAADesc.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtMPAADesc.Location = New System.Drawing.Point(635, 260) + Me.txtMPAADesc.Multiline = True + Me.txtMPAADesc.Name = "txtMPAADesc" + Me.txtMPAADesc.Size = New System.Drawing.Size(193, 64) + Me.txtMPAADesc.TabIndex = 39 + ' + 'btnEditActor + ' + Me.btnEditActor.Image = CType(resources.GetObject("btnEditActor.Image"), System.Drawing.Image) + Me.btnEditActor.Location = New System.Drawing.Point(246, 303) + Me.btnEditActor.Name = "btnEditActor" + Me.btnEditActor.Size = New System.Drawing.Size(23, 23) + Me.btnEditActor.TabIndex = 32 + Me.btnEditActor.UseVisualStyleBackColor = True + ' + 'btnAddActor + ' + Me.btnAddActor.Image = CType(resources.GetObject("btnAddActor.Image"), System.Drawing.Image) + Me.btnAddActor.Location = New System.Drawing.Point(217, 303) + Me.btnAddActor.Name = "btnAddActor" + Me.btnAddActor.Size = New System.Drawing.Size(23, 23) + Me.btnAddActor.TabIndex = 31 + Me.btnAddActor.UseVisualStyleBackColor = True + ' + 'btnManual + ' + Me.btnManual.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnManual.Location = New System.Drawing.Point(738, 423) + Me.btnManual.Name = "btnManual" + Me.btnManual.Size = New System.Drawing.Size(92, 23) + Me.btnManual.TabIndex = 54 + Me.btnManual.Text = "Manual Edit" + Me.btnManual.UseVisualStyleBackColor = True + ' + 'btnRemove + ' + Me.btnRemove.Image = CType(resources.GetObject("btnRemove.Image"), System.Drawing.Image) + Me.btnRemove.Location = New System.Drawing.Point(602, 303) + Me.btnRemove.Name = "btnRemove" + Me.btnRemove.Size = New System.Drawing.Size(23, 23) + Me.btnRemove.TabIndex = 35 + Me.btnRemove.UseVisualStyleBackColor = True + ' + 'lblActors + ' + Me.lblActors.AutoSize = True + Me.lblActors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblActors.Location = New System.Drawing.Point(215, 141) + Me.lblActors.Name = "lblActors" + Me.lblActors.Size = New System.Drawing.Size(43, 13) + Me.lblActors.TabIndex = 29 + Me.lblActors.Text = "Actors:" + ' + 'lvActors + ' + Me.lvActors.BackColor = System.Drawing.SystemColors.Window + Me.lvActors.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lvActors.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colName, Me.colRole, Me.colThumb}) + Me.lvActors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lvActors.FullRowSelect = True + Me.lvActors.Location = New System.Drawing.Point(217, 155) + Me.lvActors.Name = "lvActors" + Me.lvActors.Size = New System.Drawing.Size(408, 147) + Me.lvActors.TabIndex = 30 + Me.lvActors.UseCompatibleStateImageBehavior = False + Me.lvActors.View = System.Windows.Forms.View.Details + ' + 'colName + ' + Me.colName.Text = "Name" + Me.colName.Width = 110 + ' + 'colRole + ' + Me.colRole.Text = "Role" + Me.colRole.Width = 100 + ' + 'colThumb + ' + Me.colThumb.Text = "Thumb" + Me.colThumb.Width = 174 + ' + 'lbMPAA + ' + Me.lbMPAA.BackColor = System.Drawing.SystemColors.Window + Me.lbMPAA.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lbMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lbMPAA.FormattingEnabled = True + Me.lbMPAA.Location = New System.Drawing.Point(635, 155) + Me.lbMPAA.Name = "lbMPAA" + Me.lbMPAA.Size = New System.Drawing.Size(193, 80) + Me.lbMPAA.TabIndex = 37 + ' + 'lblGenre + ' + Me.lblGenre.AutoSize = True + Me.lblGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGenre.Location = New System.Drawing.Point(5, 330) + Me.lblGenre.Name = "lblGenre" + Me.lblGenre.Size = New System.Drawing.Size(41, 13) + Me.lblGenre.TabIndex = 23 + Me.lblGenre.Text = "Genre:" + ' + 'lblMPAA + ' + Me.lblMPAA.AutoSize = True + Me.lblMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblMPAA.Location = New System.Drawing.Point(633, 141) + Me.lblMPAA.Name = "lblMPAA" + Me.lblMPAA.Size = New System.Drawing.Size(80, 13) + Me.lblMPAA.TabIndex = 36 + Me.lblMPAA.Text = "MPAA Rating:" + ' + 'lblDirector + ' + Me.lblDirector.AutoSize = True + Me.lblDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblDirector.Location = New System.Drawing.Point(5, 289) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(51, 13) + Me.lblDirector.TabIndex = 21 + Me.lblDirector.Text = "Director:" + ' + 'txtDirector + ' + Me.txtDirector.BackColor = System.Drawing.SystemColors.Window + Me.txtDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtDirector.Location = New System.Drawing.Point(7, 304) + Me.txtDirector.Name = "txtDirector" + Me.txtDirector.Size = New System.Drawing.Size(192, 22) + Me.txtDirector.TabIndex = 22 + ' + 'txtTop250 + ' + Me.txtTop250.BackColor = System.Drawing.SystemColors.Window + Me.txtTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtTop250.Location = New System.Drawing.Point(156, 264) + Me.txtTop250.Name = "txtTop250" + Me.txtTop250.Size = New System.Drawing.Size(43, 22) + Me.txtTop250.TabIndex = 20 + ' + 'lblTop250 + ' + Me.lblTop250.AutoSize = True + Me.lblTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTop250.Location = New System.Drawing.Point(153, 249) + Me.lblTop250.Name = "lblTop250" + Me.lblTop250.Size = New System.Drawing.Size(50, 13) + Me.lblTop250.TabIndex = 19 + Me.lblTop250.Text = "Top 250:" + ' + 'lblPlot + ' + Me.lblPlot.AutoSize = True + Me.lblPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPlot.Location = New System.Drawing.Point(441, 7) + Me.lblPlot.Name = "lblPlot" + Me.lblPlot.Size = New System.Drawing.Size(31, 13) + Me.lblPlot.TabIndex = 27 + Me.lblPlot.Text = "Plot:" + ' + 'txtPlot + ' + Me.txtPlot.AcceptsReturn = True + Me.txtPlot.BackColor = System.Drawing.SystemColors.Window + Me.txtPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtPlot.Location = New System.Drawing.Point(443, 22) + Me.txtPlot.Multiline = True + Me.txtPlot.Name = "txtPlot" + Me.txtPlot.Size = New System.Drawing.Size(385, 112) + Me.txtPlot.TabIndex = 28 + ' + 'lblOutline + ' + Me.lblOutline.AutoSize = True + Me.lblOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblOutline.Location = New System.Drawing.Point(215, 7) + Me.lblOutline.Name = "lblOutline" + Me.lblOutline.Size = New System.Drawing.Size(48, 13) + Me.lblOutline.TabIndex = 25 + Me.lblOutline.Text = "Outline:" + ' + 'txtOutline + ' + Me.txtOutline.AcceptsReturn = True + Me.txtOutline.BackColor = System.Drawing.SystemColors.Window + Me.txtOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtOutline.Location = New System.Drawing.Point(217, 22) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.Size = New System.Drawing.Size(220, 112) + Me.txtOutline.TabIndex = 26 + ' + 'lblTagline + ' + Me.lblTagline.AutoSize = True + Me.lblTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTagline.Location = New System.Drawing.Point(5, 127) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(47, 13) + Me.lblTagline.TabIndex = 6 + Me.lblTagline.Text = "Tagline:" + ' + 'txtTagline + ' + Me.txtTagline.BackColor = System.Drawing.SystemColors.Window + Me.txtTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtTagline.Location = New System.Drawing.Point(7, 142) + Me.txtTagline.Name = "txtTagline" + Me.txtTagline.Size = New System.Drawing.Size(192, 22) + Me.txtTagline.TabIndex = 7 + ' + 'pbStar5 + ' + Me.pbStar5.Location = New System.Drawing.Point(175, 180) + Me.pbStar5.Name = "pbStar5" + Me.pbStar5.Size = New System.Drawing.Size(24, 24) + Me.pbStar5.TabIndex = 67 + Me.pbStar5.TabStop = False + ' + 'pbStar4 + ' + Me.pbStar4.Location = New System.Drawing.Point(151, 180) + Me.pbStar4.Name = "pbStar4" + Me.pbStar4.Size = New System.Drawing.Size(24, 24) + Me.pbStar4.TabIndex = 66 + Me.pbStar4.TabStop = False + ' + 'pbStar3 + ' + Me.pbStar3.Location = New System.Drawing.Point(127, 180) + Me.pbStar3.Name = "pbStar3" + Me.pbStar3.Size = New System.Drawing.Size(24, 24) + Me.pbStar3.TabIndex = 65 + Me.pbStar3.TabStop = False + ' + 'pbStar2 + ' + Me.pbStar2.Location = New System.Drawing.Point(103, 180) + Me.pbStar2.Name = "pbStar2" + Me.pbStar2.Size = New System.Drawing.Size(24, 24) + Me.pbStar2.TabIndex = 64 + Me.pbStar2.TabStop = False + ' + 'pbStar1 + ' + Me.pbStar1.Location = New System.Drawing.Point(79, 180) + Me.pbStar1.Name = "pbStar1" + Me.pbStar1.Size = New System.Drawing.Size(24, 24) + Me.pbStar1.TabIndex = 63 + Me.pbStar1.TabStop = False + ' + 'txtVotes + ' + Me.txtVotes.BackColor = System.Drawing.SystemColors.Window + Me.txtVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtVotes.Location = New System.Drawing.Point(81, 264) + Me.txtVotes.Name = "txtVotes" + Me.txtVotes.Size = New System.Drawing.Size(66, 22) + Me.txtVotes.TabIndex = 18 + ' + 'lblVotes + ' + Me.lblVotes.AutoSize = True + Me.lblVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblVotes.Location = New System.Drawing.Point(78, 249) + Me.lblVotes.Name = "lblVotes" + Me.lblVotes.Size = New System.Drawing.Size(38, 13) + Me.lblVotes.TabIndex = 17 + Me.lblVotes.Text = "Votes:" + ' + 'lblRating + ' + Me.lblRating.AutoSize = True + Me.lblRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblRating.Location = New System.Drawing.Point(77, 167) + Me.lblRating.Name = "lblRating" + Me.lblRating.Size = New System.Drawing.Size(44, 13) + Me.lblRating.TabIndex = 10 + Me.lblRating.Text = "Rating:" + ' + 'mtxtYear + ' + Me.mtxtYear.BackColor = System.Drawing.SystemColors.Window + Me.mtxtYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.mtxtYear.Location = New System.Drawing.Point(7, 182) + Me.mtxtYear.Mask = "####" + Me.mtxtYear.Name = "mtxtYear" + Me.mtxtYear.PromptChar = Global.Microsoft.VisualBasic.ChrW(32) + Me.mtxtYear.Size = New System.Drawing.Size(50, 22) + Me.mtxtYear.TabIndex = 9 + ' + 'lblYear + ' + Me.lblYear.AutoSize = True + Me.lblYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblYear.Location = New System.Drawing.Point(5, 167) + Me.lblYear.Name = "lblYear" + Me.lblYear.Size = New System.Drawing.Size(32, 13) + Me.lblYear.TabIndex = 8 + Me.lblYear.Text = "Year:" + ' + 'lblTitle + ' + Me.lblTitle.AutoSize = True + Me.lblTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblTitle.Location = New System.Drawing.Point(5, 7) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(32, 13) + Me.lblTitle.TabIndex = 0 + Me.lblTitle.Text = "Title:" + ' + 'txtTitle + ' + Me.txtTitle.BackColor = System.Drawing.SystemColors.Window + Me.txtTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtTitle.Location = New System.Drawing.Point(7, 22) + Me.txtTitle.Name = "txtTitle" + Me.txtTitle.Size = New System.Drawing.Size(192, 22) + Me.txtTitle.TabIndex = 1 + ' + 'TabPage2 + ' + Me.TabPage2.Controls.Add(Me.btnSetPosterDL) + Me.TabPage2.Controls.Add(Me.btnRemovePoster) + Me.TabPage2.Controls.Add(Me.lblPosterSize) + Me.TabPage2.Controls.Add(Me.btnSetPosterScrape) + Me.TabPage2.Controls.Add(Me.btnSetPoster) + Me.TabPage2.Controls.Add(Me.pbPoster) + Me.TabPage2.Location = New System.Drawing.Point(4, 22) + Me.TabPage2.Name = "TabPage2" + Me.TabPage2.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage2.Size = New System.Drawing.Size(836, 452) + Me.TabPage2.TabIndex = 1 + Me.TabPage2.Text = "Poster" + Me.TabPage2.UseVisualStyleBackColor = True + ' + 'btnSetPosterDL + ' + Me.btnSetPosterDL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnSetPosterDL.Image = CType(resources.GetObject("btnSetPosterDL.Image"), System.Drawing.Image) + Me.btnSetPosterDL.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnSetPosterDL.Location = New System.Drawing.Point(735, 180) + Me.btnSetPosterDL.Name = "btnSetPosterDL" + Me.btnSetPosterDL.Size = New System.Drawing.Size(96, 83) + Me.btnSetPosterDL.TabIndex = 3 + Me.btnSetPosterDL.Text = "Change Poster (Download)" + Me.btnSetPosterDL.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnSetPosterDL.UseVisualStyleBackColor = True + ' + 'btnRemovePoster + ' + Me.btnRemovePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnRemovePoster.Image = CType(resources.GetObject("btnRemovePoster.Image"), System.Drawing.Image) + Me.btnRemovePoster.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnRemovePoster.Location = New System.Drawing.Point(735, 363) + Me.btnRemovePoster.Name = "btnRemovePoster" + Me.btnRemovePoster.Size = New System.Drawing.Size(96, 83) + Me.btnRemovePoster.TabIndex = 4 + Me.btnRemovePoster.Text = "Remove Poster" + Me.btnRemovePoster.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnRemovePoster.UseVisualStyleBackColor = True + ' + 'lblPosterSize + ' + Me.lblPosterSize.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblPosterSize.Location = New System.Drawing.Point(8, 8) + Me.lblPosterSize.Name = "lblPosterSize" + Me.lblPosterSize.Size = New System.Drawing.Size(105, 23) + Me.lblPosterSize.TabIndex = 0 + Me.lblPosterSize.Text = "Size: (XXXXxXXXX)" + Me.lblPosterSize.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblPosterSize.Visible = False + ' + 'btnSetPosterScrape + ' + Me.btnSetPosterScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnSetPosterScrape.Image = CType(resources.GetObject("btnSetPosterScrape.Image"), System.Drawing.Image) + Me.btnSetPosterScrape.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnSetPosterScrape.Location = New System.Drawing.Point(735, 93) + Me.btnSetPosterScrape.Name = "btnSetPosterScrape" + Me.btnSetPosterScrape.Size = New System.Drawing.Size(96, 83) + Me.btnSetPosterScrape.TabIndex = 2 + Me.btnSetPosterScrape.Text = "Change Poster (Scrape)" + Me.btnSetPosterScrape.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnSetPosterScrape.UseVisualStyleBackColor = True + ' + 'btnSetPoster + ' + Me.btnSetPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnSetPoster.Image = CType(resources.GetObject("btnSetPoster.Image"), System.Drawing.Image) + Me.btnSetPoster.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnSetPoster.Location = New System.Drawing.Point(735, 6) + Me.btnSetPoster.Name = "btnSetPoster" + Me.btnSetPoster.Size = New System.Drawing.Size(96, 83) + Me.btnSetPoster.TabIndex = 1 + Me.btnSetPoster.Text = "Change Poster (Local Browse)" + Me.btnSetPoster.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnSetPoster.UseVisualStyleBackColor = True + ' + 'pbPoster + ' + Me.pbPoster.BackColor = System.Drawing.Color.DimGray + Me.pbPoster.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pbPoster.Location = New System.Drawing.Point(6, 6) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(724, 440) + Me.pbPoster.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbPoster.TabIndex = 0 + Me.pbPoster.TabStop = False + ' + 'TabPage3 + ' + Me.TabPage3.Controls.Add(Me.btnSetFanartDL) + Me.TabPage3.Controls.Add(Me.btnRemoveFanart) + Me.TabPage3.Controls.Add(Me.lblFanartSize) + Me.TabPage3.Controls.Add(Me.btnSetFanartScrape) + Me.TabPage3.Controls.Add(Me.btnSetFanart) + Me.TabPage3.Controls.Add(Me.pbFanart) + Me.TabPage3.Location = New System.Drawing.Point(4, 22) + Me.TabPage3.Name = "TabPage3" + Me.TabPage3.Size = New System.Drawing.Size(836, 452) + Me.TabPage3.TabIndex = 2 + Me.TabPage3.Text = "Fanart" + Me.TabPage3.UseVisualStyleBackColor = True + ' + 'btnSetFanartDL + ' + Me.btnSetFanartDL.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnSetFanartDL.Image = CType(resources.GetObject("btnSetFanartDL.Image"), System.Drawing.Image) + Me.btnSetFanartDL.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnSetFanartDL.Location = New System.Drawing.Point(735, 180) + Me.btnSetFanartDL.Name = "btnSetFanartDL" + Me.btnSetFanartDL.Size = New System.Drawing.Size(96, 83) + Me.btnSetFanartDL.TabIndex = 3 + Me.btnSetFanartDL.Text = "Change Fanart (Download)" + Me.btnSetFanartDL.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnSetFanartDL.UseVisualStyleBackColor = True + ' + 'btnRemoveFanart + ' + Me.btnRemoveFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnRemoveFanart.Image = CType(resources.GetObject("btnRemoveFanart.Image"), System.Drawing.Image) + Me.btnRemoveFanart.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnRemoveFanart.Location = New System.Drawing.Point(735, 363) + Me.btnRemoveFanart.Name = "btnRemoveFanart" + Me.btnRemoveFanart.Size = New System.Drawing.Size(96, 83) + Me.btnRemoveFanart.TabIndex = 4 + Me.btnRemoveFanart.Text = "Remove Fanart" + Me.btnRemoveFanart.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnRemoveFanart.UseVisualStyleBackColor = True + ' + 'lblFanartSize + ' + Me.lblFanartSize.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblFanartSize.Location = New System.Drawing.Point(8, 8) + Me.lblFanartSize.Name = "lblFanartSize" + Me.lblFanartSize.Size = New System.Drawing.Size(105, 23) + Me.lblFanartSize.TabIndex = 0 + Me.lblFanartSize.Text = "Size: (XXXXxXXXX)" + Me.lblFanartSize.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + Me.lblFanartSize.Visible = False + ' + 'btnSetFanartScrape + ' + Me.btnSetFanartScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnSetFanartScrape.Image = CType(resources.GetObject("btnSetFanartScrape.Image"), System.Drawing.Image) + Me.btnSetFanartScrape.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnSetFanartScrape.Location = New System.Drawing.Point(735, 93) + Me.btnSetFanartScrape.Name = "btnSetFanartScrape" + Me.btnSetFanartScrape.Size = New System.Drawing.Size(96, 83) + Me.btnSetFanartScrape.TabIndex = 2 + Me.btnSetFanartScrape.Text = "Change Fanart (Scrape)" + Me.btnSetFanartScrape.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnSetFanartScrape.UseVisualStyleBackColor = True + ' + 'btnSetFanart + ' + Me.btnSetFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnSetFanart.Image = CType(resources.GetObject("btnSetFanart.Image"), System.Drawing.Image) + Me.btnSetFanart.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnSetFanart.Location = New System.Drawing.Point(735, 6) + Me.btnSetFanart.Name = "btnSetFanart" + Me.btnSetFanart.Size = New System.Drawing.Size(96, 83) + Me.btnSetFanart.TabIndex = 1 + Me.btnSetFanart.Text = "Change Fanart (Local Browse)" + Me.btnSetFanart.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnSetFanart.UseVisualStyleBackColor = True + ' + 'pbFanart + ' + Me.pbFanart.BackColor = System.Drawing.Color.DimGray + Me.pbFanart.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pbFanart.Location = New System.Drawing.Point(6, 6) + Me.pbFanart.Name = "pbFanart" + Me.pbFanart.Size = New System.Drawing.Size(724, 440) + Me.pbFanart.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbFanart.TabIndex = 1 + Me.pbFanart.TabStop = False + ' + 'TabPage5 + ' + Me.TabPage5.Controls.Add(Me.pnlETQueue) + Me.TabPage5.Controls.Add(Me.Panel1) + Me.TabPage5.Controls.Add(Me.btnThumbsRefresh) + Me.TabPage5.Controls.Add(Me.btnRemoveThumb) + Me.TabPage5.Controls.Add(Me.btnDown) + Me.TabPage5.Controls.Add(Me.btnUp) + Me.TabPage5.Controls.Add(Me.lvThumbs) + Me.TabPage5.Controls.Add(Me.pbExtraThumbs) + Me.TabPage5.Location = New System.Drawing.Point(4, 22) + Me.TabPage5.Name = "TabPage5" + Me.TabPage5.Size = New System.Drawing.Size(836, 452) + Me.TabPage5.TabIndex = 4 + Me.TabPage5.Text = "Extrathumbs" + Me.TabPage5.UseVisualStyleBackColor = True + ' + 'pnlETQueue + ' + Me.pnlETQueue.BackColor = System.Drawing.Color.LightGray + Me.pnlETQueue.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlETQueue.Controls.Add(Me.Label4) + Me.pnlETQueue.Controls.Add(Me.btnTransferNow) + Me.pnlETQueue.Location = New System.Drawing.Point(626, 11) + Me.pnlETQueue.Name = "pnlETQueue" + Me.pnlETQueue.Size = New System.Drawing.Size(201, 69) + Me.pnlETQueue.TabIndex = 1 + Me.pnlETQueue.Visible = False + ' + 'Label4 + ' + Me.Label4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label4.Location = New System.Drawing.Point(3, 3) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(193, 26) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "You have extrathumbs queued to be transferred to the movie directory." + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'btnTransferNow + ' + Me.btnTransferNow.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnTransferNow.Image = CType(resources.GetObject("btnTransferNow.Image"), System.Drawing.Image) + Me.btnTransferNow.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnTransferNow.Location = New System.Drawing.Point(53, 32) + Me.btnTransferNow.Name = "btnTransferNow" + Me.btnTransferNow.Size = New System.Drawing.Size(103, 32) + Me.btnTransferNow.TabIndex = 1 + Me.btnTransferNow.Text = "Transfer Now" + Me.btnTransferNow.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnTransferNow.UseVisualStyleBackColor = True + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.LightGray + Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Panel1.Controls.Add(Me.btnSetAsFanart) + Me.Panel1.Location = New System.Drawing.Point(718, 403) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(109, 39) + Me.Panel1.TabIndex = 6 + ' + 'btnSetAsFanart + ' + Me.btnSetAsFanart.Enabled = False + Me.btnSetAsFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnSetAsFanart.Image = CType(resources.GetObject("btnSetAsFanart.Image"), System.Drawing.Image) + Me.btnSetAsFanart.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnSetAsFanart.Location = New System.Drawing.Point(2, 3) + Me.btnSetAsFanart.Name = "btnSetAsFanart" + Me.btnSetAsFanart.Size = New System.Drawing.Size(103, 32) + Me.btnSetAsFanart.TabIndex = 0 + Me.btnSetAsFanart.Text = "Set As Fanart" + Me.btnSetAsFanart.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnSetAsFanart.UseVisualStyleBackColor = True + ' + 'btnThumbsRefresh + ' + Me.btnThumbsRefresh.Image = CType(resources.GetObject("btnThumbsRefresh.Image"), System.Drawing.Image) + Me.btnThumbsRefresh.Location = New System.Drawing.Point(87, 422) + Me.btnThumbsRefresh.Name = "btnThumbsRefresh" + Me.btnThumbsRefresh.Size = New System.Drawing.Size(23, 23) + Me.btnThumbsRefresh.TabIndex = 4 + Me.btnThumbsRefresh.UseVisualStyleBackColor = True + ' + 'btnRemoveThumb + ' + Me.btnRemoveThumb.Image = CType(resources.GetObject("btnRemoveThumb.Image"), System.Drawing.Image) + Me.btnRemoveThumb.Location = New System.Drawing.Point(147, 422) + Me.btnRemoveThumb.Name = "btnRemoveThumb" + Me.btnRemoveThumb.Size = New System.Drawing.Size(23, 23) + Me.btnRemoveThumb.TabIndex = 5 + Me.btnRemoveThumb.UseVisualStyleBackColor = True + ' + 'btnDown + ' + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(28, 422) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 3 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(4, 422) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 2 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'lvThumbs + ' + Me.lvThumbs.AutoArrange = False + Me.lvThumbs.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lvThumbs.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lvThumbs.FullRowSelect = True + Me.lvThumbs.HideSelection = False + Me.lvThumbs.Location = New System.Drawing.Point(5, 8) + Me.lvThumbs.Name = "lvThumbs" + Me.lvThumbs.Size = New System.Drawing.Size(165, 408) + Me.lvThumbs.SmallImageList = Me.ilThumbs + Me.lvThumbs.Sorting = System.Windows.Forms.SortOrder.Ascending + Me.lvThumbs.TabIndex = 0 + Me.lvThumbs.UseCompatibleStateImageBehavior = False + Me.lvThumbs.View = System.Windows.Forms.View.SmallIcon + ' + 'ilThumbs + ' + Me.ilThumbs.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit + Me.ilThumbs.ImageSize = New System.Drawing.Size(96, 54) + Me.ilThumbs.TransparentColor = System.Drawing.Color.Transparent + ' + 'pbExtraThumbs + ' + Me.pbExtraThumbs.BackColor = System.Drawing.Color.DimGray + Me.pbExtraThumbs.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pbExtraThumbs.Location = New System.Drawing.Point(176, 8) + Me.pbExtraThumbs.Name = "pbExtraThumbs" + Me.pbExtraThumbs.Size = New System.Drawing.Size(653, 437) + Me.pbExtraThumbs.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbExtraThumbs.TabIndex = 2 + Me.pbExtraThumbs.TabStop = False + ' + 'TabPage4 + ' + Me.TabPage4.Controls.Add(Me.pnlFrameExtrator) + Me.TabPage4.Location = New System.Drawing.Point(4, 22) + Me.TabPage4.Name = "TabPage4" + Me.TabPage4.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage4.Size = New System.Drawing.Size(836, 452) + Me.TabPage4.TabIndex = 3 + Me.TabPage4.Text = "Frame Extraction" + Me.TabPage4.UseVisualStyleBackColor = True + ' + 'pnlFrameExtrator + ' + Me.pnlFrameExtrator.Location = New System.Drawing.Point(0, 0) + Me.pnlFrameExtrator.Name = "pnlFrameExtrator" + Me.pnlFrameExtrator.Size = New System.Drawing.Size(834, 452) + Me.pnlFrameExtrator.TabIndex = 0 + ' + 'TabPage6 + ' + Me.TabPage6.Controls.Add(Me.pnlFileInfo) + Me.TabPage6.Location = New System.Drawing.Point(4, 22) + Me.TabPage6.Name = "TabPage6" + Me.TabPage6.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage6.Size = New System.Drawing.Size(836, 452) + Me.TabPage6.TabIndex = 5 + Me.TabPage6.Text = "Meta Data" + Me.TabPage6.UseVisualStyleBackColor = True + ' + 'pnlFileInfo + ' + Me.pnlFileInfo.Location = New System.Drawing.Point(-4, 0) + Me.pnlFileInfo.Name = "pnlFileInfo" + Me.pnlFileInfo.Size = New System.Drawing.Size(844, 452) + Me.pnlFileInfo.TabIndex = 0 + ' + 'chkMark + ' + Me.chkMark.AutoSize = True + Me.chkMark.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMark.Location = New System.Drawing.Point(4, 559) + Me.chkMark.Name = "chkMark" + Me.chkMark.Size = New System.Drawing.Size(86, 17) + Me.chkMark.TabIndex = 5 + Me.chkMark.Text = "Mark Movie" + Me.chkMark.UseVisualStyleBackColor = True + ' + 'btnRescrape + ' + Me.btnRescrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnRescrape.Image = CType(resources.GetObject("btnRescrape.Image"), System.Drawing.Image) + Me.btnRescrape.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnRescrape.Location = New System.Drawing.Point(310, 554) + Me.btnRescrape.Name = "btnRescrape" + Me.btnRescrape.Size = New System.Drawing.Size(98, 23) + Me.btnRescrape.TabIndex = 7 + Me.btnRescrape.Text = "Re-scrape" + Me.btnRescrape.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnRescrape.UseVisualStyleBackColor = True + ' + 'btnChangeMovie + ' + Me.btnChangeMovie.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnChangeMovie.Image = CType(resources.GetObject("btnChangeMovie.Image"), System.Drawing.Image) + Me.btnChangeMovie.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnChangeMovie.Location = New System.Drawing.Point(429, 554) + Me.btnChangeMovie.Name = "btnChangeMovie" + Me.btnChangeMovie.Size = New System.Drawing.Size(107, 23) + Me.btnChangeMovie.TabIndex = 8 + Me.btnChangeMovie.Text = "Change Movie" + Me.btnChangeMovie.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnChangeMovie.UseVisualStyleBackColor = True + ' + 'btnClearCache + ' + Me.btnClearCache.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnClearCache.Image = CType(resources.GetObject("btnClearCache.Image"), System.Drawing.Image) + Me.btnClearCache.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnClearCache.Location = New System.Drawing.Point(751, 66) + Me.btnClearCache.Name = "btnClearCache" + Me.btnClearCache.Size = New System.Drawing.Size(96, 23) + Me.btnClearCache.TabIndex = 4 + Me.btnClearCache.Text = "Clear Cache" + Me.btnClearCache.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnClearCache.UseVisualStyleBackColor = True + Me.btnClearCache.Visible = False + ' + 'DelayTimer + ' + Me.DelayTimer.Interval = 250 + ' + 'chkWatched + ' + Me.chkWatched.AutoSize = True + Me.chkWatched.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkWatched.Location = New System.Drawing.Point(96, 559) + Me.chkWatched.Name = "chkWatched" + Me.chkWatched.Size = New System.Drawing.Size(75, 17) + Me.chkWatched.TabIndex = 6 + Me.chkWatched.Text = "Watched" + Me.chkWatched.UseVisualStyleBackColor = True + ' + 'dlgEditMovie + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(854, 582) + Me.Controls.Add(Me.chkWatched) + Me.Controls.Add(Me.btnClearCache) + Me.Controls.Add(Me.btnChangeMovie) + Me.Controls.Add(Me.btnRescrape) + Me.Controls.Add(Me.chkMark) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.TabControl1) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgEditMovie" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Edit Movie" + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.TabControl1.ResumeLayout(False) + Me.TabPage1.ResumeLayout(False) + Me.TabPage1.PerformLayout() + CType(Me.pbStar5, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStar4, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStar3, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).EndInit() + Me.TabPage2.ResumeLayout(False) + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + Me.TabPage3.ResumeLayout(False) + CType(Me.pbFanart, System.ComponentModel.ISupportInitialize).EndInit() + Me.TabPage5.ResumeLayout(False) + Me.pnlETQueue.ResumeLayout(False) + Me.Panel1.ResumeLayout(False) + CType(Me.pbExtraThumbs, System.ComponentModel.ISupportInitialize).EndInit() + Me.TabPage4.ResumeLayout(False) + Me.TabPage6.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() - End Sub + End Sub Friend WithEvents OK_Button As System.Windows.Forms.Button Friend WithEvents Cancel_Button As System.Windows.Forms.Button Friend WithEvents pnlTop As System.Windows.Forms.Panel @@ -1473,5 +1486,6 @@ Partial Class dlgEditMovie Friend WithEvents txtCountry As System.Windows.Forms.TextBox Friend WithEvents txtOriginalTitle As System.Windows.Forms.TextBox Friend WithEvents lblOriginalTitle As System.Windows.Forms.Label + Friend WithEvents chkWatched As System.Windows.Forms.CheckBox End Class diff --git a/Ember Media Manager/dlgEditMovie.resx b/Ember Media Manager/dlgEditMovie.resx index c8c24fb..34e770b 100644 --- a/Ember Media Manager/dlgEditMovie.resx +++ b/Ember Media Manager/dlgEditMovie.resx @@ -120,878 +120,872 @@ - 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 - 7G+9/wHCiDgwMrq1WwAAAABJRU5ErkJggg== + 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 - 4AAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== - + - 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 - 7PDNqBYAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T6XSS0sCYRQG4BEXERG46UI3yCRNnZmw/AGZFUagJO2rZSFEJi6MFtFNhAxBBSlokW7NQIlIKLvJ + FyJtBKEoqKCCfsPpO2pD1repFs9wfM87x81wAPAvzBDt3QxYdvOibzcv+KI3pjFWBzFDtJPrfQyTRgiT + BtjOia+sDmKGKER0xa2rJkB0vmd1EDNEgWxvwXfRCiiQFe9YHSQNQWLqC5FhW5AMWUPXFqv/yvi0lukA + tHnZ/xImo9YgGaZGbOHrEWPVAe+5oXk100PL+goeVk41sHyiKsEZs8/9akYL62f6FunAUlrftZhWw0+a + L6p3nuNulXTAc2Rsc6Z0MJ/USpypalW7pA7ch2K7dADNHRjsjoTgohbQbJx/m4nrAdH53bFPc5TgXbQ7 + ESU7pfekA99NxYTCZIyHMuGW1UHMENkjQnE8wkOZ8PvvwOwXHwb9PCCzX3hmdRAn50oUVCeloXgZx6m1 + U8oNg7sni3TTSi9muKt0sKsoHcAH/SGnaqhaqo6qp3dl0r8AJ8OsssMOduXSgb8D7gMxXmeO6KXG2gAA + AABJRU5ErkJggg== - + - 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 - 4AAAAABJRU5ErkJggg== + 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 + AABJRU5ErkJggg== - + - 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 - 7PDNqBYAAAAASUVORK5CYII= + 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 + l+AV3x3A/g9kt3I5oWO4VQAAAABJRU5ErkJggg== - + - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAABXJJREFUSEu1lntMU1ccxw/4QJclyzZ0ccsWYVkG8/EHGypCnLjFaTXZnBEFNT5xjjkU - dREpQ91UgiJuMdNNlBgXfMVNEIQC8qgt8n6Vvm7b2/ftbUtLy/5wMVG/O/cWLGTbn970c3/nnPu9v+85 - 555zUgKAvEheaHKh46LBs2fPxPj48ePp/iFPrs/rLhv2DZUG/OPxlQb9EwnQ+jjN5ZFhX9Hfjx69JeR7 - +vSpmFO8PXnyRCDyr2Cw2OjkoHLy0Lg8E9C6vPgvxnRqzgOjy41gYLia5po2wSAQCJCA359kdDhQzXKo - s7lRa+FRa6VxFBmN9bS9wcZDKI9/JpTrKHdZFwwcj5FAYNvISDA8ApeLI14Xt3rQ5sAljQUXB834dZDF - bxQhlqpZ2saisCvEBRWLy5rQM0EzRpnWCjU18Hs9BR6PO2zg5nky5OYlA9SgqIdBcS+DMxQh/tTP4EQX - g5RbZsy+YkMsJeGaBfltBvHZmFbQF/bo0e9wITDklXq9nokGPmrQa7VD2q7BkY4QRzs1KKD1+VcZRBbr - QYrUIhHFWsy+ZMDhhyHNmD6vTY1uO4eg738Musw2ZCv7sb91QORQ+wDWVKkQWagCOd4LcrIvxIleRJwY - wKo7KlEzpt+j6Ee71fFvA553EWEEbawVW5q7sbOlR+RrRQ8Wl/eAfN8JcrRjIvkdmHe5G1nKkFZgc1M3 - lBY7gsIUecZNEe+iBjwvURrNWFPfjrSGDpGMpg4sudkGkqsAkSpB8kcRyocUWEDN1zWq8GV9v6j/vK4N - LbSTgsGEjyysIh/vkrQYWHxSrcDKGqXICspqmRJv/yxHxHdNNOkotPzqSTl2NF5Ejvwodjadp9pWpNJ3 - GwxmBL0eqdvNhz8y53SSIRcnadQbkVwpR2rVA5Fl1Q/waY0C8y41YfLBOpAcWYh99Yg/X4fzXXNQ1jUV - FzpjsfJeDRZVKCBjTAh43VJh2p/vZKfDQbycU3JfZ8BiarCUJl9Kky+7p8CbRTTx7rsge6pAvqXsuQeS - VYup2RUobJmPc22v42xbHD6jBokVrajVsxh281IXx4UNHHY78Tgcknotg0XUYInQe5kCs8/Q3m6/TQ3+ - DPHVHUR9cwvTKK/tL8cPTQk4rZyFotZ5kNRUIKmyEdVaDYJuv9TD+cMGFrOZcFaLpE6tR0JlC5Jp7z+8 - Qed72w2QLddBtlI23UbM4ZMoaExAfsMCkePyOPwof5fG93FMvhBH5ItwSpmM37t3SK/3ZocNTEYjMRkM - EsZgwO7mTqyof4ikK42IzryOGVk3Q2RWIqXoII49mAXp/dhR4miMp8QhryFWJLchBjmyN6T7ZNFhA71O - R7RarcSg04E1GqFjWehZC3R02TImKxi69Mz0MJOrq5BbuwB5ssUiOdVzsa96jhgP1yaNtifjF/kuaaly - 78QpUg8OrlINDECv1YKlI7FZzHDabeAcdricDhGec8FiYykm2gkV9t5Jxvabccj64yP0M+0wmvTQ6gfB - MtYCt2MobHDwwAHS19e3VKvRQDDRqNVg9HoYqZGZjsZqscBmtcJutcFBD0SOnjcmlsHWqylYUxqHjCvU - QNMNE8PCZDAK+qxdmZlhA0Kv2JiYl66Vl98VkrImk5iUri7QPQK60+Fxu0XoEQCfdwh2zoa0smVIPfcB - vihNgc6khtPhREtzM7MwMXEmTRn5fB9MIoT+SPT0qKj4FcuXZ2ds2HAqPS3tVMb69cW0fGZjenrJpowM - gbNjbN64sWRualzJjMRXSuI/fu/0pvSM0+vWrs2bGR2dTHO9QxO+PN5AcJgUQcgUYTSjF62KxkKbwFRK - 1DiEutA+WegtRdAL1xT60lRKeAQv8m/LP/xYKQAvwoNdAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAHWElE + QVRoQ9WXXWwU1xmGFxPUqpQWgm28OzO787d/3sVOigO2AaUQkippUrXcVL1L1ZtWlWijVooqlSRAIQU3 + 4acNCAQiAdfF2DQkLWAwDsHBMcYG4/Wu7V0DSSoh9bJpFCpVak7fz51Bs+Nvl9k1VPLF49l555z3e79z + zo5tnxBiVsOKswlWnE2wIseEKn83F1NP5+Jq14Qmb+DGzIT0/AULJ0zl9Vyt1pWNhNoyVYvj3Dg3rOhm + PGFuuLWuQXyy/pvi4/WPi4+ebhITSf0oN7Ychny+qlxDPPXxd1ZN1fjke4+Lm6sf+Wc6JDdz452wopNM + EuEReHLNMpGJhkQ6EhTZ5qXi1rMrxVidOeMmLvt81dnGRObWc6vE+DeiIh1WRCapi5tPN4obTzR8NqIH + V3LzbFjRJpU0f3bzmSYx1pgQw8oSMWJIUwwHl4h0fVjcRBPpGTTRi5Ufb0yO3vh2sxhB8OuqX4yYsriu + B8T1UI3IPdEgcuse++yaqhRsghWJYYSfRPgMwg/B7BqMnVxFsVS9KW48t1Kk6sxWzqMY7yF8pimZnkT4 + 4YgiriI0V2MCTWTRxKCmsMdpmkAM14V/kMWxGV2REAPBGjEIs0HDBbQraGy4zhQ57MTwUu87cQ7HZrQx + mckh/BBWflALTK9h3V8J+cXY2mVifN1jn15WlajbK+/GZuzJ5RMjjUnRj/ADMClGPwpcRRNZNHHVQxOn + ET61Ijk6gfADCH9ZDbC+d9H/VyND38E1Dfvcfnk3Npejodt9WJUPYeCFS0G/GEQTE2hisEgT7/h8ldet + 8P2mIjzX0KUpBuLqMbdn3o1NXyTUfgkTS6GXdgtNjKOJAaaJE1j5ayuS6bFnmkUfwn+Aled8ivFhTPux + 2zfvxuZSXdTfG1YmL2JSbwm8j63ut5rodzTRjvBDCJ/Byvci/EWE5+YXgnJ8EA52XNnTMseZk8i7cXIx + oQcumPLkBbw2S6EHO9GHJjJoAtdDrT5feLApOZrGysNPvKf52XnFeD+sdHQOnmRzsqLNhbju7zHk7Hmc + P6/0gHP4PdG71BSj9JZZ/ci/U3gdw0d047XIzSlGj6l0cNlsWNFJT60hdRtK7hzMukugS6kRF7ETKTTR + jZU/i/DcuEJQvfP3CE+wopvuhCl1GfJkF0xL4QzO+ikcqTN423DPC3EGnEX4vUwWN6zI0ZUMB04Zcu4U + zB80pxH+AJOBgxULcarWCPzFVHLvosiDAv73PDZOWLEY78ZN+SSO09uaJE6i4P3ibfCOUVp4ghXvxcm4 + GTihy7kTaOJ+8WeEbz//KVuvGKzohc6Y4e/Q5dRxFJ8hX3QYyrQ/EbzCil7pjBvLjmHrjyFIubTr0m3O + 2yus6IXjcaOyTZeG2vCKnCH/aTPkN7kaXmDFe9GeMKtadSlzFAHuF62G7Pn/CSesWIy2mFn9liZl3sQv + qfvJW4ReehOsWIijcaPqsC6PHkaxB4YuH+FqF4IVOY4kwlWHNCl9EEUeNIdK2AlWdHO41qw+gPD7Yf7/ + 4oDHJljRycFao3qfLqf3wbQc9jKaZzw0wYo2+2NG5RtY+T/ArHykL3jdI1rxJliR2BczqvaoUmZ3KCDK + ZY8m//GNsJqET5Z77hX4FGyCFffWmlW7sPI78T9uuezWpLt/mP0+okm7VGmSG+eFXQB+7NtpmkDsNIOt + r2FSubyuSZ3dd/6R57k7pkuvqYFJbrxXdkW0Hzk9ibwbm5aQ//YOTCiHFsfKu9kZNwItaiDLzfNEsOZP + bs+8G5vfalLuVUwole1Fwtu0RFSpfH95v9sv78Zme1h9fismbA164zdgG8If+fvfWD8326O6tBXHifPi + IH+M//x3yWjS7ZV34+TVqPHiZkz0whZV6uQ8igH/wJZQIMf55aHUiC0h6c6ORHQN5zNNcLItZry4CSav + FGGzKh3n5nphW0TzbwpJWc53CoTfpEr/2r40vpabT7Ciky1o4mW8i1+CoZOX6apKJ+xxc32+h8Bc6zqv + AM4xc2nenrjph/8Ntz/xiip9vqO+ll15m6kfMLMDfBnMB18HiyA/DCp+YYS2bkQTv4Yp8RI+/zLoPzt3 + 3rxqPJcwVgeGhekgbOHU7HE0R8P8RU9VL370V6HARxvxvSP/jVQnFLjz04i+Hs/nYNwiQJkoG2WkrHkN + kLAQBEEM1IFlYAXGEYnvSzWbfx70p15Q/OnnZf9BX0VFM/TVGPMkWGddn7Ku9udvWbh1utKcqXnwWR5Z + MP/Znyj+v74g16Q3BP19a6srfwg9VoH6GENZKBNlo4yU9SFnA7StXwVLQAjQStHgJKiH0aMgAmpB0rou + x7Nmi5UWqyyoMQ77uT2e5jbRFX5UIwYSgGpFodcDykBZKBNlo4yUdeoITjVgNUFU0ANA5/VLgLbrK4C2 + bgGGEF/DZ1oB2taHLRZbVIIqB9UWTo3G2OPt+eS1cA6OiVWDAlJNqk0ZKAtlomyU8W7uux/KhcychvZ9 + IQrNKxdWnE2w4myCFWcPwvdfTW8rui09MsUAAAAASUVORK5CYII= - + - iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAABNNJREFUSEu1lFtsVEUYx6fFWCl4jeD9Ad5MCKKJBtuAUA2pCw+GkEAvFEQfhIAGowGy - gmC0gqIt+IQUEg2oRLTQsnVLpS3sYi+2tZe9755zdvfc9rTbdtsHDA/w95tpd7dblTc2+9uZ+eY/3/+b - mbOHAWB3k7uanBcuDG7fvi3amzdvFoyOWHtHhxOnx5MjJ1OjM0menBjNJUXjGZpTE2PJI3/fuPEkz3fr - 1i2RU/zwAZE/OZE6HNF0+DQTAdPKEKT+nRBaw4JkJpAaH3NQroIcg4mJCZYaG1suqSoaIjouKSYcHDmX - 3yjGmR1Pj+tpbdgwMZlKVU1OTmZ3YBg6swx93VBMQ51XwYkhOYeTHhmnvRK+6pNwtFdGnUcSzNad9kXh - 0U2MDlsHLCuRNUiYJhtJmLaBmIojvUEc7QtlqO0P4VBXEK/VK3jsWxkLTsgo+lnBvushHOvP1X7eG0C/ - amB8ZNg+PGzlGiTJoC8ah73Tg4+7vIKD3V4coHbJd0HkH/WDHRkS5H3pw6JTYez7w4tDpEnr93V40BPX - kUr+j8Gfcgzvuvvx/vUBwZ7OAaxvHET+4UGwz/rAqv+agvp51QNYd2EQe0mT1u909aMzqv3bwDQNxnfQ - IUWxpa0Hb7f3Cra7elF0thdsfzfYwRkcov5H3Vh6qgc73FNazubWHriVOFL8iKwZR2QaZGCaNndYxvrL - ndjY0iUob+3CynMdYHtclNCdC8WKznaggjRp/RvNHWinIrlBziXzpyhpGrb2YASvXnKhtMkteJ1Y63Tj - 6ZqrYB+0ktE0H7bikep2lDqmNGn96kvX0BKSycCyJxJm9pJ1TWMjhm67Egij+OJVrG68JiihBWuaXVhS - 14b83U6wNO85sfj4FaxxuoQmrX/5YjucVOS4lbDzU8n8kzVVZcO6ZvvdH0IRGayi5JwShwtPfdEMtqMR - bCexawbbG7HgEydeaSADMuH65WTQFIhgLGHaDV3PGqjxOLNU1dbiC5HoKlby5FTdohqqetsvYO/8+t9s - O4/HP3UILV/zEhk4KEfS0O286MwOFFlmelSxOT0BvECiFY5rePEcnfe2n8C2Em/ega0/4rnvr2BlkwvL - LrShwRvEiKba4/FY1iASDjMpFLIFQyFsb+vGKrrY5+suY+6WMyh864c7MrfqDBZXN6Ck+To9TZ3wSDK0 - WMwei0azBgG/n/l8PlvI74cUDsMbkeCLyPAEqQ0rAn8kigBHik1BfR4T8xEFASWKeCwGNapAikTsRK7B - 4MDA2qHBQQR8PtBuEFNkqPEYdDUOXYvD0FQYOkebhvoU43MaaVRKTkeNMK31eb37+bFn7qCpqYmRYwmZ - gOP1eEC7EmJZkhBVFNCWBbxKTnrM57iGjhnBQECso5fnrtqamqwBo8+ypUsLLtTXXwyTkMxEUnq6qEIN - 9EzDSiRgWRboFZCBEok5ruHaOOF2uUIriosf4jkzO8hnjL7s0fmFhc/aSkt3V5SVfV2+aVMNtbWVZWXH - KsvLj2+uqOB8U1VZKZgeH6c5Pl/L2bhhw4EnFi4splzPUMJ5GYM5FCHuzaMgdQumKaR2PvEA8SDBq3p4 - BjzGuZ/g6+YS9/E1lGseMWe2ATcRWyEjTh6RT8yZ5h5qZ5Oe4zquFznScIN/AMHxC1EO7YAWAAAAAElF - TkSuQmCC + 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 - SUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAMV0lE + QVRoQ9WYaXRU5RnHadWjx12rttaeWq169Lh0bEVrq7a1/SC2nqMiZAEihM0ERARERQVUrCKLFtlkUdlF + CYiIKGtYsgdCdrKRZDIzmX0mycwkmcnk3//73nsnN3cGxXzjw4+b+0wy9/97n+e+d4ZBAM5pEhbPJRIW + zyUSFs8lEhY1HLuTrvEXZDzgz8+4nwzW48vLHOzLJ+JIvJIMFeXcTTyC3IzBnpyMwW7iOvacQk7G/c6j + E+8rnX/bJYmufbYkLAqCVXPndVuWusOtHyPSugoRu2A1WaPgWKvyiYLzM5V1iLgE68kGRNyCjSqb4uhq + XWv2lc6ZkCjD2ZCwGKyc/WbEvhJRz3r0uD8jn6rHdehhTdSj3g1kI6K+TQr+LeiVfE62ordtK6JtX5Av + EW3fRrLQ274dvR07FAJfkZ1AaBfCFPWWzB6aKMuPEVewH5h0eXfjAm/UvRY9zjXocawiH6vH1awJWHfy + ddcnKgkEPaqgl3IC32ayhXxOWQEF/ULwCykUbF5RbMxyNsQVXIcnmLqaFqihOT725RyhpehpXa5gX0FW + Ek2KxKSISxPTpPRilNKLSanNQPtWCqyCs6W2wOtrH+v3+a4y5joTcQVn9jhTV8O7scAR20eIWD8kSxTE + uW2pKrVMJ6WK/YRuKZ1aD/g3Idi4DE5LAzwePzxud6vb417s8XjuNuYzElewHxxr6qx/Gz22JYRhLR8g + 0rKQLOLPi5VziZD6n05KE1Ol9N1Suxknpnar1/MZAg1L4LDGBOB2uwS9ZJfX6/m3MadGXMF2IN3UWTuX + wRiSAcMMH25+j8xHpPl9RMwLVFSpFiGliVHKIqT0YopUn5g2gn1ive7V6Kj/UAq43T64XTK8kS2BQMd5 + xrz9TgSW/RSomR0LFTbPR7jpHQr8l8d3eRRoQpqUJqZJaWJqt+QIqlI6MWUElyHqXIFAPRcq6EFXVxg+ + rxcupxMul7OfBDuRYszb70TQsneMKXTqNQZgIAaRwU+/hXDjvD6EkERIESnVJyblpJQqpo2gQD+GqljU + /hH81e/C2lyLUGcnent7EQmH4fezGzoBssKYt9+JoPn70aZQ9SvoMb8nLy4DN8yhxFzypooQeluHXkyV + iokJKaNY/zGMWhejrfodWJpqYLHaYLNa0dbWhmg0yo50xTrh8bhnGPP2OxE07aFA5Uz0cOUjYnxE4PrX + yWyKaAgh0iBkjGKanCrUaOhWvzFUxHos89FW9TZ8LitXvR1OhwMWSwtaWlpkeAYXAiGfz3eDMW+/E8Hp + b581BSumU2Ae55sXEoFrX0W47jVKCISM4I3+QhIhk0hIJyXF+nerx/wu/BVzEGpzMgLQxTES4yPC6+6D + LVpGPXGFht0UKJ+KSCMD8CLdDNtdMxPdta9IwnVCRjBL5WzESD8xTU4ZwR7zPPjKXkdjXSWcThdCoZC8 + Dzo62ingkAK8gf9qzCqIK9TvSjMFyqYgIkaEK9fNsN2nplPiJR1C6OWYVLwYhRKJnaFrPU1z4S99HXZL + IxwOF0fHDKvVon8eHDfm1Igr1H490hQonUQBXowrJYNWT6XENEVEMoMSAp1UrSalIaQ0MX23NCGtW2+g + p/ENCryKULsbwVCXWG258tr48Hy8MadGXKFmJwVKMhBp4MXYBRm08nl0V72gIGQkLxIhpYnx9zT0YrFu + KVLd8n7SS81CtHEWXEUvwW41IxyOyPHx+fgsUAS8vB8uN+bUiCtU7xhhCpyYgIi4CFdJhqzIpMRkRUTK + CKao6MWElIqxY/3EKKWK9dS/gq7K8TAXLoLF5kaL2cwxsms7jzguMWbUE1eozEoxtReP487zslyd7ioG + K59IiQwVIaMJqSQU0tCE4qUitTPgP54JZ+lKBPwutHUEZGinU7lxSdTr9d5pzKgnrlCxLcXUVjhOrlBX + zSx0VUxBZ+kEdJY9hy5BuUKfkCpVMYkyAk1M61aiTk1FmEIhvm9dwQbYnCEEguIJHEU4EtbCCw4Y8xmJ + K5R/kWzy5Y9FV/VMdNbwxip/HqET4xA6OVGhdCKFNJ4bsFjk1BR4C8bDcroCTrdf7jzi4eX1ePTj86Pf + 0uIKpVuTTd6cMeisnAHxkSJYOhmB4rEInhivMgHBEoXQSQFF9GJlGn1SipgmJ6QyEanKhCd/Ajq8NgQ7 + lZ1HjI6T8y/C8wZu8nt9FxrzGYkrlGxJMrmPjkawfDqCla8gUDIZHYXp6OB90VE8XhI4rqIJqVIhjUTd + opBeKlI5Ea7csbA1VXPn6eGlgWAwIHcel/g47fG9pmX6IeIKxzcnmZxHnkWwjAIVLzPwJLTnj0F7wVi0 + FwrGKRRRSENI/RQxIjYGV046TteU8ANcK+x2O7vglV2w262oydvyF2O2RMQVijYlmRyH0tBxcho6ymai + rTgT/tzR8Oelw5+fjjYNCgmMYjEpKTauT8og1lU6Ho6jY2BrPgW31w+bzYrWVpu8H2y1h1C08u6HjdkS + EVco2DjcZD8wCu0nXkR76Uz4CzLgPfYsfLwvfLmCdIkUUlGkKCTQpKSYQUo3hqGScbAfHo2A18qPzZA3 + rt3OTjh9sOW/h+PLb37EmC0RcYX89cNNtn0j0XZ8KtpLZsCXNxGeI2nw8L7wHtMYA3GjCzQxv5DSi8W6 + ZZRSxILHOf8H01BbWQyvr01+7rHye4CLXyld+W8gd+kdAxPIXTfMZPl+BPxFL/AhMwOenAlwHRoF9+Fn + ++A94jkyWkpJYmLEICa7pRPTRjDAjcHKTtdXHUeLpVV+eLNYLPJ54Cl6C0c/vG1gAsc+HWZq2ZMKX8EU + +Iqnw32Us3pgJCXSFLI1EgiJoyrljYlRiEghKSVGkJsCNwbL/lFwWurgcLrlM0B0INoLduBNHFk8QIEj + nzxjav42Bd785+ErmgbnYc7qvlRKjIrhPKiRBqdBzB0n1iclxdROtXFjMLPTjpZaKdDU1MQvNF5GABx5 + c5C96NaBCRxeM9R0elcy9+jn4S6YBschzur3KWjdO5IifTj2q2hSejEK/aAY8XNjaNqTgqqTeXIbtfJD + XJHZj7r2KDswF9kLbxmYwKFVQ001O5LQenQyHLkvss1j0bw7GS17RsDy3QhYiY0rZ9s7glJEJ2XXpHRi + jli3RvUbQ++RNJzenYLa8kJ+jLChw+1A2l4XphZG+Ix5C9nv3zQwgQMrnzZVbhuOlsOTYM15EU17x6L+ + 62Sc/iYVjbsVmr5NRTMxU6qFQlJMSEmxkf27RRlFrG8EBZ7sURCdPlWWj2azHfaafTjY0o7Dti4+4Gbh + 4MI7/27Mloi4wr7lT/2xdOswNB3MhPnIVNTvScep7Umo2cnV+joFdaR+VyoaBJTSxJqIkGrmBiDEhJRe + THZLJ+Y6OBL1O4ejoiQfDfX1KN8xGvYDGfBw4Xi9wHdLn77emC0RcYW9H4/8ffHmYT31+zPRmP0CTn0z + BuVfDkdlVjKqtpMdXDXBVymoIbUUE1KKWIoUk1IGMTPFYmNIIQc3hhq+T3l5Dapy1qN4w5Bw0fonik5s + fOKbnE+THjTmOhMJiznrhhbW7stEQ/ZUVHw9Bic+H4aTXyahlJQJtiWjgkKCSlWqekcKqil0ikKyW6qY + 6JbsmL5bFLJ9NxzFWVNQeHAjijY/gyNrnvxUn+G8QYMk+loi5D/qL59PLuKPF6x87V8PF2xJ9VTuSkfZ + 9pEo+SKJAsmSUgEFyrJSUE4qtqdQgruJEJASqewOV3dnKkcuFXX9BEZQQKFww1PYtexJZK/5D75b+nhd + ymN3/YHXvpbcwBzXk1+R68g15CpyBbmEXERE1n4ConAl+S25na/9bsiDNw5ZO+fRz3Z88Pix7Ysfz8la + NOQYyclaOCRn28IhudsWkIWPxchSyNu+aEiuivg5b8diha8WP5ZPCnZ+8Fj+hrcezV3y0iN5q2b/89j8 + Fx5afdOvrx7Caz7Aa/+D/I08Qh4iDxJR/xO5h9xOREaR9Xy9wHnkUvJLciO5VUiQ35CbyS3kNiLk7iB3 + krvI3eQeIlZPYFK59wxor2u/L/5WvNd9vOafyf1kMBGB7yUi9F1EBL+FiGwio8gq/6tdCqgSgp+LF8gF + 5EIiRupicgm5lFxGriBX/oxtJVer/ELlGnKt7nidir4mjtrvX81rCMSIiFUVY3I5uYyIcbmYiJERWUQm + kU1kjOWO/TBQxJvp31A7PxNn+ruBkrB4LpGweC6RsHjugEH/B6e1dHr2M+x9AAAAAElFTkSuQmCC - + - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAetJREFUOE9j+P//PwMlGEXzfQdj37t2Bs24DLxnZ5B5z96oEFkebsAtV7OIKwaq/y9p - Kfy/bqW7Bd2QG3YGjZd1lf9f1lH6f8PesPf/wZmMIDVgA656WHGd1lH+f1xRGoxPqcv9v2iJMOSyrUHj - aW0loJwUGJ/SVPx/3kzbFG7ATk4uxgOK0j0HlGX+gzFQ0SE1uf9nLHVXnLM3rDmqrfh/P1AMLq8kvf+A - rAQ33ACYc3cqy/TuUJL+vxOIdyhI/d8DdMk+LcX/2xUkIWIQuf1LNBVZYHowYmAj0JANQIVgDLR1PdAg - GH+jkvTe+doqrFgDEVlwhZL08RXAsEDD7zaZGsBtxumCBYrSDQsVpP4A8X90vEBRaiN67KB4YYaidONM - oEYYngFkgzCqmPSW/0+/w/WBGRNU5RkmKkg1TJSX+g/DE0BsBenNkxSku8BsZKwgtWWSihwHPBZ61RS4 - OuUl/6Ph/bX6qkwgRV0KUr0daPJditJmKNHYoSSb2AS0pUlO8j+Q3vctwBusGYab5aW6wXJA3KIoM/2x - sxVYnoGZAYwFgBRvnKRofba02BZuFmYDIF8HKG4MwkA2iK+QIik6N1NafCGQLQLEfHAXABUxAzHYT2BB - BgZOIJ8XGQPFeJDk2UB6MFIiOdkaALyqHwCXXFYvAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAAQNklE + QVRoQ9WXB1QV19qGN1WRqoAYmihIVRQVMLbEmNiiMabca0zslSZSFJQmXaqiHqQqAkdAOkgREaSDAhYE + 5GqMmlhiiw0FLO//zYkmxjO5MXfd/67lWetZc+Zde2a/X5k9exiAdxpe8V2CV3yX4BXfJXjFdwle8fHT + F7/R++wFu979lEU232b72++x0OO3mUPFDeZWc5vZV9xlDpW3mH/TQ7a18bp87KnQSdsaQxz8ahZGu5R/ + kbO6eEEpURJUY5Ub12wVk3LmW6eUM2unCjv2KO0/m8SSzoSwtPat7GBnDMs6l8NyzsWy3K4ylty2l/30 + 4CLrfQ7W8+x3+Lzyin8VgD0F4FFLgVQ+Zl8UdltNzrgo+Cwn7NLMrGAY7a+AfvIFGKX+DKMD92AovA+r + zHYsK4uAe9WXCKobD0GT8Y/RzQvik047T05vD5Y42Jnwvwsg7MRt5lp1k605cmfsnOz8gnlZHs8cytww + o+AkzDOfYVzWLzBLu4lhyTeht/8nDE26RgFdFwUyMuMJZh66CLvKNGyr/ycSmwe+iG+xLEtrD56Q01VK + AcT9/wZwoPM+i2i+029K2jX/IYLSnqjGOThyfik8apKgnXABg6PrIBVxBrKRx6EuKIFUWDsGbG8EC+uC + bEQzBu0qh2zUeegmXMTs/E4kn/FGyqmJ2N2k/nTvyUUReV1J8nn/qqQAEv/LATx6ynafvMt2tt7VNN97 + voIFX8JXhXVIP7sOCS0mWFs0Bx+n2GJk/C4Mi0mFeWww7EumY+ORDxFeNwxzMraAhV6A4o5qOp6DTHgL + 5methU3pGiScdEZ6my21lSbimic1HuxMH556VvjfC6CHArjb85xrHX21He0dUuGXMedQO3Y1z8auBhUI + GpXheXQcpiZtxKTkQHyX9w3kwqoxJjEWO+qHYFejGvyqTDCQM7/tAgXQiX4RLQisNoFbuSUi6tUR0zwN + aW3uiD0xGpH1+j8Iz8aMuvbwKiXvPwyAM/0K7rzzTo+W3u6ODtmIi5hT1ILQ+vFkXokMaoqIP6EAz4rx + +CZ3Bb7NW4LpQm8w/6tYnr8AQVU68KkwwFBBJljgFbCQNjpexNSUQHhVWuCLLFt4VxpRGxkg5YwzYo7T + vRuNL1745bTBc5qbC+IVb/rk4BV/etAn4ga1zuX7fbJTkrrKpLe1Y9SBu1h/eB4EDQqIqNNBZJ0WtYgO + vsleCau9odDYnoOZ+5dhrnA5pIJPYVHGLGw6pIN5wmVQjKiGdWIAlCMrKIAuDIo4Br9jpvg03RlTqXI7 + qZoR1G5Jp9dTOxlg38np9fd6uuWfPAXr7nsugs8rr/jDvV52ibj2qI/ZFl/ZynxOwTj1Fhbl2SGiVh1h + tUNF7GwYjJUFX4L5/AjZwNOYIdyEkTvcIR9cDOlg6vN4K0yPmQ/JwDZIBbVCIyKD9BNgQafQP6QeCqG1 + GBO/G18eXCtKxo56VdgVL8CSkkPwr3oPBec2Rd598oL93P1ABJ9XXvHS/V52g1aeIxfvj5X1benWjbuE + VSWOCK9VxbYaPQTXDBMRUqtL5R+JgaEVMIneix0N6vgkdTNkAslkQAcGBSZBOfAA/W+nrLdSW3HtQ0e/ + dlgmRGBM3C7o7zyA7fUaCK3Voes14FgyiRaDIsS2LERIzeCnx6+WTjl/9yd27vb3vF55xZbr3azj9hM2 + M6Uri/l3YW5eCsJqVBFUPRyBVfp/ILhmKKYnu8P18AQyoU1oQS9KCLaVzPqfIU4TFJB/8+/4tmHErjhM + iHXG3JRllAg9UTI8j44WJcahaCIEJz5DaJ0FPVsbS6uvXGE1Vzp4vfKKzde6Wcrp22OlfI73aUZ/D9uS + z8i8NnyPjeDBEJvLR1Mww+BTaUIGdLEoexGZ5DJNxv2Ovzy+gS+9H7xP4sN9W6gdtci8OT5JccXs1A2Y + e8AGxoIkfHdoN91XE/ld2R9WXW7n9cortt54zL7NPB/JfFoxbE8znEvG0VKoTwaNePE9RtWo1sVXGUug + HZGOeanLobotn56NFqpE059AgW09AVm/emqbKZi2zwMD/CswOCQHSkGHwdw7MDMllRJihL2tqxKrL3fx + euUVy7+/318vrPncAFp5hu4ogFOJBbyOjoBHubEYnuVGtJroUtknkfFVUAksgF7obur/g5RhyrRPw59A + FfBqxjeZ39BKpgHTqFjI+VbCYEcs2KYLsBBEkvlRWFPgSPf+x4/Vl4+o8HkVEzjC665aSnvVvVAO7YB+ + ZBycikfD/bAxNpWaEKa/4UbnriVmmJFkiwG+5ZDxqYaUN72wPKh9vCjL3nVE/Z+z5SQ+SNyMAGo/y5hg + rC2YiU1HxmJ2igNWF8yittVFWN00fJm+iF5yhdP4vIoJHKtzz69hW2ogH3gKBhFRcCw0h2uxEdxLh5Hp + 4XApNhbhWaYFq2gvyhg9rFsoqx5kyrP2b1AHSY86GG2PxrqC6fA/pkcvvRHU9zrwrdSnChtSFazhXDoW + LqXZrnxexQQOa0FrBBeAjM8JqAcI4ZBnhlVZ1jDdHorp8WuxMut9rM62grVgM/p50otpM2V6C2X+rami + HqcW2kSVcjqHKfEu8DymBafDZoSp6LipzBSby4yodcfBq9wUvhVzEvi8igkcmoH1QkkPmsijCYP9UuGY + PxyWO2lD5kKZdm2FZuBejNnu++u5O43bTIb+Dm71MPIXwj7OCTYxtAcqnICCyiHIOaojIveoJrYdHk6L + hym1Lte+YzgK+LyKCRwKXtX5zL2SJqrFQJ90rD5oDG3/RDJMGdtUCyWvHOgGCug/ZZ4b93dwq4KEWwUa + DlkCrUOAE9pAoz7QYEQY/kqjEX44pgHnQ8ZwKhpF7ToazkWmJXxexQQORc+qfLbxKBmk9nCpx/tRqzA+ + 0h6GwX5Q80mCQegeDPTOoWpQ9rkxf4eNVZB3L8aF4qF4fpTh8REOiddg6C2Xws1yFWwsNIZD4Ug4Fphh + faHZ2weg5VcjZC5HaLJyMlkBSddyTN7xT8yNmUj/KyC3uRjG24LR3y0PzLmGxlCw3Ni3wbUSA9yK0ZWn + iWeHGbpLpMXoLZHCteJ+cM4zhW3eKNjlUgD549++hax3NIYzR3qZcEFwOB9D/42FeD98PvR8aavsVA3Z + jfnQC4iCebgvJFzKfh/7VzhTAjYW4VyWFp4WMTwqlBGjp1AaVwvksD7bDGuyzbEmy4SqMTeez6uYwGGf + 3bma2RfTZBTEKzZUYZB7LCyCvqYA6EF0KoekUynk3dIg61rwx7H/DrpOzrUQnRla6CuQwMM8WTGe5Mng + pzw52GWZYkWmOZalj0DYMQ8XPq9iAkdU1aXxUo4lz5ljCRl/RSkkNxRDY7M/ZJ0yIEPn6p7JkLA/BmZL + Aa2nKvw29t/gWAY553x0CrXRlyOFh1n9xejNlsG5A1r4ImEmlqaZYLHQFDH1O9/+RVbxrzv99X0qOpnd + IZqQKvGK9aWQcsyFiusu2OV8hEj6Jlh5cB7GhflByTWLAqFnwbHoj9e8yfrDkHPKQ0eyDnozpfEgQ06M + noMyaEsajjmCeVi43wCr0qZeyW0rVebzKiZwtF1/yJbuPxnOVtND6kBBvI7dYShsyEcEbaPjmlWQ0KKE + xFZFBFQYY5gPLa2raGWypVZ587pX2JdAzjEHHft00JMmg/vCAWI8Ib0tUR8j/dzxWexQeBTaxpd2Huf1 + yiuevnqfpbdctZC1K+hjdrSrtKceF1FI5oqxYO8S+vh4D9vrNOlLSlv0NSU4roaASkPMil0Lbc89YDal + r133GnZFkFufhfZ4XTxJlsW9/fJicPqZWH1ou4Xh0z3GSGhInVrY3sjrlVc8ffUBO3+rm83d3XCQrcgm + 0xQEh00h+q3PxNajJohs0KSPl6G/EUIVCadgBCdURf+HelA1VtCLy4ayLrqezNtQC62jZ4CS0rZHD4/3 + 9sMviQpicPppgRH0tqyDTdbivOazeez6iUher7zilV8es5uPelll160xA2xyH7K19NKyyaXJqaXW5eNb + 4ecIr9eiTRf3hfYm3OemHlVpEcyDfKHklAK2thBShPGGaJg7R8HaNQznBNp4GC+Hu3GKYjyMl0eX4D0s + j7RCTdEym8d5Hxv0Nnr35/MqJnBwAfz4MogNaac82eJ0Mk6V4FhdgEEbkmiTZYqAan3RFxkf/lUG2Fan + SxsycyzNnoG47R/i/m5FPNgjj/t7FHA3WukvUKRxis8f7FHq487vCcdG83kVEzh+ftgn4vajPnbt3hOZ + j0IqS9niNLA1tNJwLCvCB1G2FIAOuA8ajyMm4tDHzhY6eh01hAcFeipNAc+j+uPOTjJH3Nmp/JfcJW5z + RPbDvVTLfXxexQSOvqfPRbx48ev5hZsPhxi6F7WxxQeoAvSltSqT+jsHViEbaJNlRpstU9GRD5ciUzgW + m2GC/0Yc9rdEX5QsbkUOJFNvx61wedwR6DY9ad2t/qZPDjGBw2jECGZsaMgc7B1YXV09e0FafOP1YZpO + BWfZd0KwlRkUAAXybTGsQ2yxoXAEbHNHimFHOBUaYGHyNLClhVBdlYKj/mPQF9EfN0MH4dZfcHObAu5E + GzV1Z88b8uzULl6v/OJrP2kJCTZ//gLmEBzLYiq6NKaENxxhy6mNllNLLcmBvrsPVmcaYlnaqD+wPN0M + K9JNsSjZEvpbaP+0lGu9bKit3I9yHwv0hsjh52BV3PwTbgUqoDdxTNPT4mUal/fNZNcqgvi98olSZPwV + ElwUL3+Ghkbs0+9sZcbbCbwVbPIecwEMtIvE14lm+DphJL5KGEVHMyzcZ4gv4kZD09kfUstpFVpCFVtG + leNYmomBK5JQ5jUWPYHyuBGghp9f44a/Gn4JVME9gUVDitsM9blWukxVXoYNUpTj9corvh7Aa3CxSBKs + n6QkM/tggcXw1XF5CjaZfZPCP8Gs3UaYtdME0yPHYULQbKjbB1CLUdaX0HOzNPWPLM6C6kohyrdOefHY + Xxk3tqr/xqMAVXRsNWmwNtbS4OZ6/cfnlVd8aViKkCOUiEGEOjGE0KIodGiIupK83BBN848/1/tyjXDy + 1ik/jvRe/GLAujgyScvtEnpvLKfnRARXgQxIrMiE7KqDUFmaeE15rrfQ1PqjxU0u+nU9AYPxwHcwuGPr + ZpMmYx11A7p/P5pLkeCOkgSvV16RBksQ8oQOYUpYEFbE+8Rk4gNiGpXkQ7rvRGkJaWtFpUFz1AzHOahY + Lto1eLZrnvwstxqZGW5NxHH6X6s+x7VAbeJCgaqR9QZlFbVP+0lKWNO1lkMGKX8cNF8voXCpRnPI53rx + WmrKk0kfSfcfTRgSGoQsweuVV+QGE/0JLut6hBFhRpgTY4nxhCUxgeCCmkjBTCDG0X8LaRpDcGNEcP9f + ahbcGKqgNXcN8T6dj6fpzAhTwpDOuYRxjCC4BA4kZAher7wiN5jgqiBNcNFzZeTaiasKV1ZlQoXgbq5K + qBFcsByDX8Jl7nVe6a/Gcddwrcndg7sX16oKBDcHNxc3J2ecax/OC69XXpEb/DfhJvhP4LvXn8LnlVd8 + l+AV3x3A/g9kt3I5oWO4VQAAAABJRU5ErkJggg== - + - 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 - ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + 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 - - 121, 17 - - + - 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 - ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + 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 + WqFsAAAAAElFTkSuQmCC - + - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAZlJREFUOE9j+P//PwMlGKfmJRcdPRec1+9ecF6ve+lFJx9cluA0YO5Zg8fTT4n9n35K - 9P+cs/ovSTZg2intmxOOi/8HYSD7PskGTDphcK37qPR/EJ50Qv8uQQOmnnIynnbKLWDqKVf/aac9/fuP - mz5pOyT3H4T7jpm8mH7Ky3/qKTcgdg+YftrdFGYgOAw6jxhJtB7SBCrWgWLd/y0HNf43HVABYxC77ZAu - XL71kNb/9sM6UiC9YAPq9uoo1+xV/4+JNYBiMIwqX71HTQVuQPUuU5nibdr/i7ZqwXHxNq3/yBhFbqv2 - //Id+rJwA0CMgk1Gwbkb9UqBuASEs9frvspar/MfhIHst7kbgOIgvFG3FKg2dOmpuWDX40wHicv0riUs - 0/0PwXp3CMYCuoLgWXo3g2bp/odgPdLTgUu//gPnft3/IOzSr/cUpwuYGRgYgFgAiBWBWAOIdRkZGNS1 - EpU6jMo1T4CwdpJSJ0gMJAdVA1IrAA8DIIcZiNmBmBOIuYGYF2guIyKxMDCCxKByIDUgtcx4A5HYLA4A - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAEw0lE + QVRIS7WUW2wUVRjHT1tjbanXCN4f4M2EIJposA0VqiF14cEQEuiFi+iDJaDBaKBZQTBaQdEWfEIKiQZU + ItrSsnUL0hZ2sRfb2sved2dmd+e2027bbR8wfSh/vzPt7nYr4otu9rcz853/+X5nzkyWAfhfuW3xv8T8 + uXXrlnmcnp7OHRs19o+NxM5MxEdPJcbmEz81uQBem5c5PTkeP/rnzZuP834zMzNpAb8gsqcmE0dCigqP + osOnGyn8/4KZ0wwIegyJiXEb9crNEExOTrLE+PgqQZbRFFJxSdJh44iZ/EI1zsJ6kgaaG9R0TCUS26am + ptICTVOZoakbhiMK6t0STg6LGZxyiTjjFvBFv4BjfSLqXYLJwtwZTxguVcfYiHHQMGJpQUzX2WhMtwxG + ZBzt8+NYfyBF3UAAh7v9eKVBwiNfi1h8UkThjxKqbwRwfCAz+2mfDwOyhonREevIiJEpiJOgPxyFtcuF + D7vdJod63DhIx+Xf+JF9zAt2dNgk63MPlp4Oovo3Nw5TJpmv7nShN6oiEf8Hwe9iBG87B/DujUGTfV2D + 2Ng8hOwjQ2Cf9IPV/DELnWfVDGJD4xD2UyaZ3+0YQFdY+btA1zVT0CmEsb29F2929JlUOfpQeK4P7EAP + 2KF5HCY+6MGK073Y5ZzNcra29cIpRZHgW2TMF2gk0HWLMyhi4+UubL7SbVLe1o3i851g+xzU0JkJ1QrP + daKCMsn8a62d6KBFckHGQ+ZvUVzXLB3+EF6+5EBpi9PkVWK93Ykna6+BvddGTed4vw0P1XSg1DabSebX + XrqOKwGRBIY1FtPTAlVR2KimWq76gii6eA1rm6+blNCEda0OLK9vR/ZeO1iSd+xYduIq1tkdZiaZf/Fi + B+y0yAkjZuW7khIossxGVMXyqzeAQhKsoTCnxObAE5+1gu1qBttN7JlHVTMWf2THS03UnCQ8v4oELb4Q + xmO6VVPVtECORpkhy5YrngCFrqGYN6fVLa2l1e78Ceytn2/Pzgt49GObmeVzXiCBjXrENdXKF50SSKLI + 1LBksbt8eI5Cq23X8fx52uudP4DtIF6/Azu+xzPfXkVxiwMrG9vR5PZjVJGt0WgkLQgFg0wIBCz+QABV + 7T1YQw/22frLyNt+FvlvfHdH8radxbKaJpS03qA3qQsuQYQSiVgj4XBa4PN6mcfjsQS8XgjBINwhAZ6Q + CJefjkHJxBsKw8cRIrPQOa+Z4yEJPimMaCQCOSxBCIWsRKZgaHBw/fDQEHweD+huEJFEyNEIVDkKVYlC + U2RoKkeZg86pxscUysjUnLYaQZrrcbsP8G1PCVpaWhgZS0gCjtvlAknNsCgICEsS6JZN+Co5yWs+xjO0 + zfD7fOY8+uvZU1dbmxbwz8oVK3IbGxouBilIMnMivV20QgX0TsOIxWAYBugvIAU1Msd4hmejhNPhCKwu + KnqA90wJshn/socL8vOftpSW7q0oK/uyfMuWWjrWVZaVHa8sLz+xtaKC89W2ykqTuesTNMbH6zibN206 + +NiSJUXU6ylquCglyKEKcXcWFek0d458ooC4j7if4Kt6cB68xrmX4PPyiHuIAuq1iMhZKDDht0IiThaR + TeTMcddtSI7xHM9n9ALA/gLB8QtRvpXl8QAAAABJRU5ErkJggg== - + - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAylJREFUOE+lkWtIU2EYx5+dyoyymZqRlSUa2QrDbkhBSBelT10+lEFWRAnZxS4mRUR0 - EckurjRlqRVTg5RCvEBq97lKMHFhuazcUjtnZ9s5c9OzjdSennNG0Ye+9cKP930fnv///b/vC4gI/wPY - WpoCPGkGu+EFfL5wNskQOfVm+/o16az2Kjjyc4ErKQLL9Xz4oiuGzryL0HWnFIZYDoa+swA9VRUB7ldA - 76MaeHPm1JaKGdOwfkOy1pKxZ13frrR9XKGWsRYW/Ntg1O+DsZERYN8YgXvxDHhjq7o+Jsr7OmFBT2tU - +OjLiCn4NlHT8TErc4Ol/DaY8vOgq/yvBH6PG354JegncWfepZnNqWvLHs6ejjWRanycthWfZOzFmplh - WBMRgk3Jq2rbsrMWmimx5HCAxPMA/HsTOMzd8PL0yf26WdOHC0Mn4b2kZWi8W468242C14vtdbVYlbIW - i8ImY3Fk6M+G9LRc6/OnIANG7TV4XaiFG0sXP8uNnYN1ueexj2PRTUKXKKJLENAjSci5RGzRleCVJRq8 - HBf9tSHrEDQePQwwLDhBEgXoamyAng9d1S5pGEVRQMHpREFwokgGykw1NxlZLb1tpsb6P18Pfr9fYWRs - DESXqOd5GzqdDnQNunBI8hI+dNNV5JoM9Rgknxc89HYy4KONjJ9+w2G36zmKL1D0T6YObLqrw6Y7Ouxo - faUYOhx2tNt5w+DgIPxGiTJC3+jz+YC32fQD/f0oejxYmnMEsxPmYU5iHJ7btgldVJPNOZY10NvAkMcD - ftJAhV4P79rbFSMS679ZreikBEXZh/HICg3mrE7Aczu2op3eQjYnDPKV35tMUFVZCcoIDgqCstJSsPN8 - 5SezGVkbj9rjB3H/0ng8sHIRnt6+GTmqWXp7kXqM1Q8egDokJCAeR6gAxtPEnDh27IS5uxv7BgbwytFM - 3Jm4AHcv12A2XWHgO6sY3CgouMWoVAxpJpBWJRuoiGAimkzmxkRHr9bEx6dERYSnhk0K3hhOzFCrU+Xa - /NjYZIZhYhjqo/7JBKMkkBfERHINCuRSBm2pIYC8/l2UT5YPlDXwC0YHSSJEvhIRAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB2UlE + QVQ4T2P4//8/RRirIAirL3suLD7rvjM2OWSMVdBqzQsRvonX7nL2Xt1qsualEDY1MIwhoD37lhpf5/kH + DA0n/rM0nfrL1XbmG1/nuVMSfRej0NWCMIYAV+3h6wzl+//Dcdk+MM1ee/i/aNvJLnT1KBwQZszbagfE + nxnytv4HYSD7N2P+1q8MuVv+sxbv+C9Uvc8XWT2KZhjmzFirzZi25iNL+ppdDLrf+RiE/3OyZq5XZ0pf + m8tdsGWnaMUOFphauKa5Z9UYF1+wlIbxmaKXazJGro3a+1BCf+8DJTmYOG/qSh2utFVcMD6SAeqM007p + LJh9xiF8161Sbpj41JOKrdNOar1deN5TGSaGjFE4HYdlnbuOaP7vO2b8of+42Y0Jx81vdx/V/Np+WA4o + ZvB25hkvY2T1IIzCAeHavar9VXtU/9eA8F4QVvtfu1cDTDfsM/zefsiOA1k9imYYzt+sk5+zUedx9nqd + /9kbdP4D2f9B7LxNmgnlO9RQ1KJw0DBj5nYznYhF+rPD5uv9TVxr5I5FDcIAZgYGXiCWB2I1INZigGBp + zSiFAs0IuQIgWwIqB1LDi80AViDmAWIBIBYCYmEgFgVq5AFiTigfJAdSw4phAHn4PwMA9XxjpB7NS6oA + AAAASUVORK5CYII= - + - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAoRJREFUOE+lk11Ik1EYx5+md7XEMHPmB4tyZBEmESaW0kV64UV4EYZGCAoFaurFIrAQ - hCKFMgsKJMKbKEmI8CLCPkArLXXOuU03nfvAnHNu6faq78f277yWc2FdeeAH5zzw/53ncM4hALQd1sOh - oOM/2AlhH833NGsMV9Tahe46la/3Di0Pd1Jg7MV69reAc/2TsOCloKU/cbQyw2iqiIfjhua7p+vakeB4 - F3Hm7k1BWPhJWxCDrPYjRtf78t1gbQEmK5SYqU7AeNV+v/NZTa77TfOmAKKb/sZDkHwkWUpbF01XYbdN - wHKvEvpSJQZL4vG1TFM/XJ0bJVi1EiJMEYQ5kuzaKsGYB8laCMFcBM+cHgNtN/H58nEz59QlhcXFKAHv - JGwg+Sk025bPj2Xzoq0c/MghiBPnIbpqYTE8989O6jJFzk1rS64oQShAkIFE4cBgMq8/YRNtl8DrNBCM - hRAdNZDmGwHu40VxbZkEboFCq74oAWcmrFgpvDykFAxn+sTpC2AdQDDkQ7SWQZwpR2ipmxl4FpIBra54 - o67Ra6bQopUER18xb25iu54EP5rNWi8Br8+C5Lr+im2/HvB6nNR0S0upKaqoDlbcJPnZmVwDTYL1E4Sp - dgimYqx92YWQ8bQe8MYHAn5qbblNqqR9tDEiD+np43aaMo3S+9edbznrB8A/Cyz1A/YiT9DTc/huy31S - p6dGgjFsJhMRKBQKatQ27Gyor5vr7HgEn23IM/Jt4GFHx5MDWceObgluEcjCPXG7886dLZjOzcl5kJaS - corVVAw1Q8MCGYyDDDUjlZHAiI10IC/kYuwO2ssCSjmsIEpjtfQ/yHM5mMxIZMQxYiKC7XznX8JFYFou - bf5cAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB7UlE + QVQ4T6WQQUgbQRSG18YWjbV4UNudicnMxiiahK4VAwaaFEqhUAoeeyoIXsSTd0WjHmzagHpRD1KFHnKr + 0UANWJMWiqBFaWOpFNSDePWol8Lzzeisu3vUw7fz3v+/98/uagBwKxzN0bPO1wcJc9yu2TlMmP2HySeD + ds0q/r2IvdkzQ/C7ncHfeDRvHxLsJ8xUORqEcsSA/WRHBr7NVwhdmn9exr3bkSBscirZavXDr+7rkPJT + M7UdNtAjkq02DruxcJcVUKj2VpQ4/VAK+kCCQ99b/PCzO5rdSXYM/QhzKKJm+QYtlpoe1VgBikLQl1kz + KBSQNUZgHd9ko53DF6Zfapde8VMbr1Q7jgBBDkOWcVCCt37GINXnDPr1Y7j5rn3esazIGnQzi//CxelK + l2ndrHA0gkVOR5cY+Y+Am0VOcu55RzPHaWoeBxVzVzg1moeTc2fAVCigTTMyOh0goJgSJ6OrM4ymZW2H + kfxMs7/KCsi0MO+7gA4uisOPQ3eEn2YkM+ny05zGrADBpNHUO4bpY34d8Nw463kllxXjAfJeesgE980e + P49LX/Nokjo8at/qDSMDtDFfU+kxsY+g3inAWvSsT29Y6KcPl7CuRx7IAPHAIQ8iv0mKmlaNfa0d1O7b + /HuoeWStxJsB2gW8qh8AcaOVUQAAAABJRU5ErkJggg== - + - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAZlJREFUOE9j+P//PwMlGKfmJRcdPRec1+9ecF6ve+lFJx9cluA0YO5Zg8fTT4n9n35K - 9P+cs/ovSTZg2intmxOOi/8HYSD7PskGTDphcK37qPR/EJ50Qv8uQQOmnnIynnbKLWDqKVf/aac9/fuP - mz5pOyT3H4T7jpm8mH7Ky3/qKTcgdg+YftrdFGYgOAw6jxhJtB7SBCrWgWLd/y0HNf43HVABYxC77ZAu - XL71kNb/9sM6UiC9YAPq9uoo1+xV/4+JNYBiMIwqX71HTQVuQPUuU5nibdr/i7ZqwXHxNq3/yBhFbqv2 - //Id+rJwA0CMgk1Gwbkb9UqBuASEs9frvspar/MfhIHst7kbgOIgvFG3FKg2dOmpuWDX40wHicv0riUs - 0/0PwXp3CMYCuoLgWXo3g2bp/odgPdLTgUu//gPnft3/IOzSr/cUpwuYGRgYgFgAiBWBWAOIdRkZGNS1 - EpU6jMo1T4CwdpJSJ0gMJAdVA1IrAA8DIIcZiNmBmBOIuYGYF2guIyKxMDCCxKByIDUgtcx4A5HYLA4A - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== - + - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAetJREFUOE9j+P//PwMlGEXzfQdj37t2Bs24DLxnZ5B5z96oEFkebsAtV7OIKwaq/y9p - Kfy/bqW7Bd2QG3YGjZd1lf9f1lH6f8PesPf/wZmMIDVgA656WHGd1lH+f1xRGoxPqcv9v2iJMOSyrUHj - aW0loJwUGJ/SVPx/3kzbFG7ATk4uxgOK0j0HlGX+gzFQ0SE1uf9nLHVXnLM3rDmqrfh/P1AMLq8kvf+A - rAQ33ACYc3cqy/TuUJL+vxOIdyhI/d8DdMk+LcX/2xUkIWIQuf1LNBVZYHowYmAj0JANQIVgDLR1PdAg - GH+jkvTe+doqrFgDEVlwhZL08RXAsEDD7zaZGsBtxumCBYrSDQsVpP4A8X90vEBRaiN67KB4YYaidONM - oEYYngFkgzCqmPSW/0+/w/WBGRNU5RkmKkg1TJSX+g/DE0BsBenNkxSku8BsZKwgtWWSihwHPBZ61RS4 - OuUl/6Ph/bX6qkwgRV0KUr0daPJditJmKNHYoSSb2AS0pUlO8j+Q3vctwBusGYab5aW6wXJA3KIoM/2x - sxVYnoGZAYwFgBRvnKRofba02BZuFmYDIF8HKG4MwkA2iK+QIik6N1NafCGQLQLEfHAXABUxAzHYT2BB - BgZOIJ8XGQPFeJDk2UB6MFIiOdkaALyqHwCXXFYvAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC + + 121, 17 + 17, 17 - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAsFJREFUOE+lkstLVGEYxj+dClpJy4IWLULEAt0F4kpqUmjRXxC0ECUoIyKIaKOLEIIU - Q3JsKKhF6capHHWcckzn4tyc+11mnDmOM+c2M47oIPn0ngk9tmjVgYdzzvud53fe5/teBoD9j+rmg4MD - VqvVmCDwbLdaZft7e2dSyeSzaCSiTyYSuo1UShePxSbpuX1np8I4jmOFQqHu/QsgigKTZVlZvBYJhw/J - BDIjk04jHo/BMDMzVy6XT29tbf0TcIG6uEiGR/HoHzOXzUIuSihsFfF6bAzTU1OWTCbTJAiC2kGtts+o - tV6eL/4iwKEoCCiVSoiGgphaWMbosh7myFc4nD8xZzTC6/F8JIgKkCSJ8gsfJJFHWRRRkUTsVsqIBqMY - HH2Ou5/b0Gc4hxn/ELazPCjaEkVUASXKLUuiPp4vwJPbhpsrIJwXkcxF8Hi2GYOWZry0XcZ6Yh4biTTI - bA6HQipAliVWlUX9u1AcnZ98aHrlw1N7CotxHSZdPcjzG/DEvsDhWAGdDELBoDkYCJyMILJdAjyxe3F2 - aBasz4COaSvcmyYU+CQqpSr9NYY1xxrICL/PZ/atr6sAZUclvqg3RRMYNqxheNqBtyt+ZDkO2/k8qEOQ - AcbZWVhXV5VNNLtdLhXAF4vKueqdNiuWF41YXTLBYpqDy+lEJpMGzQdsVmv9BDxuN7xeryXg86kAZTC4 - XE5vt9lgWljAd/MizIsmOOx2MriQ3dxUctchyv3N+LjuSmurCijSWNJH7y1LP6jNb1iYn6tLgSVoAmkd - oyMjMy0tLbeutrbePqPRXGKMnToe5fa2NjY5MfEi4PfTRjlA+eqtKhGUcVYA9/r775OpfjWSNKRjgFJT - qNe7unq7tdoHpIEerfZhj/bmQPcN7UBnR8cdTUPDeTI2KMYjHQOo0EB1RUfX0fvJWuNJ81EHvwFtibPe - YgXvZAAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACwElE + QVQ4T6WS3UtTcRjHf9MSupIuC7roIkRWoHeBeCW1FLroLwi6ECUoIyKI6EYvQghSDMnZKKiL0ptZubmX + cqZ70b24ublXxTnP5nbetjnRIfntORM9QnTVD55zzu/l+znP9/c8DMB/Re1xcHDAqtUqEwSe7VYqbH9v + r2EtlXoei0YNqWRSv762pk/E4+P03bqzU2Ycx7F8Pv83QBQFJsuysnk9urp6SCKQGOmNDSQScUwZjeZS + qXQ2m83+E3CRsrhEgseJ2JGYy2QgFyTkswW8GRnB5MSEI51ONwqCoAKq1X1GqXXzfOE3AQ5FQUCxWEQs + EsaEZQ7DcwbYo9/gWfoFs8mEgN//iSAqQJIk8i98lEQeJVFEWRKxWy4hFo6hf/gF7n1pQc/UeRhDA9jO + 8CBrs2RRBRTJtyyJhkQuD//WNnxcHqs5EamtKJ5MN6Hf0YRXritYTs5gPbkBEttXIxEVIMsSq8ii4X0k + gfbPQTS+DuKZew22hB7j3i7k+HX441/h8cyDKoNIOGwPr6yoAEkS2S4BnroDODcwDdYzhbZJJ3ybVuT5 + FMrFCv01jkXPIkiIUDBoDy4vqwDlRiW+YLDGkhicWsTgpAfv5kPIcBy2czlQhiABTNPTcC4sKJdo93m9 + KoAvFJS6GpZcTszZTFiYtcJhNcO7tIR0egNUXriczloF/D4fAoGAYyUYVAFKY3BbWwa3ywWrxYIfdhvs + Nis8bjcJvMhsbiq+axDl/XZ0VH9Vq1UBBeoqOvTBMfuT0vwOy4y5FgosSR1I+xgeGjI2NzffvqbV3mmo + r7/MGDtzAmhtaWHjY2MvV0IhuigPyF8tVcWC0s4K4H5v7wMS1UYdRT3FCUBZU6g3Ojq6O3W6hxR9XTrd + oy7drb7Om7q+9ra2u/UazQUSahThcZwAaKKhuRLH43h+eq3utPgIAPYHbYmz3k1i+O4AAAAASUVORK5C + YII= - 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 + SUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAsNJREFUOE+lkl1IU3EYxv9zKYqRFd0UdNFFMFqFdlMkQdKsIAoqggjKQDAkMCuKLqIL - ISm9K1R0sQyMURo1L/xIJnpjH2xucx+6czZ1rm1t52Nfmg7Jp/dM5uyiq/7wcDgv5/md933ePwPA/kdZ - 8+rqKstkMkwUBba0uMhWlpeL/D7f45npaYOP5/Wzfr+e83pf+Xx8RTqdZqFQiEWj0az3L4AkiSwej7NY - NHps2uNZIxPIjMD8PDjOi36TaSiVShaGw+F/AvZQF3vJcJ+bWTf/CAYRDoeyz7aXL9DX2zseCATKRFHM - d5DJrLB0OlUnCLHfBFiTRBGJRAJulwvjY2OgzkB1TFotGBwYgG1y8i1B8gBZlhmZepSPFLNiSCWTcHvc - aGltxZeJCUQi4WwX2XG83jEaMQ9I0NyyJBlyAAIisbQEgZvB6HsjhkZGwPl8mJudBc9xILPZ43bnAfE4 - dSCJ6wBZghyX4X/QAOcRDTxHD2Ou7gaCPAcvx4M2o4xmdjmdm0eQmCAIBkGMQV7+BfeTRxgqZvC3NIN/ - Z8RwiQpfr12Gh/eBjJhyOMwOuz0PUBKlvRqisSgk+vvgyeMwbi+Bs7kJrm4DjDtK8Um7HzbKwu5wUJhW - s9ViyQOEWIxRSAZlXSKl33euGm1lxfhcW4PRh/fQvrMU3eUHYP3+DRaLBXabbdzpcOQBEboYwYUFw0Ig - gJ+0BZvpI57u2oaeSxfw4VYtmrYWYrD1OaY8nuwInR0d+oNabR5AN4/Ret4oCc9T0hEK0zYyjNc3r0N/ - 9Qqs/Sa0d3WZNBrN+UNa7cUitXofY2zLxlWuKC9n+s7OZ0oHikK076ggQEymINBIYjyO2/X1DWTKngKS - mrQBUGoK9VRVVd1pne4OqfGMTneX1Hi2urrxRGVljVql2k1GlWLMaQNABRXVFeVO7n1zrWCzOdfBH2pN - qLnKOhNqAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACwUlE + QVQ4T6WSXUhTYRjH37kUxciKbgq66CIYrUK7KZIgaVYQBRVBBGUgGBKYFUUX0YWQlN4VKrpYBsYojZoX + fiQTvbEPNre5D93Zps61re187EvTIfnvOZN5hOiqF/7n8L6c/+88z/95GYD/Uu6xurrKstksEwSeLS0u + spXl5aKA3/94Znra4Pf59LOBgJ7zel/5/b6KTCbDwuEwi8VifwNEUWCJRILFY7Fj0x7PGplAZgTn58Fx + XvSbTEPpdKowEon8E7CHqthLhvvczLr5RyiESCSce7e9fIG+3t7xYDBYJgiCAshmV1gmk67j+fhvAqyJ + goBkMgm3y4XxsTEQGHSOSasFgwMDsE1OviWIApAkiZGpR/5INsuGdCoFt8eNltZWfJmYQDQayVWRa8fr + HaMWFUCS+pZE0ZAHEBDJpSXw3AxG3xsxNDICzu/H3OwsfBwHMps9brcCSCSoAlFYB0gipISEwIMGOI9o + 4Dl6GHN1NxDycfByPtBk5NbMLqdTAUiSyHieN/BCHNLyL7ifPMJQMUOgpRm+d0YMl6jw9dpleHx+kBFT + DofZYbcrADlRGoshFo9BpL8PnjwO4/YSOJub4Oo2wLijFJ+0+2GjLOwOB4VpNVstFgXAx+OMQjLI4xIo + /b5z1WgrK8bn2hqMPryH9p2l6C4/AOv3b7BYLLDbbONOh0MBROlihBYWDAvBIH5SiDbTRzzdtQ09ly7g + w61aNG0txGDrc0x5PLkWOjs69Ae1WgVAN4/ReN7ICc9T0lEK0zYyjNc3r0N/9Qqs/Sa0d3WZNBrN+UNa + 7cUitXofY2zLBqCivJzpOzufyRXICtO8YzwPIZUGTy0JiQRu19c3kCm3Ckhq0gZAPpOpp6qq6k7rdHdI + jWd0urukxrPV1Y0nKitr1CrVbjKqZGNeGwDaqGgvK7/y+81nBZvN6wCwP2pNqLkfzIVuAAAAAElFTkSu + QmCC diff --git a/Ember Media Manager/dlgEditMovie.vb b/Ember Media Manager/dlgEditMovie.vb index 07f78f0..279f904 100644 --- a/Ember Media Manager/dlgEditMovie.vb +++ b/Ember Media Manager/dlgEditMovie.vb @@ -177,13 +177,15 @@ Public Class dlgEditMovie End Sub Private Sub btnRemoveFanart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveFanart.Click - Me.pbFanart.Image = Nothing - Me.Fanart.Image = Nothing + Me.pbFanart.Image = Nothing + Me.pbFanart.Tag = Nothing + Me.Fanart = Nothing End Sub Private Sub btnRemovePoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemovePoster.Click - Me.pbPoster.Image = Nothing - Me.Poster.Image = Nothing + Me.pbPoster.Image = Nothing + Me.pbPoster.Tag = Nothing + Me.Poster = Nothing End Sub Private Sub btnRemoveThumb_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveThumb.Click @@ -211,13 +213,14 @@ Public Class dlgEditMovie Private Sub btnSetFanartDL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetFanartDL.Click Try Using dImgManual As New dlgImgManual - If dImgManual.ShowDialog(Enums.ImageType.Fanart) = DialogResult.OK Then - Fanart.FromFile(Path.Combine(Master.TempPath, "fanart.jpg")) - pbFanart.Image = Fanart.Image - - Me.lblFanartSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbFanart.Image.Width, Me.pbFanart.Image.Height) - Me.lblFanartSize.Visible = True - End If + Dim tImage As Images = dImgManual.ShowDialog(Enums.ImageType.Fanart) + If Not IsNothing(tImage) Then + Fanart = tImage + pbFanart.Image = Fanart.Image + + Me.lblFanartSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbFanart.Image.Width, Me.pbFanart.Image.Height) + Me.lblFanartSize.Visible = True + End If End Using Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") @@ -230,8 +233,12 @@ Public Class dlgEditMovie ModulesManager.Instance.ScraperSelectImageOfType(Master.currMovie, Enums.ImageType.Fanart, fResults, True) If Not String.IsNullOrEmpty(fResults.ImagePath) Then - Fanart.FromFile(sPath) - pbFanart.Image = Fanart.Image + Fanart.FromFile(sPath) + If Not IsNothing(pbFanart.Image) Then + pbFanart.Image.Dispose() + End If + + pbFanart.Image = CType(Fanart.Image.Clone(), Image) Me.lblFanartSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbFanart.Image.Width, Me.pbFanart.Image.Height) Me.lblFanartSize.Visible = True @@ -268,13 +275,15 @@ Public Class dlgEditMovie Private Sub btnSetPosterDL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetPosterDL.Click Try Using dImgManual As New dlgImgManual - If dImgManual.ShowDialog(Enums.ImageType.Posters) = DialogResult.OK Then - Poster.FromFile(Path.Combine(Master.TempPath, "poster.jpg")) - pbPoster.Image = Poster.Image - - Me.lblPosterSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbPoster.Image.Width, Me.pbPoster.Image.Height) - Me.lblPosterSize.Visible = True - End If + Dim tImage As Images = dImgManual.ShowDialog(Enums.ImageType.Posters) + If Not IsNothing(tImage) Then + Poster = tImage + 'Poster.FromFile(Path.Combine(Master.TempPath, "poster.jpg")) + pbPoster.Image = Poster.Image + + Me.lblPosterSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbPoster.Image.Width, Me.pbPoster.Image.Height) + Me.lblPosterSize.Visible = True + End If End Using Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") @@ -495,7 +504,7 @@ Public Class dlgEditMovie End Sub Private Sub dlgEditMovie_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed - Me.Poster.Dispose() + Me.Poster.Dispose() Me.Poster = Nothing Me.Fanart.Dispose() @@ -587,7 +596,15 @@ Public Class dlgEditMovie End If Me.chkMark.Checked = Master.currMovie.IsMark - + 'cocotus, 2013/02 Playcount/Watched state support added + 'When Edit Movie-Page is loaded, checkbox will be unchecked of playcount=0 or not set at all... + If Master.currMovie.Movie.PlayCount = "" Or Master.currMovie.Movie.PlayCount = "0" Then + Me.chkWatched.Checked = False + Else + 'Playcount <> Empty and not 0 -> Tag filled -> Checked! + Me.chkWatched.Checked = True + End If + 'cocotus end If Not String.IsNullOrEmpty(Master.currMovie.Movie.Title) Then .txtTitle.Text = Master.currMovie.Movie.Title End If @@ -807,7 +824,14 @@ Public Class dlgEditMovie End Sub Private Sub LoadThumbs() - Dim tPath As String = Path.Combine(Directory.GetParent(Master.currMovie.Filename).FullName, "extrathumbs") + Dim tPath As String = String.Empty + + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Master.currMovie.Filename) Then + tPath = Path.Combine(Directory.GetParent(Directory.GetParent(Master.currMovie.Filename).FullName).FullName, "extrathumbs") + Else + tPath = Path.Combine(Directory.GetParent(Master.currMovie.Filename).FullName, "extrathumbs") + End If + If Directory.Exists(tPath) Then Dim di As New DirectoryInfo(tPath) Dim lFI As New List(Of FileInfo) @@ -1077,6 +1101,8 @@ Public Class dlgEditMovie tPath = Path.Combine(Directory.GetParent(Directory.GetParent(Master.currMovie.Filename).FullName).FullName, "extrathumbs") ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Master.currMovie.Filename) Then tPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Master.currMovie.Filename).FullName).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Master.currMovie.Filename) Then + tPath = Path.Combine(Directory.GetParent(Directory.GetParent(Master.currMovie.Filename).FullName).FullName, "extrathumbs") Else tPath = Path.Combine(Directory.GetParent(Master.currMovie.Filename).FullName, "extrathumbs") End If @@ -1234,6 +1260,21 @@ Public Class dlgEditMovie Master.currMovie.Movie.Trailer = .txtTrailer.Text.Trim Master.currMovie.Movie.Studio = .txtStudio.Text.Trim + 'cocotus, 2013/02 Playcount/Watched state support added + 'if watched-checkbox is checked -> save Playcount=1 in nfo + If chkWatched.Checked Then + 'Only set to 1 if field was empty before (otherwise it would overwrite Playcount everytime which is not desirable) + If String.IsNullOrEmpty(Master.currMovie.Movie.PlayCount) Or Master.currMovie.Movie.PlayCount = "0" Then + Master.currMovie.Movie.PlayCount = "1" + End If + Else + 'Unchecked Watched State -> Set Playcount back to 0, but only if it was filled before (check could save time) + If IsNumeric(Master.currMovie.Movie.PlayCount) AndAlso CInt(Master.currMovie.Movie.PlayCount) > 0 Then + Master.currMovie.Movie.PlayCount = "" + End If + End If + 'cocotus End + If .lbGenre.CheckedItems.Count > 0 Then If .lbGenre.CheckedIndices.Contains(0) Then @@ -1359,7 +1400,8 @@ Public Class dlgEditMovie Me.Label6.Text = String.Concat(Master.eLang.GetString(642, "Sort Title"), ":") Me.lblOriginalTitle.Text = String.Concat(Master.eLang.GetString(302, "Original Title"), ":") Me.lblFileSource.Text = Master.eLang.GetString(824, "Video Source:") - Me.TabPage6.Text = Master.eLang.GetString(866, "Metadata") + Me.TabPage6.Text = Master.eLang.GetString(866, "Metadata") + Me.chkWatched.Text = Master.eLang.GetString(883, "Watched") End Sub Private Sub TabControl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabControl1.SelectedIndexChanged @@ -1376,18 +1418,20 @@ Public Class dlgEditMovie End Try End Sub - - Private Sub TransferETs() Try If Directory.Exists(Path.Combine(Master.TempPath, "extrathumbs")) Then Dim ePath As String = String.Empty If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Master.currMovie.Filename) Then ePath = Path.Combine(Directory.GetParent(Directory.GetParent(Master.currMovie.Filename).FullName).FullName, "extrathumbs") + 'ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isVideoTS(Master.currMovie.Filename) Then + ' ePath = Path.Combine(Directory.GetParent(Master.currMovie.Filename).FullName, "extrathumbs") ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Master.currMovie.Filename) Then ePath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(Master.currMovie.Filename).FullName).FullName).FullName, "extrathumbs") - Else - ePath = Path.Combine(Directory.GetParent(Master.currMovie.Filename).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Master.currMovie.Filename) Then + ePath = Path.Combine(Directory.GetParent(Directory.GetParent(Master.currMovie.Filename).FullName).FullName, "extrathumbs") + Else + ePath = Path.Combine(Directory.GetParent(Master.currMovie.Filename).FullName, "extrathumbs") End If If Master.currMovie.ClearExtras AndAlso Not hasCleared Then diff --git a/Ember Media Manager/dlgEditSeason.vb b/Ember Media Manager/dlgEditSeason.vb index 443dec5..e307dec 100644 --- a/Ember Media Manager/dlgEditSeason.vb +++ b/Ember Media Manager/dlgEditSeason.vb @@ -33,25 +33,28 @@ Public Class dlgEditSeason #Region "Methods" Private Sub btnRemoveFanart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveFanart.Click - Me.pbFanart.Image = Nothing - Me.Fanart.Image = Nothing + Me.pbFanart.Image = Nothing + Me.pbFanart.Tag = Nothing + Me.Fanart = Nothing End Sub Private Sub btnRemovePoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemovePoster.Click - Me.pbPoster.Image = Nothing - Me.Poster.Image = Nothing + Me.pbPoster.Image = Nothing + Me.pbPoster.Tag = Nothing + Me.Poster = Nothing End Sub Private Sub btnSetFanartDL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetFanartDL.Click Try Using dImgManual As New dlgImgManual - If dImgManual.ShowDialog(Enums.ImageType.Fanart) = DialogResult.OK Then - Fanart.FromFile(Path.Combine(Master.TempPath, "fanart.jpg")) - pbFanart.Image = Fanart.Image - - Me.lblFanartSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbFanart.Image.Width, Me.pbFanart.Image.Height) - Me.lblFanartSize.Visible = True - End If + Dim tImage As Images = dImgManual.ShowDialog(Enums.ImageType.Fanart) + If Not IsNothing(tImage) Then + Fanart = tImage + pbFanart.Image = Fanart.Image + + Me.lblFanartSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbFanart.Image.Width, Me.pbFanart.Image.Height) + Me.lblFanartSize.Visible = True + End If End Using Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") @@ -59,11 +62,12 @@ Public Class dlgEditSeason End Sub Private Sub btnSetFanartScrape_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetFanartScrape.Click - Dim tImage As Image = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.SeasonFanart, Master.currShow.TVEp.Season, 0, Master.currShow.ShowLanguage, Master.currShow.Ordering, Me.pbFanart.Image) + Dim tImage As Images = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.SeasonFanart, Master.currShow.TVEp.Season, 0, Master.currShow.ShowLanguage, Master.currShow.Ordering, CType(Fanart, Images)) If Not IsNothing(tImage) Then - Me.Fanart.Image = New Bitmap(tImage) - Me.pbFanart.Image = tImage + Me.Fanart = tImage + Me.pbFanart.Image = tImage.Image + Me.pbFanart.Tag = tImage Me.lblFanartSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbFanart.Image.Width, Me.pbFanart.Image.Height) Me.lblFanartSize.Visible = True @@ -93,25 +97,27 @@ Public Class dlgEditSeason Private Sub btnSetPosterDL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetPosterDL.Click Try Using dImgManual As New dlgImgManual - If dImgManual.ShowDialog(Enums.ImageType.Posters) = DialogResult.OK Then - Poster.FromFile(Path.Combine(Master.TempPath, "poster.jpg")) - pbPoster.Image = Poster.Image - - Me.lblPosterSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbPoster.Image.Width, Me.pbPoster.Image.Height) - Me.lblPosterSize.Visible = True - End If - End Using + Dim tImage As Images = dImgManual.ShowDialog(Enums.ImageType.Posters) + If Not IsNothing(tImage) Then + Poster = tImage + pbPoster.Image = Poster.Image + + Me.lblPosterSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbPoster.Image.Width, Me.pbPoster.Image.Height) + Me.lblPosterSize.Visible = True + End If + End Using Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") End Try End Sub Private Sub btnSetPosterScrape_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetPosterScrape.Click - Dim tImage As Image = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.SeasonPoster, Master.currShow.TVEp.Season, 0, Master.currShow.ShowLanguage, Master.currShow.Ordering, Me.pbPoster.Image) + Dim tImage As Images = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.SeasonPoster, Master.currShow.TVEp.Season, 0, Master.currShow.ShowLanguage, Master.currShow.Ordering, CType(Poster, Images)) If Not IsNothing(tImage) Then - Me.Poster.Image = New Bitmap(tImage) - Me.pbPoster.Image = tImage + Me.Poster = tImage + Me.pbPoster.Image = tImage.Image + Me.pbPoster.Tag = tImage Me.lblPosterSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbPoster.Image.Width, Me.pbPoster.Image.Height) Me.lblPosterSize.Visible = True diff --git a/Ember Media Manager/dlgEditShow.vb b/Ember Media Manager/dlgEditShow.vb index 6635069..b28a0dd 100644 --- a/Ember Media Manager/dlgEditShow.vb +++ b/Ember Media Manager/dlgEditShow.vb @@ -76,11 +76,12 @@ Public Class dlgEditShow End Sub Private Sub btnASChangePosterScrape_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnASChangePosterScrape.Click - Dim tImage As Image = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.AllSeasonPoster, 0, 0, Master.currShow.ShowLanguage, Master.currShow.Ordering, Me.pbASPoster.Image) + Dim tImage As Images = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.AllSeasonPoster, 0, 0, Master.currShow.ShowLanguage, Master.currShow.Ordering, CType(ASPoster, Images)) If Not IsNothing(tImage) Then - Me.ASPoster.Image = New Bitmap(tImage) - Me.pbASPoster.Image = tImage + Me.ASPoster = tImage + Me.pbASPoster.Image = tImage.Image + Me.pbASPoster.Tag = tImage End If End Sub @@ -107,22 +108,24 @@ Public Class dlgEditShow Private Sub btnASPosterChangeDL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnASPosterChangeDL.Click Try Using dImgManual As New dlgImgManual - If dImgManual.ShowDialog(Enums.ImageType.ASPoster) = DialogResult.OK Then - ASPoster.FromFile(Path.Combine(Master.TempPath, "asposter.jpg")) - pbASPoster.Image = ASPoster.Image - - Me.lblASSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbASPoster.Image.Width, Me.pbASPoster.Image.Height) - Me.lblASSize.Visible = True - End If - End Using + Dim tImage As Images = dImgManual.ShowDialog(Enums.ImageType.ASPoster) + If Not IsNothing(tImage) Then + ASPoster = tImage + pbASPoster.Image = ASPoster.Image + + Me.lblASSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbASPoster.Image.Width, Me.pbASPoster.Image.Height) + Me.lblASSize.Visible = True + End If + End Using Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") End Try End Sub Private Sub btnASPosterRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnASPosterRemove.Click - Me.pbASPoster.Image = Nothing - Me.ASPoster.Image = Nothing + Me.pbASPoster.Image = Nothing + Me.pbASPoster.Tag = Nothing + Me.ASPoster = Nothing End Sub Private Sub btnEditActor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditActor.Click @@ -141,13 +144,15 @@ Public Class dlgEditShow End Sub Private Sub btnRemoveFanart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveFanart.Click - Me.pbFanart.Image = Nothing - Me.Fanart.Image = Nothing + Me.pbFanart.Image = Nothing + Me.pbFanart.Tag = Nothing + Me.Fanart = Nothing End Sub Private Sub btnRemovePoster_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemovePoster.Click - Me.pbPoster.Image = Nothing - Me.Poster.Image = Nothing + Me.pbPoster.Image = Nothing + Me.pbPoster.Tag = Nothing + Me.Poster = Nothing End Sub Private Sub btnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemove.Click @@ -157,25 +162,27 @@ Public Class dlgEditShow Private Sub btnSetFanartDL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetFanartDL.Click Try Using dImgManual As New dlgImgManual - If dImgManual.ShowDialog(Enums.ImageType.Fanart) = DialogResult.OK Then - Fanart.FromFile(Path.Combine(Master.TempPath, "fanart.jpg")) - pbFanart.Image = Fanart.Image - - Me.lblFanartSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbFanart.Image.Width, Me.pbFanart.Image.Height) - Me.lblFanartSize.Visible = True - End If - End Using + Dim tImage As Images = dImgManual.ShowDialog(Enums.ImageType.Fanart) + If Not IsNothing(tImage) Then + Fanart = tImage + pbFanart.Image = Fanart.Image + + Me.lblFanartSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbFanart.Image.Width, Me.pbFanart.Image.Height) + Me.lblFanartSize.Visible = True + End If + End Using Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") End Try End Sub Private Sub btnSetFanartScrape_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetFanartScrape.Click - Dim tImage As Image = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.ShowFanart, 0, 0, Master.currShow.ShowLanguage, Master.currShow.Ordering, Me.pbFanart.Image) + Dim tImage As Images = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.ShowFanart, 0, 0, Master.currShow.ShowLanguage, Master.currShow.Ordering, CType(Fanart, Images)) If Not IsNothing(tImage) Then - Me.Fanart.Image = New Bitmap(tImage) - Me.pbFanart.Image = tImage + Me.Fanart = tImage + Me.pbFanart.Image = tImage.Image + Me.pbFanart.Tag = tImage Me.lblFanartSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbFanart.Image.Width, Me.pbFanart.Image.Height) Me.lblFanartSize.Visible = True @@ -205,25 +212,27 @@ Public Class dlgEditShow Private Sub btnSetPosterDL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetPosterDL.Click Try Using dImgManual As New dlgImgManual - If dImgManual.ShowDialog(Enums.ImageType.Posters) = DialogResult.OK Then - Poster.FromFile(Path.Combine(Master.TempPath, "poster.jpg")) - pbPoster.Image = Poster.Image - - Me.lblPosterSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbPoster.Image.Width, Me.pbPoster.Image.Height) - Me.lblPosterSize.Visible = True - End If - End Using + Dim tImage As Images = dImgManual.ShowDialog(Enums.ImageType.Posters) + If Not IsNothing(tImage) Then + Poster = tImage + pbPoster.Image = Poster.Image + + Me.lblPosterSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbPoster.Image.Width, Me.pbPoster.Image.Height) + Me.lblPosterSize.Visible = True + End If + End Using Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") End Try End Sub Private Sub btnSetPosterScrape_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetPosterScrape.Click - Dim tImage As Image = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.ShowPoster, 0, 0, Master.currShow.ShowLanguage, Master.currShow.Ordering, Me.pbPoster.Image) + Dim tImage As Images = ModulesManager.Instance.TVSingleImageOnly(Master.currShow.TVShow.Title, Convert.ToInt32(Master.currShow.ShowID), Master.currShow.TVShow.ID, Enums.TVImageType.ShowPoster, 0, 0, Master.currShow.ShowLanguage, Master.currShow.Ordering, CType(Poster, Images)) If Not IsNothing(tImage) Then - Me.Poster.Image = New Bitmap(tImage) - Me.pbPoster.Image = tImage + Me.Poster = tImage + Me.pbPoster.Image = tImage.Image + Me.pbPoster.Tag = tImage Me.lblPosterSize.Text = String.Format(Master.eLang.GetString(269, "Size: {0}x{1}"), Me.pbPoster.Image.Width, Me.pbPoster.Image.Height) Me.lblPosterSize.Visible = True @@ -733,14 +742,14 @@ Public Class dlgEditShow End If If Not IsNothing(.Fanart.Image) Then - Master.currShow.ShowFanartPath = .Fanart.SaveAsShowFanart(Master.currShow) + Master.currShow.ShowFanartPath = .Fanart.SaveAsShowFanart(Master.currShow, "") Else .Fanart.DeleteShowFanart(Master.currShow) Master.currShow.ShowFanartPath = String.Empty End If If Not IsNothing(.Poster.Image) Then - Master.currShow.ShowPosterPath = .Poster.SaveAsShowPoster(Master.currShow) + Master.currShow.ShowPosterPath = .Poster.SaveAsShowPoster(Master.currShow, "") Else .Poster.DeleteShowPosters(Master.currShow) Master.currShow.ShowPosterPath = String.Empty @@ -748,7 +757,7 @@ Public Class dlgEditShow If Master.eSettings.AllSeasonPosterEnabled Then If Not IsNothing(.ASPoster.Image) Then - Master.currShow.SeasonPosterPath = .ASPoster.SaveAsAllSeasonPoster(Master.currShow) + Master.currShow.SeasonPosterPath = .ASPoster.SaveAsAllSeasonPoster(Master.currShow, "") Else .ASPoster.DeleteAllSeasonPosters(Master.currShow) Master.currShow.SeasonPosterPath = String.Empty diff --git a/Ember Media Manager/dlgFIStreamEditor.Designer.vb b/Ember Media Manager/dlgFIStreamEditor.Designer.vb index 111e6da..2bd0c7a 100644 --- a/Ember Media Manager/dlgFIStreamEditor.Designer.vb +++ b/Ember Media Manager/dlgFIStreamEditor.Designer.vb @@ -22,421 +22,514 @@ Partial Class dlgFIStreamEditor 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() - Me.OK_Button = New System.Windows.Forms.Button() - Me.Cancel_Button = New System.Windows.Forms.Button() - Me.GroupBox1 = New System.Windows.Forms.GroupBox() - Me.Label8 = New System.Windows.Forms.Label() - Me.cbVideoLanguage = New System.Windows.Forms.ComboBox() - Me.Label5 = New System.Windows.Forms.Label() - Me.txtARatio = New System.Windows.Forms.TextBox() - Me.rbInterlaced = New System.Windows.Forms.RadioButton() - Me.rbProgressive = New System.Windows.Forms.RadioButton() - Me.Label4 = New System.Windows.Forms.Label() - Me.cbVideoCodec = New System.Windows.Forms.ComboBox() - Me.Label3 = New System.Windows.Forms.Label() - Me.txtDuration = New System.Windows.Forms.TextBox() - Me.Label2 = New System.Windows.Forms.Label() - Me.Label1 = New System.Windows.Forms.Label() - Me.txtHeight = New System.Windows.Forms.TextBox() - Me.txtWidth = New System.Windows.Forms.TextBox() - Me.GroupBox2 = New System.Windows.Forms.GroupBox() - Me.Label9 = New System.Windows.Forms.Label() - Me.cbAudioChannels = New System.Windows.Forms.ComboBox() - Me.Label7 = New System.Windows.Forms.Label() - Me.cbAudioCodec = New System.Windows.Forms.ComboBox() - Me.Label6 = New System.Windows.Forms.Label() - Me.cbAudioLanguage = New System.Windows.Forms.ComboBox() - Me.GroupBox3 = New System.Windows.Forms.GroupBox() - Me.rbExternal = New System.Windows.Forms.RadioButton() - Me.rbEmbedded = New System.Windows.Forms.RadioButton() - Me.Label10 = New System.Windows.Forms.Label() - Me.cbSubsLanguage = New System.Windows.Forms.ComboBox() - Me.Panel1 = New System.Windows.Forms.Panel() - Me.TableLayoutPanel1.SuspendLayout() - Me.GroupBox1.SuspendLayout() - Me.GroupBox2.SuspendLayout() - Me.GroupBox3.SuspendLayout() - Me.Panel1.SuspendLayout() - Me.SuspendLayout() - ' - 'TableLayoutPanel1 - ' - Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.TableLayoutPanel1.ColumnCount = 2 - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) - Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) - Me.TableLayoutPanel1.Location = New System.Drawing.Point(87, 215) - Me.TableLayoutPanel1.Name = "TableLayoutPanel1" - Me.TableLayoutPanel1.RowCount = 1 - Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) - Me.TableLayoutPanel1.TabIndex = 0 - ' - 'OK_Button - ' - Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None - Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.OK_Button.Location = New System.Drawing.Point(3, 3) - Me.OK_Button.Name = "OK_Button" - Me.OK_Button.Size = New System.Drawing.Size(67, 23) - Me.OK_Button.TabIndex = 0 - Me.OK_Button.Text = "OK" - ' - 'Cancel_Button - ' - Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None - Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) - Me.Cancel_Button.Name = "Cancel_Button" - Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) - Me.Cancel_Button.TabIndex = 1 - Me.Cancel_Button.Text = "Cancel" - ' - 'GroupBox1 - ' - Me.GroupBox1.Controls.Add(Me.Label8) - Me.GroupBox1.Controls.Add(Me.cbVideoLanguage) - Me.GroupBox1.Controls.Add(Me.Label5) - Me.GroupBox1.Controls.Add(Me.txtARatio) - Me.GroupBox1.Controls.Add(Me.rbInterlaced) - Me.GroupBox1.Controls.Add(Me.rbProgressive) - Me.GroupBox1.Controls.Add(Me.Label4) - Me.GroupBox1.Controls.Add(Me.cbVideoCodec) - Me.GroupBox1.Controls.Add(Me.Label3) - Me.GroupBox1.Controls.Add(Me.txtDuration) - Me.GroupBox1.Controls.Add(Me.Label2) - Me.GroupBox1.Controls.Add(Me.Label1) - Me.GroupBox1.Controls.Add(Me.txtHeight) - Me.GroupBox1.Controls.Add(Me.txtWidth) - Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox1.Location = New System.Drawing.Point(21, 7) - Me.GroupBox1.Name = "GroupBox1" - Me.GroupBox1.Size = New System.Drawing.Size(191, 194) - Me.GroupBox1.TabIndex = 0 - Me.GroupBox1.TabStop = False - Me.GroupBox1.Text = "Video Streams" - Me.GroupBox1.Visible = False - ' - 'Label8 - ' - Me.Label8.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label8.Location = New System.Drawing.Point(4, 167) - Me.Label8.Name = "Label8" - Me.Label8.Size = New System.Drawing.Size(68, 19) - Me.Label8.TabIndex = 12 - Me.Label8.Text = "Language" - Me.Label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'cbVideoLanguage - ' - Me.cbVideoLanguage.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend - Me.cbVideoLanguage.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems - Me.cbVideoLanguage.DropDownWidth = 120 - Me.cbVideoLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbVideoLanguage.FormattingEnabled = True - Me.cbVideoLanguage.Location = New System.Drawing.Point(76, 165) - Me.cbVideoLanguage.Name = "cbVideoLanguage" - Me.cbVideoLanguage.Size = New System.Drawing.Size(93, 21) - Me.cbVideoLanguage.TabIndex = 13 - ' - 'Label5 - ' - Me.Label5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label5.Location = New System.Drawing.Point(5, 116) - Me.Label5.Name = "Label5" - Me.Label5.Size = New System.Drawing.Size(68, 19) - Me.Label5.TabIndex = 8 - Me.Label5.Text = "Aspect Ratio" - Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'txtARatio - ' - Me.txtARatio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtARatio.Location = New System.Drawing.Point(76, 115) - Me.txtARatio.Name = "txtARatio" - Me.txtARatio.Size = New System.Drawing.Size(48, 22) - Me.txtARatio.TabIndex = 9 - ' - 'rbInterlaced - ' - Me.rbInterlaced.AutoSize = True - Me.rbInterlaced.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.rbInterlaced.Location = New System.Drawing.Point(111, 45) - Me.rbInterlaced.Name = "rbInterlaced" - Me.rbInterlaced.Size = New System.Drawing.Size(76, 17) - Me.rbInterlaced.TabIndex = 3 - Me.rbInterlaced.TabStop = True - Me.rbInterlaced.Text = "Interlaced" - Me.rbInterlaced.UseVisualStyleBackColor = True - ' - 'rbProgressive - ' - Me.rbProgressive.AutoSize = True - Me.rbProgressive.Checked = True - Me.rbProgressive.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.rbProgressive.Location = New System.Drawing.Point(25, 45) - Me.rbProgressive.Name = "rbProgressive" - Me.rbProgressive.Size = New System.Drawing.Size(85, 17) - Me.rbProgressive.TabIndex = 2 - Me.rbProgressive.TabStop = True - Me.rbProgressive.Text = "Progressive" - Me.rbProgressive.UseVisualStyleBackColor = True - ' - 'Label4 - ' - Me.Label4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label4.Location = New System.Drawing.Point(22, 21) - Me.Label4.Name = "Label4" - Me.Label4.Size = New System.Drawing.Size(51, 15) - Me.Label4.TabIndex = 0 - Me.Label4.Text = "Codec" - Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'cbVideoCodec - ' - Me.cbVideoCodec.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbVideoCodec.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbVideoCodec.FormattingEnabled = True - Me.cbVideoCodec.Location = New System.Drawing.Point(76, 19) - Me.cbVideoCodec.Name = "cbVideoCodec" - Me.cbVideoCodec.Size = New System.Drawing.Size(93, 21) - Me.cbVideoCodec.TabIndex = 1 - ' - 'Label3 - ' - Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label3.Location = New System.Drawing.Point(17, 143) - Me.Label3.Name = "Label3" - Me.Label3.Size = New System.Drawing.Size(56, 13) - Me.Label3.TabIndex = 10 - Me.Label3.Text = "Duration" - Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'txtDuration - ' - Me.txtDuration.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtDuration.Location = New System.Drawing.Point(76, 139) - Me.txtDuration.Name = "txtDuration" - Me.txtDuration.Size = New System.Drawing.Size(68, 22) - Me.txtDuration.TabIndex = 11 - ' - 'Label2 - ' - Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label2.Location = New System.Drawing.Point(17, 93) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(56, 16) - Me.Label2.TabIndex = 6 - Me.Label2.Text = "Height" - Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'Label1 - ' - Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label1.Location = New System.Drawing.Point(20, 69) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(53, 19) - Me.Label1.TabIndex = 4 - Me.Label1.Text = "Width" - Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'txtHeight - ' - Me.txtHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtHeight.Location = New System.Drawing.Point(76, 91) - Me.txtHeight.Name = "txtHeight" - Me.txtHeight.Size = New System.Drawing.Size(48, 22) - Me.txtHeight.TabIndex = 7 - ' - 'txtWidth - ' - Me.txtWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtWidth.Location = New System.Drawing.Point(76, 68) - Me.txtWidth.Name = "txtWidth" - Me.txtWidth.Size = New System.Drawing.Size(48, 22) - Me.txtWidth.TabIndex = 5 - ' - 'GroupBox2 - ' - Me.GroupBox2.Controls.Add(Me.Label9) - Me.GroupBox2.Controls.Add(Me.cbAudioChannels) - Me.GroupBox2.Controls.Add(Me.Label7) - Me.GroupBox2.Controls.Add(Me.cbAudioCodec) - Me.GroupBox2.Controls.Add(Me.Label6) - Me.GroupBox2.Controls.Add(Me.cbAudioLanguage) - Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.GroupBox2.Location = New System.Drawing.Point(21, 7) - Me.GroupBox2.Name = "GroupBox2" - Me.GroupBox2.Size = New System.Drawing.Size(191, 194) - Me.GroupBox2.TabIndex = 5 - Me.GroupBox2.TabStop = False - Me.GroupBox2.Text = "Audio Streams" - Me.GroupBox2.Visible = False - ' - 'Label9 - ' - Me.Label9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label9.Location = New System.Drawing.Point(3, 75) - Me.Label9.Name = "Label9" - Me.Label9.Size = New System.Drawing.Size(68, 19) - Me.Label9.TabIndex = 4 - Me.Label9.Text = "Channels" - Me.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'cbAudioChannels - ' - Me.cbAudioChannels.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbAudioChannels.FormattingEnabled = True - Me.cbAudioChannels.Location = New System.Drawing.Point(75, 73) - Me.cbAudioChannels.Name = "cbAudioChannels" - Me.cbAudioChannels.Size = New System.Drawing.Size(93, 21) - Me.cbAudioChannels.TabIndex = 5 - ' - 'Label7 - ' - Me.Label7.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label7.Location = New System.Drawing.Point(3, 48) - Me.Label7.Name = "Label7" - Me.Label7.Size = New System.Drawing.Size(68, 19) - Me.Label7.TabIndex = 2 - Me.Label7.Text = "Codec" - Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'cbAudioCodec - ' - Me.cbAudioCodec.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbAudioCodec.FormattingEnabled = True - Me.cbAudioCodec.Location = New System.Drawing.Point(75, 46) - Me.cbAudioCodec.Name = "cbAudioCodec" - Me.cbAudioCodec.Size = New System.Drawing.Size(93, 21) - Me.cbAudioCodec.TabIndex = 3 - ' - 'Label6 - ' - Me.Label6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label6.Location = New System.Drawing.Point(3, 21) - Me.Label6.Name = "Label6" - Me.Label6.Size = New System.Drawing.Size(68, 19) - Me.Label6.TabIndex = 0 - Me.Label6.Text = "Language" - Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'cbAudioLanguage - ' - Me.cbAudioLanguage.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend - Me.cbAudioLanguage.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems - Me.cbAudioLanguage.DropDownWidth = 120 - Me.cbAudioLanguage.FormattingEnabled = True - Me.cbAudioLanguage.Location = New System.Drawing.Point(75, 19) - Me.cbAudioLanguage.Name = "cbAudioLanguage" - Me.cbAudioLanguage.Size = New System.Drawing.Size(93, 21) - Me.cbAudioLanguage.Sorted = True - Me.cbAudioLanguage.TabIndex = 1 - ' - 'GroupBox3 - ' - Me.GroupBox3.Controls.Add(Me.rbExternal) - Me.GroupBox3.Controls.Add(Me.rbEmbedded) - Me.GroupBox3.Controls.Add(Me.Label10) - Me.GroupBox3.Controls.Add(Me.cbSubsLanguage) - Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.GroupBox3.Location = New System.Drawing.Point(21, 7) - Me.GroupBox3.Name = "GroupBox3" - Me.GroupBox3.Size = New System.Drawing.Size(191, 194) - Me.GroupBox3.TabIndex = 6 - Me.GroupBox3.TabStop = False - Me.GroupBox3.Text = "Subtitle Streams" - Me.GroupBox3.Visible = False - ' - 'rbExternal - ' - Me.rbExternal.AutoSize = True - Me.rbExternal.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.rbExternal.Location = New System.Drawing.Point(94, 46) - Me.rbExternal.Name = "rbExternal" - Me.rbExternal.Size = New System.Drawing.Size(67, 17) - Me.rbExternal.TabIndex = 24 - Me.rbExternal.TabStop = True - Me.rbExternal.Text = "External" - Me.rbExternal.UseVisualStyleBackColor = True - ' - 'rbEmbedded - ' - Me.rbEmbedded.AutoSize = True - Me.rbEmbedded.Checked = True - Me.rbEmbedded.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.rbEmbedded.Location = New System.Drawing.Point(8, 46) - Me.rbEmbedded.Name = "rbEmbedded" - Me.rbEmbedded.Size = New System.Drawing.Size(81, 17) - Me.rbEmbedded.TabIndex = 23 - Me.rbEmbedded.TabStop = True - Me.rbEmbedded.Text = "Embedded" - Me.rbEmbedded.UseVisualStyleBackColor = True - ' - 'Label10 - ' - Me.Label10.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label10.Location = New System.Drawing.Point(5, 21) - Me.Label10.Name = "Label10" - Me.Label10.Size = New System.Drawing.Size(71, 19) - Me.Label10.TabIndex = 22 - Me.Label10.Text = "Language" - Me.Label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'cbSubsLanguage - ' - Me.cbSubsLanguage.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend - Me.cbSubsLanguage.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems - Me.cbSubsLanguage.DropDownWidth = 120 - Me.cbSubsLanguage.FormattingEnabled = True - Me.cbSubsLanguage.Location = New System.Drawing.Point(79, 21) - Me.cbSubsLanguage.Name = "cbSubsLanguage" - Me.cbSubsLanguage.Size = New System.Drawing.Size(93, 21) - Me.cbSubsLanguage.Sorted = True - Me.cbSubsLanguage.TabIndex = 0 - ' - 'Panel1 - ' - Me.Panel1.BackColor = System.Drawing.Color.White - Me.Panel1.Controls.Add(Me.GroupBox1) - Me.Panel1.Controls.Add(Me.GroupBox2) - Me.Panel1.Controls.Add(Me.GroupBox3) - Me.Panel1.Location = New System.Drawing.Point(3, 3) - Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(236, 209) - Me.Panel1.TabIndex = 1 - ' - 'dlgFIStreamEditor - ' - Me.AcceptButton = Me.OK_Button - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(241, 247) - Me.Controls.Add(Me.Panel1) - Me.Controls.Add(Me.TableLayoutPanel1) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "dlgFIStreamEditor" - Me.ShowInTaskbar = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Stream Editor" - Me.TableLayoutPanel1.ResumeLayout(False) - Me.GroupBox1.ResumeLayout(False) - Me.GroupBox1.PerformLayout() - Me.GroupBox2.ResumeLayout(False) - Me.GroupBox3.ResumeLayout(False) - Me.GroupBox3.PerformLayout() - Me.Panel1.ResumeLayout(False) - Me.ResumeLayout(False) + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Label12 = New System.Windows.Forms.Label() + Me.txtMultiview = New System.Windows.Forms.TextBox() + Me.Label11 = New System.Windows.Forms.Label() + Me.txtBitrate = New System.Windows.Forms.TextBox() + Me.Label8 = New System.Windows.Forms.Label() + Me.cbVideoLanguage = New System.Windows.Forms.ComboBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.txtARatio = New System.Windows.Forms.TextBox() + Me.rbInterlaced = New System.Windows.Forms.RadioButton() + Me.rbProgressive = New System.Windows.Forms.RadioButton() + Me.Label4 = New System.Windows.Forms.Label() + Me.cbVideoCodec = New System.Windows.Forms.ComboBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.txtDuration = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.txtHeight = New System.Windows.Forms.TextBox() + Me.txtWidth = New System.Windows.Forms.TextBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.txtABitrate = New System.Windows.Forms.TextBox() + Me.Label13 = New System.Windows.Forms.Label() + Me.Label9 = New System.Windows.Forms.Label() + Me.cbAudioChannels = New System.Windows.Forms.ComboBox() + Me.Label7 = New System.Windows.Forms.Label() + Me.cbAudioCodec = New System.Windows.Forms.ComboBox() + Me.Label6 = New System.Windows.Forms.Label() + Me.cbAudioLanguage = New System.Windows.Forms.ComboBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.rbExternal = New System.Windows.Forms.RadioButton() + Me.rbEmbedded = New System.Windows.Forms.RadioButton() + Me.Label10 = New System.Windows.Forms.Label() + Me.cbSubsLanguage = New System.Windows.Forms.ComboBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.txtEncodingSettings = New System.Windows.Forms.TextBox() + Me.lblEncoding = New System.Windows.Forms.Label() + Me.TableLayoutPanel1.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.GroupBox3.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(88, 372) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.Label12) + Me.GroupBox1.Controls.Add(Me.txtMultiview) + Me.GroupBox1.Controls.Add(Me.Label11) + Me.GroupBox1.Controls.Add(Me.txtBitrate) + Me.GroupBox1.Controls.Add(Me.Label8) + Me.GroupBox1.Controls.Add(Me.cbVideoLanguage) + Me.GroupBox1.Controls.Add(Me.Label5) + Me.GroupBox1.Controls.Add(Me.txtARatio) + Me.GroupBox1.Controls.Add(Me.rbInterlaced) + Me.GroupBox1.Controls.Add(Me.rbProgressive) + Me.GroupBox1.Controls.Add(Me.Label4) + Me.GroupBox1.Controls.Add(Me.cbVideoCodec) + Me.GroupBox1.Controls.Add(Me.Label3) + Me.GroupBox1.Controls.Add(Me.txtDuration) + Me.GroupBox1.Controls.Add(Me.Label2) + Me.GroupBox1.Controls.Add(Me.Label1) + Me.GroupBox1.Controls.Add(Me.txtHeight) + Me.GroupBox1.Controls.Add(Me.txtWidth) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(21, 7) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(191, 248) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Video Streams" + Me.GroupBox1.Visible = False + ' + 'Label12 + ' + Me.Label12.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label12.Location = New System.Drawing.Point(8, 220) + Me.Label12.Name = "Label12" + Me.Label12.Size = New System.Drawing.Size(63, 22) + Me.Label12.TabIndex = 16 + Me.Label12.Text = "MultiView" + Me.Label12.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'txtMultiview + ' + Me.txtMultiview.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtMultiview.Location = New System.Drawing.Point(76, 220) + Me.txtMultiview.Name = "txtMultiview" + Me.txtMultiview.Size = New System.Drawing.Size(48, 22) + Me.txtMultiview.TabIndex = 17 + ' + 'Label11 + ' + Me.Label11.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label11.Location = New System.Drawing.Point(16, 196) + Me.Label11.Name = "Label11" + Me.Label11.Size = New System.Drawing.Size(56, 13) + Me.Label11.TabIndex = 14 + Me.Label11.Text = "Bitrate" + Me.Label11.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'txtBitrate + ' + Me.txtBitrate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtBitrate.Location = New System.Drawing.Point(76, 192) + Me.txtBitrate.Name = "txtBitrate" + Me.txtBitrate.Size = New System.Drawing.Size(68, 22) + Me.txtBitrate.TabIndex = 15 + ' + 'Label8 + ' + Me.Label8.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label8.Location = New System.Drawing.Point(4, 167) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(68, 19) + Me.Label8.TabIndex = 12 + Me.Label8.Text = "Language" + Me.Label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'cbVideoLanguage + ' + Me.cbVideoLanguage.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend + Me.cbVideoLanguage.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems + Me.cbVideoLanguage.DropDownWidth = 120 + Me.cbVideoLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbVideoLanguage.FormattingEnabled = True + Me.cbVideoLanguage.Location = New System.Drawing.Point(76, 165) + Me.cbVideoLanguage.Name = "cbVideoLanguage" + Me.cbVideoLanguage.Size = New System.Drawing.Size(93, 21) + Me.cbVideoLanguage.TabIndex = 13 + ' + 'Label5 + ' + Me.Label5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label5.Location = New System.Drawing.Point(5, 116) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(68, 19) + Me.Label5.TabIndex = 8 + Me.Label5.Text = "Aspect Ratio" + Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'txtARatio + ' + Me.txtARatio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtARatio.Location = New System.Drawing.Point(76, 115) + Me.txtARatio.Name = "txtARatio" + Me.txtARatio.Size = New System.Drawing.Size(48, 22) + Me.txtARatio.TabIndex = 9 + ' + 'rbInterlaced + ' + Me.rbInterlaced.AutoSize = True + Me.rbInterlaced.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbInterlaced.Location = New System.Drawing.Point(111, 45) + Me.rbInterlaced.Name = "rbInterlaced" + Me.rbInterlaced.Size = New System.Drawing.Size(76, 17) + Me.rbInterlaced.TabIndex = 3 + Me.rbInterlaced.TabStop = True + Me.rbInterlaced.Text = "Interlaced" + Me.rbInterlaced.UseVisualStyleBackColor = True + ' + 'rbProgressive + ' + Me.rbProgressive.AutoSize = True + Me.rbProgressive.Checked = True + Me.rbProgressive.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbProgressive.Location = New System.Drawing.Point(25, 45) + Me.rbProgressive.Name = "rbProgressive" + Me.rbProgressive.Size = New System.Drawing.Size(85, 17) + Me.rbProgressive.TabIndex = 2 + Me.rbProgressive.TabStop = True + Me.rbProgressive.Text = "Progressive" + Me.rbProgressive.UseVisualStyleBackColor = True + ' + 'Label4 + ' + Me.Label4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label4.Location = New System.Drawing.Point(22, 21) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(51, 15) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Codec" + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'cbVideoCodec + ' + Me.cbVideoCodec.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbVideoCodec.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbVideoCodec.FormattingEnabled = True + Me.cbVideoCodec.Location = New System.Drawing.Point(76, 19) + Me.cbVideoCodec.Name = "cbVideoCodec" + Me.cbVideoCodec.Size = New System.Drawing.Size(93, 21) + Me.cbVideoCodec.TabIndex = 1 + ' + 'Label3 + ' + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label3.Location = New System.Drawing.Point(17, 143) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(56, 13) + Me.Label3.TabIndex = 10 + Me.Label3.Text = "Duration" + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'txtDuration + ' + Me.txtDuration.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtDuration.Location = New System.Drawing.Point(76, 139) + Me.txtDuration.Name = "txtDuration" + Me.txtDuration.Size = New System.Drawing.Size(68, 22) + Me.txtDuration.TabIndex = 11 + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(17, 93) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(56, 16) + Me.Label2.TabIndex = 6 + Me.Label2.Text = "Height" + Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label1 + ' + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.Location = New System.Drawing.Point(20, 69) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(53, 19) + Me.Label1.TabIndex = 4 + Me.Label1.Text = "Width" + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'txtHeight + ' + Me.txtHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtHeight.Location = New System.Drawing.Point(76, 91) + Me.txtHeight.Name = "txtHeight" + Me.txtHeight.Size = New System.Drawing.Size(48, 22) + Me.txtHeight.TabIndex = 7 + ' + 'txtWidth + ' + Me.txtWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtWidth.Location = New System.Drawing.Point(76, 68) + Me.txtWidth.Name = "txtWidth" + Me.txtWidth.Size = New System.Drawing.Size(48, 22) + Me.txtWidth.TabIndex = 5 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.txtABitrate) + Me.GroupBox2.Controls.Add(Me.Label13) + Me.GroupBox2.Controls.Add(Me.Label9) + Me.GroupBox2.Controls.Add(Me.cbAudioChannels) + Me.GroupBox2.Controls.Add(Me.Label7) + Me.GroupBox2.Controls.Add(Me.cbAudioCodec) + Me.GroupBox2.Controls.Add(Me.Label6) + Me.GroupBox2.Controls.Add(Me.cbAudioLanguage) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(21, 7) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(191, 194) + Me.GroupBox2.TabIndex = 5 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Audio Streams" + Me.GroupBox2.Visible = False + ' + 'txtABitrate + ' + Me.txtABitrate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtABitrate.Location = New System.Drawing.Point(75, 100) + Me.txtABitrate.Name = "txtABitrate" + Me.txtABitrate.Size = New System.Drawing.Size(93, 22) + Me.txtABitrate.TabIndex = 19 + ' + 'Label13 + ' + Me.Label13.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label13.Location = New System.Drawing.Point(8, 98) + Me.Label13.Name = "Label13" + Me.Label13.Size = New System.Drawing.Size(63, 22) + Me.Label13.TabIndex = 18 + Me.Label13.Text = "Bitrate" + Me.Label13.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'Label9 + ' + Me.Label9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label9.Location = New System.Drawing.Point(3, 75) + Me.Label9.Name = "Label9" + Me.Label9.Size = New System.Drawing.Size(68, 19) + Me.Label9.TabIndex = 4 + Me.Label9.Text = "Channels" + Me.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'cbAudioChannels + ' + Me.cbAudioChannels.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbAudioChannels.FormattingEnabled = True + Me.cbAudioChannels.Location = New System.Drawing.Point(75, 73) + Me.cbAudioChannels.Name = "cbAudioChannels" + Me.cbAudioChannels.Size = New System.Drawing.Size(93, 21) + Me.cbAudioChannels.TabIndex = 5 + ' + 'Label7 + ' + Me.Label7.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label7.Location = New System.Drawing.Point(3, 48) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(68, 19) + Me.Label7.TabIndex = 2 + Me.Label7.Text = "Codec" + Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'cbAudioCodec + ' + Me.cbAudioCodec.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbAudioCodec.FormattingEnabled = True + Me.cbAudioCodec.Location = New System.Drawing.Point(75, 46) + Me.cbAudioCodec.Name = "cbAudioCodec" + Me.cbAudioCodec.Size = New System.Drawing.Size(93, 21) + Me.cbAudioCodec.TabIndex = 3 + ' + 'Label6 + ' + Me.Label6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label6.Location = New System.Drawing.Point(3, 21) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(68, 19) + Me.Label6.TabIndex = 0 + Me.Label6.Text = "Language" + Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'cbAudioLanguage + ' + Me.cbAudioLanguage.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend + Me.cbAudioLanguage.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems + Me.cbAudioLanguage.DropDownWidth = 120 + Me.cbAudioLanguage.FormattingEnabled = True + Me.cbAudioLanguage.Location = New System.Drawing.Point(75, 19) + Me.cbAudioLanguage.Name = "cbAudioLanguage" + Me.cbAudioLanguage.Size = New System.Drawing.Size(93, 21) + Me.cbAudioLanguage.Sorted = True + Me.cbAudioLanguage.TabIndex = 1 + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.rbExternal) + Me.GroupBox3.Controls.Add(Me.rbEmbedded) + Me.GroupBox3.Controls.Add(Me.Label10) + Me.GroupBox3.Controls.Add(Me.cbSubsLanguage) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(21, 7) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(191, 194) + Me.GroupBox3.TabIndex = 6 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Subtitle Streams" + Me.GroupBox3.Visible = False + ' + 'rbExternal + ' + Me.rbExternal.AutoSize = True + Me.rbExternal.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbExternal.Location = New System.Drawing.Point(94, 46) + Me.rbExternal.Name = "rbExternal" + Me.rbExternal.Size = New System.Drawing.Size(67, 17) + Me.rbExternal.TabIndex = 24 + Me.rbExternal.TabStop = True + Me.rbExternal.Text = "External" + Me.rbExternal.UseVisualStyleBackColor = True + ' + 'rbEmbedded + ' + Me.rbEmbedded.AutoSize = True + Me.rbEmbedded.Checked = True + Me.rbEmbedded.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbEmbedded.Location = New System.Drawing.Point(8, 46) + Me.rbEmbedded.Name = "rbEmbedded" + Me.rbEmbedded.Size = New System.Drawing.Size(81, 17) + Me.rbEmbedded.TabIndex = 23 + Me.rbEmbedded.TabStop = True + Me.rbEmbedded.Text = "Embedded" + Me.rbEmbedded.UseVisualStyleBackColor = True + ' + 'Label10 + ' + Me.Label10.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label10.Location = New System.Drawing.Point(5, 21) + Me.Label10.Name = "Label10" + Me.Label10.Size = New System.Drawing.Size(71, 19) + Me.Label10.TabIndex = 22 + Me.Label10.Text = "Language" + Me.Label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'cbSubsLanguage + ' + Me.cbSubsLanguage.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend + Me.cbSubsLanguage.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems + Me.cbSubsLanguage.DropDownWidth = 120 + Me.cbSubsLanguage.FormattingEnabled = True + Me.cbSubsLanguage.Location = New System.Drawing.Point(79, 21) + Me.cbSubsLanguage.Name = "cbSubsLanguage" + Me.cbSubsLanguage.Size = New System.Drawing.Size(93, 21) + Me.cbSubsLanguage.Sorted = True + Me.cbSubsLanguage.TabIndex = 0 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.GroupBox1) + Me.Panel1.Controls.Add(Me.GroupBox2) + Me.Panel1.Controls.Add(Me.GroupBox3) + Me.Panel1.Location = New System.Drawing.Point(3, 3) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(236, 264) + Me.Panel1.TabIndex = 1 + ' + 'txtEncodingSettings + ' + Me.txtEncodingSettings.Location = New System.Drawing.Point(3, 289) + Me.txtEncodingSettings.Multiline = True + Me.txtEncodingSettings.Name = "txtEncodingSettings" + Me.txtEncodingSettings.ReadOnly = True + Me.txtEncodingSettings.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtEncodingSettings.Size = New System.Drawing.Size(236, 77) + Me.txtEncodingSettings.TabIndex = 2 + ' + 'lblEncoding + ' + Me.lblEncoding.AutoSize = True + Me.lblEncoding.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblEncoding.Location = New System.Drawing.Point(0, 270) + Me.lblEncoding.Name = "lblEncoding" + Me.lblEncoding.Size = New System.Drawing.Size(101, 13) + Me.lblEncoding.TabIndex = 11 + Me.lblEncoding.Text = "Encoding Settings" + Me.lblEncoding.TextAlign = System.Drawing.ContentAlignment.BottomLeft + ' + 'dlgFIStreamEditor + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(242, 404) + Me.Controls.Add(Me.lblEncoding) + Me.Controls.Add(Me.txtEncodingSettings) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.TableLayoutPanel1) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgFIStreamEditor" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Stream Editor" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox3.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() - End Sub + End Sub Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel Friend WithEvents OK_Button As System.Windows.Forms.Button Friend WithEvents Cancel_Button As System.Windows.Forms.Button @@ -468,5 +561,13 @@ Partial Class dlgFIStreamEditor Friend WithEvents rbExternal As System.Windows.Forms.RadioButton Friend WithEvents rbEmbedded As System.Windows.Forms.RadioButton Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents Label12 As System.Windows.Forms.Label + Friend WithEvents txtMultiview As System.Windows.Forms.TextBox + Friend WithEvents Label11 As System.Windows.Forms.Label + Friend WithEvents txtBitrate As System.Windows.Forms.TextBox + Friend WithEvents txtABitrate As System.Windows.Forms.TextBox + Friend WithEvents Label13 As System.Windows.Forms.Label + Friend WithEvents txtEncodingSettings As System.Windows.Forms.TextBox + Friend WithEvents lblEncoding As System.Windows.Forms.Label End Class diff --git a/Ember Media Manager/dlgFIStreamEditor.vb b/Ember Media Manager/dlgFIStreamEditor.vb index 72576ae..5956a0a 100644 --- a/Ember Media Manager/dlgFIStreamEditor.vb +++ b/Ember Media Manager/dlgFIStreamEditor.vb @@ -57,6 +57,14 @@ Public Class dlgFIStreamEditor End If txtDuration.Text = movie.StreamDetails.Video(idx).Duration cbVideoLanguage.Text = movie.StreamDetails.Video(idx).LongLanguage + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + 'Display new fields in Streameditor + txtMultiview.Text = movie.StreamDetails.Video(idx).MultiView + txtBitrate.Text = movie.StreamDetails.Video(idx).Bitrate + txtEncodingSettings.Text = movie.StreamDetails.Video(idx).EncodedSettings + 'cocotus end + End If End If If stream_type = Master.eLang.GetString(596, "Audio Stream") Then @@ -69,6 +77,13 @@ Public Class dlgFIStreamEditor cbAudioCodec.Text = movie.StreamDetails.Audio(idx).Codec cbAudioLanguage.Text = movie.StreamDetails.Audio(idx).LongLanguage cbAudioChannels.Text = movie.StreamDetails.Audio(idx).Channels + + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + 'Display new fields in Streameditor + txtABitrate.Text = movie.StreamDetails.Audio(idx).Bitrate + 'cocotus end + End If End If If stream_type = Master.eLang.GetString(597, "Subtitle Stream") Then @@ -94,6 +109,13 @@ Public Class dlgFIStreamEditor stream_v.Height = txtHeight.Text stream_v.Scantype = If(rbProgressive.Checked, Master.eLang.GetString(616, "Progressive"), Master.eLang.GetString(615, "Interlaced")) stream_v.Duration = txtDuration.Text + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + 'Save edits of new fields + stream_v.Bitrate = txtBitrate.Text + stream_v.MultiView = txtMultiview.Text + 'cocotus end + If Not cbVideoLanguage.SelectedItem Is Nothing Then stream_v.LongLanguage = cbVideoLanguage.SelectedItem.ToString If Not cbVideoLanguage.SelectedItem Is Nothing Then stream_v.Language = Localization.ISOLangGetCode3ByLang(cbVideoLanguage.SelectedItem.ToString) Return stream_v @@ -103,6 +125,12 @@ Public Class dlgFIStreamEditor If Not cbAudioLanguage.SelectedItem Is Nothing Then stream_a.LongLanguage = cbAudioLanguage.SelectedItem.ToString If Not cbAudioLanguage.SelectedItem Is Nothing Then stream_a.Language = Localization.ISOLangGetCode3ByLang(cbAudioLanguage.SelectedItem.ToString) If Not cbAudioChannels.SelectedItem Is Nothing Then stream_a.Channels = cbAudioChannels.SelectedItem.ToString + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + 'Save edits of new fields + stream_a.Bitrate = txtABitrate.Text + 'cocotus end + Return stream_a End If If stream_type = Master.eLang.GetString(597, "Subtitle Stream") Then diff --git a/Ember Media Manager/dlgFileInfo.Designer.vb b/Ember Media Manager/dlgFileInfo.Designer.vb index 10042c1..3a91ded 100644 --- a/Ember Media Manager/dlgFileInfo.Designer.vb +++ b/Ember Media Manager/dlgFileInfo.Designer.vb @@ -22,189 +22,200 @@ Partial Class dlgFileInfo 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Dim ListViewGroup1 As System.Windows.Forms.ListViewGroup = New System.Windows.Forms.ListViewGroup("Video Streams", System.Windows.Forms.HorizontalAlignment.Left) - Dim ListViewGroup2 As System.Windows.Forms.ListViewGroup = New System.Windows.Forms.ListViewGroup("Audio Streams", System.Windows.Forms.HorizontalAlignment.Left) - Dim ListViewGroup3 As System.Windows.Forms.ListViewGroup = New System.Windows.Forms.ListViewGroup("Subtitles Stream", System.Windows.Forms.HorizontalAlignment.Left) - Dim ListViewItem1 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem(New String() {"1", "H264", "Progressive"}, -1) - Dim ListViewItem2 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem(New String() {"1", "AC3", "English"}, -1) - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgFileInfo)) - Me.Cancel_Button = New System.Windows.Forms.Button() - Me.lvStreams = New System.Windows.Forms.ListView() - Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.ColumnHeader4 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.ColumnHeader5 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.ColumnHeader6 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.ColumnHeader7 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.ColumnHeader8 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.btnRemoveSet = New System.Windows.Forms.Button() - Me.btnEditSet = New System.Windows.Forms.Button() - Me.btnNewSet = New System.Windows.Forms.Button() - Me.Label4 = New System.Windows.Forms.Label() - Me.cbStreamType = New System.Windows.Forms.ComboBox() - Me.SuspendLayout() - ' - 'Cancel_Button - ' - Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Cancel_Button.Location = New System.Drawing.Point(501, 326) - Me.Cancel_Button.Name = "Cancel_Button" - Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) - Me.Cancel_Button.TabIndex = 0 - Me.Cancel_Button.Text = "Close" - ' - 'lvStreams - ' - Me.lvStreams.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ - Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lvStreams.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3, Me.ColumnHeader4, Me.ColumnHeader5, Me.ColumnHeader6, Me.ColumnHeader7, Me.ColumnHeader8}) - Me.lvStreams.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lvStreams.FullRowSelect = True - ListViewGroup1.Header = "Video Streams" - ListViewGroup1.Name = "VideoStreams" - ListViewGroup2.Header = "Audio Streams" - ListViewGroup2.Name = "AudioStreams" - ListViewGroup3.Header = "Subtitles Stream" - ListViewGroup3.Name = "SubtitlesStream" - Me.lvStreams.Groups.AddRange(New System.Windows.Forms.ListViewGroup() {ListViewGroup1, ListViewGroup2, ListViewGroup3}) - Me.lvStreams.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None - ListViewItem1.Group = ListViewGroup1 - ListViewItem2.Group = ListViewGroup2 - Me.lvStreams.Items.AddRange(New System.Windows.Forms.ListViewItem() {ListViewItem1, ListViewItem2}) - Me.lvStreams.Location = New System.Drawing.Point(4, 7) - Me.lvStreams.MultiSelect = False - Me.lvStreams.Name = "lvStreams" - Me.lvStreams.Size = New System.Drawing.Size(564, 315) - Me.lvStreams.TabIndex = 1 - Me.lvStreams.UseCompatibleStateImageBehavior = False - Me.lvStreams.View = System.Windows.Forms.View.Details - ' - 'ColumnHeader1 - ' - Me.ColumnHeader1.Width = 31 - ' - 'ColumnHeader2 - ' - Me.ColumnHeader2.Width = 77 - ' - 'ColumnHeader3 - ' - Me.ColumnHeader3.Width = 92 - ' - 'ColumnHeader4 - ' - Me.ColumnHeader4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center - Me.ColumnHeader4.Width = 64 - ' - 'ColumnHeader5 - ' - Me.ColumnHeader5.TextAlign = System.Windows.Forms.HorizontalAlignment.Center - Me.ColumnHeader5.Width = 58 - ' - 'ColumnHeader6 - ' - Me.ColumnHeader6.TextAlign = System.Windows.Forms.HorizontalAlignment.Center - Me.ColumnHeader6.Width = 80 - ' - 'ColumnHeader7 - ' - Me.ColumnHeader7.TextAlign = System.Windows.Forms.HorizontalAlignment.Center - Me.ColumnHeader7.Width = 90 - ' - 'ColumnHeader8 - ' - Me.ColumnHeader8.TextAlign = System.Windows.Forms.HorizontalAlignment.Center - Me.ColumnHeader8.Width = 65 - ' - 'btnRemoveSet - ' - Me.btnRemoveSet.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.btnRemoveSet.Enabled = False - Me.btnRemoveSet.Image = CType(resources.GetObject("btnRemoveSet.Image"), System.Drawing.Image) - Me.btnRemoveSet.Location = New System.Drawing.Point(269, 326) - Me.btnRemoveSet.Name = "btnRemoveSet" - Me.btnRemoveSet.Size = New System.Drawing.Size(23, 23) - Me.btnRemoveSet.TabIndex = 6 - Me.btnRemoveSet.UseVisualStyleBackColor = True - ' - 'btnEditSet - ' - Me.btnEditSet.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.btnEditSet.Enabled = False - Me.btnEditSet.Image = CType(resources.GetObject("btnEditSet.Image"), System.Drawing.Image) - Me.btnEditSet.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnEditSet.Location = New System.Drawing.Point(240, 326) - Me.btnEditSet.Name = "btnEditSet" - Me.btnEditSet.Size = New System.Drawing.Size(23, 23) - Me.btnEditSet.TabIndex = 5 - Me.btnEditSet.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnEditSet.UseVisualStyleBackColor = True - ' - 'btnNewSet - ' - Me.btnNewSet.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.btnNewSet.Enabled = False - Me.btnNewSet.Image = CType(resources.GetObject("btnNewSet.Image"), System.Drawing.Image) - Me.btnNewSet.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnNewSet.Location = New System.Drawing.Point(192, 326) - Me.btnNewSet.Name = "btnNewSet" - Me.btnNewSet.Size = New System.Drawing.Size(23, 23) - Me.btnNewSet.TabIndex = 4 - Me.btnNewSet.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnNewSet.UseVisualStyleBackColor = True - ' - 'Label4 - ' - Me.Label4.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.Label4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label4.Location = New System.Drawing.Point(6, 330) - Me.Label4.Name = "Label4" - Me.Label4.Size = New System.Drawing.Size(78, 15) - Me.Label4.TabIndex = 2 - Me.Label4.Text = "Stream Type" - Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'cbStreamType - ' - Me.cbStreamType.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.cbStreamType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbStreamType.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbStreamType.FormattingEnabled = True - Me.cbStreamType.Items.AddRange(New Object() {"Video", "Audio", "Subtitle"}) - Me.cbStreamType.Location = New System.Drawing.Point(96, 327) - Me.cbStreamType.Name = "cbStreamType" - Me.cbStreamType.Size = New System.Drawing.Size(93, 21) - Me.cbStreamType.TabIndex = 3 - ' - 'dlgFileInfo - ' - Me.AcceptButton = Me.Cancel_Button - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(576, 354) - Me.Controls.Add(Me.Cancel_Button) - Me.Controls.Add(Me.Label4) - Me.Controls.Add(Me.cbStreamType) - Me.Controls.Add(Me.btnRemoveSet) - Me.Controls.Add(Me.btnEditSet) - Me.Controls.Add(Me.btnNewSet) - Me.Controls.Add(Me.lvStreams) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "dlgFileInfo" - Me.ShowInTaskbar = False - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Meta Data Editor" - Me.ResumeLayout(False) + Dim ListViewGroup4 As System.Windows.Forms.ListViewGroup = New System.Windows.Forms.ListViewGroup("Video Streams", System.Windows.Forms.HorizontalAlignment.Left) + Dim ListViewGroup5 As System.Windows.Forms.ListViewGroup = New System.Windows.Forms.ListViewGroup("Audio Streams", System.Windows.Forms.HorizontalAlignment.Left) + Dim ListViewGroup6 As System.Windows.Forms.ListViewGroup = New System.Windows.Forms.ListViewGroup("Subtitles Stream", System.Windows.Forms.HorizontalAlignment.Left) + Dim ListViewItem3 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem(New String() {"1", "H264", "Progressive"}, -1) + Dim ListViewItem4 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem(New String() {"1", "AC3", "English"}, -1) + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgFileInfo)) + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.lvStreams = New System.Windows.Forms.ListView() + Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader4 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader5 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader6 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader7 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader8 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader9 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader10 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.btnRemoveSet = New System.Windows.Forms.Button() + Me.btnEditSet = New System.Windows.Forms.Button() + Me.btnNewSet = New System.Windows.Forms.Button() + Me.Label4 = New System.Windows.Forms.Label() + Me.cbStreamType = New System.Windows.Forms.ComboBox() + Me.SuspendLayout() + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(660, 325) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 0 + Me.Cancel_Button.Text = "Close" + ' + 'lvStreams + ' + Me.lvStreams.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lvStreams.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3, Me.ColumnHeader4, Me.ColumnHeader5, Me.ColumnHeader6, Me.ColumnHeader7, Me.ColumnHeader8, Me.ColumnHeader9, Me.ColumnHeader10}) + Me.lvStreams.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lvStreams.FullRowSelect = True + ListViewGroup4.Header = "Video Streams" + ListViewGroup4.Name = "VideoStreams" + ListViewGroup5.Header = "Audio Streams" + ListViewGroup5.Name = "AudioStreams" + ListViewGroup6.Header = "Subtitles Stream" + ListViewGroup6.Name = "SubtitlesStream" + Me.lvStreams.Groups.AddRange(New System.Windows.Forms.ListViewGroup() {ListViewGroup4, ListViewGroup5, ListViewGroup6}) + Me.lvStreams.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None + ListViewItem3.Group = ListViewGroup4 + ListViewItem4.Group = ListViewGroup5 + Me.lvStreams.Items.AddRange(New System.Windows.Forms.ListViewItem() {ListViewItem3, ListViewItem4}) + Me.lvStreams.Location = New System.Drawing.Point(4, 7) + Me.lvStreams.MultiSelect = False + Me.lvStreams.Name = "lvStreams" + Me.lvStreams.Size = New System.Drawing.Size(723, 315) + Me.lvStreams.TabIndex = 1 + Me.lvStreams.UseCompatibleStateImageBehavior = False + Me.lvStreams.View = System.Windows.Forms.View.Details + ' + 'ColumnHeader1 + ' + Me.ColumnHeader1.Width = 31 + ' + 'ColumnHeader2 + ' + Me.ColumnHeader2.Width = 77 + ' + 'ColumnHeader3 + ' + Me.ColumnHeader3.Width = 92 + ' + 'ColumnHeader4 + ' + Me.ColumnHeader4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center + Me.ColumnHeader4.Width = 64 + ' + 'ColumnHeader5 + ' + Me.ColumnHeader5.TextAlign = System.Windows.Forms.HorizontalAlignment.Center + Me.ColumnHeader5.Width = 58 + ' + 'ColumnHeader6 + ' + Me.ColumnHeader6.TextAlign = System.Windows.Forms.HorizontalAlignment.Center + Me.ColumnHeader6.Width = 80 + ' + 'ColumnHeader7 + ' + Me.ColumnHeader7.TextAlign = System.Windows.Forms.HorizontalAlignment.Center + Me.ColumnHeader7.Width = 90 + ' + 'ColumnHeader8 + ' + Me.ColumnHeader8.TextAlign = System.Windows.Forms.HorizontalAlignment.Center + Me.ColumnHeader8.Width = 65 + ' + 'ColumnHeader9 + ' + Me.ColumnHeader9.TextAlign = System.Windows.Forms.HorizontalAlignment.Center + Me.ColumnHeader9.Width = 78 + ' + 'ColumnHeader10 + ' + Me.ColumnHeader10.Width = 80 + ' + 'btnRemoveSet + ' + Me.btnRemoveSet.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnRemoveSet.Enabled = False + Me.btnRemoveSet.Image = CType(resources.GetObject("btnRemoveSet.Image"), System.Drawing.Image) + Me.btnRemoveSet.Location = New System.Drawing.Point(269, 326) + Me.btnRemoveSet.Name = "btnRemoveSet" + Me.btnRemoveSet.Size = New System.Drawing.Size(23, 23) + Me.btnRemoveSet.TabIndex = 6 + Me.btnRemoveSet.UseVisualStyleBackColor = True + ' + 'btnEditSet + ' + Me.btnEditSet.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnEditSet.Enabled = False + Me.btnEditSet.Image = CType(resources.GetObject("btnEditSet.Image"), System.Drawing.Image) + Me.btnEditSet.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnEditSet.Location = New System.Drawing.Point(240, 326) + Me.btnEditSet.Name = "btnEditSet" + Me.btnEditSet.Size = New System.Drawing.Size(23, 23) + Me.btnEditSet.TabIndex = 5 + Me.btnEditSet.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnEditSet.UseVisualStyleBackColor = True + ' + 'btnNewSet + ' + Me.btnNewSet.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.btnNewSet.Enabled = False + Me.btnNewSet.Image = CType(resources.GetObject("btnNewSet.Image"), System.Drawing.Image) + Me.btnNewSet.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnNewSet.Location = New System.Drawing.Point(192, 326) + Me.btnNewSet.Name = "btnNewSet" + Me.btnNewSet.Size = New System.Drawing.Size(23, 23) + Me.btnNewSet.TabIndex = 4 + Me.btnNewSet.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnNewSet.UseVisualStyleBackColor = True + ' + 'Label4 + ' + Me.Label4.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label4.Location = New System.Drawing.Point(6, 330) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(78, 15) + Me.Label4.TabIndex = 2 + Me.Label4.Text = "Stream Type" + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'cbStreamType + ' + Me.cbStreamType.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.cbStreamType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbStreamType.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbStreamType.FormattingEnabled = True + Me.cbStreamType.Items.AddRange(New Object() {"Video", "Audio", "Subtitle"}) + Me.cbStreamType.Location = New System.Drawing.Point(96, 327) + Me.cbStreamType.Name = "cbStreamType" + Me.cbStreamType.Size = New System.Drawing.Size(93, 21) + Me.cbStreamType.TabIndex = 3 + ' + 'dlgFileInfo + ' + Me.AcceptButton = Me.Cancel_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(735, 354) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.Label4) + Me.Controls.Add(Me.cbStreamType) + Me.Controls.Add(Me.btnRemoveSet) + Me.Controls.Add(Me.btnEditSet) + Me.Controls.Add(Me.btnNewSet) + Me.Controls.Add(Me.lvStreams) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgFileInfo" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Meta Data Editor" + Me.ResumeLayout(False) - End Sub + End Sub Friend WithEvents Cancel_Button As System.Windows.Forms.Button Friend WithEvents lvStreams As System.Windows.Forms.ListView Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader @@ -220,5 +231,7 @@ Partial Class dlgFileInfo Friend WithEvents ColumnHeader6 As System.Windows.Forms.ColumnHeader Friend WithEvents ColumnHeader7 As System.Windows.Forms.ColumnHeader Friend WithEvents ColumnHeader8 As System.Windows.Forms.ColumnHeader + Friend WithEvents ColumnHeader9 As System.Windows.Forms.ColumnHeader + Friend WithEvents ColumnHeader10 As System.Windows.Forms.ColumnHeader End Class diff --git a/Ember Media Manager/dlgFileInfo.resx b/Ember Media Manager/dlgFileInfo.resx index 0b985f0..523849c 100644 --- a/Ember Media Manager/dlgFileInfo.resx +++ b/Ember Media Manager/dlgFileInfo.resx @@ -120,49 +120,48 @@ - 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 - bf5cAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr5AAAK+QG0Yd4ZAAACf0lE + QVQ4T6WPW0jTURzHf6lvtcQwc+aFRTm6ECYRJpbSQ/rgQ/gQhkYICgVq6sMisBCEIoUyCwokwpcoSYjw + IcIuoJWWOufcppvOXTDnnFu6Tf3f9u38TbeR9VIHPufy4/f9nHMIwH+xPkkB+1+wEUJemu9pVusvqzQL + 3XVKb+9tWh7uJP/Y8yhB0PlHQryHAub+pNHKTIOxIgH26+pv7q6rhwPjXRQ0dUcEIf7HVoQAW7/Hantf + vB2sLcBkhQIz1YkYr9rrczytyXW9bo4IILh+w00QvSSaS1sXjVdgs07AfLcSulIFBksS8KVMXT9cnRsl + WLVEMUXg50i0aap4Qx5ESyF4UxHcczoMtN3Ap0vHTEGHNjkkLEYJOEcE0UfSbFs+N5bNCdZycCMHIEyc + g+CshVn/zDc7qT0kBF20tuSMEkj+X0CkkH8whdMdtwrWi+C0avCGQgj2GojzjUDwwwVhbZn44AJJq94o + QdBEWLFQaHlIwetP9wnT58FeAF6fD8FSBmGmHNJSNzNwrF8GtLriiQgkj4mkRQvx9r5iztTEbj0BbjSb + Pb0EnC4LovPaS3b9eq/H7aCmmxpKS1VGBFhxkehjf3IONPGWj+Cn2sEbi7H2eQckwykd4Enw+33U2nKL + lMl7aHOEBU8etdOUcZTevep8E7S8B3yzwFI/YCtyB9w9B++03CNVRtpGjCh2g7AgJiaGGjUN2xvq6+Y6 + Ox7Cax1yj3wdeNDR8Xhf1tEj6yF5bAa3COTzrvideWfPFEzn5uTcT09NPclqSoaKoWbNmYz9DBUjjZHI + iAsL5INcjNtGu1lAIYdjiNJZLWMDeS8HUxhJjHhGbFjw74B+AsJFYFrRskcjAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAZlJREFUOE9j+P//PwMlGKfmJRcdPRec1+9ecF6ve+lFJx9cluA0YO5Zg8fTT4n9n35K - 9P+cs/ovSTZg2intmxOOi/8HYSD7PskGTDphcK37qPR/EJ50Qv8uQQOmnnIynnbKLWDqKVf/aac9/fuP - mz5pOyT3H4T7jpm8mH7Ky3/qKTcgdg+YftrdFGYgOAw6jxhJtB7SBCrWgWLd/y0HNf43HVABYxC77ZAu - XL71kNb/9sM6UiC9YAPq9uoo1+xV/4+JNYBiMIwqX71HTQVuQPUuU5nibdr/i7ZqwXHxNq3/yBhFbqv2 - //Id+rJwA0CMgk1Gwbkb9UqBuASEs9frvspar/MfhIHst7kbgOIgvFG3FKg2dOmpuWDX40wHicv0riUs - 0/0PwXp3CMYCuoLgWXo3g2bp/odgPdLTgUu//gPnft3/IOzSr/cUpwuYGRgYgFgAiBWBWAOIdRkZGNS1 - EpU6jMo1T4CwdpJSJ0gMJAdVA1IrAA8DIIcZiNmBmBOIuYGYF2guIyKxMDCCxKByIDUgtcx4A5HYLA4A - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T6XSS0sCYRQG4BEXERG46UI3yCRNnZmw/AGZFUagJO2rZSFEJi6MFtFNhAxBBSlokW7NQIlIKLvJ + FyJtBKEoqKCCfsPpO2pD1repFs9wfM87x81wAPAvzBDt3QxYdvOibzcv+KI3pjFWBzFDtJPrfQyTRgiT + BtjOia+sDmKGKER0xa2rJkB0vmd1EDNEgWxvwXfRCiiQFe9YHSQNQWLqC5FhW5AMWUPXFqv/yvi0lukA + tHnZ/xImo9YgGaZGbOHrEWPVAe+5oXk100PL+goeVk41sHyiKsEZs8/9akYL62f6FunAUlrftZhWw0+a + L6p3nuNulXTAc2Rsc6Z0MJ/USpypalW7pA7ch2K7dADNHRjsjoTgohbQbJx/m4nrAdH53bFPc5TgXbQ7 + ESU7pfekA99NxYTCZIyHMuGW1UHMENkjQnE8wkOZ8PvvwOwXHwb9PCCzX3hmdRAn50oUVCeloXgZx6m1 + U8oNg7sni3TTSi9muKt0sKsoHcAH/SGnaqhaqo6qp3dl0r8AJ8OsssMOduXSgb8D7gMxXmeO6KXG2gAA + AABJRU5ErkJggg== diff --git a/Ember Media Manager/dlgFileInfo.vb b/Ember Media Manager/dlgFileInfo.vb index 5f52afa..773fd3d 100644 --- a/Ember Media Manager/dlgFileInfo.vb +++ b/Ember Media Manager/dlgFileInfo.vb @@ -231,6 +231,13 @@ Public Class dlgFileInfo i.SubItems.Add(Master.eLang.GetString(608, "Aspect")) i.SubItems.Add(Master.eLang.GetString(609, "Duration")) i.SubItems.Add(Master.eLang.GetString(610, "Language")) + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + i.SubItems.Add("Bitrate") + i.SubItems.Add("MultiView") + i.SubItems.Add("EncodingSettings") + 'cocotus end + g.Items.Add(i) lvStreams.Items.Add(i) @@ -248,6 +255,13 @@ Public Class dlgFileInfo i.SubItems.Add(v.Aspect) i.SubItems.Add(v.Duration) i.SubItems.Add(v.LongLanguage) + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + i.SubItems.Add(v.Bitrate) + i.SubItems.Add(v.MultiView) + i.SubItems.Add(v.EncodedSettings) + 'cocotus end + g.Items.Add(i) lvStreams.Items.Add(i) End If @@ -267,6 +281,11 @@ Public Class dlgFileInfo i.SubItems.Add(Master.eLang.GetString(604, "Codec")) i.SubItems.Add(Master.eLang.GetString(610, "Language")) i.SubItems.Add(Master.eLang.GetString(611, "Channels")) + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + i.SubItems.Add("Bitrate") + 'cocotus end + g.Items.Add(i) lvStreams.Items.Add(i) Dim a As MediaInfo.Audio @@ -279,6 +298,11 @@ Public Class dlgFileInfo i.SubItems.Add(a.Codec) i.SubItems.Add(a.LongLanguage) i.SubItems.Add(a.Channels) + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + i.SubItems.Add(a.Bitrate) + 'cocotus end + g.Items.Add(i) lvStreams.Items.Add(i) End If @@ -312,6 +336,8 @@ Public Class dlgFileInfo End If Next End If + + Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") End Try diff --git a/Ember Media Manager/dlgImgManual.vb b/Ember Media Manager/dlgImgManual.vb index 948cdd2..7330bc8 100644 --- a/Ember Media Manager/dlgImgManual.vb +++ b/Ember Media Manager/dlgImgManual.vb @@ -33,100 +33,92 @@ Public Class dlgImgManual #Region "Methods" - Public Overloads Function ShowDialog(ByVal _DLType As Enums.ImageType) As Windows.Forms.DialogResult - '// - ' Overload to pass data - '\\ - - Me.DLType = _DLType - - Return MyBase.ShowDialog() - End Function - - Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click - Try - tImage.FromWeb(Me.txtURL.Text) - - If Not IsNothing(tImage.Image) Then - - Using dImgView As New dlgImgView - dImgView.ShowDialog(tImage.Image) - End Using - - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click - Me.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Close() - End Sub - - Private Sub dlgImgManual_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed - tImage.Dispose() - tImage = Nothing - End Sub - - Private Sub dlgImgManual_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load - Me.SetUp() - - If Me.DLType = Enums.ImageType.Fanart Then - Me.Text = Master.eLang.GetString(182, "Manual Fanart Entry") - Else - Me.Text = Master.eLang.GetString(183, "Manual Poster Entry") - End If - End Sub - - Private Sub dlgImgManual_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown - Me.Activate() - End Sub - - Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click - Dim tmpPathPlus As String = String.Empty - - Try - If DLType = Enums.ImageType.Fanart Then - tmpPathPlus = Path.Combine(Master.TempPath, "fanart.jpg") - ElseIf DLType = Enums.ImageType.ASPoster Then - tmpPathPlus = Path.Combine(Master.TempPath, "asposter.jpg") - Else - tmpPathPlus = Path.Combine(Master.TempPath, "poster.jpg") - End If - - If IsNothing(tImage.Image) Then - tImage.FromWeb(Me.txtURL.Text) - End If - - If Not IsNothing(tImage.Image) Then - tImage.Save(tmpPathPlus) - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - - Me.DialogResult = System.Windows.Forms.DialogResult.OK - Me.Close() - End Sub - - Private Sub SetUp() - Me.OK_Button.Text = Master.eLang.GetString(179, "OK") - Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel") - Me.btnPreview.Text = Master.eLang.GetString(180, "Preview") - Me.Label1.Text = Master.eLang.GetString(181, "Enter URL to Image:") - End Sub - - Private Sub txtURL_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtURL.TextChanged - If Not String.IsNullOrEmpty(Me.txtURL.Text) AndAlso StringUtils.isValidURL(Me.txtURL.Text) Then - Me.btnPreview.Enabled = True - Me.OK_Button.Enabled = True - Else - Me.btnPreview.Enabled = False - Me.OK_Button.Enabled = False - End If - End Sub - -#End Region 'Methods + Public Overloads Function ShowDialog(ByVal _DLType As Enums.ImageType) As Images + '// + ' Overload to pass data and return image + '\\ + + Me.DLType = _DLType + + If MyBase.ShowDialog() = Windows.Forms.DialogResult.OK Then + Return tImage + Else + Return Nothing + End If + End Function + + Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click + Try + tImage.FromWeb(Me.txtURL.Text) + + If Not IsNothing(tImage.Image) Then + + Using dImgView As New dlgImgView + dImgView.ShowDialog(tImage.Image) + End Using + + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub dlgImgManual_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed + 'tImage.Dispose() cannot dispose as is used by calling entity + tImage = Nothing + End Sub + + Private Sub dlgImgManual_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + + If Me.DLType = Enums.ImageType.Fanart Then + Me.Text = Master.eLang.GetString(182, "Manual Fanart Entry") + Else + Me.Text = Master.eLang.GetString(183, "Manual Poster Entry") + End If + End Sub + + Private Sub dlgImgManual_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown + Me.Activate() + End Sub + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + + Try + + If IsNothing(tImage.Image) Then + tImage.FromWeb(Me.txtURL.Text) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub SetUp() + Me.OK_Button.Text = Master.eLang.GetString(179, "OK") + Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel") + Me.btnPreview.Text = Master.eLang.GetString(180, "Preview") + Me.Label1.Text = Master.eLang.GetString(181, "Enter URL to Image:") + End Sub + + Private Sub txtURL_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtURL.TextChanged + If Not String.IsNullOrEmpty(Me.txtURL.Text) AndAlso StringUtils.isValidURL(Me.txtURL.Text) Then + Me.btnPreview.Enabled = True + Me.OK_Button.Enabled = True + Else + Me.btnPreview.Enabled = False + Me.OK_Button.Enabled = False + End If + End Sub + +#End Region 'Methods End Class \ No newline at end of file diff --git a/Ember Media Manager/dlgSettings.Designer.vb b/Ember Media Manager/dlgSettings.Designer.vb index 0564425..79a9d02 100644 --- a/Ember Media Manager/dlgSettings.Designer.vb +++ b/Ember Media Manager/dlgSettings.Designer.vb @@ -28,7340 +28,7473 @@ Partial Class dlgSettings 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Me.components = New System.ComponentModel.Container() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgSettings)) - Me.GroupBox4 = New System.Windows.Forms.GroupBox() - Me.chkShowGenresText = New System.Windows.Forms.CheckBox() - Me.chkSourceFromFolder = New System.Windows.Forms.CheckBox() - Me.chkNoDisplayFanart = New System.Windows.Forms.CheckBox() - Me.chkInfoPanelAnim = New System.Windows.Forms.CheckBox() - Me.chkNoDisplayPoster = New System.Windows.Forms.CheckBox() - Me.chkShowDims = New System.Windows.Forms.CheckBox() - Me.chkUpdates = New System.Windows.Forms.CheckBox() - Me.chkOverwriteNfo = New System.Windows.Forms.CheckBox() - Me.Label5 = New System.Windows.Forms.Label() - Me.chkLogErrors = New System.Windows.Forms.CheckBox() - Me.GroupBox29 = New System.Windows.Forms.GroupBox() - Me.cbEpTheme = New System.Windows.Forms.ComboBox() - Me.Label3 = New System.Windows.Forms.Label() - Me.cbTVShowTheme = New System.Windows.Forms.ComboBox() - Me.Label1 = New System.Windows.Forms.Label() - Me.cbMovieTheme = New System.Windows.Forms.ComboBox() - Me.Label35 = New System.Windows.Forms.Label() - Me.Label32 = New System.Windows.Forms.Label() - Me.cbIntLang = New System.Windows.Forms.ComboBox() - Me.GroupBox3 = New System.Windows.Forms.GroupBox() - Me.tcCleaner = New System.Windows.Forms.TabControl() - Me.tpStandard = New System.Windows.Forms.TabPage() - Me.chkCleanFolderJPG = New System.Windows.Forms.CheckBox() - Me.chkCleanExtrathumbs = New System.Windows.Forms.CheckBox() - Me.chkCleanMovieTBN = New System.Windows.Forms.CheckBox() - Me.chkCleanMovieNameJPG = New System.Windows.Forms.CheckBox() - Me.chkCleanMovieTBNb = New System.Windows.Forms.CheckBox() - Me.chkCleanMovieJPG = New System.Windows.Forms.CheckBox() - Me.chkCleanFanartJPG = New System.Windows.Forms.CheckBox() - Me.chkCleanPosterJPG = New System.Windows.Forms.CheckBox() - Me.chkCleanMovieFanartJPG = New System.Windows.Forms.CheckBox() - Me.chkCleanPosterTBN = New System.Windows.Forms.CheckBox() - Me.chkCleanMovieNFO = New System.Windows.Forms.CheckBox() - Me.chkCleanDotFanartJPG = New System.Windows.Forms.CheckBox() - Me.chkCleanMovieNFOb = New System.Windows.Forms.CheckBox() - Me.tpExpert = New System.Windows.Forms.TabPage() - Me.chkWhitelistVideo = New System.Windows.Forms.CheckBox() - Me.Label27 = New System.Windows.Forms.Label() - Me.btnRemoveWhitelist = New System.Windows.Forms.Button() - Me.btnAddWhitelist = New System.Windows.Forms.Button() - Me.txtWhitelist = New System.Windows.Forms.TextBox() - Me.lstWhitelist = New System.Windows.Forms.ListBox() - Me.Label25 = New System.Windows.Forms.Label() - Me.GroupBox12 = New System.Windows.Forms.GroupBox() - Me.chkClickScrape = New System.Windows.Forms.CheckBox() - Me.chkAskCheckboxScrape = New System.Windows.Forms.CheckBox() - Me.chkMarkNew = New System.Windows.Forms.CheckBox() - Me.lbGenre = New System.Windows.Forms.CheckedListBox() - Me.GroupBox2 = New System.Windows.Forms.GroupBox() - Me.txtCheckTitleTol = New System.Windows.Forms.TextBox() - Me.Label30 = New System.Windows.Forms.Label() - Me.chkCheckTitles = New System.Windows.Forms.CheckBox() - Me.GroupBox25 = New System.Windows.Forms.GroupBox() - Me.btnRemoveToken = New System.Windows.Forms.Button() - Me.btnAddToken = New System.Windows.Forms.Button() - Me.txtSortToken = New System.Windows.Forms.TextBox() - Me.lstSortTokens = New System.Windows.Forms.ListBox() - Me.chkDisplayYear = New System.Windows.Forms.CheckBox() - Me.chkMovieExtraCol = New System.Windows.Forms.CheckBox() - Me.chkMovieSubCol = New System.Windows.Forms.CheckBox() - Me.chkMovieTrailerCol = New System.Windows.Forms.CheckBox() - Me.chkMovieInfoCol = New System.Windows.Forms.CheckBox() - Me.chkMovieFanartCol = New System.Windows.Forms.CheckBox() - Me.chkMoviePosterCol = New System.Windows.Forms.CheckBox() - Me.GroupBox8 = New System.Windows.Forms.GroupBox() - Me.btnMovieFrodo = New System.Windows.Forms.Button() - Me.chkMovieNameMultiOnly = New System.Windows.Forms.CheckBox() - Me.GroupBox21 = New System.Windows.Forms.GroupBox() - Me.rbBracketTrailer = New System.Windows.Forms.RadioButton() - Me.rbDashTrailer = New System.Windows.Forms.RadioButton() - Me.GroupBox7 = New System.Windows.Forms.GroupBox() - Me.chkMovieNameNFO = New System.Windows.Forms.CheckBox() - Me.chkMovieNFO = New System.Windows.Forms.CheckBox() - Me.GroupBox6 = New System.Windows.Forms.GroupBox() - Me.chkMovieNameDotFanartJPG = New System.Windows.Forms.CheckBox() - Me.chkMovieNameFanartJPG = New System.Windows.Forms.CheckBox() - Me.chkFanartJPG = New System.Windows.Forms.CheckBox() - Me.GroupBox5 = New System.Windows.Forms.GroupBox() - Me.chkMovieNameDashPosterJPG = New System.Windows.Forms.CheckBox() - Me.chkFolderJPG = New System.Windows.Forms.CheckBox() - Me.chkPosterJPG = New System.Windows.Forms.CheckBox() - Me.chkPosterTBN = New System.Windows.Forms.CheckBox() - Me.chkMovieNameJPG = New System.Windows.Forms.CheckBox() - Me.chkMovieJPG = New System.Windows.Forms.CheckBox() - Me.chkMovieNameTBN = New System.Windows.Forms.CheckBox() - Me.chkMovieTBN = New System.Windows.Forms.CheckBox() - Me.lvMovies = New System.Windows.Forms.ListView() - Me.colID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colPath = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colRecur = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colFolder = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colSingle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.btnMovieRem = New System.Windows.Forms.Button() - Me.btnMovieAddFolder = New System.Windows.Forms.Button() - Me.GroupBox14 = New System.Windows.Forms.GroupBox() - Me.chkPosterOnly = New System.Windows.Forms.CheckBox() - Me.txtPosterWidth = New System.Windows.Forms.TextBox() - Me.txtPosterHeight = New System.Windows.Forms.TextBox() - Me.lblPosterQual = New System.Windows.Forms.Label() - Me.tbPosterQual = New System.Windows.Forms.TrackBar() - Me.Label24 = New System.Windows.Forms.Label() - Me.Label11 = New System.Windows.Forms.Label() - Me.Label12 = New System.Windows.Forms.Label() - Me.chkResizePoster = New System.Windows.Forms.CheckBox() - Me.lblPosterSize = New System.Windows.Forms.Label() - Me.cbPosterSize = New System.Windows.Forms.ComboBox() - Me.chkOverwritePoster = New System.Windows.Forms.CheckBox() - Me.GroupBox13 = New System.Windows.Forms.GroupBox() - Me.txtFanartWidth = New System.Windows.Forms.TextBox() - Me.txtFanartHeight = New System.Windows.Forms.TextBox() - Me.chkFanartOnly = New System.Windows.Forms.CheckBox() - Me.lblFanartQual = New System.Windows.Forms.Label() - Me.tbFanartQual = New System.Windows.Forms.TrackBar() - Me.Label26 = New System.Windows.Forms.Label() - Me.Label9 = New System.Windows.Forms.Label() - Me.Label10 = New System.Windows.Forms.Label() - Me.chkResizeFanart = New System.Windows.Forms.CheckBox() - Me.cbFanartSize = New System.Windows.Forms.ComboBox() - Me.lblFanartSize = New System.Windows.Forms.Label() - Me.chkOverwriteFanart = New System.Windows.Forms.CheckBox() - Me.GroupBox9 = New System.Windows.Forms.GroupBox() - Me.chkActorCache = New System.Windows.Forms.CheckBox() - Me.chkNoSaveImagesToNfo = New System.Windows.Forms.CheckBox() - Me.chkSingleScrapeImages = New System.Windows.Forms.CheckBox() - Me.GroupBox17 = New System.Windows.Forms.GroupBox() - Me.chkUseImgCacheUpdaters = New System.Windows.Forms.CheckBox() - Me.chkPersistImgCache = New System.Windows.Forms.CheckBox() - Me.chkUseImgCache = New System.Windows.Forms.CheckBox() - Me.chkUseETasFA = New System.Windows.Forms.CheckBox() - Me.chkNoSpoilers = New System.Windows.Forms.CheckBox() - Me.Label15 = New System.Windows.Forms.Label() - Me.txtAutoThumbs = New System.Windows.Forms.TextBox() - Me.chkAutoThumbs = New System.Windows.Forms.CheckBox() - Me.btnOK = New System.Windows.Forms.Button() - Me.btnApply = New System.Windows.Forms.Button() - Me.btnCancel = New System.Windows.Forms.Button() - Me.pnlTop = New System.Windows.Forms.Panel() - Me.Label2 = New System.Windows.Forms.Label() - Me.Label4 = New System.Windows.Forms.Label() - Me.PictureBox1 = New System.Windows.Forms.PictureBox() - Me.ilSettings = New System.Windows.Forms.ImageList(Me.components) - Me.tvSettings = New System.Windows.Forms.TreeView() - Me.pnlGeneral = New System.Windows.Forms.Panel() - Me.gbInterface = New System.Windows.Forms.GroupBox() - Me.pnlXBMCCom = New System.Windows.Forms.Panel() - Me.gbProxy = New System.Windows.Forms.GroupBox() - Me.gbCreds = New System.Windows.Forms.GroupBox() - Me.txtProxyDomain = New System.Windows.Forms.TextBox() - Me.lblProxyDomain = New System.Windows.Forms.Label() - Me.txtProxyPassword = New System.Windows.Forms.TextBox() - Me.txtProxyUsername = New System.Windows.Forms.TextBox() - Me.lblProxyUN = New System.Windows.Forms.Label() - Me.lblProxyPW = New System.Windows.Forms.Label() - Me.chkEnableCredentials = New System.Windows.Forms.CheckBox() - Me.lblProxyPort = New System.Windows.Forms.Label() - Me.lblProxyURI = New System.Windows.Forms.Label() - Me.txtProxyPort = New System.Windows.Forms.TextBox() - Me.txtProxyURI = New System.Windows.Forms.TextBox() - Me.chkEnableProxy = New System.Windows.Forms.CheckBox() - Me.pnlMovies = New System.Windows.Forms.Panel() - Me.gbGenreFilter = New System.Windows.Forms.GroupBox() - Me.gbFilters = New System.Windows.Forms.GroupBox() - Me.btnResetMovieFilters = New System.Windows.Forms.Button() - Me.btnDown = New System.Windows.Forms.Button() - Me.btnUp = New System.Windows.Forms.Button() - Me.chkProperCase = New System.Windows.Forms.CheckBox() - Me.btnRemoveFilter = New System.Windows.Forms.Button() - Me.btnAddFilter = New System.Windows.Forms.Button() - Me.txtFilter = New System.Windows.Forms.TextBox() - Me.lstFilters = New System.Windows.Forms.ListBox() - Me.GroupBox27 = New System.Windows.Forms.GroupBox() - Me.chkMissingExtra = New System.Windows.Forms.CheckBox() - Me.chkMissingSubs = New System.Windows.Forms.CheckBox() - Me.chkMissingTrailer = New System.Windows.Forms.CheckBox() - Me.chkMissingNFO = New System.Windows.Forms.CheckBox() - Me.chkMissingFanart = New System.Windows.Forms.CheckBox() - Me.chkMissingPoster = New System.Windows.Forms.CheckBox() - Me.GroupBox16 = New System.Windows.Forms.GroupBox() - Me.chkAutoBD = New System.Windows.Forms.CheckBox() - Me.btnBrowse = New System.Windows.Forms.Button() - Me.txtBDPath = New System.Windows.Forms.TextBox() - Me.lblCurrent = New System.Windows.Forms.Label() - Me.pnlCurrent = New System.Windows.Forms.Panel() - Me.Panel1 = New System.Windows.Forms.Panel() - Me.pbCurrent = New System.Windows.Forms.PictureBox() - Me.pnlExtensions = New System.Windows.Forms.Panel() - Me.GroupBox22 = New System.Windows.Forms.GroupBox() - Me.btnRemoveNoStack = New System.Windows.Forms.Button() - Me.btnAddNoStack = New System.Windows.Forms.Button() - Me.txtNoStack = New System.Windows.Forms.TextBox() - Me.lstNoStack = New System.Windows.Forms.ListBox() - Me.GroupBox18 = New System.Windows.Forms.GroupBox() - Me.btnResetValidExts = New System.Windows.Forms.Button() - Me.btnRemMovieExt = New System.Windows.Forms.Button() - Me.btnAddMovieExt = New System.Windows.Forms.Button() - Me.txtMovieExt = New System.Windows.Forms.TextBox() - Me.lstMovieExts = New System.Windows.Forms.ListBox() - Me.pnlSources = New System.Windows.Forms.Panel() - Me.btnEditSource = New System.Windows.Forms.Button() - Me.GroupBox19 = New System.Windows.Forms.GroupBox() - Me.chkScanOrderModify = New System.Windows.Forms.CheckBox() - Me.chkSortBeforeScan = New System.Windows.Forms.CheckBox() - Me.chkIgnoreLastScan = New System.Windows.Forms.CheckBox() - Me.chkCleanDB = New System.Windows.Forms.CheckBox() - Me.chkAutoDetectVTS = New System.Windows.Forms.CheckBox() - Me.chkSkipStackedSizeCheck = New System.Windows.Forms.CheckBox() - Me.Label21 = New System.Windows.Forms.Label() - Me.txtSkipLessThan = New System.Windows.Forms.TextBox() - Me.Label20 = New System.Windows.Forms.Label() - Me.pnlImages = New System.Windows.Forms.Panel() - Me.GroupBox15 = New System.Windows.Forms.GroupBox() - Me.cbTrailerQuality = New System.Windows.Forms.ComboBox() - Me.lblPreferredQuality = New System.Windows.Forms.Label() - Me.chkDeleteAllTrailers = New System.Windows.Forms.CheckBox() - Me.chkOverwriteTrailer = New System.Windows.Forms.CheckBox() - Me.chkNoDLTrailer = New System.Windows.Forms.CheckBox() - Me.chkSingleScrapeTrailer = New System.Windows.Forms.CheckBox() - Me.chkUpdaterTrailer = New System.Windows.Forms.CheckBox() - Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() - Me.GroupBox23 = New System.Windows.Forms.GroupBox() - Me.chkAutoETSize = New System.Windows.Forms.CheckBox() - Me.cbAutoETSize = New System.Windows.Forms.ComboBox() - Me.GroupBox24 = New System.Windows.Forms.GroupBox() - Me.txtETWidth = New System.Windows.Forms.TextBox() - Me.txtETHeight = New System.Windows.Forms.TextBox() - Me.chkETPadding = New System.Windows.Forms.CheckBox() - Me.Label28 = New System.Windows.Forms.Label() - Me.Label29 = New System.Windows.Forms.Label() - Me.rbETCustom = New System.Windows.Forms.RadioButton() - Me.rbETNative = New System.Windows.Forms.RadioButton() - Me.fbdBrowse = New System.Windows.Forms.FolderBrowserDialog() - Me.ToolTips = New System.Windows.Forms.ToolTip(Me.components) - Me.pnlTVSources = New System.Windows.Forms.Panel() - Me.TabControl2 = New System.Windows.Forms.TabControl() - Me.TabPage3 = New System.Windows.Forms.TabPage() - Me.btnTVShowFrodo = New System.Windows.Forms.Button() - Me.lvTVSources = New System.Windows.Forms.ListView() - Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.gbMiscTVSourceOpts = New System.Windows.Forms.GroupBox() - Me.Label6 = New System.Windows.Forms.Label() - Me.txtTVSkipLessThan = New System.Windows.Forms.TextBox() - Me.Label7 = New System.Windows.Forms.Label() - Me.chkTVScanOrderModify = New System.Windows.Forms.CheckBox() - Me.chkTVIgnoreLastScan = New System.Windows.Forms.CheckBox() - Me.chkTVCleanDB = New System.Windows.Forms.CheckBox() - Me.btnAddTVSource = New System.Windows.Forms.Button() - Me.btnEditTVSource = New System.Windows.Forms.Button() - Me.btnRemTVSource = New System.Windows.Forms.Button() - Me.gbTVNaming = New System.Windows.Forms.GroupBox() - Me.gbShowBanner = New System.Windows.Forms.GroupBox() - Me.chkShowBannerJPG = New System.Windows.Forms.CheckBox() - Me.gbAllSeasonPoster = New System.Windows.Forms.GroupBox() - Me.chkSeasonAllPosterJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonAllJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonAllTBN = New System.Windows.Forms.CheckBox() - Me.gbEpisodeFanart = New System.Windows.Forms.GroupBox() - Me.chkEpisodeDotFanart = New System.Windows.Forms.CheckBox() - Me.chkEpisodeDashFanart = New System.Windows.Forms.CheckBox() - Me.gbEpisodePosters = New System.Windows.Forms.GroupBox() - Me.chkEpisodeDashThumbJPG = New System.Windows.Forms.CheckBox() - Me.chkEpisodeJPG = New System.Windows.Forms.CheckBox() - Me.chkEpisodeTBN = New System.Windows.Forms.CheckBox() - Me.gbSeasonFanart = New System.Windows.Forms.GroupBox() - Me.chkSeasonXXDashFanartJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonDotFanart = New System.Windows.Forms.CheckBox() - Me.chkSeasonDashFanart = New System.Windows.Forms.CheckBox() - Me.chkSeasonFanartJPG = New System.Windows.Forms.CheckBox() - Me.gbSeasonPosters = New System.Windows.Forms.GroupBox() - Me.chkSeasonXXDashPosterJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonFolderJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonNameJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonNameTBN = New System.Windows.Forms.CheckBox() - Me.chkSeasonPosterJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonPosterTBN = New System.Windows.Forms.CheckBox() - Me.chkSeasonXTBN = New System.Windows.Forms.CheckBox() - Me.chkSeasonXXTBN = New System.Windows.Forms.CheckBox() - Me.gbShowFanart = New System.Windows.Forms.GroupBox() - Me.chkShowDotFanart = New System.Windows.Forms.CheckBox() - Me.chkShowDashFanart = New System.Windows.Forms.CheckBox() - Me.chkShowFanartJPG = New System.Windows.Forms.CheckBox() - Me.gbShowPosters = New System.Windows.Forms.GroupBox() - Me.chkShowJPG = New System.Windows.Forms.CheckBox() - Me.chkShowTBN = New System.Windows.Forms.CheckBox() - Me.chkShowPosterJPG = New System.Windows.Forms.CheckBox() - Me.chkShowPosterTBN = New System.Windows.Forms.CheckBox() - Me.chkShowFolderJPG = New System.Windows.Forms.CheckBox() - Me.TabPage4 = New System.Windows.Forms.TabPage() - Me.btnGetTVProfiles = New System.Windows.Forms.Button() - Me.btnRegexDown = New System.Windows.Forms.Button() - Me.btnRegexUp = New System.Windows.Forms.Button() - Me.btnResetShowRegex = New System.Windows.Forms.Button() - Me.gbShowRegex = New System.Windows.Forms.GroupBox() - Me.btnClearRegex = New System.Windows.Forms.Button() - Me.lblSeasonMatch = New System.Windows.Forms.Label() - Me.btnAddShowRegex = New System.Windows.Forms.Button() - Me.txtSeasonRegex = New System.Windows.Forms.TextBox() - Me.lblEpisodeRetrieve = New System.Windows.Forms.Label() - Me.cboSeasonRetrieve = New System.Windows.Forms.ComboBox() - Me.lblSeasonRetrieve = New System.Windows.Forms.Label() - Me.txtEpRegex = New System.Windows.Forms.TextBox() - Me.lblEpisodeMatch = New System.Windows.Forms.Label() - Me.cboEpRetrieve = New System.Windows.Forms.ComboBox() - Me.btnEditShowRegex = New System.Windows.Forms.Button() - Me.btnRemoveShowRegex = New System.Windows.Forms.Button() - Me.lvShowRegex = New System.Windows.Forms.ListView() - Me.colRegID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colSeason = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colSeasonApply = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colEpisode = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colEpApply = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.pnlShows = New System.Windows.Forms.Panel() - Me.gbTVListOptions = New System.Windows.Forms.GroupBox() - Me.chkDisplayMissingEpisodes = New System.Windows.Forms.CheckBox() - Me.gbEpisodeListOptions = New System.Windows.Forms.GroupBox() - Me.chkEpisodeNfoCol = New System.Windows.Forms.CheckBox() - Me.chkEpisodeFanartCol = New System.Windows.Forms.CheckBox() - Me.chkEpisodePosterCol = New System.Windows.Forms.CheckBox() - Me.gbSeasonListOptions = New System.Windows.Forms.GroupBox() - Me.chkSeasonFanartCol = New System.Windows.Forms.CheckBox() - Me.chkSeasonPosterCol = New System.Windows.Forms.CheckBox() - Me.gbShowListOptions = New System.Windows.Forms.GroupBox() - Me.chkShowNfoCol = New System.Windows.Forms.CheckBox() - Me.chkShowFanartCol = New System.Windows.Forms.CheckBox() - Me.chkShowPosterCol = New System.Windows.Forms.CheckBox() - Me.gbTVMisc = New System.Windows.Forms.GroupBox() - Me.chkMarkNewShows = New System.Windows.Forms.CheckBox() - Me.chkMarkNewEpisodes = New System.Windows.Forms.CheckBox() - Me.chkDisplayAllSeason = New System.Windows.Forms.CheckBox() - Me.lblRatingRegion = New System.Windows.Forms.Label() - Me.cbRatingRegion = New System.Windows.Forms.ComboBox() - Me.gbEpFilter = New System.Windows.Forms.GroupBox() - Me.btnResetEpFilter = New System.Windows.Forms.Button() - Me.chkNoFilterEpisode = New System.Windows.Forms.CheckBox() - Me.btnEpFilterDown = New System.Windows.Forms.Button() - Me.btnEpFilterUp = New System.Windows.Forms.Button() - Me.chkEpProperCase = New System.Windows.Forms.CheckBox() - Me.btnRemoveEpFilter = New System.Windows.Forms.Button() - Me.btnAddEpFilter = New System.Windows.Forms.Button() - Me.txtEpFilter = New System.Windows.Forms.TextBox() - Me.lstEpFilters = New System.Windows.Forms.ListBox() - Me.gbShowFilter = New System.Windows.Forms.GroupBox() - Me.btnResetShowFilters = New System.Windows.Forms.Button() - Me.btnShowFilterDown = New System.Windows.Forms.Button() - Me.btnShowFilterUp = New System.Windows.Forms.Button() - Me.chkShowProperCase = New System.Windows.Forms.CheckBox() - Me.btnRemoveShowFilter = New System.Windows.Forms.Button() - Me.btnAddShowFilter = New System.Windows.Forms.Button() - Me.txtShowFilter = New System.Windows.Forms.TextBox() - Me.lstShowFilters = New System.Windows.Forms.ListBox() - Me.pnlTVImages = New System.Windows.Forms.Panel() - Me.TabControl3 = New System.Windows.Forms.TabControl() - Me.TabPage5 = New System.Windows.Forms.TabPage() - Me.gbAllSPosterOpts = New System.Windows.Forms.GroupBox() - Me.rbAllSPoster = New System.Windows.Forms.RadioButton() - Me.rbAllSBanner = New System.Windows.Forms.RadioButton() - Me.txtAllSPosterWidth = New System.Windows.Forms.TextBox() - Me.txtAllSPosterHeight = New System.Windows.Forms.TextBox() - Me.lblAllSPosterQual = New System.Windows.Forms.Label() - Me.tbAllSPosterQual = New System.Windows.Forms.TrackBar() - Me.lblAllSPosterQ = New System.Windows.Forms.Label() - Me.lblAllSPosterWidth = New System.Windows.Forms.Label() - Me.lblAllSPosterHeight = New System.Windows.Forms.Label() - Me.chkResizeAllSPoster = New System.Windows.Forms.CheckBox() - Me.lblAllSPosterSize = New System.Windows.Forms.Label() - Me.cbAllSPosterSize = New System.Windows.Forms.ComboBox() - Me.chkOverwriteAllSPoster = New System.Windows.Forms.CheckBox() - Me.gbShowPosterOpts = New System.Windows.Forms.GroupBox() - Me.rbPoster = New System.Windows.Forms.RadioButton() - Me.rbBanner = New System.Windows.Forms.RadioButton() - Me.txtShowPosterWidth = New System.Windows.Forms.TextBox() - Me.txtShowPosterHeight = New System.Windows.Forms.TextBox() - Me.lblShowPosterQual = New System.Windows.Forms.Label() - Me.tbShowPosterQual = New System.Windows.Forms.TrackBar() - Me.lblShowPosterQ = New System.Windows.Forms.Label() - Me.lblShowPosterWidth = New System.Windows.Forms.Label() - Me.lblShowPosterHeight = New System.Windows.Forms.Label() - Me.chkResizeShowPoster = New System.Windows.Forms.CheckBox() - Me.lblShowPosterSize = New System.Windows.Forms.Label() - Me.cbShowPosterSize = New System.Windows.Forms.ComboBox() - Me.chkOverwriteShowPoster = New System.Windows.Forms.CheckBox() - Me.gbShowFanartOpts = New System.Windows.Forms.GroupBox() - Me.txtShowFanartWidth = New System.Windows.Forms.TextBox() - Me.txtShowFanartHeight = New System.Windows.Forms.TextBox() - Me.lblShowFanartQual = New System.Windows.Forms.Label() - Me.tbShowFanartQual = New System.Windows.Forms.TrackBar() - Me.lblShowFanartQ = New System.Windows.Forms.Label() - Me.lblShowFanartWidth = New System.Windows.Forms.Label() - Me.lblShowFanartHeight = New System.Windows.Forms.Label() - Me.chkResizeShowFanart = New System.Windows.Forms.CheckBox() - Me.cbShowFanartSize = New System.Windows.Forms.ComboBox() - Me.lblShowFanartSize = New System.Windows.Forms.Label() - Me.chkOverwriteShowFanart = New System.Windows.Forms.CheckBox() - Me.TabPage6 = New System.Windows.Forms.TabPage() - Me.gbSeaPosterOpts = New System.Windows.Forms.GroupBox() - Me.txtSeaPosterWidth = New System.Windows.Forms.TextBox() - Me.txtSeaPosterHeight = New System.Windows.Forms.TextBox() - Me.lblSeaPosterQual = New System.Windows.Forms.Label() - Me.tbSeaPosterQual = New System.Windows.Forms.TrackBar() - Me.lblSeaPosterQ = New System.Windows.Forms.Label() - Me.lblSeaPosterWidth = New System.Windows.Forms.Label() - Me.lblSeaPosterHeight = New System.Windows.Forms.Label() - Me.chkSeaResizePoster = New System.Windows.Forms.CheckBox() - Me.lblSeaPosterSize = New System.Windows.Forms.Label() - Me.cbSeaPosterSize = New System.Windows.Forms.ComboBox() - Me.chkSeaOverwritePoster = New System.Windows.Forms.CheckBox() - Me.gbSeaFanartOpts = New System.Windows.Forms.GroupBox() - Me.txtSeaFanartWidth = New System.Windows.Forms.TextBox() - Me.txtSeaFanartHeight = New System.Windows.Forms.TextBox() - Me.lblSeaFanartQual = New System.Windows.Forms.Label() - Me.tbSeaFanartQual = New System.Windows.Forms.TrackBar() - Me.lblSeaFanartQ = New System.Windows.Forms.Label() - Me.lblSeaFanartWidth = New System.Windows.Forms.Label() - Me.lblSeaFanartHeight = New System.Windows.Forms.Label() - Me.chkSeaResizeFanart = New System.Windows.Forms.CheckBox() - Me.cbSeaFanartSize = New System.Windows.Forms.ComboBox() - Me.lblSeaFanartSize = New System.Windows.Forms.Label() - Me.chkSeaOverwriteFanart = New System.Windows.Forms.CheckBox() - Me.TabPage7 = New System.Windows.Forms.TabPage() - Me.gbEpPosterOpts = New System.Windows.Forms.GroupBox() - Me.txtEpPosterWidth = New System.Windows.Forms.TextBox() - Me.txtEpPosterHeight = New System.Windows.Forms.TextBox() - Me.lblEpPosterQual = New System.Windows.Forms.Label() - Me.tbEpPosterQual = New System.Windows.Forms.TrackBar() - Me.lblEpPosterQ = New System.Windows.Forms.Label() - Me.lblEpPosterWidth = New System.Windows.Forms.Label() - Me.lblEpPosterHeight = New System.Windows.Forms.Label() - Me.chkResizeEpPoster = New System.Windows.Forms.CheckBox() - Me.chkOverwriteEpPoster = New System.Windows.Forms.CheckBox() - Me.gbEpFanartOpts = New System.Windows.Forms.GroupBox() - Me.txtEpFanartWidth = New System.Windows.Forms.TextBox() - Me.txtEpFanartHeight = New System.Windows.Forms.TextBox() - Me.lblEpFanartQual = New System.Windows.Forms.Label() - Me.tbEpFanartQual = New System.Windows.Forms.TrackBar() - Me.lblEpFanartQ = New System.Windows.Forms.Label() - Me.lblEpFanartWidth = New System.Windows.Forms.Label() - Me.lblEpFanartHeight = New System.Windows.Forms.Label() - Me.chkResizeEpFanart = New System.Windows.Forms.CheckBox() - Me.cbEpFanartSize = New System.Windows.Forms.ComboBox() - Me.lblEpFanartSize = New System.Windows.Forms.Label() - Me.chkOverwriteEpFanart = New System.Windows.Forms.CheckBox() - Me.TabPage8 = New System.Windows.Forms.TabPage() - Me.chkGetEnglishImages = New System.Windows.Forms.CheckBox() - Me.chkOnlyTVImagesLanguage = New System.Windows.Forms.CheckBox() - Me.pnlTVScraper = New System.Windows.Forms.Panel() - Me.GroupBox32 = New System.Windows.Forms.GroupBox() - Me.GroupBox35 = New System.Windows.Forms.GroupBox() - Me.chkScraperShowRating = New System.Windows.Forms.CheckBox() - Me.chkScraperShowActors = New System.Windows.Forms.CheckBox() - Me.chkScraperShowStudio = New System.Windows.Forms.CheckBox() - Me.chkScraperShowPremiered = New System.Windows.Forms.CheckBox() - Me.chkScraperShowEGU = New System.Windows.Forms.CheckBox() - Me.chkScraperShowMPAA = New System.Windows.Forms.CheckBox() - Me.chkScraperShowPlot = New System.Windows.Forms.CheckBox() - Me.chkScraperShowGenre = New System.Windows.Forms.CheckBox() - Me.chkScraperShowTitle = New System.Windows.Forms.CheckBox() - Me.GroupBox34 = New System.Windows.Forms.GroupBox() - Me.chkScraperEpActors = New System.Windows.Forms.CheckBox() - Me.chkScraperEpCredits = New System.Windows.Forms.CheckBox() - Me.chkScraperEpDirector = New System.Windows.Forms.CheckBox() - Me.chkScraperEpPlot = New System.Windows.Forms.CheckBox() - Me.chkScraperEpRating = New System.Windows.Forms.CheckBox() - Me.chkScraperEpAired = New System.Windows.Forms.CheckBox() - Me.chkScraperEpTitle = New System.Windows.Forms.CheckBox() - Me.chkScraperEpEpisode = New System.Windows.Forms.CheckBox() - Me.chkScraperEpSeason = New System.Windows.Forms.CheckBox() - Me.GroupBox33 = New System.Windows.Forms.GroupBox() - Me.gbEpLocks = New System.Windows.Forms.GroupBox() - Me.chkEpLockTitle = New System.Windows.Forms.CheckBox() - Me.chkEpLockRating = New System.Windows.Forms.CheckBox() - Me.chkEpLockPlot = New System.Windows.Forms.CheckBox() - Me.gbShowLocks = New System.Windows.Forms.GroupBox() - Me.chkShowLockPlot = New System.Windows.Forms.CheckBox() - Me.chkShowLockGenre = New System.Windows.Forms.CheckBox() - Me.chkShowLockStudio = New System.Windows.Forms.CheckBox() - Me.chkShowLockRating = New System.Windows.Forms.CheckBox() - Me.chkShowLockTitle = New System.Windows.Forms.CheckBox() - Me.GroupBox31 = New System.Windows.Forms.GroupBox() - Me.gbTVMIDefaults = New System.Windows.Forms.GroupBox() - Me.lstTVMetaData = New System.Windows.Forms.ListBox() - Me.txtTVDefFIExt = New System.Windows.Forms.TextBox() - Me.Label49 = New System.Windows.Forms.Label() - Me.btnRemoveTVMetaDataFT = New System.Windows.Forms.Button() - Me.btnEditTVMetaDataFT = New System.Windows.Forms.Button() - Me.btnNewTVMetaDataFT = New System.Windows.Forms.Button() - Me.cboTVMetaDataOverlay = New System.Windows.Forms.ComboBox() - Me.Label50 = New System.Windows.Forms.Label() - Me.chkTVScanMetaData = New System.Windows.Forms.CheckBox() - Me.gbTVScraperOptions = New System.Windows.Forms.GroupBox() - Me.lblOrdering = New System.Windows.Forms.Label() - Me.cbOrdering = New System.Windows.Forms.ComboBox() - Me.lblTVUpdate = New System.Windows.Forms.Label() - Me.cboTVUpdate = New System.Windows.Forms.ComboBox() - Me.lblAPIKey = New System.Windows.Forms.Label() - Me.lblTVDBMirror = New System.Windows.Forms.Label() - Me.txtAPIKey = New System.Windows.Forms.TextBox() - Me.txtTVDBMirror = New System.Windows.Forms.TextBox() - Me.gbLanguage = New System.Windows.Forms.GroupBox() - Me.lblTVLanguagePreferred = New System.Windows.Forms.Label() - Me.btnTVLanguageFetch = New System.Windows.Forms.Button() - Me.cbTVLanguage = New System.Windows.Forms.ComboBox() - Me.gbOptions = New System.Windows.Forms.GroupBox() - Me.chkCertification = New System.Windows.Forms.CheckBox() - Me.chkTop250 = New System.Windows.Forms.CheckBox() - Me.chkCountry = New System.Windows.Forms.CheckBox() - Me.txtGenreLimit = New System.Windows.Forms.TextBox() - Me.lblLimit2 = New System.Windows.Forms.Label() - Me.txtActorLimit = New System.Windows.Forms.TextBox() - Me.lblLimit = New System.Windows.Forms.Label() - Me.chkCrew = New System.Windows.Forms.CheckBox() - Me.chkMusicBy = New System.Windows.Forms.CheckBox() - Me.chkProducers = New System.Windows.Forms.CheckBox() - Me.chkWriters = New System.Windows.Forms.CheckBox() - Me.chkStudio = New System.Windows.Forms.CheckBox() - Me.chkRuntime = New System.Windows.Forms.CheckBox() - Me.chkPlot = New System.Windows.Forms.CheckBox() - Me.chkOutline = New System.Windows.Forms.CheckBox() - Me.chkGenre = New System.Windows.Forms.CheckBox() - Me.chkDirector = New System.Windows.Forms.CheckBox() - Me.chkTagline = New System.Windows.Forms.CheckBox() - Me.chkCast = New System.Windows.Forms.CheckBox() - Me.chkVotes = New System.Windows.Forms.CheckBox() - Me.chkTrailer = New System.Windows.Forms.CheckBox() - Me.chkRating = New System.Windows.Forms.CheckBox() - Me.chkRelease = New System.Windows.Forms.CheckBox() - Me.chkMPAA = New System.Windows.Forms.CheckBox() - Me.chkYear = New System.Windows.Forms.CheckBox() - Me.chkTitle = New System.Windows.Forms.CheckBox() - Me.GroupBox26 = New System.Windows.Forms.GroupBox() - Me.GroupBox28 = New System.Windows.Forms.GroupBox() - Me.lstMetaData = New System.Windows.Forms.ListBox() - Me.txtDefFIExt = New System.Windows.Forms.TextBox() - Me.Label34 = New System.Windows.Forms.Label() - Me.btnRemoveMetaDataFT = New System.Windows.Forms.Button() - Me.btnEditMetaDataFT = New System.Windows.Forms.Button() - Me.btnNewMetaDataFT = New System.Windows.Forms.Button() - Me.chkIFOScan = New System.Windows.Forms.CheckBox() - Me.cbLanguages = New System.Windows.Forms.ComboBox() - Me.Label31 = New System.Windows.Forms.Label() - Me.gbRTFormat = New System.Windows.Forms.GroupBox() - Me.Label51 = New System.Windows.Forms.Label() - Me.txtRuntimeFormat = New System.Windows.Forms.TextBox() - Me.chkUseMIDuration = New System.Windows.Forms.CheckBox() - Me.chkScanMediaInfo = New System.Windows.Forms.CheckBox() - Me.GroupBox10 = New System.Windows.Forms.GroupBox() - Me.chkLockOutline = New System.Windows.Forms.CheckBox() - Me.chkLockPlot = New System.Windows.Forms.CheckBox() - Me.chkLockTrailer = New System.Windows.Forms.CheckBox() - Me.chkLockGenre = New System.Windows.Forms.CheckBox() - Me.chkLockRealStudio = New System.Windows.Forms.CheckBox() - Me.chkLockRating = New System.Windows.Forms.CheckBox() - Me.chkLockTagline = New System.Windows.Forms.CheckBox() - Me.chkLockTitle = New System.Windows.Forms.CheckBox() - Me.GroupBox1 = New System.Windows.Forms.GroupBox() - Me.chkOnlyValueForCert = New System.Windows.Forms.CheckBox() - Me.cbForce = New System.Windows.Forms.ComboBox() - Me.chkForceTitle = New System.Windows.Forms.CheckBox() - Me.chkOutlineForPlot = New System.Windows.Forms.CheckBox() - Me.chkCastWithImg = New System.Windows.Forms.CheckBox() - Me.chkUseCertForMPAA = New System.Windows.Forms.CheckBox() - Me.chkFullCast = New System.Windows.Forms.CheckBox() - Me.chkFullCrew = New System.Windows.Forms.CheckBox() - Me.cbCert = New System.Windows.Forms.ComboBox() - Me.chkCert = New System.Windows.Forms.CheckBox() - Me.pnlScraper = New System.Windows.Forms.Panel() - Me.ToolStrip1 = New System.Windows.Forms.ToolStrip() - Me.pnlMain = New System.Windows.Forms.Panel() - Me.gbHelp = New System.Windows.Forms.GroupBox() - Me.PictureBox2 = New System.Windows.Forms.PictureBox() - Me.lblHelp = New System.Windows.Forms.Label() - Me.Panel2 = New System.Windows.Forms.Panel() - Me.GroupBox4.SuspendLayout() - Me.GroupBox29.SuspendLayout() - Me.GroupBox3.SuspendLayout() - Me.tcCleaner.SuspendLayout() - Me.tpStandard.SuspendLayout() - Me.tpExpert.SuspendLayout() - Me.GroupBox12.SuspendLayout() - Me.GroupBox2.SuspendLayout() - Me.GroupBox25.SuspendLayout() - Me.GroupBox8.SuspendLayout() - Me.GroupBox21.SuspendLayout() - Me.GroupBox7.SuspendLayout() - Me.GroupBox6.SuspendLayout() - Me.GroupBox5.SuspendLayout() - Me.GroupBox14.SuspendLayout() - CType(Me.tbPosterQual, System.ComponentModel.ISupportInitialize).BeginInit() - Me.GroupBox13.SuspendLayout() - CType(Me.tbFanartQual, System.ComponentModel.ISupportInitialize).BeginInit() - Me.GroupBox9.SuspendLayout() - Me.GroupBox17.SuspendLayout() - Me.pnlTop.SuspendLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlGeneral.SuspendLayout() - Me.gbInterface.SuspendLayout() - Me.pnlXBMCCom.SuspendLayout() - Me.gbProxy.SuspendLayout() - Me.gbCreds.SuspendLayout() - Me.pnlMovies.SuspendLayout() - Me.gbGenreFilter.SuspendLayout() - Me.gbFilters.SuspendLayout() - Me.GroupBox27.SuspendLayout() - Me.GroupBox16.SuspendLayout() - Me.Panel1.SuspendLayout() - CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlExtensions.SuspendLayout() - Me.GroupBox22.SuspendLayout() - Me.GroupBox18.SuspendLayout() - Me.pnlSources.SuspendLayout() - Me.GroupBox19.SuspendLayout() - Me.pnlImages.SuspendLayout() - Me.GroupBox15.SuspendLayout() - Me.GroupBox23.SuspendLayout() - Me.GroupBox24.SuspendLayout() - Me.pnlTVSources.SuspendLayout() - Me.TabControl2.SuspendLayout() - Me.TabPage3.SuspendLayout() - Me.gbMiscTVSourceOpts.SuspendLayout() - Me.gbTVNaming.SuspendLayout() - Me.gbShowBanner.SuspendLayout() - Me.gbAllSeasonPoster.SuspendLayout() - Me.gbEpisodeFanart.SuspendLayout() - Me.gbEpisodePosters.SuspendLayout() - Me.gbSeasonFanart.SuspendLayout() - Me.gbSeasonPosters.SuspendLayout() - Me.gbShowFanart.SuspendLayout() - Me.gbShowPosters.SuspendLayout() - Me.TabPage4.SuspendLayout() - Me.gbShowRegex.SuspendLayout() - Me.pnlShows.SuspendLayout() - Me.gbTVListOptions.SuspendLayout() - Me.gbEpisodeListOptions.SuspendLayout() - Me.gbSeasonListOptions.SuspendLayout() - Me.gbShowListOptions.SuspendLayout() - Me.gbTVMisc.SuspendLayout() - Me.gbEpFilter.SuspendLayout() - Me.gbShowFilter.SuspendLayout() - Me.pnlTVImages.SuspendLayout() - Me.TabControl3.SuspendLayout() - Me.TabPage5.SuspendLayout() - Me.gbAllSPosterOpts.SuspendLayout() - CType(Me.tbAllSPosterQual, System.ComponentModel.ISupportInitialize).BeginInit() - Me.gbShowPosterOpts.SuspendLayout() - CType(Me.tbShowPosterQual, System.ComponentModel.ISupportInitialize).BeginInit() - Me.gbShowFanartOpts.SuspendLayout() - CType(Me.tbShowFanartQual, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TabPage6.SuspendLayout() - Me.gbSeaPosterOpts.SuspendLayout() - CType(Me.tbSeaPosterQual, System.ComponentModel.ISupportInitialize).BeginInit() - Me.gbSeaFanartOpts.SuspendLayout() - CType(Me.tbSeaFanartQual, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TabPage7.SuspendLayout() - Me.gbEpPosterOpts.SuspendLayout() - CType(Me.tbEpPosterQual, System.ComponentModel.ISupportInitialize).BeginInit() - Me.gbEpFanartOpts.SuspendLayout() - CType(Me.tbEpFanartQual, System.ComponentModel.ISupportInitialize).BeginInit() - Me.TabPage8.SuspendLayout() - Me.pnlTVScraper.SuspendLayout() - Me.GroupBox32.SuspendLayout() - Me.GroupBox35.SuspendLayout() - Me.GroupBox34.SuspendLayout() - Me.GroupBox33.SuspendLayout() - Me.gbEpLocks.SuspendLayout() - Me.gbShowLocks.SuspendLayout() - Me.GroupBox31.SuspendLayout() - Me.gbTVMIDefaults.SuspendLayout() - Me.gbTVScraperOptions.SuspendLayout() - Me.gbLanguage.SuspendLayout() - Me.gbOptions.SuspendLayout() - Me.GroupBox26.SuspendLayout() - Me.GroupBox28.SuspendLayout() - Me.gbRTFormat.SuspendLayout() - Me.GroupBox10.SuspendLayout() - Me.GroupBox1.SuspendLayout() - Me.pnlScraper.SuspendLayout() - Me.gbHelp.SuspendLayout() - CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit() - Me.Panel2.SuspendLayout() - Me.SuspendLayout() - ' - 'GroupBox4 - ' - Me.GroupBox4.Controls.Add(Me.chkShowGenresText) - Me.GroupBox4.Controls.Add(Me.chkSourceFromFolder) - Me.GroupBox4.Controls.Add(Me.chkNoDisplayFanart) - Me.GroupBox4.Controls.Add(Me.chkInfoPanelAnim) - Me.GroupBox4.Controls.Add(Me.chkNoDisplayPoster) - Me.GroupBox4.Controls.Add(Me.chkShowDims) - Me.GroupBox4.Controls.Add(Me.chkUpdates) - Me.GroupBox4.Controls.Add(Me.chkOverwriteNfo) - Me.GroupBox4.Controls.Add(Me.Label5) - Me.GroupBox4.Controls.Add(Me.chkLogErrors) - Me.GroupBox4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox4.Location = New System.Drawing.Point(210, 3) - Me.GroupBox4.Name = "GroupBox4" - Me.GroupBox4.Size = New System.Drawing.Size(900, 657) - Me.GroupBox4.TabIndex = 1 - Me.GroupBox4.TabStop = False - Me.GroupBox4.Text = "Miscellaneous" - ' - 'chkShowGenresText - ' - Me.chkShowGenresText.AutoSize = True - Me.chkShowGenresText.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowGenresText.Location = New System.Drawing.Point(10, 178) - Me.chkShowGenresText.Name = "chkShowGenresText" - Me.chkShowGenresText.Size = New System.Drawing.Size(166, 17) - Me.chkShowGenresText.TabIndex = 9 - Me.chkShowGenresText.Text = "Allways Display Genres Text" - Me.chkShowGenresText.UseVisualStyleBackColor = True - ' - 'chkSourceFromFolder - ' - Me.chkSourceFromFolder.AutoSize = True - Me.chkSourceFromFolder.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkSourceFromFolder.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSourceFromFolder.Location = New System.Drawing.Point(10, 110) - Me.chkSourceFromFolder.Name = "chkSourceFromFolder" - Me.chkSourceFromFolder.Size = New System.Drawing.Size(243, 17) - Me.chkSourceFromFolder.TabIndex = 5 - Me.chkSourceFromFolder.Text = "Include Folder Name in Source Type Check" - Me.chkSourceFromFolder.UseVisualStyleBackColor = True - ' - 'chkNoDisplayFanart - ' - Me.chkNoDisplayFanart.AutoSize = True - Me.chkNoDisplayFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkNoDisplayFanart.Location = New System.Drawing.Point(10, 144) - Me.chkNoDisplayFanart.Name = "chkNoDisplayFanart" - Me.chkNoDisplayFanart.Size = New System.Drawing.Size(139, 17) - Me.chkNoDisplayFanart.TabIndex = 7 - Me.chkNoDisplayFanart.Text = "Do Not Display Fanart" - Me.chkNoDisplayFanart.UseVisualStyleBackColor = True - ' - 'chkInfoPanelAnim - ' - Me.chkInfoPanelAnim.AutoSize = True - Me.chkInfoPanelAnim.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkInfoPanelAnim.Location = New System.Drawing.Point(10, 94) - Me.chkInfoPanelAnim.Name = "chkInfoPanelAnim" - Me.chkInfoPanelAnim.Size = New System.Drawing.Size(148, 17) - Me.chkInfoPanelAnim.TabIndex = 4 - Me.chkInfoPanelAnim.Text = "Enable Panel Animation" - Me.chkInfoPanelAnim.UseVisualStyleBackColor = True - ' - 'chkNoDisplayPoster - ' - Me.chkNoDisplayPoster.AutoSize = True - Me.chkNoDisplayPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkNoDisplayPoster.Location = New System.Drawing.Point(10, 127) - Me.chkNoDisplayPoster.Name = "chkNoDisplayPoster" - Me.chkNoDisplayPoster.Size = New System.Drawing.Size(138, 17) - Me.chkNoDisplayPoster.TabIndex = 6 - Me.chkNoDisplayPoster.Text = "Do Not Display Poster" - Me.chkNoDisplayPoster.UseVisualStyleBackColor = True - ' - 'chkShowDims - ' - Me.chkShowDims.AutoSize = True - Me.chkShowDims.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowDims.Location = New System.Drawing.Point(10, 161) - Me.chkShowDims.Name = "chkShowDims" - Me.chkShowDims.Size = New System.Drawing.Size(160, 17) - Me.chkShowDims.TabIndex = 8 - Me.chkShowDims.Text = "Display Image Dimensions" - Me.chkShowDims.UseVisualStyleBackColor = True - ' - 'chkUpdates - ' - Me.chkUpdates.AutoSize = True - Me.chkUpdates.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkUpdates.Location = New System.Drawing.Point(10, 20) - Me.chkUpdates.Name = "chkUpdates" - Me.chkUpdates.Size = New System.Drawing.Size(121, 17) - Me.chkUpdates.TabIndex = 0 - Me.chkUpdates.Text = "Check for Updates" - Me.chkUpdates.UseVisualStyleBackColor = True - ' - 'chkOverwriteNfo - ' - Me.chkOverwriteNfo.AutoSize = True - Me.chkOverwriteNfo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOverwriteNfo.Location = New System.Drawing.Point(10, 54) - Me.chkOverwriteNfo.Name = "chkOverwriteNfo" - Me.chkOverwriteNfo.Size = New System.Drawing.Size(191, 17) - Me.chkOverwriteNfo.TabIndex = 2 - Me.chkOverwriteNfo.Text = "Overwrite Non-conforming nfos" - Me.chkOverwriteNfo.UseVisualStyleBackColor = True - ' - 'Label5 - ' - Me.Label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label5.Location = New System.Drawing.Point(20, 68) - Me.Label5.Name = "Label5" - Me.Label5.Size = New System.Drawing.Size(165, 24) - Me.Label5.TabIndex = 3 - Me.Label5.Text = "(If unchecked, non-conforming nfos will be renamed to .info)" - Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'chkLogErrors - ' - Me.chkLogErrors.AutoSize = True - Me.chkLogErrors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkLogErrors.Location = New System.Drawing.Point(10, 37) - Me.chkLogErrors.Name = "chkLogErrors" - Me.chkLogErrors.Size = New System.Drawing.Size(113, 17) - Me.chkLogErrors.TabIndex = 1 - Me.chkLogErrors.Text = "Log Errors to File" - Me.chkLogErrors.UseVisualStyleBackColor = True - ' - 'GroupBox29 - ' - Me.GroupBox29.Controls.Add(Me.cbEpTheme) - Me.GroupBox29.Controls.Add(Me.Label3) - Me.GroupBox29.Controls.Add(Me.cbTVShowTheme) - Me.GroupBox29.Controls.Add(Me.Label1) - Me.GroupBox29.Controls.Add(Me.cbMovieTheme) - Me.GroupBox29.Controls.Add(Me.Label35) - Me.GroupBox29.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox29.Location = New System.Drawing.Point(8, 61) - Me.GroupBox29.Name = "GroupBox29" - Me.GroupBox29.Size = New System.Drawing.Size(179, 166) - Me.GroupBox29.TabIndex = 2 - Me.GroupBox29.TabStop = False - Me.GroupBox29.Text = "Themes" - ' - 'cbEpTheme - ' - Me.cbEpTheme.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbEpTheme.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbEpTheme.FormattingEnabled = True - Me.cbEpTheme.Location = New System.Drawing.Point(9, 129) - Me.cbEpTheme.Name = "cbEpTheme" - Me.cbEpTheme.Size = New System.Drawing.Size(162, 21) - Me.cbEpTheme.TabIndex = 5 - ' - 'Label3 - ' - Me.Label3.AutoSize = True - Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label3.Location = New System.Drawing.Point(7, 114) - Me.Label3.Name = "Label3" - Me.Label3.Size = New System.Drawing.Size(87, 13) - Me.Label3.TabIndex = 4 - Me.Label3.Text = "Episode Theme:" - ' - 'cbTVShowTheme - ' - Me.cbTVShowTheme.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbTVShowTheme.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbTVShowTheme.FormattingEnabled = True - Me.cbTVShowTheme.Location = New System.Drawing.Point(9, 83) - Me.cbTVShowTheme.Name = "cbTVShowTheme" - Me.cbTVShowTheme.Size = New System.Drawing.Size(162, 21) - Me.cbTVShowTheme.TabIndex = 3 - ' - 'Label1 - ' - Me.Label1.AutoSize = True - Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label1.Location = New System.Drawing.Point(7, 68) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(90, 13) - Me.Label1.TabIndex = 2 - Me.Label1.Text = "TV Show Theme:" - ' - 'cbMovieTheme - ' - Me.cbMovieTheme.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbMovieTheme.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbMovieTheme.FormattingEnabled = True - Me.cbMovieTheme.Location = New System.Drawing.Point(9, 38) - Me.cbMovieTheme.Name = "cbMovieTheme" - Me.cbMovieTheme.Size = New System.Drawing.Size(162, 21) - Me.cbMovieTheme.TabIndex = 1 - ' - 'Label35 - ' - Me.Label35.AutoSize = True - Me.Label35.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label35.Location = New System.Drawing.Point(7, 23) - Me.Label35.Name = "Label35" - Me.Label35.Size = New System.Drawing.Size(77, 13) - Me.Label35.TabIndex = 0 - Me.Label35.Text = "Movie Theme:" - ' - 'Label32 - ' - Me.Label32.AutoSize = True - Me.Label32.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label32.Location = New System.Drawing.Point(6, 18) - Me.Label32.Name = "Label32" - Me.Label32.Size = New System.Drawing.Size(109, 13) - Me.Label32.TabIndex = 0 - Me.Label32.Text = "Interface Language:" - ' - 'cbIntLang - ' - Me.cbIntLang.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbIntLang.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbIntLang.FormattingEnabled = True - Me.cbIntLang.Location = New System.Drawing.Point(9, 34) - Me.cbIntLang.Name = "cbIntLang" - Me.cbIntLang.Size = New System.Drawing.Size(137, 21) - Me.cbIntLang.TabIndex = 1 - ' - 'GroupBox3 - ' - Me.GroupBox3.Controls.Add(Me.tcCleaner) - Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox3.Location = New System.Drawing.Point(401, 6) - Me.GroupBox3.Name = "GroupBox3" - Me.GroupBox3.Size = New System.Drawing.Size(208, 385) - Me.GroupBox3.TabIndex = 2 - Me.GroupBox3.TabStop = False - Me.GroupBox3.Text = "Clean Files" - ' - 'tcCleaner - ' - Me.tcCleaner.Appearance = System.Windows.Forms.TabAppearance.FlatButtons - Me.tcCleaner.Controls.Add(Me.tpStandard) - Me.tcCleaner.Controls.Add(Me.tpExpert) - Me.tcCleaner.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.tcCleaner.Location = New System.Drawing.Point(6, 19) - Me.tcCleaner.Name = "tcCleaner" - Me.tcCleaner.SelectedIndex = 0 - Me.tcCleaner.Size = New System.Drawing.Size(196, 363) - Me.tcCleaner.TabIndex = 0 - ' - 'tpStandard - ' - Me.tpStandard.BackColor = System.Drawing.Color.White - Me.tpStandard.Controls.Add(Me.chkCleanFolderJPG) - Me.tpStandard.Controls.Add(Me.chkCleanExtrathumbs) - Me.tpStandard.Controls.Add(Me.chkCleanMovieTBN) - Me.tpStandard.Controls.Add(Me.chkCleanMovieNameJPG) - Me.tpStandard.Controls.Add(Me.chkCleanMovieTBNb) - Me.tpStandard.Controls.Add(Me.chkCleanMovieJPG) - Me.tpStandard.Controls.Add(Me.chkCleanFanartJPG) - Me.tpStandard.Controls.Add(Me.chkCleanPosterJPG) - Me.tpStandard.Controls.Add(Me.chkCleanMovieFanartJPG) - Me.tpStandard.Controls.Add(Me.chkCleanPosterTBN) - Me.tpStandard.Controls.Add(Me.chkCleanMovieNFO) - Me.tpStandard.Controls.Add(Me.chkCleanDotFanartJPG) - Me.tpStandard.Controls.Add(Me.chkCleanMovieNFOb) - Me.tpStandard.Location = New System.Drawing.Point(4, 25) - Me.tpStandard.Name = "tpStandard" - Me.tpStandard.Padding = New System.Windows.Forms.Padding(3) - Me.tpStandard.Size = New System.Drawing.Size(188, 334) - Me.tpStandard.TabIndex = 0 - Me.tpStandard.Text = "Standard" - Me.tpStandard.UseVisualStyleBackColor = True - ' - 'chkCleanFolderJPG - ' - Me.chkCleanFolderJPG.AutoSize = True - Me.chkCleanFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanFolderJPG.Location = New System.Drawing.Point(7, 10) - Me.chkCleanFolderJPG.Name = "chkCleanFolderJPG" - Me.chkCleanFolderJPG.Size = New System.Drawing.Size(81, 17) - Me.chkCleanFolderJPG.TabIndex = 0 - Me.chkCleanFolderJPG.Text = "/folder.jpg" - Me.chkCleanFolderJPG.UseVisualStyleBackColor = True - ' - 'chkCleanExtrathumbs - ' - Me.chkCleanExtrathumbs.AutoSize = True - Me.chkCleanExtrathumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanExtrathumbs.Location = New System.Drawing.Point(7, 238) - Me.chkCleanExtrathumbs.Name = "chkCleanExtrathumbs" - Me.chkCleanExtrathumbs.Size = New System.Drawing.Size(98, 17) - Me.chkCleanExtrathumbs.TabIndex = 12 - Me.chkCleanExtrathumbs.Text = "/extrathumbs/" - Me.chkCleanExtrathumbs.UseVisualStyleBackColor = True - ' - 'chkCleanMovieTBN - ' - Me.chkCleanMovieTBN.AutoSize = True - Me.chkCleanMovieTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanMovieTBN.Location = New System.Drawing.Point(7, 29) - Me.chkCleanMovieTBN.Name = "chkCleanMovieTBN" - Me.chkCleanMovieTBN.Size = New System.Drawing.Size(81, 17) - Me.chkCleanMovieTBN.TabIndex = 1 - Me.chkCleanMovieTBN.Text = "/movie.tbn" - Me.chkCleanMovieTBN.UseVisualStyleBackColor = True - ' - 'chkCleanMovieNameJPG - ' - Me.chkCleanMovieNameJPG.AutoSize = True - Me.chkCleanMovieNameJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanMovieNameJPG.Location = New System.Drawing.Point(7, 124) - Me.chkCleanMovieNameJPG.Name = "chkCleanMovieNameJPG" - Me.chkCleanMovieNameJPG.Size = New System.Drawing.Size(96, 17) - Me.chkCleanMovieNameJPG.TabIndex = 6 - Me.chkCleanMovieNameJPG.Text = "/.jpg" - Me.chkCleanMovieNameJPG.UseVisualStyleBackColor = True - ' - 'chkCleanMovieTBNb - ' - Me.chkCleanMovieTBNb.AutoSize = True - Me.chkCleanMovieTBNb.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanMovieTBNb.Location = New System.Drawing.Point(7, 48) - Me.chkCleanMovieTBNb.Name = "chkCleanMovieTBNb" - Me.chkCleanMovieTBNb.Size = New System.Drawing.Size(97, 17) - Me.chkCleanMovieTBNb.TabIndex = 2 - Me.chkCleanMovieTBNb.Text = "/.tbn" - Me.chkCleanMovieTBNb.UseVisualStyleBackColor = True - ' - 'chkCleanMovieJPG - ' - Me.chkCleanMovieJPG.AutoSize = True - Me.chkCleanMovieJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanMovieJPG.Location = New System.Drawing.Point(7, 105) - Me.chkCleanMovieJPG.Name = "chkCleanMovieJPG" - Me.chkCleanMovieJPG.Size = New System.Drawing.Size(80, 17) - Me.chkCleanMovieJPG.TabIndex = 5 - Me.chkCleanMovieJPG.Text = "/movie.jpg" - Me.chkCleanMovieJPG.UseVisualStyleBackColor = True - ' - 'chkCleanFanartJPG - ' - Me.chkCleanFanartJPG.AutoSize = True - Me.chkCleanFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanFanartJPG.Location = New System.Drawing.Point(7, 143) - Me.chkCleanFanartJPG.Name = "chkCleanFanartJPG" - Me.chkCleanFanartJPG.Size = New System.Drawing.Size(81, 17) - Me.chkCleanFanartJPG.TabIndex = 7 - Me.chkCleanFanartJPG.Text = "/fanart.jpg" - Me.chkCleanFanartJPG.UseVisualStyleBackColor = True - ' - 'chkCleanPosterJPG - ' - Me.chkCleanPosterJPG.AutoSize = True - Me.chkCleanPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanPosterJPG.Location = New System.Drawing.Point(7, 86) - Me.chkCleanPosterJPG.Name = "chkCleanPosterJPG" - Me.chkCleanPosterJPG.Size = New System.Drawing.Size(83, 17) - Me.chkCleanPosterJPG.TabIndex = 4 - Me.chkCleanPosterJPG.Text = "/poster.jpg" - Me.chkCleanPosterJPG.UseVisualStyleBackColor = True - ' - 'chkCleanMovieFanartJPG - ' - Me.chkCleanMovieFanartJPG.AutoSize = True - Me.chkCleanMovieFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanMovieFanartJPG.Location = New System.Drawing.Point(7, 162) - Me.chkCleanMovieFanartJPG.Name = "chkCleanMovieFanartJPG" - Me.chkCleanMovieFanartJPG.Size = New System.Drawing.Size(131, 17) - Me.chkCleanMovieFanartJPG.TabIndex = 8 - Me.chkCleanMovieFanartJPG.Text = "/-fanart.jpg" - Me.chkCleanMovieFanartJPG.UseVisualStyleBackColor = True - ' - 'chkCleanPosterTBN - ' - Me.chkCleanPosterTBN.AutoSize = True - Me.chkCleanPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanPosterTBN.Location = New System.Drawing.Point(7, 67) - Me.chkCleanPosterTBN.Name = "chkCleanPosterTBN" - Me.chkCleanPosterTBN.Size = New System.Drawing.Size(84, 17) - Me.chkCleanPosterTBN.TabIndex = 3 - Me.chkCleanPosterTBN.Text = "/poster.tbn" - Me.chkCleanPosterTBN.UseVisualStyleBackColor = True - ' - 'chkCleanMovieNFO - ' - Me.chkCleanMovieNFO.AutoSize = True - Me.chkCleanMovieNFO.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanMovieNFO.Location = New System.Drawing.Point(7, 200) - Me.chkCleanMovieNFO.Name = "chkCleanMovieNFO" - Me.chkCleanMovieNFO.Size = New System.Drawing.Size(81, 17) - Me.chkCleanMovieNFO.TabIndex = 10 - Me.chkCleanMovieNFO.Text = "/movie.nfo" - Me.chkCleanMovieNFO.UseVisualStyleBackColor = True - ' - 'chkCleanDotFanartJPG - ' - Me.chkCleanDotFanartJPG.AutoSize = True - Me.chkCleanDotFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanDotFanartJPG.Location = New System.Drawing.Point(7, 181) - Me.chkCleanDotFanartJPG.Name = "chkCleanDotFanartJPG" - Me.chkCleanDotFanartJPG.Size = New System.Drawing.Size(130, 17) - Me.chkCleanDotFanartJPG.TabIndex = 9 - Me.chkCleanDotFanartJPG.Text = "/.fanart.jpg" - Me.chkCleanDotFanartJPG.UseVisualStyleBackColor = True - ' - 'chkCleanMovieNFOb - ' - Me.chkCleanMovieNFOb.AutoSize = True - Me.chkCleanMovieNFOb.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanMovieNFOb.Location = New System.Drawing.Point(7, 219) - Me.chkCleanMovieNFOb.Name = "chkCleanMovieNFOb" - Me.chkCleanMovieNFOb.Size = New System.Drawing.Size(97, 17) - Me.chkCleanMovieNFOb.TabIndex = 11 - Me.chkCleanMovieNFOb.Text = "/.nfo" - Me.chkCleanMovieNFOb.UseVisualStyleBackColor = True - ' - 'tpExpert - ' - Me.tpExpert.BackColor = System.Drawing.Color.White - Me.tpExpert.Controls.Add(Me.chkWhitelistVideo) - Me.tpExpert.Controls.Add(Me.Label27) - Me.tpExpert.Controls.Add(Me.btnRemoveWhitelist) - Me.tpExpert.Controls.Add(Me.btnAddWhitelist) - Me.tpExpert.Controls.Add(Me.txtWhitelist) - Me.tpExpert.Controls.Add(Me.lstWhitelist) - Me.tpExpert.Controls.Add(Me.Label25) - Me.tpExpert.Location = New System.Drawing.Point(4, 25) - Me.tpExpert.Name = "tpExpert" - Me.tpExpert.Padding = New System.Windows.Forms.Padding(3) - Me.tpExpert.Size = New System.Drawing.Size(188, 334) - Me.tpExpert.TabIndex = 1 - Me.tpExpert.Text = "Expert" - Me.tpExpert.UseVisualStyleBackColor = True - ' - 'chkWhitelistVideo - ' - Me.chkWhitelistVideo.AutoSize = True - Me.chkWhitelistVideo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkWhitelistVideo.Location = New System.Drawing.Point(4, 85) - Me.chkWhitelistVideo.Name = "chkWhitelistVideo" - Me.chkWhitelistVideo.Size = New System.Drawing.Size(163, 17) - Me.chkWhitelistVideo.TabIndex = 1 - Me.chkWhitelistVideo.Text = "Whitelist Video Extensions" - Me.chkWhitelistVideo.UseVisualStyleBackColor = True - ' - 'Label27 - ' - Me.Label27.AutoSize = True - Me.Label27.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label27.Location = New System.Drawing.Point(19, 107) - Me.Label27.Name = "Label27" - Me.Label27.Size = New System.Drawing.Size(127, 13) - Me.Label27.TabIndex = 2 - Me.Label27.Text = "Whitelisted Extensions:" - ' - 'btnRemoveWhitelist - ' - Me.btnRemoveWhitelist.Image = CType(resources.GetObject("btnRemoveWhitelist.Image"), System.Drawing.Image) - Me.btnRemoveWhitelist.Location = New System.Drawing.Point(134, 251) - Me.btnRemoveWhitelist.Name = "btnRemoveWhitelist" - Me.btnRemoveWhitelist.Size = New System.Drawing.Size(23, 23) - Me.btnRemoveWhitelist.TabIndex = 6 - Me.btnRemoveWhitelist.UseVisualStyleBackColor = True - ' - 'btnAddWhitelist - ' - Me.btnAddWhitelist.Image = CType(resources.GetObject("btnAddWhitelist.Image"), System.Drawing.Image) - Me.btnAddWhitelist.Location = New System.Drawing.Point(82, 251) - Me.btnAddWhitelist.Name = "btnAddWhitelist" - Me.btnAddWhitelist.Size = New System.Drawing.Size(23, 23) - Me.btnAddWhitelist.TabIndex = 5 - Me.btnAddWhitelist.UseVisualStyleBackColor = True - ' - 'txtWhitelist - ' - Me.txtWhitelist.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtWhitelist.Location = New System.Drawing.Point(20, 252) - Me.txtWhitelist.Name = "txtWhitelist" - Me.txtWhitelist.Size = New System.Drawing.Size(61, 22) - Me.txtWhitelist.TabIndex = 4 - ' - 'lstWhitelist - ' - Me.lstWhitelist.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lstWhitelist.FormattingEnabled = True - Me.lstWhitelist.Location = New System.Drawing.Point(19, 126) - Me.lstWhitelist.Name = "lstWhitelist" - Me.lstWhitelist.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.lstWhitelist.Size = New System.Drawing.Size(138, 108) - Me.lstWhitelist.TabIndex = 3 - ' - 'Label25 - ' - Me.Label25.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label25.ForeColor = System.Drawing.Color.Red - Me.Label25.Location = New System.Drawing.Point(12, 10) - Me.Label25.Name = "Label25" - Me.Label25.Size = New System.Drawing.Size(155, 68) - Me.Label25.TabIndex = 0 - Me.Label25.Text = "WARNING: Using the Expert Mode Cleaner could potentially delete wanted files. Tak" & _ - "e care when using this tool." - Me.Label25.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'GroupBox12 - ' - Me.GroupBox12.Controls.Add(Me.chkClickScrape) - Me.GroupBox12.Controls.Add(Me.chkAskCheckboxScrape) - Me.GroupBox12.Controls.Add(Me.chkMarkNew) - Me.GroupBox12.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox12.Location = New System.Drawing.Point(6, 7) - Me.GroupBox12.Name = "GroupBox12" - Me.GroupBox12.Size = New System.Drawing.Size(219, 93) - Me.GroupBox12.TabIndex = 1 - Me.GroupBox12.TabStop = False - Me.GroupBox12.Text = "Miscellaneous" - ' - 'chkClickScrape - ' - Me.chkClickScrape.AutoSize = True - Me.chkClickScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkClickScrape.Location = New System.Drawing.Point(12, 36) - Me.chkClickScrape.Name = "chkClickScrape" - Me.chkClickScrape.Size = New System.Drawing.Size(125, 17) - Me.chkClickScrape.TabIndex = 65 - Me.chkClickScrape.Text = "Enable Click Scrape" - Me.chkClickScrape.UseVisualStyleBackColor = True - ' - 'chkAskCheckboxScrape - ' - Me.chkAskCheckboxScrape.AutoSize = True - Me.chkAskCheckboxScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkAskCheckboxScrape.Location = New System.Drawing.Point(25, 56) - Me.chkAskCheckboxScrape.Name = "chkAskCheckboxScrape" - Me.chkAskCheckboxScrape.Size = New System.Drawing.Size(127, 17) - Me.chkAskCheckboxScrape.TabIndex = 64 - Me.chkAskCheckboxScrape.Text = "Ask On Click Scrape" - Me.chkAskCheckboxScrape.UseVisualStyleBackColor = True - ' - 'chkMarkNew - ' - Me.chkMarkNew.AutoSize = True - Me.chkMarkNew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMarkNew.Location = New System.Drawing.Point(12, 14) - Me.chkMarkNew.Name = "chkMarkNew" - Me.chkMarkNew.Size = New System.Drawing.Size(117, 17) - Me.chkMarkNew.TabIndex = 0 - Me.chkMarkNew.Text = "Mark New Movies" - Me.chkMarkNew.UseVisualStyleBackColor = True - ' - 'lbGenre - ' - Me.lbGenre.CheckOnClick = True - Me.lbGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lbGenre.FormattingEnabled = True - Me.lbGenre.IntegralHeight = False - Me.lbGenre.Location = New System.Drawing.Point(10, 18) - Me.lbGenre.Name = "lbGenre" - Me.lbGenre.Size = New System.Drawing.Size(157, 124) - Me.lbGenre.Sorted = True - Me.lbGenre.TabIndex = 0 - ' - 'GroupBox2 - ' - Me.GroupBox2.Controls.Add(Me.txtCheckTitleTol) - Me.GroupBox2.Controls.Add(Me.Label30) - Me.GroupBox2.Controls.Add(Me.chkCheckTitles) - Me.GroupBox2.Controls.Add(Me.GroupBox25) - Me.GroupBox2.Controls.Add(Me.chkDisplayYear) - Me.GroupBox2.Controls.Add(Me.chkMovieExtraCol) - Me.GroupBox2.Controls.Add(Me.chkMovieSubCol) - Me.GroupBox2.Controls.Add(Me.chkMovieTrailerCol) - Me.GroupBox2.Controls.Add(Me.chkMovieInfoCol) - Me.GroupBox2.Controls.Add(Me.chkMovieFanartCol) - Me.GroupBox2.Controls.Add(Me.chkMoviePosterCol) - Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox2.Location = New System.Drawing.Point(7, 106) - Me.GroupBox2.Name = "GroupBox2" - Me.GroupBox2.Size = New System.Drawing.Size(218, 279) - Me.GroupBox2.TabIndex = 4 - Me.GroupBox2.TabStop = False - Me.GroupBox2.Text = "Media List Options" - ' - 'txtCheckTitleTol - ' - Me.txtCheckTitleTol.Enabled = False - Me.txtCheckTitleTol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtCheckTitleTol.Location = New System.Drawing.Point(142, 50) - Me.txtCheckTitleTol.Name = "txtCheckTitleTol" - Me.txtCheckTitleTol.Size = New System.Drawing.Size(61, 22) - Me.txtCheckTitleTol.TabIndex = 74 - ' - 'Label30 - ' - Me.Label30.AutoSize = True - Me.Label30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label30.Location = New System.Drawing.Point(27, 54) - Me.Label30.Name = "Label30" - Me.Label30.Size = New System.Drawing.Size(111, 13) - Me.Label30.TabIndex = 73 - Me.Label30.Text = "Mismatch Tolerance:" - Me.Label30.TextAlign = System.Drawing.ContentAlignment.TopRight - ' - 'chkCheckTitles - ' - Me.chkCheckTitles.AutoSize = True - Me.chkCheckTitles.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCheckTitles.Location = New System.Drawing.Point(8, 35) - Me.chkCheckTitles.Name = "chkCheckTitles" - Me.chkCheckTitles.Size = New System.Drawing.Size(178, 17) - Me.chkCheckTitles.TabIndex = 72 - Me.chkCheckTitles.Text = "Check Title Match Confidence" - Me.chkCheckTitles.UseVisualStyleBackColor = True - ' - 'GroupBox25 - ' - Me.GroupBox25.Controls.Add(Me.btnRemoveToken) - Me.GroupBox25.Controls.Add(Me.btnAddToken) - Me.GroupBox25.Controls.Add(Me.txtSortToken) - Me.GroupBox25.Controls.Add(Me.lstSortTokens) - Me.GroupBox25.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox25.Location = New System.Drawing.Point(9, 73) - Me.GroupBox25.Name = "GroupBox25" - Me.GroupBox25.Size = New System.Drawing.Size(200, 102) - Me.GroupBox25.TabIndex = 71 - Me.GroupBox25.TabStop = False - Me.GroupBox25.Text = "Sort Tokens to Ignore" - ' - 'btnRemoveToken - ' - Me.btnRemoveToken.Image = CType(resources.GetObject("btnRemoveToken.Image"), System.Drawing.Image) - Me.btnRemoveToken.Location = New System.Drawing.Point(168, 72) - Me.btnRemoveToken.Name = "btnRemoveToken" - Me.btnRemoveToken.Size = New System.Drawing.Size(23, 23) - Me.btnRemoveToken.TabIndex = 3 - Me.btnRemoveToken.UseVisualStyleBackColor = True - ' - 'btnAddToken - ' - Me.btnAddToken.Image = CType(resources.GetObject("btnAddToken.Image"), System.Drawing.Image) - Me.btnAddToken.Location = New System.Drawing.Point(72, 72) - Me.btnAddToken.Name = "btnAddToken" - Me.btnAddToken.Size = New System.Drawing.Size(23, 23) - Me.btnAddToken.TabIndex = 2 - Me.btnAddToken.UseVisualStyleBackColor = True - ' - 'txtSortToken - ' - Me.txtSortToken.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtSortToken.Location = New System.Drawing.Point(10, 73) - Me.txtSortToken.Name = "txtSortToken" - Me.txtSortToken.Size = New System.Drawing.Size(61, 22) - Me.txtSortToken.TabIndex = 1 - ' - 'lstSortTokens - ' - Me.lstSortTokens.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lstSortTokens.FormattingEnabled = True - Me.lstSortTokens.Location = New System.Drawing.Point(10, 15) - Me.lstSortTokens.Name = "lstSortTokens" - Me.lstSortTokens.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.lstSortTokens.Size = New System.Drawing.Size(180, 43) - Me.lstSortTokens.Sorted = True - Me.lstSortTokens.TabIndex = 0 - ' - 'chkDisplayYear - ' - Me.chkDisplayYear.AutoSize = True - Me.chkDisplayYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkDisplayYear.Location = New System.Drawing.Point(8, 19) - Me.chkDisplayYear.Name = "chkDisplayYear" - Me.chkDisplayYear.Size = New System.Drawing.Size(144, 17) - Me.chkDisplayYear.TabIndex = 70 - Me.chkDisplayYear.Text = "Display Year in List Title" - Me.chkDisplayYear.UseVisualStyleBackColor = True - ' - 'chkMovieExtraCol - ' - Me.chkMovieExtraCol.AutoSize = True - Me.chkMovieExtraCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieExtraCol.Location = New System.Drawing.Point(9, 258) - Me.chkMovieExtraCol.Name = "chkMovieExtraCol" - Me.chkMovieExtraCol.Size = New System.Drawing.Size(155, 17) - Me.chkMovieExtraCol.TabIndex = 5 - Me.chkMovieExtraCol.Text = "Hide Extrathumb Column" - Me.chkMovieExtraCol.UseVisualStyleBackColor = True - ' - 'chkMovieSubCol - ' - Me.chkMovieSubCol.AutoSize = True - Me.chkMovieSubCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieSubCol.Location = New System.Drawing.Point(9, 242) - Me.chkMovieSubCol.Name = "chkMovieSubCol" - Me.chkMovieSubCol.Size = New System.Drawing.Size(116, 17) - Me.chkMovieSubCol.TabIndex = 4 - Me.chkMovieSubCol.Text = "Hide Sub Column" - Me.chkMovieSubCol.UseVisualStyleBackColor = True - ' - 'chkMovieTrailerCol - ' - Me.chkMovieTrailerCol.AutoSize = True - Me.chkMovieTrailerCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieTrailerCol.Location = New System.Drawing.Point(9, 226) - Me.chkMovieTrailerCol.Name = "chkMovieTrailerCol" - Me.chkMovieTrailerCol.Size = New System.Drawing.Size(127, 17) - Me.chkMovieTrailerCol.TabIndex = 3 - Me.chkMovieTrailerCol.Text = "Hide Trailer Column" - Me.chkMovieTrailerCol.UseVisualStyleBackColor = True - ' - 'chkMovieInfoCol - ' - Me.chkMovieInfoCol.AutoSize = True - Me.chkMovieInfoCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieInfoCol.Location = New System.Drawing.Point(9, 210) - Me.chkMovieInfoCol.Name = "chkMovieInfoCol" - Me.chkMovieInfoCol.Size = New System.Drawing.Size(117, 17) - Me.chkMovieInfoCol.TabIndex = 2 - Me.chkMovieInfoCol.Text = "Hide Info Column" - Me.chkMovieInfoCol.UseVisualStyleBackColor = True - ' - 'chkMovieFanartCol - ' - Me.chkMovieFanartCol.AutoSize = True - Me.chkMovieFanartCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieFanartCol.Location = New System.Drawing.Point(9, 194) - Me.chkMovieFanartCol.Name = "chkMovieFanartCol" - Me.chkMovieFanartCol.Size = New System.Drawing.Size(129, 17) - Me.chkMovieFanartCol.TabIndex = 1 - Me.chkMovieFanartCol.Text = "Hide Fanart Column" - Me.chkMovieFanartCol.UseVisualStyleBackColor = True - ' - 'chkMoviePosterCol - ' - Me.chkMoviePosterCol.AutoSize = True - Me.chkMoviePosterCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMoviePosterCol.Location = New System.Drawing.Point(9, 178) - Me.chkMoviePosterCol.Name = "chkMoviePosterCol" - Me.chkMoviePosterCol.Size = New System.Drawing.Size(128, 17) - Me.chkMoviePosterCol.TabIndex = 0 - Me.chkMoviePosterCol.Text = "Hide Poster Column" - Me.chkMoviePosterCol.UseVisualStyleBackColor = True - ' - 'GroupBox8 - ' - Me.GroupBox8.Controls.Add(Me.btnMovieFrodo) - Me.GroupBox8.Controls.Add(Me.chkMovieNameMultiOnly) - Me.GroupBox8.Controls.Add(Me.GroupBox21) - Me.GroupBox8.Controls.Add(Me.GroupBox7) - Me.GroupBox8.Controls.Add(Me.GroupBox6) - Me.GroupBox8.Controls.Add(Me.GroupBox5) - Me.GroupBox8.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox8.Location = New System.Drawing.Point(243, 113) - Me.GroupBox8.Name = "GroupBox8" - Me.GroupBox8.Size = New System.Drawing.Size(366, 197) - Me.GroupBox8.TabIndex = 5 - Me.GroupBox8.TabStop = False - Me.GroupBox8.Text = "File Naming" - ' - 'btnMovieFrodo - ' - Me.btnMovieFrodo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnMovieFrodo.Location = New System.Drawing.Point(237, 29) - Me.btnMovieFrodo.Name = "btnMovieFrodo" - Me.btnMovieFrodo.Size = New System.Drawing.Size(116, 23) - Me.btnMovieFrodo.TabIndex = 1 - Me.btnMovieFrodo.Text = "XBMC Frodo" - Me.btnMovieFrodo.UseVisualStyleBackColor = True - ' - 'chkMovieNameMultiOnly - ' - Me.chkMovieNameMultiOnly.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkMovieNameMultiOnly.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieNameMultiOnly.Location = New System.Drawing.Point(235, 58) - Me.chkMovieNameMultiOnly.Name = "chkMovieNameMultiOnly" - Me.chkMovieNameMultiOnly.Size = New System.Drawing.Size(125, 43) - Me.chkMovieNameMultiOnly.TabIndex = 2 - Me.chkMovieNameMultiOnly.Text = "Use Only for Folders with Multiple Movies" - Me.chkMovieNameMultiOnly.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkMovieNameMultiOnly.UseVisualStyleBackColor = True - ' - 'GroupBox21 - ' - Me.GroupBox21.Controls.Add(Me.rbBracketTrailer) - Me.GroupBox21.Controls.Add(Me.rbDashTrailer) - Me.GroupBox21.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox21.Location = New System.Drawing.Point(150, 111) - Me.GroupBox21.Name = "GroupBox21" - Me.GroupBox21.Size = New System.Drawing.Size(102, 59) - Me.GroupBox21.TabIndex = 4 - Me.GroupBox21.TabStop = False - Me.GroupBox21.Text = "Trailer" - ' - 'rbBracketTrailer - ' - Me.rbBracketTrailer.AutoSize = True - Me.rbBracketTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.rbBracketTrailer.Location = New System.Drawing.Point(5, 33) - Me.rbBracketTrailer.Name = "rbBracketTrailer" - Me.rbBracketTrailer.Size = New System.Drawing.Size(61, 17) - Me.rbBracketTrailer.TabIndex = 1 - Me.rbBracketTrailer.TabStop = True - Me.rbBracketTrailer.Text = "[trailer]" - Me.rbBracketTrailer.UseVisualStyleBackColor = True - ' - 'rbDashTrailer - ' - Me.rbDashTrailer.AutoSize = True - Me.rbDashTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.rbDashTrailer.ForeColor = System.Drawing.SystemColors.ControlText - Me.rbDashTrailer.Location = New System.Drawing.Point(5, 17) - Me.rbDashTrailer.Name = "rbDashTrailer" - Me.rbDashTrailer.Size = New System.Drawing.Size(59, 17) - Me.rbDashTrailer.TabIndex = 0 - Me.rbDashTrailer.TabStop = True - Me.rbDashTrailer.Text = "-trailer" - Me.rbDashTrailer.UseVisualStyleBackColor = True - ' - 'GroupBox7 - ' - Me.GroupBox7.Controls.Add(Me.chkMovieNameNFO) - Me.GroupBox7.Controls.Add(Me.chkMovieNFO) - Me.GroupBox7.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox7.Location = New System.Drawing.Point(258, 111) - Me.GroupBox7.Name = "GroupBox7" - Me.GroupBox7.Size = New System.Drawing.Size(102, 59) - Me.GroupBox7.TabIndex = 5 - Me.GroupBox7.TabStop = False - Me.GroupBox7.Text = "NFO" - ' - 'chkMovieNameNFO - ' - Me.chkMovieNameNFO.AutoSize = True - Me.chkMovieNameNFO.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieNameNFO.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkMovieNameNFO.Location = New System.Drawing.Point(6, 34) - Me.chkMovieNameNFO.Name = "chkMovieNameNFO" - Me.chkMovieNameNFO.Size = New System.Drawing.Size(93, 17) - Me.chkMovieNameNFO.TabIndex = 1 - Me.chkMovieNameNFO.Text = ".nfo" - Me.chkMovieNameNFO.UseVisualStyleBackColor = True - ' - 'chkMovieNFO - ' - Me.chkMovieNFO.AutoSize = True - Me.chkMovieNFO.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieNFO.Location = New System.Drawing.Point(6, 18) - Me.chkMovieNFO.Name = "chkMovieNFO" - Me.chkMovieNFO.Size = New System.Drawing.Size(77, 17) - Me.chkMovieNFO.TabIndex = 0 - Me.chkMovieNFO.Text = "movie.nfo" - Me.chkMovieNFO.UseVisualStyleBackColor = True - ' - 'GroupBox6 - ' - Me.GroupBox6.Controls.Add(Me.chkMovieNameDotFanartJPG) - Me.GroupBox6.Controls.Add(Me.chkMovieNameFanartJPG) - Me.GroupBox6.Controls.Add(Me.chkFanartJPG) - Me.GroupBox6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox6.Location = New System.Drawing.Point(6, 111) - Me.GroupBox6.Name = "GroupBox6" - Me.GroupBox6.Size = New System.Drawing.Size(136, 81) - Me.GroupBox6.TabIndex = 3 - Me.GroupBox6.TabStop = False - Me.GroupBox6.Text = "Fanart" - ' - 'chkMovieNameDotFanartJPG - ' - Me.chkMovieNameDotFanartJPG.AutoSize = True - Me.chkMovieNameDotFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieNameDotFanartJPG.Location = New System.Drawing.Point(6, 51) - Me.chkMovieNameDotFanartJPG.Name = "chkMovieNameDotFanartJPG" - Me.chkMovieNameDotFanartJPG.Size = New System.Drawing.Size(126, 17) - Me.chkMovieNameDotFanartJPG.TabIndex = 2 - Me.chkMovieNameDotFanartJPG.Text = ".fanart.jpg" - Me.chkMovieNameDotFanartJPG.UseVisualStyleBackColor = True - ' - 'chkMovieNameFanartJPG - ' - Me.chkMovieNameFanartJPG.AutoSize = True - Me.chkMovieNameFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieNameFanartJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkMovieNameFanartJPG.Location = New System.Drawing.Point(6, 35) - Me.chkMovieNameFanartJPG.Name = "chkMovieNameFanartJPG" - Me.chkMovieNameFanartJPG.Size = New System.Drawing.Size(127, 17) - Me.chkMovieNameFanartJPG.TabIndex = 1 - Me.chkMovieNameFanartJPG.Text = "-fanart.jpg" - Me.chkMovieNameFanartJPG.UseVisualStyleBackColor = True - ' - 'chkFanartJPG - ' - Me.chkFanartJPG.AutoSize = True - Me.chkFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkFanartJPG.Location = New System.Drawing.Point(6, 19) - Me.chkFanartJPG.Name = "chkFanartJPG" - Me.chkFanartJPG.Size = New System.Drawing.Size(77, 17) - Me.chkFanartJPG.TabIndex = 0 - Me.chkFanartJPG.Text = "fanart.jpg" - Me.chkFanartJPG.UseVisualStyleBackColor = True - ' - 'GroupBox5 - ' - Me.GroupBox5.Controls.Add(Me.chkMovieNameDashPosterJPG) - Me.GroupBox5.Controls.Add(Me.chkFolderJPG) - Me.GroupBox5.Controls.Add(Me.chkPosterJPG) - Me.GroupBox5.Controls.Add(Me.chkPosterTBN) - Me.GroupBox5.Controls.Add(Me.chkMovieNameJPG) - Me.GroupBox5.Controls.Add(Me.chkMovieJPG) - Me.GroupBox5.Controls.Add(Me.chkMovieNameTBN) - Me.GroupBox5.Controls.Add(Me.chkMovieTBN) - Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox5.Location = New System.Drawing.Point(6, 17) - Me.GroupBox5.Name = "GroupBox5" - Me.GroupBox5.Size = New System.Drawing.Size(221, 83) - Me.GroupBox5.TabIndex = 0 - Me.GroupBox5.TabStop = False - Me.GroupBox5.Text = "Posters" - ' - 'chkMovieNameDashPosterJPG - ' - Me.chkMovieNameDashPosterJPG.AutoSize = True - Me.chkMovieNameDashPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieNameDashPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkMovieNameDashPosterJPG.Location = New System.Drawing.Point(85, 63) - Me.chkMovieNameDashPosterJPG.Name = "chkMovieNameDashPosterJPG" - Me.chkMovieNameDashPosterJPG.Size = New System.Drawing.Size(129, 17) - Me.chkMovieNameDashPosterJPG.TabIndex = 7 - Me.chkMovieNameDashPosterJPG.Text = "-poster.jpg" - Me.chkMovieNameDashPosterJPG.UseVisualStyleBackColor = True - ' - 'chkFolderJPG - ' - Me.chkFolderJPG.AutoSize = True - Me.chkFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkFolderJPG.Location = New System.Drawing.Point(6, 63) - Me.chkFolderJPG.Name = "chkFolderJPG" - Me.chkFolderJPG.Size = New System.Drawing.Size(77, 17) - Me.chkFolderJPG.TabIndex = 3 - Me.chkFolderJPG.Text = "folder.jpg" - Me.chkFolderJPG.UseVisualStyleBackColor = True - ' - 'chkPosterJPG - ' - Me.chkPosterJPG.AutoSize = True - Me.chkPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkPosterJPG.Location = New System.Drawing.Point(85, 47) - Me.chkPosterJPG.Name = "chkPosterJPG" - Me.chkPosterJPG.Size = New System.Drawing.Size(79, 17) - Me.chkPosterJPG.TabIndex = 6 - Me.chkPosterJPG.Text = "poster.jpg" - Me.chkPosterJPG.UseVisualStyleBackColor = True - ' - 'chkPosterTBN - ' - Me.chkPosterTBN.AutoSize = True - Me.chkPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkPosterTBN.Location = New System.Drawing.Point(6, 47) - Me.chkPosterTBN.Name = "chkPosterTBN" - Me.chkPosterTBN.Size = New System.Drawing.Size(80, 17) - Me.chkPosterTBN.TabIndex = 2 - Me.chkPosterTBN.Text = "poster.tbn" - Me.chkPosterTBN.UseVisualStyleBackColor = True - ' - 'chkMovieNameJPG - ' - Me.chkMovieNameJPG.AutoSize = True - Me.chkMovieNameJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieNameJPG.Location = New System.Drawing.Point(85, 31) - Me.chkMovieNameJPG.Name = "chkMovieNameJPG" - Me.chkMovieNameJPG.Size = New System.Drawing.Size(92, 17) - Me.chkMovieNameJPG.TabIndex = 5 - Me.chkMovieNameJPG.Text = ".jpg" - Me.chkMovieNameJPG.UseVisualStyleBackColor = True - ' - 'chkMovieJPG - ' - Me.chkMovieJPG.AutoSize = True - Me.chkMovieJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieJPG.Location = New System.Drawing.Point(6, 31) - Me.chkMovieJPG.Name = "chkMovieJPG" - Me.chkMovieJPG.Size = New System.Drawing.Size(76, 17) - Me.chkMovieJPG.TabIndex = 1 - Me.chkMovieJPG.Text = "movie.jpg" - Me.chkMovieJPG.UseVisualStyleBackColor = True - ' - 'chkMovieNameTBN - ' - Me.chkMovieNameTBN.AutoSize = True - Me.chkMovieNameTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieNameTBN.Location = New System.Drawing.Point(85, 15) - Me.chkMovieNameTBN.Name = "chkMovieNameTBN" - Me.chkMovieNameTBN.Size = New System.Drawing.Size(93, 17) - Me.chkMovieNameTBN.TabIndex = 4 - Me.chkMovieNameTBN.Text = ".tbn" - Me.chkMovieNameTBN.UseVisualStyleBackColor = True - ' - 'chkMovieTBN - ' - Me.chkMovieTBN.AutoSize = True - Me.chkMovieTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieTBN.Location = New System.Drawing.Point(6, 15) - Me.chkMovieTBN.Name = "chkMovieTBN" - Me.chkMovieTBN.Size = New System.Drawing.Size(77, 17) - Me.chkMovieTBN.TabIndex = 0 - Me.chkMovieTBN.Text = "movie.tbn" - Me.chkMovieTBN.UseVisualStyleBackColor = True - ' - 'lvMovies - ' - Me.lvMovies.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colID, Me.colName, Me.colPath, Me.colRecur, Me.colFolder, Me.colSingle}) - Me.lvMovies.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lvMovies.FullRowSelect = True - Me.lvMovies.HideSelection = False - Me.lvMovies.Location = New System.Drawing.Point(5, 6) - Me.lvMovies.Name = "lvMovies" - Me.lvMovies.Size = New System.Drawing.Size(497, 105) - Me.lvMovies.Sorting = System.Windows.Forms.SortOrder.Ascending - Me.lvMovies.TabIndex = 0 - Me.lvMovies.UseCompatibleStateImageBehavior = False - Me.lvMovies.View = System.Windows.Forms.View.Details - ' - 'colID - ' - Me.colID.Width = 0 - ' - 'colName - ' - Me.colName.Text = "Name" - Me.colName.Width = 75 - ' - 'colPath - ' - Me.colPath.Text = "Path" - Me.colPath.Width = 134 - ' - 'colRecur - ' - Me.colRecur.Text = "Recursive" - Me.colRecur.Width = 78 - ' - 'colFolder - ' - Me.colFolder.Text = "Use Folder Name" - Me.colFolder.Width = 116 - ' - 'colSingle - ' - Me.colSingle.Text = "Single Video" - Me.colSingle.Width = 90 - ' - 'btnMovieRem - ' - Me.btnMovieRem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnMovieRem.Image = CType(resources.GetObject("btnMovieRem.Image"), System.Drawing.Image) - Me.btnMovieRem.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnMovieRem.Location = New System.Drawing.Point(506, 88) - Me.btnMovieRem.Name = "btnMovieRem" - Me.btnMovieRem.Size = New System.Drawing.Size(104, 23) - Me.btnMovieRem.TabIndex = 3 - Me.btnMovieRem.Text = "Remove" - Me.btnMovieRem.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnMovieRem.UseVisualStyleBackColor = True - ' - 'btnMovieAddFolder - ' - Me.btnMovieAddFolder.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnMovieAddFolder.Image = CType(resources.GetObject("btnMovieAddFolder.Image"), System.Drawing.Image) - Me.btnMovieAddFolder.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnMovieAddFolder.Location = New System.Drawing.Point(506, 6) - Me.btnMovieAddFolder.Name = "btnMovieAddFolder" - Me.btnMovieAddFolder.Size = New System.Drawing.Size(104, 23) - Me.btnMovieAddFolder.TabIndex = 1 - Me.btnMovieAddFolder.Text = "Add Source" - Me.btnMovieAddFolder.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnMovieAddFolder.UseVisualStyleBackColor = True - ' - 'GroupBox14 - ' - Me.GroupBox14.Controls.Add(Me.chkPosterOnly) - Me.GroupBox14.Controls.Add(Me.txtPosterWidth) - Me.GroupBox14.Controls.Add(Me.txtPosterHeight) - Me.GroupBox14.Controls.Add(Me.lblPosterQual) - Me.GroupBox14.Controls.Add(Me.tbPosterQual) - Me.GroupBox14.Controls.Add(Me.Label24) - Me.GroupBox14.Controls.Add(Me.Label11) - Me.GroupBox14.Controls.Add(Me.Label12) - Me.GroupBox14.Controls.Add(Me.chkResizePoster) - Me.GroupBox14.Controls.Add(Me.lblPosterSize) - Me.GroupBox14.Controls.Add(Me.cbPosterSize) - Me.GroupBox14.Controls.Add(Me.chkOverwritePoster) - Me.GroupBox14.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox14.Location = New System.Drawing.Point(190, 3) - Me.GroupBox14.Name = "GroupBox14" - Me.GroupBox14.Size = New System.Drawing.Size(218, 170) - Me.GroupBox14.TabIndex = 2 - Me.GroupBox14.TabStop = False - Me.GroupBox14.Text = "Poster" - ' - 'chkPosterOnly - ' - Me.chkPosterOnly.AutoSize = True - Me.chkPosterOnly.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkPosterOnly.Location = New System.Drawing.Point(163, 38) - Me.chkPosterOnly.Name = "chkPosterOnly" - Me.chkPosterOnly.Size = New System.Drawing.Size(50, 17) - Me.chkPosterOnly.TabIndex = 2 - Me.chkPosterOnly.Text = "Only" - Me.chkPosterOnly.UseVisualStyleBackColor = True - ' - 'txtPosterWidth - ' - Me.txtPosterWidth.Enabled = False - Me.txtPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtPosterWidth.Location = New System.Drawing.Point(68, 100) - Me.txtPosterWidth.Name = "txtPosterWidth" - Me.txtPosterWidth.Size = New System.Drawing.Size(40, 22) - Me.txtPosterWidth.TabIndex = 6 - ' - 'txtPosterHeight - ' - Me.txtPosterHeight.Enabled = False - Me.txtPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtPosterHeight.Location = New System.Drawing.Point(175, 100) - Me.txtPosterHeight.Name = "txtPosterHeight" - Me.txtPosterHeight.Size = New System.Drawing.Size(40, 22) - Me.txtPosterHeight.TabIndex = 8 - ' - 'lblPosterQual - ' - Me.lblPosterQual.AutoSize = True - Me.lblPosterQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblPosterQual.Location = New System.Drawing.Point(183, 147) - Me.lblPosterQual.Name = "lblPosterQual" - Me.lblPosterQual.Size = New System.Drawing.Size(29, 17) - Me.lblPosterQual.TabIndex = 11 - Me.lblPosterQual.Text = "100" - ' - 'tbPosterQual - ' - Me.tbPosterQual.AutoSize = False - Me.tbPosterQual.LargeChange = 10 - Me.tbPosterQual.Location = New System.Drawing.Point(7, 139) - Me.tbPosterQual.Maximum = 100 - Me.tbPosterQual.Name = "tbPosterQual" - Me.tbPosterQual.Size = New System.Drawing.Size(179, 27) - Me.tbPosterQual.TabIndex = 10 - Me.tbPosterQual.TickFrequency = 10 - Me.tbPosterQual.Value = 100 - ' - 'Label24 - ' - Me.Label24.AutoSize = True - Me.Label24.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label24.Location = New System.Drawing.Point(3, 127) - Me.Label24.Name = "Label24" - Me.Label24.Size = New System.Drawing.Size(47, 13) - Me.Label24.TabIndex = 9 - Me.Label24.Text = "Quality:" - ' - 'Label11 - ' - Me.Label11.AutoSize = True - Me.Label11.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label11.Location = New System.Drawing.Point(3, 104) - Me.Label11.Name = "Label11" - Me.Label11.Size = New System.Drawing.Size(66, 13) - Me.Label11.TabIndex = 5 - Me.Label11.Text = "Max Width:" - ' - 'Label12 - ' - Me.Label12.AutoSize = True - Me.Label12.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label12.Location = New System.Drawing.Point(106, 104) - Me.Label12.Name = "Label12" - Me.Label12.Size = New System.Drawing.Size(69, 13) - Me.Label12.TabIndex = 7 - Me.Label12.Text = "Max Height:" - ' - 'chkResizePoster - ' - Me.chkResizePoster.AutoSize = True - Me.chkResizePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkResizePoster.Location = New System.Drawing.Point(6, 82) - Me.chkResizePoster.Name = "chkResizePoster" - Me.chkResizePoster.Size = New System.Drawing.Size(133, 17) - Me.chkResizePoster.TabIndex = 4 - Me.chkResizePoster.Text = "Automatically Resize:" - Me.chkResizePoster.UseVisualStyleBackColor = True - ' - 'lblPosterSize - ' - Me.lblPosterSize.AutoSize = True - Me.lblPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblPosterSize.Location = New System.Drawing.Point(4, 18) - Me.lblPosterSize.Name = "lblPosterSize" - Me.lblPosterSize.Size = New System.Drawing.Size(80, 13) - Me.lblPosterSize.TabIndex = 0 - Me.lblPosterSize.Text = "Preferred Size:" - ' - 'cbPosterSize - ' - Me.cbPosterSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbPosterSize.FormattingEnabled = True - Me.cbPosterSize.Location = New System.Drawing.Point(6, 34) - Me.cbPosterSize.Name = "cbPosterSize" - Me.cbPosterSize.Size = New System.Drawing.Size(148, 21) - Me.cbPosterSize.TabIndex = 1 - ' - 'chkOverwritePoster - ' - Me.chkOverwritePoster.AutoSize = True - Me.chkOverwritePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOverwritePoster.Location = New System.Drawing.Point(6, 62) - Me.chkOverwritePoster.Name = "chkOverwritePoster" - Me.chkOverwritePoster.Size = New System.Drawing.Size(119, 17) - Me.chkOverwritePoster.TabIndex = 3 - Me.chkOverwritePoster.Text = "Overwrite Existing" - Me.chkOverwritePoster.UseVisualStyleBackColor = True - ' - 'GroupBox13 - ' - Me.GroupBox13.Controls.Add(Me.txtFanartWidth) - Me.GroupBox13.Controls.Add(Me.txtFanartHeight) - Me.GroupBox13.Controls.Add(Me.chkFanartOnly) - Me.GroupBox13.Controls.Add(Me.lblFanartQual) - Me.GroupBox13.Controls.Add(Me.tbFanartQual) - Me.GroupBox13.Controls.Add(Me.Label26) - Me.GroupBox13.Controls.Add(Me.Label9) - Me.GroupBox13.Controls.Add(Me.Label10) - Me.GroupBox13.Controls.Add(Me.chkResizeFanart) - Me.GroupBox13.Controls.Add(Me.cbFanartSize) - Me.GroupBox13.Controls.Add(Me.lblFanartSize) - Me.GroupBox13.Controls.Add(Me.chkOverwriteFanart) - Me.GroupBox13.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox13.Location = New System.Drawing.Point(190, 185) - Me.GroupBox13.Name = "GroupBox13" - Me.GroupBox13.Size = New System.Drawing.Size(218, 176) - Me.GroupBox13.TabIndex = 3 - Me.GroupBox13.TabStop = False - Me.GroupBox13.Text = "Fanart" - ' - 'txtFanartWidth - ' - Me.txtFanartWidth.Enabled = False - Me.txtFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtFanartWidth.Location = New System.Drawing.Point(69, 100) - Me.txtFanartWidth.Name = "txtFanartWidth" - Me.txtFanartWidth.Size = New System.Drawing.Size(40, 22) - Me.txtFanartWidth.TabIndex = 6 - ' - 'txtFanartHeight - ' - Me.txtFanartHeight.Enabled = False - Me.txtFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtFanartHeight.Location = New System.Drawing.Point(175, 100) - Me.txtFanartHeight.Name = "txtFanartHeight" - Me.txtFanartHeight.Size = New System.Drawing.Size(40, 22) - Me.txtFanartHeight.TabIndex = 8 - ' - 'chkFanartOnly - ' - Me.chkFanartOnly.AutoSize = True - Me.chkFanartOnly.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkFanartOnly.Location = New System.Drawing.Point(163, 38) - Me.chkFanartOnly.Name = "chkFanartOnly" - Me.chkFanartOnly.Size = New System.Drawing.Size(50, 17) - Me.chkFanartOnly.TabIndex = 2 - Me.chkFanartOnly.Text = "Only" - Me.chkFanartOnly.UseVisualStyleBackColor = True - ' - 'lblFanartQual - ' - Me.lblFanartQual.AutoSize = True - Me.lblFanartQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblFanartQual.Location = New System.Drawing.Point(183, 151) - Me.lblFanartQual.Name = "lblFanartQual" - Me.lblFanartQual.Size = New System.Drawing.Size(29, 17) - Me.lblFanartQual.TabIndex = 11 - Me.lblFanartQual.Text = "100" - ' - 'tbFanartQual - ' - Me.tbFanartQual.AutoSize = False - Me.tbFanartQual.LargeChange = 10 - Me.tbFanartQual.Location = New System.Drawing.Point(6, 143) - Me.tbFanartQual.Maximum = 100 - Me.tbFanartQual.Name = "tbFanartQual" - Me.tbFanartQual.Size = New System.Drawing.Size(180, 27) - Me.tbFanartQual.TabIndex = 10 - Me.tbFanartQual.TickFrequency = 10 - Me.tbFanartQual.Value = 100 - ' - 'Label26 - ' - Me.Label26.AutoSize = True - Me.Label26.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label26.Location = New System.Drawing.Point(2, 131) - Me.Label26.Name = "Label26" - Me.Label26.Size = New System.Drawing.Size(47, 13) - Me.Label26.TabIndex = 9 - Me.Label26.Text = "Quality:" - ' - 'Label9 - ' - Me.Label9.AutoSize = True - Me.Label9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label9.Location = New System.Drawing.Point(3, 104) - Me.Label9.Name = "Label9" - Me.Label9.Size = New System.Drawing.Size(66, 13) - Me.Label9.TabIndex = 5 - Me.Label9.Text = "Max Width:" - ' - 'Label10 - ' - Me.Label10.AutoSize = True - Me.Label10.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label10.Location = New System.Drawing.Point(107, 104) - Me.Label10.Name = "Label10" - Me.Label10.Size = New System.Drawing.Size(69, 13) - Me.Label10.TabIndex = 7 - Me.Label10.Text = "Max Height:" - ' - 'chkResizeFanart - ' - Me.chkResizeFanart.AutoSize = True - Me.chkResizeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkResizeFanart.Location = New System.Drawing.Point(6, 82) - Me.chkResizeFanart.Name = "chkResizeFanart" - Me.chkResizeFanart.Size = New System.Drawing.Size(133, 17) - Me.chkResizeFanart.TabIndex = 4 - Me.chkResizeFanart.Text = "Automatically Resize:" - Me.chkResizeFanart.UseVisualStyleBackColor = True - ' - 'cbFanartSize - ' - Me.cbFanartSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbFanartSize.FormattingEnabled = True - Me.cbFanartSize.Location = New System.Drawing.Point(6, 34) - Me.cbFanartSize.Name = "cbFanartSize" - Me.cbFanartSize.Size = New System.Drawing.Size(148, 21) - Me.cbFanartSize.TabIndex = 1 - ' - 'lblFanartSize - ' - Me.lblFanartSize.AutoSize = True - Me.lblFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblFanartSize.Location = New System.Drawing.Point(4, 18) - Me.lblFanartSize.Name = "lblFanartSize" - Me.lblFanartSize.Size = New System.Drawing.Size(80, 13) - Me.lblFanartSize.TabIndex = 0 - Me.lblFanartSize.Text = "Preferred Size:" - ' - 'chkOverwriteFanart - ' - Me.chkOverwriteFanart.AutoSize = True - Me.chkOverwriteFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOverwriteFanart.Location = New System.Drawing.Point(6, 62) - Me.chkOverwriteFanart.Name = "chkOverwriteFanart" - Me.chkOverwriteFanart.Size = New System.Drawing.Size(119, 17) - Me.chkOverwriteFanart.TabIndex = 3 - Me.chkOverwriteFanart.Text = "Overwrite Existing" - Me.chkOverwriteFanart.UseVisualStyleBackColor = True - ' - 'GroupBox9 - ' - Me.GroupBox9.Controls.Add(Me.chkActorCache) - Me.GroupBox9.Controls.Add(Me.chkNoSaveImagesToNfo) - Me.GroupBox9.Controls.Add(Me.chkSingleScrapeImages) - Me.GroupBox9.Controls.Add(Me.GroupBox17) - Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox9.Location = New System.Drawing.Point(3, 3) - Me.GroupBox9.Name = "GroupBox9" - Me.GroupBox9.Size = New System.Drawing.Size(184, 168) - Me.GroupBox9.TabIndex = 0 - Me.GroupBox9.TabStop = False - Me.GroupBox9.Text = "Images" - ' - 'chkActorCache - ' - Me.chkActorCache.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkActorCache.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkActorCache.Location = New System.Drawing.Point(6, 35) - Me.chkActorCache.Name = "chkActorCache" - Me.chkActorCache.Size = New System.Drawing.Size(173, 19) - Me.chkActorCache.TabIndex = 1 - Me.chkActorCache.Text = "Enable Actors Cache" - Me.chkActorCache.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkActorCache.UseVisualStyleBackColor = True - ' - 'chkNoSaveImagesToNfo - ' - Me.chkNoSaveImagesToNfo.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkNoSaveImagesToNfo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkNoSaveImagesToNfo.Location = New System.Drawing.Point(6, 53) - Me.chkNoSaveImagesToNfo.Name = "chkNoSaveImagesToNfo" - Me.chkNoSaveImagesToNfo.Size = New System.Drawing.Size(172, 34) - Me.chkNoSaveImagesToNfo.TabIndex = 2 - Me.chkNoSaveImagesToNfo.Text = "Do Not Save Image URLs to Nfo" - Me.chkNoSaveImagesToNfo.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkNoSaveImagesToNfo.UseVisualStyleBackColor = True - ' - 'chkSingleScrapeImages - ' - Me.chkSingleScrapeImages.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkSingleScrapeImages.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSingleScrapeImages.Location = New System.Drawing.Point(6, 16) - Me.chkSingleScrapeImages.Name = "chkSingleScrapeImages" - Me.chkSingleScrapeImages.Size = New System.Drawing.Size(173, 19) - Me.chkSingleScrapeImages.TabIndex = 0 - Me.chkSingleScrapeImages.Text = "Get on Single Scrape" - Me.chkSingleScrapeImages.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkSingleScrapeImages.UseVisualStyleBackColor = True - ' - 'GroupBox17 - ' - Me.GroupBox17.Controls.Add(Me.chkUseImgCacheUpdaters) - Me.GroupBox17.Controls.Add(Me.chkPersistImgCache) - Me.GroupBox17.Controls.Add(Me.chkUseImgCache) - Me.GroupBox17.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox17.Location = New System.Drawing.Point(4, 84) - Me.GroupBox17.Name = "GroupBox17" - Me.GroupBox17.Size = New System.Drawing.Size(176, 79) - Me.GroupBox17.TabIndex = 3 - Me.GroupBox17.TabStop = False - Me.GroupBox17.Text = "Caching" - ' - 'chkUseImgCacheUpdaters - ' - Me.chkUseImgCacheUpdaters.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkUseImgCacheUpdaters.Enabled = False - Me.chkUseImgCacheUpdaters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkUseImgCacheUpdaters.Location = New System.Drawing.Point(20, 35) - Me.chkUseImgCacheUpdaters.Name = "chkUseImgCacheUpdaters" - Me.chkUseImgCacheUpdaters.Size = New System.Drawing.Size(155, 18) - Me.chkUseImgCacheUpdaters.TabIndex = 1 - Me.chkUseImgCacheUpdaters.Text = "Use Cache for Scrapers" - Me.chkUseImgCacheUpdaters.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkUseImgCacheUpdaters.UseVisualStyleBackColor = True - ' - 'chkPersistImgCache - ' - Me.chkPersistImgCache.AutoSize = True - Me.chkPersistImgCache.Enabled = False - Me.chkPersistImgCache.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkPersistImgCache.Location = New System.Drawing.Point(20, 58) - Me.chkPersistImgCache.Name = "chkPersistImgCache" - Me.chkPersistImgCache.Size = New System.Drawing.Size(144, 17) - Me.chkPersistImgCache.TabIndex = 2 - Me.chkPersistImgCache.Text = "Persistent Image Cache" - Me.chkPersistImgCache.UseVisualStyleBackColor = True - ' - 'chkUseImgCache - ' - Me.chkUseImgCache.AutoSize = True - Me.chkUseImgCache.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkUseImgCache.Location = New System.Drawing.Point(7, 16) - Me.chkUseImgCache.Name = "chkUseImgCache" - Me.chkUseImgCache.Size = New System.Drawing.Size(113, 17) - Me.chkUseImgCache.TabIndex = 0 - Me.chkUseImgCache.Text = "Use Image Cache" - Me.chkUseImgCache.UseVisualStyleBackColor = True - ' - 'chkUseETasFA - ' - Me.chkUseETasFA.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkUseETasFA.Enabled = False - Me.chkUseETasFA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkUseETasFA.Location = New System.Drawing.Point(25, 84) - Me.chkUseETasFA.Name = "chkUseETasFA" - Me.chkUseETasFA.Size = New System.Drawing.Size(171, 30) - Me.chkUseETasFA.TabIndex = 4 - Me.chkUseETasFA.Text = "Use if no Fanart Found" - Me.chkUseETasFA.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkUseETasFA.UseVisualStyleBackColor = True - ' - 'chkNoSpoilers - ' - Me.chkNoSpoilers.AutoSize = True - Me.chkNoSpoilers.Enabled = False - Me.chkNoSpoilers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkNoSpoilers.Location = New System.Drawing.Point(25, 67) - Me.chkNoSpoilers.Name = "chkNoSpoilers" - Me.chkNoSpoilers.Size = New System.Drawing.Size(85, 17) - Me.chkNoSpoilers.TabIndex = 3 - Me.chkNoSpoilers.Text = "No Spoilers" - Me.chkNoSpoilers.UseVisualStyleBackColor = True - ' - 'Label15 - ' - Me.Label15.AutoSize = True - Me.Label15.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label15.Location = New System.Drawing.Point(22, 50) - Me.Label15.Name = "Label15" - Me.Label15.Size = New System.Drawing.Size(102, 13) - Me.Label15.TabIndex = 1 - Me.Label15.Text = "Number To Create:" - ' - 'txtAutoThumbs - ' - Me.txtAutoThumbs.Enabled = False - Me.txtAutoThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtAutoThumbs.Location = New System.Drawing.Point(124, 47) - Me.txtAutoThumbs.Name = "txtAutoThumbs" - Me.txtAutoThumbs.Size = New System.Drawing.Size(53, 22) - Me.txtAutoThumbs.TabIndex = 2 - ' - 'chkAutoThumbs - ' - Me.chkAutoThumbs.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkAutoThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkAutoThumbs.Location = New System.Drawing.Point(6, 17) - Me.chkAutoThumbs.Name = "chkAutoThumbs" - Me.chkAutoThumbs.Size = New System.Drawing.Size(188, 30) - Me.chkAutoThumbs.TabIndex = 0 - Me.chkAutoThumbs.Text = "Extract During Scrapers" - Me.chkAutoThumbs.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkAutoThumbs.UseVisualStyleBackColor = True - ' - 'btnOK - ' - Me.btnOK.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnOK.Location = New System.Drawing.Point(813, 601) - Me.btnOK.Name = "btnOK" - Me.btnOK.Size = New System.Drawing.Size(75, 23) - Me.btnOK.TabIndex = 0 - Me.btnOK.Text = "OK" - Me.btnOK.UseVisualStyleBackColor = True - ' - 'btnApply - ' - Me.btnApply.Enabled = False - Me.btnApply.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnApply.Location = New System.Drawing.Point(650, 601) - Me.btnApply.Name = "btnApply" - Me.btnApply.Size = New System.Drawing.Size(75, 23) - Me.btnApply.TabIndex = 2 - Me.btnApply.Text = "Apply" - Me.btnApply.UseVisualStyleBackColor = True - ' - 'btnCancel - ' - Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.btnCancel.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnCancel.Location = New System.Drawing.Point(732, 601) - Me.btnCancel.Name = "btnCancel" - Me.btnCancel.Size = New System.Drawing.Size(75, 23) - Me.btnCancel.TabIndex = 1 - Me.btnCancel.Text = "Cancel" - Me.btnCancel.UseVisualStyleBackColor = True - ' - 'pnlTop - ' - Me.pnlTop.BackColor = System.Drawing.Color.SteelBlue - Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlTop.Controls.Add(Me.Label2) - Me.pnlTop.Controls.Add(Me.Label4) - Me.pnlTop.Controls.Add(Me.PictureBox1) - Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top - Me.pnlTop.Location = New System.Drawing.Point(0, 0) - Me.pnlTop.Name = "pnlTop" - Me.pnlTop.Size = New System.Drawing.Size(892, 64) - Me.pnlTop.TabIndex = 3 - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.BackColor = System.Drawing.Color.Transparent - Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label2.ForeColor = System.Drawing.Color.White - Me.Label2.Location = New System.Drawing.Point(61, 38) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(246, 13) - Me.Label2.TabIndex = 1 - Me.Label2.Text = "Configure Ember's appearance and operation." - ' - 'Label4 - ' - Me.Label4.AutoSize = True - Me.Label4.BackColor = System.Drawing.Color.Transparent - Me.Label4.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label4.ForeColor = System.Drawing.Color.White - Me.Label4.Location = New System.Drawing.Point(58, 3) - Me.Label4.Name = "Label4" - Me.Label4.Size = New System.Drawing.Size(107, 32) - Me.Label4.TabIndex = 0 - Me.Label4.Text = "Settings" - ' - 'PictureBox1 - ' - Me.PictureBox1.BackColor = System.Drawing.Color.Transparent - Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) - Me.PictureBox1.Location = New System.Drawing.Point(7, 8) - Me.PictureBox1.Name = "PictureBox1" - Me.PictureBox1.Size = New System.Drawing.Size(48, 48) - Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.PictureBox1.TabIndex = 0 - Me.PictureBox1.TabStop = False - ' - 'ilSettings - ' - Me.ilSettings.ImageStream = CType(resources.GetObject("ilSettings.ImageStream"), System.Windows.Forms.ImageListStreamer) - Me.ilSettings.TransparentColor = System.Drawing.Color.Transparent - Me.ilSettings.Images.SetKeyName(0, "process.png") - Me.ilSettings.Images.SetKeyName(1, "comments.png") - Me.ilSettings.Images.SetKeyName(2, "film.png") - Me.ilSettings.Images.SetKeyName(3, "copy_paste.png") - Me.ilSettings.Images.SetKeyName(4, "attachment.png") - Me.ilSettings.Images.SetKeyName(5, "folder_full.png") - Me.ilSettings.Images.SetKeyName(6, "image.png") - Me.ilSettings.Images.SetKeyName(7, "television.ico") - Me.ilSettings.Images.SetKeyName(8, "favorite_film.png") - Me.ilSettings.Images.SetKeyName(9, "settingscheck.png") - Me.ilSettings.Images.SetKeyName(10, "settingsx.png") - ' - 'tvSettings - ' - Me.tvSettings.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.tvSettings.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.tvSettings.FullRowSelect = True - Me.tvSettings.HideSelection = False - Me.tvSettings.ImageIndex = 0 - Me.tvSettings.ImageList = Me.ilSettings - Me.tvSettings.Location = New System.Drawing.Point(5, 147) - Me.tvSettings.Name = "tvSettings" - Me.tvSettings.SelectedImageIndex = 0 - Me.tvSettings.ShowLines = False - Me.tvSettings.ShowPlusMinus = False - Me.tvSettings.Size = New System.Drawing.Size(242, 402) - Me.tvSettings.TabIndex = 7 - ' - 'pnlGeneral - ' - Me.pnlGeneral.BackColor = System.Drawing.Color.White - Me.pnlGeneral.Controls.Add(Me.gbInterface) - Me.pnlGeneral.Controls.Add(Me.GroupBox4) - Me.pnlGeneral.Location = New System.Drawing.Point(1322, 535) - Me.pnlGeneral.Name = "pnlGeneral" - Me.pnlGeneral.Size = New System.Drawing.Size(617, 400) - Me.pnlGeneral.TabIndex = 10 - Me.pnlGeneral.Visible = False - ' - 'gbInterface - ' - Me.gbInterface.Controls.Add(Me.GroupBox29) - Me.gbInterface.Controls.Add(Me.Label32) - Me.gbInterface.Controls.Add(Me.cbIntLang) - Me.gbInterface.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbInterface.Location = New System.Drawing.Point(7, 3) - Me.gbInterface.Name = "gbInterface" - Me.gbInterface.Size = New System.Drawing.Size(196, 344) - Me.gbInterface.TabIndex = 0 - Me.gbInterface.TabStop = False - Me.gbInterface.Text = "Interface" - ' - 'pnlXBMCCom - ' - Me.pnlXBMCCom.BackColor = System.Drawing.Color.White - Me.pnlXBMCCom.Controls.Add(Me.gbProxy) - Me.pnlXBMCCom.Location = New System.Drawing.Point(766, 722) - Me.pnlXBMCCom.Name = "pnlXBMCCom" - Me.pnlXBMCCom.Size = New System.Drawing.Size(617, 400) - Me.pnlXBMCCom.TabIndex = 18 - Me.pnlXBMCCom.Visible = False - ' - 'gbProxy - ' - Me.gbProxy.Controls.Add(Me.gbCreds) - Me.gbProxy.Controls.Add(Me.lblProxyPort) - Me.gbProxy.Controls.Add(Me.lblProxyURI) - Me.gbProxy.Controls.Add(Me.txtProxyPort) - Me.gbProxy.Controls.Add(Me.txtProxyURI) - Me.gbProxy.Controls.Add(Me.chkEnableProxy) - Me.gbProxy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbProxy.Location = New System.Drawing.Point(3, 6) - Me.gbProxy.Name = "gbProxy" - Me.gbProxy.Size = New System.Drawing.Size(290, 230) - Me.gbProxy.TabIndex = 0 - Me.gbProxy.TabStop = False - Me.gbProxy.Text = "Proxy" - ' - 'gbCreds - ' - Me.gbCreds.Controls.Add(Me.txtProxyDomain) - Me.gbCreds.Controls.Add(Me.lblProxyDomain) - Me.gbCreds.Controls.Add(Me.txtProxyPassword) - Me.gbCreds.Controls.Add(Me.txtProxyUsername) - Me.gbCreds.Controls.Add(Me.lblProxyUN) - Me.gbCreds.Controls.Add(Me.lblProxyPW) - Me.gbCreds.Controls.Add(Me.chkEnableCredentials) - Me.gbCreds.Enabled = False - Me.gbCreds.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbCreds.Location = New System.Drawing.Point(5, 115) - Me.gbCreds.Name = "gbCreds" - Me.gbCreds.Size = New System.Drawing.Size(279, 103) - Me.gbCreds.TabIndex = 5 - Me.gbCreds.TabStop = False - Me.gbCreds.Text = "Credentials" - ' - 'txtProxyDomain - ' - Me.txtProxyDomain.Enabled = False - Me.txtProxyDomain.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtProxyDomain.Location = New System.Drawing.Point(64, 69) - Me.txtProxyDomain.Name = "txtProxyDomain" - Me.txtProxyDomain.Size = New System.Drawing.Size(209, 22) - Me.txtProxyDomain.TabIndex = 6 - ' - 'lblProxyDomain - ' - Me.lblProxyDomain.AutoSize = True - Me.lblProxyDomain.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblProxyDomain.Location = New System.Drawing.Point(14, 72) - Me.lblProxyDomain.Name = "lblProxyDomain" - Me.lblProxyDomain.Size = New System.Drawing.Size(50, 13) - Me.lblProxyDomain.TabIndex = 5 - Me.lblProxyDomain.Text = "Domain:" - ' - 'txtProxyPassword - ' - Me.txtProxyPassword.Enabled = False - Me.txtProxyPassword.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtProxyPassword.Location = New System.Drawing.Point(201, 39) - Me.txtProxyPassword.Name = "txtProxyPassword" - Me.txtProxyPassword.Size = New System.Drawing.Size(72, 22) - Me.txtProxyPassword.TabIndex = 4 - Me.txtProxyPassword.UseSystemPasswordChar = True - ' - 'txtProxyUsername - ' - Me.txtProxyUsername.Enabled = False - Me.txtProxyUsername.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtProxyUsername.Location = New System.Drawing.Point(64, 39) - Me.txtProxyUsername.Name = "txtProxyUsername" - Me.txtProxyUsername.Size = New System.Drawing.Size(72, 22) - Me.txtProxyUsername.TabIndex = 2 - ' - 'lblProxyUN - ' - Me.lblProxyUN.AutoSize = True - Me.lblProxyUN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblProxyUN.Location = New System.Drawing.Point(3, 42) - Me.lblProxyUN.Name = "lblProxyUN" - Me.lblProxyUN.Size = New System.Drawing.Size(61, 13) - Me.lblProxyUN.TabIndex = 1 - Me.lblProxyUN.Text = "Username:" - ' - 'lblProxyPW - ' - Me.lblProxyPW.AutoSize = True - Me.lblProxyPW.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblProxyPW.Location = New System.Drawing.Point(143, 42) - Me.lblProxyPW.Name = "lblProxyPW" - Me.lblProxyPW.Size = New System.Drawing.Size(59, 13) - Me.lblProxyPW.TabIndex = 3 - Me.lblProxyPW.Text = "Password:" - ' - 'chkEnableCredentials - ' - Me.chkEnableCredentials.AutoSize = True - Me.chkEnableCredentials.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEnableCredentials.Location = New System.Drawing.Point(8, 17) - Me.chkEnableCredentials.Name = "chkEnableCredentials" - Me.chkEnableCredentials.Size = New System.Drawing.Size(122, 17) - Me.chkEnableCredentials.TabIndex = 0 - Me.chkEnableCredentials.Text = "Enable Credentials" - Me.chkEnableCredentials.UseVisualStyleBackColor = True - ' - 'lblProxyPort - ' - Me.lblProxyPort.AutoSize = True - Me.lblProxyPort.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblProxyPort.Location = New System.Drawing.Point(9, 88) - Me.lblProxyPort.Name = "lblProxyPort" - Me.lblProxyPort.Size = New System.Drawing.Size(61, 13) - Me.lblProxyPort.TabIndex = 3 - Me.lblProxyPort.Text = "Proxy Port:" - ' - 'lblProxyURI - ' - Me.lblProxyURI.AutoSize = True - Me.lblProxyURI.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblProxyURI.Location = New System.Drawing.Point(9, 39) - Me.lblProxyURI.Name = "lblProxyURI" - Me.lblProxyURI.Size = New System.Drawing.Size(58, 13) - Me.lblProxyURI.TabIndex = 1 - Me.lblProxyURI.Text = "Proxy URI:" - ' - 'txtProxyPort - ' - Me.txtProxyPort.Enabled = False - Me.txtProxyPort.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtProxyPort.Location = New System.Drawing.Point(72, 84) - Me.txtProxyPort.Name = "txtProxyPort" - Me.txtProxyPort.Size = New System.Drawing.Size(51, 22) - Me.txtProxyPort.TabIndex = 4 - ' - 'txtProxyURI - ' - Me.txtProxyURI.Enabled = False - Me.txtProxyURI.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtProxyURI.Location = New System.Drawing.Point(11, 54) - Me.txtProxyURI.Name = "txtProxyURI" - Me.txtProxyURI.Size = New System.Drawing.Size(267, 22) - Me.txtProxyURI.TabIndex = 2 - ' - 'chkEnableProxy - ' - Me.chkEnableProxy.AutoSize = True - Me.chkEnableProxy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEnableProxy.Location = New System.Drawing.Point(11, 17) - Me.chkEnableProxy.Name = "chkEnableProxy" - Me.chkEnableProxy.Size = New System.Drawing.Size(91, 17) - Me.chkEnableProxy.TabIndex = 0 - Me.chkEnableProxy.Text = "Enable Proxy" - Me.chkEnableProxy.UseVisualStyleBackColor = True - ' - 'pnlMovies - ' - Me.pnlMovies.BackColor = System.Drawing.Color.White - Me.pnlMovies.Controls.Add(Me.gbGenreFilter) - Me.pnlMovies.Controls.Add(Me.gbFilters) - Me.pnlMovies.Controls.Add(Me.GroupBox27) - Me.pnlMovies.Controls.Add(Me.GroupBox12) - Me.pnlMovies.Controls.Add(Me.GroupBox2) - Me.pnlMovies.Location = New System.Drawing.Point(997, 642) - Me.pnlMovies.Name = "pnlMovies" - Me.pnlMovies.Size = New System.Drawing.Size(617, 400) - Me.pnlMovies.TabIndex = 15 - Me.pnlMovies.Visible = False - ' - 'gbGenreFilter - ' - Me.gbGenreFilter.Controls.Add(Me.lbGenre) - Me.gbGenreFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbGenreFilter.Location = New System.Drawing.Point(428, 209) - Me.gbGenreFilter.Name = "gbGenreFilter" - Me.gbGenreFilter.Size = New System.Drawing.Size(183, 151) - Me.gbGenreFilter.TabIndex = 7 - Me.gbGenreFilter.TabStop = False - Me.gbGenreFilter.Text = "Genre Language Filter" - ' - 'gbFilters - ' - Me.gbFilters.Controls.Add(Me.btnResetMovieFilters) - Me.gbFilters.Controls.Add(Me.btnDown) - Me.gbFilters.Controls.Add(Me.btnUp) - Me.gbFilters.Controls.Add(Me.chkProperCase) - Me.gbFilters.Controls.Add(Me.btnRemoveFilter) - Me.gbFilters.Controls.Add(Me.btnAddFilter) - Me.gbFilters.Controls.Add(Me.txtFilter) - Me.gbFilters.Controls.Add(Me.lstFilters) - Me.gbFilters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbFilters.Location = New System.Drawing.Point(229, 7) - Me.gbFilters.Name = "gbFilters" - Me.gbFilters.Size = New System.Drawing.Size(382, 200) - Me.gbFilters.TabIndex = 6 - Me.gbFilters.TabStop = False - Me.gbFilters.Text = "Folder/File Name Filters" - ' - 'btnResetMovieFilters - ' - Me.btnResetMovieFilters.Image = CType(resources.GetObject("btnResetMovieFilters.Image"), System.Drawing.Image) - Me.btnResetMovieFilters.Location = New System.Drawing.Point(355, 11) - Me.btnResetMovieFilters.Name = "btnResetMovieFilters" - Me.btnResetMovieFilters.Size = New System.Drawing.Size(23, 23) - Me.btnResetMovieFilters.TabIndex = 8 - Me.btnResetMovieFilters.UseVisualStyleBackColor = True - ' - 'btnDown - ' - Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) - Me.btnDown.Location = New System.Drawing.Point(313, 172) - Me.btnDown.Name = "btnDown" - Me.btnDown.Size = New System.Drawing.Size(23, 23) - Me.btnDown.TabIndex = 5 - Me.btnDown.UseVisualStyleBackColor = True - ' - 'btnUp - ' - Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) - Me.btnUp.Location = New System.Drawing.Point(289, 172) - Me.btnUp.Name = "btnUp" - Me.btnUp.Size = New System.Drawing.Size(23, 23) - Me.btnUp.TabIndex = 4 - Me.btnUp.UseVisualStyleBackColor = True - ' - 'chkProperCase - ' - Me.chkProperCase.AutoSize = True - Me.chkProperCase.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkProperCase.Location = New System.Drawing.Point(6, 16) - Me.chkProperCase.Name = "chkProperCase" - Me.chkProperCase.Size = New System.Drawing.Size(181, 17) - Me.chkProperCase.TabIndex = 0 - Me.chkProperCase.Text = "Convert Names to Proper Case" - Me.chkProperCase.UseVisualStyleBackColor = True - ' - 'btnRemoveFilter - ' - Me.btnRemoveFilter.Image = CType(resources.GetObject("btnRemoveFilter.Image"), System.Drawing.Image) - Me.btnRemoveFilter.Location = New System.Drawing.Point(354, 172) - Me.btnRemoveFilter.Name = "btnRemoveFilter" - Me.btnRemoveFilter.Size = New System.Drawing.Size(23, 23) - Me.btnRemoveFilter.TabIndex = 6 - Me.btnRemoveFilter.UseVisualStyleBackColor = True - ' - 'btnAddFilter - ' - Me.btnAddFilter.Image = CType(resources.GetObject("btnAddFilter.Image"), System.Drawing.Image) - Me.btnAddFilter.Location = New System.Drawing.Point(247, 172) - Me.btnAddFilter.Name = "btnAddFilter" - Me.btnAddFilter.Size = New System.Drawing.Size(23, 23) - Me.btnAddFilter.TabIndex = 3 - Me.btnAddFilter.UseVisualStyleBackColor = True - ' - 'txtFilter - ' - Me.txtFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtFilter.Location = New System.Drawing.Point(6, 173) - Me.txtFilter.Name = "txtFilter" - Me.txtFilter.Size = New System.Drawing.Size(239, 22) - Me.txtFilter.TabIndex = 2 - ' - 'lstFilters - ' - Me.lstFilters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lstFilters.FormattingEnabled = True - Me.lstFilters.Location = New System.Drawing.Point(6, 36) - Me.lstFilters.Name = "lstFilters" - Me.lstFilters.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.lstFilters.Size = New System.Drawing.Size(371, 121) - Me.lstFilters.TabIndex = 1 - ' - 'GroupBox27 - ' - Me.GroupBox27.Controls.Add(Me.chkMissingExtra) - Me.GroupBox27.Controls.Add(Me.chkMissingSubs) - Me.GroupBox27.Controls.Add(Me.chkMissingTrailer) - Me.GroupBox27.Controls.Add(Me.chkMissingNFO) - Me.GroupBox27.Controls.Add(Me.chkMissingFanart) - Me.GroupBox27.Controls.Add(Me.chkMissingPoster) - Me.GroupBox27.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox27.Location = New System.Drawing.Point(229, 209) - Me.GroupBox27.Name = "GroupBox27" - Me.GroupBox27.Size = New System.Drawing.Size(185, 123) - Me.GroupBox27.TabIndex = 5 - Me.GroupBox27.TabStop = False - Me.GroupBox27.Text = "Missing Items Filter" - ' - 'chkMissingExtra - ' - Me.chkMissingExtra.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMissingExtra.Location = New System.Drawing.Point(8, 98) - Me.chkMissingExtra.Name = "chkMissingExtra" - Me.chkMissingExtra.Size = New System.Drawing.Size(174, 17) - Me.chkMissingExtra.TabIndex = 11 - Me.chkMissingExtra.Text = "Check for Extrathumbs" - Me.chkMissingExtra.UseVisualStyleBackColor = True - ' - 'chkMissingSubs - ' - Me.chkMissingSubs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMissingSubs.Location = New System.Drawing.Point(8, 82) - Me.chkMissingSubs.Name = "chkMissingSubs" - Me.chkMissingSubs.Size = New System.Drawing.Size(174, 17) - Me.chkMissingSubs.TabIndex = 10 - Me.chkMissingSubs.Text = "Check for Subs" - Me.chkMissingSubs.UseVisualStyleBackColor = True - ' - 'chkMissingTrailer - ' - Me.chkMissingTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMissingTrailer.Location = New System.Drawing.Point(8, 66) - Me.chkMissingTrailer.Name = "chkMissingTrailer" - Me.chkMissingTrailer.Size = New System.Drawing.Size(174, 17) - Me.chkMissingTrailer.TabIndex = 9 - Me.chkMissingTrailer.Text = "Check for Trailer" - Me.chkMissingTrailer.UseVisualStyleBackColor = True - ' - 'chkMissingNFO - ' - Me.chkMissingNFO.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMissingNFO.Location = New System.Drawing.Point(8, 50) - Me.chkMissingNFO.Name = "chkMissingNFO" - Me.chkMissingNFO.Size = New System.Drawing.Size(174, 17) - Me.chkMissingNFO.TabIndex = 8 - Me.chkMissingNFO.Text = "Check for NFO" - Me.chkMissingNFO.UseVisualStyleBackColor = True - ' - 'chkMissingFanart - ' - Me.chkMissingFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMissingFanart.Location = New System.Drawing.Point(8, 34) - Me.chkMissingFanart.Name = "chkMissingFanart" - Me.chkMissingFanart.Size = New System.Drawing.Size(174, 17) - Me.chkMissingFanart.TabIndex = 7 - Me.chkMissingFanart.Text = "Check for Fanart" - Me.chkMissingFanart.UseVisualStyleBackColor = True - ' - 'chkMissingPoster - ' - Me.chkMissingPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMissingPoster.Location = New System.Drawing.Point(8, 18) - Me.chkMissingPoster.Name = "chkMissingPoster" - Me.chkMissingPoster.Size = New System.Drawing.Size(174, 17) - Me.chkMissingPoster.TabIndex = 6 - Me.chkMissingPoster.Text = "Check for Poster" - Me.chkMissingPoster.UseVisualStyleBackColor = True - ' - 'GroupBox16 - ' - Me.GroupBox16.Controls.Add(Me.chkAutoBD) - Me.GroupBox16.Controls.Add(Me.btnBrowse) - Me.GroupBox16.Controls.Add(Me.txtBDPath) - Me.GroupBox16.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox16.Location = New System.Drawing.Point(243, 315) - Me.GroupBox16.Name = "GroupBox16" - Me.GroupBox16.Size = New System.Drawing.Size(366, 69) - Me.GroupBox16.TabIndex = 6 - Me.GroupBox16.TabStop = False - Me.GroupBox16.Text = "Backdrops Folder" - ' - 'chkAutoBD - ' - Me.chkAutoBD.AutoSize = True - Me.chkAutoBD.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkAutoBD.Location = New System.Drawing.Point(12, 46) - Me.chkAutoBD.Name = "chkAutoBD" - Me.chkAutoBD.Size = New System.Drawing.Size(265, 17) - Me.chkAutoBD.TabIndex = 2 - Me.chkAutoBD.Text = "Automatically Save Fanart To Backdrops Folder" - Me.chkAutoBD.UseVisualStyleBackColor = True - ' - 'btnBrowse - ' - Me.btnBrowse.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnBrowse.Location = New System.Drawing.Point(336, 15) - Me.btnBrowse.Name = "btnBrowse" - Me.btnBrowse.Size = New System.Drawing.Size(25, 23) - Me.btnBrowse.TabIndex = 1 - Me.btnBrowse.Text = "..." - Me.btnBrowse.UseVisualStyleBackColor = True - ' - 'txtBDPath - ' - Me.txtBDPath.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtBDPath.Location = New System.Drawing.Point(7, 17) - Me.txtBDPath.Name = "txtBDPath" - Me.txtBDPath.Size = New System.Drawing.Size(323, 22) - Me.txtBDPath.TabIndex = 0 - ' - 'lblCurrent - ' - Me.lblCurrent.BackColor = System.Drawing.Color.SteelBlue - Me.lblCurrent.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblCurrent.ForeColor = System.Drawing.Color.White - Me.lblCurrent.Location = New System.Drawing.Point(26, -1) - Me.lblCurrent.Name = "lblCurrent" - Me.lblCurrent.Size = New System.Drawing.Size(489, 25) - Me.lblCurrent.TabIndex = 0 - Me.lblCurrent.Text = "General" - ' - 'pnlCurrent - ' - Me.pnlCurrent.BackColor = System.Drawing.Color.SteelBlue - Me.pnlCurrent.Location = New System.Drawing.Point(516, 119) - Me.pnlCurrent.Name = "pnlCurrent" - Me.pnlCurrent.Size = New System.Drawing.Size(371, 25) - Me.pnlCurrent.TabIndex = 6 - ' - 'Panel1 - ' - Me.Panel1.BackColor = System.Drawing.Color.SteelBlue - Me.Panel1.Controls.Add(Me.pbCurrent) - Me.Panel1.Controls.Add(Me.lblCurrent) - Me.Panel1.Location = New System.Drawing.Point(5, 119) - Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(515, 25) - Me.Panel1.TabIndex = 5 - ' - 'pbCurrent - ' - Me.pbCurrent.Location = New System.Drawing.Point(2, 0) - Me.pbCurrent.Name = "pbCurrent" - Me.pbCurrent.Size = New System.Drawing.Size(24, 24) - Me.pbCurrent.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbCurrent.TabIndex = 2 - Me.pbCurrent.TabStop = False - ' - 'pnlExtensions - ' - Me.pnlExtensions.BackColor = System.Drawing.Color.White - Me.pnlExtensions.Controls.Add(Me.GroupBox22) - Me.pnlExtensions.Controls.Add(Me.GroupBox3) - Me.pnlExtensions.Controls.Add(Me.GroupBox18) - Me.pnlExtensions.Location = New System.Drawing.Point(855, 706) - Me.pnlExtensions.Name = "pnlExtensions" - Me.pnlExtensions.Size = New System.Drawing.Size(617, 400) - Me.pnlExtensions.TabIndex = 17 - Me.pnlExtensions.Visible = False - ' - 'GroupBox22 - ' - Me.GroupBox22.Controls.Add(Me.btnRemoveNoStack) - Me.GroupBox22.Controls.Add(Me.btnAddNoStack) - Me.GroupBox22.Controls.Add(Me.txtNoStack) - Me.GroupBox22.Controls.Add(Me.lstNoStack) - Me.GroupBox22.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox22.Location = New System.Drawing.Point(202, 6) - Me.GroupBox22.Name = "GroupBox22" - Me.GroupBox22.Size = New System.Drawing.Size(194, 199) - Me.GroupBox22.TabIndex = 1 - Me.GroupBox22.TabStop = False - Me.GroupBox22.Text = "No Stack Extensions" - ' - 'btnRemoveNoStack - ' - Me.btnRemoveNoStack.Image = CType(resources.GetObject("btnRemoveNoStack.Image"), System.Drawing.Image) - Me.btnRemoveNoStack.Location = New System.Drawing.Point(160, 167) - Me.btnRemoveNoStack.Name = "btnRemoveNoStack" - Me.btnRemoveNoStack.Size = New System.Drawing.Size(23, 23) - Me.btnRemoveNoStack.TabIndex = 3 - Me.btnRemoveNoStack.UseVisualStyleBackColor = True - ' - 'btnAddNoStack - ' - Me.btnAddNoStack.Image = CType(resources.GetObject("btnAddNoStack.Image"), System.Drawing.Image) - Me.btnAddNoStack.Location = New System.Drawing.Point(73, 167) - Me.btnAddNoStack.Name = "btnAddNoStack" - Me.btnAddNoStack.Size = New System.Drawing.Size(23, 23) - Me.btnAddNoStack.TabIndex = 2 - Me.btnAddNoStack.UseVisualStyleBackColor = True - ' - 'txtNoStack - ' - Me.txtNoStack.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtNoStack.Location = New System.Drawing.Point(11, 168) - Me.txtNoStack.Name = "txtNoStack" - Me.txtNoStack.Size = New System.Drawing.Size(61, 22) - Me.txtNoStack.TabIndex = 1 - ' - 'lstNoStack - ' - Me.lstNoStack.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lstNoStack.FormattingEnabled = True - Me.lstNoStack.Location = New System.Drawing.Point(11, 15) - Me.lstNoStack.Name = "lstNoStack" - Me.lstNoStack.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.lstNoStack.Size = New System.Drawing.Size(171, 134) - Me.lstNoStack.Sorted = True - Me.lstNoStack.TabIndex = 0 - ' - 'GroupBox18 - ' - Me.GroupBox18.Controls.Add(Me.btnResetValidExts) - Me.GroupBox18.Controls.Add(Me.btnRemMovieExt) - Me.GroupBox18.Controls.Add(Me.btnAddMovieExt) - Me.GroupBox18.Controls.Add(Me.txtMovieExt) - Me.GroupBox18.Controls.Add(Me.lstMovieExts) - Me.GroupBox18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox18.Location = New System.Drawing.Point(3, 6) - Me.GroupBox18.Name = "GroupBox18" - Me.GroupBox18.Size = New System.Drawing.Size(192, 385) - Me.GroupBox18.TabIndex = 0 - Me.GroupBox18.TabStop = False - Me.GroupBox18.Text = "Valid Video Extensions" - ' - 'btnResetValidExts - ' - Me.btnResetValidExts.Image = CType(resources.GetObject("btnResetValidExts.Image"), System.Drawing.Image) - Me.btnResetValidExts.Location = New System.Drawing.Point(164, 12) - Me.btnResetValidExts.Name = "btnResetValidExts" - Me.btnResetValidExts.Size = New System.Drawing.Size(23, 23) - Me.btnResetValidExts.TabIndex = 4 - Me.btnResetValidExts.UseVisualStyleBackColor = True - ' - 'btnRemMovieExt - ' - Me.btnRemMovieExt.Image = CType(resources.GetObject("btnRemMovieExt.Image"), System.Drawing.Image) - Me.btnRemMovieExt.Location = New System.Drawing.Point(163, 356) - Me.btnRemMovieExt.Name = "btnRemMovieExt" - Me.btnRemMovieExt.Size = New System.Drawing.Size(23, 23) - Me.btnRemMovieExt.TabIndex = 3 - Me.btnRemMovieExt.UseVisualStyleBackColor = True - ' - 'btnAddMovieExt - ' - Me.btnAddMovieExt.Image = CType(resources.GetObject("btnAddMovieExt.Image"), System.Drawing.Image) - Me.btnAddMovieExt.Location = New System.Drawing.Point(68, 356) - Me.btnAddMovieExt.Name = "btnAddMovieExt" - Me.btnAddMovieExt.Size = New System.Drawing.Size(23, 23) - Me.btnAddMovieExt.TabIndex = 2 - Me.btnAddMovieExt.UseVisualStyleBackColor = True - ' - 'txtMovieExt - ' - Me.txtMovieExt.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtMovieExt.Location = New System.Drawing.Point(6, 357) - Me.txtMovieExt.Name = "txtMovieExt" - Me.txtMovieExt.Size = New System.Drawing.Size(61, 22) - Me.txtMovieExt.TabIndex = 1 - ' - 'lstMovieExts - ' - Me.lstMovieExts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lstMovieExts.FormattingEnabled = True - Me.lstMovieExts.Location = New System.Drawing.Point(6, 37) - Me.lstMovieExts.Name = "lstMovieExts" - Me.lstMovieExts.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.lstMovieExts.Size = New System.Drawing.Size(180, 303) - Me.lstMovieExts.Sorted = True - Me.lstMovieExts.TabIndex = 0 - ' - 'pnlSources - ' - Me.pnlSources.BackColor = System.Drawing.Color.White - Me.pnlSources.Controls.Add(Me.btnEditSource) - Me.pnlSources.Controls.Add(Me.GroupBox19) - Me.pnlSources.Controls.Add(Me.lvMovies) - Me.pnlSources.Controls.Add(Me.btnMovieRem) - Me.pnlSources.Controls.Add(Me.btnMovieAddFolder) - Me.pnlSources.Controls.Add(Me.GroupBox8) - Me.pnlSources.Controls.Add(Me.GroupBox16) - Me.pnlSources.Location = New System.Drawing.Point(1374, 513) - Me.pnlSources.Name = "pnlSources" - Me.pnlSources.Size = New System.Drawing.Size(617, 402) - Me.pnlSources.TabIndex = 13 - Me.pnlSources.Visible = False - ' - 'btnEditSource - ' - Me.btnEditSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnEditSource.Image = CType(resources.GetObject("btnEditSource.Image"), System.Drawing.Image) - Me.btnEditSource.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnEditSource.Location = New System.Drawing.Point(506, 35) - Me.btnEditSource.Name = "btnEditSource" - Me.btnEditSource.Size = New System.Drawing.Size(104, 23) - Me.btnEditSource.TabIndex = 2 - Me.btnEditSource.Text = "Edit Source" - Me.btnEditSource.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnEditSource.UseVisualStyleBackColor = True - ' - 'GroupBox19 - ' - Me.GroupBox19.Controls.Add(Me.chkScanOrderModify) - Me.GroupBox19.Controls.Add(Me.chkSortBeforeScan) - Me.GroupBox19.Controls.Add(Me.chkIgnoreLastScan) - Me.GroupBox19.Controls.Add(Me.chkCleanDB) - Me.GroupBox19.Controls.Add(Me.chkAutoDetectVTS) - Me.GroupBox19.Controls.Add(Me.chkSkipStackedSizeCheck) - Me.GroupBox19.Controls.Add(Me.Label21) - Me.GroupBox19.Controls.Add(Me.txtSkipLessThan) - Me.GroupBox19.Controls.Add(Me.Label20) - Me.GroupBox19.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox19.Location = New System.Drawing.Point(5, 113) - Me.GroupBox19.Name = "GroupBox19" - Me.GroupBox19.Size = New System.Drawing.Size(233, 271) - Me.GroupBox19.TabIndex = 4 - Me.GroupBox19.TabStop = False - Me.GroupBox19.Text = "Miscellaneous Options" - ' - 'chkScanOrderModify - ' - Me.chkScanOrderModify.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkScanOrderModify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScanOrderModify.Location = New System.Drawing.Point(5, 201) - Me.chkScanOrderModify.Name = "chkScanOrderModify" - Me.chkScanOrderModify.Size = New System.Drawing.Size(223, 35) - Me.chkScanOrderModify.TabIndex = 7 - Me.chkScanOrderModify.Text = "Scan in order of last write time." - Me.chkScanOrderModify.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkScanOrderModify.UseVisualStyleBackColor = True - ' - 'chkSortBeforeScan - ' - Me.chkSortBeforeScan.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkSortBeforeScan.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSortBeforeScan.Location = New System.Drawing.Point(5, 123) - Me.chkSortBeforeScan.Name = "chkSortBeforeScan" - Me.chkSortBeforeScan.Size = New System.Drawing.Size(222, 36) - Me.chkSortBeforeScan.TabIndex = 5 - Me.chkSortBeforeScan.Text = "Sort files into folders before each library update" - Me.chkSortBeforeScan.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkSortBeforeScan.UseVisualStyleBackColor = True - ' - 'chkIgnoreLastScan - ' - Me.chkIgnoreLastScan.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkIgnoreLastScan.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkIgnoreLastScan.Location = New System.Drawing.Point(5, 165) - Me.chkIgnoreLastScan.Name = "chkIgnoreLastScan" - Me.chkIgnoreLastScan.Size = New System.Drawing.Size(222, 33) - Me.chkIgnoreLastScan.TabIndex = 6 - Me.chkIgnoreLastScan.Text = "Always scan all media when updating library" - Me.chkIgnoreLastScan.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkIgnoreLastScan.UseVisualStyleBackColor = True - ' - 'chkCleanDB - ' - Me.chkCleanDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkCleanDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCleanDB.Location = New System.Drawing.Point(5, 235) - Me.chkCleanDB.Name = "chkCleanDB" - Me.chkCleanDB.Size = New System.Drawing.Size(223, 33) - Me.chkCleanDB.TabIndex = 8 - Me.chkCleanDB.Text = "Clean database after updating library" - Me.chkCleanDB.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkCleanDB.UseVisualStyleBackColor = True - ' - 'chkAutoDetectVTS - ' - Me.chkAutoDetectVTS.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkAutoDetectVTS.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkAutoDetectVTS.Location = New System.Drawing.Point(5, 90) - Me.chkAutoDetectVTS.Name = "chkAutoDetectVTS" - Me.chkAutoDetectVTS.Size = New System.Drawing.Size(222, 34) - Me.chkAutoDetectVTS.TabIndex = 4 - Me.chkAutoDetectVTS.Text = "Recognize VIDEO_TS Folders" - Me.chkAutoDetectVTS.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkAutoDetectVTS.UseVisualStyleBackColor = True - ' - 'chkSkipStackedSizeCheck - ' - Me.chkSkipStackedSizeCheck.AutoSize = True - Me.chkSkipStackedSizeCheck.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkSkipStackedSizeCheck.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSkipStackedSizeCheck.Location = New System.Drawing.Point(27, 58) - Me.chkSkipStackedSizeCheck.Name = "chkSkipStackedSizeCheck" - Me.chkSkipStackedSizeCheck.Size = New System.Drawing.Size(188, 17) - Me.chkSkipStackedSizeCheck.TabIndex = 3 - Me.chkSkipStackedSizeCheck.Text = "Skip Size Check of Stacked Files" - Me.chkSkipStackedSizeCheck.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkSkipStackedSizeCheck.UseVisualStyleBackColor = True - ' - 'Label21 - ' - Me.Label21.AutoSize = True - Me.Label21.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label21.Location = New System.Drawing.Point(133, 39) - Me.Label21.Name = "Label21" - Me.Label21.Size = New System.Drawing.Size(24, 13) - Me.Label21.TabIndex = 2 - Me.Label21.Text = "MB" - ' - 'txtSkipLessThan - ' - Me.txtSkipLessThan.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtSkipLessThan.Location = New System.Drawing.Point(27, 35) - Me.txtSkipLessThan.Name = "txtSkipLessThan" - Me.txtSkipLessThan.Size = New System.Drawing.Size(100, 22) - Me.txtSkipLessThan.TabIndex = 1 - ' - 'Label20 - ' - Me.Label20.AutoSize = True - Me.Label20.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label20.Location = New System.Drawing.Point(4, 19) - Me.Label20.Name = "Label20" - Me.Label20.Size = New System.Drawing.Size(122, 13) - Me.Label20.TabIndex = 0 - Me.Label20.Text = "Skip files smaller than:" - ' - 'pnlImages - ' - Me.pnlImages.BackColor = System.Drawing.Color.White - Me.pnlImages.Controls.Add(Me.GroupBox15) - Me.pnlImages.Controls.Add(Me.GroupBox9) - Me.pnlImages.Controls.Add(Me.GroupBox13) - Me.pnlImages.Controls.Add(Me.GroupBox14) - Me.pnlImages.Controls.Add(Me.GroupBox23) - Me.pnlImages.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.pnlImages.Location = New System.Drawing.Point(1181, 571) - Me.pnlImages.Name = "pnlImages" - Me.pnlImages.Size = New System.Drawing.Size(617, 408) - Me.pnlImages.TabIndex = 12 - Me.pnlImages.Visible = False - ' - 'GroupBox15 - ' - Me.GroupBox15.Controls.Add(Me.cbTrailerQuality) - Me.GroupBox15.Controls.Add(Me.lblPreferredQuality) - Me.GroupBox15.Controls.Add(Me.chkDeleteAllTrailers) - Me.GroupBox15.Controls.Add(Me.chkOverwriteTrailer) - Me.GroupBox15.Controls.Add(Me.chkNoDLTrailer) - Me.GroupBox15.Controls.Add(Me.chkSingleScrapeTrailer) - Me.GroupBox15.Controls.Add(Me.chkUpdaterTrailer) - Me.GroupBox15.Controls.Add(Me.chkDownloadTrailer) - Me.GroupBox15.Location = New System.Drawing.Point(4, 172) - Me.GroupBox15.Name = "GroupBox15" - Me.GroupBox15.Size = New System.Drawing.Size(183, 230) - Me.GroupBox15.TabIndex = 1 - Me.GroupBox15.TabStop = False - Me.GroupBox15.Text = "Trailers" - ' - 'cbTrailerQuality - ' - Me.cbTrailerQuality.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbTrailerQuality.Enabled = False - Me.cbTrailerQuality.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbTrailerQuality.FormattingEnabled = True - Me.cbTrailerQuality.Location = New System.Drawing.Point(33, 204) - Me.cbTrailerQuality.Name = "cbTrailerQuality" - Me.cbTrailerQuality.Size = New System.Drawing.Size(106, 21) - Me.cbTrailerQuality.TabIndex = 7 - ' - 'lblPreferredQuality - ' - Me.lblPreferredQuality.AutoSize = True - Me.lblPreferredQuality.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblPreferredQuality.Location = New System.Drawing.Point(31, 189) - Me.lblPreferredQuality.Name = "lblPreferredQuality" - Me.lblPreferredQuality.Size = New System.Drawing.Size(97, 13) - Me.lblPreferredQuality.TabIndex = 6 - Me.lblPreferredQuality.Text = "Preferred Quality:" - ' - 'chkDeleteAllTrailers - ' - Me.chkDeleteAllTrailers.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkDeleteAllTrailers.Enabled = False - Me.chkDeleteAllTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkDeleteAllTrailers.Location = New System.Drawing.Point(25, 163) - Me.chkDeleteAllTrailers.Name = "chkDeleteAllTrailers" - Me.chkDeleteAllTrailers.Size = New System.Drawing.Size(152, 27) - Me.chkDeleteAllTrailers.TabIndex = 5 - Me.chkDeleteAllTrailers.Text = "Delete All Existing" - Me.chkDeleteAllTrailers.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkDeleteAllTrailers.UseVisualStyleBackColor = True - ' - 'chkOverwriteTrailer - ' - Me.chkOverwriteTrailer.AutoSize = True - Me.chkOverwriteTrailer.Enabled = False - Me.chkOverwriteTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOverwriteTrailer.Location = New System.Drawing.Point(25, 143) - Me.chkOverwriteTrailer.Name = "chkOverwriteTrailer" - Me.chkOverwriteTrailer.Size = New System.Drawing.Size(119, 17) - Me.chkOverwriteTrailer.TabIndex = 4 - Me.chkOverwriteTrailer.Text = "Overwrite Existing" - Me.chkOverwriteTrailer.UseVisualStyleBackColor = True - ' - 'chkNoDLTrailer - ' - Me.chkNoDLTrailer.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkNoDLTrailer.Enabled = False - Me.chkNoDLTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkNoDLTrailer.Location = New System.Drawing.Point(25, 72) - Me.chkNoDLTrailer.Name = "chkNoDLTrailer" - Me.chkNoDLTrailer.Size = New System.Drawing.Size(151, 30) - Me.chkNoDLTrailer.TabIndex = 2 - Me.chkNoDLTrailer.Text = "Only Get URLs When Scraping" - Me.chkNoDLTrailer.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkNoDLTrailer.UseVisualStyleBackColor = True - ' - 'chkSingleScrapeTrailer - ' - Me.chkSingleScrapeTrailer.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkSingleScrapeTrailer.Enabled = False - Me.chkSingleScrapeTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSingleScrapeTrailer.Location = New System.Drawing.Point(25, 106) - Me.chkSingleScrapeTrailer.Name = "chkSingleScrapeTrailer" - Me.chkSingleScrapeTrailer.Size = New System.Drawing.Size(154, 34) - Me.chkSingleScrapeTrailer.TabIndex = 3 - Me.chkSingleScrapeTrailer.Text = "Get During Single Scrape" - Me.chkSingleScrapeTrailer.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkSingleScrapeTrailer.UseVisualStyleBackColor = True - ' - 'chkUpdaterTrailer - ' - Me.chkUpdaterTrailer.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkUpdaterTrailer.Enabled = False - Me.chkUpdaterTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkUpdaterTrailer.Location = New System.Drawing.Point(25, 38) - Me.chkUpdaterTrailer.Name = "chkUpdaterTrailer" - Me.chkUpdaterTrailer.Size = New System.Drawing.Size(151, 33) - Me.chkUpdaterTrailer.TabIndex = 1 - Me.chkUpdaterTrailer.Text = "Get During Automated Scrapers" - Me.chkUpdaterTrailer.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkUpdaterTrailer.UseVisualStyleBackColor = True - ' - 'chkDownloadTrailer - ' - Me.chkDownloadTrailer.AutoSize = True - Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkDownloadTrailer.Location = New System.Drawing.Point(12, 16) - Me.chkDownloadTrailer.Name = "chkDownloadTrailer" - Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) - Me.chkDownloadTrailer.TabIndex = 0 - Me.chkDownloadTrailer.Text = "Enable Trailer Support" - Me.chkDownloadTrailer.UseVisualStyleBackColor = True - ' - 'GroupBox23 - ' - Me.GroupBox23.Controls.Add(Me.chkAutoETSize) - Me.GroupBox23.Controls.Add(Me.cbAutoETSize) - Me.GroupBox23.Controls.Add(Me.txtAutoThumbs) - Me.GroupBox23.Controls.Add(Me.GroupBox24) - Me.GroupBox23.Controls.Add(Me.chkAutoThumbs) - Me.GroupBox23.Controls.Add(Me.chkUseETasFA) - Me.GroupBox23.Controls.Add(Me.Label15) - Me.GroupBox23.Controls.Add(Me.chkNoSpoilers) - Me.GroupBox23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox23.Location = New System.Drawing.Point(412, 3) - Me.GroupBox23.Name = "GroupBox23" - Me.GroupBox23.Size = New System.Drawing.Size(199, 358) - Me.GroupBox23.TabIndex = 4 - Me.GroupBox23.TabStop = False - Me.GroupBox23.Text = "Extrathumbs" - ' - 'chkAutoETSize - ' - Me.chkAutoETSize.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkAutoETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkAutoETSize.Location = New System.Drawing.Point(6, 236) - Me.chkAutoETSize.Name = "chkAutoETSize" - Me.chkAutoETSize.Size = New System.Drawing.Size(188, 43) - Me.chkAutoETSize.TabIndex = 6 - Me.chkAutoETSize.Text = "Download All Fanart Images of the Following Size as Extrathumbs:" - Me.chkAutoETSize.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkAutoETSize.UseVisualStyleBackColor = True - ' - 'cbAutoETSize - ' - Me.cbAutoETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbAutoETSize.Enabled = False - Me.cbAutoETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbAutoETSize.FormattingEnabled = True - Me.cbAutoETSize.Location = New System.Drawing.Point(26, 283) - Me.cbAutoETSize.Name = "cbAutoETSize" - Me.cbAutoETSize.Size = New System.Drawing.Size(148, 21) - Me.cbAutoETSize.TabIndex = 7 - ' - 'GroupBox24 - ' - Me.GroupBox24.Controls.Add(Me.txtETWidth) - Me.GroupBox24.Controls.Add(Me.txtETHeight) - Me.GroupBox24.Controls.Add(Me.chkETPadding) - Me.GroupBox24.Controls.Add(Me.Label28) - Me.GroupBox24.Controls.Add(Me.Label29) - Me.GroupBox24.Controls.Add(Me.rbETCustom) - Me.GroupBox24.Controls.Add(Me.rbETNative) - Me.GroupBox24.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox24.Location = New System.Drawing.Point(7, 120) - Me.GroupBox24.Name = "GroupBox24" - Me.GroupBox24.Size = New System.Drawing.Size(185, 104) - Me.GroupBox24.TabIndex = 5 - Me.GroupBox24.TabStop = False - Me.GroupBox24.Text = "Sizing (Extracted Frames)" - ' - 'txtETWidth - ' - Me.txtETWidth.Enabled = False - Me.txtETWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtETWidth.Location = New System.Drawing.Point(61, 57) - Me.txtETWidth.Name = "txtETWidth" - Me.txtETWidth.Size = New System.Drawing.Size(40, 22) - Me.txtETWidth.TabIndex = 3 - ' - 'txtETHeight - ' - Me.txtETHeight.Enabled = False - Me.txtETHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtETHeight.Location = New System.Drawing.Point(143, 57) - Me.txtETHeight.Name = "txtETHeight" - Me.txtETHeight.Size = New System.Drawing.Size(40, 22) - Me.txtETHeight.TabIndex = 5 - ' - 'chkETPadding - ' - Me.chkETPadding.AutoSize = True - Me.chkETPadding.Enabled = False - Me.chkETPadding.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkETPadding.Location = New System.Drawing.Point(21, 81) - Me.chkETPadding.Name = "chkETPadding" - Me.chkETPadding.Size = New System.Drawing.Size(69, 17) - Me.chkETPadding.TabIndex = 6 - Me.chkETPadding.Text = "Padding" - Me.chkETPadding.UseVisualStyleBackColor = True - ' - 'Label28 - ' - Me.Label28.AutoSize = True - Me.Label28.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label28.Location = New System.Drawing.Point(17, 61) - Me.Label28.Name = "Label28" - Me.Label28.Size = New System.Drawing.Size(42, 13) - Me.Label28.TabIndex = 2 - Me.Label28.Text = "Width:" - ' - 'Label29 - ' - Me.Label29.AutoSize = True - Me.Label29.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label29.Location = New System.Drawing.Point(98, 61) - Me.Label29.Name = "Label29" - Me.Label29.Size = New System.Drawing.Size(45, 13) - Me.Label29.TabIndex = 4 - Me.Label29.Text = "Height:" - ' - 'rbETCustom - ' - Me.rbETCustom.AutoSize = True - Me.rbETCustom.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.rbETCustom.Location = New System.Drawing.Point(7, 38) - Me.rbETCustom.Name = "rbETCustom" - Me.rbETCustom.Size = New System.Drawing.Size(109, 17) - Me.rbETCustom.TabIndex = 1 - Me.rbETCustom.TabStop = True - Me.rbETCustom.Text = "Use Custom Size" - Me.rbETCustom.UseVisualStyleBackColor = True - ' - 'rbETNative - ' - Me.rbETNative.AutoSize = True - Me.rbETNative.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.rbETNative.Location = New System.Drawing.Point(7, 20) - Me.rbETNative.Name = "rbETNative" - Me.rbETNative.Size = New System.Drawing.Size(138, 17) - Me.rbETNative.TabIndex = 0 - Me.rbETNative.TabStop = True - Me.rbETNative.Text = "Use Native Resolution" - Me.rbETNative.UseVisualStyleBackColor = True - ' - 'fbdBrowse - ' - Me.fbdBrowse.Description = "Select the folder where you wish to store your backdrops." - ' - 'pnlTVSources - ' - Me.pnlTVSources.BackColor = System.Drawing.Color.White - Me.pnlTVSources.Controls.Add(Me.TabControl2) - Me.pnlTVSources.Location = New System.Drawing.Point(1260, 560) - Me.pnlTVSources.Name = "pnlTVSources" - Me.pnlTVSources.Size = New System.Drawing.Size(617, 400) - Me.pnlTVSources.TabIndex = 11 - Me.pnlTVSources.Visible = False - ' - 'TabControl2 - ' - Me.TabControl2.Controls.Add(Me.TabPage3) - Me.TabControl2.Controls.Add(Me.TabPage4) - Me.TabControl2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.TabControl2.Location = New System.Drawing.Point(3, 4) - Me.TabControl2.Name = "TabControl2" - Me.TabControl2.SelectedIndex = 0 - Me.TabControl2.Size = New System.Drawing.Size(612, 392) - Me.TabControl2.TabIndex = 0 - ' - 'TabPage3 - ' - Me.TabPage3.Controls.Add(Me.btnTVShowFrodo) - Me.TabPage3.Controls.Add(Me.lvTVSources) - Me.TabPage3.Controls.Add(Me.gbMiscTVSourceOpts) - Me.TabPage3.Controls.Add(Me.btnAddTVSource) - Me.TabPage3.Controls.Add(Me.btnEditTVSource) - Me.TabPage3.Controls.Add(Me.btnRemTVSource) - Me.TabPage3.Controls.Add(Me.gbTVNaming) - Me.TabPage3.Location = New System.Drawing.Point(4, 22) - Me.TabPage3.Name = "TabPage3" - Me.TabPage3.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage3.Size = New System.Drawing.Size(604, 366) - Me.TabPage3.TabIndex = 0 - Me.TabPage3.Text = "General" - Me.TabPage3.UseVisualStyleBackColor = True - ' - 'btnTVShowFrodo - ' - Me.btnTVShowFrodo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnTVShowFrodo.Location = New System.Drawing.Point(22, 320) - Me.btnTVShowFrodo.Name = "btnTVShowFrodo" - Me.btnTVShowFrodo.Size = New System.Drawing.Size(116, 23) - Me.btnTVShowFrodo.TabIndex = 5 - Me.btnTVShowFrodo.Text = "XBMC Frodo" - Me.btnTVShowFrodo.UseVisualStyleBackColor = True - ' - 'lvTVSources - ' - Me.lvTVSources.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3}) - Me.lvTVSources.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lvTVSources.FullRowSelect = True - Me.lvTVSources.HideSelection = False - Me.lvTVSources.Location = New System.Drawing.Point(6, 4) - Me.lvTVSources.Name = "lvTVSources" - Me.lvTVSources.Size = New System.Drawing.Size(483, 105) - Me.lvTVSources.Sorting = System.Windows.Forms.SortOrder.Ascending - Me.lvTVSources.TabIndex = 0 - Me.lvTVSources.UseCompatibleStateImageBehavior = False - Me.lvTVSources.View = System.Windows.Forms.View.Details - ' - 'ColumnHeader1 - ' - Me.ColumnHeader1.Width = 0 - ' - 'ColumnHeader2 - ' - Me.ColumnHeader2.Text = "Name" - Me.ColumnHeader2.Width = 94 - ' - 'ColumnHeader3 - ' - Me.ColumnHeader3.Text = "Path" - Me.ColumnHeader3.Width = 368 - ' - 'gbMiscTVSourceOpts - ' - Me.gbMiscTVSourceOpts.Controls.Add(Me.Label6) - Me.gbMiscTVSourceOpts.Controls.Add(Me.txtTVSkipLessThan) - Me.gbMiscTVSourceOpts.Controls.Add(Me.Label7) - Me.gbMiscTVSourceOpts.Controls.Add(Me.chkTVScanOrderModify) - Me.gbMiscTVSourceOpts.Controls.Add(Me.chkTVIgnoreLastScan) - Me.gbMiscTVSourceOpts.Controls.Add(Me.chkTVCleanDB) - Me.gbMiscTVSourceOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbMiscTVSourceOpts.Location = New System.Drawing.Point(6, 110) - Me.gbMiscTVSourceOpts.Name = "gbMiscTVSourceOpts" - Me.gbMiscTVSourceOpts.Size = New System.Drawing.Size(151, 188) - Me.gbMiscTVSourceOpts.TabIndex = 4 - Me.gbMiscTVSourceOpts.TabStop = False - Me.gbMiscTVSourceOpts.Text = "Miscellaneous Options" - ' - 'Label6 - ' - Me.Label6.AutoSize = True - Me.Label6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label6.Location = New System.Drawing.Point(114, 39) - Me.Label6.Name = "Label6" - Me.Label6.Size = New System.Drawing.Size(24, 13) - Me.Label6.TabIndex = 2 - Me.Label6.Text = "MB" - ' - 'txtTVSkipLessThan - ' - Me.txtTVSkipLessThan.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtTVSkipLessThan.Location = New System.Drawing.Point(11, 34) - Me.txtTVSkipLessThan.Name = "txtTVSkipLessThan" - Me.txtTVSkipLessThan.Size = New System.Drawing.Size(100, 22) - Me.txtTVSkipLessThan.TabIndex = 0 - ' - 'Label7 - ' - Me.Label7.AutoSize = True - Me.Label7.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label7.Location = New System.Drawing.Point(6, 18) - Me.Label7.Name = "Label7" - Me.Label7.Size = New System.Drawing.Size(122, 13) - Me.Label7.TabIndex = 1 - Me.Label7.Text = "Skip files smaller than:" - ' - 'chkTVScanOrderModify - ' - Me.chkTVScanOrderModify.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkTVScanOrderModify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTVScanOrderModify.Location = New System.Drawing.Point(4, 110) - Me.chkTVScanOrderModify.Name = "chkTVScanOrderModify" - Me.chkTVScanOrderModify.Size = New System.Drawing.Size(142, 43) - Me.chkTVScanOrderModify.TabIndex = 4 - Me.chkTVScanOrderModify.Text = "Scan in order of last write time" - Me.chkTVScanOrderModify.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkTVScanOrderModify.UseVisualStyleBackColor = True - ' - 'chkTVIgnoreLastScan - ' - Me.chkTVIgnoreLastScan.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkTVIgnoreLastScan.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTVIgnoreLastScan.Location = New System.Drawing.Point(4, 68) - Me.chkTVIgnoreLastScan.Name = "chkTVIgnoreLastScan" - Me.chkTVIgnoreLastScan.Size = New System.Drawing.Size(142, 43) - Me.chkTVIgnoreLastScan.TabIndex = 3 - Me.chkTVIgnoreLastScan.Text = "Ignore last scan time when updating library" - Me.chkTVIgnoreLastScan.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkTVIgnoreLastScan.UseVisualStyleBackColor = True - ' - 'chkTVCleanDB - ' - Me.chkTVCleanDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkTVCleanDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTVCleanDB.Location = New System.Drawing.Point(4, 152) - Me.chkTVCleanDB.Name = "chkTVCleanDB" - Me.chkTVCleanDB.Size = New System.Drawing.Size(142, 43) - Me.chkTVCleanDB.TabIndex = 5 - Me.chkTVCleanDB.Text = "Clean database after updating library" - Me.chkTVCleanDB.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkTVCleanDB.UseVisualStyleBackColor = True - ' - 'btnAddTVSource - ' - Me.btnAddTVSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnAddTVSource.Image = CType(resources.GetObject("btnAddTVSource.Image"), System.Drawing.Image) - Me.btnAddTVSource.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnAddTVSource.Location = New System.Drawing.Point(494, 4) - Me.btnAddTVSource.Name = "btnAddTVSource" - Me.btnAddTVSource.Size = New System.Drawing.Size(104, 23) - Me.btnAddTVSource.TabIndex = 1 - Me.btnAddTVSource.Text = "Add Source" - Me.btnAddTVSource.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnAddTVSource.UseVisualStyleBackColor = True - ' - 'btnEditTVSource - ' - Me.btnEditTVSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnEditTVSource.Image = CType(resources.GetObject("btnEditTVSource.Image"), System.Drawing.Image) - Me.btnEditTVSource.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnEditTVSource.Location = New System.Drawing.Point(494, 33) - Me.btnEditTVSource.Name = "btnEditTVSource" - Me.btnEditTVSource.Size = New System.Drawing.Size(104, 23) - Me.btnEditTVSource.TabIndex = 2 - Me.btnEditTVSource.Text = "Edit Source" - Me.btnEditTVSource.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnEditTVSource.UseVisualStyleBackColor = True - ' - 'btnRemTVSource - ' - Me.btnRemTVSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnRemTVSource.Image = CType(resources.GetObject("btnRemTVSource.Image"), System.Drawing.Image) - Me.btnRemTVSource.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnRemTVSource.Location = New System.Drawing.Point(494, 86) - Me.btnRemTVSource.Name = "btnRemTVSource" - Me.btnRemTVSource.Size = New System.Drawing.Size(104, 23) - Me.btnRemTVSource.TabIndex = 3 - Me.btnRemTVSource.Text = "Remove" - Me.btnRemTVSource.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnRemTVSource.UseVisualStyleBackColor = True - ' - 'gbTVNaming - ' - Me.gbTVNaming.Controls.Add(Me.gbShowBanner) - Me.gbTVNaming.Controls.Add(Me.gbAllSeasonPoster) - Me.gbTVNaming.Controls.Add(Me.gbEpisodeFanart) - Me.gbTVNaming.Controls.Add(Me.gbEpisodePosters) - Me.gbTVNaming.Controls.Add(Me.gbSeasonFanart) - Me.gbTVNaming.Controls.Add(Me.gbSeasonPosters) - Me.gbTVNaming.Controls.Add(Me.gbShowFanart) - Me.gbTVNaming.Controls.Add(Me.gbShowPosters) - Me.gbTVNaming.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbTVNaming.Location = New System.Drawing.Point(161, 110) - Me.gbTVNaming.Name = "gbTVNaming" - Me.gbTVNaming.Size = New System.Drawing.Size(437, 253) - Me.gbTVNaming.TabIndex = 6 - Me.gbTVNaming.TabStop = False - Me.gbTVNaming.Text = "File Naming" - ' - 'gbShowBanner - ' - Me.gbShowBanner.Controls.Add(Me.chkShowBannerJPG) - Me.gbShowBanner.Location = New System.Drawing.Point(5, 204) - Me.gbShowBanner.Name = "gbShowBanner" - Me.gbShowBanner.Size = New System.Drawing.Size(133, 40) - Me.gbShowBanner.TabIndex = 2 - Me.gbShowBanner.TabStop = False - Me.gbShowBanner.Text = "Show Banner" - ' - 'chkShowBannerJPG - ' - Me.chkShowBannerJPG.AutoSize = True - Me.chkShowBannerJPG.Enabled = False - Me.chkShowBannerJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!) - Me.chkShowBannerJPG.Location = New System.Drawing.Point(6, 15) - Me.chkShowBannerJPG.Name = "chkShowBannerJPG" - Me.chkShowBannerJPG.Size = New System.Drawing.Size(83, 17) - Me.chkShowBannerJPG.TabIndex = 0 - Me.chkShowBannerJPG.Text = "banner.jpg" - Me.chkShowBannerJPG.UseVisualStyleBackColor = True - ' - 'gbAllSeasonPoster - ' - Me.gbAllSeasonPoster.Controls.Add(Me.chkSeasonAllPosterJPG) - Me.gbAllSeasonPoster.Controls.Add(Me.chkSeasonAllJPG) - Me.gbAllSeasonPoster.Controls.Add(Me.chkSeasonAllTBN) - Me.gbAllSeasonPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbAllSeasonPoster.Location = New System.Drawing.Point(292, 162) - Me.gbAllSeasonPoster.Name = "gbAllSeasonPoster" - Me.gbAllSeasonPoster.Size = New System.Drawing.Size(140, 81) - Me.gbAllSeasonPoster.TabIndex = 7 - Me.gbAllSeasonPoster.TabStop = False - Me.gbAllSeasonPoster.Text = "All Season Posters" - ' - 'chkSeasonAllPosterJPG - ' - Me.chkSeasonAllPosterJPG.AutoSize = True - Me.chkSeasonAllPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonAllPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkSeasonAllPosterJPG.Location = New System.Drawing.Point(6, 49) - Me.chkSeasonAllPosterJPG.Name = "chkSeasonAllPosterJPG" - Me.chkSeasonAllPosterJPG.Size = New System.Drawing.Size(135, 17) - Me.chkSeasonAllPosterJPG.TabIndex = 2 - Me.chkSeasonAllPosterJPG.Text = "season-all-poster.jpg" - Me.chkSeasonAllPosterJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonAllJPG - ' - Me.chkSeasonAllJPG.AutoSize = True - Me.chkSeasonAllJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonAllJPG.Location = New System.Drawing.Point(6, 34) - Me.chkSeasonAllJPG.Name = "chkSeasonAllJPG" - Me.chkSeasonAllJPG.Size = New System.Drawing.Size(98, 17) - Me.chkSeasonAllJPG.TabIndex = 1 - Me.chkSeasonAllJPG.Text = "season-all.jpg" - Me.chkSeasonAllJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonAllTBN - ' - Me.chkSeasonAllTBN.AutoSize = True - Me.chkSeasonAllTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonAllTBN.Location = New System.Drawing.Point(6, 18) - Me.chkSeasonAllTBN.Name = "chkSeasonAllTBN" - Me.chkSeasonAllTBN.Size = New System.Drawing.Size(99, 17) - Me.chkSeasonAllTBN.TabIndex = 0 - Me.chkSeasonAllTBN.Text = "season-all.tbn" - Me.chkSeasonAllTBN.UseVisualStyleBackColor = True - ' - 'gbEpisodeFanart - ' - Me.gbEpisodeFanart.Controls.Add(Me.chkEpisodeDotFanart) - Me.gbEpisodeFanart.Controls.Add(Me.chkEpisodeDashFanart) - Me.gbEpisodeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbEpisodeFanart.Location = New System.Drawing.Point(292, 97) - Me.gbEpisodeFanart.Name = "gbEpisodeFanart" - Me.gbEpisodeFanart.Size = New System.Drawing.Size(140, 52) - Me.gbEpisodeFanart.TabIndex = 6 - Me.gbEpisodeFanart.TabStop = False - Me.gbEpisodeFanart.Text = "Episode Fanart" - ' - 'chkEpisodeDotFanart - ' - Me.chkEpisodeDotFanart.AutoSize = True - Me.chkEpisodeDotFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodeDotFanart.Location = New System.Drawing.Point(5, 31) - Me.chkEpisodeDotFanart.Name = "chkEpisodeDotFanart" - Me.chkEpisodeDotFanart.Size = New System.Drawing.Size(137, 17) - Me.chkEpisodeDotFanart.TabIndex = 1 - Me.chkEpisodeDotFanart.Text = ".fanart.jpg" - Me.chkEpisodeDotFanart.UseVisualStyleBackColor = True - ' - 'chkEpisodeDashFanart - ' - Me.chkEpisodeDashFanart.AutoSize = True - Me.chkEpisodeDashFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodeDashFanart.Location = New System.Drawing.Point(5, 15) - Me.chkEpisodeDashFanart.Name = "chkEpisodeDashFanart" - Me.chkEpisodeDashFanart.Size = New System.Drawing.Size(138, 17) - Me.chkEpisodeDashFanart.TabIndex = 0 - Me.chkEpisodeDashFanart.Text = "-fanart.jpg" - Me.chkEpisodeDashFanart.UseVisualStyleBackColor = True - ' - 'gbEpisodePosters - ' - Me.gbEpisodePosters.Controls.Add(Me.chkEpisodeDashThumbJPG) - Me.gbEpisodePosters.Controls.Add(Me.chkEpisodeJPG) - Me.gbEpisodePosters.Controls.Add(Me.chkEpisodeTBN) - Me.gbEpisodePosters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbEpisodePosters.Location = New System.Drawing.Point(292, 15) - Me.gbEpisodePosters.Name = "gbEpisodePosters" - Me.gbEpisodePosters.Size = New System.Drawing.Size(140, 74) - Me.gbEpisodePosters.TabIndex = 5 - Me.gbEpisodePosters.TabStop = False - Me.gbEpisodePosters.Text = "Episode Posters" - ' - 'chkEpisodeDashThumbJPG - ' - Me.chkEpisodeDashThumbJPG.AutoSize = True - Me.chkEpisodeDashThumbJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodeDashThumbJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkEpisodeDashThumbJPG.Location = New System.Drawing.Point(5, 49) - Me.chkEpisodeDashThumbJPG.Name = "chkEpisodeDashThumbJPG" - Me.chkEpisodeDashThumbJPG.Size = New System.Drawing.Size(141, 17) - Me.chkEpisodeDashThumbJPG.TabIndex = 2 - Me.chkEpisodeDashThumbJPG.Text = "-thumb.jpg" - Me.chkEpisodeDashThumbJPG.UseVisualStyleBackColor = True - ' - 'chkEpisodeJPG - ' - Me.chkEpisodeJPG.AutoSize = True - Me.chkEpisodeJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodeJPG.Location = New System.Drawing.Point(5, 31) - Me.chkEpisodeJPG.Name = "chkEpisodeJPG" - Me.chkEpisodeJPG.Size = New System.Drawing.Size(103, 17) - Me.chkEpisodeJPG.TabIndex = 1 - Me.chkEpisodeJPG.Text = ".jpg" - Me.chkEpisodeJPG.UseVisualStyleBackColor = True - ' - 'chkEpisodeTBN - ' - Me.chkEpisodeTBN.AutoSize = True - Me.chkEpisodeTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodeTBN.Location = New System.Drawing.Point(5, 15) - Me.chkEpisodeTBN.Name = "chkEpisodeTBN" - Me.chkEpisodeTBN.Size = New System.Drawing.Size(104, 17) - Me.chkEpisodeTBN.TabIndex = 0 - Me.chkEpisodeTBN.Text = ".tbn" - Me.chkEpisodeTBN.UseVisualStyleBackColor = True - ' - 'gbSeasonFanart - ' - Me.gbSeasonFanart.Controls.Add(Me.chkSeasonXXDashFanartJPG) - Me.gbSeasonFanart.Controls.Add(Me.chkSeasonDotFanart) - Me.gbSeasonFanart.Controls.Add(Me.chkSeasonDashFanart) - Me.gbSeasonFanart.Controls.Add(Me.chkSeasonFanartJPG) - Me.gbSeasonFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbSeasonFanart.Location = New System.Drawing.Point(143, 168) - Me.gbSeasonFanart.Name = "gbSeasonFanart" - Me.gbSeasonFanart.Size = New System.Drawing.Size(145, 81) - Me.gbSeasonFanart.TabIndex = 4 - Me.gbSeasonFanart.TabStop = False - Me.gbSeasonFanart.Text = "Season Fanart" - ' - 'chkSeasonXXDashFanartJPG - ' - Me.chkSeasonXXDashFanartJPG.AutoSize = True - Me.chkSeasonXXDashFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonXXDashFanartJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkSeasonXXDashFanartJPG.Location = New System.Drawing.Point(6, 62) - Me.chkSeasonXXDashFanartJPG.Name = "chkSeasonXXDashFanartJPG" - Me.chkSeasonXXDashFanartJPG.Size = New System.Drawing.Size(129, 17) - Me.chkSeasonXXDashFanartJPG.TabIndex = 3 - Me.chkSeasonXXDashFanartJPG.Text = "seasonXX-fanart.jpg" - Me.chkSeasonXXDashFanartJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonDotFanart - ' - Me.chkSeasonDotFanart.AutoSize = True - Me.chkSeasonDotFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonDotFanart.Location = New System.Drawing.Point(6, 47) - Me.chkSeasonDotFanart.Name = "chkSeasonDotFanart" - Me.chkSeasonDotFanart.Size = New System.Drawing.Size(132, 17) - Me.chkSeasonDotFanart.TabIndex = 2 - Me.chkSeasonDotFanart.Text = ".fanart.jpg" - Me.chkSeasonDotFanart.UseVisualStyleBackColor = True - ' - 'chkSeasonDashFanart - ' - Me.chkSeasonDashFanart.AutoSize = True - Me.chkSeasonDashFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonDashFanart.Location = New System.Drawing.Point(6, 31) - Me.chkSeasonDashFanart.Name = "chkSeasonDashFanart" - Me.chkSeasonDashFanart.Size = New System.Drawing.Size(133, 17) - Me.chkSeasonDashFanart.TabIndex = 1 - Me.chkSeasonDashFanart.Text = "-fanart.jpg" - Me.chkSeasonDashFanart.UseVisualStyleBackColor = True - ' - 'chkSeasonFanartJPG - ' - Me.chkSeasonFanartJPG.AutoSize = True - Me.chkSeasonFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonFanartJPG.Location = New System.Drawing.Point(6, 15) - Me.chkSeasonFanartJPG.Name = "chkSeasonFanartJPG" - Me.chkSeasonFanartJPG.Size = New System.Drawing.Size(77, 17) - Me.chkSeasonFanartJPG.TabIndex = 0 - Me.chkSeasonFanartJPG.Text = "fanart.jpg" - Me.chkSeasonFanartJPG.UseVisualStyleBackColor = True - ' - 'gbSeasonPosters - ' - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonXXDashPosterJPG) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonFolderJPG) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonNameJPG) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonNameTBN) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonPosterJPG) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonPosterTBN) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonXTBN) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonXXTBN) - Me.gbSeasonPosters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbSeasonPosters.Location = New System.Drawing.Point(143, 15) - Me.gbSeasonPosters.Name = "gbSeasonPosters" - Me.gbSeasonPosters.Size = New System.Drawing.Size(145, 152) - Me.gbSeasonPosters.TabIndex = 3 - Me.gbSeasonPosters.TabStop = False - Me.gbSeasonPosters.Text = "Season Posters" - ' - 'chkSeasonXXDashPosterJPG - ' - Me.chkSeasonXXDashPosterJPG.AutoSize = True - Me.chkSeasonXXDashPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonXXDashPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkSeasonXXDashPosterJPG.Location = New System.Drawing.Point(6, 48) - Me.chkSeasonXXDashPosterJPG.Name = "chkSeasonXXDashPosterJPG" - Me.chkSeasonXXDashPosterJPG.Size = New System.Drawing.Size(131, 17) - Me.chkSeasonXXDashPosterJPG.TabIndex = 2 - Me.chkSeasonXXDashPosterJPG.Text = "seasonXX-poster.jpg" - Me.chkSeasonXXDashPosterJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonFolderJPG - ' - Me.chkSeasonFolderJPG.AutoSize = True - Me.chkSeasonFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonFolderJPG.Location = New System.Drawing.Point(6, 129) - Me.chkSeasonFolderJPG.Name = "chkSeasonFolderJPG" - Me.chkSeasonFolderJPG.Size = New System.Drawing.Size(77, 17) - Me.chkSeasonFolderJPG.TabIndex = 7 - Me.chkSeasonFolderJPG.Text = "folder.jpg" - Me.chkSeasonFolderJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonNameJPG - ' - Me.chkSeasonNameJPG.AutoSize = True - Me.chkSeasonNameJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonNameJPG.Location = New System.Drawing.Point(6, 113) - Me.chkSeasonNameJPG.Name = "chkSeasonNameJPG" - Me.chkSeasonNameJPG.Size = New System.Drawing.Size(98, 17) - Me.chkSeasonNameJPG.TabIndex = 6 - Me.chkSeasonNameJPG.Text = ".jpg" - Me.chkSeasonNameJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonNameTBN - ' - Me.chkSeasonNameTBN.AutoSize = True - Me.chkSeasonNameTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonNameTBN.Location = New System.Drawing.Point(6, 97) - Me.chkSeasonNameTBN.Name = "chkSeasonNameTBN" - Me.chkSeasonNameTBN.Size = New System.Drawing.Size(99, 17) - Me.chkSeasonNameTBN.TabIndex = 5 - Me.chkSeasonNameTBN.Text = ".tbn" - Me.chkSeasonNameTBN.UseVisualStyleBackColor = True - ' - 'chkSeasonPosterJPG - ' - Me.chkSeasonPosterJPG.AutoSize = True - Me.chkSeasonPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonPosterJPG.Location = New System.Drawing.Point(6, 81) - Me.chkSeasonPosterJPG.Name = "chkSeasonPosterJPG" - Me.chkSeasonPosterJPG.Size = New System.Drawing.Size(79, 17) - Me.chkSeasonPosterJPG.TabIndex = 4 - Me.chkSeasonPosterJPG.Text = "poster.jpg" - Me.chkSeasonPosterJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonPosterTBN - ' - Me.chkSeasonPosterTBN.AutoSize = True - Me.chkSeasonPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonPosterTBN.Location = New System.Drawing.Point(6, 65) - Me.chkSeasonPosterTBN.Name = "chkSeasonPosterTBN" - Me.chkSeasonPosterTBN.Size = New System.Drawing.Size(80, 17) - Me.chkSeasonPosterTBN.TabIndex = 3 - Me.chkSeasonPosterTBN.Text = "poster.tbn" - Me.chkSeasonPosterTBN.UseVisualStyleBackColor = True - ' - 'chkSeasonXTBN - ' - Me.chkSeasonXTBN.AutoSize = True - Me.chkSeasonXTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonXTBN.Location = New System.Drawing.Point(6, 31) - Me.chkSeasonXTBN.Name = "chkSeasonXTBN" - Me.chkSeasonXTBN.Size = New System.Drawing.Size(89, 17) - Me.chkSeasonXTBN.TabIndex = 1 - Me.chkSeasonXTBN.Text = "seasonX.tbn" - Me.chkSeasonXTBN.UseVisualStyleBackColor = True - ' - 'chkSeasonXXTBN - ' - Me.chkSeasonXXTBN.AutoSize = True - Me.chkSeasonXXTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonXXTBN.Location = New System.Drawing.Point(6, 15) - Me.chkSeasonXXTBN.Name = "chkSeasonXXTBN" - Me.chkSeasonXXTBN.Size = New System.Drawing.Size(95, 17) - Me.chkSeasonXXTBN.TabIndex = 0 - Me.chkSeasonXXTBN.Text = "seasonXX.tbn" - Me.chkSeasonXXTBN.UseVisualStyleBackColor = True - ' - 'gbShowFanart - ' - Me.gbShowFanart.Controls.Add(Me.chkShowDotFanart) - Me.gbShowFanart.Controls.Add(Me.chkShowDashFanart) - Me.gbShowFanart.Controls.Add(Me.chkShowFanartJPG) - Me.gbShowFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbShowFanart.Location = New System.Drawing.Point(5, 120) - Me.gbShowFanart.Name = "gbShowFanart" - Me.gbShowFanart.Size = New System.Drawing.Size(133, 70) - Me.gbShowFanart.TabIndex = 1 - Me.gbShowFanart.TabStop = False - Me.gbShowFanart.Text = "Show Fanart" - ' - 'chkShowDotFanart - ' - Me.chkShowDotFanart.AutoSize = True - Me.chkShowDotFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowDotFanart.Location = New System.Drawing.Point(6, 51) - Me.chkShowDotFanart.Name = "chkShowDotFanart" - Me.chkShowDotFanart.Size = New System.Drawing.Size(124, 17) - Me.chkShowDotFanart.TabIndex = 2 - Me.chkShowDotFanart.Text = ".fanart.jpg" - Me.chkShowDotFanart.UseVisualStyleBackColor = True - ' - 'chkShowDashFanart - ' - Me.chkShowDashFanart.AutoSize = True - Me.chkShowDashFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowDashFanart.Location = New System.Drawing.Point(6, 35) - Me.chkShowDashFanart.Name = "chkShowDashFanart" - Me.chkShowDashFanart.Size = New System.Drawing.Size(125, 17) - Me.chkShowDashFanart.TabIndex = 1 - Me.chkShowDashFanart.Text = "-fanart.jpg" - Me.chkShowDashFanart.UseVisualStyleBackColor = True - ' - 'chkShowFanartJPG - ' - Me.chkShowFanartJPG.AutoSize = True - Me.chkShowFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowFanartJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkShowFanartJPG.Location = New System.Drawing.Point(6, 19) - Me.chkShowFanartJPG.Name = "chkShowFanartJPG" - Me.chkShowFanartJPG.Size = New System.Drawing.Size(77, 17) - Me.chkShowFanartJPG.TabIndex = 0 - Me.chkShowFanartJPG.Text = "fanart.jpg" - Me.chkShowFanartJPG.UseVisualStyleBackColor = True - ' - 'gbShowPosters - ' - Me.gbShowPosters.Controls.Add(Me.chkShowJPG) - Me.gbShowPosters.Controls.Add(Me.chkShowTBN) - Me.gbShowPosters.Controls.Add(Me.chkShowPosterJPG) - Me.gbShowPosters.Controls.Add(Me.chkShowPosterTBN) - Me.gbShowPosters.Controls.Add(Me.chkShowFolderJPG) - Me.gbShowPosters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbShowPosters.Location = New System.Drawing.Point(5, 15) - Me.gbShowPosters.Name = "gbShowPosters" - Me.gbShowPosters.Size = New System.Drawing.Size(133, 99) - Me.gbShowPosters.TabIndex = 0 - Me.gbShowPosters.TabStop = False - Me.gbShowPosters.Text = "Show Posters" - ' - 'chkShowJPG - ' - Me.chkShowJPG.AutoSize = True - Me.chkShowJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowJPG.Location = New System.Drawing.Point(6, 32) - Me.chkShowJPG.Name = "chkShowJPG" - Me.chkShowJPG.Size = New System.Drawing.Size(90, 17) - Me.chkShowJPG.TabIndex = 1 - Me.chkShowJPG.Text = ".jpg" - Me.chkShowJPG.UseVisualStyleBackColor = True - ' - 'chkShowTBN - ' - Me.chkShowTBN.AutoSize = True - Me.chkShowTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowTBN.Location = New System.Drawing.Point(6, 16) - Me.chkShowTBN.Name = "chkShowTBN" - Me.chkShowTBN.Size = New System.Drawing.Size(91, 17) - Me.chkShowTBN.TabIndex = 0 - Me.chkShowTBN.Text = ".tbn" - Me.chkShowTBN.UseVisualStyleBackColor = True - ' - 'chkShowPosterJPG - ' - Me.chkShowPosterJPG.AutoSize = True - Me.chkShowPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkShowPosterJPG.Location = New System.Drawing.Point(6, 64) - Me.chkShowPosterJPG.Name = "chkShowPosterJPG" - Me.chkShowPosterJPG.Size = New System.Drawing.Size(79, 17) - Me.chkShowPosterJPG.TabIndex = 3 - Me.chkShowPosterJPG.Text = "poster.jpg" - Me.chkShowPosterJPG.UseVisualStyleBackColor = True - ' - 'chkShowPosterTBN - ' - Me.chkShowPosterTBN.AutoSize = True - Me.chkShowPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowPosterTBN.Location = New System.Drawing.Point(6, 48) - Me.chkShowPosterTBN.Name = "chkShowPosterTBN" - Me.chkShowPosterTBN.Size = New System.Drawing.Size(80, 17) - Me.chkShowPosterTBN.TabIndex = 2 - Me.chkShowPosterTBN.Text = "poster.tbn" - Me.chkShowPosterTBN.UseVisualStyleBackColor = True - ' - 'chkShowFolderJPG - ' - Me.chkShowFolderJPG.AutoSize = True - Me.chkShowFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowFolderJPG.Location = New System.Drawing.Point(6, 80) - Me.chkShowFolderJPG.Name = "chkShowFolderJPG" - Me.chkShowFolderJPG.Size = New System.Drawing.Size(77, 17) - Me.chkShowFolderJPG.TabIndex = 4 - Me.chkShowFolderJPG.Text = "folder.jpg" - Me.chkShowFolderJPG.UseVisualStyleBackColor = True - ' - 'TabPage4 - ' - Me.TabPage4.Controls.Add(Me.btnGetTVProfiles) - Me.TabPage4.Controls.Add(Me.btnRegexDown) - Me.TabPage4.Controls.Add(Me.btnRegexUp) - Me.TabPage4.Controls.Add(Me.btnResetShowRegex) - Me.TabPage4.Controls.Add(Me.gbShowRegex) - Me.TabPage4.Controls.Add(Me.btnEditShowRegex) - Me.TabPage4.Controls.Add(Me.btnRemoveShowRegex) - Me.TabPage4.Controls.Add(Me.lvShowRegex) - Me.TabPage4.Location = New System.Drawing.Point(4, 22) - Me.TabPage4.Name = "TabPage4" - Me.TabPage4.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage4.Size = New System.Drawing.Size(604, 366) - Me.TabPage4.TabIndex = 1 - Me.TabPage4.Text = "Regex" - Me.TabPage4.UseVisualStyleBackColor = True - ' - 'btnGetTVProfiles - ' - Me.btnGetTVProfiles.Image = CType(resources.GetObject("btnGetTVProfiles.Image"), System.Drawing.Image) - Me.btnGetTVProfiles.Location = New System.Drawing.Point(550, 3) - Me.btnGetTVProfiles.Name = "btnGetTVProfiles" - Me.btnGetTVProfiles.Size = New System.Drawing.Size(23, 23) - Me.btnGetTVProfiles.TabIndex = 1 - Me.btnGetTVProfiles.UseVisualStyleBackColor = True - ' - 'btnRegexDown - ' - Me.btnRegexDown.Image = CType(resources.GetObject("btnRegexDown.Image"), System.Drawing.Image) - Me.btnRegexDown.Location = New System.Drawing.Point(304, 167) - Me.btnRegexDown.Name = "btnRegexDown" - Me.btnRegexDown.Size = New System.Drawing.Size(23, 23) - Me.btnRegexDown.TabIndex = 5 - Me.btnRegexDown.UseVisualStyleBackColor = True - ' - 'btnRegexUp - ' - Me.btnRegexUp.Image = CType(resources.GetObject("btnRegexUp.Image"), System.Drawing.Image) - Me.btnRegexUp.Location = New System.Drawing.Point(280, 167) - Me.btnRegexUp.Name = "btnRegexUp" - Me.btnRegexUp.Size = New System.Drawing.Size(23, 23) - Me.btnRegexUp.TabIndex = 4 - Me.btnRegexUp.UseVisualStyleBackColor = True - ' - 'btnResetShowRegex - ' - Me.btnResetShowRegex.Image = CType(resources.GetObject("btnResetShowRegex.Image"), System.Drawing.Image) - Me.btnResetShowRegex.Location = New System.Drawing.Point(576, 3) - Me.btnResetShowRegex.Name = "btnResetShowRegex" - Me.btnResetShowRegex.Size = New System.Drawing.Size(23, 23) - Me.btnResetShowRegex.TabIndex = 2 - Me.btnResetShowRegex.UseVisualStyleBackColor = True - ' - 'gbShowRegex - ' - Me.gbShowRegex.Controls.Add(Me.btnClearRegex) - Me.gbShowRegex.Controls.Add(Me.lblSeasonMatch) - Me.gbShowRegex.Controls.Add(Me.btnAddShowRegex) - Me.gbShowRegex.Controls.Add(Me.txtSeasonRegex) - Me.gbShowRegex.Controls.Add(Me.lblEpisodeRetrieve) - Me.gbShowRegex.Controls.Add(Me.cboSeasonRetrieve) - Me.gbShowRegex.Controls.Add(Me.lblSeasonRetrieve) - Me.gbShowRegex.Controls.Add(Me.txtEpRegex) - Me.gbShowRegex.Controls.Add(Me.lblEpisodeMatch) - Me.gbShowRegex.Controls.Add(Me.cboEpRetrieve) - Me.gbShowRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.gbShowRegex.Location = New System.Drawing.Point(6, 196) - Me.gbShowRegex.Name = "gbShowRegex" - Me.gbShowRegex.Size = New System.Drawing.Size(592, 148) - Me.gbShowRegex.TabIndex = 7 - Me.gbShowRegex.TabStop = False - Me.gbShowRegex.Text = "Show Match Regex" - ' - 'btnClearRegex - ' - Me.btnClearRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnClearRegex.Image = CType(resources.GetObject("btnClearRegex.Image"), System.Drawing.Image) - Me.btnClearRegex.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnClearRegex.Location = New System.Drawing.Point(10, 116) - Me.btnClearRegex.Name = "btnClearRegex" - Me.btnClearRegex.Size = New System.Drawing.Size(104, 23) - Me.btnClearRegex.TabIndex = 8 - Me.btnClearRegex.Text = "Clear" - Me.btnClearRegex.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnClearRegex.UseVisualStyleBackColor = True - ' - 'lblSeasonMatch - ' - Me.lblSeasonMatch.AutoSize = True - Me.lblSeasonMatch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSeasonMatch.Location = New System.Drawing.Point(8, 25) - Me.lblSeasonMatch.Name = "lblSeasonMatch" - Me.lblSeasonMatch.Size = New System.Drawing.Size(116, 13) - Me.lblSeasonMatch.TabIndex = 0 - Me.lblSeasonMatch.Text = "Season Match Regex:" - ' - 'btnAddShowRegex - ' - Me.btnAddShowRegex.Enabled = False - Me.btnAddShowRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnAddShowRegex.Image = CType(resources.GetObject("btnAddShowRegex.Image"), System.Drawing.Image) - Me.btnAddShowRegex.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnAddShowRegex.Location = New System.Drawing.Point(482, 117) - Me.btnAddShowRegex.Name = "btnAddShowRegex" - Me.btnAddShowRegex.Size = New System.Drawing.Size(104, 23) - Me.btnAddShowRegex.TabIndex = 9 - Me.btnAddShowRegex.Text = "Add Regex" - Me.btnAddShowRegex.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnAddShowRegex.UseVisualStyleBackColor = True - ' - 'txtSeasonRegex - ' - Me.txtSeasonRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtSeasonRegex.Location = New System.Drawing.Point(10, 40) - Me.txtSeasonRegex.Name = "txtSeasonRegex" - Me.txtSeasonRegex.Size = New System.Drawing.Size(417, 22) - Me.txtSeasonRegex.TabIndex = 1 - ' - 'lblEpisodeRetrieve - ' - Me.lblEpisodeRetrieve.AutoSize = True - Me.lblEpisodeRetrieve.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblEpisodeRetrieve.Location = New System.Drawing.Point(441, 69) - Me.lblEpisodeRetrieve.Name = "lblEpisodeRetrieve" - Me.lblEpisodeRetrieve.Size = New System.Drawing.Size(54, 13) - Me.lblEpisodeRetrieve.TabIndex = 6 - Me.lblEpisodeRetrieve.Text = "Apply To:" - ' - 'cboSeasonRetrieve - ' - Me.cboSeasonRetrieve.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cboSeasonRetrieve.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.cboSeasonRetrieve.FormattingEnabled = True - Me.cboSeasonRetrieve.Items.AddRange(New Object() {"Folder Name", "File Name"}) - Me.cboSeasonRetrieve.Location = New System.Drawing.Point(443, 40) - Me.cboSeasonRetrieve.Name = "cboSeasonRetrieve" - Me.cboSeasonRetrieve.Size = New System.Drawing.Size(135, 21) - Me.cboSeasonRetrieve.TabIndex = 3 - ' - 'lblSeasonRetrieve - ' - Me.lblSeasonRetrieve.AutoSize = True - Me.lblSeasonRetrieve.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSeasonRetrieve.Location = New System.Drawing.Point(441, 25) - Me.lblSeasonRetrieve.Name = "lblSeasonRetrieve" - Me.lblSeasonRetrieve.Size = New System.Drawing.Size(54, 13) - Me.lblSeasonRetrieve.TabIndex = 2 - Me.lblSeasonRetrieve.Text = "Apply To:" - ' - 'txtEpRegex - ' - Me.txtEpRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtEpRegex.Location = New System.Drawing.Point(10, 84) - Me.txtEpRegex.Name = "txtEpRegex" - Me.txtEpRegex.Size = New System.Drawing.Size(417, 22) - Me.txtEpRegex.TabIndex = 5 - ' - 'lblEpisodeMatch - ' - Me.lblEpisodeMatch.AutoSize = True - Me.lblEpisodeMatch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblEpisodeMatch.Location = New System.Drawing.Point(8, 69) - Me.lblEpisodeMatch.Name = "lblEpisodeMatch" - Me.lblEpisodeMatch.Size = New System.Drawing.Size(120, 13) - Me.lblEpisodeMatch.TabIndex = 4 - Me.lblEpisodeMatch.Text = "Episode Match Regex:" - ' - 'cboEpRetrieve - ' - Me.cboEpRetrieve.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cboEpRetrieve.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.cboEpRetrieve.FormattingEnabled = True - Me.cboEpRetrieve.Items.AddRange(New Object() {"Folder Name", "File Name", "Season Result"}) - Me.cboEpRetrieve.Location = New System.Drawing.Point(443, 84) - Me.cboEpRetrieve.Name = "cboEpRetrieve" - Me.cboEpRetrieve.Size = New System.Drawing.Size(135, 21) - Me.cboEpRetrieve.TabIndex = 7 - ' - 'btnEditShowRegex - ' - Me.btnEditShowRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnEditShowRegex.Image = CType(resources.GetObject("btnEditShowRegex.Image"), System.Drawing.Image) - Me.btnEditShowRegex.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnEditShowRegex.Location = New System.Drawing.Point(1, 167) - Me.btnEditShowRegex.Name = "btnEditShowRegex" - Me.btnEditShowRegex.Size = New System.Drawing.Size(104, 23) - Me.btnEditShowRegex.TabIndex = 3 - Me.btnEditShowRegex.Text = "Edit Regex" - Me.btnEditShowRegex.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnEditShowRegex.UseVisualStyleBackColor = True - ' - 'btnRemoveShowRegex - ' - Me.btnRemoveShowRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnRemoveShowRegex.Image = CType(resources.GetObject("btnRemoveShowRegex.Image"), System.Drawing.Image) - Me.btnRemoveShowRegex.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnRemoveShowRegex.Location = New System.Drawing.Point(494, 167) - Me.btnRemoveShowRegex.Name = "btnRemoveShowRegex" - Me.btnRemoveShowRegex.Size = New System.Drawing.Size(104, 23) - Me.btnRemoveShowRegex.TabIndex = 6 - Me.btnRemoveShowRegex.Text = "Remove" - Me.btnRemoveShowRegex.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnRemoveShowRegex.UseVisualStyleBackColor = True - ' - 'lvShowRegex - ' - Me.lvShowRegex.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colRegID, Me.colSeason, Me.colSeasonApply, Me.colEpisode, Me.colEpApply}) - Me.lvShowRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lvShowRegex.FullRowSelect = True - Me.lvShowRegex.HideSelection = False - Me.lvShowRegex.Location = New System.Drawing.Point(0, 28) - Me.lvShowRegex.Name = "lvShowRegex" - Me.lvShowRegex.Size = New System.Drawing.Size(598, 135) - Me.lvShowRegex.Sorting = System.Windows.Forms.SortOrder.Ascending - Me.lvShowRegex.TabIndex = 0 - Me.lvShowRegex.UseCompatibleStateImageBehavior = False - Me.lvShowRegex.View = System.Windows.Forms.View.Details - ' - 'colRegID - ' - Me.colRegID.DisplayIndex = 4 - Me.colRegID.Width = 0 - ' - 'colSeason - ' - Me.colSeason.DisplayIndex = 0 - Me.colSeason.Text = "Season Regex" - Me.colSeason.Width = 224 - ' - 'colSeasonApply - ' - Me.colSeasonApply.DisplayIndex = 1 - Me.colSeasonApply.Text = "Apply To" - Me.colSeasonApply.Width = 70 - ' - 'colEpisode - ' - Me.colEpisode.DisplayIndex = 2 - Me.colEpisode.Text = "Episode Regex" - Me.colEpisode.Width = 219 - ' - 'colEpApply - ' - Me.colEpApply.DisplayIndex = 3 - Me.colEpApply.Text = "Apply To" - Me.colEpApply.Width = 70 - ' - 'pnlShows - ' - Me.pnlShows.BackColor = System.Drawing.Color.White - Me.pnlShows.Controls.Add(Me.gbTVListOptions) - Me.pnlShows.Controls.Add(Me.gbTVMisc) - Me.pnlShows.Controls.Add(Me.gbEpFilter) - Me.pnlShows.Controls.Add(Me.gbShowFilter) - Me.pnlShows.Location = New System.Drawing.Point(654, 767) - Me.pnlShows.Name = "pnlShows" - Me.pnlShows.Size = New System.Drawing.Size(617, 400) - Me.pnlShows.TabIndex = 20 - Me.pnlShows.Visible = False - ' - 'gbTVListOptions - ' - Me.gbTVListOptions.Controls.Add(Me.chkDisplayMissingEpisodes) - Me.gbTVListOptions.Controls.Add(Me.gbEpisodeListOptions) - Me.gbTVListOptions.Controls.Add(Me.gbSeasonListOptions) - Me.gbTVListOptions.Controls.Add(Me.gbShowListOptions) - Me.gbTVListOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbTVListOptions.Location = New System.Drawing.Point(6, 150) - Me.gbTVListOptions.Name = "gbTVListOptions" - Me.gbTVListOptions.Size = New System.Drawing.Size(219, 245) - Me.gbTVListOptions.TabIndex = 1 - Me.gbTVListOptions.TabStop = False - Me.gbTVListOptions.Text = "Media List Options" - ' - 'chkDisplayMissingEpisodes - ' - Me.chkDisplayMissingEpisodes.AutoSize = True - Me.chkDisplayMissingEpisodes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkDisplayMissingEpisodes.Location = New System.Drawing.Point(10, 224) - Me.chkDisplayMissingEpisodes.Name = "chkDisplayMissingEpisodes" - Me.chkDisplayMissingEpisodes.Size = New System.Drawing.Size(155, 17) - Me.chkDisplayMissingEpisodes.TabIndex = 3 - Me.chkDisplayMissingEpisodes.Text = "Display Missing Episodes" - Me.chkDisplayMissingEpisodes.UseVisualStyleBackColor = True - ' - 'gbEpisodeListOptions - ' - Me.gbEpisodeListOptions.Controls.Add(Me.chkEpisodeNfoCol) - Me.gbEpisodeListOptions.Controls.Add(Me.chkEpisodeFanartCol) - Me.gbEpisodeListOptions.Controls.Add(Me.chkEpisodePosterCol) - Me.gbEpisodeListOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbEpisodeListOptions.Location = New System.Drawing.Point(10, 143) - Me.gbEpisodeListOptions.Name = "gbEpisodeListOptions" - Me.gbEpisodeListOptions.Size = New System.Drawing.Size(199, 68) - Me.gbEpisodeListOptions.TabIndex = 2 - Me.gbEpisodeListOptions.TabStop = False - Me.gbEpisodeListOptions.Text = "Episodes" - ' - 'chkEpisodeNfoCol - ' - Me.chkEpisodeNfoCol.AutoSize = True - Me.chkEpisodeNfoCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodeNfoCol.Location = New System.Drawing.Point(7, 48) - Me.chkEpisodeNfoCol.Name = "chkEpisodeNfoCol" - Me.chkEpisodeNfoCol.Size = New System.Drawing.Size(117, 17) - Me.chkEpisodeNfoCol.TabIndex = 2 - Me.chkEpisodeNfoCol.Text = "Hide Info Column" - Me.chkEpisodeNfoCol.UseVisualStyleBackColor = True - ' - 'chkEpisodeFanartCol - ' - Me.chkEpisodeFanartCol.AutoSize = True - Me.chkEpisodeFanartCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodeFanartCol.Location = New System.Drawing.Point(7, 32) - Me.chkEpisodeFanartCol.Name = "chkEpisodeFanartCol" - Me.chkEpisodeFanartCol.Size = New System.Drawing.Size(129, 17) - Me.chkEpisodeFanartCol.TabIndex = 1 - Me.chkEpisodeFanartCol.Text = "Hide Fanart Column" - Me.chkEpisodeFanartCol.UseVisualStyleBackColor = True - ' - 'chkEpisodePosterCol - ' - Me.chkEpisodePosterCol.AutoSize = True - Me.chkEpisodePosterCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodePosterCol.Location = New System.Drawing.Point(7, 16) - Me.chkEpisodePosterCol.Name = "chkEpisodePosterCol" - Me.chkEpisodePosterCol.Size = New System.Drawing.Size(128, 17) - Me.chkEpisodePosterCol.TabIndex = 0 - Me.chkEpisodePosterCol.Text = "Hide Poster Column" - Me.chkEpisodePosterCol.UseVisualStyleBackColor = True - ' - 'gbSeasonListOptions - ' - Me.gbSeasonListOptions.Controls.Add(Me.chkSeasonFanartCol) - Me.gbSeasonListOptions.Controls.Add(Me.chkSeasonPosterCol) - Me.gbSeasonListOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbSeasonListOptions.Location = New System.Drawing.Point(10, 87) - Me.gbSeasonListOptions.Name = "gbSeasonListOptions" - Me.gbSeasonListOptions.Size = New System.Drawing.Size(199, 52) - Me.gbSeasonListOptions.TabIndex = 1 - Me.gbSeasonListOptions.TabStop = False - Me.gbSeasonListOptions.Text = "Seasons" - ' - 'chkSeasonFanartCol - ' - Me.chkSeasonFanartCol.AutoSize = True - Me.chkSeasonFanartCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonFanartCol.Location = New System.Drawing.Point(7, 32) - Me.chkSeasonFanartCol.Name = "chkSeasonFanartCol" - Me.chkSeasonFanartCol.Size = New System.Drawing.Size(129, 17) - Me.chkSeasonFanartCol.TabIndex = 1 - Me.chkSeasonFanartCol.Text = "Hide Fanart Column" - Me.chkSeasonFanartCol.UseVisualStyleBackColor = True - ' - 'chkSeasonPosterCol - ' - Me.chkSeasonPosterCol.AutoSize = True - Me.chkSeasonPosterCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonPosterCol.Location = New System.Drawing.Point(7, 16) - Me.chkSeasonPosterCol.Name = "chkSeasonPosterCol" - Me.chkSeasonPosterCol.Size = New System.Drawing.Size(128, 17) - Me.chkSeasonPosterCol.TabIndex = 0 - Me.chkSeasonPosterCol.Text = "Hide Poster Column" - Me.chkSeasonPosterCol.UseVisualStyleBackColor = True - ' - 'gbShowListOptions - ' - Me.gbShowListOptions.Controls.Add(Me.chkShowNfoCol) - Me.gbShowListOptions.Controls.Add(Me.chkShowFanartCol) - Me.gbShowListOptions.Controls.Add(Me.chkShowPosterCol) - Me.gbShowListOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbShowListOptions.Location = New System.Drawing.Point(9, 16) - Me.gbShowListOptions.Name = "gbShowListOptions" - Me.gbShowListOptions.Size = New System.Drawing.Size(199, 68) - Me.gbShowListOptions.TabIndex = 0 - Me.gbShowListOptions.TabStop = False - Me.gbShowListOptions.Text = "Shows" - ' - 'chkShowNfoCol - ' - Me.chkShowNfoCol.AutoSize = True - Me.chkShowNfoCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowNfoCol.Location = New System.Drawing.Point(7, 48) - Me.chkShowNfoCol.Name = "chkShowNfoCol" - Me.chkShowNfoCol.Size = New System.Drawing.Size(117, 17) - Me.chkShowNfoCol.TabIndex = 2 - Me.chkShowNfoCol.Text = "Hide Info Column" - Me.chkShowNfoCol.UseVisualStyleBackColor = True - ' - 'chkShowFanartCol - ' - Me.chkShowFanartCol.AutoSize = True - Me.chkShowFanartCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowFanartCol.Location = New System.Drawing.Point(7, 32) - Me.chkShowFanartCol.Name = "chkShowFanartCol" - Me.chkShowFanartCol.Size = New System.Drawing.Size(129, 17) - Me.chkShowFanartCol.TabIndex = 1 - Me.chkShowFanartCol.Text = "Hide Fanart Column" - Me.chkShowFanartCol.UseVisualStyleBackColor = True - ' - 'chkShowPosterCol - ' - Me.chkShowPosterCol.AutoSize = True - Me.chkShowPosterCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowPosterCol.Location = New System.Drawing.Point(7, 16) - Me.chkShowPosterCol.Name = "chkShowPosterCol" - Me.chkShowPosterCol.Size = New System.Drawing.Size(128, 17) - Me.chkShowPosterCol.TabIndex = 0 - Me.chkShowPosterCol.Text = "Hide Poster Column" - Me.chkShowPosterCol.UseVisualStyleBackColor = True - ' - 'gbTVMisc - ' - Me.gbTVMisc.Controls.Add(Me.chkMarkNewShows) - Me.gbTVMisc.Controls.Add(Me.chkMarkNewEpisodes) - Me.gbTVMisc.Controls.Add(Me.chkDisplayAllSeason) - Me.gbTVMisc.Controls.Add(Me.lblRatingRegion) - Me.gbTVMisc.Controls.Add(Me.cbRatingRegion) - Me.gbTVMisc.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbTVMisc.Location = New System.Drawing.Point(6, 7) - Me.gbTVMisc.Name = "gbTVMisc" - Me.gbTVMisc.Size = New System.Drawing.Size(219, 142) - Me.gbTVMisc.TabIndex = 0 - Me.gbTVMisc.TabStop = False - Me.gbTVMisc.Text = "Miscellaneous" - ' - 'chkMarkNewShows - ' - Me.chkMarkNewShows.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMarkNewShows.Location = New System.Drawing.Point(8, 90) - Me.chkMarkNewShows.Name = "chkMarkNewShows" - Me.chkMarkNewShows.Size = New System.Drawing.Size(204, 17) - Me.chkMarkNewShows.TabIndex = 3 - Me.chkMarkNewShows.Text = "Mark New Shows" - Me.chkMarkNewShows.UseVisualStyleBackColor = True - ' - 'chkMarkNewEpisodes - ' - Me.chkMarkNewEpisodes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMarkNewEpisodes.Location = New System.Drawing.Point(8, 113) - Me.chkMarkNewEpisodes.Name = "chkMarkNewEpisodes" - Me.chkMarkNewEpisodes.Size = New System.Drawing.Size(204, 17) - Me.chkMarkNewEpisodes.TabIndex = 4 - Me.chkMarkNewEpisodes.Text = "Mark New Episodes" - Me.chkMarkNewEpisodes.UseVisualStyleBackColor = True - ' - 'chkDisplayAllSeason - ' - Me.chkDisplayAllSeason.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkDisplayAllSeason.Location = New System.Drawing.Point(8, 67) - Me.chkDisplayAllSeason.Name = "chkDisplayAllSeason" - Me.chkDisplayAllSeason.Size = New System.Drawing.Size(204, 17) - Me.chkDisplayAllSeason.TabIndex = 2 - Me.chkDisplayAllSeason.Text = "Display All Season Poster" - Me.chkDisplayAllSeason.UseVisualStyleBackColor = True - ' - 'lblRatingRegion - ' - Me.lblRatingRegion.AutoSize = True - Me.lblRatingRegion.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblRatingRegion.Location = New System.Drawing.Point(8, 21) - Me.lblRatingRegion.Name = "lblRatingRegion" - Me.lblRatingRegion.Size = New System.Drawing.Size(99, 13) - Me.lblRatingRegion.TabIndex = 0 - Me.lblRatingRegion.Text = "TV Rating Region:" - ' - 'cbRatingRegion - ' - Me.cbRatingRegion.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbRatingRegion.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbRatingRegion.FormattingEnabled = True - Me.cbRatingRegion.Location = New System.Drawing.Point(8, 36) - Me.cbRatingRegion.Name = "cbRatingRegion" - Me.cbRatingRegion.Size = New System.Drawing.Size(163, 21) - Me.cbRatingRegion.TabIndex = 1 - ' - 'gbEpFilter - ' - Me.gbEpFilter.Controls.Add(Me.btnResetEpFilter) - Me.gbEpFilter.Controls.Add(Me.chkNoFilterEpisode) - Me.gbEpFilter.Controls.Add(Me.btnEpFilterDown) - Me.gbEpFilter.Controls.Add(Me.btnEpFilterUp) - Me.gbEpFilter.Controls.Add(Me.chkEpProperCase) - Me.gbEpFilter.Controls.Add(Me.btnRemoveEpFilter) - Me.gbEpFilter.Controls.Add(Me.btnAddEpFilter) - Me.gbEpFilter.Controls.Add(Me.txtEpFilter) - Me.gbEpFilter.Controls.Add(Me.lstEpFilters) - Me.gbEpFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbEpFilter.Location = New System.Drawing.Point(229, 185) - Me.gbEpFilter.Name = "gbEpFilter" - Me.gbEpFilter.Size = New System.Drawing.Size(382, 205) - Me.gbEpFilter.TabIndex = 3 - Me.gbEpFilter.TabStop = False - Me.gbEpFilter.Text = "Episode Folder/File Name Filters" - ' - 'btnResetEpFilter - ' - Me.btnResetEpFilter.Image = CType(resources.GetObject("btnResetEpFilter.Image"), System.Drawing.Image) - Me.btnResetEpFilter.Location = New System.Drawing.Point(354, 38) - Me.btnResetEpFilter.Name = "btnResetEpFilter" - Me.btnResetEpFilter.Size = New System.Drawing.Size(23, 23) - Me.btnResetEpFilter.TabIndex = 3 - Me.btnResetEpFilter.UseVisualStyleBackColor = True - ' - 'chkNoFilterEpisode - ' - Me.chkNoFilterEpisode.CheckAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkNoFilterEpisode.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkNoFilterEpisode.Location = New System.Drawing.Point(6, 15) - Me.chkNoFilterEpisode.Name = "chkNoFilterEpisode" - Me.chkNoFilterEpisode.Size = New System.Drawing.Size(371, 21) - Me.chkNoFilterEpisode.TabIndex = 0 - Me.chkNoFilterEpisode.Text = "Build Episode Title Instead of Filtering" - Me.chkNoFilterEpisode.TextAlign = System.Drawing.ContentAlignment.TopLeft - Me.chkNoFilterEpisode.UseVisualStyleBackColor = True - ' - 'btnEpFilterDown - ' - Me.btnEpFilterDown.Image = CType(resources.GetObject("btnEpFilterDown.Image"), System.Drawing.Image) - Me.btnEpFilterDown.Location = New System.Drawing.Point(320, 176) - Me.btnEpFilterDown.Name = "btnEpFilterDown" - Me.btnEpFilterDown.Size = New System.Drawing.Size(23, 23) - Me.btnEpFilterDown.TabIndex = 7 - Me.btnEpFilterDown.UseVisualStyleBackColor = True - ' - 'btnEpFilterUp - ' - Me.btnEpFilterUp.Image = CType(resources.GetObject("btnEpFilterUp.Image"), System.Drawing.Image) - Me.btnEpFilterUp.Location = New System.Drawing.Point(296, 176) - Me.btnEpFilterUp.Name = "btnEpFilterUp" - Me.btnEpFilterUp.Size = New System.Drawing.Size(23, 23) - Me.btnEpFilterUp.TabIndex = 6 - Me.btnEpFilterUp.UseVisualStyleBackColor = True - ' - 'chkEpProperCase - ' - Me.chkEpProperCase.AutoSize = True - Me.chkEpProperCase.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpProperCase.Location = New System.Drawing.Point(6, 47) - Me.chkEpProperCase.Name = "chkEpProperCase" - Me.chkEpProperCase.Size = New System.Drawing.Size(181, 17) - Me.chkEpProperCase.TabIndex = 1 - Me.chkEpProperCase.Text = "Convert Names to Proper Case" - Me.chkEpProperCase.UseVisualStyleBackColor = True - ' - 'btnRemoveEpFilter - ' - Me.btnRemoveEpFilter.Image = CType(resources.GetObject("btnRemoveEpFilter.Image"), System.Drawing.Image) - Me.btnRemoveEpFilter.Location = New System.Drawing.Point(354, 176) - Me.btnRemoveEpFilter.Name = "btnRemoveEpFilter" - Me.btnRemoveEpFilter.Size = New System.Drawing.Size(23, 23) - Me.btnRemoveEpFilter.TabIndex = 8 - Me.btnRemoveEpFilter.UseVisualStyleBackColor = True - ' - 'btnAddEpFilter - ' - Me.btnAddEpFilter.Image = CType(resources.GetObject("btnAddEpFilter.Image"), System.Drawing.Image) - Me.btnAddEpFilter.Location = New System.Drawing.Point(260, 176) - Me.btnAddEpFilter.Name = "btnAddEpFilter" - Me.btnAddEpFilter.Size = New System.Drawing.Size(23, 23) - Me.btnAddEpFilter.TabIndex = 5 - Me.btnAddEpFilter.UseVisualStyleBackColor = True - ' - 'txtEpFilter - ' - Me.txtEpFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtEpFilter.Location = New System.Drawing.Point(6, 177) - Me.txtEpFilter.Name = "txtEpFilter" - Me.txtEpFilter.Size = New System.Drawing.Size(252, 22) - Me.txtEpFilter.TabIndex = 4 - ' - 'lstEpFilters - ' - Me.lstEpFilters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lstEpFilters.FormattingEnabled = True - Me.lstEpFilters.Location = New System.Drawing.Point(6, 64) - Me.lstEpFilters.Name = "lstEpFilters" - Me.lstEpFilters.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.lstEpFilters.Size = New System.Drawing.Size(371, 95) - Me.lstEpFilters.TabIndex = 2 - ' - 'gbShowFilter - ' - Me.gbShowFilter.Controls.Add(Me.btnResetShowFilters) - Me.gbShowFilter.Controls.Add(Me.btnShowFilterDown) - Me.gbShowFilter.Controls.Add(Me.btnShowFilterUp) - Me.gbShowFilter.Controls.Add(Me.chkShowProperCase) - Me.gbShowFilter.Controls.Add(Me.btnRemoveShowFilter) - Me.gbShowFilter.Controls.Add(Me.btnAddShowFilter) - Me.gbShowFilter.Controls.Add(Me.txtShowFilter) - Me.gbShowFilter.Controls.Add(Me.lstShowFilters) - Me.gbShowFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbShowFilter.Location = New System.Drawing.Point(229, 7) - Me.gbShowFilter.Name = "gbShowFilter" - Me.gbShowFilter.Size = New System.Drawing.Size(382, 175) - Me.gbShowFilter.TabIndex = 2 - Me.gbShowFilter.TabStop = False - Me.gbShowFilter.Text = "Show Folder/File Name Filters" - ' - 'btnResetShowFilters - ' - Me.btnResetShowFilters.Image = CType(resources.GetObject("btnResetShowFilters.Image"), System.Drawing.Image) - Me.btnResetShowFilters.Location = New System.Drawing.Point(354, 9) - Me.btnResetShowFilters.Name = "btnResetShowFilters" - Me.btnResetShowFilters.Size = New System.Drawing.Size(23, 23) - Me.btnResetShowFilters.TabIndex = 2 - Me.btnResetShowFilters.UseVisualStyleBackColor = True - ' - 'btnShowFilterDown - ' - Me.btnShowFilterDown.Image = CType(resources.GetObject("btnShowFilterDown.Image"), System.Drawing.Image) - Me.btnShowFilterDown.Location = New System.Drawing.Point(320, 146) - Me.btnShowFilterDown.Name = "btnShowFilterDown" - Me.btnShowFilterDown.Size = New System.Drawing.Size(23, 23) - Me.btnShowFilterDown.TabIndex = 6 - Me.btnShowFilterDown.UseVisualStyleBackColor = True - ' - 'btnShowFilterUp - ' - Me.btnShowFilterUp.Image = CType(resources.GetObject("btnShowFilterUp.Image"), System.Drawing.Image) - Me.btnShowFilterUp.Location = New System.Drawing.Point(296, 146) - Me.btnShowFilterUp.Name = "btnShowFilterUp" - Me.btnShowFilterUp.Size = New System.Drawing.Size(23, 23) - Me.btnShowFilterUp.TabIndex = 5 - Me.btnShowFilterUp.UseVisualStyleBackColor = True - ' - 'chkShowProperCase - ' - Me.chkShowProperCase.AutoSize = True - Me.chkShowProperCase.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowProperCase.Location = New System.Drawing.Point(6, 17) - Me.chkShowProperCase.Name = "chkShowProperCase" - Me.chkShowProperCase.Size = New System.Drawing.Size(181, 17) - Me.chkShowProperCase.TabIndex = 0 - Me.chkShowProperCase.Text = "Convert Names to Proper Case" - Me.chkShowProperCase.UseVisualStyleBackColor = True - ' - 'btnRemoveShowFilter - ' - Me.btnRemoveShowFilter.Image = CType(resources.GetObject("btnRemoveShowFilter.Image"), System.Drawing.Image) - Me.btnRemoveShowFilter.Location = New System.Drawing.Point(354, 146) - Me.btnRemoveShowFilter.Name = "btnRemoveShowFilter" - Me.btnRemoveShowFilter.Size = New System.Drawing.Size(23, 23) - Me.btnRemoveShowFilter.TabIndex = 7 - Me.btnRemoveShowFilter.UseVisualStyleBackColor = True - ' - 'btnAddShowFilter - ' - Me.btnAddShowFilter.Image = CType(resources.GetObject("btnAddShowFilter.Image"), System.Drawing.Image) - Me.btnAddShowFilter.Location = New System.Drawing.Point(260, 146) - Me.btnAddShowFilter.Name = "btnAddShowFilter" - Me.btnAddShowFilter.Size = New System.Drawing.Size(23, 23) - Me.btnAddShowFilter.TabIndex = 4 - Me.btnAddShowFilter.UseVisualStyleBackColor = True - ' - 'txtShowFilter - ' - Me.txtShowFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtShowFilter.Location = New System.Drawing.Point(6, 147) - Me.txtShowFilter.Name = "txtShowFilter" - Me.txtShowFilter.Size = New System.Drawing.Size(252, 22) - Me.txtShowFilter.TabIndex = 3 - ' - 'lstShowFilters - ' - Me.lstShowFilters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lstShowFilters.FormattingEnabled = True - Me.lstShowFilters.Location = New System.Drawing.Point(6, 35) - Me.lstShowFilters.Name = "lstShowFilters" - Me.lstShowFilters.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended - Me.lstShowFilters.Size = New System.Drawing.Size(371, 95) - Me.lstShowFilters.TabIndex = 1 - ' - 'pnlTVImages - ' - Me.pnlTVImages.BackColor = System.Drawing.Color.White - Me.pnlTVImages.Controls.Add(Me.TabControl3) - Me.pnlTVImages.Location = New System.Drawing.Point(913, 685) - Me.pnlTVImages.Name = "pnlTVImages" - Me.pnlTVImages.Size = New System.Drawing.Size(617, 402) - Me.pnlTVImages.TabIndex = 16 - Me.pnlTVImages.Visible = False - ' - 'TabControl3 - ' - Me.TabControl3.Controls.Add(Me.TabPage5) - Me.TabControl3.Controls.Add(Me.TabPage6) - Me.TabControl3.Controls.Add(Me.TabPage7) - Me.TabControl3.Controls.Add(Me.TabPage8) - Me.TabControl3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.TabControl3.Location = New System.Drawing.Point(5, 6) - Me.TabControl3.Name = "TabControl3" - Me.TabControl3.SelectedIndex = 0 - Me.TabControl3.Size = New System.Drawing.Size(609, 397) - Me.TabControl3.TabIndex = 0 - ' - 'TabPage5 - ' - Me.TabPage5.Controls.Add(Me.gbAllSPosterOpts) - Me.TabPage5.Controls.Add(Me.gbShowPosterOpts) - Me.TabPage5.Controls.Add(Me.gbShowFanartOpts) - Me.TabPage5.Location = New System.Drawing.Point(4, 22) - Me.TabPage5.Name = "TabPage5" - Me.TabPage5.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage5.Size = New System.Drawing.Size(601, 371) - Me.TabPage5.TabIndex = 0 - Me.TabPage5.Text = "TV Show" - Me.TabPage5.UseVisualStyleBackColor = True - ' - 'gbAllSPosterOpts - ' - Me.gbAllSPosterOpts.Controls.Add(Me.rbAllSPoster) - Me.gbAllSPosterOpts.Controls.Add(Me.rbAllSBanner) - Me.gbAllSPosterOpts.Controls.Add(Me.txtAllSPosterWidth) - Me.gbAllSPosterOpts.Controls.Add(Me.txtAllSPosterHeight) - Me.gbAllSPosterOpts.Controls.Add(Me.lblAllSPosterQual) - Me.gbAllSPosterOpts.Controls.Add(Me.tbAllSPosterQual) - Me.gbAllSPosterOpts.Controls.Add(Me.lblAllSPosterQ) - Me.gbAllSPosterOpts.Controls.Add(Me.lblAllSPosterWidth) - Me.gbAllSPosterOpts.Controls.Add(Me.lblAllSPosterHeight) - Me.gbAllSPosterOpts.Controls.Add(Me.chkResizeAllSPoster) - Me.gbAllSPosterOpts.Controls.Add(Me.lblAllSPosterSize) - Me.gbAllSPosterOpts.Controls.Add(Me.cbAllSPosterSize) - Me.gbAllSPosterOpts.Controls.Add(Me.chkOverwriteAllSPoster) - Me.gbAllSPosterOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbAllSPosterOpts.Location = New System.Drawing.Point(238, 5) - Me.gbAllSPosterOpts.Name = "gbAllSPosterOpts" - Me.gbAllSPosterOpts.Size = New System.Drawing.Size(228, 191) - Me.gbAllSPosterOpts.TabIndex = 0 - Me.gbAllSPosterOpts.TabStop = False - Me.gbAllSPosterOpts.Text = "All Season Posters" - ' - 'rbAllSPoster - ' - Me.rbAllSPoster.AutoSize = True - Me.rbAllSPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.rbAllSPoster.Location = New System.Drawing.Point(93, 30) - Me.rbAllSPoster.Name = "rbAllSPoster" - Me.rbAllSPoster.Size = New System.Drawing.Size(57, 17) - Me.rbAllSPoster.TabIndex = 2 - Me.rbAllSPoster.TabStop = True - Me.rbAllSPoster.Text = "Poster" - Me.rbAllSPoster.UseVisualStyleBackColor = True - ' - 'rbAllSBanner - ' - Me.rbAllSBanner.AutoSize = True - Me.rbAllSBanner.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.rbAllSBanner.Location = New System.Drawing.Point(8, 30) - Me.rbAllSBanner.Name = "rbAllSBanner" - Me.rbAllSBanner.Size = New System.Drawing.Size(62, 17) - Me.rbAllSBanner.TabIndex = 1 - Me.rbAllSBanner.TabStop = True - Me.rbAllSBanner.Text = "Banner" - Me.rbAllSBanner.UseVisualStyleBackColor = True - ' - 'txtAllSPosterWidth - ' - Me.txtAllSPosterWidth.Enabled = False - Me.txtAllSPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtAllSPosterWidth.Location = New System.Drawing.Point(71, 113) - Me.txtAllSPosterWidth.Name = "txtAllSPosterWidth" - Me.txtAllSPosterWidth.Size = New System.Drawing.Size(40, 22) - Me.txtAllSPosterWidth.TabIndex = 7 - ' - 'txtAllSPosterHeight - ' - Me.txtAllSPosterHeight.Enabled = False - Me.txtAllSPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtAllSPosterHeight.Location = New System.Drawing.Point(182, 113) - Me.txtAllSPosterHeight.Name = "txtAllSPosterHeight" - Me.txtAllSPosterHeight.Size = New System.Drawing.Size(40, 22) - Me.txtAllSPosterHeight.TabIndex = 9 - ' - 'lblAllSPosterQual - ' - Me.lblAllSPosterQual.AutoSize = True - Me.lblAllSPosterQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblAllSPosterQual.Location = New System.Drawing.Point(183, 161) - Me.lblAllSPosterQual.Name = "lblAllSPosterQual" - Me.lblAllSPosterQual.Size = New System.Drawing.Size(29, 17) - Me.lblAllSPosterQual.TabIndex = 12 - Me.lblAllSPosterQual.Text = "100" - ' - 'tbAllSPosterQual - ' - Me.tbAllSPosterQual.AutoSize = False - Me.tbAllSPosterQual.BackColor = System.Drawing.Color.White - Me.tbAllSPosterQual.LargeChange = 10 - Me.tbAllSPosterQual.Location = New System.Drawing.Point(7, 154) - Me.tbAllSPosterQual.Maximum = 100 - Me.tbAllSPosterQual.Name = "tbAllSPosterQual" - Me.tbAllSPosterQual.Size = New System.Drawing.Size(179, 27) - Me.tbAllSPosterQual.TabIndex = 11 - Me.tbAllSPosterQual.TickFrequency = 10 - Me.tbAllSPosterQual.Value = 100 - ' - 'lblAllSPosterQ - ' - Me.lblAllSPosterQ.AutoSize = True - Me.lblAllSPosterQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblAllSPosterQ.Location = New System.Drawing.Point(3, 141) - Me.lblAllSPosterQ.Name = "lblAllSPosterQ" - Me.lblAllSPosterQ.Size = New System.Drawing.Size(47, 13) - Me.lblAllSPosterQ.TabIndex = 10 - Me.lblAllSPosterQ.Text = "Quality:" - ' - 'lblAllSPosterWidth - ' - Me.lblAllSPosterWidth.AutoSize = True - Me.lblAllSPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblAllSPosterWidth.Location = New System.Drawing.Point(3, 117) - Me.lblAllSPosterWidth.Name = "lblAllSPosterWidth" - Me.lblAllSPosterWidth.Size = New System.Drawing.Size(66, 13) - Me.lblAllSPosterWidth.TabIndex = 6 - Me.lblAllSPosterWidth.Text = "Max Width:" - ' - 'lblAllSPosterHeight - ' - Me.lblAllSPosterHeight.AutoSize = True - Me.lblAllSPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblAllSPosterHeight.Location = New System.Drawing.Point(112, 117) - Me.lblAllSPosterHeight.Name = "lblAllSPosterHeight" - Me.lblAllSPosterHeight.Size = New System.Drawing.Size(69, 13) - Me.lblAllSPosterHeight.TabIndex = 8 - Me.lblAllSPosterHeight.Text = "Max Height:" - ' - 'chkResizeAllSPoster - ' - Me.chkResizeAllSPoster.AutoSize = True - Me.chkResizeAllSPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkResizeAllSPoster.Location = New System.Drawing.Point(6, 92) - Me.chkResizeAllSPoster.Name = "chkResizeAllSPoster" - Me.chkResizeAllSPoster.Size = New System.Drawing.Size(133, 17) - Me.chkResizeAllSPoster.TabIndex = 5 - Me.chkResizeAllSPoster.Text = "Automatically Resize:" - Me.chkResizeAllSPoster.UseVisualStyleBackColor = True - ' - 'lblAllSPosterSize - ' - Me.lblAllSPosterSize.AutoSize = True - Me.lblAllSPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblAllSPosterSize.Location = New System.Drawing.Point(3, 14) - Me.lblAllSPosterSize.Name = "lblAllSPosterSize" - Me.lblAllSPosterSize.Size = New System.Drawing.Size(83, 13) - Me.lblAllSPosterSize.TabIndex = 0 - Me.lblAllSPosterSize.Text = "Preferred Type:" - ' - 'cbAllSPosterSize - ' - Me.cbAllSPosterSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbAllSPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbAllSPosterSize.FormattingEnabled = True - Me.cbAllSPosterSize.Location = New System.Drawing.Point(6, 52) - Me.cbAllSPosterSize.Name = "cbAllSPosterSize" - Me.cbAllSPosterSize.Size = New System.Drawing.Size(148, 21) - Me.cbAllSPosterSize.TabIndex = 3 - ' - 'chkOverwriteAllSPoster - ' - Me.chkOverwriteAllSPoster.AutoSize = True - Me.chkOverwriteAllSPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOverwriteAllSPoster.Location = New System.Drawing.Point(6, 76) - Me.chkOverwriteAllSPoster.Name = "chkOverwriteAllSPoster" - Me.chkOverwriteAllSPoster.Size = New System.Drawing.Size(119, 17) - Me.chkOverwriteAllSPoster.TabIndex = 4 - Me.chkOverwriteAllSPoster.Text = "Overwrite Existing" - Me.chkOverwriteAllSPoster.UseVisualStyleBackColor = True - ' - 'gbShowPosterOpts - ' - Me.gbShowPosterOpts.Controls.Add(Me.rbPoster) - Me.gbShowPosterOpts.Controls.Add(Me.rbBanner) - Me.gbShowPosterOpts.Controls.Add(Me.txtShowPosterWidth) - Me.gbShowPosterOpts.Controls.Add(Me.txtShowPosterHeight) - Me.gbShowPosterOpts.Controls.Add(Me.lblShowPosterQual) - Me.gbShowPosterOpts.Controls.Add(Me.tbShowPosterQual) - Me.gbShowPosterOpts.Controls.Add(Me.lblShowPosterQ) - Me.gbShowPosterOpts.Controls.Add(Me.lblShowPosterWidth) - Me.gbShowPosterOpts.Controls.Add(Me.lblShowPosterHeight) - Me.gbShowPosterOpts.Controls.Add(Me.chkResizeShowPoster) - Me.gbShowPosterOpts.Controls.Add(Me.lblShowPosterSize) - Me.gbShowPosterOpts.Controls.Add(Me.cbShowPosterSize) - Me.gbShowPosterOpts.Controls.Add(Me.chkOverwriteShowPoster) - Me.gbShowPosterOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbShowPosterOpts.Location = New System.Drawing.Point(4, 5) - Me.gbShowPosterOpts.Name = "gbShowPosterOpts" - Me.gbShowPosterOpts.Size = New System.Drawing.Size(228, 191) - Me.gbShowPosterOpts.TabIndex = 0 - Me.gbShowPosterOpts.TabStop = False - Me.gbShowPosterOpts.Text = "Poster" - ' - 'rbPoster - ' - Me.rbPoster.AutoSize = True - Me.rbPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.rbPoster.Location = New System.Drawing.Point(93, 30) - Me.rbPoster.Name = "rbPoster" - Me.rbPoster.Size = New System.Drawing.Size(57, 17) - Me.rbPoster.TabIndex = 2 - Me.rbPoster.TabStop = True - Me.rbPoster.Text = "Poster" - Me.rbPoster.UseVisualStyleBackColor = True - ' - 'rbBanner - ' - Me.rbBanner.AutoSize = True - Me.rbBanner.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.rbBanner.Location = New System.Drawing.Point(8, 30) - Me.rbBanner.Name = "rbBanner" - Me.rbBanner.Size = New System.Drawing.Size(62, 17) - Me.rbBanner.TabIndex = 1 - Me.rbBanner.TabStop = True - Me.rbBanner.Text = "Banner" - Me.rbBanner.UseVisualStyleBackColor = True - ' - 'txtShowPosterWidth - ' - Me.txtShowPosterWidth.Enabled = False - Me.txtShowPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtShowPosterWidth.Location = New System.Drawing.Point(71, 113) - Me.txtShowPosterWidth.Name = "txtShowPosterWidth" - Me.txtShowPosterWidth.Size = New System.Drawing.Size(40, 22) - Me.txtShowPosterWidth.TabIndex = 7 - ' - 'txtShowPosterHeight - ' - Me.txtShowPosterHeight.Enabled = False - Me.txtShowPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtShowPosterHeight.Location = New System.Drawing.Point(182, 113) - Me.txtShowPosterHeight.Name = "txtShowPosterHeight" - Me.txtShowPosterHeight.Size = New System.Drawing.Size(40, 22) - Me.txtShowPosterHeight.TabIndex = 9 - ' - 'lblShowPosterQual - ' - Me.lblShowPosterQual.AutoSize = True - Me.lblShowPosterQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblShowPosterQual.Location = New System.Drawing.Point(183, 161) - Me.lblShowPosterQual.Name = "lblShowPosterQual" - Me.lblShowPosterQual.Size = New System.Drawing.Size(29, 17) - Me.lblShowPosterQual.TabIndex = 12 - Me.lblShowPosterQual.Text = "100" - ' - 'tbShowPosterQual - ' - Me.tbShowPosterQual.AutoSize = False - Me.tbShowPosterQual.BackColor = System.Drawing.Color.White - Me.tbShowPosterQual.LargeChange = 10 - Me.tbShowPosterQual.Location = New System.Drawing.Point(7, 154) - Me.tbShowPosterQual.Maximum = 100 - Me.tbShowPosterQual.Name = "tbShowPosterQual" - Me.tbShowPosterQual.Size = New System.Drawing.Size(179, 27) - Me.tbShowPosterQual.TabIndex = 11 - Me.tbShowPosterQual.TickFrequency = 10 - Me.tbShowPosterQual.Value = 100 - ' - 'lblShowPosterQ - ' - Me.lblShowPosterQ.AutoSize = True - Me.lblShowPosterQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblShowPosterQ.Location = New System.Drawing.Point(3, 141) - Me.lblShowPosterQ.Name = "lblShowPosterQ" - Me.lblShowPosterQ.Size = New System.Drawing.Size(47, 13) - Me.lblShowPosterQ.TabIndex = 10 - Me.lblShowPosterQ.Text = "Quality:" - ' - 'lblShowPosterWidth - ' - Me.lblShowPosterWidth.AutoSize = True - Me.lblShowPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblShowPosterWidth.Location = New System.Drawing.Point(3, 117) - Me.lblShowPosterWidth.Name = "lblShowPosterWidth" - Me.lblShowPosterWidth.Size = New System.Drawing.Size(66, 13) - Me.lblShowPosterWidth.TabIndex = 6 - Me.lblShowPosterWidth.Text = "Max Width:" - ' - 'lblShowPosterHeight - ' - Me.lblShowPosterHeight.AutoSize = True - Me.lblShowPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblShowPosterHeight.Location = New System.Drawing.Point(112, 117) - Me.lblShowPosterHeight.Name = "lblShowPosterHeight" - Me.lblShowPosterHeight.Size = New System.Drawing.Size(69, 13) - Me.lblShowPosterHeight.TabIndex = 8 - Me.lblShowPosterHeight.Text = "Max Height:" - ' - 'chkResizeShowPoster - ' - Me.chkResizeShowPoster.AutoSize = True - Me.chkResizeShowPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkResizeShowPoster.Location = New System.Drawing.Point(6, 92) - Me.chkResizeShowPoster.Name = "chkResizeShowPoster" - Me.chkResizeShowPoster.Size = New System.Drawing.Size(133, 17) - Me.chkResizeShowPoster.TabIndex = 5 - Me.chkResizeShowPoster.Text = "Automatically Resize:" - Me.chkResizeShowPoster.UseVisualStyleBackColor = True - ' - 'lblShowPosterSize - ' - Me.lblShowPosterSize.AutoSize = True - Me.lblShowPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblShowPosterSize.Location = New System.Drawing.Point(3, 14) - Me.lblShowPosterSize.Name = "lblShowPosterSize" - Me.lblShowPosterSize.Size = New System.Drawing.Size(83, 13) - Me.lblShowPosterSize.TabIndex = 0 - Me.lblShowPosterSize.Text = "Preferred Type:" - ' - 'cbShowPosterSize - ' - Me.cbShowPosterSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbShowPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbShowPosterSize.FormattingEnabled = True - Me.cbShowPosterSize.Location = New System.Drawing.Point(6, 52) - Me.cbShowPosterSize.Name = "cbShowPosterSize" - Me.cbShowPosterSize.Size = New System.Drawing.Size(148, 21) - Me.cbShowPosterSize.TabIndex = 3 - ' - 'chkOverwriteShowPoster - ' - Me.chkOverwriteShowPoster.AutoSize = True - Me.chkOverwriteShowPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOverwriteShowPoster.Location = New System.Drawing.Point(6, 76) - Me.chkOverwriteShowPoster.Name = "chkOverwriteShowPoster" - Me.chkOverwriteShowPoster.Size = New System.Drawing.Size(119, 17) - Me.chkOverwriteShowPoster.TabIndex = 4 - Me.chkOverwriteShowPoster.Text = "Overwrite Existing" - Me.chkOverwriteShowPoster.UseVisualStyleBackColor = True - ' - 'gbShowFanartOpts - ' - Me.gbShowFanartOpts.Controls.Add(Me.txtShowFanartWidth) - Me.gbShowFanartOpts.Controls.Add(Me.txtShowFanartHeight) - Me.gbShowFanartOpts.Controls.Add(Me.lblShowFanartQual) - Me.gbShowFanartOpts.Controls.Add(Me.tbShowFanartQual) - Me.gbShowFanartOpts.Controls.Add(Me.lblShowFanartQ) - Me.gbShowFanartOpts.Controls.Add(Me.lblShowFanartWidth) - Me.gbShowFanartOpts.Controls.Add(Me.lblShowFanartHeight) - Me.gbShowFanartOpts.Controls.Add(Me.chkResizeShowFanart) - Me.gbShowFanartOpts.Controls.Add(Me.cbShowFanartSize) - Me.gbShowFanartOpts.Controls.Add(Me.lblShowFanartSize) - Me.gbShowFanartOpts.Controls.Add(Me.chkOverwriteShowFanart) - Me.gbShowFanartOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbShowFanartOpts.Location = New System.Drawing.Point(4, 199) - Me.gbShowFanartOpts.Name = "gbShowFanartOpts" - Me.gbShowFanartOpts.Size = New System.Drawing.Size(228, 167) - Me.gbShowFanartOpts.TabIndex = 1 - Me.gbShowFanartOpts.TabStop = False - Me.gbShowFanartOpts.Text = "Fanart" - ' - 'txtShowFanartWidth - ' - Me.txtShowFanartWidth.Enabled = False - Me.txtShowFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtShowFanartWidth.Location = New System.Drawing.Point(71, 90) - Me.txtShowFanartWidth.Name = "txtShowFanartWidth" - Me.txtShowFanartWidth.Size = New System.Drawing.Size(40, 22) - Me.txtShowFanartWidth.TabIndex = 5 - ' - 'txtShowFanartHeight - ' - Me.txtShowFanartHeight.Enabled = False - Me.txtShowFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtShowFanartHeight.Location = New System.Drawing.Point(182, 90) - Me.txtShowFanartHeight.Name = "txtShowFanartHeight" - Me.txtShowFanartHeight.Size = New System.Drawing.Size(40, 22) - Me.txtShowFanartHeight.TabIndex = 7 - ' - 'lblShowFanartQual - ' - Me.lblShowFanartQual.AutoSize = True - Me.lblShowFanartQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblShowFanartQual.Location = New System.Drawing.Point(183, 138) - Me.lblShowFanartQual.Name = "lblShowFanartQual" - Me.lblShowFanartQual.Size = New System.Drawing.Size(29, 17) - Me.lblShowFanartQual.TabIndex = 10 - Me.lblShowFanartQual.Text = "100" - ' - 'tbShowFanartQual - ' - Me.tbShowFanartQual.AutoSize = False - Me.tbShowFanartQual.BackColor = System.Drawing.Color.White - Me.tbShowFanartQual.LargeChange = 10 - Me.tbShowFanartQual.Location = New System.Drawing.Point(7, 131) - Me.tbShowFanartQual.Maximum = 100 - Me.tbShowFanartQual.Name = "tbShowFanartQual" - Me.tbShowFanartQual.Size = New System.Drawing.Size(180, 27) - Me.tbShowFanartQual.TabIndex = 9 - Me.tbShowFanartQual.TickFrequency = 10 - Me.tbShowFanartQual.Value = 100 - ' - 'lblShowFanartQ - ' - Me.lblShowFanartQ.AutoSize = True - Me.lblShowFanartQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblShowFanartQ.Location = New System.Drawing.Point(3, 118) - Me.lblShowFanartQ.Name = "lblShowFanartQ" - Me.lblShowFanartQ.Size = New System.Drawing.Size(47, 13) - Me.lblShowFanartQ.TabIndex = 8 - Me.lblShowFanartQ.Text = "Quality:" - ' - 'lblShowFanartWidth - ' - Me.lblShowFanartWidth.AutoSize = True - Me.lblShowFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblShowFanartWidth.Location = New System.Drawing.Point(3, 94) - Me.lblShowFanartWidth.Name = "lblShowFanartWidth" - Me.lblShowFanartWidth.Size = New System.Drawing.Size(66, 13) - Me.lblShowFanartWidth.TabIndex = 4 - Me.lblShowFanartWidth.Text = "Max Width:" - ' - 'lblShowFanartHeight - ' - Me.lblShowFanartHeight.AutoSize = True - Me.lblShowFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblShowFanartHeight.Location = New System.Drawing.Point(112, 94) - Me.lblShowFanartHeight.Name = "lblShowFanartHeight" - Me.lblShowFanartHeight.Size = New System.Drawing.Size(69, 13) - Me.lblShowFanartHeight.TabIndex = 6 - Me.lblShowFanartHeight.Text = "Max Height:" - ' - 'chkResizeShowFanart - ' - Me.chkResizeShowFanart.AutoSize = True - Me.chkResizeShowFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkResizeShowFanart.Location = New System.Drawing.Point(6, 69) - Me.chkResizeShowFanart.Name = "chkResizeShowFanart" - Me.chkResizeShowFanart.Size = New System.Drawing.Size(133, 17) - Me.chkResizeShowFanart.TabIndex = 3 - Me.chkResizeShowFanart.Text = "Automatically Resize:" - Me.chkResizeShowFanart.UseVisualStyleBackColor = True - ' - 'cbShowFanartSize - ' - Me.cbShowFanartSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbShowFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbShowFanartSize.FormattingEnabled = True - Me.cbShowFanartSize.Location = New System.Drawing.Point(6, 29) - Me.cbShowFanartSize.Name = "cbShowFanartSize" - Me.cbShowFanartSize.Size = New System.Drawing.Size(148, 21) - Me.cbShowFanartSize.TabIndex = 1 - ' - 'lblShowFanartSize - ' - Me.lblShowFanartSize.AutoSize = True - Me.lblShowFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblShowFanartSize.Location = New System.Drawing.Point(3, 14) - Me.lblShowFanartSize.Name = "lblShowFanartSize" - Me.lblShowFanartSize.Size = New System.Drawing.Size(80, 13) - Me.lblShowFanartSize.TabIndex = 0 - Me.lblShowFanartSize.Text = "Preferred Size:" - ' - 'chkOverwriteShowFanart - ' - Me.chkOverwriteShowFanart.AutoSize = True - Me.chkOverwriteShowFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOverwriteShowFanart.Location = New System.Drawing.Point(6, 53) - Me.chkOverwriteShowFanart.Name = "chkOverwriteShowFanart" - Me.chkOverwriteShowFanart.Size = New System.Drawing.Size(119, 17) - Me.chkOverwriteShowFanart.TabIndex = 2 - Me.chkOverwriteShowFanart.Text = "Overwrite Existing" - Me.chkOverwriteShowFanart.UseVisualStyleBackColor = True - ' - 'TabPage6 - ' - Me.TabPage6.Controls.Add(Me.gbSeaPosterOpts) - Me.TabPage6.Controls.Add(Me.gbSeaFanartOpts) - Me.TabPage6.Location = New System.Drawing.Point(4, 22) - Me.TabPage6.Name = "TabPage6" - Me.TabPage6.Size = New System.Drawing.Size(601, 371) - Me.TabPage6.TabIndex = 2 - Me.TabPage6.Text = "TV Season" - Me.TabPage6.UseVisualStyleBackColor = True - ' - 'gbSeaPosterOpts - ' - Me.gbSeaPosterOpts.Controls.Add(Me.txtSeaPosterWidth) - Me.gbSeaPosterOpts.Controls.Add(Me.txtSeaPosterHeight) - Me.gbSeaPosterOpts.Controls.Add(Me.lblSeaPosterQual) - Me.gbSeaPosterOpts.Controls.Add(Me.tbSeaPosterQual) - Me.gbSeaPosterOpts.Controls.Add(Me.lblSeaPosterQ) - Me.gbSeaPosterOpts.Controls.Add(Me.lblSeaPosterWidth) - Me.gbSeaPosterOpts.Controls.Add(Me.lblSeaPosterHeight) - Me.gbSeaPosterOpts.Controls.Add(Me.chkSeaResizePoster) - Me.gbSeaPosterOpts.Controls.Add(Me.lblSeaPosterSize) - Me.gbSeaPosterOpts.Controls.Add(Me.cbSeaPosterSize) - Me.gbSeaPosterOpts.Controls.Add(Me.chkSeaOverwritePoster) - Me.gbSeaPosterOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbSeaPosterOpts.Location = New System.Drawing.Point(4, 5) - Me.gbSeaPosterOpts.Name = "gbSeaPosterOpts" - Me.gbSeaPosterOpts.Size = New System.Drawing.Size(228, 167) - Me.gbSeaPosterOpts.TabIndex = 0 - Me.gbSeaPosterOpts.TabStop = False - Me.gbSeaPosterOpts.Text = "Poster" - ' - 'txtSeaPosterWidth - ' - Me.txtSeaPosterWidth.Enabled = False - Me.txtSeaPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtSeaPosterWidth.Location = New System.Drawing.Point(71, 90) - Me.txtSeaPosterWidth.Name = "txtSeaPosterWidth" - Me.txtSeaPosterWidth.Size = New System.Drawing.Size(40, 22) - Me.txtSeaPosterWidth.TabIndex = 5 - ' - 'txtSeaPosterHeight - ' - Me.txtSeaPosterHeight.Enabled = False - Me.txtSeaPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtSeaPosterHeight.Location = New System.Drawing.Point(182, 90) - Me.txtSeaPosterHeight.Name = "txtSeaPosterHeight" - Me.txtSeaPosterHeight.Size = New System.Drawing.Size(40, 22) - Me.txtSeaPosterHeight.TabIndex = 7 - ' - 'lblSeaPosterQual - ' - Me.lblSeaPosterQual.AutoSize = True - Me.lblSeaPosterQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSeaPosterQual.Location = New System.Drawing.Point(183, 138) - Me.lblSeaPosterQual.Name = "lblSeaPosterQual" - Me.lblSeaPosterQual.Size = New System.Drawing.Size(29, 17) - Me.lblSeaPosterQual.TabIndex = 10 - Me.lblSeaPosterQual.Text = "100" - ' - 'tbSeaPosterQual - ' - Me.tbSeaPosterQual.AutoSize = False - Me.tbSeaPosterQual.BackColor = System.Drawing.Color.White - Me.tbSeaPosterQual.LargeChange = 10 - Me.tbSeaPosterQual.Location = New System.Drawing.Point(7, 131) - Me.tbSeaPosterQual.Maximum = 100 - Me.tbSeaPosterQual.Name = "tbSeaPosterQual" - Me.tbSeaPosterQual.Size = New System.Drawing.Size(179, 27) - Me.tbSeaPosterQual.TabIndex = 9 - Me.tbSeaPosterQual.TickFrequency = 10 - Me.tbSeaPosterQual.Value = 100 - ' - 'lblSeaPosterQ - ' - Me.lblSeaPosterQ.AutoSize = True - Me.lblSeaPosterQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSeaPosterQ.Location = New System.Drawing.Point(3, 118) - Me.lblSeaPosterQ.Name = "lblSeaPosterQ" - Me.lblSeaPosterQ.Size = New System.Drawing.Size(47, 13) - Me.lblSeaPosterQ.TabIndex = 8 - Me.lblSeaPosterQ.Text = "Quality:" - ' - 'lblSeaPosterWidth - ' - Me.lblSeaPosterWidth.AutoSize = True - Me.lblSeaPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSeaPosterWidth.Location = New System.Drawing.Point(3, 94) - Me.lblSeaPosterWidth.Name = "lblSeaPosterWidth" - Me.lblSeaPosterWidth.Size = New System.Drawing.Size(66, 13) - Me.lblSeaPosterWidth.TabIndex = 4 - Me.lblSeaPosterWidth.Text = "Max Width:" - ' - 'lblSeaPosterHeight - ' - Me.lblSeaPosterHeight.AutoSize = True - Me.lblSeaPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSeaPosterHeight.Location = New System.Drawing.Point(112, 94) - Me.lblSeaPosterHeight.Name = "lblSeaPosterHeight" - Me.lblSeaPosterHeight.Size = New System.Drawing.Size(69, 13) - Me.lblSeaPosterHeight.TabIndex = 6 - Me.lblSeaPosterHeight.Text = "Max Height:" - ' - 'chkSeaResizePoster - ' - Me.chkSeaResizePoster.AutoSize = True - Me.chkSeaResizePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeaResizePoster.Location = New System.Drawing.Point(6, 69) - Me.chkSeaResizePoster.Name = "chkSeaResizePoster" - Me.chkSeaResizePoster.Size = New System.Drawing.Size(133, 17) - Me.chkSeaResizePoster.TabIndex = 3 - Me.chkSeaResizePoster.Text = "Automatically Resize:" - Me.chkSeaResizePoster.UseVisualStyleBackColor = True - ' - 'lblSeaPosterSize - ' - Me.lblSeaPosterSize.AutoSize = True - Me.lblSeaPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSeaPosterSize.Location = New System.Drawing.Point(3, 14) - Me.lblSeaPosterSize.Name = "lblSeaPosterSize" - Me.lblSeaPosterSize.Size = New System.Drawing.Size(83, 13) - Me.lblSeaPosterSize.TabIndex = 0 - Me.lblSeaPosterSize.Text = "Preferred Type:" - ' - 'cbSeaPosterSize - ' - Me.cbSeaPosterSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbSeaPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbSeaPosterSize.FormattingEnabled = True - Me.cbSeaPosterSize.Location = New System.Drawing.Point(6, 29) - Me.cbSeaPosterSize.Name = "cbSeaPosterSize" - Me.cbSeaPosterSize.Size = New System.Drawing.Size(148, 21) - Me.cbSeaPosterSize.TabIndex = 1 - ' - 'chkSeaOverwritePoster - ' - Me.chkSeaOverwritePoster.AutoSize = True - Me.chkSeaOverwritePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeaOverwritePoster.Location = New System.Drawing.Point(6, 53) - Me.chkSeaOverwritePoster.Name = "chkSeaOverwritePoster" - Me.chkSeaOverwritePoster.Size = New System.Drawing.Size(119, 17) - Me.chkSeaOverwritePoster.TabIndex = 2 - Me.chkSeaOverwritePoster.Text = "Overwrite Existing" - Me.chkSeaOverwritePoster.UseVisualStyleBackColor = True - ' - 'gbSeaFanartOpts - ' - Me.gbSeaFanartOpts.Controls.Add(Me.txtSeaFanartWidth) - Me.gbSeaFanartOpts.Controls.Add(Me.txtSeaFanartHeight) - Me.gbSeaFanartOpts.Controls.Add(Me.lblSeaFanartQual) - Me.gbSeaFanartOpts.Controls.Add(Me.tbSeaFanartQual) - Me.gbSeaFanartOpts.Controls.Add(Me.lblSeaFanartQ) - Me.gbSeaFanartOpts.Controls.Add(Me.lblSeaFanartWidth) - Me.gbSeaFanartOpts.Controls.Add(Me.lblSeaFanartHeight) - Me.gbSeaFanartOpts.Controls.Add(Me.chkSeaResizeFanart) - Me.gbSeaFanartOpts.Controls.Add(Me.cbSeaFanartSize) - Me.gbSeaFanartOpts.Controls.Add(Me.lblSeaFanartSize) - Me.gbSeaFanartOpts.Controls.Add(Me.chkSeaOverwriteFanart) - Me.gbSeaFanartOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbSeaFanartOpts.Location = New System.Drawing.Point(238, 5) - Me.gbSeaFanartOpts.Name = "gbSeaFanartOpts" - Me.gbSeaFanartOpts.Size = New System.Drawing.Size(228, 167) - Me.gbSeaFanartOpts.TabIndex = 1 - Me.gbSeaFanartOpts.TabStop = False - Me.gbSeaFanartOpts.Text = "Fanart" - ' - 'txtSeaFanartWidth - ' - Me.txtSeaFanartWidth.Enabled = False - Me.txtSeaFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtSeaFanartWidth.Location = New System.Drawing.Point(71, 90) - Me.txtSeaFanartWidth.Name = "txtSeaFanartWidth" - Me.txtSeaFanartWidth.Size = New System.Drawing.Size(40, 22) - Me.txtSeaFanartWidth.TabIndex = 5 - ' - 'txtSeaFanartHeight - ' - Me.txtSeaFanartHeight.Enabled = False - Me.txtSeaFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtSeaFanartHeight.Location = New System.Drawing.Point(182, 90) - Me.txtSeaFanartHeight.Name = "txtSeaFanartHeight" - Me.txtSeaFanartHeight.Size = New System.Drawing.Size(40, 22) - Me.txtSeaFanartHeight.TabIndex = 7 - ' - 'lblSeaFanartQual - ' - Me.lblSeaFanartQual.AutoSize = True - Me.lblSeaFanartQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSeaFanartQual.Location = New System.Drawing.Point(183, 138) - Me.lblSeaFanartQual.Name = "lblSeaFanartQual" - Me.lblSeaFanartQual.Size = New System.Drawing.Size(29, 17) - Me.lblSeaFanartQual.TabIndex = 10 - Me.lblSeaFanartQual.Text = "100" - ' - 'tbSeaFanartQual - ' - Me.tbSeaFanartQual.AutoSize = False - Me.tbSeaFanartQual.BackColor = System.Drawing.Color.White - Me.tbSeaFanartQual.LargeChange = 10 - Me.tbSeaFanartQual.Location = New System.Drawing.Point(7, 131) - Me.tbSeaFanartQual.Maximum = 100 - Me.tbSeaFanartQual.Name = "tbSeaFanartQual" - Me.tbSeaFanartQual.Size = New System.Drawing.Size(180, 27) - Me.tbSeaFanartQual.TabIndex = 9 - Me.tbSeaFanartQual.TickFrequency = 10 - Me.tbSeaFanartQual.Value = 100 - ' - 'lblSeaFanartQ - ' - Me.lblSeaFanartQ.AutoSize = True - Me.lblSeaFanartQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSeaFanartQ.Location = New System.Drawing.Point(3, 118) - Me.lblSeaFanartQ.Name = "lblSeaFanartQ" - Me.lblSeaFanartQ.Size = New System.Drawing.Size(47, 13) - Me.lblSeaFanartQ.TabIndex = 8 - Me.lblSeaFanartQ.Text = "Quality:" - ' - 'lblSeaFanartWidth - ' - Me.lblSeaFanartWidth.AutoSize = True - Me.lblSeaFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSeaFanartWidth.Location = New System.Drawing.Point(3, 94) - Me.lblSeaFanartWidth.Name = "lblSeaFanartWidth" - Me.lblSeaFanartWidth.Size = New System.Drawing.Size(66, 13) - Me.lblSeaFanartWidth.TabIndex = 4 - Me.lblSeaFanartWidth.Text = "Max Width:" - ' - 'lblSeaFanartHeight - ' - Me.lblSeaFanartHeight.AutoSize = True - Me.lblSeaFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSeaFanartHeight.Location = New System.Drawing.Point(112, 94) - Me.lblSeaFanartHeight.Name = "lblSeaFanartHeight" - Me.lblSeaFanartHeight.Size = New System.Drawing.Size(69, 13) - Me.lblSeaFanartHeight.TabIndex = 6 - Me.lblSeaFanartHeight.Text = "Max Height:" - ' - 'chkSeaResizeFanart - ' - Me.chkSeaResizeFanart.AutoSize = True - Me.chkSeaResizeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeaResizeFanart.Location = New System.Drawing.Point(6, 69) - Me.chkSeaResizeFanart.Name = "chkSeaResizeFanart" - Me.chkSeaResizeFanart.Size = New System.Drawing.Size(133, 17) - Me.chkSeaResizeFanart.TabIndex = 3 - Me.chkSeaResizeFanart.Text = "Automatically Resize:" - Me.chkSeaResizeFanart.UseVisualStyleBackColor = True - ' - 'cbSeaFanartSize - ' - Me.cbSeaFanartSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbSeaFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbSeaFanartSize.FormattingEnabled = True - Me.cbSeaFanartSize.Location = New System.Drawing.Point(6, 29) - Me.cbSeaFanartSize.Name = "cbSeaFanartSize" - Me.cbSeaFanartSize.Size = New System.Drawing.Size(148, 21) - Me.cbSeaFanartSize.TabIndex = 1 - ' - 'lblSeaFanartSize - ' - Me.lblSeaFanartSize.AutoSize = True - Me.lblSeaFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSeaFanartSize.Location = New System.Drawing.Point(3, 14) - Me.lblSeaFanartSize.Name = "lblSeaFanartSize" - Me.lblSeaFanartSize.Size = New System.Drawing.Size(80, 13) - Me.lblSeaFanartSize.TabIndex = 0 - Me.lblSeaFanartSize.Text = "Preferred Size:" - ' - 'chkSeaOverwriteFanart - ' - Me.chkSeaOverwriteFanart.AutoSize = True - Me.chkSeaOverwriteFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeaOverwriteFanart.Location = New System.Drawing.Point(6, 53) - Me.chkSeaOverwriteFanart.Name = "chkSeaOverwriteFanart" - Me.chkSeaOverwriteFanart.Size = New System.Drawing.Size(119, 17) - Me.chkSeaOverwriteFanart.TabIndex = 2 - Me.chkSeaOverwriteFanart.Text = "Overwrite Existing" - Me.chkSeaOverwriteFanart.UseVisualStyleBackColor = True - ' - 'TabPage7 - ' - Me.TabPage7.Controls.Add(Me.gbEpPosterOpts) - Me.TabPage7.Controls.Add(Me.gbEpFanartOpts) - Me.TabPage7.Location = New System.Drawing.Point(4, 22) - Me.TabPage7.Name = "TabPage7" - Me.TabPage7.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage7.Size = New System.Drawing.Size(601, 371) - Me.TabPage7.TabIndex = 1 - Me.TabPage7.Text = "TV Episode" - Me.TabPage7.UseVisualStyleBackColor = True - ' - 'gbEpPosterOpts - ' - Me.gbEpPosterOpts.Controls.Add(Me.txtEpPosterWidth) - Me.gbEpPosterOpts.Controls.Add(Me.txtEpPosterHeight) - Me.gbEpPosterOpts.Controls.Add(Me.lblEpPosterQual) - Me.gbEpPosterOpts.Controls.Add(Me.tbEpPosterQual) - Me.gbEpPosterOpts.Controls.Add(Me.lblEpPosterQ) - Me.gbEpPosterOpts.Controls.Add(Me.lblEpPosterWidth) - Me.gbEpPosterOpts.Controls.Add(Me.lblEpPosterHeight) - Me.gbEpPosterOpts.Controls.Add(Me.chkResizeEpPoster) - Me.gbEpPosterOpts.Controls.Add(Me.chkOverwriteEpPoster) - Me.gbEpPosterOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbEpPosterOpts.Location = New System.Drawing.Point(4, 5) - Me.gbEpPosterOpts.Name = "gbEpPosterOpts" - Me.gbEpPosterOpts.Size = New System.Drawing.Size(228, 135) - Me.gbEpPosterOpts.TabIndex = 0 - Me.gbEpPosterOpts.TabStop = False - Me.gbEpPosterOpts.Text = "Poster" - ' - 'txtEpPosterWidth - ' - Me.txtEpPosterWidth.Enabled = False - Me.txtEpPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtEpPosterWidth.Location = New System.Drawing.Point(71, 49) - Me.txtEpPosterWidth.Name = "txtEpPosterWidth" - Me.txtEpPosterWidth.Size = New System.Drawing.Size(40, 22) - Me.txtEpPosterWidth.TabIndex = 3 - ' - 'txtEpPosterHeight - ' - Me.txtEpPosterHeight.Enabled = False - Me.txtEpPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtEpPosterHeight.Location = New System.Drawing.Point(182, 49) - Me.txtEpPosterHeight.Name = "txtEpPosterHeight" - Me.txtEpPosterHeight.Size = New System.Drawing.Size(40, 22) - Me.txtEpPosterHeight.TabIndex = 5 - ' - 'lblEpPosterQual - ' - Me.lblEpPosterQual.AutoSize = True - Me.lblEpPosterQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblEpPosterQual.Location = New System.Drawing.Point(181, 98) - Me.lblEpPosterQual.Name = "lblEpPosterQual" - Me.lblEpPosterQual.Size = New System.Drawing.Size(29, 17) - Me.lblEpPosterQual.TabIndex = 8 - Me.lblEpPosterQual.Text = "100" - ' - 'tbEpPosterQual - ' - Me.tbEpPosterQual.AutoSize = False - Me.tbEpPosterQual.BackColor = System.Drawing.Color.White - Me.tbEpPosterQual.LargeChange = 10 - Me.tbEpPosterQual.Location = New System.Drawing.Point(5, 91) - Me.tbEpPosterQual.Maximum = 100 - Me.tbEpPosterQual.Name = "tbEpPosterQual" - Me.tbEpPosterQual.Size = New System.Drawing.Size(179, 27) - Me.tbEpPosterQual.TabIndex = 7 - Me.tbEpPosterQual.TickFrequency = 10 - Me.tbEpPosterQual.Value = 100 - ' - 'lblEpPosterQ - ' - Me.lblEpPosterQ.AutoSize = True - Me.lblEpPosterQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblEpPosterQ.Location = New System.Drawing.Point(1, 78) - Me.lblEpPosterQ.Name = "lblEpPosterQ" - Me.lblEpPosterQ.Size = New System.Drawing.Size(47, 13) - Me.lblEpPosterQ.TabIndex = 6 - Me.lblEpPosterQ.Text = "Quality:" - ' - 'lblEpPosterWidth - ' - Me.lblEpPosterWidth.AutoSize = True - Me.lblEpPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblEpPosterWidth.Location = New System.Drawing.Point(3, 53) - Me.lblEpPosterWidth.Name = "lblEpPosterWidth" - Me.lblEpPosterWidth.Size = New System.Drawing.Size(66, 13) - Me.lblEpPosterWidth.TabIndex = 2 - Me.lblEpPosterWidth.Text = "Max Width:" - ' - 'lblEpPosterHeight - ' - Me.lblEpPosterHeight.AutoSize = True - Me.lblEpPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblEpPosterHeight.Location = New System.Drawing.Point(112, 53) - Me.lblEpPosterHeight.Name = "lblEpPosterHeight" - Me.lblEpPosterHeight.Size = New System.Drawing.Size(69, 13) - Me.lblEpPosterHeight.TabIndex = 4 - Me.lblEpPosterHeight.Text = "Max Height:" - ' - 'chkResizeEpPoster - ' - Me.chkResizeEpPoster.AutoSize = True - Me.chkResizeEpPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkResizeEpPoster.Location = New System.Drawing.Point(4, 30) - Me.chkResizeEpPoster.Name = "chkResizeEpPoster" - Me.chkResizeEpPoster.Size = New System.Drawing.Size(133, 17) - Me.chkResizeEpPoster.TabIndex = 1 - Me.chkResizeEpPoster.Text = "Automatically Resize:" - Me.chkResizeEpPoster.UseVisualStyleBackColor = True - ' - 'chkOverwriteEpPoster - ' - Me.chkOverwriteEpPoster.AutoSize = True - Me.chkOverwriteEpPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOverwriteEpPoster.Location = New System.Drawing.Point(4, 14) - Me.chkOverwriteEpPoster.Name = "chkOverwriteEpPoster" - Me.chkOverwriteEpPoster.Size = New System.Drawing.Size(119, 17) - Me.chkOverwriteEpPoster.TabIndex = 0 - Me.chkOverwriteEpPoster.Text = "Overwrite Existing" - Me.chkOverwriteEpPoster.UseVisualStyleBackColor = True - ' - 'gbEpFanartOpts - ' - Me.gbEpFanartOpts.Controls.Add(Me.txtEpFanartWidth) - Me.gbEpFanartOpts.Controls.Add(Me.txtEpFanartHeight) - Me.gbEpFanartOpts.Controls.Add(Me.lblEpFanartQual) - Me.gbEpFanartOpts.Controls.Add(Me.tbEpFanartQual) - Me.gbEpFanartOpts.Controls.Add(Me.lblEpFanartQ) - Me.gbEpFanartOpts.Controls.Add(Me.lblEpFanartWidth) - Me.gbEpFanartOpts.Controls.Add(Me.lblEpFanartHeight) - Me.gbEpFanartOpts.Controls.Add(Me.chkResizeEpFanart) - Me.gbEpFanartOpts.Controls.Add(Me.cbEpFanartSize) - Me.gbEpFanartOpts.Controls.Add(Me.lblEpFanartSize) - Me.gbEpFanartOpts.Controls.Add(Me.chkOverwriteEpFanart) - Me.gbEpFanartOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbEpFanartOpts.Location = New System.Drawing.Point(238, 5) - Me.gbEpFanartOpts.Name = "gbEpFanartOpts" - Me.gbEpFanartOpts.Size = New System.Drawing.Size(228, 167) - Me.gbEpFanartOpts.TabIndex = 1 - Me.gbEpFanartOpts.TabStop = False - Me.gbEpFanartOpts.Text = "Fanart" - ' - 'txtEpFanartWidth - ' - Me.txtEpFanartWidth.Enabled = False - Me.txtEpFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtEpFanartWidth.Location = New System.Drawing.Point(71, 90) - Me.txtEpFanartWidth.Name = "txtEpFanartWidth" - Me.txtEpFanartWidth.Size = New System.Drawing.Size(40, 22) - Me.txtEpFanartWidth.TabIndex = 5 - ' - 'txtEpFanartHeight - ' - Me.txtEpFanartHeight.Enabled = False - Me.txtEpFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtEpFanartHeight.Location = New System.Drawing.Point(182, 90) - Me.txtEpFanartHeight.Name = "txtEpFanartHeight" - Me.txtEpFanartHeight.Size = New System.Drawing.Size(40, 22) - Me.txtEpFanartHeight.TabIndex = 7 - ' - 'lblEpFanartQual - ' - Me.lblEpFanartQual.AutoSize = True - Me.lblEpFanartQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblEpFanartQual.Location = New System.Drawing.Point(183, 138) - Me.lblEpFanartQual.Name = "lblEpFanartQual" - Me.lblEpFanartQual.Size = New System.Drawing.Size(29, 17) - Me.lblEpFanartQual.TabIndex = 10 - Me.lblEpFanartQual.Text = "100" - ' - 'tbEpFanartQual - ' - Me.tbEpFanartQual.AutoSize = False - Me.tbEpFanartQual.BackColor = System.Drawing.Color.White - Me.tbEpFanartQual.LargeChange = 10 - Me.tbEpFanartQual.Location = New System.Drawing.Point(7, 131) - Me.tbEpFanartQual.Maximum = 100 - Me.tbEpFanartQual.Name = "tbEpFanartQual" - Me.tbEpFanartQual.Size = New System.Drawing.Size(180, 27) - Me.tbEpFanartQual.TabIndex = 9 - Me.tbEpFanartQual.TickFrequency = 10 - Me.tbEpFanartQual.Value = 100 - ' - 'lblEpFanartQ - ' - Me.lblEpFanartQ.AutoSize = True - Me.lblEpFanartQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblEpFanartQ.Location = New System.Drawing.Point(3, 118) - Me.lblEpFanartQ.Name = "lblEpFanartQ" - Me.lblEpFanartQ.Size = New System.Drawing.Size(47, 13) - Me.lblEpFanartQ.TabIndex = 8 - Me.lblEpFanartQ.Text = "Quality:" - ' - 'lblEpFanartWidth - ' - Me.lblEpFanartWidth.AutoSize = True - Me.lblEpFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblEpFanartWidth.Location = New System.Drawing.Point(3, 94) - Me.lblEpFanartWidth.Name = "lblEpFanartWidth" - Me.lblEpFanartWidth.Size = New System.Drawing.Size(66, 13) - Me.lblEpFanartWidth.TabIndex = 4 - Me.lblEpFanartWidth.Text = "Max Width:" - ' - 'lblEpFanartHeight - ' - Me.lblEpFanartHeight.AutoSize = True - Me.lblEpFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblEpFanartHeight.Location = New System.Drawing.Point(112, 94) - Me.lblEpFanartHeight.Name = "lblEpFanartHeight" - Me.lblEpFanartHeight.Size = New System.Drawing.Size(69, 13) - Me.lblEpFanartHeight.TabIndex = 6 - Me.lblEpFanartHeight.Text = "Max Height:" - ' - 'chkResizeEpFanart - ' - Me.chkResizeEpFanart.AutoSize = True - Me.chkResizeEpFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkResizeEpFanart.Location = New System.Drawing.Point(6, 69) - Me.chkResizeEpFanart.Name = "chkResizeEpFanart" - Me.chkResizeEpFanart.Size = New System.Drawing.Size(133, 17) - Me.chkResizeEpFanart.TabIndex = 3 - Me.chkResizeEpFanart.Text = "Automatically Resize:" - Me.chkResizeEpFanart.UseVisualStyleBackColor = True - ' - 'cbEpFanartSize - ' - Me.cbEpFanartSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbEpFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbEpFanartSize.FormattingEnabled = True - Me.cbEpFanartSize.Location = New System.Drawing.Point(6, 29) - Me.cbEpFanartSize.Name = "cbEpFanartSize" - Me.cbEpFanartSize.Size = New System.Drawing.Size(148, 21) - Me.cbEpFanartSize.TabIndex = 1 - ' - 'lblEpFanartSize - ' - Me.lblEpFanartSize.AutoSize = True - Me.lblEpFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblEpFanartSize.Location = New System.Drawing.Point(3, 14) - Me.lblEpFanartSize.Name = "lblEpFanartSize" - Me.lblEpFanartSize.Size = New System.Drawing.Size(80, 13) - Me.lblEpFanartSize.TabIndex = 0 - Me.lblEpFanartSize.Text = "Preferred Size:" - ' - 'chkOverwriteEpFanart - ' - Me.chkOverwriteEpFanart.AutoSize = True - Me.chkOverwriteEpFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOverwriteEpFanart.Location = New System.Drawing.Point(6, 53) - Me.chkOverwriteEpFanart.Name = "chkOverwriteEpFanart" - Me.chkOverwriteEpFanart.Size = New System.Drawing.Size(119, 17) - Me.chkOverwriteEpFanart.TabIndex = 2 - Me.chkOverwriteEpFanart.Text = "Overwrite Existing" - Me.chkOverwriteEpFanart.UseVisualStyleBackColor = True - ' - 'TabPage8 - ' - Me.TabPage8.Controls.Add(Me.chkGetEnglishImages) - Me.TabPage8.Controls.Add(Me.chkOnlyTVImagesLanguage) - Me.TabPage8.Location = New System.Drawing.Point(4, 22) - Me.TabPage8.Name = "TabPage8" - Me.TabPage8.Size = New System.Drawing.Size(601, 371) - Me.TabPage8.TabIndex = 3 - Me.TabPage8.Text = "General" - Me.TabPage8.UseVisualStyleBackColor = True - ' - 'chkGetEnglishImages - ' - Me.chkGetEnglishImages.AutoSize = True - Me.chkGetEnglishImages.Enabled = False - Me.chkGetEnglishImages.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkGetEnglishImages.Location = New System.Drawing.Point(21, 32) - Me.chkGetEnglishImages.Name = "chkGetEnglishImages" - Me.chkGetEnglishImages.Size = New System.Drawing.Size(149, 17) - Me.chkGetEnglishImages.TabIndex = 1 - Me.chkGetEnglishImages.Text = "Also Get English Images" - Me.chkGetEnglishImages.UseVisualStyleBackColor = True - ' - 'chkOnlyTVImagesLanguage - ' - Me.chkOnlyTVImagesLanguage.AutoSize = True - Me.chkOnlyTVImagesLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkOnlyTVImagesLanguage.Location = New System.Drawing.Point(8, 14) - Me.chkOnlyTVImagesLanguage.Name = "chkOnlyTVImagesLanguage" - Me.chkOnlyTVImagesLanguage.Size = New System.Drawing.Size(248, 17) - Me.chkOnlyTVImagesLanguage.TabIndex = 0 - Me.chkOnlyTVImagesLanguage.Text = "Only Get Images for the Selected Language" - Me.chkOnlyTVImagesLanguage.UseVisualStyleBackColor = True - ' - 'pnlTVScraper - ' - Me.pnlTVScraper.BackColor = System.Drawing.Color.White - Me.pnlTVScraper.Controls.Add(Me.GroupBox32) - Me.pnlTVScraper.Controls.Add(Me.GroupBox33) - Me.pnlTVScraper.Controls.Add(Me.GroupBox31) - Me.pnlTVScraper.Controls.Add(Me.gbTVScraperOptions) - Me.pnlTVScraper.Location = New System.Drawing.Point(717, 746) - Me.pnlTVScraper.Name = "pnlTVScraper" - Me.pnlTVScraper.Size = New System.Drawing.Size(617, 400) - Me.pnlTVScraper.TabIndex = 19 - Me.pnlTVScraper.Visible = False - ' - 'GroupBox32 - ' - Me.GroupBox32.Controls.Add(Me.GroupBox35) - Me.GroupBox32.Controls.Add(Me.GroupBox34) - Me.GroupBox32.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox32.Location = New System.Drawing.Point(208, 252) - Me.GroupBox32.Name = "GroupBox32" - Me.GroupBox32.Size = New System.Drawing.Size(403, 114) - Me.GroupBox32.TabIndex = 3 - Me.GroupBox32.TabStop = False - Me.GroupBox32.Text = "Scraper Fields" - ' - 'GroupBox35 - ' - Me.GroupBox35.Controls.Add(Me.chkScraperShowRating) - Me.GroupBox35.Controls.Add(Me.chkScraperShowActors) - Me.GroupBox35.Controls.Add(Me.chkScraperShowStudio) - Me.GroupBox35.Controls.Add(Me.chkScraperShowPremiered) - Me.GroupBox35.Controls.Add(Me.chkScraperShowEGU) - Me.GroupBox35.Controls.Add(Me.chkScraperShowMPAA) - Me.GroupBox35.Controls.Add(Me.chkScraperShowPlot) - Me.GroupBox35.Controls.Add(Me.chkScraperShowGenre) - Me.GroupBox35.Controls.Add(Me.chkScraperShowTitle) - Me.GroupBox35.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox35.Location = New System.Drawing.Point(3, 14) - Me.GroupBox35.Name = "GroupBox35" - Me.GroupBox35.Size = New System.Drawing.Size(213, 96) - Me.GroupBox35.TabIndex = 0 - Me.GroupBox35.TabStop = False - Me.GroupBox35.Text = "Show" - ' - 'chkScraperShowRating - ' - Me.chkScraperShowRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperShowRating.Location = New System.Drawing.Point(130, 29) - Me.chkScraperShowRating.Name = "chkScraperShowRating" - Me.chkScraperShowRating.Size = New System.Drawing.Size(78, 17) - Me.chkScraperShowRating.TabIndex = 6 - Me.chkScraperShowRating.Text = "Rating" - Me.chkScraperShowRating.UseVisualStyleBackColor = True - ' - 'chkScraperShowActors - ' - Me.chkScraperShowActors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperShowActors.Location = New System.Drawing.Point(130, 61) - Me.chkScraperShowActors.Name = "chkScraperShowActors" - Me.chkScraperShowActors.Size = New System.Drawing.Size(78, 17) - Me.chkScraperShowActors.TabIndex = 8 - Me.chkScraperShowActors.Text = "Actors" - Me.chkScraperShowActors.UseVisualStyleBackColor = True - ' - 'chkScraperShowStudio - ' - Me.chkScraperShowStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperShowStudio.Location = New System.Drawing.Point(130, 45) - Me.chkScraperShowStudio.Name = "chkScraperShowStudio" - Me.chkScraperShowStudio.Size = New System.Drawing.Size(78, 17) - Me.chkScraperShowStudio.TabIndex = 7 - Me.chkScraperShowStudio.Text = "Studio" - Me.chkScraperShowStudio.UseVisualStyleBackColor = True - ' - 'chkScraperShowPremiered - ' - Me.chkScraperShowPremiered.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperShowPremiered.Location = New System.Drawing.Point(130, 13) - Me.chkScraperShowPremiered.Name = "chkScraperShowPremiered" - Me.chkScraperShowPremiered.Size = New System.Drawing.Size(78, 17) - Me.chkScraperShowPremiered.TabIndex = 5 - Me.chkScraperShowPremiered.Text = "Premiered" - Me.chkScraperShowPremiered.UseVisualStyleBackColor = True - ' - 'chkScraperShowEGU - ' - Me.chkScraperShowEGU.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperShowEGU.Location = New System.Drawing.Point(6, 29) - Me.chkScraperShowEGU.Name = "chkScraperShowEGU" - Me.chkScraperShowEGU.Size = New System.Drawing.Size(118, 17) - Me.chkScraperShowEGU.TabIndex = 1 - Me.chkScraperShowEGU.Text = "EpisodeGuideURL" - Me.chkScraperShowEGU.UseVisualStyleBackColor = True - ' - 'chkScraperShowMPAA - ' - Me.chkScraperShowMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperShowMPAA.Location = New System.Drawing.Point(6, 61) - Me.chkScraperShowMPAA.Name = "chkScraperShowMPAA" - Me.chkScraperShowMPAA.Size = New System.Drawing.Size(119, 17) - Me.chkScraperShowMPAA.TabIndex = 3 - Me.chkScraperShowMPAA.Text = "MPAA" - Me.chkScraperShowMPAA.UseVisualStyleBackColor = True - ' - 'chkScraperShowPlot - ' - Me.chkScraperShowPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperShowPlot.Location = New System.Drawing.Point(6, 77) - Me.chkScraperShowPlot.Name = "chkScraperShowPlot" - Me.chkScraperShowPlot.Size = New System.Drawing.Size(119, 17) - Me.chkScraperShowPlot.TabIndex = 4 - Me.chkScraperShowPlot.Text = "Plot" - Me.chkScraperShowPlot.UseVisualStyleBackColor = True - ' - 'chkScraperShowGenre - ' - Me.chkScraperShowGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperShowGenre.Location = New System.Drawing.Point(6, 45) - Me.chkScraperShowGenre.Name = "chkScraperShowGenre" - Me.chkScraperShowGenre.Size = New System.Drawing.Size(118, 17) - Me.chkScraperShowGenre.TabIndex = 2 - Me.chkScraperShowGenre.Text = "Genre" - Me.chkScraperShowGenre.UseVisualStyleBackColor = True - ' - 'chkScraperShowTitle - ' - Me.chkScraperShowTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperShowTitle.Location = New System.Drawing.Point(6, 13) - Me.chkScraperShowTitle.Name = "chkScraperShowTitle" - Me.chkScraperShowTitle.Size = New System.Drawing.Size(118, 17) - Me.chkScraperShowTitle.TabIndex = 0 - Me.chkScraperShowTitle.Text = "Title" - Me.chkScraperShowTitle.UseVisualStyleBackColor = True - ' - 'GroupBox34 - ' - Me.GroupBox34.Controls.Add(Me.chkScraperEpActors) - Me.GroupBox34.Controls.Add(Me.chkScraperEpCredits) - Me.GroupBox34.Controls.Add(Me.chkScraperEpDirector) - Me.GroupBox34.Controls.Add(Me.chkScraperEpPlot) - Me.GroupBox34.Controls.Add(Me.chkScraperEpRating) - Me.GroupBox34.Controls.Add(Me.chkScraperEpAired) - Me.GroupBox34.Controls.Add(Me.chkScraperEpTitle) - Me.GroupBox34.Controls.Add(Me.chkScraperEpEpisode) - Me.GroupBox34.Controls.Add(Me.chkScraperEpSeason) - Me.GroupBox34.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox34.Location = New System.Drawing.Point(219, 14) - Me.GroupBox34.Name = "GroupBox34" - Me.GroupBox34.Size = New System.Drawing.Size(181, 96) - Me.GroupBox34.TabIndex = 1 - Me.GroupBox34.TabStop = False - Me.GroupBox34.Text = "Episode" - ' - 'chkScraperEpActors - ' - Me.chkScraperEpActors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperEpActors.Location = New System.Drawing.Point(94, 60) - Me.chkScraperEpActors.Name = "chkScraperEpActors" - Me.chkScraperEpActors.Size = New System.Drawing.Size(67, 17) - Me.chkScraperEpActors.TabIndex = 0 - Me.chkScraperEpActors.Text = "Actors" - Me.chkScraperEpActors.UseVisualStyleBackColor = True - ' - 'chkScraperEpCredits - ' - Me.chkScraperEpCredits.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperEpCredits.Location = New System.Drawing.Point(94, 44) - Me.chkScraperEpCredits.Name = "chkScraperEpCredits" - Me.chkScraperEpCredits.Size = New System.Drawing.Size(67, 17) - Me.chkScraperEpCredits.TabIndex = 8 - Me.chkScraperEpCredits.Text = "Credits" - Me.chkScraperEpCredits.UseVisualStyleBackColor = True - ' - 'chkScraperEpDirector - ' - Me.chkScraperEpDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperEpDirector.Location = New System.Drawing.Point(94, 28) - Me.chkScraperEpDirector.Name = "chkScraperEpDirector" - Me.chkScraperEpDirector.Size = New System.Drawing.Size(67, 17) - Me.chkScraperEpDirector.TabIndex = 7 - Me.chkScraperEpDirector.Text = "Director" - Me.chkScraperEpDirector.UseVisualStyleBackColor = True - ' - 'chkScraperEpPlot - ' - Me.chkScraperEpPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperEpPlot.Location = New System.Drawing.Point(94, 12) - Me.chkScraperEpPlot.Name = "chkScraperEpPlot" - Me.chkScraperEpPlot.Size = New System.Drawing.Size(67, 17) - Me.chkScraperEpPlot.TabIndex = 6 - Me.chkScraperEpPlot.Text = "Plot" - Me.chkScraperEpPlot.UseVisualStyleBackColor = True - ' - 'chkScraperEpRating - ' - Me.chkScraperEpRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperEpRating.Location = New System.Drawing.Point(6, 77) - Me.chkScraperEpRating.Name = "chkScraperEpRating" - Me.chkScraperEpRating.Size = New System.Drawing.Size(67, 17) - Me.chkScraperEpRating.TabIndex = 5 - Me.chkScraperEpRating.Text = "Rating" - Me.chkScraperEpRating.UseVisualStyleBackColor = True - ' - 'chkScraperEpAired - ' - Me.chkScraperEpAired.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperEpAired.Location = New System.Drawing.Point(6, 61) - Me.chkScraperEpAired.Name = "chkScraperEpAired" - Me.chkScraperEpAired.Size = New System.Drawing.Size(67, 17) - Me.chkScraperEpAired.TabIndex = 4 - Me.chkScraperEpAired.Text = "Aired" - Me.chkScraperEpAired.UseVisualStyleBackColor = True - ' - 'chkScraperEpTitle - ' - Me.chkScraperEpTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperEpTitle.Location = New System.Drawing.Point(6, 13) - Me.chkScraperEpTitle.Name = "chkScraperEpTitle" - Me.chkScraperEpTitle.Size = New System.Drawing.Size(67, 17) - Me.chkScraperEpTitle.TabIndex = 0 - Me.chkScraperEpTitle.Text = "Title" - Me.chkScraperEpTitle.UseVisualStyleBackColor = True - ' - 'chkScraperEpEpisode - ' - Me.chkScraperEpEpisode.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperEpEpisode.Location = New System.Drawing.Point(6, 45) - Me.chkScraperEpEpisode.Name = "chkScraperEpEpisode" - Me.chkScraperEpEpisode.Size = New System.Drawing.Size(67, 17) - Me.chkScraperEpEpisode.TabIndex = 3 - Me.chkScraperEpEpisode.Text = "Episode" - Me.chkScraperEpEpisode.UseVisualStyleBackColor = True - ' - 'chkScraperEpSeason - ' - Me.chkScraperEpSeason.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScraperEpSeason.Location = New System.Drawing.Point(6, 29) - Me.chkScraperEpSeason.Name = "chkScraperEpSeason" - Me.chkScraperEpSeason.Size = New System.Drawing.Size(67, 17) - Me.chkScraperEpSeason.TabIndex = 2 - Me.chkScraperEpSeason.Text = "Season" - Me.chkScraperEpSeason.UseVisualStyleBackColor = True - ' - 'GroupBox33 - ' - Me.GroupBox33.Controls.Add(Me.gbEpLocks) - Me.GroupBox33.Controls.Add(Me.gbShowLocks) - Me.GroupBox33.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox33.Location = New System.Drawing.Point(208, 6) - Me.GroupBox33.Name = "GroupBox33" - Me.GroupBox33.Size = New System.Drawing.Size(191, 243) - Me.GroupBox33.TabIndex = 1 - Me.GroupBox33.TabStop = False - Me.GroupBox33.Text = "Global Locks" - ' - 'gbEpLocks - ' - Me.gbEpLocks.Controls.Add(Me.chkEpLockTitle) - Me.gbEpLocks.Controls.Add(Me.chkEpLockRating) - Me.gbEpLocks.Controls.Add(Me.chkEpLockPlot) - Me.gbEpLocks.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbEpLocks.Location = New System.Drawing.Point(5, 112) - Me.gbEpLocks.Name = "gbEpLocks" - Me.gbEpLocks.Size = New System.Drawing.Size(181, 66) - Me.gbEpLocks.TabIndex = 1 - Me.gbEpLocks.TabStop = False - Me.gbEpLocks.Text = "Episode" - ' - 'chkEpLockTitle - ' - Me.chkEpLockTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpLockTitle.Location = New System.Drawing.Point(6, 15) - Me.chkEpLockTitle.Name = "chkEpLockTitle" - Me.chkEpLockTitle.Size = New System.Drawing.Size(166, 17) - Me.chkEpLockTitle.TabIndex = 0 - Me.chkEpLockTitle.Text = "Lock Title" - Me.chkEpLockTitle.UseVisualStyleBackColor = True - ' - 'chkEpLockRating - ' - Me.chkEpLockRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpLockRating.Location = New System.Drawing.Point(6, 47) - Me.chkEpLockRating.Name = "chkEpLockRating" - Me.chkEpLockRating.Size = New System.Drawing.Size(168, 17) - Me.chkEpLockRating.TabIndex = 2 - Me.chkEpLockRating.Text = "Lock Rating" - Me.chkEpLockRating.UseVisualStyleBackColor = True - ' - 'chkEpLockPlot - ' - Me.chkEpLockPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpLockPlot.Location = New System.Drawing.Point(6, 31) - Me.chkEpLockPlot.Name = "chkEpLockPlot" - Me.chkEpLockPlot.Size = New System.Drawing.Size(166, 17) - Me.chkEpLockPlot.TabIndex = 1 - Me.chkEpLockPlot.Text = "Lock Plot" - Me.chkEpLockPlot.UseVisualStyleBackColor = True - ' - 'gbShowLocks - ' - Me.gbShowLocks.Controls.Add(Me.chkShowLockPlot) - Me.gbShowLocks.Controls.Add(Me.chkShowLockGenre) - Me.gbShowLocks.Controls.Add(Me.chkShowLockStudio) - Me.gbShowLocks.Controls.Add(Me.chkShowLockRating) - Me.gbShowLocks.Controls.Add(Me.chkShowLockTitle) - Me.gbShowLocks.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbShowLocks.Location = New System.Drawing.Point(5, 13) - Me.gbShowLocks.Name = "gbShowLocks" - Me.gbShowLocks.Size = New System.Drawing.Size(181, 96) - Me.gbShowLocks.TabIndex = 0 - Me.gbShowLocks.TabStop = False - Me.gbShowLocks.Text = "Show" - ' - 'chkShowLockPlot - ' - Me.chkShowLockPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowLockPlot.Location = New System.Drawing.Point(6, 29) - Me.chkShowLockPlot.Name = "chkShowLockPlot" - Me.chkShowLockPlot.Size = New System.Drawing.Size(168, 17) - Me.chkShowLockPlot.TabIndex = 1 - Me.chkShowLockPlot.Text = "Lock Plot" - Me.chkShowLockPlot.UseVisualStyleBackColor = True - ' - 'chkShowLockGenre - ' - Me.chkShowLockGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowLockGenre.Location = New System.Drawing.Point(6, 61) - Me.chkShowLockGenre.Name = "chkShowLockGenre" - Me.chkShowLockGenre.Size = New System.Drawing.Size(168, 17) - Me.chkShowLockGenre.TabIndex = 3 - Me.chkShowLockGenre.Text = "Lock Genre" - Me.chkShowLockGenre.UseVisualStyleBackColor = True - ' - 'chkShowLockStudio - ' - Me.chkShowLockStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowLockStudio.Location = New System.Drawing.Point(6, 77) - Me.chkShowLockStudio.Name = "chkShowLockStudio" - Me.chkShowLockStudio.Size = New System.Drawing.Size(168, 17) - Me.chkShowLockStudio.TabIndex = 4 - Me.chkShowLockStudio.Text = "Lock Studio" - Me.chkShowLockStudio.UseVisualStyleBackColor = True - ' - 'chkShowLockRating - ' - Me.chkShowLockRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowLockRating.Location = New System.Drawing.Point(6, 45) - Me.chkShowLockRating.Name = "chkShowLockRating" - Me.chkShowLockRating.Size = New System.Drawing.Size(168, 17) - Me.chkShowLockRating.TabIndex = 2 - Me.chkShowLockRating.Text = "Lock Rating" - Me.chkShowLockRating.UseVisualStyleBackColor = True - ' - 'chkShowLockTitle - ' - Me.chkShowLockTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowLockTitle.Location = New System.Drawing.Point(6, 13) - Me.chkShowLockTitle.Name = "chkShowLockTitle" - Me.chkShowLockTitle.Size = New System.Drawing.Size(168, 17) - Me.chkShowLockTitle.TabIndex = 0 - Me.chkShowLockTitle.Text = "Lock Title" - Me.chkShowLockTitle.UseVisualStyleBackColor = True - ' - 'GroupBox31 - ' - Me.GroupBox31.Controls.Add(Me.gbTVMIDefaults) - Me.GroupBox31.Controls.Add(Me.cboTVMetaDataOverlay) - Me.GroupBox31.Controls.Add(Me.Label50) - Me.GroupBox31.Controls.Add(Me.chkTVScanMetaData) - Me.GroupBox31.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox31.Location = New System.Drawing.Point(403, 6) - Me.GroupBox31.Name = "GroupBox31" - Me.GroupBox31.Size = New System.Drawing.Size(208, 243) - Me.GroupBox31.TabIndex = 2 - Me.GroupBox31.TabStop = False - Me.GroupBox31.Text = "Meta Data" - ' - 'gbTVMIDefaults - ' - Me.gbTVMIDefaults.Controls.Add(Me.lstTVMetaData) - Me.gbTVMIDefaults.Controls.Add(Me.txtTVDefFIExt) - Me.gbTVMIDefaults.Controls.Add(Me.Label49) - Me.gbTVMIDefaults.Controls.Add(Me.btnRemoveTVMetaDataFT) - Me.gbTVMIDefaults.Controls.Add(Me.btnEditTVMetaDataFT) - Me.gbTVMIDefaults.Controls.Add(Me.btnNewTVMetaDataFT) - Me.gbTVMIDefaults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbTVMIDefaults.Location = New System.Drawing.Point(12, 93) - Me.gbTVMIDefaults.Name = "gbTVMIDefaults" - Me.gbTVMIDefaults.Size = New System.Drawing.Size(183, 144) - Me.gbTVMIDefaults.TabIndex = 3 - Me.gbTVMIDefaults.TabStop = False - Me.gbTVMIDefaults.Text = "Defaults by File Type" - ' - 'lstTVMetaData - ' - Me.lstTVMetaData.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lstTVMetaData.FormattingEnabled = True - Me.lstTVMetaData.Location = New System.Drawing.Point(10, 16) - Me.lstTVMetaData.Name = "lstTVMetaData" - Me.lstTVMetaData.Size = New System.Drawing.Size(165, 95) - Me.lstTVMetaData.TabIndex = 0 - ' - 'txtTVDefFIExt - ' - Me.txtTVDefFIExt.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtTVDefFIExt.Location = New System.Drawing.Point(73, 116) - Me.txtTVDefFIExt.Name = "txtTVDefFIExt" - Me.txtTVDefFIExt.Size = New System.Drawing.Size(35, 22) - Me.txtTVDefFIExt.TabIndex = 2 - ' - 'Label49 - ' - Me.Label49.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label49.Location = New System.Drawing.Point(8, 116) - Me.Label49.Name = "Label49" - Me.Label49.Size = New System.Drawing.Size(66, 19) - Me.Label49.TabIndex = 1 - Me.Label49.Text = "File Type" - Me.Label49.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'btnRemoveTVMetaDataFT - ' - Me.btnRemoveTVMetaDataFT.Enabled = False - Me.btnRemoveTVMetaDataFT.Image = CType(resources.GetObject("btnRemoveTVMetaDataFT.Image"), System.Drawing.Image) - Me.btnRemoveTVMetaDataFT.Location = New System.Drawing.Point(153, 115) - Me.btnRemoveTVMetaDataFT.Name = "btnRemoveTVMetaDataFT" - Me.btnRemoveTVMetaDataFT.Size = New System.Drawing.Size(23, 23) - Me.btnRemoveTVMetaDataFT.TabIndex = 4 - Me.btnRemoveTVMetaDataFT.UseVisualStyleBackColor = True - ' - 'btnEditTVMetaDataFT - ' - Me.btnEditTVMetaDataFT.Enabled = False - Me.btnEditTVMetaDataFT.Image = CType(resources.GetObject("btnEditTVMetaDataFT.Image"), System.Drawing.Image) - Me.btnEditTVMetaDataFT.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnEditTVMetaDataFT.Location = New System.Drawing.Point(130, 115) - Me.btnEditTVMetaDataFT.Name = "btnEditTVMetaDataFT" - Me.btnEditTVMetaDataFT.Size = New System.Drawing.Size(23, 23) - Me.btnEditTVMetaDataFT.TabIndex = 3 - Me.btnEditTVMetaDataFT.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnEditTVMetaDataFT.UseVisualStyleBackColor = True - ' - 'btnNewTVMetaDataFT - ' - Me.btnNewTVMetaDataFT.Enabled = False - Me.btnNewTVMetaDataFT.Image = CType(resources.GetObject("btnNewTVMetaDataFT.Image"), System.Drawing.Image) - Me.btnNewTVMetaDataFT.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnNewTVMetaDataFT.Location = New System.Drawing.Point(108, 115) - Me.btnNewTVMetaDataFT.Name = "btnNewTVMetaDataFT" - Me.btnNewTVMetaDataFT.Size = New System.Drawing.Size(23, 23) - Me.btnNewTVMetaDataFT.TabIndex = 29 - Me.btnNewTVMetaDataFT.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnNewTVMetaDataFT.UseVisualStyleBackColor = True - ' - 'cboTVMetaDataOverlay - ' - Me.cboTVMetaDataOverlay.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cboTVMetaDataOverlay.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cboTVMetaDataOverlay.FormattingEnabled = True - Me.cboTVMetaDataOverlay.Location = New System.Drawing.Point(13, 62) - Me.cboTVMetaDataOverlay.Name = "cboTVMetaDataOverlay" - Me.cboTVMetaDataOverlay.Size = New System.Drawing.Size(182, 21) - Me.cboTVMetaDataOverlay.Sorted = True - Me.cboTVMetaDataOverlay.TabIndex = 2 - ' - 'Label50 - ' - Me.Label50.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label50.Location = New System.Drawing.Point(4, 35) - Me.Label50.Name = "Label50" - Me.Label50.Size = New System.Drawing.Size(202, 29) - Me.Label50.TabIndex = 1 - Me.Label50.Text = "Display Overlay if Video Contains an Audio Stream With the Following Language:" - Me.Label50.TextAlign = System.Drawing.ContentAlignment.TopCenter - ' - 'chkTVScanMetaData - ' - Me.chkTVScanMetaData.AutoSize = True - Me.chkTVScanMetaData.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTVScanMetaData.Location = New System.Drawing.Point(5, 16) - Me.chkTVScanMetaData.Name = "chkTVScanMetaData" - Me.chkTVScanMetaData.Size = New System.Drawing.Size(106, 17) - Me.chkTVScanMetaData.TabIndex = 0 - Me.chkTVScanMetaData.Text = "Scan Meta Data" - Me.chkTVScanMetaData.UseVisualStyleBackColor = True - ' - 'gbTVScraperOptions - ' - Me.gbTVScraperOptions.Controls.Add(Me.lblOrdering) - Me.gbTVScraperOptions.Controls.Add(Me.cbOrdering) - Me.gbTVScraperOptions.Controls.Add(Me.lblTVUpdate) - Me.gbTVScraperOptions.Controls.Add(Me.cboTVUpdate) - Me.gbTVScraperOptions.Controls.Add(Me.lblAPIKey) - Me.gbTVScraperOptions.Controls.Add(Me.lblTVDBMirror) - Me.gbTVScraperOptions.Controls.Add(Me.txtAPIKey) - Me.gbTVScraperOptions.Controls.Add(Me.txtTVDBMirror) - Me.gbTVScraperOptions.Controls.Add(Me.gbLanguage) - Me.gbTVScraperOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbTVScraperOptions.Location = New System.Drawing.Point(5, 6) - Me.gbTVScraperOptions.Name = "gbTVScraperOptions" - Me.gbTVScraperOptions.Size = New System.Drawing.Size(200, 359) - Me.gbTVScraperOptions.TabIndex = 0 - Me.gbTVScraperOptions.TabStop = False - Me.gbTVScraperOptions.Text = "Options" - ' - 'lblOrdering - ' - Me.lblOrdering.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblOrdering.Location = New System.Drawing.Point(12, 284) - Me.lblOrdering.Name = "lblOrdering" - Me.lblOrdering.Size = New System.Drawing.Size(177, 13) - Me.lblOrdering.TabIndex = 7 - Me.lblOrdering.Text = "Default Episode Ordering:" - Me.lblOrdering.TextAlign = System.Drawing.ContentAlignment.TopCenter - ' - 'cbOrdering - ' - Me.cbOrdering.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbOrdering.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbOrdering.FormattingEnabled = True - Me.cbOrdering.Location = New System.Drawing.Point(17, 304) - Me.cbOrdering.Name = "cbOrdering" - Me.cbOrdering.Size = New System.Drawing.Size(166, 21) - Me.cbOrdering.TabIndex = 8 - ' - 'lblTVUpdate - ' - Me.lblTVUpdate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblTVUpdate.Location = New System.Drawing.Point(5, 217) - Me.lblTVUpdate.Name = "lblTVUpdate" - Me.lblTVUpdate.Size = New System.Drawing.Size(190, 31) - Me.lblTVUpdate.TabIndex = 5 - Me.lblTVUpdate.Text = "Re-download Show Information Every:" - Me.lblTVUpdate.TextAlign = System.Drawing.ContentAlignment.TopCenter - ' - 'cboTVUpdate - ' - Me.cboTVUpdate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cboTVUpdate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cboTVUpdate.FormattingEnabled = True - Me.cboTVUpdate.Location = New System.Drawing.Point(17, 248) - Me.cboTVUpdate.Name = "cboTVUpdate" - Me.cboTVUpdate.Size = New System.Drawing.Size(166, 21) - Me.cboTVUpdate.TabIndex = 6 - ' - 'lblAPIKey - ' - Me.lblAPIKey.AutoSize = True - Me.lblAPIKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblAPIKey.Location = New System.Drawing.Point(4, 60) - Me.lblAPIKey.Name = "lblAPIKey" - Me.lblAPIKey.Size = New System.Drawing.Size(73, 13) - Me.lblAPIKey.TabIndex = 2 - Me.lblAPIKey.Text = "TVDB APIKey:" - ' - 'lblTVDBMirror - ' - Me.lblTVDBMirror.AutoSize = True - Me.lblTVDBMirror.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblTVDBMirror.Location = New System.Drawing.Point(4, 17) - Me.lblTVDBMirror.Name = "lblTVDBMirror" - Me.lblTVDBMirror.Size = New System.Drawing.Size(72, 13) - Me.lblTVDBMirror.TabIndex = 0 - Me.lblTVDBMirror.Text = "TVDB Mirror:" - ' - 'txtAPIKey - ' - Me.txtAPIKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtAPIKey.Location = New System.Drawing.Point(6, 75) - Me.txtAPIKey.Name = "txtAPIKey" - Me.txtAPIKey.Size = New System.Drawing.Size(189, 22) - Me.txtAPIKey.TabIndex = 3 - ' - 'txtTVDBMirror - ' - Me.txtTVDBMirror.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtTVDBMirror.Location = New System.Drawing.Point(6, 32) - Me.txtTVDBMirror.Name = "txtTVDBMirror" - Me.txtTVDBMirror.Size = New System.Drawing.Size(189, 22) - Me.txtTVDBMirror.TabIndex = 1 - ' - 'gbLanguage - ' - Me.gbLanguage.Controls.Add(Me.lblTVLanguagePreferred) - Me.gbLanguage.Controls.Add(Me.btnTVLanguageFetch) - Me.gbLanguage.Controls.Add(Me.cbTVLanguage) - Me.gbLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbLanguage.Location = New System.Drawing.Point(5, 104) - Me.gbLanguage.Name = "gbLanguage" - Me.gbLanguage.Size = New System.Drawing.Size(190, 100) - Me.gbLanguage.TabIndex = 4 - Me.gbLanguage.TabStop = False - Me.gbLanguage.Text = "Language" - ' - 'lblTVLanguagePreferred - ' - Me.lblTVLanguagePreferred.AutoSize = True - Me.lblTVLanguagePreferred.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblTVLanguagePreferred.Location = New System.Drawing.Point(10, 24) - Me.lblTVLanguagePreferred.Name = "lblTVLanguagePreferred" - Me.lblTVLanguagePreferred.Size = New System.Drawing.Size(111, 13) - Me.lblTVLanguagePreferred.TabIndex = 0 - Me.lblTVLanguagePreferred.Text = "Preferred Language:" - ' - 'btnTVLanguageFetch - ' - Me.btnTVLanguageFetch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnTVLanguageFetch.Location = New System.Drawing.Point(12, 68) - Me.btnTVLanguageFetch.Name = "btnTVLanguageFetch" - Me.btnTVLanguageFetch.Size = New System.Drawing.Size(166, 23) - Me.btnTVLanguageFetch.TabIndex = 2 - Me.btnTVLanguageFetch.Text = "Fetch Available Languages" - Me.btnTVLanguageFetch.UseVisualStyleBackColor = True - ' - 'cbTVLanguage - ' - Me.cbTVLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbTVLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbTVLanguage.Location = New System.Drawing.Point(12, 39) - Me.cbTVLanguage.Name = "cbTVLanguage" - Me.cbTVLanguage.Size = New System.Drawing.Size(166, 21) - Me.cbTVLanguage.TabIndex = 1 - ' - 'gbOptions - ' - Me.gbOptions.Controls.Add(Me.chkCertification) - Me.gbOptions.Controls.Add(Me.chkTop250) - Me.gbOptions.Controls.Add(Me.chkCountry) - Me.gbOptions.Controls.Add(Me.txtGenreLimit) - Me.gbOptions.Controls.Add(Me.lblLimit2) - Me.gbOptions.Controls.Add(Me.txtActorLimit) - Me.gbOptions.Controls.Add(Me.lblLimit) - Me.gbOptions.Controls.Add(Me.chkCrew) - Me.gbOptions.Controls.Add(Me.chkMusicBy) - Me.gbOptions.Controls.Add(Me.chkProducers) - Me.gbOptions.Controls.Add(Me.chkWriters) - Me.gbOptions.Controls.Add(Me.chkStudio) - Me.gbOptions.Controls.Add(Me.chkRuntime) - Me.gbOptions.Controls.Add(Me.chkPlot) - Me.gbOptions.Controls.Add(Me.chkOutline) - Me.gbOptions.Controls.Add(Me.chkGenre) - Me.gbOptions.Controls.Add(Me.chkDirector) - Me.gbOptions.Controls.Add(Me.chkTagline) - Me.gbOptions.Controls.Add(Me.chkCast) - Me.gbOptions.Controls.Add(Me.chkVotes) - Me.gbOptions.Controls.Add(Me.chkTrailer) - Me.gbOptions.Controls.Add(Me.chkRating) - Me.gbOptions.Controls.Add(Me.chkRelease) - Me.gbOptions.Controls.Add(Me.chkMPAA) - Me.gbOptions.Controls.Add(Me.chkYear) - Me.gbOptions.Controls.Add(Me.chkTitle) - Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbOptions.Location = New System.Drawing.Point(8, 187) - Me.gbOptions.Name = "gbOptions" - Me.gbOptions.Size = New System.Drawing.Size(302, 179) - Me.gbOptions.TabIndex = 67 - Me.gbOptions.TabStop = False - Me.gbOptions.Text = "Scraper Fields - Global" - ' - 'chkCertification - ' - Me.chkCertification.AutoSize = True - Me.chkCertification.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCertification.Location = New System.Drawing.Point(6, 76) - Me.chkCertification.Name = "chkCertification" - Me.chkCertification.Size = New System.Drawing.Size(89, 17) - Me.chkCertification.TabIndex = 24 - Me.chkCertification.Text = "Certification" - Me.chkCertification.UseVisualStyleBackColor = True - ' - 'chkTop250 - ' - Me.chkTop250.AutoSize = True - Me.chkTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTop250.Location = New System.Drawing.Point(205, 133) - Me.chkTop250.Name = "chkTop250" - Me.chkTop250.Size = New System.Drawing.Size(66, 17) - Me.chkTop250.TabIndex = 23 - Me.chkTop250.Text = "Top 250" - Me.chkTop250.UseVisualStyleBackColor = True - ' - 'chkCountry - ' - Me.chkCountry.AutoSize = True - Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCountry.Location = New System.Drawing.Point(205, 152) - Me.chkCountry.Name = "chkCountry" - Me.chkCountry.Size = New System.Drawing.Size(67, 17) - Me.chkCountry.TabIndex = 25 - Me.chkCountry.Text = "Country" - Me.chkCountry.UseVisualStyleBackColor = True - ' - 'txtGenreLimit - ' - Me.txtGenreLimit.Enabled = False - Me.txtGenreLimit.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtGenreLimit.Location = New System.Drawing.Point(255, 55) - Me.txtGenreLimit.Name = "txtGenreLimit" - Me.txtGenreLimit.Size = New System.Drawing.Size(39, 22) - Me.txtGenreLimit.TabIndex = 21 - ' - 'lblLimit2 - ' - Me.lblLimit2.AutoSize = True - Me.lblLimit2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblLimit2.Location = New System.Drawing.Point(223, 58) - Me.lblLimit2.Name = "lblLimit2" - Me.lblLimit2.Size = New System.Drawing.Size(34, 13) - Me.lblLimit2.TabIndex = 22 - Me.lblLimit2.Text = "Limit:" - Me.lblLimit2.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'txtActorLimit - ' - Me.txtActorLimit.Enabled = False - Me.txtActorLimit.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtActorLimit.Location = New System.Drawing.Point(151, 112) - Me.txtActorLimit.Name = "txtActorLimit" - Me.txtActorLimit.Size = New System.Drawing.Size(39, 22) - Me.txtActorLimit.TabIndex = 19 - ' - 'lblLimit - ' - Me.lblLimit.AutoSize = True - Me.lblLimit.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblLimit.Location = New System.Drawing.Point(118, 115) - Me.lblLimit.Name = "lblLimit" - Me.lblLimit.Size = New System.Drawing.Size(34, 13) - Me.lblLimit.TabIndex = 20 - Me.lblLimit.Text = "Limit:" - Me.lblLimit.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'chkCrew - ' - Me.chkCrew.AutoSize = True - Me.chkCrew.Enabled = False - Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCrew.Location = New System.Drawing.Point(205, 114) - Me.chkCrew.Name = "chkCrew" - Me.chkCrew.Size = New System.Drawing.Size(85, 17) - Me.chkCrew.TabIndex = 18 - Me.chkCrew.Text = "Other Crew" - Me.chkCrew.UseVisualStyleBackColor = True - ' - 'chkMusicBy - ' - Me.chkMusicBy.AutoSize = True - Me.chkMusicBy.Enabled = False - Me.chkMusicBy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMusicBy.Location = New System.Drawing.Point(205, 95) - Me.chkMusicBy.Name = "chkMusicBy" - Me.chkMusicBy.Size = New System.Drawing.Size(71, 17) - Me.chkMusicBy.TabIndex = 17 - Me.chkMusicBy.Text = "Music By" - Me.chkMusicBy.UseVisualStyleBackColor = True - ' - 'chkProducers - ' - Me.chkProducers.AutoSize = True - Me.chkProducers.Enabled = False - Me.chkProducers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkProducers.Location = New System.Drawing.Point(205, 19) - Me.chkProducers.Name = "chkProducers" - Me.chkProducers.Size = New System.Drawing.Size(77, 17) - Me.chkProducers.TabIndex = 16 - Me.chkProducers.Text = "Producers" - Me.chkProducers.UseVisualStyleBackColor = True - ' - 'chkWriters - ' - Me.chkWriters.AutoSize = True - Me.chkWriters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkWriters.Location = New System.Drawing.Point(101, 152) - Me.chkWriters.Name = "chkWriters" - Me.chkWriters.Size = New System.Drawing.Size(63, 17) - Me.chkWriters.TabIndex = 15 - Me.chkWriters.Text = "Writers" - Me.chkWriters.UseVisualStyleBackColor = True - ' - 'chkStudio - ' - Me.chkStudio.AutoSize = True - Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkStudio.Location = New System.Drawing.Point(101, 19) - Me.chkStudio.Name = "chkStudio" - Me.chkStudio.Size = New System.Drawing.Size(60, 17) - Me.chkStudio.TabIndex = 14 - Me.chkStudio.Text = "Studio" - Me.chkStudio.UseVisualStyleBackColor = True - ' - 'chkRuntime - ' - Me.chkRuntime.AutoSize = True - Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkRuntime.Location = New System.Drawing.Point(6, 114) - Me.chkRuntime.Name = "chkRuntime" - Me.chkRuntime.Size = New System.Drawing.Size(69, 17) - Me.chkRuntime.TabIndex = 13 - Me.chkRuntime.Text = "Runtime" - Me.chkRuntime.UseVisualStyleBackColor = True - ' - 'chkPlot - ' - Me.chkPlot.AutoSize = True - Me.chkPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkPlot.Location = New System.Drawing.Point(101, 76) - Me.chkPlot.Name = "chkPlot" - Me.chkPlot.Size = New System.Drawing.Size(46, 17) - Me.chkPlot.TabIndex = 12 - Me.chkPlot.Text = "Plot" - Me.chkPlot.UseVisualStyleBackColor = True - ' - 'chkOutline - ' - Me.chkOutline.AutoSize = True - Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOutline.Location = New System.Drawing.Point(101, 57) - Me.chkOutline.Name = "chkOutline" - Me.chkOutline.Size = New System.Drawing.Size(65, 17) - Me.chkOutline.TabIndex = 11 - Me.chkOutline.Text = "Outline" - Me.chkOutline.UseVisualStyleBackColor = True - ' - 'chkGenre - ' - Me.chkGenre.AutoSize = True - Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkGenre.Location = New System.Drawing.Point(205, 38) - Me.chkGenre.Name = "chkGenre" - Me.chkGenre.Size = New System.Drawing.Size(57, 17) - Me.chkGenre.TabIndex = 10 - Me.chkGenre.Text = "Genre" - Me.chkGenre.UseVisualStyleBackColor = True - ' - 'chkDirector - ' - Me.chkDirector.AutoSize = True - Me.chkDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkDirector.Location = New System.Drawing.Point(101, 133) - Me.chkDirector.Name = "chkDirector" - Me.chkDirector.Size = New System.Drawing.Size(67, 17) - Me.chkDirector.TabIndex = 9 - Me.chkDirector.Text = "Director" - Me.chkDirector.UseVisualStyleBackColor = True - ' - 'chkTagline - ' - Me.chkTagline.AutoSize = True - Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTagline.Location = New System.Drawing.Point(101, 38) - Me.chkTagline.Name = "chkTagline" - Me.chkTagline.Size = New System.Drawing.Size(63, 17) - Me.chkTagline.TabIndex = 8 - Me.chkTagline.Text = "Tagline" - Me.chkTagline.UseVisualStyleBackColor = True - ' - 'chkCast - ' - Me.chkCast.AutoSize = True - Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCast.Location = New System.Drawing.Point(101, 95) - Me.chkCast.Name = "chkCast" - Me.chkCast.Size = New System.Drawing.Size(48, 17) - Me.chkCast.TabIndex = 7 - Me.chkCast.Text = "Cast" - Me.chkCast.UseVisualStyleBackColor = True - ' - 'chkVotes - ' - Me.chkVotes.AutoSize = True - Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkVotes.Location = New System.Drawing.Point(6, 152) - Me.chkVotes.Name = "chkVotes" - Me.chkVotes.Size = New System.Drawing.Size(55, 17) - Me.chkVotes.TabIndex = 6 - Me.chkVotes.Text = "Votes" - Me.chkVotes.UseVisualStyleBackColor = True - ' - 'chkTrailer - ' - Me.chkTrailer.AutoSize = True - Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTrailer.Location = New System.Drawing.Point(205, 76) - Me.chkTrailer.Name = "chkTrailer" - Me.chkTrailer.Size = New System.Drawing.Size(57, 17) - Me.chkTrailer.TabIndex = 5 - Me.chkTrailer.Text = "Trailer" - Me.chkTrailer.UseVisualStyleBackColor = True - ' - 'chkRating - ' - Me.chkRating.AutoSize = True - Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkRating.Location = New System.Drawing.Point(6, 133) - Me.chkRating.Name = "chkRating" - Me.chkRating.Size = New System.Drawing.Size(60, 17) - Me.chkRating.TabIndex = 4 - Me.chkRating.Text = "Rating" - Me.chkRating.UseVisualStyleBackColor = True - ' - 'chkRelease - ' - Me.chkRelease.AutoSize = True - Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkRelease.Location = New System.Drawing.Point(6, 95) - Me.chkRelease.Name = "chkRelease" - Me.chkRelease.Size = New System.Drawing.Size(92, 17) - Me.chkRelease.TabIndex = 3 - Me.chkRelease.Text = "Release Date" - Me.chkRelease.UseVisualStyleBackColor = True - ' - 'chkMPAA - ' - Me.chkMPAA.AutoSize = True - Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMPAA.Location = New System.Drawing.Point(6, 57) - Me.chkMPAA.Name = "chkMPAA" - Me.chkMPAA.Size = New System.Drawing.Size(56, 17) - Me.chkMPAA.TabIndex = 2 - Me.chkMPAA.Text = "MPAA" - Me.chkMPAA.UseVisualStyleBackColor = True - ' - 'chkYear - ' - Me.chkYear.AutoSize = True - Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkYear.Location = New System.Drawing.Point(6, 38) - Me.chkYear.Name = "chkYear" - Me.chkYear.Size = New System.Drawing.Size(47, 17) - Me.chkYear.TabIndex = 1 - Me.chkYear.Text = "Year" - Me.chkYear.UseVisualStyleBackColor = True - ' - 'chkTitle - ' - Me.chkTitle.AutoSize = True - Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkTitle.Location = New System.Drawing.Point(6, 19) - Me.chkTitle.Name = "chkTitle" - Me.chkTitle.Size = New System.Drawing.Size(47, 17) - Me.chkTitle.TabIndex = 0 - Me.chkTitle.Text = "Title" - Me.chkTitle.UseVisualStyleBackColor = True - ' - 'GroupBox26 - ' - Me.GroupBox26.Controls.Add(Me.GroupBox28) - Me.GroupBox26.Controls.Add(Me.chkIFOScan) - Me.GroupBox26.Controls.Add(Me.cbLanguages) - Me.GroupBox26.Controls.Add(Me.Label31) - Me.GroupBox26.Controls.Add(Me.gbRTFormat) - Me.GroupBox26.Controls.Add(Me.chkScanMediaInfo) - Me.GroupBox26.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox26.Location = New System.Drawing.Point(159, 6) - Me.GroupBox26.Name = "GroupBox26" - Me.GroupBox26.Size = New System.Drawing.Size(443, 176) - Me.GroupBox26.TabIndex = 63 - Me.GroupBox26.TabStop = False - Me.GroupBox26.Text = "Meta Data" - ' - 'GroupBox28 - ' - Me.GroupBox28.Controls.Add(Me.lstMetaData) - Me.GroupBox28.Controls.Add(Me.txtDefFIExt) - Me.GroupBox28.Controls.Add(Me.Label34) - Me.GroupBox28.Controls.Add(Me.btnRemoveMetaDataFT) - Me.GroupBox28.Controls.Add(Me.btnEditMetaDataFT) - Me.GroupBox28.Controls.Add(Me.btnNewMetaDataFT) - Me.GroupBox28.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox28.Location = New System.Drawing.Point(252, 11) - Me.GroupBox28.Name = "GroupBox28" - Me.GroupBox28.Size = New System.Drawing.Size(183, 144) - Me.GroupBox28.TabIndex = 8 - Me.GroupBox28.TabStop = False - Me.GroupBox28.Text = "Defaults by File Type" - ' - 'lstMetaData - ' - Me.lstMetaData.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lstMetaData.FormattingEnabled = True - Me.lstMetaData.Location = New System.Drawing.Point(9, 15) - Me.lstMetaData.Name = "lstMetaData" - Me.lstMetaData.Size = New System.Drawing.Size(165, 95) - Me.lstMetaData.TabIndex = 34 - ' - 'txtDefFIExt - ' - Me.txtDefFIExt.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtDefFIExt.Location = New System.Drawing.Point(72, 115) - Me.txtDefFIExt.Name = "txtDefFIExt" - Me.txtDefFIExt.Size = New System.Drawing.Size(35, 22) - Me.txtDefFIExt.TabIndex = 33 - ' - 'Label34 - ' - Me.Label34.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label34.Location = New System.Drawing.Point(7, 118) - Me.Label34.Name = "Label34" - Me.Label34.Size = New System.Drawing.Size(63, 19) - Me.Label34.TabIndex = 32 - Me.Label34.Text = "File Type:" - Me.Label34.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'btnRemoveMetaDataFT - ' - Me.btnRemoveMetaDataFT.Enabled = False - Me.btnRemoveMetaDataFT.Image = CType(resources.GetObject("btnRemoveMetaDataFT.Image"), System.Drawing.Image) - Me.btnRemoveMetaDataFT.Location = New System.Drawing.Point(152, 114) - Me.btnRemoveMetaDataFT.Name = "btnRemoveMetaDataFT" - Me.btnRemoveMetaDataFT.Size = New System.Drawing.Size(23, 23) - Me.btnRemoveMetaDataFT.TabIndex = 31 - Me.btnRemoveMetaDataFT.UseVisualStyleBackColor = True - ' - 'btnEditMetaDataFT - ' - Me.btnEditMetaDataFT.Enabled = False - Me.btnEditMetaDataFT.Image = CType(resources.GetObject("btnEditMetaDataFT.Image"), System.Drawing.Image) - Me.btnEditMetaDataFT.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnEditMetaDataFT.Location = New System.Drawing.Point(129, 114) - Me.btnEditMetaDataFT.Name = "btnEditMetaDataFT" - Me.btnEditMetaDataFT.Size = New System.Drawing.Size(23, 23) - Me.btnEditMetaDataFT.TabIndex = 30 - Me.btnEditMetaDataFT.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnEditMetaDataFT.UseVisualStyleBackColor = True - ' - 'btnNewMetaDataFT - ' - Me.btnNewMetaDataFT.Enabled = False - Me.btnNewMetaDataFT.Image = CType(resources.GetObject("btnNewMetaDataFT.Image"), System.Drawing.Image) - Me.btnNewMetaDataFT.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnNewMetaDataFT.Location = New System.Drawing.Point(107, 114) - Me.btnNewMetaDataFT.Name = "btnNewMetaDataFT" - Me.btnNewMetaDataFT.Size = New System.Drawing.Size(23, 23) - Me.btnNewMetaDataFT.TabIndex = 29 - Me.btnNewMetaDataFT.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnNewMetaDataFT.UseVisualStyleBackColor = True - ' - 'chkIFOScan - ' - Me.chkIFOScan.AutoSize = True - Me.chkIFOScan.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkIFOScan.Location = New System.Drawing.Point(5, 33) - Me.chkIFOScan.Name = "chkIFOScan" - Me.chkIFOScan.Size = New System.Drawing.Size(123, 17) - Me.chkIFOScan.TabIndex = 18 - Me.chkIFOScan.Text = "Enable IFO Parsing" - Me.chkIFOScan.UseVisualStyleBackColor = True - ' - 'cbLanguages - ' - Me.cbLanguages.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbLanguages.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbLanguages.FormattingEnabled = True - Me.cbLanguages.Location = New System.Drawing.Point(38, 147) - Me.cbLanguages.Name = "cbLanguages" - Me.cbLanguages.Size = New System.Drawing.Size(174, 21) - Me.cbLanguages.Sorted = True - Me.cbLanguages.TabIndex = 17 - ' - 'Label31 - ' - Me.Label31.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label31.Location = New System.Drawing.Point(2, 117) - Me.Label31.Name = "Label31" - Me.Label31.Size = New System.Drawing.Size(245, 29) - Me.Label31.TabIndex = 16 - Me.Label31.Text = "Display Overlay if Video Contains an Audio Stream With the Following Language:" - Me.Label31.TextAlign = System.Drawing.ContentAlignment.TopCenter - ' - 'gbRTFormat - ' - Me.gbRTFormat.Controls.Add(Me.Label51) - Me.gbRTFormat.Controls.Add(Me.txtRuntimeFormat) - Me.gbRTFormat.Controls.Add(Me.chkUseMIDuration) - Me.gbRTFormat.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbRTFormat.Location = New System.Drawing.Point(5, 51) - Me.gbRTFormat.Name = "gbRTFormat" - Me.gbRTFormat.Size = New System.Drawing.Size(244, 63) - Me.gbRTFormat.TabIndex = 9 - Me.gbRTFormat.TabStop = False - Me.gbRTFormat.Text = "Duration Format" - ' - 'Label51 - ' - Me.Label51.Font = New System.Drawing.Font("Segoe UI", 7.0!) - Me.Label51.Location = New System.Drawing.Point(168, 9) - Me.Label51.Name = "Label51" - Me.Label51.Size = New System.Drawing.Size(70, 50) - Me.Label51.TabIndex = 23 - Me.Label51.Text = "=Hours" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "=Minutes" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "=Seconds" - Me.Label51.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'txtRuntimeFormat - ' - Me.txtRuntimeFormat.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtRuntimeFormat.Location = New System.Drawing.Point(5, 34) - Me.txtRuntimeFormat.Name = "txtRuntimeFormat" - Me.txtRuntimeFormat.Size = New System.Drawing.Size(145, 22) - Me.txtRuntimeFormat.TabIndex = 22 - ' - 'chkUseMIDuration - ' - Me.chkUseMIDuration.AutoSize = True - Me.chkUseMIDuration.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkUseMIDuration.Location = New System.Drawing.Point(5, 15) - Me.chkUseMIDuration.Name = "chkUseMIDuration" - Me.chkUseMIDuration.Size = New System.Drawing.Size(158, 17) - Me.chkUseMIDuration.TabIndex = 8 - Me.chkUseMIDuration.Text = "Use Duration for Runtime" - Me.chkUseMIDuration.UseVisualStyleBackColor = True - ' - 'chkScanMediaInfo - ' - Me.chkScanMediaInfo.AutoSize = True - Me.chkScanMediaInfo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkScanMediaInfo.Location = New System.Drawing.Point(5, 16) - Me.chkScanMediaInfo.Name = "chkScanMediaInfo" - Me.chkScanMediaInfo.Size = New System.Drawing.Size(106, 17) - Me.chkScanMediaInfo.TabIndex = 7 - Me.chkScanMediaInfo.Text = "Scan Meta Data" - Me.chkScanMediaInfo.UseVisualStyleBackColor = True - ' - 'GroupBox10 - ' - Me.GroupBox10.Controls.Add(Me.chkLockOutline) - Me.GroupBox10.Controls.Add(Me.chkLockPlot) - Me.GroupBox10.Controls.Add(Me.chkLockTrailer) - Me.GroupBox10.Controls.Add(Me.chkLockGenre) - Me.GroupBox10.Controls.Add(Me.chkLockRealStudio) - Me.GroupBox10.Controls.Add(Me.chkLockRating) - Me.GroupBox10.Controls.Add(Me.chkLockTagline) - Me.GroupBox10.Controls.Add(Me.chkLockTitle) - Me.GroupBox10.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox10.Location = New System.Drawing.Point(8, 6) - Me.GroupBox10.Name = "GroupBox10" - Me.GroupBox10.Size = New System.Drawing.Size(145, 176) - Me.GroupBox10.TabIndex = 1 - Me.GroupBox10.TabStop = False - Me.GroupBox10.Text = "Global Locks" - ' - 'chkLockOutline - ' - Me.chkLockOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkLockOutline.Location = New System.Drawing.Point(6, 50) - Me.chkLockOutline.Name = "chkLockOutline" - Me.chkLockOutline.Size = New System.Drawing.Size(129, 17) - Me.chkLockOutline.TabIndex = 1 - Me.chkLockOutline.Text = "Lock Outline" - Me.chkLockOutline.UseVisualStyleBackColor = True - ' - 'chkLockPlot - ' - Me.chkLockPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkLockPlot.Location = New System.Drawing.Point(6, 33) - Me.chkLockPlot.Name = "chkLockPlot" - Me.chkLockPlot.Size = New System.Drawing.Size(129, 17) - Me.chkLockPlot.TabIndex = 0 - Me.chkLockPlot.Text = "Lock Plot" - Me.chkLockPlot.UseVisualStyleBackColor = True - ' - 'chkLockTrailer - ' - Me.chkLockTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkLockTrailer.Location = New System.Drawing.Point(6, 135) - Me.chkLockTrailer.Name = "chkLockTrailer" - Me.chkLockTrailer.Size = New System.Drawing.Size(129, 17) - Me.chkLockTrailer.TabIndex = 46 - Me.chkLockTrailer.Text = "Lock Trailer" - Me.chkLockTrailer.UseVisualStyleBackColor = True - ' - 'chkLockGenre - ' - Me.chkLockGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkLockGenre.Location = New System.Drawing.Point(6, 118) - Me.chkLockGenre.Name = "chkLockGenre" - Me.chkLockGenre.Size = New System.Drawing.Size(129, 17) - Me.chkLockGenre.TabIndex = 7 - Me.chkLockGenre.Text = "Lock Genre" - Me.chkLockGenre.UseVisualStyleBackColor = True - ' - 'chkLockRealStudio - ' - Me.chkLockRealStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkLockRealStudio.Location = New System.Drawing.Point(6, 101) - Me.chkLockRealStudio.Name = "chkLockRealStudio" - Me.chkLockRealStudio.Size = New System.Drawing.Size(129, 17) - Me.chkLockRealStudio.TabIndex = 5 - Me.chkLockRealStudio.Text = "Lock Studio" - Me.chkLockRealStudio.UseVisualStyleBackColor = True - ' - 'chkLockRating - ' - Me.chkLockRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkLockRating.Location = New System.Drawing.Point(6, 84) - Me.chkLockRating.Name = "chkLockRating" - Me.chkLockRating.Size = New System.Drawing.Size(129, 17) - Me.chkLockRating.TabIndex = 4 - Me.chkLockRating.Text = "Lock Rating" - Me.chkLockRating.UseVisualStyleBackColor = True - ' - 'chkLockTagline - ' - Me.chkLockTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkLockTagline.Location = New System.Drawing.Point(6, 67) - Me.chkLockTagline.Name = "chkLockTagline" - Me.chkLockTagline.Size = New System.Drawing.Size(129, 17) - Me.chkLockTagline.TabIndex = 3 - Me.chkLockTagline.Text = "Lock Tagline" - Me.chkLockTagline.UseVisualStyleBackColor = True - ' - 'chkLockTitle - ' - Me.chkLockTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkLockTitle.Location = New System.Drawing.Point(6, 16) - Me.chkLockTitle.Name = "chkLockTitle" - Me.chkLockTitle.Size = New System.Drawing.Size(129, 17) - Me.chkLockTitle.TabIndex = 2 - Me.chkLockTitle.Text = "Lock Title" - Me.chkLockTitle.UseVisualStyleBackColor = True - ' - 'GroupBox1 - ' - Me.GroupBox1.Controls.Add(Me.chkOnlyValueForCert) - Me.GroupBox1.Controls.Add(Me.cbForce) - Me.GroupBox1.Controls.Add(Me.chkForceTitle) - Me.GroupBox1.Controls.Add(Me.chkOutlineForPlot) - Me.GroupBox1.Controls.Add(Me.chkCastWithImg) - Me.GroupBox1.Controls.Add(Me.chkUseCertForMPAA) - Me.GroupBox1.Controls.Add(Me.chkFullCast) - Me.GroupBox1.Controls.Add(Me.chkFullCrew) - Me.GroupBox1.Controls.Add(Me.cbCert) - Me.GroupBox1.Controls.Add(Me.chkCert) - Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox1.Location = New System.Drawing.Point(313, 187) - Me.GroupBox1.Name = "GroupBox1" - Me.GroupBox1.Size = New System.Drawing.Size(289, 198) - Me.GroupBox1.TabIndex = 0 - Me.GroupBox1.TabStop = False - Me.GroupBox1.Text = "Miscellaneous" - ' - 'chkOnlyValueForCert - ' - Me.chkOnlyValueForCert.AutoSize = True - Me.chkOnlyValueForCert.Enabled = False - Me.chkOnlyValueForCert.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOnlyValueForCert.Location = New System.Drawing.Point(32, 145) - Me.chkOnlyValueForCert.Name = "chkOnlyValueForCert" - Me.chkOnlyValueForCert.Size = New System.Drawing.Size(168, 17) - Me.chkOnlyValueForCert.TabIndex = 66 - Me.chkOnlyValueForCert.Text = "Only Save the Value to NFO" - Me.chkOnlyValueForCert.UseVisualStyleBackColor = True - ' - 'cbForce - ' - Me.cbForce.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbForce.Enabled = False - Me.cbForce.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbForce.FormattingEnabled = True - Me.cbForce.Location = New System.Drawing.Point(139, 167) - Me.cbForce.Name = "cbForce" - Me.cbForce.Size = New System.Drawing.Size(144, 21) - Me.cbForce.Sorted = True - Me.cbForce.TabIndex = 65 - ' - 'chkForceTitle - ' - Me.chkForceTitle.AutoSize = True - Me.chkForceTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkForceTitle.Location = New System.Drawing.Point(6, 168) - Me.chkForceTitle.Name = "chkForceTitle" - Me.chkForceTitle.Size = New System.Drawing.Size(135, 17) - Me.chkForceTitle.TabIndex = 64 - Me.chkForceTitle.Text = "Force Title Language:" - Me.chkForceTitle.UseVisualStyleBackColor = True - ' - 'chkOutlineForPlot - ' - Me.chkOutlineForPlot.AutoSize = True - Me.chkOutlineForPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkOutlineForPlot.Location = New System.Drawing.Point(6, 82) - Me.chkOutlineForPlot.Name = "chkOutlineForPlot" - Me.chkOutlineForPlot.Size = New System.Drawing.Size(206, 17) - Me.chkOutlineForPlot.TabIndex = 3 - Me.chkOutlineForPlot.Text = "Use Outline for Plot if Plot is Empty" - Me.chkOutlineForPlot.UseVisualStyleBackColor = True - ' - 'chkCastWithImg - ' - Me.chkCastWithImg.AutoSize = True - Me.chkCastWithImg.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCastWithImg.Location = New System.Drawing.Point(6, 40) - Me.chkCastWithImg.Name = "chkCastWithImg" - Me.chkCastWithImg.Size = New System.Drawing.Size(189, 17) - Me.chkCastWithImg.TabIndex = 1 - Me.chkCastWithImg.Text = "Scrape Only Actors With Images" - Me.chkCastWithImg.UseVisualStyleBackColor = True - ' - 'chkUseCertForMPAA - ' - Me.chkUseCertForMPAA.AutoSize = True - Me.chkUseCertForMPAA.Enabled = False - Me.chkUseCertForMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkUseCertForMPAA.Location = New System.Drawing.Point(13, 124) - Me.chkUseCertForMPAA.Name = "chkUseCertForMPAA" - Me.chkUseCertForMPAA.Size = New System.Drawing.Size(162, 17) - Me.chkUseCertForMPAA.TabIndex = 6 - Me.chkUseCertForMPAA.Text = "Use Certification for MPAA" - Me.chkUseCertForMPAA.UseVisualStyleBackColor = True - ' - 'chkFullCast - ' - Me.chkFullCast.AutoSize = True - Me.chkFullCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkFullCast.Location = New System.Drawing.Point(6, 19) - Me.chkFullCast.Name = "chkFullCast" - Me.chkFullCast.Size = New System.Drawing.Size(107, 17) - Me.chkFullCast.TabIndex = 0 - Me.chkFullCast.Text = "Scrape Full Cast" - Me.chkFullCast.UseVisualStyleBackColor = True - ' - 'chkFullCrew - ' - Me.chkFullCrew.AutoSize = True - Me.chkFullCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkFullCrew.Location = New System.Drawing.Point(6, 61) - Me.chkFullCrew.Name = "chkFullCrew" - Me.chkFullCrew.Size = New System.Drawing.Size(111, 17) - Me.chkFullCrew.TabIndex = 2 - Me.chkFullCrew.Text = "Scrape Full Crew" - Me.chkFullCrew.UseVisualStyleBackColor = True - ' - 'cbCert - ' - Me.cbCert.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbCert.Enabled = False - Me.cbCert.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbCert.FormattingEnabled = True - Me.cbCert.Items.AddRange(New Object() {"Argentina", "Australia", "Belgium", "Brazil", "Canada", "Finland", "France", "Germany", "Hong Kong", "Iceland", "Ireland", "Netherlands", "New Zealand", "Peru", "Portugal", "Singapore", "South Korea", "Spain", "Sweden", "Switzerland", "UK", "USA"}) - Me.cbCert.Location = New System.Drawing.Point(175, 102) - Me.cbCert.Name = "cbCert" - Me.cbCert.Size = New System.Drawing.Size(108, 21) - Me.cbCert.Sorted = True - Me.cbCert.TabIndex = 5 - ' - 'chkCert - ' - Me.chkCert.AutoSize = True - Me.chkCert.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkCert.Location = New System.Drawing.Point(6, 103) - Me.chkCert.Name = "chkCert" - Me.chkCert.Size = New System.Drawing.Size(168, 17) - Me.chkCert.TabIndex = 4 - Me.chkCert.Text = "Use Certification Language:" - Me.chkCert.UseVisualStyleBackColor = True - ' - 'pnlScraper - ' - Me.pnlScraper.BackColor = System.Drawing.Color.White - Me.pnlScraper.Controls.Add(Me.GroupBox10) - Me.pnlScraper.Controls.Add(Me.gbOptions) - Me.pnlScraper.Controls.Add(Me.GroupBox1) - Me.pnlScraper.Controls.Add(Me.GroupBox26) - Me.pnlScraper.Location = New System.Drawing.Point(1065, 616) - Me.pnlScraper.Name = "pnlScraper" - Me.pnlScraper.Size = New System.Drawing.Size(617, 400) - Me.pnlScraper.TabIndex = 14 - Me.pnlScraper.Visible = False - ' - 'ToolStrip1 - ' - Me.ToolStrip1.AllowMerge = False - Me.ToolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden - Me.ToolStrip1.ImageScalingSize = New System.Drawing.Size(32, 32) - Me.ToolStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow - Me.ToolStrip1.Location = New System.Drawing.Point(0, 64) - Me.ToolStrip1.Name = "ToolStrip1" - Me.ToolStrip1.Size = New System.Drawing.Size(892, 25) - Me.ToolStrip1.Stretch = True - Me.ToolStrip1.TabIndex = 4 - Me.ToolStrip1.Text = "ToolStrip1" - ' - 'pnlMain - ' - Me.pnlMain.AutoScroll = True - Me.pnlMain.BackColor = System.Drawing.Color.White - Me.pnlMain.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlMain.Location = New System.Drawing.Point(251, 147) - Me.pnlMain.Name = "pnlMain" - Me.pnlMain.Size = New System.Drawing.Size(636, 402) - Me.pnlMain.TabIndex = 9 - ' - 'gbHelp - ' - Me.gbHelp.BackColor = System.Drawing.Color.White - Me.gbHelp.Controls.Add(Me.PictureBox2) - Me.gbHelp.Controls.Add(Me.lblHelp) - Me.gbHelp.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.gbHelp.Location = New System.Drawing.Point(3, 3) - Me.gbHelp.Name = "gbHelp" - Me.gbHelp.Size = New System.Drawing.Size(628, 62) - Me.gbHelp.TabIndex = 0 - Me.gbHelp.TabStop = False - Me.gbHelp.Text = " Help" - ' - 'PictureBox2 - ' - Me.PictureBox2.Image = CType(resources.GetObject("PictureBox2.Image"), System.Drawing.Image) - Me.PictureBox2.Location = New System.Drawing.Point(6, -2) - Me.PictureBox2.Name = "PictureBox2" - Me.PictureBox2.Size = New System.Drawing.Size(16, 16) - Me.PictureBox2.TabIndex = 1 - Me.PictureBox2.TabStop = False - ' - 'lblHelp - ' - Me.lblHelp.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblHelp.Location = New System.Drawing.Point(3, 14) - Me.lblHelp.Name = "lblHelp" - Me.lblHelp.Size = New System.Drawing.Size(622, 43) - Me.lblHelp.TabIndex = 0 - ' - 'Panel2 - ' - Me.Panel2.BackColor = System.Drawing.Color.White - Me.Panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Panel2.Controls.Add(Me.gbHelp) - Me.Panel2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Panel2.Location = New System.Drawing.Point(5, 555) - Me.Panel2.Name = "Panel2" - Me.Panel2.Size = New System.Drawing.Size(636, 69) - Me.Panel2.TabIndex = 8 - ' - 'dlgSettings - ' - Me.AcceptButton = Me.btnOK - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.CancelButton = Me.btnCancel - Me.ClientSize = New System.Drawing.Size(892, 628) - Me.Controls.Add(Me.pnlSources) - Me.Controls.Add(Me.pnlGeneral) - Me.Controls.Add(Me.pnlTVSources) - Me.Controls.Add(Me.pnlImages) - Me.Controls.Add(Me.pnlScraper) - Me.Controls.Add(Me.Panel2) - Me.Controls.Add(Me.ToolStrip1) - Me.Controls.Add(Me.Panel1) - Me.Controls.Add(Me.pnlCurrent) - Me.Controls.Add(Me.tvSettings) - Me.Controls.Add(Me.pnlTop) - Me.Controls.Add(Me.btnCancel) - Me.Controls.Add(Me.btnApply) - Me.Controls.Add(Me.btnOK) - Me.Controls.Add(Me.pnlMovies) - Me.Controls.Add(Me.pnlTVImages) - Me.Controls.Add(Me.pnlExtensions) - Me.Controls.Add(Me.pnlXBMCCom) - Me.Controls.Add(Me.pnlMain) - Me.Controls.Add(Me.pnlTVScraper) - Me.Controls.Add(Me.pnlShows) - Me.DoubleBuffered = True - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "dlgSettings" - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Settings" - Me.GroupBox4.ResumeLayout(False) - Me.GroupBox4.PerformLayout() - Me.GroupBox29.ResumeLayout(False) - Me.GroupBox29.PerformLayout() - Me.GroupBox3.ResumeLayout(False) - Me.tcCleaner.ResumeLayout(False) - Me.tpStandard.ResumeLayout(False) - Me.tpStandard.PerformLayout() - Me.tpExpert.ResumeLayout(False) - Me.tpExpert.PerformLayout() - Me.GroupBox12.ResumeLayout(False) - Me.GroupBox12.PerformLayout() - Me.GroupBox2.ResumeLayout(False) - Me.GroupBox2.PerformLayout() - Me.GroupBox25.ResumeLayout(False) - Me.GroupBox25.PerformLayout() - Me.GroupBox8.ResumeLayout(False) - Me.GroupBox21.ResumeLayout(False) - Me.GroupBox21.PerformLayout() - Me.GroupBox7.ResumeLayout(False) - Me.GroupBox7.PerformLayout() - Me.GroupBox6.ResumeLayout(False) - Me.GroupBox6.PerformLayout() - Me.GroupBox5.ResumeLayout(False) - Me.GroupBox5.PerformLayout() - Me.GroupBox14.ResumeLayout(False) - Me.GroupBox14.PerformLayout() - CType(Me.tbPosterQual, System.ComponentModel.ISupportInitialize).EndInit() - Me.GroupBox13.ResumeLayout(False) - Me.GroupBox13.PerformLayout() - CType(Me.tbFanartQual, System.ComponentModel.ISupportInitialize).EndInit() - Me.GroupBox9.ResumeLayout(False) - Me.GroupBox17.ResumeLayout(False) - Me.GroupBox17.PerformLayout() - Me.pnlTop.ResumeLayout(False) - Me.pnlTop.PerformLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlGeneral.ResumeLayout(False) - Me.gbInterface.ResumeLayout(False) - Me.gbInterface.PerformLayout() - Me.pnlXBMCCom.ResumeLayout(False) - Me.gbProxy.ResumeLayout(False) - Me.gbProxy.PerformLayout() - Me.gbCreds.ResumeLayout(False) - Me.gbCreds.PerformLayout() - Me.pnlMovies.ResumeLayout(False) - Me.gbGenreFilter.ResumeLayout(False) - Me.gbFilters.ResumeLayout(False) - Me.gbFilters.PerformLayout() - Me.GroupBox27.ResumeLayout(False) - Me.GroupBox16.ResumeLayout(False) - Me.GroupBox16.PerformLayout() - Me.Panel1.ResumeLayout(False) - CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlExtensions.ResumeLayout(False) - Me.GroupBox22.ResumeLayout(False) - Me.GroupBox22.PerformLayout() - Me.GroupBox18.ResumeLayout(False) - Me.GroupBox18.PerformLayout() - Me.pnlSources.ResumeLayout(False) - Me.GroupBox19.ResumeLayout(False) - Me.GroupBox19.PerformLayout() - Me.pnlImages.ResumeLayout(False) - Me.GroupBox15.ResumeLayout(False) - Me.GroupBox15.PerformLayout() - Me.GroupBox23.ResumeLayout(False) - Me.GroupBox23.PerformLayout() - Me.GroupBox24.ResumeLayout(False) - Me.GroupBox24.PerformLayout() - Me.pnlTVSources.ResumeLayout(False) - Me.TabControl2.ResumeLayout(False) - Me.TabPage3.ResumeLayout(False) - Me.gbMiscTVSourceOpts.ResumeLayout(False) - Me.gbMiscTVSourceOpts.PerformLayout() - Me.gbTVNaming.ResumeLayout(False) - Me.gbShowBanner.ResumeLayout(False) - Me.gbShowBanner.PerformLayout() - Me.gbAllSeasonPoster.ResumeLayout(False) - Me.gbAllSeasonPoster.PerformLayout() - Me.gbEpisodeFanart.ResumeLayout(False) - Me.gbEpisodeFanart.PerformLayout() - Me.gbEpisodePosters.ResumeLayout(False) - Me.gbEpisodePosters.PerformLayout() - Me.gbSeasonFanart.ResumeLayout(False) - Me.gbSeasonFanart.PerformLayout() - Me.gbSeasonPosters.ResumeLayout(False) - Me.gbSeasonPosters.PerformLayout() - Me.gbShowFanart.ResumeLayout(False) - Me.gbShowFanart.PerformLayout() - Me.gbShowPosters.ResumeLayout(False) - Me.gbShowPosters.PerformLayout() - Me.TabPage4.ResumeLayout(False) - Me.gbShowRegex.ResumeLayout(False) - Me.gbShowRegex.PerformLayout() - Me.pnlShows.ResumeLayout(False) - Me.gbTVListOptions.ResumeLayout(False) - Me.gbTVListOptions.PerformLayout() - Me.gbEpisodeListOptions.ResumeLayout(False) - Me.gbEpisodeListOptions.PerformLayout() - Me.gbSeasonListOptions.ResumeLayout(False) - Me.gbSeasonListOptions.PerformLayout() - Me.gbShowListOptions.ResumeLayout(False) - Me.gbShowListOptions.PerformLayout() - Me.gbTVMisc.ResumeLayout(False) - Me.gbTVMisc.PerformLayout() - Me.gbEpFilter.ResumeLayout(False) - Me.gbEpFilter.PerformLayout() - Me.gbShowFilter.ResumeLayout(False) - Me.gbShowFilter.PerformLayout() - Me.pnlTVImages.ResumeLayout(False) - Me.TabControl3.ResumeLayout(False) - Me.TabPage5.ResumeLayout(False) - Me.gbAllSPosterOpts.ResumeLayout(False) - Me.gbAllSPosterOpts.PerformLayout() - CType(Me.tbAllSPosterQual, System.ComponentModel.ISupportInitialize).EndInit() - Me.gbShowPosterOpts.ResumeLayout(False) - Me.gbShowPosterOpts.PerformLayout() - CType(Me.tbShowPosterQual, System.ComponentModel.ISupportInitialize).EndInit() - Me.gbShowFanartOpts.ResumeLayout(False) - Me.gbShowFanartOpts.PerformLayout() - CType(Me.tbShowFanartQual, System.ComponentModel.ISupportInitialize).EndInit() - Me.TabPage6.ResumeLayout(False) - Me.gbSeaPosterOpts.ResumeLayout(False) - Me.gbSeaPosterOpts.PerformLayout() - CType(Me.tbSeaPosterQual, System.ComponentModel.ISupportInitialize).EndInit() - Me.gbSeaFanartOpts.ResumeLayout(False) - Me.gbSeaFanartOpts.PerformLayout() - CType(Me.tbSeaFanartQual, System.ComponentModel.ISupportInitialize).EndInit() - Me.TabPage7.ResumeLayout(False) - Me.gbEpPosterOpts.ResumeLayout(False) - Me.gbEpPosterOpts.PerformLayout() - CType(Me.tbEpPosterQual, System.ComponentModel.ISupportInitialize).EndInit() - Me.gbEpFanartOpts.ResumeLayout(False) - Me.gbEpFanartOpts.PerformLayout() - CType(Me.tbEpFanartQual, System.ComponentModel.ISupportInitialize).EndInit() - Me.TabPage8.ResumeLayout(False) - Me.TabPage8.PerformLayout() - Me.pnlTVScraper.ResumeLayout(False) - Me.GroupBox32.ResumeLayout(False) - Me.GroupBox35.ResumeLayout(False) - Me.GroupBox34.ResumeLayout(False) - Me.GroupBox33.ResumeLayout(False) - Me.gbEpLocks.ResumeLayout(False) - Me.gbShowLocks.ResumeLayout(False) - Me.GroupBox31.ResumeLayout(False) - Me.GroupBox31.PerformLayout() - Me.gbTVMIDefaults.ResumeLayout(False) - Me.gbTVMIDefaults.PerformLayout() - Me.gbTVScraperOptions.ResumeLayout(False) - Me.gbTVScraperOptions.PerformLayout() - Me.gbLanguage.ResumeLayout(False) - Me.gbLanguage.PerformLayout() - Me.gbOptions.ResumeLayout(False) - Me.gbOptions.PerformLayout() - Me.GroupBox26.ResumeLayout(False) - Me.GroupBox26.PerformLayout() - Me.GroupBox28.ResumeLayout(False) - Me.GroupBox28.PerformLayout() - Me.gbRTFormat.ResumeLayout(False) - Me.gbRTFormat.PerformLayout() - Me.GroupBox10.ResumeLayout(False) - Me.GroupBox1.ResumeLayout(False) - Me.GroupBox1.PerformLayout() - Me.pnlScraper.ResumeLayout(False) - Me.gbHelp.ResumeLayout(False) - CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit() - Me.Panel2.ResumeLayout(False) - Me.ResumeLayout(False) - Me.PerformLayout() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgSettings)) + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.chkSpecialDateAdd = New System.Windows.Forms.CheckBox() + Me.chkShowGenresText = New System.Windows.Forms.CheckBox() + Me.chkSourceFromFolder = New System.Windows.Forms.CheckBox() + Me.chkNoDisplayFanart = New System.Windows.Forms.CheckBox() + Me.chkInfoPanelAnim = New System.Windows.Forms.CheckBox() + Me.chkNoDisplayPoster = New System.Windows.Forms.CheckBox() + Me.chkShowDims = New System.Windows.Forms.CheckBox() + Me.chkUpdates = New System.Windows.Forms.CheckBox() + Me.chkOverwriteNfo = New System.Windows.Forms.CheckBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.chkLogErrors = New System.Windows.Forms.CheckBox() + Me.GroupBox29 = New System.Windows.Forms.GroupBox() + Me.cbEpTheme = New System.Windows.Forms.ComboBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.cbTVShowTheme = New System.Windows.Forms.ComboBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.cbMovieTheme = New System.Windows.Forms.ComboBox() + Me.Label35 = New System.Windows.Forms.Label() + Me.Label32 = New System.Windows.Forms.Label() + Me.cbIntLang = New System.Windows.Forms.ComboBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.tcCleaner = New System.Windows.Forms.TabControl() + Me.tpStandard = New System.Windows.Forms.TabPage() + Me.chkCleanFolderJPG = New System.Windows.Forms.CheckBox() + Me.chkCleanExtrathumbs = New System.Windows.Forms.CheckBox() + Me.chkCleanMovieTBN = New System.Windows.Forms.CheckBox() + Me.chkCleanMovieNameJPG = New System.Windows.Forms.CheckBox() + Me.chkCleanMovieTBNb = New System.Windows.Forms.CheckBox() + Me.chkCleanMovieJPG = New System.Windows.Forms.CheckBox() + Me.chkCleanFanartJPG = New System.Windows.Forms.CheckBox() + Me.chkCleanPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkCleanMovieFanartJPG = New System.Windows.Forms.CheckBox() + Me.chkCleanPosterTBN = New System.Windows.Forms.CheckBox() + Me.chkCleanMovieNFO = New System.Windows.Forms.CheckBox() + Me.chkCleanDotFanartJPG = New System.Windows.Forms.CheckBox() + Me.chkCleanMovieNFOb = New System.Windows.Forms.CheckBox() + Me.tpExpert = New System.Windows.Forms.TabPage() + Me.chkWhitelistVideo = New System.Windows.Forms.CheckBox() + Me.Label27 = New System.Windows.Forms.Label() + Me.btnRemoveWhitelist = New System.Windows.Forms.Button() + Me.btnAddWhitelist = New System.Windows.Forms.Button() + Me.txtWhitelist = New System.Windows.Forms.TextBox() + Me.lstWhitelist = New System.Windows.Forms.ListBox() + Me.Label25 = New System.Windows.Forms.Label() + Me.GroupBox12 = New System.Windows.Forms.GroupBox() + Me.chkClickScrape = New System.Windows.Forms.CheckBox() + Me.chkAskCheckboxScrape = New System.Windows.Forms.CheckBox() + Me.chkMarkNew = New System.Windows.Forms.CheckBox() + Me.lbGenre = New System.Windows.Forms.CheckedListBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.chkMovieWatchedCol = New System.Windows.Forms.CheckBox() + Me.txtCheckTitleTol = New System.Windows.Forms.TextBox() + Me.Label30 = New System.Windows.Forms.Label() + Me.chkCheckTitles = New System.Windows.Forms.CheckBox() + Me.GroupBox25 = New System.Windows.Forms.GroupBox() + Me.btnRemoveToken = New System.Windows.Forms.Button() + Me.btnAddToken = New System.Windows.Forms.Button() + Me.txtSortToken = New System.Windows.Forms.TextBox() + Me.lstSortTokens = New System.Windows.Forms.ListBox() + Me.chkDisplayYear = New System.Windows.Forms.CheckBox() + Me.chkMovieExtraCol = New System.Windows.Forms.CheckBox() + Me.chkMovieSubCol = New System.Windows.Forms.CheckBox() + Me.chkMovieTrailerCol = New System.Windows.Forms.CheckBox() + Me.chkMovieInfoCol = New System.Windows.Forms.CheckBox() + Me.chkMovieFanartCol = New System.Windows.Forms.CheckBox() + Me.chkMoviePosterCol = New System.Windows.Forms.CheckBox() + Me.GroupBox8 = New System.Windows.Forms.GroupBox() + Me.btnMovieFrodo = New System.Windows.Forms.Button() + Me.chkMovieNameMultiOnly = New System.Windows.Forms.CheckBox() + Me.GroupBox21 = New System.Windows.Forms.GroupBox() + Me.rbBracketTrailer = New System.Windows.Forms.RadioButton() + Me.rbDashTrailer = New System.Windows.Forms.RadioButton() + Me.GroupBox7 = New System.Windows.Forms.GroupBox() + Me.chkMovieNameNFOStack = New System.Windows.Forms.CheckBox() + Me.chkMovieNameNFO = New System.Windows.Forms.CheckBox() + Me.chkMovieNFO = New System.Windows.Forms.CheckBox() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.chkMovieNameDotFanartJPG = New System.Windows.Forms.CheckBox() + Me.chkMovieNameFanartJPG = New System.Windows.Forms.CheckBox() + Me.chkFanartJPG = New System.Windows.Forms.CheckBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.chkMovieNameDashPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkFolderJPG = New System.Windows.Forms.CheckBox() + Me.chkPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkPosterTBN = New System.Windows.Forms.CheckBox() + Me.chkMovieNameJPG = New System.Windows.Forms.CheckBox() + Me.chkMovieJPG = New System.Windows.Forms.CheckBox() + Me.chkMovieNameTBN = New System.Windows.Forms.CheckBox() + Me.chkMovieTBN = New System.Windows.Forms.CheckBox() + Me.lvMovies = New System.Windows.Forms.ListView() + Me.colID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colPath = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colRecur = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colFolder = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colSingle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.btnMovieRem = New System.Windows.Forms.Button() + Me.btnMovieAddFolder = New System.Windows.Forms.Button() + Me.GroupBox14 = New System.Windows.Forms.GroupBox() + Me.chkPosterOnly = New System.Windows.Forms.CheckBox() + Me.txtPosterWidth = New System.Windows.Forms.TextBox() + Me.txtPosterHeight = New System.Windows.Forms.TextBox() + Me.lblPosterQual = New System.Windows.Forms.Label() + Me.tbPosterQual = New System.Windows.Forms.TrackBar() + Me.Label24 = New System.Windows.Forms.Label() + Me.Label11 = New System.Windows.Forms.Label() + Me.Label12 = New System.Windows.Forms.Label() + Me.chkResizePoster = New System.Windows.Forms.CheckBox() + Me.lblPosterSize = New System.Windows.Forms.Label() + Me.cbPosterSize = New System.Windows.Forms.ComboBox() + Me.chkOverwritePoster = New System.Windows.Forms.CheckBox() + Me.GroupBox13 = New System.Windows.Forms.GroupBox() + Me.txtFanartWidth = New System.Windows.Forms.TextBox() + Me.txtFanartHeight = New System.Windows.Forms.TextBox() + Me.chkFanartOnly = New System.Windows.Forms.CheckBox() + Me.lblFanartQual = New System.Windows.Forms.Label() + Me.tbFanartQual = New System.Windows.Forms.TrackBar() + Me.Label26 = New System.Windows.Forms.Label() + Me.Label9 = New System.Windows.Forms.Label() + Me.Label10 = New System.Windows.Forms.Label() + Me.chkResizeFanart = New System.Windows.Forms.CheckBox() + Me.cbFanartSize = New System.Windows.Forms.ComboBox() + Me.lblFanartSize = New System.Windows.Forms.Label() + Me.chkOverwriteFanart = New System.Windows.Forms.CheckBox() + Me.GroupBox9 = New System.Windows.Forms.GroupBox() + Me.chkScraperActorThumbs = New System.Windows.Forms.CheckBox() + Me.chkNoSaveImagesToNfo = New System.Windows.Forms.CheckBox() + Me.chkSingleScrapeImages = New System.Windows.Forms.CheckBox() + Me.GroupBox17 = New System.Windows.Forms.GroupBox() + Me.chkUseImgCacheUpdaters = New System.Windows.Forms.CheckBox() + Me.chkPersistImgCache = New System.Windows.Forms.CheckBox() + Me.chkUseImgCache = New System.Windows.Forms.CheckBox() + Me.chkUseETasFA = New System.Windows.Forms.CheckBox() + Me.chkNoSpoilers = New System.Windows.Forms.CheckBox() + Me.Label15 = New System.Windows.Forms.Label() + Me.txtAutoThumbs = New System.Windows.Forms.TextBox() + Me.chkAutoThumbs = New System.Windows.Forms.CheckBox() + Me.btnOK = New System.Windows.Forms.Button() + Me.btnApply = New System.Windows.Forms.Button() + Me.btnCancel = New System.Windows.Forms.Button() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label4 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.ilSettings = New System.Windows.Forms.ImageList(Me.components) + Me.tvSettings = New System.Windows.Forms.TreeView() + Me.pnlGeneral = New System.Windows.Forms.Panel() + Me.gbInterface = New System.Windows.Forms.GroupBox() + Me.pnlXBMCCom = New System.Windows.Forms.Panel() + Me.gbProxy = New System.Windows.Forms.GroupBox() + Me.gbCreds = New System.Windows.Forms.GroupBox() + Me.txtProxyDomain = New System.Windows.Forms.TextBox() + Me.lblProxyDomain = New System.Windows.Forms.Label() + Me.txtProxyPassword = New System.Windows.Forms.TextBox() + Me.txtProxyUsername = New System.Windows.Forms.TextBox() + Me.lblProxyUN = New System.Windows.Forms.Label() + Me.lblProxyPW = New System.Windows.Forms.Label() + Me.chkEnableCredentials = New System.Windows.Forms.CheckBox() + Me.lblProxyPort = New System.Windows.Forms.Label() + Me.lblProxyURI = New System.Windows.Forms.Label() + Me.txtProxyPort = New System.Windows.Forms.TextBox() + Me.txtProxyURI = New System.Windows.Forms.TextBox() + Me.chkEnableProxy = New System.Windows.Forms.CheckBox() + Me.pnlMovies = New System.Windows.Forms.Panel() + Me.gbGenreFilter = New System.Windows.Forms.GroupBox() + Me.gbFilters = New System.Windows.Forms.GroupBox() + Me.btnResetMovieFilters = New System.Windows.Forms.Button() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.chkProperCase = New System.Windows.Forms.CheckBox() + Me.btnRemoveFilter = New System.Windows.Forms.Button() + Me.btnAddFilter = New System.Windows.Forms.Button() + Me.txtFilter = New System.Windows.Forms.TextBox() + Me.lstFilters = New System.Windows.Forms.ListBox() + Me.GroupBox27 = New System.Windows.Forms.GroupBox() + Me.chkMissingExtra = New System.Windows.Forms.CheckBox() + Me.chkMissingSubs = New System.Windows.Forms.CheckBox() + Me.chkMissingTrailer = New System.Windows.Forms.CheckBox() + Me.chkMissingNFO = New System.Windows.Forms.CheckBox() + Me.chkMissingFanart = New System.Windows.Forms.CheckBox() + Me.chkMissingPoster = New System.Windows.Forms.CheckBox() + Me.GroupBox16 = New System.Windows.Forms.GroupBox() + Me.chkAutoBD = New System.Windows.Forms.CheckBox() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.txtBDPath = New System.Windows.Forms.TextBox() + Me.lblCurrent = New System.Windows.Forms.Label() + Me.pnlCurrent = New System.Windows.Forms.Panel() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.pbCurrent = New System.Windows.Forms.PictureBox() + Me.pnlExtensions = New System.Windows.Forms.Panel() + Me.GroupBox22 = New System.Windows.Forms.GroupBox() + Me.btnRemoveNoStack = New System.Windows.Forms.Button() + Me.btnAddNoStack = New System.Windows.Forms.Button() + Me.txtNoStack = New System.Windows.Forms.TextBox() + Me.lstNoStack = New System.Windows.Forms.ListBox() + Me.GroupBox18 = New System.Windows.Forms.GroupBox() + Me.btnResetValidExts = New System.Windows.Forms.Button() + Me.btnRemMovieExt = New System.Windows.Forms.Button() + Me.btnAddMovieExt = New System.Windows.Forms.Button() + Me.txtMovieExt = New System.Windows.Forms.TextBox() + Me.lstMovieExts = New System.Windows.Forms.ListBox() + Me.pnlSources = New System.Windows.Forms.Panel() + Me.btnEditSource = New System.Windows.Forms.Button() + Me.GroupBox19 = New System.Windows.Forms.GroupBox() + Me.chkVideoTSParentXBMC = New System.Windows.Forms.CheckBox() + Me.chkScanOrderModify = New System.Windows.Forms.CheckBox() + Me.chkSortBeforeScan = New System.Windows.Forms.CheckBox() + Me.chkIgnoreLastScan = New System.Windows.Forms.CheckBox() + Me.chkCleanDB = New System.Windows.Forms.CheckBox() + Me.chkAutoDetectVTS = New System.Windows.Forms.CheckBox() + Me.chkSkipStackedSizeCheck = New System.Windows.Forms.CheckBox() + Me.Label21 = New System.Windows.Forms.Label() + Me.txtSkipLessThan = New System.Windows.Forms.TextBox() + Me.Label20 = New System.Windows.Forms.Label() + Me.pnlImages = New System.Windows.Forms.Panel() + Me.GroupBox15 = New System.Windows.Forms.GroupBox() + Me.cbTrailerQuality = New System.Windows.Forms.ComboBox() + Me.lblPreferredQuality = New System.Windows.Forms.Label() + Me.chkDeleteAllTrailers = New System.Windows.Forms.CheckBox() + Me.chkOverwriteTrailer = New System.Windows.Forms.CheckBox() + Me.chkNoDLTrailer = New System.Windows.Forms.CheckBox() + Me.chkSingleScrapeTrailer = New System.Windows.Forms.CheckBox() + Me.chkUpdaterTrailer = New System.Windows.Forms.CheckBox() + Me.chkDownloadTrailer = New System.Windows.Forms.CheckBox() + Me.GroupBox23 = New System.Windows.Forms.GroupBox() + Me.chkAutoETSize = New System.Windows.Forms.CheckBox() + Me.cbAutoETSize = New System.Windows.Forms.ComboBox() + Me.GroupBox24 = New System.Windows.Forms.GroupBox() + Me.txtETWidth = New System.Windows.Forms.TextBox() + Me.txtETHeight = New System.Windows.Forms.TextBox() + Me.chkETPadding = New System.Windows.Forms.CheckBox() + Me.Label28 = New System.Windows.Forms.Label() + Me.Label29 = New System.Windows.Forms.Label() + Me.rbETCustom = New System.Windows.Forms.RadioButton() + Me.rbETNative = New System.Windows.Forms.RadioButton() + Me.fbdBrowse = New System.Windows.Forms.FolderBrowserDialog() + Me.ToolTips = New System.Windows.Forms.ToolTip(Me.components) + Me.pnlTVSources = New System.Windows.Forms.Panel() + Me.TabControl2 = New System.Windows.Forms.TabControl() + Me.TabPage3 = New System.Windows.Forms.TabPage() + Me.btnTVShowFrodo = New System.Windows.Forms.Button() + Me.lvTVSources = New System.Windows.Forms.ListView() + Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.gbMiscTVSourceOpts = New System.Windows.Forms.GroupBox() + Me.Label6 = New System.Windows.Forms.Label() + Me.txtTVSkipLessThan = New System.Windows.Forms.TextBox() + Me.Label7 = New System.Windows.Forms.Label() + Me.chkTVScanOrderModify = New System.Windows.Forms.CheckBox() + Me.chkTVIgnoreLastScan = New System.Windows.Forms.CheckBox() + Me.chkTVCleanDB = New System.Windows.Forms.CheckBox() + Me.btnAddTVSource = New System.Windows.Forms.Button() + Me.btnEditTVSource = New System.Windows.Forms.Button() + Me.btnRemTVSource = New System.Windows.Forms.Button() + Me.gbTVNaming = New System.Windows.Forms.GroupBox() + Me.gbShowBanner = New System.Windows.Forms.GroupBox() + Me.chkShowBannerJPG = New System.Windows.Forms.CheckBox() + Me.gbAllSeasonPoster = New System.Windows.Forms.GroupBox() + Me.chkSeasonAllPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonAllJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonAllTBN = New System.Windows.Forms.CheckBox() + Me.gbEpisodeFanart = New System.Windows.Forms.GroupBox() + Me.chkEpisodeDotFanart = New System.Windows.Forms.CheckBox() + Me.chkEpisodeDashFanart = New System.Windows.Forms.CheckBox() + Me.gbEpisodePosters = New System.Windows.Forms.GroupBox() + Me.chkEpisodeDashThumbJPG = New System.Windows.Forms.CheckBox() + Me.chkEpisodeJPG = New System.Windows.Forms.CheckBox() + Me.chkEpisodeTBN = New System.Windows.Forms.CheckBox() + Me.gbSeasonFanart = New System.Windows.Forms.GroupBox() + Me.chkSeasonXXDashFanartJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonDotFanart = New System.Windows.Forms.CheckBox() + Me.chkSeasonDashFanart = New System.Windows.Forms.CheckBox() + Me.chkSeasonFanartJPG = New System.Windows.Forms.CheckBox() + Me.gbSeasonPosters = New System.Windows.Forms.GroupBox() + Me.chkSeasonXXDashPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonFolderJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonNameJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonNameTBN = New System.Windows.Forms.CheckBox() + Me.chkSeasonPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonPosterTBN = New System.Windows.Forms.CheckBox() + Me.chkSeasonXTBN = New System.Windows.Forms.CheckBox() + Me.chkSeasonXXTBN = New System.Windows.Forms.CheckBox() + Me.gbShowFanart = New System.Windows.Forms.GroupBox() + Me.chkShowDotFanart = New System.Windows.Forms.CheckBox() + Me.chkShowDashFanart = New System.Windows.Forms.CheckBox() + Me.chkShowFanartJPG = New System.Windows.Forms.CheckBox() + Me.gbShowPosters = New System.Windows.Forms.GroupBox() + Me.chkShowJPG = New System.Windows.Forms.CheckBox() + Me.chkShowTBN = New System.Windows.Forms.CheckBox() + Me.chkShowPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkShowPosterTBN = New System.Windows.Forms.CheckBox() + Me.chkShowFolderJPG = New System.Windows.Forms.CheckBox() + Me.TabPage4 = New System.Windows.Forms.TabPage() + Me.btnGetTVProfiles = New System.Windows.Forms.Button() + Me.btnRegexDown = New System.Windows.Forms.Button() + Me.btnRegexUp = New System.Windows.Forms.Button() + Me.btnResetShowRegex = New System.Windows.Forms.Button() + Me.gbShowRegex = New System.Windows.Forms.GroupBox() + Me.btnClearRegex = New System.Windows.Forms.Button() + Me.lblSeasonMatch = New System.Windows.Forms.Label() + Me.btnAddShowRegex = New System.Windows.Forms.Button() + Me.txtSeasonRegex = New System.Windows.Forms.TextBox() + Me.lblEpisodeRetrieve = New System.Windows.Forms.Label() + Me.cboSeasonRetrieve = New System.Windows.Forms.ComboBox() + Me.lblSeasonRetrieve = New System.Windows.Forms.Label() + Me.txtEpRegex = New System.Windows.Forms.TextBox() + Me.lblEpisodeMatch = New System.Windows.Forms.Label() + Me.cboEpRetrieve = New System.Windows.Forms.ComboBox() + Me.btnEditShowRegex = New System.Windows.Forms.Button() + Me.btnRemoveShowRegex = New System.Windows.Forms.Button() + Me.lvShowRegex = New System.Windows.Forms.ListView() + Me.colRegID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colSeason = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colSeasonApply = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colEpisode = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colEpApply = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.pnlShows = New System.Windows.Forms.Panel() + Me.gbTVListOptions = New System.Windows.Forms.GroupBox() + Me.chkDisplayMissingEpisodes = New System.Windows.Forms.CheckBox() + Me.gbEpisodeListOptions = New System.Windows.Forms.GroupBox() + Me.chkEpisodeWatchedCol = New System.Windows.Forms.CheckBox() + Me.chkEpisodeNfoCol = New System.Windows.Forms.CheckBox() + Me.chkEpisodeFanartCol = New System.Windows.Forms.CheckBox() + Me.chkEpisodePosterCol = New System.Windows.Forms.CheckBox() + Me.gbSeasonListOptions = New System.Windows.Forms.GroupBox() + Me.chkSeasonFanartCol = New System.Windows.Forms.CheckBox() + Me.chkSeasonPosterCol = New System.Windows.Forms.CheckBox() + Me.gbShowListOptions = New System.Windows.Forms.GroupBox() + Me.chkShowNfoCol = New System.Windows.Forms.CheckBox() + Me.chkShowFanartCol = New System.Windows.Forms.CheckBox() + Me.chkShowPosterCol = New System.Windows.Forms.CheckBox() + Me.gbTVMisc = New System.Windows.Forms.GroupBox() + Me.chkMarkNewShows = New System.Windows.Forms.CheckBox() + Me.chkMarkNewEpisodes = New System.Windows.Forms.CheckBox() + Me.chkDisplayAllSeason = New System.Windows.Forms.CheckBox() + Me.lblRatingRegion = New System.Windows.Forms.Label() + Me.cbRatingRegion = New System.Windows.Forms.ComboBox() + Me.gbEpFilter = New System.Windows.Forms.GroupBox() + Me.btnResetEpFilter = New System.Windows.Forms.Button() + Me.chkNoFilterEpisode = New System.Windows.Forms.CheckBox() + Me.btnEpFilterDown = New System.Windows.Forms.Button() + Me.btnEpFilterUp = New System.Windows.Forms.Button() + Me.chkEpProperCase = New System.Windows.Forms.CheckBox() + Me.btnRemoveEpFilter = New System.Windows.Forms.Button() + Me.btnAddEpFilter = New System.Windows.Forms.Button() + Me.txtEpFilter = New System.Windows.Forms.TextBox() + Me.lstEpFilters = New System.Windows.Forms.ListBox() + Me.gbShowFilter = New System.Windows.Forms.GroupBox() + Me.btnResetShowFilters = New System.Windows.Forms.Button() + Me.btnShowFilterDown = New System.Windows.Forms.Button() + Me.btnShowFilterUp = New System.Windows.Forms.Button() + Me.chkShowProperCase = New System.Windows.Forms.CheckBox() + Me.btnRemoveShowFilter = New System.Windows.Forms.Button() + Me.btnAddShowFilter = New System.Windows.Forms.Button() + Me.txtShowFilter = New System.Windows.Forms.TextBox() + Me.lstShowFilters = New System.Windows.Forms.ListBox() + Me.pnlTVImages = New System.Windows.Forms.Panel() + Me.TabControl3 = New System.Windows.Forms.TabControl() + Me.TabPage5 = New System.Windows.Forms.TabPage() + Me.gbAllSPosterOpts = New System.Windows.Forms.GroupBox() + Me.rbAllSPoster = New System.Windows.Forms.RadioButton() + Me.rbAllSBanner = New System.Windows.Forms.RadioButton() + Me.txtAllSPosterWidth = New System.Windows.Forms.TextBox() + Me.txtAllSPosterHeight = New System.Windows.Forms.TextBox() + Me.lblAllSPosterQual = New System.Windows.Forms.Label() + Me.tbAllSPosterQual = New System.Windows.Forms.TrackBar() + Me.lblAllSPosterQ = New System.Windows.Forms.Label() + Me.lblAllSPosterWidth = New System.Windows.Forms.Label() + Me.lblAllSPosterHeight = New System.Windows.Forms.Label() + Me.chkResizeAllSPoster = New System.Windows.Forms.CheckBox() + Me.lblAllSPosterSize = New System.Windows.Forms.Label() + Me.cbAllSPosterSize = New System.Windows.Forms.ComboBox() + Me.chkOverwriteAllSPoster = New System.Windows.Forms.CheckBox() + Me.gbShowPosterOpts = New System.Windows.Forms.GroupBox() + Me.rbPoster = New System.Windows.Forms.RadioButton() + Me.rbBanner = New System.Windows.Forms.RadioButton() + Me.txtShowPosterWidth = New System.Windows.Forms.TextBox() + Me.txtShowPosterHeight = New System.Windows.Forms.TextBox() + Me.lblShowPosterQual = New System.Windows.Forms.Label() + Me.tbShowPosterQual = New System.Windows.Forms.TrackBar() + Me.lblShowPosterQ = New System.Windows.Forms.Label() + Me.lblShowPosterWidth = New System.Windows.Forms.Label() + Me.lblShowPosterHeight = New System.Windows.Forms.Label() + Me.chkResizeShowPoster = New System.Windows.Forms.CheckBox() + Me.lblShowPosterSize = New System.Windows.Forms.Label() + Me.cbShowPosterSize = New System.Windows.Forms.ComboBox() + Me.chkOverwriteShowPoster = New System.Windows.Forms.CheckBox() + Me.gbShowFanartOpts = New System.Windows.Forms.GroupBox() + Me.txtShowFanartWidth = New System.Windows.Forms.TextBox() + Me.txtShowFanartHeight = New System.Windows.Forms.TextBox() + Me.lblShowFanartQual = New System.Windows.Forms.Label() + Me.tbShowFanartQual = New System.Windows.Forms.TrackBar() + Me.lblShowFanartQ = New System.Windows.Forms.Label() + Me.lblShowFanartWidth = New System.Windows.Forms.Label() + Me.lblShowFanartHeight = New System.Windows.Forms.Label() + Me.chkResizeShowFanart = New System.Windows.Forms.CheckBox() + Me.cbShowFanartSize = New System.Windows.Forms.ComboBox() + Me.lblShowFanartSize = New System.Windows.Forms.Label() + Me.chkOverwriteShowFanart = New System.Windows.Forms.CheckBox() + Me.TabPage6 = New System.Windows.Forms.TabPage() + Me.gbSeaPosterOpts = New System.Windows.Forms.GroupBox() + Me.txtSeaPosterWidth = New System.Windows.Forms.TextBox() + Me.txtSeaPosterHeight = New System.Windows.Forms.TextBox() + Me.lblSeaPosterQual = New System.Windows.Forms.Label() + Me.tbSeaPosterQual = New System.Windows.Forms.TrackBar() + Me.lblSeaPosterQ = New System.Windows.Forms.Label() + Me.lblSeaPosterWidth = New System.Windows.Forms.Label() + Me.lblSeaPosterHeight = New System.Windows.Forms.Label() + Me.chkSeaResizePoster = New System.Windows.Forms.CheckBox() + Me.lblSeaPosterSize = New System.Windows.Forms.Label() + Me.cbSeaPosterSize = New System.Windows.Forms.ComboBox() + Me.chkSeaOverwritePoster = New System.Windows.Forms.CheckBox() + Me.gbSeaFanartOpts = New System.Windows.Forms.GroupBox() + Me.txtSeaFanartWidth = New System.Windows.Forms.TextBox() + Me.txtSeaFanartHeight = New System.Windows.Forms.TextBox() + Me.lblSeaFanartQual = New System.Windows.Forms.Label() + Me.tbSeaFanartQual = New System.Windows.Forms.TrackBar() + Me.lblSeaFanartQ = New System.Windows.Forms.Label() + Me.lblSeaFanartWidth = New System.Windows.Forms.Label() + Me.lblSeaFanartHeight = New System.Windows.Forms.Label() + Me.chkSeaResizeFanart = New System.Windows.Forms.CheckBox() + Me.cbSeaFanartSize = New System.Windows.Forms.ComboBox() + Me.lblSeaFanartSize = New System.Windows.Forms.Label() + Me.chkSeaOverwriteFanart = New System.Windows.Forms.CheckBox() + Me.TabPage7 = New System.Windows.Forms.TabPage() + Me.gbEpPosterOpts = New System.Windows.Forms.GroupBox() + Me.txtEpPosterWidth = New System.Windows.Forms.TextBox() + Me.txtEpPosterHeight = New System.Windows.Forms.TextBox() + Me.lblEpPosterQual = New System.Windows.Forms.Label() + Me.tbEpPosterQual = New System.Windows.Forms.TrackBar() + Me.lblEpPosterQ = New System.Windows.Forms.Label() + Me.lblEpPosterWidth = New System.Windows.Forms.Label() + Me.lblEpPosterHeight = New System.Windows.Forms.Label() + Me.chkResizeEpPoster = New System.Windows.Forms.CheckBox() + Me.chkOverwriteEpPoster = New System.Windows.Forms.CheckBox() + Me.gbEpFanartOpts = New System.Windows.Forms.GroupBox() + Me.txtEpFanartWidth = New System.Windows.Forms.TextBox() + Me.txtEpFanartHeight = New System.Windows.Forms.TextBox() + Me.lblEpFanartQual = New System.Windows.Forms.Label() + Me.tbEpFanartQual = New System.Windows.Forms.TrackBar() + Me.lblEpFanartQ = New System.Windows.Forms.Label() + Me.lblEpFanartWidth = New System.Windows.Forms.Label() + Me.lblEpFanartHeight = New System.Windows.Forms.Label() + Me.chkResizeEpFanart = New System.Windows.Forms.CheckBox() + Me.cbEpFanartSize = New System.Windows.Forms.ComboBox() + Me.lblEpFanartSize = New System.Windows.Forms.Label() + Me.chkOverwriteEpFanart = New System.Windows.Forms.CheckBox() + Me.TabPage8 = New System.Windows.Forms.TabPage() + Me.chkGetEnglishImages = New System.Windows.Forms.CheckBox() + Me.chkOnlyTVImagesLanguage = New System.Windows.Forms.CheckBox() + Me.pnlTVScraper = New System.Windows.Forms.Panel() + Me.GroupBox32 = New System.Windows.Forms.GroupBox() + Me.GroupBox35 = New System.Windows.Forms.GroupBox() + Me.chkScraperShowRating = New System.Windows.Forms.CheckBox() + Me.chkScraperShowActors = New System.Windows.Forms.CheckBox() + Me.chkScraperShowStudio = New System.Windows.Forms.CheckBox() + Me.chkScraperShowPremiered = New System.Windows.Forms.CheckBox() + Me.chkScraperShowEGU = New System.Windows.Forms.CheckBox() + Me.chkScraperShowMPAA = New System.Windows.Forms.CheckBox() + Me.chkScraperShowPlot = New System.Windows.Forms.CheckBox() + Me.chkScraperShowGenre = New System.Windows.Forms.CheckBox() + Me.chkScraperShowTitle = New System.Windows.Forms.CheckBox() + Me.GroupBox34 = New System.Windows.Forms.GroupBox() + Me.chkScraperEpActors = New System.Windows.Forms.CheckBox() + Me.chkScraperEpCredits = New System.Windows.Forms.CheckBox() + Me.chkScraperEpDirector = New System.Windows.Forms.CheckBox() + Me.chkScraperEpPlot = New System.Windows.Forms.CheckBox() + Me.chkScraperEpRating = New System.Windows.Forms.CheckBox() + Me.chkScraperEpAired = New System.Windows.Forms.CheckBox() + Me.chkScraperEpTitle = New System.Windows.Forms.CheckBox() + Me.chkScraperEpEpisode = New System.Windows.Forms.CheckBox() + Me.chkScraperEpSeason = New System.Windows.Forms.CheckBox() + Me.GroupBox33 = New System.Windows.Forms.GroupBox() + Me.gbEpLocks = New System.Windows.Forms.GroupBox() + Me.chkEpLockTitle = New System.Windows.Forms.CheckBox() + Me.chkEpLockRating = New System.Windows.Forms.CheckBox() + Me.chkEpLockPlot = New System.Windows.Forms.CheckBox() + Me.gbShowLocks = New System.Windows.Forms.GroupBox() + Me.chkShowLockPlot = New System.Windows.Forms.CheckBox() + Me.chkShowLockGenre = New System.Windows.Forms.CheckBox() + Me.chkShowLockStudio = New System.Windows.Forms.CheckBox() + Me.chkShowLockRating = New System.Windows.Forms.CheckBox() + Me.chkShowLockTitle = New System.Windows.Forms.CheckBox() + Me.GroupBox31 = New System.Windows.Forms.GroupBox() + Me.gbTVMIDefaults = New System.Windows.Forms.GroupBox() + Me.lstTVMetaData = New System.Windows.Forms.ListBox() + Me.txtTVDefFIExt = New System.Windows.Forms.TextBox() + Me.Label49 = New System.Windows.Forms.Label() + Me.btnRemoveTVMetaDataFT = New System.Windows.Forms.Button() + Me.btnEditTVMetaDataFT = New System.Windows.Forms.Button() + Me.btnNewTVMetaDataFT = New System.Windows.Forms.Button() + Me.cboTVMetaDataOverlay = New System.Windows.Forms.ComboBox() + Me.Label50 = New System.Windows.Forms.Label() + Me.chkTVScanMetaData = New System.Windows.Forms.CheckBox() + Me.gbTVScraperOptions = New System.Windows.Forms.GroupBox() + Me.lblOrdering = New System.Windows.Forms.Label() + Me.cbOrdering = New System.Windows.Forms.ComboBox() + Me.lblTVUpdate = New System.Windows.Forms.Label() + Me.cboTVUpdate = New System.Windows.Forms.ComboBox() + Me.lblAPIKey = New System.Windows.Forms.Label() + Me.lblTVDBMirror = New System.Windows.Forms.Label() + Me.txtAPIKey = New System.Windows.Forms.TextBox() + Me.txtTVDBMirror = New System.Windows.Forms.TextBox() + Me.gbLanguage = New System.Windows.Forms.GroupBox() + Me.lblTVLanguagePreferred = New System.Windows.Forms.Label() + Me.btnTVLanguageFetch = New System.Windows.Forms.Button() + Me.cbTVLanguage = New System.Windows.Forms.ComboBox() + Me.gbOptions = New System.Windows.Forms.GroupBox() + Me.chkCertification = New System.Windows.Forms.CheckBox() + Me.chkTop250 = New System.Windows.Forms.CheckBox() + Me.chkCountry = New System.Windows.Forms.CheckBox() + Me.txtGenreLimit = New System.Windows.Forms.TextBox() + Me.lblLimit2 = New System.Windows.Forms.Label() + Me.txtActorLimit = New System.Windows.Forms.TextBox() + Me.lblLimit = New System.Windows.Forms.Label() + Me.chkCrew = New System.Windows.Forms.CheckBox() + Me.chkMusicBy = New System.Windows.Forms.CheckBox() + Me.chkProducers = New System.Windows.Forms.CheckBox() + Me.chkWriters = New System.Windows.Forms.CheckBox() + Me.chkStudio = New System.Windows.Forms.CheckBox() + Me.chkRuntime = New System.Windows.Forms.CheckBox() + Me.chkPlot = New System.Windows.Forms.CheckBox() + Me.chkOutline = New System.Windows.Forms.CheckBox() + Me.chkGenre = New System.Windows.Forms.CheckBox() + Me.chkDirector = New System.Windows.Forms.CheckBox() + Me.chkTagline = New System.Windows.Forms.CheckBox() + Me.chkCast = New System.Windows.Forms.CheckBox() + Me.chkVotes = New System.Windows.Forms.CheckBox() + Me.chkTrailer = New System.Windows.Forms.CheckBox() + Me.chkRating = New System.Windows.Forms.CheckBox() + Me.chkRelease = New System.Windows.Forms.CheckBox() + Me.chkMPAA = New System.Windows.Forms.CheckBox() + Me.chkYear = New System.Windows.Forms.CheckBox() + Me.chkTitle = New System.Windows.Forms.CheckBox() + Me.GroupBox26 = New System.Windows.Forms.GroupBox() + Me.GroupBox28 = New System.Windows.Forms.GroupBox() + Me.lstMetaData = New System.Windows.Forms.ListBox() + Me.txtDefFIExt = New System.Windows.Forms.TextBox() + Me.Label34 = New System.Windows.Forms.Label() + Me.btnRemoveMetaDataFT = New System.Windows.Forms.Button() + Me.btnEditMetaDataFT = New System.Windows.Forms.Button() + Me.btnNewMetaDataFT = New System.Windows.Forms.Button() + Me.chkIFOScan = New System.Windows.Forms.CheckBox() + Me.cbLanguages = New System.Windows.Forms.ComboBox() + Me.Label31 = New System.Windows.Forms.Label() + Me.gbRTFormat = New System.Windows.Forms.GroupBox() + Me.Label51 = New System.Windows.Forms.Label() + Me.txtRuntimeFormat = New System.Windows.Forms.TextBox() + Me.chkUseMIDuration = New System.Windows.Forms.CheckBox() + Me.chkScanMediaInfo = New System.Windows.Forms.CheckBox() + Me.GroupBox10 = New System.Windows.Forms.GroupBox() + Me.chkLockSubtitle = New System.Windows.Forms.CheckBox() + Me.chkLockMPAA = New System.Windows.Forms.CheckBox() + Me.chkLockLanguageA = New System.Windows.Forms.CheckBox() + Me.chkLockLanguageV = New System.Windows.Forms.CheckBox() + Me.chkLockOutline = New System.Windows.Forms.CheckBox() + Me.chkLockPlot = New System.Windows.Forms.CheckBox() + Me.chkLockTrailer = New System.Windows.Forms.CheckBox() + Me.chkLockGenre = New System.Windows.Forms.CheckBox() + Me.chkLockRealStudio = New System.Windows.Forms.CheckBox() + Me.chkLockRating = New System.Windows.Forms.CheckBox() + Me.chkLockTagline = New System.Windows.Forms.CheckBox() + Me.chkLockTitle = New System.Windows.Forms.CheckBox() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.chkUseMPAAFSK = New System.Windows.Forms.CheckBox() + Me.chkOnlyValueForCert = New System.Windows.Forms.CheckBox() + Me.cbForce = New System.Windows.Forms.ComboBox() + Me.chkForceTitle = New System.Windows.Forms.CheckBox() + Me.chkOutlineForPlot = New System.Windows.Forms.CheckBox() + Me.chkCastWithImg = New System.Windows.Forms.CheckBox() + Me.chkUseCertForMPAA = New System.Windows.Forms.CheckBox() + Me.chkFullCast = New System.Windows.Forms.CheckBox() + Me.chkFullCrew = New System.Windows.Forms.CheckBox() + Me.cbCert = New System.Windows.Forms.ComboBox() + Me.chkCert = New System.Windows.Forms.CheckBox() + Me.pnlScraper = New System.Windows.Forms.Panel() + Me.ToolStrip1 = New System.Windows.Forms.ToolStrip() + Me.pnlMain = New System.Windows.Forms.Panel() + Me.gbHelp = New System.Windows.Forms.GroupBox() + Me.PictureBox2 = New System.Windows.Forms.PictureBox() + Me.lblHelp = New System.Windows.Forms.Label() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.GroupBox4.SuspendLayout() + Me.GroupBox29.SuspendLayout() + Me.GroupBox3.SuspendLayout() + Me.tcCleaner.SuspendLayout() + Me.tpStandard.SuspendLayout() + Me.tpExpert.SuspendLayout() + Me.GroupBox12.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.GroupBox25.SuspendLayout() + Me.GroupBox8.SuspendLayout() + Me.GroupBox21.SuspendLayout() + Me.GroupBox7.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox5.SuspendLayout() + Me.GroupBox14.SuspendLayout() + CType(Me.tbPosterQual, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox13.SuspendLayout() + CType(Me.tbFanartQual, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox9.SuspendLayout() + Me.GroupBox17.SuspendLayout() + Me.pnlTop.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlGeneral.SuspendLayout() + Me.gbInterface.SuspendLayout() + Me.pnlXBMCCom.SuspendLayout() + Me.gbProxy.SuspendLayout() + Me.gbCreds.SuspendLayout() + Me.pnlMovies.SuspendLayout() + Me.gbGenreFilter.SuspendLayout() + Me.gbFilters.SuspendLayout() + Me.GroupBox27.SuspendLayout() + Me.GroupBox16.SuspendLayout() + Me.Panel1.SuspendLayout() + CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlExtensions.SuspendLayout() + Me.GroupBox22.SuspendLayout() + Me.GroupBox18.SuspendLayout() + Me.pnlSources.SuspendLayout() + Me.GroupBox19.SuspendLayout() + Me.pnlImages.SuspendLayout() + Me.GroupBox15.SuspendLayout() + Me.GroupBox23.SuspendLayout() + Me.GroupBox24.SuspendLayout() + Me.pnlTVSources.SuspendLayout() + Me.TabControl2.SuspendLayout() + Me.TabPage3.SuspendLayout() + Me.gbMiscTVSourceOpts.SuspendLayout() + Me.gbTVNaming.SuspendLayout() + Me.gbShowBanner.SuspendLayout() + Me.gbAllSeasonPoster.SuspendLayout() + Me.gbEpisodeFanart.SuspendLayout() + Me.gbEpisodePosters.SuspendLayout() + Me.gbSeasonFanart.SuspendLayout() + Me.gbSeasonPosters.SuspendLayout() + Me.gbShowFanart.SuspendLayout() + Me.gbShowPosters.SuspendLayout() + Me.TabPage4.SuspendLayout() + Me.gbShowRegex.SuspendLayout() + Me.pnlShows.SuspendLayout() + Me.gbTVListOptions.SuspendLayout() + Me.gbEpisodeListOptions.SuspendLayout() + Me.gbSeasonListOptions.SuspendLayout() + Me.gbShowListOptions.SuspendLayout() + Me.gbTVMisc.SuspendLayout() + Me.gbEpFilter.SuspendLayout() + Me.gbShowFilter.SuspendLayout() + Me.pnlTVImages.SuspendLayout() + Me.TabControl3.SuspendLayout() + Me.TabPage5.SuspendLayout() + Me.gbAllSPosterOpts.SuspendLayout() + CType(Me.tbAllSPosterQual, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbShowPosterOpts.SuspendLayout() + CType(Me.tbShowPosterQual, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbShowFanartOpts.SuspendLayout() + CType(Me.tbShowFanartQual, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TabPage6.SuspendLayout() + Me.gbSeaPosterOpts.SuspendLayout() + CType(Me.tbSeaPosterQual, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbSeaFanartOpts.SuspendLayout() + CType(Me.tbSeaFanartQual, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TabPage7.SuspendLayout() + Me.gbEpPosterOpts.SuspendLayout() + CType(Me.tbEpPosterQual, System.ComponentModel.ISupportInitialize).BeginInit() + Me.gbEpFanartOpts.SuspendLayout() + CType(Me.tbEpFanartQual, System.ComponentModel.ISupportInitialize).BeginInit() + Me.TabPage8.SuspendLayout() + Me.pnlTVScraper.SuspendLayout() + Me.GroupBox32.SuspendLayout() + Me.GroupBox35.SuspendLayout() + Me.GroupBox34.SuspendLayout() + Me.GroupBox33.SuspendLayout() + Me.gbEpLocks.SuspendLayout() + Me.gbShowLocks.SuspendLayout() + Me.GroupBox31.SuspendLayout() + Me.gbTVMIDefaults.SuspendLayout() + Me.gbTVScraperOptions.SuspendLayout() + Me.gbLanguage.SuspendLayout() + Me.gbOptions.SuspendLayout() + Me.GroupBox26.SuspendLayout() + Me.GroupBox28.SuspendLayout() + Me.gbRTFormat.SuspendLayout() + Me.GroupBox10.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.pnlScraper.SuspendLayout() + Me.gbHelp.SuspendLayout() + CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.chkSpecialDateAdd) + Me.GroupBox4.Controls.Add(Me.chkShowGenresText) + Me.GroupBox4.Controls.Add(Me.chkSourceFromFolder) + Me.GroupBox4.Controls.Add(Me.chkNoDisplayFanart) + Me.GroupBox4.Controls.Add(Me.chkInfoPanelAnim) + Me.GroupBox4.Controls.Add(Me.chkNoDisplayPoster) + Me.GroupBox4.Controls.Add(Me.chkShowDims) + Me.GroupBox4.Controls.Add(Me.chkUpdates) + Me.GroupBox4.Controls.Add(Me.chkOverwriteNfo) + Me.GroupBox4.Controls.Add(Me.Label5) + Me.GroupBox4.Controls.Add(Me.chkLogErrors) + Me.GroupBox4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox4.Location = New System.Drawing.Point(210, 3) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(900, 657) + Me.GroupBox4.TabIndex = 1 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "Miscellaneous" + ' + 'chkSpecialDateAdd + ' + Me.chkSpecialDateAdd.AutoSize = True + Me.chkSpecialDateAdd.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSpecialDateAdd.Location = New System.Drawing.Point(10, 195) + Me.chkSpecialDateAdd.Name = "chkSpecialDateAdd" + Me.chkSpecialDateAdd.Size = New System.Drawing.Size(196, 17) + Me.chkSpecialDateAdd.TabIndex = 10 + Me.chkSpecialDateAdd.Text = "Use file creation date of videofile" + Me.chkSpecialDateAdd.UseVisualStyleBackColor = True + ' + 'chkShowGenresText + ' + Me.chkShowGenresText.AutoSize = True + Me.chkShowGenresText.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowGenresText.Location = New System.Drawing.Point(10, 178) + Me.chkShowGenresText.Name = "chkShowGenresText" + Me.chkShowGenresText.Size = New System.Drawing.Size(166, 17) + Me.chkShowGenresText.TabIndex = 9 + Me.chkShowGenresText.Text = "Allways Display Genres Text" + Me.chkShowGenresText.UseVisualStyleBackColor = True + ' + 'chkSourceFromFolder + ' + Me.chkSourceFromFolder.AutoSize = True + Me.chkSourceFromFolder.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkSourceFromFolder.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSourceFromFolder.Location = New System.Drawing.Point(10, 110) + Me.chkSourceFromFolder.Name = "chkSourceFromFolder" + Me.chkSourceFromFolder.Size = New System.Drawing.Size(243, 17) + Me.chkSourceFromFolder.TabIndex = 5 + Me.chkSourceFromFolder.Text = "Include Folder Name in Source Type Check" + Me.chkSourceFromFolder.UseVisualStyleBackColor = True + ' + 'chkNoDisplayFanart + ' + Me.chkNoDisplayFanart.AutoSize = True + Me.chkNoDisplayFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkNoDisplayFanart.Location = New System.Drawing.Point(10, 144) + Me.chkNoDisplayFanart.Name = "chkNoDisplayFanart" + Me.chkNoDisplayFanart.Size = New System.Drawing.Size(139, 17) + Me.chkNoDisplayFanart.TabIndex = 7 + Me.chkNoDisplayFanart.Text = "Do Not Display Fanart" + Me.chkNoDisplayFanart.UseVisualStyleBackColor = True + ' + 'chkInfoPanelAnim + ' + Me.chkInfoPanelAnim.AutoSize = True + Me.chkInfoPanelAnim.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkInfoPanelAnim.Location = New System.Drawing.Point(10, 94) + Me.chkInfoPanelAnim.Name = "chkInfoPanelAnim" + Me.chkInfoPanelAnim.Size = New System.Drawing.Size(148, 17) + Me.chkInfoPanelAnim.TabIndex = 4 + Me.chkInfoPanelAnim.Text = "Enable Panel Animation" + Me.chkInfoPanelAnim.UseVisualStyleBackColor = True + ' + 'chkNoDisplayPoster + ' + Me.chkNoDisplayPoster.AutoSize = True + Me.chkNoDisplayPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkNoDisplayPoster.Location = New System.Drawing.Point(10, 127) + Me.chkNoDisplayPoster.Name = "chkNoDisplayPoster" + Me.chkNoDisplayPoster.Size = New System.Drawing.Size(138, 17) + Me.chkNoDisplayPoster.TabIndex = 6 + Me.chkNoDisplayPoster.Text = "Do Not Display Poster" + Me.chkNoDisplayPoster.UseVisualStyleBackColor = True + ' + 'chkShowDims + ' + Me.chkShowDims.AutoSize = True + Me.chkShowDims.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowDims.Location = New System.Drawing.Point(10, 161) + Me.chkShowDims.Name = "chkShowDims" + Me.chkShowDims.Size = New System.Drawing.Size(160, 17) + Me.chkShowDims.TabIndex = 8 + Me.chkShowDims.Text = "Display Image Dimensions" + Me.chkShowDims.UseVisualStyleBackColor = True + ' + 'chkUpdates + ' + Me.chkUpdates.AutoSize = True + Me.chkUpdates.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUpdates.Location = New System.Drawing.Point(10, 20) + Me.chkUpdates.Name = "chkUpdates" + Me.chkUpdates.Size = New System.Drawing.Size(121, 17) + Me.chkUpdates.TabIndex = 0 + Me.chkUpdates.Text = "Check for Updates" + Me.chkUpdates.UseVisualStyleBackColor = True + ' + 'chkOverwriteNfo + ' + Me.chkOverwriteNfo.AutoSize = True + Me.chkOverwriteNfo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOverwriteNfo.Location = New System.Drawing.Point(10, 54) + Me.chkOverwriteNfo.Name = "chkOverwriteNfo" + Me.chkOverwriteNfo.Size = New System.Drawing.Size(191, 17) + Me.chkOverwriteNfo.TabIndex = 2 + Me.chkOverwriteNfo.Text = "Overwrite Non-conforming nfos" + Me.chkOverwriteNfo.UseVisualStyleBackColor = True + ' + 'Label5 + ' + Me.Label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.Location = New System.Drawing.Point(20, 68) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(165, 24) + Me.Label5.TabIndex = 3 + Me.Label5.Text = "(If unchecked, non-conforming nfos will be renamed to .info)" + Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'chkLogErrors + ' + Me.chkLogErrors.AutoSize = True + Me.chkLogErrors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLogErrors.Location = New System.Drawing.Point(10, 37) + Me.chkLogErrors.Name = "chkLogErrors" + Me.chkLogErrors.Size = New System.Drawing.Size(113, 17) + Me.chkLogErrors.TabIndex = 1 + Me.chkLogErrors.Text = "Log Errors to File" + Me.chkLogErrors.UseVisualStyleBackColor = True + ' + 'GroupBox29 + ' + Me.GroupBox29.Controls.Add(Me.cbEpTheme) + Me.GroupBox29.Controls.Add(Me.Label3) + Me.GroupBox29.Controls.Add(Me.cbTVShowTheme) + Me.GroupBox29.Controls.Add(Me.Label1) + Me.GroupBox29.Controls.Add(Me.cbMovieTheme) + Me.GroupBox29.Controls.Add(Me.Label35) + Me.GroupBox29.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox29.Location = New System.Drawing.Point(8, 61) + Me.GroupBox29.Name = "GroupBox29" + Me.GroupBox29.Size = New System.Drawing.Size(179, 166) + Me.GroupBox29.TabIndex = 2 + Me.GroupBox29.TabStop = False + Me.GroupBox29.Text = "Themes" + ' + 'cbEpTheme + ' + Me.cbEpTheme.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbEpTheme.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbEpTheme.FormattingEnabled = True + Me.cbEpTheme.Location = New System.Drawing.Point(9, 129) + Me.cbEpTheme.Name = "cbEpTheme" + Me.cbEpTheme.Size = New System.Drawing.Size(162, 21) + Me.cbEpTheme.TabIndex = 5 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label3.Location = New System.Drawing.Point(7, 114) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(87, 13) + Me.Label3.TabIndex = 4 + Me.Label3.Text = "Episode Theme:" + ' + 'cbTVShowTheme + ' + Me.cbTVShowTheme.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTVShowTheme.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbTVShowTheme.FormattingEnabled = True + Me.cbTVShowTheme.Location = New System.Drawing.Point(9, 83) + Me.cbTVShowTheme.Name = "cbTVShowTheme" + Me.cbTVShowTheme.Size = New System.Drawing.Size(162, 21) + Me.cbTVShowTheme.TabIndex = 3 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(7, 68) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(90, 13) + Me.Label1.TabIndex = 2 + Me.Label1.Text = "TV Show Theme:" + ' + 'cbMovieTheme + ' + Me.cbMovieTheme.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbMovieTheme.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbMovieTheme.FormattingEnabled = True + Me.cbMovieTheme.Location = New System.Drawing.Point(9, 38) + Me.cbMovieTheme.Name = "cbMovieTheme" + Me.cbMovieTheme.Size = New System.Drawing.Size(162, 21) + Me.cbMovieTheme.TabIndex = 1 + ' + 'Label35 + ' + Me.Label35.AutoSize = True + Me.Label35.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label35.Location = New System.Drawing.Point(7, 23) + Me.Label35.Name = "Label35" + Me.Label35.Size = New System.Drawing.Size(77, 13) + Me.Label35.TabIndex = 0 + Me.Label35.Text = "Movie Theme:" + ' + 'Label32 + ' + Me.Label32.AutoSize = True + Me.Label32.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label32.Location = New System.Drawing.Point(6, 18) + Me.Label32.Name = "Label32" + Me.Label32.Size = New System.Drawing.Size(109, 13) + Me.Label32.TabIndex = 0 + Me.Label32.Text = "Interface Language:" + ' + 'cbIntLang + ' + Me.cbIntLang.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbIntLang.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbIntLang.FormattingEnabled = True + Me.cbIntLang.Location = New System.Drawing.Point(9, 34) + Me.cbIntLang.Name = "cbIntLang" + Me.cbIntLang.Size = New System.Drawing.Size(137, 21) + Me.cbIntLang.TabIndex = 1 + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.tcCleaner) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(401, 6) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(208, 385) + Me.GroupBox3.TabIndex = 2 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Clean Files" + ' + 'tcCleaner + ' + Me.tcCleaner.Appearance = System.Windows.Forms.TabAppearance.FlatButtons + Me.tcCleaner.Controls.Add(Me.tpStandard) + Me.tcCleaner.Controls.Add(Me.tpExpert) + Me.tcCleaner.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.tcCleaner.Location = New System.Drawing.Point(6, 19) + Me.tcCleaner.Name = "tcCleaner" + Me.tcCleaner.SelectedIndex = 0 + Me.tcCleaner.Size = New System.Drawing.Size(196, 363) + Me.tcCleaner.TabIndex = 0 + ' + 'tpStandard + ' + Me.tpStandard.BackColor = System.Drawing.Color.White + Me.tpStandard.Controls.Add(Me.chkCleanFolderJPG) + Me.tpStandard.Controls.Add(Me.chkCleanExtrathumbs) + Me.tpStandard.Controls.Add(Me.chkCleanMovieTBN) + Me.tpStandard.Controls.Add(Me.chkCleanMovieNameJPG) + Me.tpStandard.Controls.Add(Me.chkCleanMovieTBNb) + Me.tpStandard.Controls.Add(Me.chkCleanMovieJPG) + Me.tpStandard.Controls.Add(Me.chkCleanFanartJPG) + Me.tpStandard.Controls.Add(Me.chkCleanPosterJPG) + Me.tpStandard.Controls.Add(Me.chkCleanMovieFanartJPG) + Me.tpStandard.Controls.Add(Me.chkCleanPosterTBN) + Me.tpStandard.Controls.Add(Me.chkCleanMovieNFO) + Me.tpStandard.Controls.Add(Me.chkCleanDotFanartJPG) + Me.tpStandard.Controls.Add(Me.chkCleanMovieNFOb) + Me.tpStandard.Location = New System.Drawing.Point(4, 25) + Me.tpStandard.Name = "tpStandard" + Me.tpStandard.Padding = New System.Windows.Forms.Padding(3) + Me.tpStandard.Size = New System.Drawing.Size(188, 334) + Me.tpStandard.TabIndex = 0 + Me.tpStandard.Text = "Standard" + Me.tpStandard.UseVisualStyleBackColor = True + ' + 'chkCleanFolderJPG + ' + Me.chkCleanFolderJPG.AutoSize = True + Me.chkCleanFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanFolderJPG.Location = New System.Drawing.Point(7, 10) + Me.chkCleanFolderJPG.Name = "chkCleanFolderJPG" + Me.chkCleanFolderJPG.Size = New System.Drawing.Size(81, 17) + Me.chkCleanFolderJPG.TabIndex = 0 + Me.chkCleanFolderJPG.Text = "/folder.jpg" + Me.chkCleanFolderJPG.UseVisualStyleBackColor = True + ' + 'chkCleanExtrathumbs + ' + Me.chkCleanExtrathumbs.AutoSize = True + Me.chkCleanExtrathumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanExtrathumbs.Location = New System.Drawing.Point(7, 238) + Me.chkCleanExtrathumbs.Name = "chkCleanExtrathumbs" + Me.chkCleanExtrathumbs.Size = New System.Drawing.Size(98, 17) + Me.chkCleanExtrathumbs.TabIndex = 12 + Me.chkCleanExtrathumbs.Text = "/extrathumbs/" + Me.chkCleanExtrathumbs.UseVisualStyleBackColor = True + ' + 'chkCleanMovieTBN + ' + Me.chkCleanMovieTBN.AutoSize = True + Me.chkCleanMovieTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanMovieTBN.Location = New System.Drawing.Point(7, 29) + Me.chkCleanMovieTBN.Name = "chkCleanMovieTBN" + Me.chkCleanMovieTBN.Size = New System.Drawing.Size(81, 17) + Me.chkCleanMovieTBN.TabIndex = 1 + Me.chkCleanMovieTBN.Text = "/movie.tbn" + Me.chkCleanMovieTBN.UseVisualStyleBackColor = True + ' + 'chkCleanMovieNameJPG + ' + Me.chkCleanMovieNameJPG.AutoSize = True + Me.chkCleanMovieNameJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanMovieNameJPG.Location = New System.Drawing.Point(7, 124) + Me.chkCleanMovieNameJPG.Name = "chkCleanMovieNameJPG" + Me.chkCleanMovieNameJPG.Size = New System.Drawing.Size(96, 17) + Me.chkCleanMovieNameJPG.TabIndex = 6 + Me.chkCleanMovieNameJPG.Text = "/.jpg" + Me.chkCleanMovieNameJPG.UseVisualStyleBackColor = True + ' + 'chkCleanMovieTBNb + ' + Me.chkCleanMovieTBNb.AutoSize = True + Me.chkCleanMovieTBNb.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanMovieTBNb.Location = New System.Drawing.Point(7, 48) + Me.chkCleanMovieTBNb.Name = "chkCleanMovieTBNb" + Me.chkCleanMovieTBNb.Size = New System.Drawing.Size(97, 17) + Me.chkCleanMovieTBNb.TabIndex = 2 + Me.chkCleanMovieTBNb.Text = "/.tbn" + Me.chkCleanMovieTBNb.UseVisualStyleBackColor = True + ' + 'chkCleanMovieJPG + ' + Me.chkCleanMovieJPG.AutoSize = True + Me.chkCleanMovieJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanMovieJPG.Location = New System.Drawing.Point(7, 105) + Me.chkCleanMovieJPG.Name = "chkCleanMovieJPG" + Me.chkCleanMovieJPG.Size = New System.Drawing.Size(80, 17) + Me.chkCleanMovieJPG.TabIndex = 5 + Me.chkCleanMovieJPG.Text = "/movie.jpg" + Me.chkCleanMovieJPG.UseVisualStyleBackColor = True + ' + 'chkCleanFanartJPG + ' + Me.chkCleanFanartJPG.AutoSize = True + Me.chkCleanFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanFanartJPG.Location = New System.Drawing.Point(7, 143) + Me.chkCleanFanartJPG.Name = "chkCleanFanartJPG" + Me.chkCleanFanartJPG.Size = New System.Drawing.Size(81, 17) + Me.chkCleanFanartJPG.TabIndex = 7 + Me.chkCleanFanartJPG.Text = "/fanart.jpg" + Me.chkCleanFanartJPG.UseVisualStyleBackColor = True + ' + 'chkCleanPosterJPG + ' + Me.chkCleanPosterJPG.AutoSize = True + Me.chkCleanPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanPosterJPG.Location = New System.Drawing.Point(7, 86) + Me.chkCleanPosterJPG.Name = "chkCleanPosterJPG" + Me.chkCleanPosterJPG.Size = New System.Drawing.Size(83, 17) + Me.chkCleanPosterJPG.TabIndex = 4 + Me.chkCleanPosterJPG.Text = "/poster.jpg" + Me.chkCleanPosterJPG.UseVisualStyleBackColor = True + ' + 'chkCleanMovieFanartJPG + ' + Me.chkCleanMovieFanartJPG.AutoSize = True + Me.chkCleanMovieFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanMovieFanartJPG.Location = New System.Drawing.Point(7, 162) + Me.chkCleanMovieFanartJPG.Name = "chkCleanMovieFanartJPG" + Me.chkCleanMovieFanartJPG.Size = New System.Drawing.Size(131, 17) + Me.chkCleanMovieFanartJPG.TabIndex = 8 + Me.chkCleanMovieFanartJPG.Text = "/-fanart.jpg" + Me.chkCleanMovieFanartJPG.UseVisualStyleBackColor = True + ' + 'chkCleanPosterTBN + ' + Me.chkCleanPosterTBN.AutoSize = True + Me.chkCleanPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanPosterTBN.Location = New System.Drawing.Point(7, 67) + Me.chkCleanPosterTBN.Name = "chkCleanPosterTBN" + Me.chkCleanPosterTBN.Size = New System.Drawing.Size(84, 17) + Me.chkCleanPosterTBN.TabIndex = 3 + Me.chkCleanPosterTBN.Text = "/poster.tbn" + Me.chkCleanPosterTBN.UseVisualStyleBackColor = True + ' + 'chkCleanMovieNFO + ' + Me.chkCleanMovieNFO.AutoSize = True + Me.chkCleanMovieNFO.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanMovieNFO.Location = New System.Drawing.Point(7, 200) + Me.chkCleanMovieNFO.Name = "chkCleanMovieNFO" + Me.chkCleanMovieNFO.Size = New System.Drawing.Size(81, 17) + Me.chkCleanMovieNFO.TabIndex = 10 + Me.chkCleanMovieNFO.Text = "/movie.nfo" + Me.chkCleanMovieNFO.UseVisualStyleBackColor = True + ' + 'chkCleanDotFanartJPG + ' + Me.chkCleanDotFanartJPG.AutoSize = True + Me.chkCleanDotFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanDotFanartJPG.Location = New System.Drawing.Point(7, 181) + Me.chkCleanDotFanartJPG.Name = "chkCleanDotFanartJPG" + Me.chkCleanDotFanartJPG.Size = New System.Drawing.Size(130, 17) + Me.chkCleanDotFanartJPG.TabIndex = 9 + Me.chkCleanDotFanartJPG.Text = "/.fanart.jpg" + Me.chkCleanDotFanartJPG.UseVisualStyleBackColor = True + ' + 'chkCleanMovieNFOb + ' + Me.chkCleanMovieNFOb.AutoSize = True + Me.chkCleanMovieNFOb.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanMovieNFOb.Location = New System.Drawing.Point(7, 219) + Me.chkCleanMovieNFOb.Name = "chkCleanMovieNFOb" + Me.chkCleanMovieNFOb.Size = New System.Drawing.Size(97, 17) + Me.chkCleanMovieNFOb.TabIndex = 11 + Me.chkCleanMovieNFOb.Text = "/.nfo" + Me.chkCleanMovieNFOb.UseVisualStyleBackColor = True + ' + 'tpExpert + ' + Me.tpExpert.BackColor = System.Drawing.Color.White + Me.tpExpert.Controls.Add(Me.chkWhitelistVideo) + Me.tpExpert.Controls.Add(Me.Label27) + Me.tpExpert.Controls.Add(Me.btnRemoveWhitelist) + Me.tpExpert.Controls.Add(Me.btnAddWhitelist) + Me.tpExpert.Controls.Add(Me.txtWhitelist) + Me.tpExpert.Controls.Add(Me.lstWhitelist) + Me.tpExpert.Controls.Add(Me.Label25) + Me.tpExpert.Location = New System.Drawing.Point(4, 25) + Me.tpExpert.Name = "tpExpert" + Me.tpExpert.Padding = New System.Windows.Forms.Padding(3) + Me.tpExpert.Size = New System.Drawing.Size(188, 334) + Me.tpExpert.TabIndex = 1 + Me.tpExpert.Text = "Expert" + Me.tpExpert.UseVisualStyleBackColor = True + ' + 'chkWhitelistVideo + ' + Me.chkWhitelistVideo.AutoSize = True + Me.chkWhitelistVideo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkWhitelistVideo.Location = New System.Drawing.Point(4, 85) + Me.chkWhitelistVideo.Name = "chkWhitelistVideo" + Me.chkWhitelistVideo.Size = New System.Drawing.Size(163, 17) + Me.chkWhitelistVideo.TabIndex = 1 + Me.chkWhitelistVideo.Text = "Whitelist Video Extensions" + Me.chkWhitelistVideo.UseVisualStyleBackColor = True + ' + 'Label27 + ' + Me.Label27.AutoSize = True + Me.Label27.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label27.Location = New System.Drawing.Point(19, 107) + Me.Label27.Name = "Label27" + Me.Label27.Size = New System.Drawing.Size(127, 13) + Me.Label27.TabIndex = 2 + Me.Label27.Text = "Whitelisted Extensions:" + ' + 'btnRemoveWhitelist + ' + Me.btnRemoveWhitelist.Image = CType(resources.GetObject("btnRemoveWhitelist.Image"), System.Drawing.Image) + Me.btnRemoveWhitelist.Location = New System.Drawing.Point(134, 251) + Me.btnRemoveWhitelist.Name = "btnRemoveWhitelist" + Me.btnRemoveWhitelist.Size = New System.Drawing.Size(23, 23) + Me.btnRemoveWhitelist.TabIndex = 6 + Me.btnRemoveWhitelist.UseVisualStyleBackColor = True + ' + 'btnAddWhitelist + ' + Me.btnAddWhitelist.Image = CType(resources.GetObject("btnAddWhitelist.Image"), System.Drawing.Image) + Me.btnAddWhitelist.Location = New System.Drawing.Point(82, 251) + Me.btnAddWhitelist.Name = "btnAddWhitelist" + Me.btnAddWhitelist.Size = New System.Drawing.Size(23, 23) + Me.btnAddWhitelist.TabIndex = 5 + Me.btnAddWhitelist.UseVisualStyleBackColor = True + ' + 'txtWhitelist + ' + Me.txtWhitelist.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtWhitelist.Location = New System.Drawing.Point(20, 252) + Me.txtWhitelist.Name = "txtWhitelist" + Me.txtWhitelist.Size = New System.Drawing.Size(61, 22) + Me.txtWhitelist.TabIndex = 4 + ' + 'lstWhitelist + ' + Me.lstWhitelist.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstWhitelist.FormattingEnabled = True + Me.lstWhitelist.Location = New System.Drawing.Point(19, 126) + Me.lstWhitelist.Name = "lstWhitelist" + Me.lstWhitelist.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.lstWhitelist.Size = New System.Drawing.Size(138, 108) + Me.lstWhitelist.TabIndex = 3 + ' + 'Label25 + ' + Me.Label25.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label25.ForeColor = System.Drawing.Color.Red + Me.Label25.Location = New System.Drawing.Point(12, 10) + Me.Label25.Name = "Label25" + Me.Label25.Size = New System.Drawing.Size(155, 68) + Me.Label25.TabIndex = 0 + Me.Label25.Text = "WARNING: Using the Expert Mode Cleaner could potentially delete wanted files. Tak" & _ + "e care when using this tool." + Me.Label25.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'GroupBox12 + ' + Me.GroupBox12.Controls.Add(Me.chkClickScrape) + Me.GroupBox12.Controls.Add(Me.chkAskCheckboxScrape) + Me.GroupBox12.Controls.Add(Me.chkMarkNew) + Me.GroupBox12.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox12.Location = New System.Drawing.Point(6, 7) + Me.GroupBox12.Name = "GroupBox12" + Me.GroupBox12.Size = New System.Drawing.Size(219, 93) + Me.GroupBox12.TabIndex = 1 + Me.GroupBox12.TabStop = False + Me.GroupBox12.Text = "Miscellaneous" + ' + 'chkClickScrape + ' + Me.chkClickScrape.AutoSize = True + Me.chkClickScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkClickScrape.Location = New System.Drawing.Point(12, 36) + Me.chkClickScrape.Name = "chkClickScrape" + Me.chkClickScrape.Size = New System.Drawing.Size(125, 17) + Me.chkClickScrape.TabIndex = 65 + Me.chkClickScrape.Text = "Enable Click Scrape" + Me.chkClickScrape.UseVisualStyleBackColor = True + ' + 'chkAskCheckboxScrape + ' + Me.chkAskCheckboxScrape.AutoSize = True + Me.chkAskCheckboxScrape.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkAskCheckboxScrape.Location = New System.Drawing.Point(25, 56) + Me.chkAskCheckboxScrape.Name = "chkAskCheckboxScrape" + Me.chkAskCheckboxScrape.Size = New System.Drawing.Size(127, 17) + Me.chkAskCheckboxScrape.TabIndex = 64 + Me.chkAskCheckboxScrape.Text = "Ask On Click Scrape" + Me.chkAskCheckboxScrape.UseVisualStyleBackColor = True + ' + 'chkMarkNew + ' + Me.chkMarkNew.AutoSize = True + Me.chkMarkNew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMarkNew.Location = New System.Drawing.Point(12, 14) + Me.chkMarkNew.Name = "chkMarkNew" + Me.chkMarkNew.Size = New System.Drawing.Size(117, 17) + Me.chkMarkNew.TabIndex = 0 + Me.chkMarkNew.Text = "Mark New Movies" + Me.chkMarkNew.UseVisualStyleBackColor = True + ' + 'lbGenre + ' + Me.lbGenre.CheckOnClick = True + Me.lbGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lbGenre.FormattingEnabled = True + Me.lbGenre.IntegralHeight = False + Me.lbGenre.Location = New System.Drawing.Point(10, 18) + Me.lbGenre.Name = "lbGenre" + Me.lbGenre.Size = New System.Drawing.Size(157, 124) + Me.lbGenre.Sorted = True + Me.lbGenre.TabIndex = 0 + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.chkMovieWatchedCol) + Me.GroupBox2.Controls.Add(Me.txtCheckTitleTol) + Me.GroupBox2.Controls.Add(Me.Label30) + Me.GroupBox2.Controls.Add(Me.chkCheckTitles) + Me.GroupBox2.Controls.Add(Me.GroupBox25) + Me.GroupBox2.Controls.Add(Me.chkDisplayYear) + Me.GroupBox2.Controls.Add(Me.chkMovieExtraCol) + Me.GroupBox2.Controls.Add(Me.chkMovieSubCol) + Me.GroupBox2.Controls.Add(Me.chkMovieTrailerCol) + Me.GroupBox2.Controls.Add(Me.chkMovieInfoCol) + Me.GroupBox2.Controls.Add(Me.chkMovieFanartCol) + Me.GroupBox2.Controls.Add(Me.chkMoviePosterCol) + Me.GroupBox2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(7, 106) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(218, 291) + Me.GroupBox2.TabIndex = 4 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Media List Options" + ' + 'chkMovieWatchedCol + ' + Me.chkMovieWatchedCol.AutoSize = True + Me.chkMovieWatchedCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieWatchedCol.Location = New System.Drawing.Point(9, 274) + Me.chkMovieWatchedCol.Name = "chkMovieWatchedCol" + Me.chkMovieWatchedCol.Size = New System.Drawing.Size(142, 17) + Me.chkMovieWatchedCol.TabIndex = 75 + Me.chkMovieWatchedCol.Text = "Hide Watched Column" + Me.chkMovieWatchedCol.UseVisualStyleBackColor = True + ' + 'txtCheckTitleTol + ' + Me.txtCheckTitleTol.Enabled = False + Me.txtCheckTitleTol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtCheckTitleTol.Location = New System.Drawing.Point(142, 50) + Me.txtCheckTitleTol.Name = "txtCheckTitleTol" + Me.txtCheckTitleTol.Size = New System.Drawing.Size(61, 22) + Me.txtCheckTitleTol.TabIndex = 74 + ' + 'Label30 + ' + Me.Label30.AutoSize = True + Me.Label30.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label30.Location = New System.Drawing.Point(27, 54) + Me.Label30.Name = "Label30" + Me.Label30.Size = New System.Drawing.Size(111, 13) + Me.Label30.TabIndex = 73 + Me.Label30.Text = "Mismatch Tolerance:" + Me.Label30.TextAlign = System.Drawing.ContentAlignment.TopRight + ' + 'chkCheckTitles + ' + Me.chkCheckTitles.AutoSize = True + Me.chkCheckTitles.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCheckTitles.Location = New System.Drawing.Point(8, 35) + Me.chkCheckTitles.Name = "chkCheckTitles" + Me.chkCheckTitles.Size = New System.Drawing.Size(178, 17) + Me.chkCheckTitles.TabIndex = 72 + Me.chkCheckTitles.Text = "Check Title Match Confidence" + Me.chkCheckTitles.UseVisualStyleBackColor = True + ' + 'GroupBox25 + ' + Me.GroupBox25.Controls.Add(Me.btnRemoveToken) + Me.GroupBox25.Controls.Add(Me.btnAddToken) + Me.GroupBox25.Controls.Add(Me.txtSortToken) + Me.GroupBox25.Controls.Add(Me.lstSortTokens) + Me.GroupBox25.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox25.Location = New System.Drawing.Point(9, 73) + Me.GroupBox25.Name = "GroupBox25" + Me.GroupBox25.Size = New System.Drawing.Size(200, 102) + Me.GroupBox25.TabIndex = 71 + Me.GroupBox25.TabStop = False + Me.GroupBox25.Text = "Sort Tokens to Ignore" + ' + 'btnRemoveToken + ' + Me.btnRemoveToken.Image = CType(resources.GetObject("btnRemoveToken.Image"), System.Drawing.Image) + Me.btnRemoveToken.Location = New System.Drawing.Point(168, 72) + Me.btnRemoveToken.Name = "btnRemoveToken" + Me.btnRemoveToken.Size = New System.Drawing.Size(23, 23) + Me.btnRemoveToken.TabIndex = 3 + Me.btnRemoveToken.UseVisualStyleBackColor = True + ' + 'btnAddToken + ' + Me.btnAddToken.Image = CType(resources.GetObject("btnAddToken.Image"), System.Drawing.Image) + Me.btnAddToken.Location = New System.Drawing.Point(72, 72) + Me.btnAddToken.Name = "btnAddToken" + Me.btnAddToken.Size = New System.Drawing.Size(23, 23) + Me.btnAddToken.TabIndex = 2 + Me.btnAddToken.UseVisualStyleBackColor = True + ' + 'txtSortToken + ' + Me.txtSortToken.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtSortToken.Location = New System.Drawing.Point(10, 73) + Me.txtSortToken.Name = "txtSortToken" + Me.txtSortToken.Size = New System.Drawing.Size(61, 22) + Me.txtSortToken.TabIndex = 1 + ' + 'lstSortTokens + ' + Me.lstSortTokens.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstSortTokens.FormattingEnabled = True + Me.lstSortTokens.Location = New System.Drawing.Point(10, 15) + Me.lstSortTokens.Name = "lstSortTokens" + Me.lstSortTokens.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.lstSortTokens.Size = New System.Drawing.Size(180, 43) + Me.lstSortTokens.Sorted = True + Me.lstSortTokens.TabIndex = 0 + ' + 'chkDisplayYear + ' + Me.chkDisplayYear.AutoSize = True + Me.chkDisplayYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDisplayYear.Location = New System.Drawing.Point(8, 19) + Me.chkDisplayYear.Name = "chkDisplayYear" + Me.chkDisplayYear.Size = New System.Drawing.Size(144, 17) + Me.chkDisplayYear.TabIndex = 70 + Me.chkDisplayYear.Text = "Display Year in List Title" + Me.chkDisplayYear.UseVisualStyleBackColor = True + ' + 'chkMovieExtraCol + ' + Me.chkMovieExtraCol.AutoSize = True + Me.chkMovieExtraCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieExtraCol.Location = New System.Drawing.Point(9, 258) + Me.chkMovieExtraCol.Name = "chkMovieExtraCol" + Me.chkMovieExtraCol.Size = New System.Drawing.Size(155, 17) + Me.chkMovieExtraCol.TabIndex = 5 + Me.chkMovieExtraCol.Text = "Hide Extrathumb Column" + Me.chkMovieExtraCol.UseVisualStyleBackColor = True + ' + 'chkMovieSubCol + ' + Me.chkMovieSubCol.AutoSize = True + Me.chkMovieSubCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieSubCol.Location = New System.Drawing.Point(9, 242) + Me.chkMovieSubCol.Name = "chkMovieSubCol" + Me.chkMovieSubCol.Size = New System.Drawing.Size(116, 17) + Me.chkMovieSubCol.TabIndex = 4 + Me.chkMovieSubCol.Text = "Hide Sub Column" + Me.chkMovieSubCol.UseVisualStyleBackColor = True + ' + 'chkMovieTrailerCol + ' + Me.chkMovieTrailerCol.AutoSize = True + Me.chkMovieTrailerCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieTrailerCol.Location = New System.Drawing.Point(9, 226) + Me.chkMovieTrailerCol.Name = "chkMovieTrailerCol" + Me.chkMovieTrailerCol.Size = New System.Drawing.Size(127, 17) + Me.chkMovieTrailerCol.TabIndex = 3 + Me.chkMovieTrailerCol.Text = "Hide Trailer Column" + Me.chkMovieTrailerCol.UseVisualStyleBackColor = True + ' + 'chkMovieInfoCol + ' + Me.chkMovieInfoCol.AutoSize = True + Me.chkMovieInfoCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieInfoCol.Location = New System.Drawing.Point(9, 210) + Me.chkMovieInfoCol.Name = "chkMovieInfoCol" + Me.chkMovieInfoCol.Size = New System.Drawing.Size(117, 17) + Me.chkMovieInfoCol.TabIndex = 2 + Me.chkMovieInfoCol.Text = "Hide Info Column" + Me.chkMovieInfoCol.UseVisualStyleBackColor = True + ' + 'chkMovieFanartCol + ' + Me.chkMovieFanartCol.AutoSize = True + Me.chkMovieFanartCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieFanartCol.Location = New System.Drawing.Point(9, 194) + Me.chkMovieFanartCol.Name = "chkMovieFanartCol" + Me.chkMovieFanartCol.Size = New System.Drawing.Size(129, 17) + Me.chkMovieFanartCol.TabIndex = 1 + Me.chkMovieFanartCol.Text = "Hide Fanart Column" + Me.chkMovieFanartCol.UseVisualStyleBackColor = True + ' + 'chkMoviePosterCol + ' + Me.chkMoviePosterCol.AutoSize = True + Me.chkMoviePosterCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMoviePosterCol.Location = New System.Drawing.Point(9, 178) + Me.chkMoviePosterCol.Name = "chkMoviePosterCol" + Me.chkMoviePosterCol.Size = New System.Drawing.Size(128, 17) + Me.chkMoviePosterCol.TabIndex = 0 + Me.chkMoviePosterCol.Text = "Hide Poster Column" + Me.chkMoviePosterCol.UseVisualStyleBackColor = True + ' + 'GroupBox8 + ' + Me.GroupBox8.Controls.Add(Me.btnMovieFrodo) + Me.GroupBox8.Controls.Add(Me.chkMovieNameMultiOnly) + Me.GroupBox8.Controls.Add(Me.GroupBox21) + Me.GroupBox8.Controls.Add(Me.GroupBox7) + Me.GroupBox8.Controls.Add(Me.GroupBox6) + Me.GroupBox8.Controls.Add(Me.GroupBox5) + Me.GroupBox8.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox8.Location = New System.Drawing.Point(243, 113) + Me.GroupBox8.Name = "GroupBox8" + Me.GroupBox8.Size = New System.Drawing.Size(366, 207) + Me.GroupBox8.TabIndex = 5 + Me.GroupBox8.TabStop = False + Me.GroupBox8.Text = "File Naming" + ' + 'btnMovieFrodo + ' + Me.btnMovieFrodo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnMovieFrodo.Location = New System.Drawing.Point(237, 29) + Me.btnMovieFrodo.Name = "btnMovieFrodo" + Me.btnMovieFrodo.Size = New System.Drawing.Size(116, 23) + Me.btnMovieFrodo.TabIndex = 1 + Me.btnMovieFrodo.Text = "XBMC Frodo" + Me.btnMovieFrodo.UseVisualStyleBackColor = True + ' + 'chkMovieNameMultiOnly + ' + Me.chkMovieNameMultiOnly.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkMovieNameMultiOnly.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieNameMultiOnly.Location = New System.Drawing.Point(235, 58) + Me.chkMovieNameMultiOnly.Name = "chkMovieNameMultiOnly" + Me.chkMovieNameMultiOnly.Size = New System.Drawing.Size(125, 43) + Me.chkMovieNameMultiOnly.TabIndex = 2 + Me.chkMovieNameMultiOnly.Text = "Use Only for Folders with Multiple Movies" + Me.chkMovieNameMultiOnly.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkMovieNameMultiOnly.UseVisualStyleBackColor = True + ' + 'GroupBox21 + ' + Me.GroupBox21.Controls.Add(Me.rbBracketTrailer) + Me.GroupBox21.Controls.Add(Me.rbDashTrailer) + Me.GroupBox21.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox21.Location = New System.Drawing.Point(150, 111) + Me.GroupBox21.Name = "GroupBox21" + Me.GroupBox21.Size = New System.Drawing.Size(102, 59) + Me.GroupBox21.TabIndex = 4 + Me.GroupBox21.TabStop = False + Me.GroupBox21.Text = "Trailer" + ' + 'rbBracketTrailer + ' + Me.rbBracketTrailer.AutoSize = True + Me.rbBracketTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.rbBracketTrailer.Location = New System.Drawing.Point(5, 33) + Me.rbBracketTrailer.Name = "rbBracketTrailer" + Me.rbBracketTrailer.Size = New System.Drawing.Size(61, 17) + Me.rbBracketTrailer.TabIndex = 1 + Me.rbBracketTrailer.TabStop = True + Me.rbBracketTrailer.Text = "[trailer]" + Me.rbBracketTrailer.UseVisualStyleBackColor = True + ' + 'rbDashTrailer + ' + Me.rbDashTrailer.AutoSize = True + Me.rbDashTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.rbDashTrailer.ForeColor = System.Drawing.SystemColors.ControlText + Me.rbDashTrailer.Location = New System.Drawing.Point(5, 17) + Me.rbDashTrailer.Name = "rbDashTrailer" + Me.rbDashTrailer.Size = New System.Drawing.Size(59, 17) + Me.rbDashTrailer.TabIndex = 0 + Me.rbDashTrailer.TabStop = True + Me.rbDashTrailer.Text = "-trailer" + Me.rbDashTrailer.UseVisualStyleBackColor = True + ' + 'GroupBox7 + ' + Me.GroupBox7.Controls.Add(Me.chkMovieNameNFOStack) + Me.GroupBox7.Controls.Add(Me.chkMovieNameNFO) + Me.GroupBox7.Controls.Add(Me.chkMovieNFO) + Me.GroupBox7.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox7.Location = New System.Drawing.Point(258, 111) + Me.GroupBox7.Name = "GroupBox7" + Me.GroupBox7.Size = New System.Drawing.Size(102, 81) + Me.GroupBox7.TabIndex = 5 + Me.GroupBox7.TabStop = False + Me.GroupBox7.Text = "NFO" + ' + 'chkMovieNameNFOStack + ' + Me.chkMovieNameNFOStack.AutoSize = True + Me.chkMovieNameNFOStack.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieNameNFOStack.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkMovieNameNFOStack.Location = New System.Drawing.Point(6, 51) + Me.chkMovieNameNFOStack.Name = "chkMovieNameNFOStack" + Me.chkMovieNameNFOStack.Size = New System.Drawing.Size(93, 30) + Me.chkMovieNameNFOStack.TabIndex = 2 + Me.chkMovieNameNFOStack.Text = ".nfo" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "(Stack)" + Me.chkMovieNameNFOStack.UseVisualStyleBackColor = True + ' + 'chkMovieNameNFO + ' + Me.chkMovieNameNFO.AutoSize = True + Me.chkMovieNameNFO.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieNameNFO.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkMovieNameNFO.Location = New System.Drawing.Point(6, 34) + Me.chkMovieNameNFO.Name = "chkMovieNameNFO" + Me.chkMovieNameNFO.Size = New System.Drawing.Size(93, 17) + Me.chkMovieNameNFO.TabIndex = 1 + Me.chkMovieNameNFO.Text = ".nfo" + Me.chkMovieNameNFO.UseVisualStyleBackColor = True + ' + 'chkMovieNFO + ' + Me.chkMovieNFO.AutoSize = True + Me.chkMovieNFO.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieNFO.Location = New System.Drawing.Point(6, 18) + Me.chkMovieNFO.Name = "chkMovieNFO" + Me.chkMovieNFO.Size = New System.Drawing.Size(77, 17) + Me.chkMovieNFO.TabIndex = 0 + Me.chkMovieNFO.Text = "movie.nfo" + Me.chkMovieNFO.UseVisualStyleBackColor = True + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.chkMovieNameDotFanartJPG) + Me.GroupBox6.Controls.Add(Me.chkMovieNameFanartJPG) + Me.GroupBox6.Controls.Add(Me.chkFanartJPG) + Me.GroupBox6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox6.Location = New System.Drawing.Point(6, 111) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(136, 81) + Me.GroupBox6.TabIndex = 3 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Fanart" + ' + 'chkMovieNameDotFanartJPG + ' + Me.chkMovieNameDotFanartJPG.AutoSize = True + Me.chkMovieNameDotFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieNameDotFanartJPG.Location = New System.Drawing.Point(6, 51) + Me.chkMovieNameDotFanartJPG.Name = "chkMovieNameDotFanartJPG" + Me.chkMovieNameDotFanartJPG.Size = New System.Drawing.Size(126, 17) + Me.chkMovieNameDotFanartJPG.TabIndex = 2 + Me.chkMovieNameDotFanartJPG.Text = ".fanart.jpg" + Me.chkMovieNameDotFanartJPG.UseVisualStyleBackColor = True + ' + 'chkMovieNameFanartJPG + ' + Me.chkMovieNameFanartJPG.AutoSize = True + Me.chkMovieNameFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieNameFanartJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkMovieNameFanartJPG.Location = New System.Drawing.Point(6, 35) + Me.chkMovieNameFanartJPG.Name = "chkMovieNameFanartJPG" + Me.chkMovieNameFanartJPG.Size = New System.Drawing.Size(127, 17) + Me.chkMovieNameFanartJPG.TabIndex = 1 + Me.chkMovieNameFanartJPG.Text = "-fanart.jpg" + Me.chkMovieNameFanartJPG.UseVisualStyleBackColor = True + ' + 'chkFanartJPG + ' + Me.chkFanartJPG.AutoSize = True + Me.chkFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFanartJPG.Location = New System.Drawing.Point(6, 19) + Me.chkFanartJPG.Name = "chkFanartJPG" + Me.chkFanartJPG.Size = New System.Drawing.Size(77, 17) + Me.chkFanartJPG.TabIndex = 0 + Me.chkFanartJPG.Text = "fanart.jpg" + Me.chkFanartJPG.UseVisualStyleBackColor = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.chkMovieNameDashPosterJPG) + Me.GroupBox5.Controls.Add(Me.chkFolderJPG) + Me.GroupBox5.Controls.Add(Me.chkPosterJPG) + Me.GroupBox5.Controls.Add(Me.chkPosterTBN) + Me.GroupBox5.Controls.Add(Me.chkMovieNameJPG) + Me.GroupBox5.Controls.Add(Me.chkMovieJPG) + Me.GroupBox5.Controls.Add(Me.chkMovieNameTBN) + Me.GroupBox5.Controls.Add(Me.chkMovieTBN) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox5.Location = New System.Drawing.Point(6, 17) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(221, 83) + Me.GroupBox5.TabIndex = 0 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Posters" + ' + 'chkMovieNameDashPosterJPG + ' + Me.chkMovieNameDashPosterJPG.AutoSize = True + Me.chkMovieNameDashPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieNameDashPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkMovieNameDashPosterJPG.Location = New System.Drawing.Point(85, 63) + Me.chkMovieNameDashPosterJPG.Name = "chkMovieNameDashPosterJPG" + Me.chkMovieNameDashPosterJPG.Size = New System.Drawing.Size(129, 17) + Me.chkMovieNameDashPosterJPG.TabIndex = 7 + Me.chkMovieNameDashPosterJPG.Text = "-poster.jpg" + Me.chkMovieNameDashPosterJPG.UseVisualStyleBackColor = True + ' + 'chkFolderJPG + ' + Me.chkFolderJPG.AutoSize = True + Me.chkFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFolderJPG.Location = New System.Drawing.Point(6, 63) + Me.chkFolderJPG.Name = "chkFolderJPG" + Me.chkFolderJPG.Size = New System.Drawing.Size(77, 17) + Me.chkFolderJPG.TabIndex = 3 + Me.chkFolderJPG.Text = "folder.jpg" + Me.chkFolderJPG.UseVisualStyleBackColor = True + ' + 'chkPosterJPG + ' + Me.chkPosterJPG.AutoSize = True + Me.chkPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkPosterJPG.Location = New System.Drawing.Point(85, 47) + Me.chkPosterJPG.Name = "chkPosterJPG" + Me.chkPosterJPG.Size = New System.Drawing.Size(79, 17) + Me.chkPosterJPG.TabIndex = 6 + Me.chkPosterJPG.Text = "poster.jpg" + Me.chkPosterJPG.UseVisualStyleBackColor = True + ' + 'chkPosterTBN + ' + Me.chkPosterTBN.AutoSize = True + Me.chkPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkPosterTBN.Location = New System.Drawing.Point(6, 47) + Me.chkPosterTBN.Name = "chkPosterTBN" + Me.chkPosterTBN.Size = New System.Drawing.Size(80, 17) + Me.chkPosterTBN.TabIndex = 2 + Me.chkPosterTBN.Text = "poster.tbn" + Me.chkPosterTBN.UseVisualStyleBackColor = True + ' + 'chkMovieNameJPG + ' + Me.chkMovieNameJPG.AutoSize = True + Me.chkMovieNameJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieNameJPG.Location = New System.Drawing.Point(85, 31) + Me.chkMovieNameJPG.Name = "chkMovieNameJPG" + Me.chkMovieNameJPG.Size = New System.Drawing.Size(92, 17) + Me.chkMovieNameJPG.TabIndex = 5 + Me.chkMovieNameJPG.Text = ".jpg" + Me.chkMovieNameJPG.UseVisualStyleBackColor = True + ' + 'chkMovieJPG + ' + Me.chkMovieJPG.AutoSize = True + Me.chkMovieJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieJPG.Location = New System.Drawing.Point(6, 31) + Me.chkMovieJPG.Name = "chkMovieJPG" + Me.chkMovieJPG.Size = New System.Drawing.Size(76, 17) + Me.chkMovieJPG.TabIndex = 1 + Me.chkMovieJPG.Text = "movie.jpg" + Me.chkMovieJPG.UseVisualStyleBackColor = True + ' + 'chkMovieNameTBN + ' + Me.chkMovieNameTBN.AutoSize = True + Me.chkMovieNameTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieNameTBN.Location = New System.Drawing.Point(85, 15) + Me.chkMovieNameTBN.Name = "chkMovieNameTBN" + Me.chkMovieNameTBN.Size = New System.Drawing.Size(93, 17) + Me.chkMovieNameTBN.TabIndex = 4 + Me.chkMovieNameTBN.Text = ".tbn" + Me.chkMovieNameTBN.UseVisualStyleBackColor = True + ' + 'chkMovieTBN + ' + Me.chkMovieTBN.AutoSize = True + Me.chkMovieTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieTBN.Location = New System.Drawing.Point(6, 15) + Me.chkMovieTBN.Name = "chkMovieTBN" + Me.chkMovieTBN.Size = New System.Drawing.Size(77, 17) + Me.chkMovieTBN.TabIndex = 0 + Me.chkMovieTBN.Text = "movie.tbn" + Me.chkMovieTBN.UseVisualStyleBackColor = True + ' + 'lvMovies + ' + Me.lvMovies.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colID, Me.colName, Me.colPath, Me.colRecur, Me.colFolder, Me.colSingle}) + Me.lvMovies.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lvMovies.FullRowSelect = True + Me.lvMovies.HideSelection = False + Me.lvMovies.Location = New System.Drawing.Point(5, 6) + Me.lvMovies.Name = "lvMovies" + Me.lvMovies.Size = New System.Drawing.Size(497, 105) + Me.lvMovies.Sorting = System.Windows.Forms.SortOrder.Ascending + Me.lvMovies.TabIndex = 0 + Me.lvMovies.UseCompatibleStateImageBehavior = False + Me.lvMovies.View = System.Windows.Forms.View.Details + ' + 'colID + ' + Me.colID.Width = 0 + ' + 'colName + ' + Me.colName.Text = "Name" + Me.colName.Width = 75 + ' + 'colPath + ' + Me.colPath.Text = "Path" + Me.colPath.Width = 134 + ' + 'colRecur + ' + Me.colRecur.Text = "Recursive" + Me.colRecur.Width = 78 + ' + 'colFolder + ' + Me.colFolder.Text = "Use Folder Name" + Me.colFolder.Width = 116 + ' + 'colSingle + ' + Me.colSingle.Text = "Single Video" + Me.colSingle.Width = 90 + ' + 'btnMovieRem + ' + Me.btnMovieRem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnMovieRem.Image = CType(resources.GetObject("btnMovieRem.Image"), System.Drawing.Image) + Me.btnMovieRem.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnMovieRem.Location = New System.Drawing.Point(506, 88) + Me.btnMovieRem.Name = "btnMovieRem" + Me.btnMovieRem.Size = New System.Drawing.Size(104, 23) + Me.btnMovieRem.TabIndex = 3 + Me.btnMovieRem.Text = "Remove" + Me.btnMovieRem.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnMovieRem.UseVisualStyleBackColor = True + ' + 'btnMovieAddFolder + ' + Me.btnMovieAddFolder.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnMovieAddFolder.Image = CType(resources.GetObject("btnMovieAddFolder.Image"), System.Drawing.Image) + Me.btnMovieAddFolder.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnMovieAddFolder.Location = New System.Drawing.Point(506, 6) + Me.btnMovieAddFolder.Name = "btnMovieAddFolder" + Me.btnMovieAddFolder.Size = New System.Drawing.Size(104, 23) + Me.btnMovieAddFolder.TabIndex = 1 + Me.btnMovieAddFolder.Text = "Add Source" + Me.btnMovieAddFolder.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnMovieAddFolder.UseVisualStyleBackColor = True + ' + 'GroupBox14 + ' + Me.GroupBox14.Controls.Add(Me.chkPosterOnly) + Me.GroupBox14.Controls.Add(Me.txtPosterWidth) + Me.GroupBox14.Controls.Add(Me.txtPosterHeight) + Me.GroupBox14.Controls.Add(Me.lblPosterQual) + Me.GroupBox14.Controls.Add(Me.tbPosterQual) + Me.GroupBox14.Controls.Add(Me.Label24) + Me.GroupBox14.Controls.Add(Me.Label11) + Me.GroupBox14.Controls.Add(Me.Label12) + Me.GroupBox14.Controls.Add(Me.chkResizePoster) + Me.GroupBox14.Controls.Add(Me.lblPosterSize) + Me.GroupBox14.Controls.Add(Me.cbPosterSize) + Me.GroupBox14.Controls.Add(Me.chkOverwritePoster) + Me.GroupBox14.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox14.Location = New System.Drawing.Point(190, 3) + Me.GroupBox14.Name = "GroupBox14" + Me.GroupBox14.Size = New System.Drawing.Size(218, 170) + Me.GroupBox14.TabIndex = 2 + Me.GroupBox14.TabStop = False + Me.GroupBox14.Text = "Poster" + ' + 'chkPosterOnly + ' + Me.chkPosterOnly.AutoSize = True + Me.chkPosterOnly.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkPosterOnly.Location = New System.Drawing.Point(163, 38) + Me.chkPosterOnly.Name = "chkPosterOnly" + Me.chkPosterOnly.Size = New System.Drawing.Size(50, 17) + Me.chkPosterOnly.TabIndex = 2 + Me.chkPosterOnly.Text = "Only" + Me.chkPosterOnly.UseVisualStyleBackColor = True + ' + 'txtPosterWidth + ' + Me.txtPosterWidth.Enabled = False + Me.txtPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtPosterWidth.Location = New System.Drawing.Point(68, 100) + Me.txtPosterWidth.Name = "txtPosterWidth" + Me.txtPosterWidth.Size = New System.Drawing.Size(40, 22) + Me.txtPosterWidth.TabIndex = 6 + ' + 'txtPosterHeight + ' + Me.txtPosterHeight.Enabled = False + Me.txtPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtPosterHeight.Location = New System.Drawing.Point(175, 100) + Me.txtPosterHeight.Name = "txtPosterHeight" + Me.txtPosterHeight.Size = New System.Drawing.Size(40, 22) + Me.txtPosterHeight.TabIndex = 8 + ' + 'lblPosterQual + ' + Me.lblPosterQual.AutoSize = True + Me.lblPosterQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblPosterQual.Location = New System.Drawing.Point(183, 147) + Me.lblPosterQual.Name = "lblPosterQual" + Me.lblPosterQual.Size = New System.Drawing.Size(29, 17) + Me.lblPosterQual.TabIndex = 11 + Me.lblPosterQual.Text = "100" + ' + 'tbPosterQual + ' + Me.tbPosterQual.AutoSize = False + Me.tbPosterQual.LargeChange = 10 + Me.tbPosterQual.Location = New System.Drawing.Point(7, 139) + Me.tbPosterQual.Maximum = 100 + Me.tbPosterQual.Name = "tbPosterQual" + Me.tbPosterQual.Size = New System.Drawing.Size(179, 27) + Me.tbPosterQual.TabIndex = 10 + Me.tbPosterQual.TickFrequency = 10 + Me.tbPosterQual.Value = 100 + ' + 'Label24 + ' + Me.Label24.AutoSize = True + Me.Label24.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label24.Location = New System.Drawing.Point(3, 127) + Me.Label24.Name = "Label24" + Me.Label24.Size = New System.Drawing.Size(46, 13) + Me.Label24.TabIndex = 9 + Me.Label24.Text = "Quality:" + ' + 'Label11 + ' + Me.Label11.AutoSize = True + Me.Label11.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label11.Location = New System.Drawing.Point(3, 104) + Me.Label11.Name = "Label11" + Me.Label11.Size = New System.Drawing.Size(66, 13) + Me.Label11.TabIndex = 5 + Me.Label11.Text = "Max Width:" + ' + 'Label12 + ' + Me.Label12.AutoSize = True + Me.Label12.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label12.Location = New System.Drawing.Point(106, 104) + Me.Label12.Name = "Label12" + Me.Label12.Size = New System.Drawing.Size(69, 13) + Me.Label12.TabIndex = 7 + Me.Label12.Text = "Max Height:" + ' + 'chkResizePoster + ' + Me.chkResizePoster.AutoSize = True + Me.chkResizePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkResizePoster.Location = New System.Drawing.Point(6, 82) + Me.chkResizePoster.Name = "chkResizePoster" + Me.chkResizePoster.Size = New System.Drawing.Size(133, 17) + Me.chkResizePoster.TabIndex = 4 + Me.chkResizePoster.Text = "Automatically Resize:" + Me.chkResizePoster.UseVisualStyleBackColor = True + ' + 'lblPosterSize + ' + Me.lblPosterSize.AutoSize = True + Me.lblPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblPosterSize.Location = New System.Drawing.Point(4, 18) + Me.lblPosterSize.Name = "lblPosterSize" + Me.lblPosterSize.Size = New System.Drawing.Size(80, 13) + Me.lblPosterSize.TabIndex = 0 + Me.lblPosterSize.Text = "Preferred Size:" + ' + 'cbPosterSize + ' + Me.cbPosterSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbPosterSize.FormattingEnabled = True + Me.cbPosterSize.Location = New System.Drawing.Point(6, 34) + Me.cbPosterSize.Name = "cbPosterSize" + Me.cbPosterSize.Size = New System.Drawing.Size(148, 21) + Me.cbPosterSize.TabIndex = 1 + ' + 'chkOverwritePoster + ' + Me.chkOverwritePoster.AutoSize = True + Me.chkOverwritePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOverwritePoster.Location = New System.Drawing.Point(6, 62) + Me.chkOverwritePoster.Name = "chkOverwritePoster" + Me.chkOverwritePoster.Size = New System.Drawing.Size(119, 17) + Me.chkOverwritePoster.TabIndex = 3 + Me.chkOverwritePoster.Text = "Overwrite Existing" + Me.chkOverwritePoster.UseVisualStyleBackColor = True + ' + 'GroupBox13 + ' + Me.GroupBox13.Controls.Add(Me.txtFanartWidth) + Me.GroupBox13.Controls.Add(Me.txtFanartHeight) + Me.GroupBox13.Controls.Add(Me.chkFanartOnly) + Me.GroupBox13.Controls.Add(Me.lblFanartQual) + Me.GroupBox13.Controls.Add(Me.tbFanartQual) + Me.GroupBox13.Controls.Add(Me.Label26) + Me.GroupBox13.Controls.Add(Me.Label9) + Me.GroupBox13.Controls.Add(Me.Label10) + Me.GroupBox13.Controls.Add(Me.chkResizeFanart) + Me.GroupBox13.Controls.Add(Me.cbFanartSize) + Me.GroupBox13.Controls.Add(Me.lblFanartSize) + Me.GroupBox13.Controls.Add(Me.chkOverwriteFanart) + Me.GroupBox13.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox13.Location = New System.Drawing.Point(190, 185) + Me.GroupBox13.Name = "GroupBox13" + Me.GroupBox13.Size = New System.Drawing.Size(218, 176) + Me.GroupBox13.TabIndex = 3 + Me.GroupBox13.TabStop = False + Me.GroupBox13.Text = "Fanart" + ' + 'txtFanartWidth + ' + Me.txtFanartWidth.Enabled = False + Me.txtFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtFanartWidth.Location = New System.Drawing.Point(69, 100) + Me.txtFanartWidth.Name = "txtFanartWidth" + Me.txtFanartWidth.Size = New System.Drawing.Size(40, 22) + Me.txtFanartWidth.TabIndex = 6 + ' + 'txtFanartHeight + ' + Me.txtFanartHeight.Enabled = False + Me.txtFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtFanartHeight.Location = New System.Drawing.Point(175, 100) + Me.txtFanartHeight.Name = "txtFanartHeight" + Me.txtFanartHeight.Size = New System.Drawing.Size(40, 22) + Me.txtFanartHeight.TabIndex = 8 + ' + 'chkFanartOnly + ' + Me.chkFanartOnly.AutoSize = True + Me.chkFanartOnly.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFanartOnly.Location = New System.Drawing.Point(163, 38) + Me.chkFanartOnly.Name = "chkFanartOnly" + Me.chkFanartOnly.Size = New System.Drawing.Size(50, 17) + Me.chkFanartOnly.TabIndex = 2 + Me.chkFanartOnly.Text = "Only" + Me.chkFanartOnly.UseVisualStyleBackColor = True + ' + 'lblFanartQual + ' + Me.lblFanartQual.AutoSize = True + Me.lblFanartQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblFanartQual.Location = New System.Drawing.Point(183, 151) + Me.lblFanartQual.Name = "lblFanartQual" + Me.lblFanartQual.Size = New System.Drawing.Size(29, 17) + Me.lblFanartQual.TabIndex = 11 + Me.lblFanartQual.Text = "100" + ' + 'tbFanartQual + ' + Me.tbFanartQual.AutoSize = False + Me.tbFanartQual.LargeChange = 10 + Me.tbFanartQual.Location = New System.Drawing.Point(6, 143) + Me.tbFanartQual.Maximum = 100 + Me.tbFanartQual.Name = "tbFanartQual" + Me.tbFanartQual.Size = New System.Drawing.Size(180, 27) + Me.tbFanartQual.TabIndex = 10 + Me.tbFanartQual.TickFrequency = 10 + Me.tbFanartQual.Value = 100 + ' + 'Label26 + ' + Me.Label26.AutoSize = True + Me.Label26.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label26.Location = New System.Drawing.Point(2, 131) + Me.Label26.Name = "Label26" + Me.Label26.Size = New System.Drawing.Size(46, 13) + Me.Label26.TabIndex = 9 + Me.Label26.Text = "Quality:" + ' + 'Label9 + ' + Me.Label9.AutoSize = True + Me.Label9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label9.Location = New System.Drawing.Point(3, 104) + Me.Label9.Name = "Label9" + Me.Label9.Size = New System.Drawing.Size(66, 13) + Me.Label9.TabIndex = 5 + Me.Label9.Text = "Max Width:" + ' + 'Label10 + ' + Me.Label10.AutoSize = True + Me.Label10.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label10.Location = New System.Drawing.Point(107, 104) + Me.Label10.Name = "Label10" + Me.Label10.Size = New System.Drawing.Size(69, 13) + Me.Label10.TabIndex = 7 + Me.Label10.Text = "Max Height:" + ' + 'chkResizeFanart + ' + Me.chkResizeFanart.AutoSize = True + Me.chkResizeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkResizeFanart.Location = New System.Drawing.Point(6, 82) + Me.chkResizeFanart.Name = "chkResizeFanart" + Me.chkResizeFanart.Size = New System.Drawing.Size(133, 17) + Me.chkResizeFanart.TabIndex = 4 + Me.chkResizeFanart.Text = "Automatically Resize:" + Me.chkResizeFanart.UseVisualStyleBackColor = True + ' + 'cbFanartSize + ' + Me.cbFanartSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbFanartSize.FormattingEnabled = True + Me.cbFanartSize.Location = New System.Drawing.Point(6, 34) + Me.cbFanartSize.Name = "cbFanartSize" + Me.cbFanartSize.Size = New System.Drawing.Size(148, 21) + Me.cbFanartSize.TabIndex = 1 + ' + 'lblFanartSize + ' + Me.lblFanartSize.AutoSize = True + Me.lblFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblFanartSize.Location = New System.Drawing.Point(4, 18) + Me.lblFanartSize.Name = "lblFanartSize" + Me.lblFanartSize.Size = New System.Drawing.Size(80, 13) + Me.lblFanartSize.TabIndex = 0 + Me.lblFanartSize.Text = "Preferred Size:" + ' + 'chkOverwriteFanart + ' + Me.chkOverwriteFanart.AutoSize = True + Me.chkOverwriteFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOverwriteFanart.Location = New System.Drawing.Point(6, 62) + Me.chkOverwriteFanart.Name = "chkOverwriteFanart" + Me.chkOverwriteFanart.Size = New System.Drawing.Size(119, 17) + Me.chkOverwriteFanart.TabIndex = 3 + Me.chkOverwriteFanart.Text = "Overwrite Existing" + Me.chkOverwriteFanart.UseVisualStyleBackColor = True + ' + 'GroupBox9 + ' + Me.GroupBox9.Controls.Add(Me.chkScraperActorThumbs) + Me.GroupBox9.Controls.Add(Me.chkNoSaveImagesToNfo) + Me.GroupBox9.Controls.Add(Me.chkSingleScrapeImages) + Me.GroupBox9.Controls.Add(Me.GroupBox17) + Me.GroupBox9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox9.Location = New System.Drawing.Point(3, 3) + Me.GroupBox9.Name = "GroupBox9" + Me.GroupBox9.Size = New System.Drawing.Size(184, 168) + Me.GroupBox9.TabIndex = 0 + Me.GroupBox9.TabStop = False + Me.GroupBox9.Text = "Images" + ' + 'chkScraperActorThumbs + ' + Me.chkScraperActorThumbs.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScraperActorThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperActorThumbs.Location = New System.Drawing.Point(6, 35) + Me.chkScraperActorThumbs.Name = "chkScraperActorThumbs" + Me.chkScraperActorThumbs.Size = New System.Drawing.Size(173, 19) + Me.chkScraperActorThumbs.TabIndex = 1 + Me.chkScraperActorThumbs.Text = "Enable Actor Thumbs" + Me.chkScraperActorThumbs.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScraperActorThumbs.UseVisualStyleBackColor = True + ' + 'chkNoSaveImagesToNfo + ' + Me.chkNoSaveImagesToNfo.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkNoSaveImagesToNfo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkNoSaveImagesToNfo.Location = New System.Drawing.Point(6, 53) + Me.chkNoSaveImagesToNfo.Name = "chkNoSaveImagesToNfo" + Me.chkNoSaveImagesToNfo.Size = New System.Drawing.Size(172, 34) + Me.chkNoSaveImagesToNfo.TabIndex = 2 + Me.chkNoSaveImagesToNfo.Text = "Do Not Save Image URLs to Nfo" + Me.chkNoSaveImagesToNfo.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkNoSaveImagesToNfo.UseVisualStyleBackColor = True + ' + 'chkSingleScrapeImages + ' + Me.chkSingleScrapeImages.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkSingleScrapeImages.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSingleScrapeImages.Location = New System.Drawing.Point(6, 16) + Me.chkSingleScrapeImages.Name = "chkSingleScrapeImages" + Me.chkSingleScrapeImages.Size = New System.Drawing.Size(173, 19) + Me.chkSingleScrapeImages.TabIndex = 0 + Me.chkSingleScrapeImages.Text = "Get on Single Scrape" + Me.chkSingleScrapeImages.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkSingleScrapeImages.UseVisualStyleBackColor = True + ' + 'GroupBox17 + ' + Me.GroupBox17.Controls.Add(Me.chkUseImgCacheUpdaters) + Me.GroupBox17.Controls.Add(Me.chkPersistImgCache) + Me.GroupBox17.Controls.Add(Me.chkUseImgCache) + Me.GroupBox17.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox17.Location = New System.Drawing.Point(4, 84) + Me.GroupBox17.Name = "GroupBox17" + Me.GroupBox17.Size = New System.Drawing.Size(176, 79) + Me.GroupBox17.TabIndex = 3 + Me.GroupBox17.TabStop = False + Me.GroupBox17.Text = "Caching" + ' + 'chkUseImgCacheUpdaters + ' + Me.chkUseImgCacheUpdaters.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseImgCacheUpdaters.Enabled = False + Me.chkUseImgCacheUpdaters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseImgCacheUpdaters.Location = New System.Drawing.Point(20, 35) + Me.chkUseImgCacheUpdaters.Name = "chkUseImgCacheUpdaters" + Me.chkUseImgCacheUpdaters.Size = New System.Drawing.Size(155, 18) + Me.chkUseImgCacheUpdaters.TabIndex = 1 + Me.chkUseImgCacheUpdaters.Text = "Use Cache for Scrapers" + Me.chkUseImgCacheUpdaters.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseImgCacheUpdaters.UseVisualStyleBackColor = True + ' + 'chkPersistImgCache + ' + Me.chkPersistImgCache.AutoSize = True + Me.chkPersistImgCache.Enabled = False + Me.chkPersistImgCache.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkPersistImgCache.Location = New System.Drawing.Point(20, 58) + Me.chkPersistImgCache.Name = "chkPersistImgCache" + Me.chkPersistImgCache.Size = New System.Drawing.Size(144, 17) + Me.chkPersistImgCache.TabIndex = 2 + Me.chkPersistImgCache.Text = "Persistent Image Cache" + Me.chkPersistImgCache.UseVisualStyleBackColor = True + ' + 'chkUseImgCache + ' + Me.chkUseImgCache.AutoSize = True + Me.chkUseImgCache.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseImgCache.Location = New System.Drawing.Point(7, 16) + Me.chkUseImgCache.Name = "chkUseImgCache" + Me.chkUseImgCache.Size = New System.Drawing.Size(113, 17) + Me.chkUseImgCache.TabIndex = 0 + Me.chkUseImgCache.Text = "Use Image Cache" + Me.chkUseImgCache.UseVisualStyleBackColor = True + ' + 'chkUseETasFA + ' + Me.chkUseETasFA.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseETasFA.Enabled = False + Me.chkUseETasFA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseETasFA.Location = New System.Drawing.Point(25, 84) + Me.chkUseETasFA.Name = "chkUseETasFA" + Me.chkUseETasFA.Size = New System.Drawing.Size(171, 30) + Me.chkUseETasFA.TabIndex = 4 + Me.chkUseETasFA.Text = "Use if no Fanart Found" + Me.chkUseETasFA.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUseETasFA.UseVisualStyleBackColor = True + ' + 'chkNoSpoilers + ' + Me.chkNoSpoilers.AutoSize = True + Me.chkNoSpoilers.Enabled = False + Me.chkNoSpoilers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkNoSpoilers.Location = New System.Drawing.Point(25, 67) + Me.chkNoSpoilers.Name = "chkNoSpoilers" + Me.chkNoSpoilers.Size = New System.Drawing.Size(85, 17) + Me.chkNoSpoilers.TabIndex = 3 + Me.chkNoSpoilers.Text = "No Spoilers" + Me.chkNoSpoilers.UseVisualStyleBackColor = True + ' + 'Label15 + ' + Me.Label15.AutoSize = True + Me.Label15.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label15.Location = New System.Drawing.Point(22, 50) + Me.Label15.Name = "Label15" + Me.Label15.Size = New System.Drawing.Size(102, 13) + Me.Label15.TabIndex = 1 + Me.Label15.Text = "Number To Create:" + ' + 'txtAutoThumbs + ' + Me.txtAutoThumbs.Enabled = False + Me.txtAutoThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtAutoThumbs.Location = New System.Drawing.Point(124, 47) + Me.txtAutoThumbs.Name = "txtAutoThumbs" + Me.txtAutoThumbs.Size = New System.Drawing.Size(53, 22) + Me.txtAutoThumbs.TabIndex = 2 + ' + 'chkAutoThumbs + ' + Me.chkAutoThumbs.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkAutoThumbs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkAutoThumbs.Location = New System.Drawing.Point(6, 17) + Me.chkAutoThumbs.Name = "chkAutoThumbs" + Me.chkAutoThumbs.Size = New System.Drawing.Size(188, 30) + Me.chkAutoThumbs.TabIndex = 0 + Me.chkAutoThumbs.Text = "Extract During Scrapers" + Me.chkAutoThumbs.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkAutoThumbs.UseVisualStyleBackColor = True + ' + 'btnOK + ' + Me.btnOK.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnOK.Location = New System.Drawing.Point(813, 601) + Me.btnOK.Name = "btnOK" + Me.btnOK.Size = New System.Drawing.Size(75, 23) + Me.btnOK.TabIndex = 0 + Me.btnOK.Text = "OK" + Me.btnOK.UseVisualStyleBackColor = True + ' + 'btnApply + ' + Me.btnApply.Enabled = False + Me.btnApply.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnApply.Location = New System.Drawing.Point(650, 601) + Me.btnApply.Name = "btnApply" + Me.btnApply.Size = New System.Drawing.Size(75, 23) + Me.btnApply.TabIndex = 2 + Me.btnApply.Text = "Apply" + Me.btnApply.UseVisualStyleBackColor = True + ' + 'btnCancel + ' + Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.btnCancel.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnCancel.Location = New System.Drawing.Point(732, 601) + Me.btnCancel.Name = "btnCancel" + Me.btnCancel.Size = New System.Drawing.Size(75, 23) + Me.btnCancel.TabIndex = 1 + Me.btnCancel.Text = "Cancel" + Me.btnCancel.UseVisualStyleBackColor = True + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.SteelBlue + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.Label2) + Me.pnlTop.Controls.Add(Me.Label4) + Me.pnlTop.Controls.Add(Me.PictureBox1) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(892, 64) + Me.pnlTop.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.BackColor = System.Drawing.Color.Transparent + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.ForeColor = System.Drawing.Color.White + Me.Label2.Location = New System.Drawing.Point(61, 38) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(245, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Configure Ember's appearance and operation." + ' + 'Label4 + ' + Me.Label4.AutoSize = True + Me.Label4.BackColor = System.Drawing.Color.Transparent + Me.Label4.Font = New System.Drawing.Font("Segoe UI", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label4.ForeColor = System.Drawing.Color.White + Me.Label4.Location = New System.Drawing.Point(58, 3) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(107, 32) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "Settings" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.Transparent + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 8) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(48, 48) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'ilSettings + ' + Me.ilSettings.ImageStream = CType(resources.GetObject("ilSettings.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.ilSettings.TransparentColor = System.Drawing.Color.Transparent + Me.ilSettings.Images.SetKeyName(0, "process.png") + Me.ilSettings.Images.SetKeyName(1, "comments.png") + Me.ilSettings.Images.SetKeyName(2, "film.png") + Me.ilSettings.Images.SetKeyName(3, "copy_paste.png") + Me.ilSettings.Images.SetKeyName(4, "attachment.png") + Me.ilSettings.Images.SetKeyName(5, "folder_full.png") + Me.ilSettings.Images.SetKeyName(6, "image.png") + Me.ilSettings.Images.SetKeyName(7, "television.ico") + Me.ilSettings.Images.SetKeyName(8, "favorite_film.png") + Me.ilSettings.Images.SetKeyName(9, "settingscheck.png") + Me.ilSettings.Images.SetKeyName(10, "settingsx.png") + ' + 'tvSettings + ' + Me.tvSettings.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.tvSettings.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tvSettings.FullRowSelect = True + Me.tvSettings.HideSelection = False + Me.tvSettings.ImageIndex = 0 + Me.tvSettings.ImageList = Me.ilSettings + Me.tvSettings.Location = New System.Drawing.Point(5, 147) + Me.tvSettings.Name = "tvSettings" + Me.tvSettings.SelectedImageIndex = 0 + Me.tvSettings.ShowLines = False + Me.tvSettings.ShowPlusMinus = False + Me.tvSettings.Size = New System.Drawing.Size(242, 402) + Me.tvSettings.TabIndex = 7 + ' + 'pnlGeneral + ' + Me.pnlGeneral.BackColor = System.Drawing.Color.White + Me.pnlGeneral.Controls.Add(Me.gbInterface) + Me.pnlGeneral.Controls.Add(Me.GroupBox4) + Me.pnlGeneral.Location = New System.Drawing.Point(10, 38) + Me.pnlGeneral.Name = "pnlGeneral" + Me.pnlGeneral.Size = New System.Drawing.Size(617, 400) + Me.pnlGeneral.TabIndex = 10 + Me.pnlGeneral.Visible = False + ' + 'gbInterface + ' + Me.gbInterface.Controls.Add(Me.GroupBox29) + Me.gbInterface.Controls.Add(Me.Label32) + Me.gbInterface.Controls.Add(Me.cbIntLang) + Me.gbInterface.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbInterface.Location = New System.Drawing.Point(7, 3) + Me.gbInterface.Name = "gbInterface" + Me.gbInterface.Size = New System.Drawing.Size(196, 344) + Me.gbInterface.TabIndex = 0 + Me.gbInterface.TabStop = False + Me.gbInterface.Text = "Interface" + ' + 'pnlXBMCCom + ' + Me.pnlXBMCCom.BackColor = System.Drawing.Color.White + Me.pnlXBMCCom.Controls.Add(Me.gbProxy) + Me.pnlXBMCCom.Location = New System.Drawing.Point(766, 722) + Me.pnlXBMCCom.Name = "pnlXBMCCom" + Me.pnlXBMCCom.Size = New System.Drawing.Size(617, 400) + Me.pnlXBMCCom.TabIndex = 18 + Me.pnlXBMCCom.Visible = False + ' + 'gbProxy + ' + Me.gbProxy.Controls.Add(Me.gbCreds) + Me.gbProxy.Controls.Add(Me.lblProxyPort) + Me.gbProxy.Controls.Add(Me.lblProxyURI) + Me.gbProxy.Controls.Add(Me.txtProxyPort) + Me.gbProxy.Controls.Add(Me.txtProxyURI) + Me.gbProxy.Controls.Add(Me.chkEnableProxy) + Me.gbProxy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbProxy.Location = New System.Drawing.Point(3, 6) + Me.gbProxy.Name = "gbProxy" + Me.gbProxy.Size = New System.Drawing.Size(290, 230) + Me.gbProxy.TabIndex = 0 + Me.gbProxy.TabStop = False + Me.gbProxy.Text = "Proxy" + ' + 'gbCreds + ' + Me.gbCreds.Controls.Add(Me.txtProxyDomain) + Me.gbCreds.Controls.Add(Me.lblProxyDomain) + Me.gbCreds.Controls.Add(Me.txtProxyPassword) + Me.gbCreds.Controls.Add(Me.txtProxyUsername) + Me.gbCreds.Controls.Add(Me.lblProxyUN) + Me.gbCreds.Controls.Add(Me.lblProxyPW) + Me.gbCreds.Controls.Add(Me.chkEnableCredentials) + Me.gbCreds.Enabled = False + Me.gbCreds.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbCreds.Location = New System.Drawing.Point(5, 115) + Me.gbCreds.Name = "gbCreds" + Me.gbCreds.Size = New System.Drawing.Size(279, 103) + Me.gbCreds.TabIndex = 5 + Me.gbCreds.TabStop = False + Me.gbCreds.Text = "Credentials" + ' + 'txtProxyDomain + ' + Me.txtProxyDomain.Enabled = False + Me.txtProxyDomain.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtProxyDomain.Location = New System.Drawing.Point(64, 69) + Me.txtProxyDomain.Name = "txtProxyDomain" + Me.txtProxyDomain.Size = New System.Drawing.Size(209, 22) + Me.txtProxyDomain.TabIndex = 6 + ' + 'lblProxyDomain + ' + Me.lblProxyDomain.AutoSize = True + Me.lblProxyDomain.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblProxyDomain.Location = New System.Drawing.Point(14, 72) + Me.lblProxyDomain.Name = "lblProxyDomain" + Me.lblProxyDomain.Size = New System.Drawing.Size(50, 13) + Me.lblProxyDomain.TabIndex = 5 + Me.lblProxyDomain.Text = "Domain:" + ' + 'txtProxyPassword + ' + Me.txtProxyPassword.Enabled = False + Me.txtProxyPassword.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtProxyPassword.Location = New System.Drawing.Point(201, 39) + Me.txtProxyPassword.Name = "txtProxyPassword" + Me.txtProxyPassword.Size = New System.Drawing.Size(72, 22) + Me.txtProxyPassword.TabIndex = 4 + Me.txtProxyPassword.UseSystemPasswordChar = True + ' + 'txtProxyUsername + ' + Me.txtProxyUsername.Enabled = False + Me.txtProxyUsername.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtProxyUsername.Location = New System.Drawing.Point(64, 39) + Me.txtProxyUsername.Name = "txtProxyUsername" + Me.txtProxyUsername.Size = New System.Drawing.Size(72, 22) + Me.txtProxyUsername.TabIndex = 2 + ' + 'lblProxyUN + ' + Me.lblProxyUN.AutoSize = True + Me.lblProxyUN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblProxyUN.Location = New System.Drawing.Point(3, 42) + Me.lblProxyUN.Name = "lblProxyUN" + Me.lblProxyUN.Size = New System.Drawing.Size(61, 13) + Me.lblProxyUN.TabIndex = 1 + Me.lblProxyUN.Text = "Username:" + ' + 'lblProxyPW + ' + Me.lblProxyPW.AutoSize = True + Me.lblProxyPW.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblProxyPW.Location = New System.Drawing.Point(143, 42) + Me.lblProxyPW.Name = "lblProxyPW" + Me.lblProxyPW.Size = New System.Drawing.Size(59, 13) + Me.lblProxyPW.TabIndex = 3 + Me.lblProxyPW.Text = "Password:" + ' + 'chkEnableCredentials + ' + Me.chkEnableCredentials.AutoSize = True + Me.chkEnableCredentials.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEnableCredentials.Location = New System.Drawing.Point(8, 17) + Me.chkEnableCredentials.Name = "chkEnableCredentials" + Me.chkEnableCredentials.Size = New System.Drawing.Size(122, 17) + Me.chkEnableCredentials.TabIndex = 0 + Me.chkEnableCredentials.Text = "Enable Credentials" + Me.chkEnableCredentials.UseVisualStyleBackColor = True + ' + 'lblProxyPort + ' + Me.lblProxyPort.AutoSize = True + Me.lblProxyPort.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblProxyPort.Location = New System.Drawing.Point(9, 88) + Me.lblProxyPort.Name = "lblProxyPort" + Me.lblProxyPort.Size = New System.Drawing.Size(61, 13) + Me.lblProxyPort.TabIndex = 3 + Me.lblProxyPort.Text = "Proxy Port:" + ' + 'lblProxyURI + ' + Me.lblProxyURI.AutoSize = True + Me.lblProxyURI.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblProxyURI.Location = New System.Drawing.Point(9, 39) + Me.lblProxyURI.Name = "lblProxyURI" + Me.lblProxyURI.Size = New System.Drawing.Size(58, 13) + Me.lblProxyURI.TabIndex = 1 + Me.lblProxyURI.Text = "Proxy URI:" + ' + 'txtProxyPort + ' + Me.txtProxyPort.Enabled = False + Me.txtProxyPort.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtProxyPort.Location = New System.Drawing.Point(72, 84) + Me.txtProxyPort.Name = "txtProxyPort" + Me.txtProxyPort.Size = New System.Drawing.Size(51, 22) + Me.txtProxyPort.TabIndex = 4 + ' + 'txtProxyURI + ' + Me.txtProxyURI.Enabled = False + Me.txtProxyURI.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtProxyURI.Location = New System.Drawing.Point(11, 54) + Me.txtProxyURI.Name = "txtProxyURI" + Me.txtProxyURI.Size = New System.Drawing.Size(267, 22) + Me.txtProxyURI.TabIndex = 2 + ' + 'chkEnableProxy + ' + Me.chkEnableProxy.AutoSize = True + Me.chkEnableProxy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEnableProxy.Location = New System.Drawing.Point(11, 17) + Me.chkEnableProxy.Name = "chkEnableProxy" + Me.chkEnableProxy.Size = New System.Drawing.Size(91, 17) + Me.chkEnableProxy.TabIndex = 0 + Me.chkEnableProxy.Text = "Enable Proxy" + Me.chkEnableProxy.UseVisualStyleBackColor = True + ' + 'pnlMovies + ' + Me.pnlMovies.BackColor = System.Drawing.Color.White + Me.pnlMovies.Controls.Add(Me.gbGenreFilter) + Me.pnlMovies.Controls.Add(Me.gbFilters) + Me.pnlMovies.Controls.Add(Me.GroupBox27) + Me.pnlMovies.Controls.Add(Me.GroupBox12) + Me.pnlMovies.Controls.Add(Me.GroupBox2) + Me.pnlMovies.Location = New System.Drawing.Point(850, 650) + Me.pnlMovies.Name = "pnlMovies" + Me.pnlMovies.Size = New System.Drawing.Size(617, 400) + Me.pnlMovies.TabIndex = 15 + Me.pnlMovies.Visible = False + ' + 'gbGenreFilter + ' + Me.gbGenreFilter.Controls.Add(Me.lbGenre) + Me.gbGenreFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbGenreFilter.Location = New System.Drawing.Point(428, 209) + Me.gbGenreFilter.Name = "gbGenreFilter" + Me.gbGenreFilter.Size = New System.Drawing.Size(183, 151) + Me.gbGenreFilter.TabIndex = 7 + Me.gbGenreFilter.TabStop = False + Me.gbGenreFilter.Text = "Genre Language Filter" + ' + 'gbFilters + ' + Me.gbFilters.Controls.Add(Me.btnResetMovieFilters) + Me.gbFilters.Controls.Add(Me.btnDown) + Me.gbFilters.Controls.Add(Me.btnUp) + Me.gbFilters.Controls.Add(Me.chkProperCase) + Me.gbFilters.Controls.Add(Me.btnRemoveFilter) + Me.gbFilters.Controls.Add(Me.btnAddFilter) + Me.gbFilters.Controls.Add(Me.txtFilter) + Me.gbFilters.Controls.Add(Me.lstFilters) + Me.gbFilters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbFilters.Location = New System.Drawing.Point(229, 7) + Me.gbFilters.Name = "gbFilters" + Me.gbFilters.Size = New System.Drawing.Size(382, 200) + Me.gbFilters.TabIndex = 6 + Me.gbFilters.TabStop = False + Me.gbFilters.Text = "Folder/File Name Filters" + ' + 'btnResetMovieFilters + ' + Me.btnResetMovieFilters.Image = CType(resources.GetObject("btnResetMovieFilters.Image"), System.Drawing.Image) + Me.btnResetMovieFilters.Location = New System.Drawing.Point(355, 11) + Me.btnResetMovieFilters.Name = "btnResetMovieFilters" + Me.btnResetMovieFilters.Size = New System.Drawing.Size(23, 23) + Me.btnResetMovieFilters.TabIndex = 8 + Me.btnResetMovieFilters.UseVisualStyleBackColor = True + ' + 'btnDown + ' + Me.btnDown.Image = CType(resources.GetObject("btnDown.Image"), System.Drawing.Image) + Me.btnDown.Location = New System.Drawing.Point(313, 172) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(23, 23) + Me.btnDown.TabIndex = 5 + Me.btnDown.UseVisualStyleBackColor = True + ' + 'btnUp + ' + Me.btnUp.Image = CType(resources.GetObject("btnUp.Image"), System.Drawing.Image) + Me.btnUp.Location = New System.Drawing.Point(289, 172) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(23, 23) + Me.btnUp.TabIndex = 4 + Me.btnUp.UseVisualStyleBackColor = True + ' + 'chkProperCase + ' + Me.chkProperCase.AutoSize = True + Me.chkProperCase.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkProperCase.Location = New System.Drawing.Point(6, 16) + Me.chkProperCase.Name = "chkProperCase" + Me.chkProperCase.Size = New System.Drawing.Size(181, 17) + Me.chkProperCase.TabIndex = 0 + Me.chkProperCase.Text = "Convert Names to Proper Case" + Me.chkProperCase.UseVisualStyleBackColor = True + ' + 'btnRemoveFilter + ' + Me.btnRemoveFilter.Image = CType(resources.GetObject("btnRemoveFilter.Image"), System.Drawing.Image) + Me.btnRemoveFilter.Location = New System.Drawing.Point(354, 172) + Me.btnRemoveFilter.Name = "btnRemoveFilter" + Me.btnRemoveFilter.Size = New System.Drawing.Size(23, 23) + Me.btnRemoveFilter.TabIndex = 6 + Me.btnRemoveFilter.UseVisualStyleBackColor = True + ' + 'btnAddFilter + ' + Me.btnAddFilter.Image = CType(resources.GetObject("btnAddFilter.Image"), System.Drawing.Image) + Me.btnAddFilter.Location = New System.Drawing.Point(247, 172) + Me.btnAddFilter.Name = "btnAddFilter" + Me.btnAddFilter.Size = New System.Drawing.Size(23, 23) + Me.btnAddFilter.TabIndex = 3 + Me.btnAddFilter.UseVisualStyleBackColor = True + ' + 'txtFilter + ' + Me.txtFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtFilter.Location = New System.Drawing.Point(6, 173) + Me.txtFilter.Name = "txtFilter" + Me.txtFilter.Size = New System.Drawing.Size(239, 22) + Me.txtFilter.TabIndex = 2 + ' + 'lstFilters + ' + Me.lstFilters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstFilters.FormattingEnabled = True + Me.lstFilters.Location = New System.Drawing.Point(6, 36) + Me.lstFilters.Name = "lstFilters" + Me.lstFilters.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.lstFilters.Size = New System.Drawing.Size(371, 121) + Me.lstFilters.TabIndex = 1 + ' + 'GroupBox27 + ' + Me.GroupBox27.Controls.Add(Me.chkMissingExtra) + Me.GroupBox27.Controls.Add(Me.chkMissingSubs) + Me.GroupBox27.Controls.Add(Me.chkMissingTrailer) + Me.GroupBox27.Controls.Add(Me.chkMissingNFO) + Me.GroupBox27.Controls.Add(Me.chkMissingFanart) + Me.GroupBox27.Controls.Add(Me.chkMissingPoster) + Me.GroupBox27.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox27.Location = New System.Drawing.Point(229, 209) + Me.GroupBox27.Name = "GroupBox27" + Me.GroupBox27.Size = New System.Drawing.Size(185, 123) + Me.GroupBox27.TabIndex = 5 + Me.GroupBox27.TabStop = False + Me.GroupBox27.Text = "Missing Items Filter" + ' + 'chkMissingExtra + ' + Me.chkMissingExtra.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMissingExtra.Location = New System.Drawing.Point(8, 98) + Me.chkMissingExtra.Name = "chkMissingExtra" + Me.chkMissingExtra.Size = New System.Drawing.Size(174, 17) + Me.chkMissingExtra.TabIndex = 11 + Me.chkMissingExtra.Text = "Check for Extrathumbs" + Me.chkMissingExtra.UseVisualStyleBackColor = True + ' + 'chkMissingSubs + ' + Me.chkMissingSubs.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMissingSubs.Location = New System.Drawing.Point(8, 82) + Me.chkMissingSubs.Name = "chkMissingSubs" + Me.chkMissingSubs.Size = New System.Drawing.Size(174, 17) + Me.chkMissingSubs.TabIndex = 10 + Me.chkMissingSubs.Text = "Check for Subs" + Me.chkMissingSubs.UseVisualStyleBackColor = True + ' + 'chkMissingTrailer + ' + Me.chkMissingTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMissingTrailer.Location = New System.Drawing.Point(8, 66) + Me.chkMissingTrailer.Name = "chkMissingTrailer" + Me.chkMissingTrailer.Size = New System.Drawing.Size(174, 17) + Me.chkMissingTrailer.TabIndex = 9 + Me.chkMissingTrailer.Text = "Check for Trailer" + Me.chkMissingTrailer.UseVisualStyleBackColor = True + ' + 'chkMissingNFO + ' + Me.chkMissingNFO.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMissingNFO.Location = New System.Drawing.Point(8, 50) + Me.chkMissingNFO.Name = "chkMissingNFO" + Me.chkMissingNFO.Size = New System.Drawing.Size(174, 17) + Me.chkMissingNFO.TabIndex = 8 + Me.chkMissingNFO.Text = "Check for NFO" + Me.chkMissingNFO.UseVisualStyleBackColor = True + ' + 'chkMissingFanart + ' + Me.chkMissingFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMissingFanart.Location = New System.Drawing.Point(8, 34) + Me.chkMissingFanart.Name = "chkMissingFanart" + Me.chkMissingFanart.Size = New System.Drawing.Size(174, 17) + Me.chkMissingFanart.TabIndex = 7 + Me.chkMissingFanart.Text = "Check for Fanart" + Me.chkMissingFanart.UseVisualStyleBackColor = True + ' + 'chkMissingPoster + ' + Me.chkMissingPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMissingPoster.Location = New System.Drawing.Point(8, 18) + Me.chkMissingPoster.Name = "chkMissingPoster" + Me.chkMissingPoster.Size = New System.Drawing.Size(174, 17) + Me.chkMissingPoster.TabIndex = 6 + Me.chkMissingPoster.Text = "Check for Poster" + Me.chkMissingPoster.UseVisualStyleBackColor = True + ' + 'GroupBox16 + ' + Me.GroupBox16.Controls.Add(Me.chkAutoBD) + Me.GroupBox16.Controls.Add(Me.btnBrowse) + Me.GroupBox16.Controls.Add(Me.txtBDPath) + Me.GroupBox16.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox16.Location = New System.Drawing.Point(243, 326) + Me.GroupBox16.Name = "GroupBox16" + Me.GroupBox16.Size = New System.Drawing.Size(366, 69) + Me.GroupBox16.TabIndex = 6 + Me.GroupBox16.TabStop = False + Me.GroupBox16.Text = "Backdrops Folder" + ' + 'chkAutoBD + ' + Me.chkAutoBD.AutoSize = True + Me.chkAutoBD.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkAutoBD.Location = New System.Drawing.Point(12, 46) + Me.chkAutoBD.Name = "chkAutoBD" + Me.chkAutoBD.Size = New System.Drawing.Size(265, 17) + Me.chkAutoBD.TabIndex = 2 + Me.chkAutoBD.Text = "Automatically Save Fanart To Backdrops Folder" + Me.chkAutoBD.UseVisualStyleBackColor = True + ' + 'btnBrowse + ' + Me.btnBrowse.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnBrowse.Location = New System.Drawing.Point(336, 15) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(25, 23) + Me.btnBrowse.TabIndex = 1 + Me.btnBrowse.Text = "..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' + 'txtBDPath + ' + Me.txtBDPath.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtBDPath.Location = New System.Drawing.Point(7, 17) + Me.txtBDPath.Name = "txtBDPath" + Me.txtBDPath.Size = New System.Drawing.Size(323, 22) + Me.txtBDPath.TabIndex = 0 + ' + 'lblCurrent + ' + Me.lblCurrent.BackColor = System.Drawing.Color.SteelBlue + Me.lblCurrent.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblCurrent.ForeColor = System.Drawing.Color.White + Me.lblCurrent.Location = New System.Drawing.Point(26, -1) + Me.lblCurrent.Name = "lblCurrent" + Me.lblCurrent.Size = New System.Drawing.Size(489, 25) + Me.lblCurrent.TabIndex = 0 + Me.lblCurrent.Text = "General" + ' + 'pnlCurrent + ' + Me.pnlCurrent.BackColor = System.Drawing.Color.SteelBlue + Me.pnlCurrent.Location = New System.Drawing.Point(516, 119) + Me.pnlCurrent.Name = "pnlCurrent" + Me.pnlCurrent.Size = New System.Drawing.Size(371, 25) + Me.pnlCurrent.TabIndex = 6 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.SteelBlue + Me.Panel1.Controls.Add(Me.pbCurrent) + Me.Panel1.Controls.Add(Me.lblCurrent) + Me.Panel1.Location = New System.Drawing.Point(5, 119) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(515, 25) + Me.Panel1.TabIndex = 5 + ' + 'pbCurrent + ' + Me.pbCurrent.Location = New System.Drawing.Point(2, 0) + Me.pbCurrent.Name = "pbCurrent" + Me.pbCurrent.Size = New System.Drawing.Size(24, 24) + Me.pbCurrent.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbCurrent.TabIndex = 2 + Me.pbCurrent.TabStop = False + ' + 'pnlExtensions + ' + Me.pnlExtensions.BackColor = System.Drawing.Color.White + Me.pnlExtensions.Controls.Add(Me.GroupBox22) + Me.pnlExtensions.Controls.Add(Me.GroupBox3) + Me.pnlExtensions.Controls.Add(Me.GroupBox18) + Me.pnlExtensions.Location = New System.Drawing.Point(855, 706) + Me.pnlExtensions.Name = "pnlExtensions" + Me.pnlExtensions.Size = New System.Drawing.Size(617, 400) + Me.pnlExtensions.TabIndex = 17 + Me.pnlExtensions.Visible = False + ' + 'GroupBox22 + ' + Me.GroupBox22.Controls.Add(Me.btnRemoveNoStack) + Me.GroupBox22.Controls.Add(Me.btnAddNoStack) + Me.GroupBox22.Controls.Add(Me.txtNoStack) + Me.GroupBox22.Controls.Add(Me.lstNoStack) + Me.GroupBox22.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox22.Location = New System.Drawing.Point(202, 6) + Me.GroupBox22.Name = "GroupBox22" + Me.GroupBox22.Size = New System.Drawing.Size(194, 199) + Me.GroupBox22.TabIndex = 1 + Me.GroupBox22.TabStop = False + Me.GroupBox22.Text = "No Stack Extensions" + ' + 'btnRemoveNoStack + ' + Me.btnRemoveNoStack.Image = CType(resources.GetObject("btnRemoveNoStack.Image"), System.Drawing.Image) + Me.btnRemoveNoStack.Location = New System.Drawing.Point(160, 167) + Me.btnRemoveNoStack.Name = "btnRemoveNoStack" + Me.btnRemoveNoStack.Size = New System.Drawing.Size(23, 23) + Me.btnRemoveNoStack.TabIndex = 3 + Me.btnRemoveNoStack.UseVisualStyleBackColor = True + ' + 'btnAddNoStack + ' + Me.btnAddNoStack.Image = CType(resources.GetObject("btnAddNoStack.Image"), System.Drawing.Image) + Me.btnAddNoStack.Location = New System.Drawing.Point(73, 167) + Me.btnAddNoStack.Name = "btnAddNoStack" + Me.btnAddNoStack.Size = New System.Drawing.Size(23, 23) + Me.btnAddNoStack.TabIndex = 2 + Me.btnAddNoStack.UseVisualStyleBackColor = True + ' + 'txtNoStack + ' + Me.txtNoStack.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtNoStack.Location = New System.Drawing.Point(11, 168) + Me.txtNoStack.Name = "txtNoStack" + Me.txtNoStack.Size = New System.Drawing.Size(61, 22) + Me.txtNoStack.TabIndex = 1 + ' + 'lstNoStack + ' + Me.lstNoStack.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstNoStack.FormattingEnabled = True + Me.lstNoStack.Location = New System.Drawing.Point(11, 15) + Me.lstNoStack.Name = "lstNoStack" + Me.lstNoStack.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.lstNoStack.Size = New System.Drawing.Size(171, 134) + Me.lstNoStack.Sorted = True + Me.lstNoStack.TabIndex = 0 + ' + 'GroupBox18 + ' + Me.GroupBox18.Controls.Add(Me.btnResetValidExts) + Me.GroupBox18.Controls.Add(Me.btnRemMovieExt) + Me.GroupBox18.Controls.Add(Me.btnAddMovieExt) + Me.GroupBox18.Controls.Add(Me.txtMovieExt) + Me.GroupBox18.Controls.Add(Me.lstMovieExts) + Me.GroupBox18.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox18.Location = New System.Drawing.Point(3, 6) + Me.GroupBox18.Name = "GroupBox18" + Me.GroupBox18.Size = New System.Drawing.Size(192, 385) + Me.GroupBox18.TabIndex = 0 + Me.GroupBox18.TabStop = False + Me.GroupBox18.Text = "Valid Video Extensions" + ' + 'btnResetValidExts + ' + Me.btnResetValidExts.Image = CType(resources.GetObject("btnResetValidExts.Image"), System.Drawing.Image) + Me.btnResetValidExts.Location = New System.Drawing.Point(164, 12) + Me.btnResetValidExts.Name = "btnResetValidExts" + Me.btnResetValidExts.Size = New System.Drawing.Size(23, 23) + Me.btnResetValidExts.TabIndex = 4 + Me.btnResetValidExts.UseVisualStyleBackColor = True + ' + 'btnRemMovieExt + ' + Me.btnRemMovieExt.Image = CType(resources.GetObject("btnRemMovieExt.Image"), System.Drawing.Image) + Me.btnRemMovieExt.Location = New System.Drawing.Point(163, 356) + Me.btnRemMovieExt.Name = "btnRemMovieExt" + Me.btnRemMovieExt.Size = New System.Drawing.Size(23, 23) + Me.btnRemMovieExt.TabIndex = 3 + Me.btnRemMovieExt.UseVisualStyleBackColor = True + ' + 'btnAddMovieExt + ' + Me.btnAddMovieExt.Image = CType(resources.GetObject("btnAddMovieExt.Image"), System.Drawing.Image) + Me.btnAddMovieExt.Location = New System.Drawing.Point(68, 356) + Me.btnAddMovieExt.Name = "btnAddMovieExt" + Me.btnAddMovieExt.Size = New System.Drawing.Size(23, 23) + Me.btnAddMovieExt.TabIndex = 2 + Me.btnAddMovieExt.UseVisualStyleBackColor = True + ' + 'txtMovieExt + ' + Me.txtMovieExt.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtMovieExt.Location = New System.Drawing.Point(6, 357) + Me.txtMovieExt.Name = "txtMovieExt" + Me.txtMovieExt.Size = New System.Drawing.Size(61, 22) + Me.txtMovieExt.TabIndex = 1 + ' + 'lstMovieExts + ' + Me.lstMovieExts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstMovieExts.FormattingEnabled = True + Me.lstMovieExts.Location = New System.Drawing.Point(6, 37) + Me.lstMovieExts.Name = "lstMovieExts" + Me.lstMovieExts.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.lstMovieExts.Size = New System.Drawing.Size(180, 303) + Me.lstMovieExts.Sorted = True + Me.lstMovieExts.TabIndex = 0 + ' + 'pnlSources + ' + Me.pnlSources.BackColor = System.Drawing.Color.White + Me.pnlSources.Controls.Add(Me.btnEditSource) + Me.pnlSources.Controls.Add(Me.pnlGeneral) + Me.pnlSources.Controls.Add(Me.GroupBox19) + Me.pnlSources.Controls.Add(Me.lvMovies) + Me.pnlSources.Controls.Add(Me.btnMovieRem) + Me.pnlSources.Controls.Add(Me.btnMovieAddFolder) + Me.pnlSources.Controls.Add(Me.GroupBox8) + Me.pnlSources.Controls.Add(Me.GroupBox16) + Me.pnlSources.Location = New System.Drawing.Point(580, 818) + Me.pnlSources.Name = "pnlSources" + Me.pnlSources.Size = New System.Drawing.Size(617, 402) + Me.pnlSources.TabIndex = 13 + Me.pnlSources.Visible = False + ' + 'btnEditSource + ' + Me.btnEditSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnEditSource.Image = CType(resources.GetObject("btnEditSource.Image"), System.Drawing.Image) + Me.btnEditSource.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnEditSource.Location = New System.Drawing.Point(506, 35) + Me.btnEditSource.Name = "btnEditSource" + Me.btnEditSource.Size = New System.Drawing.Size(104, 23) + Me.btnEditSource.TabIndex = 2 + Me.btnEditSource.Text = "Edit Source" + Me.btnEditSource.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnEditSource.UseVisualStyleBackColor = True + ' + 'GroupBox19 + ' + Me.GroupBox19.Controls.Add(Me.chkVideoTSParentXBMC) + Me.GroupBox19.Controls.Add(Me.chkScanOrderModify) + Me.GroupBox19.Controls.Add(Me.chkSortBeforeScan) + Me.GroupBox19.Controls.Add(Me.chkIgnoreLastScan) + Me.GroupBox19.Controls.Add(Me.chkCleanDB) + Me.GroupBox19.Controls.Add(Me.chkAutoDetectVTS) + Me.GroupBox19.Controls.Add(Me.chkSkipStackedSizeCheck) + Me.GroupBox19.Controls.Add(Me.Label21) + Me.GroupBox19.Controls.Add(Me.txtSkipLessThan) + Me.GroupBox19.Controls.Add(Me.Label20) + Me.GroupBox19.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox19.Location = New System.Drawing.Point(5, 113) + Me.GroupBox19.Name = "GroupBox19" + Me.GroupBox19.Size = New System.Drawing.Size(233, 282) + Me.GroupBox19.TabIndex = 4 + Me.GroupBox19.TabStop = False + Me.GroupBox19.Text = "Miscellaneous Options" + ' + 'chkVideoTSParentXBMC + ' + Me.chkVideoTSParentXBMC.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkVideoTSParentXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVideoTSParentXBMC.Location = New System.Drawing.Point(5, 114) + Me.chkVideoTSParentXBMC.Name = "chkVideoTSParentXBMC" + Me.chkVideoTSParentXBMC.Size = New System.Drawing.Size(222, 33) + Me.chkVideoTSParentXBMC.TabIndex = 5 + Me.chkVideoTSParentXBMC.Text = "Frodo Compatible VIDEO_TS File Replacement/Naming" + Me.chkVideoTSParentXBMC.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkVideoTSParentXBMC.UseVisualStyleBackColor = True + ' + 'chkScanOrderModify + ' + Me.chkScanOrderModify.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScanOrderModify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScanOrderModify.Location = New System.Drawing.Point(5, 213) + Me.chkScanOrderModify.Name = "chkScanOrderModify" + Me.chkScanOrderModify.Size = New System.Drawing.Size(222, 33) + Me.chkScanOrderModify.TabIndex = 8 + Me.chkScanOrderModify.Text = "Scan in order of last write time." + Me.chkScanOrderModify.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkScanOrderModify.UseVisualStyleBackColor = True + ' + 'chkSortBeforeScan + ' + Me.chkSortBeforeScan.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkSortBeforeScan.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSortBeforeScan.Location = New System.Drawing.Point(5, 147) + Me.chkSortBeforeScan.Name = "chkSortBeforeScan" + Me.chkSortBeforeScan.Size = New System.Drawing.Size(222, 33) + Me.chkSortBeforeScan.TabIndex = 6 + Me.chkSortBeforeScan.Text = "Sort files into folders before each library update" + Me.chkSortBeforeScan.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkSortBeforeScan.UseVisualStyleBackColor = True + ' + 'chkIgnoreLastScan + ' + Me.chkIgnoreLastScan.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkIgnoreLastScan.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkIgnoreLastScan.Location = New System.Drawing.Point(5, 180) + Me.chkIgnoreLastScan.Name = "chkIgnoreLastScan" + Me.chkIgnoreLastScan.Size = New System.Drawing.Size(222, 33) + Me.chkIgnoreLastScan.TabIndex = 7 + Me.chkIgnoreLastScan.Text = "Always scan all media when updating library" + Me.chkIgnoreLastScan.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkIgnoreLastScan.UseVisualStyleBackColor = True + ' + 'chkCleanDB + ' + Me.chkCleanDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkCleanDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCleanDB.Location = New System.Drawing.Point(5, 246) + Me.chkCleanDB.Name = "chkCleanDB" + Me.chkCleanDB.Size = New System.Drawing.Size(222, 33) + Me.chkCleanDB.TabIndex = 9 + Me.chkCleanDB.Text = "Clean database after updating library" + Me.chkCleanDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkCleanDB.UseVisualStyleBackColor = True + ' + 'chkAutoDetectVTS + ' + Me.chkAutoDetectVTS.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkAutoDetectVTS.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkAutoDetectVTS.Location = New System.Drawing.Point(5, 81) + Me.chkAutoDetectVTS.Name = "chkAutoDetectVTS" + Me.chkAutoDetectVTS.Size = New System.Drawing.Size(222, 33) + Me.chkAutoDetectVTS.TabIndex = 4 + Me.chkAutoDetectVTS.Text = "Recognize VIDEO_TS Folders" + Me.chkAutoDetectVTS.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkAutoDetectVTS.UseVisualStyleBackColor = True + ' + 'chkSkipStackedSizeCheck + ' + Me.chkSkipStackedSizeCheck.AutoSize = True + Me.chkSkipStackedSizeCheck.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkSkipStackedSizeCheck.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSkipStackedSizeCheck.Location = New System.Drawing.Point(27, 58) + Me.chkSkipStackedSizeCheck.Name = "chkSkipStackedSizeCheck" + Me.chkSkipStackedSizeCheck.Size = New System.Drawing.Size(188, 17) + Me.chkSkipStackedSizeCheck.TabIndex = 3 + Me.chkSkipStackedSizeCheck.Text = "Skip Size Check of Stacked Files" + Me.chkSkipStackedSizeCheck.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkSkipStackedSizeCheck.UseVisualStyleBackColor = True + ' + 'Label21 + ' + Me.Label21.AutoSize = True + Me.Label21.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label21.Location = New System.Drawing.Point(133, 39) + Me.Label21.Name = "Label21" + Me.Label21.Size = New System.Drawing.Size(24, 13) + Me.Label21.TabIndex = 2 + Me.Label21.Text = "MB" + ' + 'txtSkipLessThan + ' + Me.txtSkipLessThan.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtSkipLessThan.Location = New System.Drawing.Point(27, 35) + Me.txtSkipLessThan.Name = "txtSkipLessThan" + Me.txtSkipLessThan.Size = New System.Drawing.Size(100, 22) + Me.txtSkipLessThan.TabIndex = 1 + ' + 'Label20 + ' + Me.Label20.AutoSize = True + Me.Label20.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label20.Location = New System.Drawing.Point(4, 19) + Me.Label20.Name = "Label20" + Me.Label20.Size = New System.Drawing.Size(122, 13) + Me.Label20.TabIndex = 0 + Me.Label20.Text = "Skip files smaller than:" + ' + 'pnlImages + ' + Me.pnlImages.BackColor = System.Drawing.Color.White + Me.pnlImages.Controls.Add(Me.GroupBox15) + Me.pnlImages.Controls.Add(Me.GroupBox9) + Me.pnlImages.Controls.Add(Me.GroupBox13) + Me.pnlImages.Controls.Add(Me.GroupBox14) + Me.pnlImages.Controls.Add(Me.GroupBox23) + Me.pnlImages.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.pnlImages.Location = New System.Drawing.Point(1181, 571) + Me.pnlImages.Name = "pnlImages" + Me.pnlImages.Size = New System.Drawing.Size(617, 408) + Me.pnlImages.TabIndex = 12 + Me.pnlImages.Visible = False + ' + 'GroupBox15 + ' + Me.GroupBox15.Controls.Add(Me.cbTrailerQuality) + Me.GroupBox15.Controls.Add(Me.lblPreferredQuality) + Me.GroupBox15.Controls.Add(Me.chkDeleteAllTrailers) + Me.GroupBox15.Controls.Add(Me.chkOverwriteTrailer) + Me.GroupBox15.Controls.Add(Me.chkNoDLTrailer) + Me.GroupBox15.Controls.Add(Me.chkSingleScrapeTrailer) + Me.GroupBox15.Controls.Add(Me.chkUpdaterTrailer) + Me.GroupBox15.Controls.Add(Me.chkDownloadTrailer) + Me.GroupBox15.Location = New System.Drawing.Point(4, 172) + Me.GroupBox15.Name = "GroupBox15" + Me.GroupBox15.Size = New System.Drawing.Size(183, 230) + Me.GroupBox15.TabIndex = 1 + Me.GroupBox15.TabStop = False + Me.GroupBox15.Text = "Trailers" + ' + 'cbTrailerQuality + ' + Me.cbTrailerQuality.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTrailerQuality.Enabled = False + Me.cbTrailerQuality.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbTrailerQuality.FormattingEnabled = True + Me.cbTrailerQuality.Location = New System.Drawing.Point(33, 204) + Me.cbTrailerQuality.Name = "cbTrailerQuality" + Me.cbTrailerQuality.Size = New System.Drawing.Size(106, 21) + Me.cbTrailerQuality.TabIndex = 7 + ' + 'lblPreferredQuality + ' + Me.lblPreferredQuality.AutoSize = True + Me.lblPreferredQuality.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblPreferredQuality.Location = New System.Drawing.Point(31, 189) + Me.lblPreferredQuality.Name = "lblPreferredQuality" + Me.lblPreferredQuality.Size = New System.Drawing.Size(96, 13) + Me.lblPreferredQuality.TabIndex = 6 + Me.lblPreferredQuality.Text = "Preferred Quality:" + ' + 'chkDeleteAllTrailers + ' + Me.chkDeleteAllTrailers.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkDeleteAllTrailers.Enabled = False + Me.chkDeleteAllTrailers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDeleteAllTrailers.Location = New System.Drawing.Point(25, 163) + Me.chkDeleteAllTrailers.Name = "chkDeleteAllTrailers" + Me.chkDeleteAllTrailers.Size = New System.Drawing.Size(152, 27) + Me.chkDeleteAllTrailers.TabIndex = 5 + Me.chkDeleteAllTrailers.Text = "Delete All Existing" + Me.chkDeleteAllTrailers.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkDeleteAllTrailers.UseVisualStyleBackColor = True + ' + 'chkOverwriteTrailer + ' + Me.chkOverwriteTrailer.AutoSize = True + Me.chkOverwriteTrailer.Enabled = False + Me.chkOverwriteTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOverwriteTrailer.Location = New System.Drawing.Point(25, 143) + Me.chkOverwriteTrailer.Name = "chkOverwriteTrailer" + Me.chkOverwriteTrailer.Size = New System.Drawing.Size(119, 17) + Me.chkOverwriteTrailer.TabIndex = 4 + Me.chkOverwriteTrailer.Text = "Overwrite Existing" + Me.chkOverwriteTrailer.UseVisualStyleBackColor = True + ' + 'chkNoDLTrailer + ' + Me.chkNoDLTrailer.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkNoDLTrailer.Enabled = False + Me.chkNoDLTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkNoDLTrailer.Location = New System.Drawing.Point(25, 72) + Me.chkNoDLTrailer.Name = "chkNoDLTrailer" + Me.chkNoDLTrailer.Size = New System.Drawing.Size(151, 30) + Me.chkNoDLTrailer.TabIndex = 2 + Me.chkNoDLTrailer.Text = "Only Get URLs When Scraping" + Me.chkNoDLTrailer.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkNoDLTrailer.UseVisualStyleBackColor = True + ' + 'chkSingleScrapeTrailer + ' + Me.chkSingleScrapeTrailer.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkSingleScrapeTrailer.Enabled = False + Me.chkSingleScrapeTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSingleScrapeTrailer.Location = New System.Drawing.Point(25, 106) + Me.chkSingleScrapeTrailer.Name = "chkSingleScrapeTrailer" + Me.chkSingleScrapeTrailer.Size = New System.Drawing.Size(154, 34) + Me.chkSingleScrapeTrailer.TabIndex = 3 + Me.chkSingleScrapeTrailer.Text = "Get During Single Scrape" + Me.chkSingleScrapeTrailer.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkSingleScrapeTrailer.UseVisualStyleBackColor = True + ' + 'chkUpdaterTrailer + ' + Me.chkUpdaterTrailer.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUpdaterTrailer.Enabled = False + Me.chkUpdaterTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUpdaterTrailer.Location = New System.Drawing.Point(25, 38) + Me.chkUpdaterTrailer.Name = "chkUpdaterTrailer" + Me.chkUpdaterTrailer.Size = New System.Drawing.Size(151, 33) + Me.chkUpdaterTrailer.TabIndex = 1 + Me.chkUpdaterTrailer.Text = "Get During Automated Scrapers" + Me.chkUpdaterTrailer.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkUpdaterTrailer.UseVisualStyleBackColor = True + ' + 'chkDownloadTrailer + ' + Me.chkDownloadTrailer.AutoSize = True + Me.chkDownloadTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDownloadTrailer.Location = New System.Drawing.Point(12, 16) + Me.chkDownloadTrailer.Name = "chkDownloadTrailer" + Me.chkDownloadTrailer.Size = New System.Drawing.Size(140, 17) + Me.chkDownloadTrailer.TabIndex = 0 + Me.chkDownloadTrailer.Text = "Enable Trailer Support" + Me.chkDownloadTrailer.UseVisualStyleBackColor = True + ' + 'GroupBox23 + ' + Me.GroupBox23.Controls.Add(Me.chkAutoETSize) + Me.GroupBox23.Controls.Add(Me.cbAutoETSize) + Me.GroupBox23.Controls.Add(Me.txtAutoThumbs) + Me.GroupBox23.Controls.Add(Me.GroupBox24) + Me.GroupBox23.Controls.Add(Me.chkAutoThumbs) + Me.GroupBox23.Controls.Add(Me.chkUseETasFA) + Me.GroupBox23.Controls.Add(Me.Label15) + Me.GroupBox23.Controls.Add(Me.chkNoSpoilers) + Me.GroupBox23.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox23.Location = New System.Drawing.Point(412, 3) + Me.GroupBox23.Name = "GroupBox23" + Me.GroupBox23.Size = New System.Drawing.Size(199, 358) + Me.GroupBox23.TabIndex = 4 + Me.GroupBox23.TabStop = False + Me.GroupBox23.Text = "Extrathumbs" + ' + 'chkAutoETSize + ' + Me.chkAutoETSize.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkAutoETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkAutoETSize.Location = New System.Drawing.Point(6, 236) + Me.chkAutoETSize.Name = "chkAutoETSize" + Me.chkAutoETSize.Size = New System.Drawing.Size(188, 43) + Me.chkAutoETSize.TabIndex = 6 + Me.chkAutoETSize.Text = "Download All Fanart Images of the Following Size as Extrathumbs:" + Me.chkAutoETSize.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkAutoETSize.UseVisualStyleBackColor = True + ' + 'cbAutoETSize + ' + Me.cbAutoETSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbAutoETSize.Enabled = False + Me.cbAutoETSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbAutoETSize.FormattingEnabled = True + Me.cbAutoETSize.Location = New System.Drawing.Point(26, 283) + Me.cbAutoETSize.Name = "cbAutoETSize" + Me.cbAutoETSize.Size = New System.Drawing.Size(148, 21) + Me.cbAutoETSize.TabIndex = 7 + ' + 'GroupBox24 + ' + Me.GroupBox24.Controls.Add(Me.txtETWidth) + Me.GroupBox24.Controls.Add(Me.txtETHeight) + Me.GroupBox24.Controls.Add(Me.chkETPadding) + Me.GroupBox24.Controls.Add(Me.Label28) + Me.GroupBox24.Controls.Add(Me.Label29) + Me.GroupBox24.Controls.Add(Me.rbETCustom) + Me.GroupBox24.Controls.Add(Me.rbETNative) + Me.GroupBox24.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox24.Location = New System.Drawing.Point(7, 120) + Me.GroupBox24.Name = "GroupBox24" + Me.GroupBox24.Size = New System.Drawing.Size(185, 104) + Me.GroupBox24.TabIndex = 5 + Me.GroupBox24.TabStop = False + Me.GroupBox24.Text = "Sizing (Extracted Frames)" + ' + 'txtETWidth + ' + Me.txtETWidth.Enabled = False + Me.txtETWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtETWidth.Location = New System.Drawing.Point(61, 57) + Me.txtETWidth.Name = "txtETWidth" + Me.txtETWidth.Size = New System.Drawing.Size(40, 22) + Me.txtETWidth.TabIndex = 3 + ' + 'txtETHeight + ' + Me.txtETHeight.Enabled = False + Me.txtETHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtETHeight.Location = New System.Drawing.Point(143, 57) + Me.txtETHeight.Name = "txtETHeight" + Me.txtETHeight.Size = New System.Drawing.Size(40, 22) + Me.txtETHeight.TabIndex = 5 + ' + 'chkETPadding + ' + Me.chkETPadding.AutoSize = True + Me.chkETPadding.Enabled = False + Me.chkETPadding.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkETPadding.Location = New System.Drawing.Point(21, 81) + Me.chkETPadding.Name = "chkETPadding" + Me.chkETPadding.Size = New System.Drawing.Size(69, 17) + Me.chkETPadding.TabIndex = 6 + Me.chkETPadding.Text = "Padding" + Me.chkETPadding.UseVisualStyleBackColor = True + ' + 'Label28 + ' + Me.Label28.AutoSize = True + Me.Label28.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label28.Location = New System.Drawing.Point(17, 61) + Me.Label28.Name = "Label28" + Me.Label28.Size = New System.Drawing.Size(42, 13) + Me.Label28.TabIndex = 2 + Me.Label28.Text = "Width:" + ' + 'Label29 + ' + Me.Label29.AutoSize = True + Me.Label29.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label29.Location = New System.Drawing.Point(98, 61) + Me.Label29.Name = "Label29" + Me.Label29.Size = New System.Drawing.Size(45, 13) + Me.Label29.TabIndex = 4 + Me.Label29.Text = "Height:" + ' + 'rbETCustom + ' + Me.rbETCustom.AutoSize = True + Me.rbETCustom.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.rbETCustom.Location = New System.Drawing.Point(7, 38) + Me.rbETCustom.Name = "rbETCustom" + Me.rbETCustom.Size = New System.Drawing.Size(109, 17) + Me.rbETCustom.TabIndex = 1 + Me.rbETCustom.TabStop = True + Me.rbETCustom.Text = "Use Custom Size" + Me.rbETCustom.UseVisualStyleBackColor = True + ' + 'rbETNative + ' + Me.rbETNative.AutoSize = True + Me.rbETNative.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.rbETNative.Location = New System.Drawing.Point(7, 20) + Me.rbETNative.Name = "rbETNative" + Me.rbETNative.Size = New System.Drawing.Size(138, 17) + Me.rbETNative.TabIndex = 0 + Me.rbETNative.TabStop = True + Me.rbETNative.Text = "Use Native Resolution" + Me.rbETNative.UseVisualStyleBackColor = True + ' + 'fbdBrowse + ' + Me.fbdBrowse.Description = "Select the folder where you wish to store your backdrops." + ' + 'pnlTVSources + ' + Me.pnlTVSources.BackColor = System.Drawing.Color.White + Me.pnlTVSources.Controls.Add(Me.TabControl2) + Me.pnlTVSources.Location = New System.Drawing.Point(1260, 560) + Me.pnlTVSources.Name = "pnlTVSources" + Me.pnlTVSources.Size = New System.Drawing.Size(617, 400) + Me.pnlTVSources.TabIndex = 11 + Me.pnlTVSources.Visible = False + ' + 'TabControl2 + ' + Me.TabControl2.Controls.Add(Me.TabPage3) + Me.TabControl2.Controls.Add(Me.TabPage4) + Me.TabControl2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.TabControl2.Location = New System.Drawing.Point(3, 4) + Me.TabControl2.Name = "TabControl2" + Me.TabControl2.SelectedIndex = 0 + Me.TabControl2.Size = New System.Drawing.Size(612, 392) + Me.TabControl2.TabIndex = 0 + ' + 'TabPage3 + ' + Me.TabPage3.Controls.Add(Me.btnTVShowFrodo) + Me.TabPage3.Controls.Add(Me.lvTVSources) + Me.TabPage3.Controls.Add(Me.gbMiscTVSourceOpts) + Me.TabPage3.Controls.Add(Me.btnAddTVSource) + Me.TabPage3.Controls.Add(Me.btnEditTVSource) + Me.TabPage3.Controls.Add(Me.btnRemTVSource) + Me.TabPage3.Controls.Add(Me.gbTVNaming) + Me.TabPage3.Location = New System.Drawing.Point(4, 22) + Me.TabPage3.Name = "TabPage3" + Me.TabPage3.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage3.Size = New System.Drawing.Size(604, 366) + Me.TabPage3.TabIndex = 0 + Me.TabPage3.Text = "General" + Me.TabPage3.UseVisualStyleBackColor = True + ' + 'btnTVShowFrodo + ' + Me.btnTVShowFrodo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnTVShowFrodo.Location = New System.Drawing.Point(22, 320) + Me.btnTVShowFrodo.Name = "btnTVShowFrodo" + Me.btnTVShowFrodo.Size = New System.Drawing.Size(116, 23) + Me.btnTVShowFrodo.TabIndex = 5 + Me.btnTVShowFrodo.Text = "XBMC Frodo" + Me.btnTVShowFrodo.UseVisualStyleBackColor = True + ' + 'lvTVSources + ' + Me.lvTVSources.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3}) + Me.lvTVSources.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lvTVSources.FullRowSelect = True + Me.lvTVSources.HideSelection = False + Me.lvTVSources.Location = New System.Drawing.Point(6, 4) + Me.lvTVSources.Name = "lvTVSources" + Me.lvTVSources.Size = New System.Drawing.Size(483, 105) + Me.lvTVSources.Sorting = System.Windows.Forms.SortOrder.Ascending + Me.lvTVSources.TabIndex = 0 + Me.lvTVSources.UseCompatibleStateImageBehavior = False + Me.lvTVSources.View = System.Windows.Forms.View.Details + ' + 'ColumnHeader1 + ' + Me.ColumnHeader1.Width = 0 + ' + 'ColumnHeader2 + ' + Me.ColumnHeader2.Text = "Name" + Me.ColumnHeader2.Width = 94 + ' + 'ColumnHeader3 + ' + Me.ColumnHeader3.Text = "Path" + Me.ColumnHeader3.Width = 368 + ' + 'gbMiscTVSourceOpts + ' + Me.gbMiscTVSourceOpts.Controls.Add(Me.Label6) + Me.gbMiscTVSourceOpts.Controls.Add(Me.txtTVSkipLessThan) + Me.gbMiscTVSourceOpts.Controls.Add(Me.Label7) + Me.gbMiscTVSourceOpts.Controls.Add(Me.chkTVScanOrderModify) + Me.gbMiscTVSourceOpts.Controls.Add(Me.chkTVIgnoreLastScan) + Me.gbMiscTVSourceOpts.Controls.Add(Me.chkTVCleanDB) + Me.gbMiscTVSourceOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbMiscTVSourceOpts.Location = New System.Drawing.Point(6, 110) + Me.gbMiscTVSourceOpts.Name = "gbMiscTVSourceOpts" + Me.gbMiscTVSourceOpts.Size = New System.Drawing.Size(151, 188) + Me.gbMiscTVSourceOpts.TabIndex = 4 + Me.gbMiscTVSourceOpts.TabStop = False + Me.gbMiscTVSourceOpts.Text = "Miscellaneous Options" + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label6.Location = New System.Drawing.Point(114, 39) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(24, 13) + Me.Label6.TabIndex = 2 + Me.Label6.Text = "MB" + ' + 'txtTVSkipLessThan + ' + Me.txtTVSkipLessThan.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTVSkipLessThan.Location = New System.Drawing.Point(11, 34) + Me.txtTVSkipLessThan.Name = "txtTVSkipLessThan" + Me.txtTVSkipLessThan.Size = New System.Drawing.Size(100, 22) + Me.txtTVSkipLessThan.TabIndex = 0 + ' + 'Label7 + ' + Me.Label7.AutoSize = True + Me.Label7.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label7.Location = New System.Drawing.Point(6, 18) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(122, 13) + Me.Label7.TabIndex = 1 + Me.Label7.Text = "Skip files smaller than:" + ' + 'chkTVScanOrderModify + ' + Me.chkTVScanOrderModify.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkTVScanOrderModify.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTVScanOrderModify.Location = New System.Drawing.Point(4, 110) + Me.chkTVScanOrderModify.Name = "chkTVScanOrderModify" + Me.chkTVScanOrderModify.Size = New System.Drawing.Size(142, 43) + Me.chkTVScanOrderModify.TabIndex = 4 + Me.chkTVScanOrderModify.Text = "Scan in order of last write time" + Me.chkTVScanOrderModify.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkTVScanOrderModify.UseVisualStyleBackColor = True + ' + 'chkTVIgnoreLastScan + ' + Me.chkTVIgnoreLastScan.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkTVIgnoreLastScan.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTVIgnoreLastScan.Location = New System.Drawing.Point(4, 68) + Me.chkTVIgnoreLastScan.Name = "chkTVIgnoreLastScan" + Me.chkTVIgnoreLastScan.Size = New System.Drawing.Size(142, 43) + Me.chkTVIgnoreLastScan.TabIndex = 3 + Me.chkTVIgnoreLastScan.Text = "Ignore last scan time when updating library" + Me.chkTVIgnoreLastScan.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkTVIgnoreLastScan.UseVisualStyleBackColor = True + ' + 'chkTVCleanDB + ' + Me.chkTVCleanDB.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkTVCleanDB.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTVCleanDB.Location = New System.Drawing.Point(4, 152) + Me.chkTVCleanDB.Name = "chkTVCleanDB" + Me.chkTVCleanDB.Size = New System.Drawing.Size(142, 43) + Me.chkTVCleanDB.TabIndex = 5 + Me.chkTVCleanDB.Text = "Clean database after updating library" + Me.chkTVCleanDB.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkTVCleanDB.UseVisualStyleBackColor = True + ' + 'btnAddTVSource + ' + Me.btnAddTVSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnAddTVSource.Image = CType(resources.GetObject("btnAddTVSource.Image"), System.Drawing.Image) + Me.btnAddTVSource.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnAddTVSource.Location = New System.Drawing.Point(494, 4) + Me.btnAddTVSource.Name = "btnAddTVSource" + Me.btnAddTVSource.Size = New System.Drawing.Size(104, 23) + Me.btnAddTVSource.TabIndex = 1 + Me.btnAddTVSource.Text = "Add Source" + Me.btnAddTVSource.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnAddTVSource.UseVisualStyleBackColor = True + ' + 'btnEditTVSource + ' + Me.btnEditTVSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnEditTVSource.Image = CType(resources.GetObject("btnEditTVSource.Image"), System.Drawing.Image) + Me.btnEditTVSource.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnEditTVSource.Location = New System.Drawing.Point(494, 33) + Me.btnEditTVSource.Name = "btnEditTVSource" + Me.btnEditTVSource.Size = New System.Drawing.Size(104, 23) + Me.btnEditTVSource.TabIndex = 2 + Me.btnEditTVSource.Text = "Edit Source" + Me.btnEditTVSource.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnEditTVSource.UseVisualStyleBackColor = True + ' + 'btnRemTVSource + ' + Me.btnRemTVSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnRemTVSource.Image = CType(resources.GetObject("btnRemTVSource.Image"), System.Drawing.Image) + Me.btnRemTVSource.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnRemTVSource.Location = New System.Drawing.Point(494, 86) + Me.btnRemTVSource.Name = "btnRemTVSource" + Me.btnRemTVSource.Size = New System.Drawing.Size(104, 23) + Me.btnRemTVSource.TabIndex = 3 + Me.btnRemTVSource.Text = "Remove" + Me.btnRemTVSource.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnRemTVSource.UseVisualStyleBackColor = True + ' + 'gbTVNaming + ' + Me.gbTVNaming.Controls.Add(Me.gbShowBanner) + Me.gbTVNaming.Controls.Add(Me.gbAllSeasonPoster) + Me.gbTVNaming.Controls.Add(Me.gbEpisodeFanart) + Me.gbTVNaming.Controls.Add(Me.gbEpisodePosters) + Me.gbTVNaming.Controls.Add(Me.gbSeasonFanart) + Me.gbTVNaming.Controls.Add(Me.gbSeasonPosters) + Me.gbTVNaming.Controls.Add(Me.gbShowFanart) + Me.gbTVNaming.Controls.Add(Me.gbShowPosters) + Me.gbTVNaming.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbTVNaming.Location = New System.Drawing.Point(161, 110) + Me.gbTVNaming.Name = "gbTVNaming" + Me.gbTVNaming.Size = New System.Drawing.Size(437, 253) + Me.gbTVNaming.TabIndex = 6 + Me.gbTVNaming.TabStop = False + Me.gbTVNaming.Text = "File Naming" + ' + 'gbShowBanner + ' + Me.gbShowBanner.Controls.Add(Me.chkShowBannerJPG) + Me.gbShowBanner.Location = New System.Drawing.Point(5, 204) + Me.gbShowBanner.Name = "gbShowBanner" + Me.gbShowBanner.Size = New System.Drawing.Size(133, 40) + Me.gbShowBanner.TabIndex = 2 + Me.gbShowBanner.TabStop = False + Me.gbShowBanner.Text = "Show Banner" + ' + 'chkShowBannerJPG + ' + Me.chkShowBannerJPG.AutoSize = True + Me.chkShowBannerJPG.Enabled = False + Me.chkShowBannerJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!) + Me.chkShowBannerJPG.Location = New System.Drawing.Point(6, 15) + Me.chkShowBannerJPG.Name = "chkShowBannerJPG" + Me.chkShowBannerJPG.Size = New System.Drawing.Size(83, 17) + Me.chkShowBannerJPG.TabIndex = 0 + Me.chkShowBannerJPG.Text = "banner.jpg" + Me.chkShowBannerJPG.UseVisualStyleBackColor = True + ' + 'gbAllSeasonPoster + ' + Me.gbAllSeasonPoster.Controls.Add(Me.chkSeasonAllPosterJPG) + Me.gbAllSeasonPoster.Controls.Add(Me.chkSeasonAllJPG) + Me.gbAllSeasonPoster.Controls.Add(Me.chkSeasonAllTBN) + Me.gbAllSeasonPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbAllSeasonPoster.Location = New System.Drawing.Point(292, 162) + Me.gbAllSeasonPoster.Name = "gbAllSeasonPoster" + Me.gbAllSeasonPoster.Size = New System.Drawing.Size(140, 81) + Me.gbAllSeasonPoster.TabIndex = 7 + Me.gbAllSeasonPoster.TabStop = False + Me.gbAllSeasonPoster.Text = "All Season Posters" + ' + 'chkSeasonAllPosterJPG + ' + Me.chkSeasonAllPosterJPG.AutoSize = True + Me.chkSeasonAllPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonAllPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkSeasonAllPosterJPG.Location = New System.Drawing.Point(6, 49) + Me.chkSeasonAllPosterJPG.Name = "chkSeasonAllPosterJPG" + Me.chkSeasonAllPosterJPG.Size = New System.Drawing.Size(135, 17) + Me.chkSeasonAllPosterJPG.TabIndex = 2 + Me.chkSeasonAllPosterJPG.Text = "season-all-poster.jpg" + Me.chkSeasonAllPosterJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonAllJPG + ' + Me.chkSeasonAllJPG.AutoSize = True + Me.chkSeasonAllJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonAllJPG.Location = New System.Drawing.Point(6, 34) + Me.chkSeasonAllJPG.Name = "chkSeasonAllJPG" + Me.chkSeasonAllJPG.Size = New System.Drawing.Size(98, 17) + Me.chkSeasonAllJPG.TabIndex = 1 + Me.chkSeasonAllJPG.Text = "season-all.jpg" + Me.chkSeasonAllJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonAllTBN + ' + Me.chkSeasonAllTBN.AutoSize = True + Me.chkSeasonAllTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonAllTBN.Location = New System.Drawing.Point(6, 18) + Me.chkSeasonAllTBN.Name = "chkSeasonAllTBN" + Me.chkSeasonAllTBN.Size = New System.Drawing.Size(99, 17) + Me.chkSeasonAllTBN.TabIndex = 0 + Me.chkSeasonAllTBN.Text = "season-all.tbn" + Me.chkSeasonAllTBN.UseVisualStyleBackColor = True + ' + 'gbEpisodeFanart + ' + Me.gbEpisodeFanart.Controls.Add(Me.chkEpisodeDotFanart) + Me.gbEpisodeFanart.Controls.Add(Me.chkEpisodeDashFanart) + Me.gbEpisodeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbEpisodeFanart.Location = New System.Drawing.Point(292, 97) + Me.gbEpisodeFanart.Name = "gbEpisodeFanart" + Me.gbEpisodeFanart.Size = New System.Drawing.Size(140, 52) + Me.gbEpisodeFanart.TabIndex = 6 + Me.gbEpisodeFanart.TabStop = False + Me.gbEpisodeFanart.Text = "Episode Fanart" + ' + 'chkEpisodeDotFanart + ' + Me.chkEpisodeDotFanart.AutoSize = True + Me.chkEpisodeDotFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeDotFanart.Location = New System.Drawing.Point(5, 31) + Me.chkEpisodeDotFanart.Name = "chkEpisodeDotFanart" + Me.chkEpisodeDotFanart.Size = New System.Drawing.Size(137, 17) + Me.chkEpisodeDotFanart.TabIndex = 1 + Me.chkEpisodeDotFanart.Text = ".fanart.jpg" + Me.chkEpisodeDotFanart.UseVisualStyleBackColor = True + ' + 'chkEpisodeDashFanart + ' + Me.chkEpisodeDashFanart.AutoSize = True + Me.chkEpisodeDashFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeDashFanart.Location = New System.Drawing.Point(5, 15) + Me.chkEpisodeDashFanart.Name = "chkEpisodeDashFanart" + Me.chkEpisodeDashFanart.Size = New System.Drawing.Size(138, 17) + Me.chkEpisodeDashFanart.TabIndex = 0 + Me.chkEpisodeDashFanart.Text = "-fanart.jpg" + Me.chkEpisodeDashFanart.UseVisualStyleBackColor = True + ' + 'gbEpisodePosters + ' + Me.gbEpisodePosters.Controls.Add(Me.chkEpisodeDashThumbJPG) + Me.gbEpisodePosters.Controls.Add(Me.chkEpisodeJPG) + Me.gbEpisodePosters.Controls.Add(Me.chkEpisodeTBN) + Me.gbEpisodePosters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbEpisodePosters.Location = New System.Drawing.Point(292, 15) + Me.gbEpisodePosters.Name = "gbEpisodePosters" + Me.gbEpisodePosters.Size = New System.Drawing.Size(140, 74) + Me.gbEpisodePosters.TabIndex = 5 + Me.gbEpisodePosters.TabStop = False + Me.gbEpisodePosters.Text = "Episode Posters" + ' + 'chkEpisodeDashThumbJPG + ' + Me.chkEpisodeDashThumbJPG.AutoSize = True + Me.chkEpisodeDashThumbJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeDashThumbJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkEpisodeDashThumbJPG.Location = New System.Drawing.Point(5, 49) + Me.chkEpisodeDashThumbJPG.Name = "chkEpisodeDashThumbJPG" + Me.chkEpisodeDashThumbJPG.Size = New System.Drawing.Size(141, 17) + Me.chkEpisodeDashThumbJPG.TabIndex = 2 + Me.chkEpisodeDashThumbJPG.Text = "-thumb.jpg" + Me.chkEpisodeDashThumbJPG.UseVisualStyleBackColor = True + ' + 'chkEpisodeJPG + ' + Me.chkEpisodeJPG.AutoSize = True + Me.chkEpisodeJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeJPG.Location = New System.Drawing.Point(5, 31) + Me.chkEpisodeJPG.Name = "chkEpisodeJPG" + Me.chkEpisodeJPG.Size = New System.Drawing.Size(103, 17) + Me.chkEpisodeJPG.TabIndex = 1 + Me.chkEpisodeJPG.Text = ".jpg" + Me.chkEpisodeJPG.UseVisualStyleBackColor = True + ' + 'chkEpisodeTBN + ' + Me.chkEpisodeTBN.AutoSize = True + Me.chkEpisodeTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeTBN.Location = New System.Drawing.Point(5, 15) + Me.chkEpisodeTBN.Name = "chkEpisodeTBN" + Me.chkEpisodeTBN.Size = New System.Drawing.Size(104, 17) + Me.chkEpisodeTBN.TabIndex = 0 + Me.chkEpisodeTBN.Text = ".tbn" + Me.chkEpisodeTBN.UseVisualStyleBackColor = True + ' + 'gbSeasonFanart + ' + Me.gbSeasonFanart.Controls.Add(Me.chkSeasonXXDashFanartJPG) + Me.gbSeasonFanart.Controls.Add(Me.chkSeasonDotFanart) + Me.gbSeasonFanart.Controls.Add(Me.chkSeasonDashFanart) + Me.gbSeasonFanart.Controls.Add(Me.chkSeasonFanartJPG) + Me.gbSeasonFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbSeasonFanart.Location = New System.Drawing.Point(143, 168) + Me.gbSeasonFanart.Name = "gbSeasonFanart" + Me.gbSeasonFanart.Size = New System.Drawing.Size(145, 81) + Me.gbSeasonFanart.TabIndex = 4 + Me.gbSeasonFanart.TabStop = False + Me.gbSeasonFanart.Text = "Season Fanart" + ' + 'chkSeasonXXDashFanartJPG + ' + Me.chkSeasonXXDashFanartJPG.AutoSize = True + Me.chkSeasonXXDashFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonXXDashFanartJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkSeasonXXDashFanartJPG.Location = New System.Drawing.Point(6, 62) + Me.chkSeasonXXDashFanartJPG.Name = "chkSeasonXXDashFanartJPG" + Me.chkSeasonXXDashFanartJPG.Size = New System.Drawing.Size(129, 17) + Me.chkSeasonXXDashFanartJPG.TabIndex = 3 + Me.chkSeasonXXDashFanartJPG.Text = "seasonXX-fanart.jpg" + Me.chkSeasonXXDashFanartJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonDotFanart + ' + Me.chkSeasonDotFanart.AutoSize = True + Me.chkSeasonDotFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonDotFanart.Location = New System.Drawing.Point(6, 47) + Me.chkSeasonDotFanart.Name = "chkSeasonDotFanart" + Me.chkSeasonDotFanart.Size = New System.Drawing.Size(132, 17) + Me.chkSeasonDotFanart.TabIndex = 2 + Me.chkSeasonDotFanart.Text = ".fanart.jpg" + Me.chkSeasonDotFanart.UseVisualStyleBackColor = True + ' + 'chkSeasonDashFanart + ' + Me.chkSeasonDashFanart.AutoSize = True + Me.chkSeasonDashFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonDashFanart.Location = New System.Drawing.Point(6, 31) + Me.chkSeasonDashFanart.Name = "chkSeasonDashFanart" + Me.chkSeasonDashFanart.Size = New System.Drawing.Size(133, 17) + Me.chkSeasonDashFanart.TabIndex = 1 + Me.chkSeasonDashFanart.Text = "-fanart.jpg" + Me.chkSeasonDashFanart.UseVisualStyleBackColor = True + ' + 'chkSeasonFanartJPG + ' + Me.chkSeasonFanartJPG.AutoSize = True + Me.chkSeasonFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonFanartJPG.Location = New System.Drawing.Point(6, 15) + Me.chkSeasonFanartJPG.Name = "chkSeasonFanartJPG" + Me.chkSeasonFanartJPG.Size = New System.Drawing.Size(77, 17) + Me.chkSeasonFanartJPG.TabIndex = 0 + Me.chkSeasonFanartJPG.Text = "fanart.jpg" + Me.chkSeasonFanartJPG.UseVisualStyleBackColor = True + ' + 'gbSeasonPosters + ' + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonXXDashPosterJPG) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonFolderJPG) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonNameJPG) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonNameTBN) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonPosterJPG) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonPosterTBN) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonXTBN) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonXXTBN) + Me.gbSeasonPosters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbSeasonPosters.Location = New System.Drawing.Point(143, 15) + Me.gbSeasonPosters.Name = "gbSeasonPosters" + Me.gbSeasonPosters.Size = New System.Drawing.Size(145, 152) + Me.gbSeasonPosters.TabIndex = 3 + Me.gbSeasonPosters.TabStop = False + Me.gbSeasonPosters.Text = "Season Posters" + ' + 'chkSeasonXXDashPosterJPG + ' + Me.chkSeasonXXDashPosterJPG.AutoSize = True + Me.chkSeasonXXDashPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonXXDashPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkSeasonXXDashPosterJPG.Location = New System.Drawing.Point(6, 48) + Me.chkSeasonXXDashPosterJPG.Name = "chkSeasonXXDashPosterJPG" + Me.chkSeasonXXDashPosterJPG.Size = New System.Drawing.Size(131, 17) + Me.chkSeasonXXDashPosterJPG.TabIndex = 2 + Me.chkSeasonXXDashPosterJPG.Text = "seasonXX-poster.jpg" + Me.chkSeasonXXDashPosterJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonFolderJPG + ' + Me.chkSeasonFolderJPG.AutoSize = True + Me.chkSeasonFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonFolderJPG.Location = New System.Drawing.Point(6, 129) + Me.chkSeasonFolderJPG.Name = "chkSeasonFolderJPG" + Me.chkSeasonFolderJPG.Size = New System.Drawing.Size(77, 17) + Me.chkSeasonFolderJPG.TabIndex = 7 + Me.chkSeasonFolderJPG.Text = "folder.jpg" + Me.chkSeasonFolderJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonNameJPG + ' + Me.chkSeasonNameJPG.AutoSize = True + Me.chkSeasonNameJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonNameJPG.Location = New System.Drawing.Point(6, 113) + Me.chkSeasonNameJPG.Name = "chkSeasonNameJPG" + Me.chkSeasonNameJPG.Size = New System.Drawing.Size(98, 17) + Me.chkSeasonNameJPG.TabIndex = 6 + Me.chkSeasonNameJPG.Text = ".jpg" + Me.chkSeasonNameJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonNameTBN + ' + Me.chkSeasonNameTBN.AutoSize = True + Me.chkSeasonNameTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonNameTBN.Location = New System.Drawing.Point(6, 97) + Me.chkSeasonNameTBN.Name = "chkSeasonNameTBN" + Me.chkSeasonNameTBN.Size = New System.Drawing.Size(99, 17) + Me.chkSeasonNameTBN.TabIndex = 5 + Me.chkSeasonNameTBN.Text = ".tbn" + Me.chkSeasonNameTBN.UseVisualStyleBackColor = True + ' + 'chkSeasonPosterJPG + ' + Me.chkSeasonPosterJPG.AutoSize = True + Me.chkSeasonPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonPosterJPG.Location = New System.Drawing.Point(6, 81) + Me.chkSeasonPosterJPG.Name = "chkSeasonPosterJPG" + Me.chkSeasonPosterJPG.Size = New System.Drawing.Size(79, 17) + Me.chkSeasonPosterJPG.TabIndex = 4 + Me.chkSeasonPosterJPG.Text = "poster.jpg" + Me.chkSeasonPosterJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonPosterTBN + ' + Me.chkSeasonPosterTBN.AutoSize = True + Me.chkSeasonPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonPosterTBN.Location = New System.Drawing.Point(6, 65) + Me.chkSeasonPosterTBN.Name = "chkSeasonPosterTBN" + Me.chkSeasonPosterTBN.Size = New System.Drawing.Size(80, 17) + Me.chkSeasonPosterTBN.TabIndex = 3 + Me.chkSeasonPosterTBN.Text = "poster.tbn" + Me.chkSeasonPosterTBN.UseVisualStyleBackColor = True + ' + 'chkSeasonXTBN + ' + Me.chkSeasonXTBN.AutoSize = True + Me.chkSeasonXTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonXTBN.Location = New System.Drawing.Point(6, 31) + Me.chkSeasonXTBN.Name = "chkSeasonXTBN" + Me.chkSeasonXTBN.Size = New System.Drawing.Size(89, 17) + Me.chkSeasonXTBN.TabIndex = 1 + Me.chkSeasonXTBN.Text = "seasonX.tbn" + Me.chkSeasonXTBN.UseVisualStyleBackColor = True + ' + 'chkSeasonXXTBN + ' + Me.chkSeasonXXTBN.AutoSize = True + Me.chkSeasonXXTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonXXTBN.Location = New System.Drawing.Point(6, 15) + Me.chkSeasonXXTBN.Name = "chkSeasonXXTBN" + Me.chkSeasonXXTBN.Size = New System.Drawing.Size(95, 17) + Me.chkSeasonXXTBN.TabIndex = 0 + Me.chkSeasonXXTBN.Text = "seasonXX.tbn" + Me.chkSeasonXXTBN.UseVisualStyleBackColor = True + ' + 'gbShowFanart + ' + Me.gbShowFanart.Controls.Add(Me.chkShowDotFanart) + Me.gbShowFanart.Controls.Add(Me.chkShowDashFanart) + Me.gbShowFanart.Controls.Add(Me.chkShowFanartJPG) + Me.gbShowFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbShowFanart.Location = New System.Drawing.Point(5, 120) + Me.gbShowFanart.Name = "gbShowFanart" + Me.gbShowFanart.Size = New System.Drawing.Size(133, 70) + Me.gbShowFanart.TabIndex = 1 + Me.gbShowFanart.TabStop = False + Me.gbShowFanart.Text = "Show Fanart" + ' + 'chkShowDotFanart + ' + Me.chkShowDotFanart.AutoSize = True + Me.chkShowDotFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowDotFanart.Location = New System.Drawing.Point(6, 51) + Me.chkShowDotFanart.Name = "chkShowDotFanart" + Me.chkShowDotFanart.Size = New System.Drawing.Size(124, 17) + Me.chkShowDotFanart.TabIndex = 2 + Me.chkShowDotFanart.Text = ".fanart.jpg" + Me.chkShowDotFanart.UseVisualStyleBackColor = True + ' + 'chkShowDashFanart + ' + Me.chkShowDashFanart.AutoSize = True + Me.chkShowDashFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowDashFanart.Location = New System.Drawing.Point(6, 35) + Me.chkShowDashFanart.Name = "chkShowDashFanart" + Me.chkShowDashFanart.Size = New System.Drawing.Size(125, 17) + Me.chkShowDashFanart.TabIndex = 1 + Me.chkShowDashFanart.Text = "-fanart.jpg" + Me.chkShowDashFanart.UseVisualStyleBackColor = True + ' + 'chkShowFanartJPG + ' + Me.chkShowFanartJPG.AutoSize = True + Me.chkShowFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowFanartJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkShowFanartJPG.Location = New System.Drawing.Point(6, 19) + Me.chkShowFanartJPG.Name = "chkShowFanartJPG" + Me.chkShowFanartJPG.Size = New System.Drawing.Size(77, 17) + Me.chkShowFanartJPG.TabIndex = 0 + Me.chkShowFanartJPG.Text = "fanart.jpg" + Me.chkShowFanartJPG.UseVisualStyleBackColor = True + ' + 'gbShowPosters + ' + Me.gbShowPosters.Controls.Add(Me.chkShowJPG) + Me.gbShowPosters.Controls.Add(Me.chkShowTBN) + Me.gbShowPosters.Controls.Add(Me.chkShowPosterJPG) + Me.gbShowPosters.Controls.Add(Me.chkShowPosterTBN) + Me.gbShowPosters.Controls.Add(Me.chkShowFolderJPG) + Me.gbShowPosters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbShowPosters.Location = New System.Drawing.Point(5, 15) + Me.gbShowPosters.Name = "gbShowPosters" + Me.gbShowPosters.Size = New System.Drawing.Size(133, 99) + Me.gbShowPosters.TabIndex = 0 + Me.gbShowPosters.TabStop = False + Me.gbShowPosters.Text = "Show Posters" + ' + 'chkShowJPG + ' + Me.chkShowJPG.AutoSize = True + Me.chkShowJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowJPG.Location = New System.Drawing.Point(6, 32) + Me.chkShowJPG.Name = "chkShowJPG" + Me.chkShowJPG.Size = New System.Drawing.Size(90, 17) + Me.chkShowJPG.TabIndex = 1 + Me.chkShowJPG.Text = ".jpg" + Me.chkShowJPG.UseVisualStyleBackColor = True + ' + 'chkShowTBN + ' + Me.chkShowTBN.AutoSize = True + Me.chkShowTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowTBN.Location = New System.Drawing.Point(6, 16) + Me.chkShowTBN.Name = "chkShowTBN" + Me.chkShowTBN.Size = New System.Drawing.Size(91, 17) + Me.chkShowTBN.TabIndex = 0 + Me.chkShowTBN.Text = ".tbn" + Me.chkShowTBN.UseVisualStyleBackColor = True + ' + 'chkShowPosterJPG + ' + Me.chkShowPosterJPG.AutoSize = True + Me.chkShowPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkShowPosterJPG.Location = New System.Drawing.Point(6, 64) + Me.chkShowPosterJPG.Name = "chkShowPosterJPG" + Me.chkShowPosterJPG.Size = New System.Drawing.Size(79, 17) + Me.chkShowPosterJPG.TabIndex = 3 + Me.chkShowPosterJPG.Text = "poster.jpg" + Me.chkShowPosterJPG.UseVisualStyleBackColor = True + ' + 'chkShowPosterTBN + ' + Me.chkShowPosterTBN.AutoSize = True + Me.chkShowPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowPosterTBN.Location = New System.Drawing.Point(6, 48) + Me.chkShowPosterTBN.Name = "chkShowPosterTBN" + Me.chkShowPosterTBN.Size = New System.Drawing.Size(80, 17) + Me.chkShowPosterTBN.TabIndex = 2 + Me.chkShowPosterTBN.Text = "poster.tbn" + Me.chkShowPosterTBN.UseVisualStyleBackColor = True + ' + 'chkShowFolderJPG + ' + Me.chkShowFolderJPG.AutoSize = True + Me.chkShowFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowFolderJPG.Location = New System.Drawing.Point(6, 80) + Me.chkShowFolderJPG.Name = "chkShowFolderJPG" + Me.chkShowFolderJPG.Size = New System.Drawing.Size(77, 17) + Me.chkShowFolderJPG.TabIndex = 4 + Me.chkShowFolderJPG.Text = "folder.jpg" + Me.chkShowFolderJPG.UseVisualStyleBackColor = True + ' + 'TabPage4 + ' + Me.TabPage4.Controls.Add(Me.btnGetTVProfiles) + Me.TabPage4.Controls.Add(Me.btnRegexDown) + Me.TabPage4.Controls.Add(Me.btnRegexUp) + Me.TabPage4.Controls.Add(Me.btnResetShowRegex) + Me.TabPage4.Controls.Add(Me.gbShowRegex) + Me.TabPage4.Controls.Add(Me.btnEditShowRegex) + Me.TabPage4.Controls.Add(Me.btnRemoveShowRegex) + Me.TabPage4.Controls.Add(Me.lvShowRegex) + Me.TabPage4.Location = New System.Drawing.Point(4, 22) + Me.TabPage4.Name = "TabPage4" + Me.TabPage4.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage4.Size = New System.Drawing.Size(604, 366) + Me.TabPage4.TabIndex = 1 + Me.TabPage4.Text = "Regex" + Me.TabPage4.UseVisualStyleBackColor = True + ' + 'btnGetTVProfiles + ' + Me.btnGetTVProfiles.Image = CType(resources.GetObject("btnGetTVProfiles.Image"), System.Drawing.Image) + Me.btnGetTVProfiles.Location = New System.Drawing.Point(550, 3) + Me.btnGetTVProfiles.Name = "btnGetTVProfiles" + Me.btnGetTVProfiles.Size = New System.Drawing.Size(23, 23) + Me.btnGetTVProfiles.TabIndex = 1 + Me.btnGetTVProfiles.UseVisualStyleBackColor = True + ' + 'btnRegexDown + ' + Me.btnRegexDown.Image = CType(resources.GetObject("btnRegexDown.Image"), System.Drawing.Image) + Me.btnRegexDown.Location = New System.Drawing.Point(304, 167) + Me.btnRegexDown.Name = "btnRegexDown" + Me.btnRegexDown.Size = New System.Drawing.Size(23, 23) + Me.btnRegexDown.TabIndex = 5 + Me.btnRegexDown.UseVisualStyleBackColor = True + ' + 'btnRegexUp + ' + Me.btnRegexUp.Image = CType(resources.GetObject("btnRegexUp.Image"), System.Drawing.Image) + Me.btnRegexUp.Location = New System.Drawing.Point(280, 167) + Me.btnRegexUp.Name = "btnRegexUp" + Me.btnRegexUp.Size = New System.Drawing.Size(23, 23) + Me.btnRegexUp.TabIndex = 4 + Me.btnRegexUp.UseVisualStyleBackColor = True + ' + 'btnResetShowRegex + ' + Me.btnResetShowRegex.Image = CType(resources.GetObject("btnResetShowRegex.Image"), System.Drawing.Image) + Me.btnResetShowRegex.Location = New System.Drawing.Point(576, 3) + Me.btnResetShowRegex.Name = "btnResetShowRegex" + Me.btnResetShowRegex.Size = New System.Drawing.Size(23, 23) + Me.btnResetShowRegex.TabIndex = 2 + Me.btnResetShowRegex.UseVisualStyleBackColor = True + ' + 'gbShowRegex + ' + Me.gbShowRegex.Controls.Add(Me.btnClearRegex) + Me.gbShowRegex.Controls.Add(Me.lblSeasonMatch) + Me.gbShowRegex.Controls.Add(Me.btnAddShowRegex) + Me.gbShowRegex.Controls.Add(Me.txtSeasonRegex) + Me.gbShowRegex.Controls.Add(Me.lblEpisodeRetrieve) + Me.gbShowRegex.Controls.Add(Me.cboSeasonRetrieve) + Me.gbShowRegex.Controls.Add(Me.lblSeasonRetrieve) + Me.gbShowRegex.Controls.Add(Me.txtEpRegex) + Me.gbShowRegex.Controls.Add(Me.lblEpisodeMatch) + Me.gbShowRegex.Controls.Add(Me.cboEpRetrieve) + Me.gbShowRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbShowRegex.Location = New System.Drawing.Point(6, 196) + Me.gbShowRegex.Name = "gbShowRegex" + Me.gbShowRegex.Size = New System.Drawing.Size(592, 148) + Me.gbShowRegex.TabIndex = 7 + Me.gbShowRegex.TabStop = False + Me.gbShowRegex.Text = "Show Match Regex" + ' + 'btnClearRegex + ' + Me.btnClearRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnClearRegex.Image = CType(resources.GetObject("btnClearRegex.Image"), System.Drawing.Image) + Me.btnClearRegex.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnClearRegex.Location = New System.Drawing.Point(10, 116) + Me.btnClearRegex.Name = "btnClearRegex" + Me.btnClearRegex.Size = New System.Drawing.Size(104, 23) + Me.btnClearRegex.TabIndex = 8 + Me.btnClearRegex.Text = "Clear" + Me.btnClearRegex.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnClearRegex.UseVisualStyleBackColor = True + ' + 'lblSeasonMatch + ' + Me.lblSeasonMatch.AutoSize = True + Me.lblSeasonMatch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSeasonMatch.Location = New System.Drawing.Point(8, 25) + Me.lblSeasonMatch.Name = "lblSeasonMatch" + Me.lblSeasonMatch.Size = New System.Drawing.Size(116, 13) + Me.lblSeasonMatch.TabIndex = 0 + Me.lblSeasonMatch.Text = "Season Match Regex:" + ' + 'btnAddShowRegex + ' + Me.btnAddShowRegex.Enabled = False + Me.btnAddShowRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnAddShowRegex.Image = CType(resources.GetObject("btnAddShowRegex.Image"), System.Drawing.Image) + Me.btnAddShowRegex.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnAddShowRegex.Location = New System.Drawing.Point(482, 117) + Me.btnAddShowRegex.Name = "btnAddShowRegex" + Me.btnAddShowRegex.Size = New System.Drawing.Size(104, 23) + Me.btnAddShowRegex.TabIndex = 9 + Me.btnAddShowRegex.Text = "Add Regex" + Me.btnAddShowRegex.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnAddShowRegex.UseVisualStyleBackColor = True + ' + 'txtSeasonRegex + ' + Me.txtSeasonRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtSeasonRegex.Location = New System.Drawing.Point(10, 40) + Me.txtSeasonRegex.Name = "txtSeasonRegex" + Me.txtSeasonRegex.Size = New System.Drawing.Size(417, 22) + Me.txtSeasonRegex.TabIndex = 1 + ' + 'lblEpisodeRetrieve + ' + Me.lblEpisodeRetrieve.AutoSize = True + Me.lblEpisodeRetrieve.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblEpisodeRetrieve.Location = New System.Drawing.Point(441, 69) + Me.lblEpisodeRetrieve.Name = "lblEpisodeRetrieve" + Me.lblEpisodeRetrieve.Size = New System.Drawing.Size(54, 13) + Me.lblEpisodeRetrieve.TabIndex = 6 + Me.lblEpisodeRetrieve.Text = "Apply To:" + ' + 'cboSeasonRetrieve + ' + Me.cboSeasonRetrieve.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cboSeasonRetrieve.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cboSeasonRetrieve.FormattingEnabled = True + Me.cboSeasonRetrieve.Items.AddRange(New Object() {"Folder Name", "File Name"}) + Me.cboSeasonRetrieve.Location = New System.Drawing.Point(443, 40) + Me.cboSeasonRetrieve.Name = "cboSeasonRetrieve" + Me.cboSeasonRetrieve.Size = New System.Drawing.Size(135, 21) + Me.cboSeasonRetrieve.TabIndex = 3 + ' + 'lblSeasonRetrieve + ' + Me.lblSeasonRetrieve.AutoSize = True + Me.lblSeasonRetrieve.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSeasonRetrieve.Location = New System.Drawing.Point(441, 25) + Me.lblSeasonRetrieve.Name = "lblSeasonRetrieve" + Me.lblSeasonRetrieve.Size = New System.Drawing.Size(54, 13) + Me.lblSeasonRetrieve.TabIndex = 2 + Me.lblSeasonRetrieve.Text = "Apply To:" + ' + 'txtEpRegex + ' + Me.txtEpRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtEpRegex.Location = New System.Drawing.Point(10, 84) + Me.txtEpRegex.Name = "txtEpRegex" + Me.txtEpRegex.Size = New System.Drawing.Size(417, 22) + Me.txtEpRegex.TabIndex = 5 + ' + 'lblEpisodeMatch + ' + Me.lblEpisodeMatch.AutoSize = True + Me.lblEpisodeMatch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblEpisodeMatch.Location = New System.Drawing.Point(8, 69) + Me.lblEpisodeMatch.Name = "lblEpisodeMatch" + Me.lblEpisodeMatch.Size = New System.Drawing.Size(120, 13) + Me.lblEpisodeMatch.TabIndex = 4 + Me.lblEpisodeMatch.Text = "Episode Match Regex:" + ' + 'cboEpRetrieve + ' + Me.cboEpRetrieve.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cboEpRetrieve.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cboEpRetrieve.FormattingEnabled = True + Me.cboEpRetrieve.Items.AddRange(New Object() {"Folder Name", "File Name", "Season Result"}) + Me.cboEpRetrieve.Location = New System.Drawing.Point(443, 84) + Me.cboEpRetrieve.Name = "cboEpRetrieve" + Me.cboEpRetrieve.Size = New System.Drawing.Size(135, 21) + Me.cboEpRetrieve.TabIndex = 7 + ' + 'btnEditShowRegex + ' + Me.btnEditShowRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnEditShowRegex.Image = CType(resources.GetObject("btnEditShowRegex.Image"), System.Drawing.Image) + Me.btnEditShowRegex.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnEditShowRegex.Location = New System.Drawing.Point(1, 167) + Me.btnEditShowRegex.Name = "btnEditShowRegex" + Me.btnEditShowRegex.Size = New System.Drawing.Size(104, 23) + Me.btnEditShowRegex.TabIndex = 3 + Me.btnEditShowRegex.Text = "Edit Regex" + Me.btnEditShowRegex.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnEditShowRegex.UseVisualStyleBackColor = True + ' + 'btnRemoveShowRegex + ' + Me.btnRemoveShowRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnRemoveShowRegex.Image = CType(resources.GetObject("btnRemoveShowRegex.Image"), System.Drawing.Image) + Me.btnRemoveShowRegex.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnRemoveShowRegex.Location = New System.Drawing.Point(494, 167) + Me.btnRemoveShowRegex.Name = "btnRemoveShowRegex" + Me.btnRemoveShowRegex.Size = New System.Drawing.Size(104, 23) + Me.btnRemoveShowRegex.TabIndex = 6 + Me.btnRemoveShowRegex.Text = "Remove" + Me.btnRemoveShowRegex.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnRemoveShowRegex.UseVisualStyleBackColor = True + ' + 'lvShowRegex + ' + Me.lvShowRegex.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colRegID, Me.colSeason, Me.colSeasonApply, Me.colEpisode, Me.colEpApply}) + Me.lvShowRegex.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lvShowRegex.FullRowSelect = True + Me.lvShowRegex.HideSelection = False + Me.lvShowRegex.Location = New System.Drawing.Point(0, 28) + Me.lvShowRegex.Name = "lvShowRegex" + Me.lvShowRegex.Size = New System.Drawing.Size(598, 135) + Me.lvShowRegex.Sorting = System.Windows.Forms.SortOrder.Ascending + Me.lvShowRegex.TabIndex = 0 + Me.lvShowRegex.UseCompatibleStateImageBehavior = False + Me.lvShowRegex.View = System.Windows.Forms.View.Details + ' + 'colRegID + ' + Me.colRegID.DisplayIndex = 4 + Me.colRegID.Width = 0 + ' + 'colSeason + ' + Me.colSeason.DisplayIndex = 0 + Me.colSeason.Text = "Season Regex" + Me.colSeason.Width = 224 + ' + 'colSeasonApply + ' + Me.colSeasonApply.DisplayIndex = 1 + Me.colSeasonApply.Text = "Apply To" + Me.colSeasonApply.Width = 70 + ' + 'colEpisode + ' + Me.colEpisode.DisplayIndex = 2 + Me.colEpisode.Text = "Episode Regex" + Me.colEpisode.Width = 219 + ' + 'colEpApply + ' + Me.colEpApply.DisplayIndex = 3 + Me.colEpApply.Text = "Apply To" + Me.colEpApply.Width = 70 + ' + 'pnlShows + ' + Me.pnlShows.BackColor = System.Drawing.Color.White + Me.pnlShows.Controls.Add(Me.gbTVListOptions) + Me.pnlShows.Controls.Add(Me.gbTVMisc) + Me.pnlShows.Controls.Add(Me.gbEpFilter) + Me.pnlShows.Controls.Add(Me.gbShowFilter) + Me.pnlShows.Location = New System.Drawing.Point(850, 750) + Me.pnlShows.Name = "pnlShows" + Me.pnlShows.Size = New System.Drawing.Size(617, 400) + Me.pnlShows.TabIndex = 20 + Me.pnlShows.Visible = False + ' + 'gbTVListOptions + ' + Me.gbTVListOptions.Controls.Add(Me.chkDisplayMissingEpisodes) + Me.gbTVListOptions.Controls.Add(Me.gbEpisodeListOptions) + Me.gbTVListOptions.Controls.Add(Me.gbSeasonListOptions) + Me.gbTVListOptions.Controls.Add(Me.gbShowListOptions) + Me.gbTVListOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbTVListOptions.Location = New System.Drawing.Point(6, 143) + Me.gbTVListOptions.Name = "gbTVListOptions" + Me.gbTVListOptions.Size = New System.Drawing.Size(219, 252) + Me.gbTVListOptions.TabIndex = 1 + Me.gbTVListOptions.TabStop = False + Me.gbTVListOptions.Text = "Media List Options" + ' + 'chkDisplayMissingEpisodes + ' + Me.chkDisplayMissingEpisodes.AutoSize = True + Me.chkDisplayMissingEpisodes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDisplayMissingEpisodes.Location = New System.Drawing.Point(8, 231) + Me.chkDisplayMissingEpisodes.Name = "chkDisplayMissingEpisodes" + Me.chkDisplayMissingEpisodes.Size = New System.Drawing.Size(155, 17) + Me.chkDisplayMissingEpisodes.TabIndex = 3 + Me.chkDisplayMissingEpisodes.Text = "Display Missing Episodes" + Me.chkDisplayMissingEpisodes.UseVisualStyleBackColor = True + ' + 'gbEpisodeListOptions + ' + Me.gbEpisodeListOptions.Controls.Add(Me.chkEpisodeWatchedCol) + Me.gbEpisodeListOptions.Controls.Add(Me.chkEpisodeNfoCol) + Me.gbEpisodeListOptions.Controls.Add(Me.chkEpisodeFanartCol) + Me.gbEpisodeListOptions.Controls.Add(Me.chkEpisodePosterCol) + Me.gbEpisodeListOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbEpisodeListOptions.Location = New System.Drawing.Point(10, 143) + Me.gbEpisodeListOptions.Name = "gbEpisodeListOptions" + Me.gbEpisodeListOptions.Size = New System.Drawing.Size(199, 86) + Me.gbEpisodeListOptions.TabIndex = 2 + Me.gbEpisodeListOptions.TabStop = False + Me.gbEpisodeListOptions.Text = "Episodes" + ' + 'chkEpisodeWatchedCol + ' + Me.chkEpisodeWatchedCol.AutoSize = True + Me.chkEpisodeWatchedCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeWatchedCol.Location = New System.Drawing.Point(7, 64) + Me.chkEpisodeWatchedCol.Name = "chkEpisodeWatchedCol" + Me.chkEpisodeWatchedCol.Size = New System.Drawing.Size(142, 17) + Me.chkEpisodeWatchedCol.TabIndex = 3 + Me.chkEpisodeWatchedCol.Text = "Hide Watched Column" + Me.chkEpisodeWatchedCol.UseVisualStyleBackColor = True + ' + 'chkEpisodeNfoCol + ' + Me.chkEpisodeNfoCol.AutoSize = True + Me.chkEpisodeNfoCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeNfoCol.Location = New System.Drawing.Point(7, 48) + Me.chkEpisodeNfoCol.Name = "chkEpisodeNfoCol" + Me.chkEpisodeNfoCol.Size = New System.Drawing.Size(117, 17) + Me.chkEpisodeNfoCol.TabIndex = 2 + Me.chkEpisodeNfoCol.Text = "Hide Info Column" + Me.chkEpisodeNfoCol.UseVisualStyleBackColor = True + ' + 'chkEpisodeFanartCol + ' + Me.chkEpisodeFanartCol.AutoSize = True + Me.chkEpisodeFanartCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeFanartCol.Location = New System.Drawing.Point(7, 32) + Me.chkEpisodeFanartCol.Name = "chkEpisodeFanartCol" + Me.chkEpisodeFanartCol.Size = New System.Drawing.Size(129, 17) + Me.chkEpisodeFanartCol.TabIndex = 1 + Me.chkEpisodeFanartCol.Text = "Hide Fanart Column" + Me.chkEpisodeFanartCol.UseVisualStyleBackColor = True + ' + 'chkEpisodePosterCol + ' + Me.chkEpisodePosterCol.AutoSize = True + Me.chkEpisodePosterCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodePosterCol.Location = New System.Drawing.Point(7, 16) + Me.chkEpisodePosterCol.Name = "chkEpisodePosterCol" + Me.chkEpisodePosterCol.Size = New System.Drawing.Size(128, 17) + Me.chkEpisodePosterCol.TabIndex = 0 + Me.chkEpisodePosterCol.Text = "Hide Poster Column" + Me.chkEpisodePosterCol.UseVisualStyleBackColor = True + ' + 'gbSeasonListOptions + ' + Me.gbSeasonListOptions.Controls.Add(Me.chkSeasonFanartCol) + Me.gbSeasonListOptions.Controls.Add(Me.chkSeasonPosterCol) + Me.gbSeasonListOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbSeasonListOptions.Location = New System.Drawing.Point(10, 87) + Me.gbSeasonListOptions.Name = "gbSeasonListOptions" + Me.gbSeasonListOptions.Size = New System.Drawing.Size(199, 52) + Me.gbSeasonListOptions.TabIndex = 1 + Me.gbSeasonListOptions.TabStop = False + Me.gbSeasonListOptions.Text = "Seasons" + ' + 'chkSeasonFanartCol + ' + Me.chkSeasonFanartCol.AutoSize = True + Me.chkSeasonFanartCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonFanartCol.Location = New System.Drawing.Point(7, 32) + Me.chkSeasonFanartCol.Name = "chkSeasonFanartCol" + Me.chkSeasonFanartCol.Size = New System.Drawing.Size(129, 17) + Me.chkSeasonFanartCol.TabIndex = 1 + Me.chkSeasonFanartCol.Text = "Hide Fanart Column" + Me.chkSeasonFanartCol.UseVisualStyleBackColor = True + ' + 'chkSeasonPosterCol + ' + Me.chkSeasonPosterCol.AutoSize = True + Me.chkSeasonPosterCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonPosterCol.Location = New System.Drawing.Point(7, 16) + Me.chkSeasonPosterCol.Name = "chkSeasonPosterCol" + Me.chkSeasonPosterCol.Size = New System.Drawing.Size(128, 17) + Me.chkSeasonPosterCol.TabIndex = 0 + Me.chkSeasonPosterCol.Text = "Hide Poster Column" + Me.chkSeasonPosterCol.UseVisualStyleBackColor = True + ' + 'gbShowListOptions + ' + Me.gbShowListOptions.Controls.Add(Me.chkShowNfoCol) + Me.gbShowListOptions.Controls.Add(Me.chkShowFanartCol) + Me.gbShowListOptions.Controls.Add(Me.chkShowPosterCol) + Me.gbShowListOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbShowListOptions.Location = New System.Drawing.Point(9, 16) + Me.gbShowListOptions.Name = "gbShowListOptions" + Me.gbShowListOptions.Size = New System.Drawing.Size(199, 68) + Me.gbShowListOptions.TabIndex = 0 + Me.gbShowListOptions.TabStop = False + Me.gbShowListOptions.Text = "Shows" + ' + 'chkShowNfoCol + ' + Me.chkShowNfoCol.AutoSize = True + Me.chkShowNfoCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowNfoCol.Location = New System.Drawing.Point(7, 48) + Me.chkShowNfoCol.Name = "chkShowNfoCol" + Me.chkShowNfoCol.Size = New System.Drawing.Size(117, 17) + Me.chkShowNfoCol.TabIndex = 2 + Me.chkShowNfoCol.Text = "Hide Info Column" + Me.chkShowNfoCol.UseVisualStyleBackColor = True + ' + 'chkShowFanartCol + ' + Me.chkShowFanartCol.AutoSize = True + Me.chkShowFanartCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowFanartCol.Location = New System.Drawing.Point(7, 32) + Me.chkShowFanartCol.Name = "chkShowFanartCol" + Me.chkShowFanartCol.Size = New System.Drawing.Size(129, 17) + Me.chkShowFanartCol.TabIndex = 1 + Me.chkShowFanartCol.Text = "Hide Fanart Column" + Me.chkShowFanartCol.UseVisualStyleBackColor = True + ' + 'chkShowPosterCol + ' + Me.chkShowPosterCol.AutoSize = True + Me.chkShowPosterCol.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowPosterCol.Location = New System.Drawing.Point(7, 16) + Me.chkShowPosterCol.Name = "chkShowPosterCol" + Me.chkShowPosterCol.Size = New System.Drawing.Size(128, 17) + Me.chkShowPosterCol.TabIndex = 0 + Me.chkShowPosterCol.Text = "Hide Poster Column" + Me.chkShowPosterCol.UseVisualStyleBackColor = True + ' + 'gbTVMisc + ' + Me.gbTVMisc.Controls.Add(Me.chkMarkNewShows) + Me.gbTVMisc.Controls.Add(Me.chkMarkNewEpisodes) + Me.gbTVMisc.Controls.Add(Me.chkDisplayAllSeason) + Me.gbTVMisc.Controls.Add(Me.lblRatingRegion) + Me.gbTVMisc.Controls.Add(Me.cbRatingRegion) + Me.gbTVMisc.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbTVMisc.Location = New System.Drawing.Point(6, 7) + Me.gbTVMisc.Name = "gbTVMisc" + Me.gbTVMisc.Size = New System.Drawing.Size(219, 130) + Me.gbTVMisc.TabIndex = 0 + Me.gbTVMisc.TabStop = False + Me.gbTVMisc.Text = "Miscellaneous" + ' + 'chkMarkNewShows + ' + Me.chkMarkNewShows.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMarkNewShows.Location = New System.Drawing.Point(8, 90) + Me.chkMarkNewShows.Name = "chkMarkNewShows" + Me.chkMarkNewShows.Size = New System.Drawing.Size(204, 17) + Me.chkMarkNewShows.TabIndex = 3 + Me.chkMarkNewShows.Text = "Mark New Shows" + Me.chkMarkNewShows.UseVisualStyleBackColor = True + ' + 'chkMarkNewEpisodes + ' + Me.chkMarkNewEpisodes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMarkNewEpisodes.Location = New System.Drawing.Point(8, 113) + Me.chkMarkNewEpisodes.Name = "chkMarkNewEpisodes" + Me.chkMarkNewEpisodes.Size = New System.Drawing.Size(204, 17) + Me.chkMarkNewEpisodes.TabIndex = 4 + Me.chkMarkNewEpisodes.Text = "Mark New Episodes" + Me.chkMarkNewEpisodes.UseVisualStyleBackColor = True + ' + 'chkDisplayAllSeason + ' + Me.chkDisplayAllSeason.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDisplayAllSeason.Location = New System.Drawing.Point(8, 67) + Me.chkDisplayAllSeason.Name = "chkDisplayAllSeason" + Me.chkDisplayAllSeason.Size = New System.Drawing.Size(204, 17) + Me.chkDisplayAllSeason.TabIndex = 2 + Me.chkDisplayAllSeason.Text = "Display All Season Poster" + Me.chkDisplayAllSeason.UseVisualStyleBackColor = True + ' + 'lblRatingRegion + ' + Me.lblRatingRegion.AutoSize = True + Me.lblRatingRegion.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblRatingRegion.Location = New System.Drawing.Point(8, 21) + Me.lblRatingRegion.Name = "lblRatingRegion" + Me.lblRatingRegion.Size = New System.Drawing.Size(99, 13) + Me.lblRatingRegion.TabIndex = 0 + Me.lblRatingRegion.Text = "TV Rating Region:" + ' + 'cbRatingRegion + ' + Me.cbRatingRegion.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbRatingRegion.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbRatingRegion.FormattingEnabled = True + Me.cbRatingRegion.Location = New System.Drawing.Point(8, 36) + Me.cbRatingRegion.Name = "cbRatingRegion" + Me.cbRatingRegion.Size = New System.Drawing.Size(163, 21) + Me.cbRatingRegion.TabIndex = 1 + ' + 'gbEpFilter + ' + Me.gbEpFilter.Controls.Add(Me.btnResetEpFilter) + Me.gbEpFilter.Controls.Add(Me.chkNoFilterEpisode) + Me.gbEpFilter.Controls.Add(Me.btnEpFilterDown) + Me.gbEpFilter.Controls.Add(Me.btnEpFilterUp) + Me.gbEpFilter.Controls.Add(Me.chkEpProperCase) + Me.gbEpFilter.Controls.Add(Me.btnRemoveEpFilter) + Me.gbEpFilter.Controls.Add(Me.btnAddEpFilter) + Me.gbEpFilter.Controls.Add(Me.txtEpFilter) + Me.gbEpFilter.Controls.Add(Me.lstEpFilters) + Me.gbEpFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbEpFilter.Location = New System.Drawing.Point(229, 185) + Me.gbEpFilter.Name = "gbEpFilter" + Me.gbEpFilter.Size = New System.Drawing.Size(382, 205) + Me.gbEpFilter.TabIndex = 3 + Me.gbEpFilter.TabStop = False + Me.gbEpFilter.Text = "Episode Folder/File Name Filters" + ' + 'btnResetEpFilter + ' + Me.btnResetEpFilter.Image = CType(resources.GetObject("btnResetEpFilter.Image"), System.Drawing.Image) + Me.btnResetEpFilter.Location = New System.Drawing.Point(354, 38) + Me.btnResetEpFilter.Name = "btnResetEpFilter" + Me.btnResetEpFilter.Size = New System.Drawing.Size(23, 23) + Me.btnResetEpFilter.TabIndex = 3 + Me.btnResetEpFilter.UseVisualStyleBackColor = True + ' + 'chkNoFilterEpisode + ' + Me.chkNoFilterEpisode.CheckAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkNoFilterEpisode.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkNoFilterEpisode.Location = New System.Drawing.Point(6, 15) + Me.chkNoFilterEpisode.Name = "chkNoFilterEpisode" + Me.chkNoFilterEpisode.Size = New System.Drawing.Size(371, 21) + Me.chkNoFilterEpisode.TabIndex = 0 + Me.chkNoFilterEpisode.Text = "Build Episode Title Instead of Filtering" + Me.chkNoFilterEpisode.TextAlign = System.Drawing.ContentAlignment.TopLeft + Me.chkNoFilterEpisode.UseVisualStyleBackColor = True + ' + 'btnEpFilterDown + ' + Me.btnEpFilterDown.Image = CType(resources.GetObject("btnEpFilterDown.Image"), System.Drawing.Image) + Me.btnEpFilterDown.Location = New System.Drawing.Point(320, 176) + Me.btnEpFilterDown.Name = "btnEpFilterDown" + Me.btnEpFilterDown.Size = New System.Drawing.Size(23, 23) + Me.btnEpFilterDown.TabIndex = 7 + Me.btnEpFilterDown.UseVisualStyleBackColor = True + ' + 'btnEpFilterUp + ' + Me.btnEpFilterUp.Image = CType(resources.GetObject("btnEpFilterUp.Image"), System.Drawing.Image) + Me.btnEpFilterUp.Location = New System.Drawing.Point(296, 176) + Me.btnEpFilterUp.Name = "btnEpFilterUp" + Me.btnEpFilterUp.Size = New System.Drawing.Size(23, 23) + Me.btnEpFilterUp.TabIndex = 6 + Me.btnEpFilterUp.UseVisualStyleBackColor = True + ' + 'chkEpProperCase + ' + Me.chkEpProperCase.AutoSize = True + Me.chkEpProperCase.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpProperCase.Location = New System.Drawing.Point(6, 47) + Me.chkEpProperCase.Name = "chkEpProperCase" + Me.chkEpProperCase.Size = New System.Drawing.Size(181, 17) + Me.chkEpProperCase.TabIndex = 1 + Me.chkEpProperCase.Text = "Convert Names to Proper Case" + Me.chkEpProperCase.UseVisualStyleBackColor = True + ' + 'btnRemoveEpFilter + ' + Me.btnRemoveEpFilter.Image = CType(resources.GetObject("btnRemoveEpFilter.Image"), System.Drawing.Image) + Me.btnRemoveEpFilter.Location = New System.Drawing.Point(354, 176) + Me.btnRemoveEpFilter.Name = "btnRemoveEpFilter" + Me.btnRemoveEpFilter.Size = New System.Drawing.Size(23, 23) + Me.btnRemoveEpFilter.TabIndex = 8 + Me.btnRemoveEpFilter.UseVisualStyleBackColor = True + ' + 'btnAddEpFilter + ' + Me.btnAddEpFilter.Image = CType(resources.GetObject("btnAddEpFilter.Image"), System.Drawing.Image) + Me.btnAddEpFilter.Location = New System.Drawing.Point(260, 176) + Me.btnAddEpFilter.Name = "btnAddEpFilter" + Me.btnAddEpFilter.Size = New System.Drawing.Size(23, 23) + Me.btnAddEpFilter.TabIndex = 5 + Me.btnAddEpFilter.UseVisualStyleBackColor = True + ' + 'txtEpFilter + ' + Me.txtEpFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtEpFilter.Location = New System.Drawing.Point(6, 177) + Me.txtEpFilter.Name = "txtEpFilter" + Me.txtEpFilter.Size = New System.Drawing.Size(252, 22) + Me.txtEpFilter.TabIndex = 4 + ' + 'lstEpFilters + ' + Me.lstEpFilters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstEpFilters.FormattingEnabled = True + Me.lstEpFilters.Location = New System.Drawing.Point(6, 64) + Me.lstEpFilters.Name = "lstEpFilters" + Me.lstEpFilters.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.lstEpFilters.Size = New System.Drawing.Size(371, 95) + Me.lstEpFilters.TabIndex = 2 + ' + 'gbShowFilter + ' + Me.gbShowFilter.Controls.Add(Me.btnResetShowFilters) + Me.gbShowFilter.Controls.Add(Me.btnShowFilterDown) + Me.gbShowFilter.Controls.Add(Me.btnShowFilterUp) + Me.gbShowFilter.Controls.Add(Me.chkShowProperCase) + Me.gbShowFilter.Controls.Add(Me.btnRemoveShowFilter) + Me.gbShowFilter.Controls.Add(Me.btnAddShowFilter) + Me.gbShowFilter.Controls.Add(Me.txtShowFilter) + Me.gbShowFilter.Controls.Add(Me.lstShowFilters) + Me.gbShowFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbShowFilter.Location = New System.Drawing.Point(229, 7) + Me.gbShowFilter.Name = "gbShowFilter" + Me.gbShowFilter.Size = New System.Drawing.Size(382, 175) + Me.gbShowFilter.TabIndex = 2 + Me.gbShowFilter.TabStop = False + Me.gbShowFilter.Text = "Show Folder/File Name Filters" + ' + 'btnResetShowFilters + ' + Me.btnResetShowFilters.Image = CType(resources.GetObject("btnResetShowFilters.Image"), System.Drawing.Image) + Me.btnResetShowFilters.Location = New System.Drawing.Point(354, 9) + Me.btnResetShowFilters.Name = "btnResetShowFilters" + Me.btnResetShowFilters.Size = New System.Drawing.Size(23, 23) + Me.btnResetShowFilters.TabIndex = 2 + Me.btnResetShowFilters.UseVisualStyleBackColor = True + ' + 'btnShowFilterDown + ' + Me.btnShowFilterDown.Image = CType(resources.GetObject("btnShowFilterDown.Image"), System.Drawing.Image) + Me.btnShowFilterDown.Location = New System.Drawing.Point(320, 146) + Me.btnShowFilterDown.Name = "btnShowFilterDown" + Me.btnShowFilterDown.Size = New System.Drawing.Size(23, 23) + Me.btnShowFilterDown.TabIndex = 6 + Me.btnShowFilterDown.UseVisualStyleBackColor = True + ' + 'btnShowFilterUp + ' + Me.btnShowFilterUp.Image = CType(resources.GetObject("btnShowFilterUp.Image"), System.Drawing.Image) + Me.btnShowFilterUp.Location = New System.Drawing.Point(296, 146) + Me.btnShowFilterUp.Name = "btnShowFilterUp" + Me.btnShowFilterUp.Size = New System.Drawing.Size(23, 23) + Me.btnShowFilterUp.TabIndex = 5 + Me.btnShowFilterUp.UseVisualStyleBackColor = True + ' + 'chkShowProperCase + ' + Me.chkShowProperCase.AutoSize = True + Me.chkShowProperCase.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowProperCase.Location = New System.Drawing.Point(6, 17) + Me.chkShowProperCase.Name = "chkShowProperCase" + Me.chkShowProperCase.Size = New System.Drawing.Size(181, 17) + Me.chkShowProperCase.TabIndex = 0 + Me.chkShowProperCase.Text = "Convert Names to Proper Case" + Me.chkShowProperCase.UseVisualStyleBackColor = True + ' + 'btnRemoveShowFilter + ' + Me.btnRemoveShowFilter.Image = CType(resources.GetObject("btnRemoveShowFilter.Image"), System.Drawing.Image) + Me.btnRemoveShowFilter.Location = New System.Drawing.Point(354, 146) + Me.btnRemoveShowFilter.Name = "btnRemoveShowFilter" + Me.btnRemoveShowFilter.Size = New System.Drawing.Size(23, 23) + Me.btnRemoveShowFilter.TabIndex = 7 + Me.btnRemoveShowFilter.UseVisualStyleBackColor = True + ' + 'btnAddShowFilter + ' + Me.btnAddShowFilter.Image = CType(resources.GetObject("btnAddShowFilter.Image"), System.Drawing.Image) + Me.btnAddShowFilter.Location = New System.Drawing.Point(260, 146) + Me.btnAddShowFilter.Name = "btnAddShowFilter" + Me.btnAddShowFilter.Size = New System.Drawing.Size(23, 23) + Me.btnAddShowFilter.TabIndex = 4 + Me.btnAddShowFilter.UseVisualStyleBackColor = True + ' + 'txtShowFilter + ' + Me.txtShowFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtShowFilter.Location = New System.Drawing.Point(6, 147) + Me.txtShowFilter.Name = "txtShowFilter" + Me.txtShowFilter.Size = New System.Drawing.Size(252, 22) + Me.txtShowFilter.TabIndex = 3 + ' + 'lstShowFilters + ' + Me.lstShowFilters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstShowFilters.FormattingEnabled = True + Me.lstShowFilters.Location = New System.Drawing.Point(6, 35) + Me.lstShowFilters.Name = "lstShowFilters" + Me.lstShowFilters.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended + Me.lstShowFilters.Size = New System.Drawing.Size(371, 95) + Me.lstShowFilters.TabIndex = 1 + ' + 'pnlTVImages + ' + Me.pnlTVImages.BackColor = System.Drawing.Color.White + Me.pnlTVImages.Controls.Add(Me.TabControl3) + Me.pnlTVImages.Location = New System.Drawing.Point(913, 685) + Me.pnlTVImages.Name = "pnlTVImages" + Me.pnlTVImages.Size = New System.Drawing.Size(617, 402) + Me.pnlTVImages.TabIndex = 16 + Me.pnlTVImages.Visible = False + ' + 'TabControl3 + ' + Me.TabControl3.Controls.Add(Me.TabPage5) + Me.TabControl3.Controls.Add(Me.TabPage6) + Me.TabControl3.Controls.Add(Me.TabPage7) + Me.TabControl3.Controls.Add(Me.TabPage8) + Me.TabControl3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.TabControl3.Location = New System.Drawing.Point(5, 6) + Me.TabControl3.Name = "TabControl3" + Me.TabControl3.SelectedIndex = 0 + Me.TabControl3.Size = New System.Drawing.Size(609, 397) + Me.TabControl3.TabIndex = 0 + ' + 'TabPage5 + ' + Me.TabPage5.Controls.Add(Me.gbAllSPosterOpts) + Me.TabPage5.Controls.Add(Me.gbShowPosterOpts) + Me.TabPage5.Controls.Add(Me.gbShowFanartOpts) + Me.TabPage5.Location = New System.Drawing.Point(4, 22) + Me.TabPage5.Name = "TabPage5" + Me.TabPage5.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage5.Size = New System.Drawing.Size(601, 371) + Me.TabPage5.TabIndex = 0 + Me.TabPage5.Text = "TV Show" + Me.TabPage5.UseVisualStyleBackColor = True + ' + 'gbAllSPosterOpts + ' + Me.gbAllSPosterOpts.Controls.Add(Me.rbAllSPoster) + Me.gbAllSPosterOpts.Controls.Add(Me.rbAllSBanner) + Me.gbAllSPosterOpts.Controls.Add(Me.txtAllSPosterWidth) + Me.gbAllSPosterOpts.Controls.Add(Me.txtAllSPosterHeight) + Me.gbAllSPosterOpts.Controls.Add(Me.lblAllSPosterQual) + Me.gbAllSPosterOpts.Controls.Add(Me.tbAllSPosterQual) + Me.gbAllSPosterOpts.Controls.Add(Me.lblAllSPosterQ) + Me.gbAllSPosterOpts.Controls.Add(Me.lblAllSPosterWidth) + Me.gbAllSPosterOpts.Controls.Add(Me.lblAllSPosterHeight) + Me.gbAllSPosterOpts.Controls.Add(Me.chkResizeAllSPoster) + Me.gbAllSPosterOpts.Controls.Add(Me.lblAllSPosterSize) + Me.gbAllSPosterOpts.Controls.Add(Me.cbAllSPosterSize) + Me.gbAllSPosterOpts.Controls.Add(Me.chkOverwriteAllSPoster) + Me.gbAllSPosterOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbAllSPosterOpts.Location = New System.Drawing.Point(238, 5) + Me.gbAllSPosterOpts.Name = "gbAllSPosterOpts" + Me.gbAllSPosterOpts.Size = New System.Drawing.Size(228, 191) + Me.gbAllSPosterOpts.TabIndex = 0 + Me.gbAllSPosterOpts.TabStop = False + Me.gbAllSPosterOpts.Text = "All Season Posters" + ' + 'rbAllSPoster + ' + Me.rbAllSPoster.AutoSize = True + Me.rbAllSPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbAllSPoster.Location = New System.Drawing.Point(93, 30) + Me.rbAllSPoster.Name = "rbAllSPoster" + Me.rbAllSPoster.Size = New System.Drawing.Size(57, 17) + Me.rbAllSPoster.TabIndex = 2 + Me.rbAllSPoster.TabStop = True + Me.rbAllSPoster.Text = "Poster" + Me.rbAllSPoster.UseVisualStyleBackColor = True + ' + 'rbAllSBanner + ' + Me.rbAllSBanner.AutoSize = True + Me.rbAllSBanner.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbAllSBanner.Location = New System.Drawing.Point(8, 30) + Me.rbAllSBanner.Name = "rbAllSBanner" + Me.rbAllSBanner.Size = New System.Drawing.Size(62, 17) + Me.rbAllSBanner.TabIndex = 1 + Me.rbAllSBanner.TabStop = True + Me.rbAllSBanner.Text = "Banner" + Me.rbAllSBanner.UseVisualStyleBackColor = True + ' + 'txtAllSPosterWidth + ' + Me.txtAllSPosterWidth.Enabled = False + Me.txtAllSPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtAllSPosterWidth.Location = New System.Drawing.Point(71, 113) + Me.txtAllSPosterWidth.Name = "txtAllSPosterWidth" + Me.txtAllSPosterWidth.Size = New System.Drawing.Size(40, 22) + Me.txtAllSPosterWidth.TabIndex = 7 + ' + 'txtAllSPosterHeight + ' + Me.txtAllSPosterHeight.Enabled = False + Me.txtAllSPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtAllSPosterHeight.Location = New System.Drawing.Point(182, 113) + Me.txtAllSPosterHeight.Name = "txtAllSPosterHeight" + Me.txtAllSPosterHeight.Size = New System.Drawing.Size(40, 22) + Me.txtAllSPosterHeight.TabIndex = 9 + ' + 'lblAllSPosterQual + ' + Me.lblAllSPosterQual.AutoSize = True + Me.lblAllSPosterQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblAllSPosterQual.Location = New System.Drawing.Point(183, 161) + Me.lblAllSPosterQual.Name = "lblAllSPosterQual" + Me.lblAllSPosterQual.Size = New System.Drawing.Size(29, 17) + Me.lblAllSPosterQual.TabIndex = 12 + Me.lblAllSPosterQual.Text = "100" + ' + 'tbAllSPosterQual + ' + Me.tbAllSPosterQual.AutoSize = False + Me.tbAllSPosterQual.BackColor = System.Drawing.Color.White + Me.tbAllSPosterQual.LargeChange = 10 + Me.tbAllSPosterQual.Location = New System.Drawing.Point(7, 154) + Me.tbAllSPosterQual.Maximum = 100 + Me.tbAllSPosterQual.Name = "tbAllSPosterQual" + Me.tbAllSPosterQual.Size = New System.Drawing.Size(179, 27) + Me.tbAllSPosterQual.TabIndex = 11 + Me.tbAllSPosterQual.TickFrequency = 10 + Me.tbAllSPosterQual.Value = 100 + ' + 'lblAllSPosterQ + ' + Me.lblAllSPosterQ.AutoSize = True + Me.lblAllSPosterQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblAllSPosterQ.Location = New System.Drawing.Point(3, 141) + Me.lblAllSPosterQ.Name = "lblAllSPosterQ" + Me.lblAllSPosterQ.Size = New System.Drawing.Size(46, 13) + Me.lblAllSPosterQ.TabIndex = 10 + Me.lblAllSPosterQ.Text = "Quality:" + ' + 'lblAllSPosterWidth + ' + Me.lblAllSPosterWidth.AutoSize = True + Me.lblAllSPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblAllSPosterWidth.Location = New System.Drawing.Point(3, 117) + Me.lblAllSPosterWidth.Name = "lblAllSPosterWidth" + Me.lblAllSPosterWidth.Size = New System.Drawing.Size(66, 13) + Me.lblAllSPosterWidth.TabIndex = 6 + Me.lblAllSPosterWidth.Text = "Max Width:" + ' + 'lblAllSPosterHeight + ' + Me.lblAllSPosterHeight.AutoSize = True + Me.lblAllSPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblAllSPosterHeight.Location = New System.Drawing.Point(112, 117) + Me.lblAllSPosterHeight.Name = "lblAllSPosterHeight" + Me.lblAllSPosterHeight.Size = New System.Drawing.Size(69, 13) + Me.lblAllSPosterHeight.TabIndex = 8 + Me.lblAllSPosterHeight.Text = "Max Height:" + ' + 'chkResizeAllSPoster + ' + Me.chkResizeAllSPoster.AutoSize = True + Me.chkResizeAllSPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkResizeAllSPoster.Location = New System.Drawing.Point(6, 92) + Me.chkResizeAllSPoster.Name = "chkResizeAllSPoster" + Me.chkResizeAllSPoster.Size = New System.Drawing.Size(133, 17) + Me.chkResizeAllSPoster.TabIndex = 5 + Me.chkResizeAllSPoster.Text = "Automatically Resize:" + Me.chkResizeAllSPoster.UseVisualStyleBackColor = True + ' + 'lblAllSPosterSize + ' + Me.lblAllSPosterSize.AutoSize = True + Me.lblAllSPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblAllSPosterSize.Location = New System.Drawing.Point(3, 14) + Me.lblAllSPosterSize.Name = "lblAllSPosterSize" + Me.lblAllSPosterSize.Size = New System.Drawing.Size(83, 13) + Me.lblAllSPosterSize.TabIndex = 0 + Me.lblAllSPosterSize.Text = "Preferred Type:" + ' + 'cbAllSPosterSize + ' + Me.cbAllSPosterSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbAllSPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbAllSPosterSize.FormattingEnabled = True + Me.cbAllSPosterSize.Location = New System.Drawing.Point(6, 52) + Me.cbAllSPosterSize.Name = "cbAllSPosterSize" + Me.cbAllSPosterSize.Size = New System.Drawing.Size(148, 21) + Me.cbAllSPosterSize.TabIndex = 3 + ' + 'chkOverwriteAllSPoster + ' + Me.chkOverwriteAllSPoster.AutoSize = True + Me.chkOverwriteAllSPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOverwriteAllSPoster.Location = New System.Drawing.Point(6, 76) + Me.chkOverwriteAllSPoster.Name = "chkOverwriteAllSPoster" + Me.chkOverwriteAllSPoster.Size = New System.Drawing.Size(119, 17) + Me.chkOverwriteAllSPoster.TabIndex = 4 + Me.chkOverwriteAllSPoster.Text = "Overwrite Existing" + Me.chkOverwriteAllSPoster.UseVisualStyleBackColor = True + ' + 'gbShowPosterOpts + ' + Me.gbShowPosterOpts.Controls.Add(Me.rbPoster) + Me.gbShowPosterOpts.Controls.Add(Me.rbBanner) + Me.gbShowPosterOpts.Controls.Add(Me.txtShowPosterWidth) + Me.gbShowPosterOpts.Controls.Add(Me.txtShowPosterHeight) + Me.gbShowPosterOpts.Controls.Add(Me.lblShowPosterQual) + Me.gbShowPosterOpts.Controls.Add(Me.tbShowPosterQual) + Me.gbShowPosterOpts.Controls.Add(Me.lblShowPosterQ) + Me.gbShowPosterOpts.Controls.Add(Me.lblShowPosterWidth) + Me.gbShowPosterOpts.Controls.Add(Me.lblShowPosterHeight) + Me.gbShowPosterOpts.Controls.Add(Me.chkResizeShowPoster) + Me.gbShowPosterOpts.Controls.Add(Me.lblShowPosterSize) + Me.gbShowPosterOpts.Controls.Add(Me.cbShowPosterSize) + Me.gbShowPosterOpts.Controls.Add(Me.chkOverwriteShowPoster) + Me.gbShowPosterOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbShowPosterOpts.Location = New System.Drawing.Point(4, 5) + Me.gbShowPosterOpts.Name = "gbShowPosterOpts" + Me.gbShowPosterOpts.Size = New System.Drawing.Size(228, 191) + Me.gbShowPosterOpts.TabIndex = 0 + Me.gbShowPosterOpts.TabStop = False + Me.gbShowPosterOpts.Text = "Poster" + ' + 'rbPoster + ' + Me.rbPoster.AutoSize = True + Me.rbPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbPoster.Location = New System.Drawing.Point(93, 30) + Me.rbPoster.Name = "rbPoster" + Me.rbPoster.Size = New System.Drawing.Size(57, 17) + Me.rbPoster.TabIndex = 2 + Me.rbPoster.TabStop = True + Me.rbPoster.Text = "Poster" + Me.rbPoster.UseVisualStyleBackColor = True + ' + 'rbBanner + ' + Me.rbBanner.AutoSize = True + Me.rbBanner.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.rbBanner.Location = New System.Drawing.Point(8, 30) + Me.rbBanner.Name = "rbBanner" + Me.rbBanner.Size = New System.Drawing.Size(62, 17) + Me.rbBanner.TabIndex = 1 + Me.rbBanner.TabStop = True + Me.rbBanner.Text = "Banner" + Me.rbBanner.UseVisualStyleBackColor = True + ' + 'txtShowPosterWidth + ' + Me.txtShowPosterWidth.Enabled = False + Me.txtShowPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtShowPosterWidth.Location = New System.Drawing.Point(71, 113) + Me.txtShowPosterWidth.Name = "txtShowPosterWidth" + Me.txtShowPosterWidth.Size = New System.Drawing.Size(40, 22) + Me.txtShowPosterWidth.TabIndex = 7 + ' + 'txtShowPosterHeight + ' + Me.txtShowPosterHeight.Enabled = False + Me.txtShowPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtShowPosterHeight.Location = New System.Drawing.Point(182, 113) + Me.txtShowPosterHeight.Name = "txtShowPosterHeight" + Me.txtShowPosterHeight.Size = New System.Drawing.Size(40, 22) + Me.txtShowPosterHeight.TabIndex = 9 + ' + 'lblShowPosterQual + ' + Me.lblShowPosterQual.AutoSize = True + Me.lblShowPosterQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblShowPosterQual.Location = New System.Drawing.Point(183, 161) + Me.lblShowPosterQual.Name = "lblShowPosterQual" + Me.lblShowPosterQual.Size = New System.Drawing.Size(29, 17) + Me.lblShowPosterQual.TabIndex = 12 + Me.lblShowPosterQual.Text = "100" + ' + 'tbShowPosterQual + ' + Me.tbShowPosterQual.AutoSize = False + Me.tbShowPosterQual.BackColor = System.Drawing.Color.White + Me.tbShowPosterQual.LargeChange = 10 + Me.tbShowPosterQual.Location = New System.Drawing.Point(7, 154) + Me.tbShowPosterQual.Maximum = 100 + Me.tbShowPosterQual.Name = "tbShowPosterQual" + Me.tbShowPosterQual.Size = New System.Drawing.Size(179, 27) + Me.tbShowPosterQual.TabIndex = 11 + Me.tbShowPosterQual.TickFrequency = 10 + Me.tbShowPosterQual.Value = 100 + ' + 'lblShowPosterQ + ' + Me.lblShowPosterQ.AutoSize = True + Me.lblShowPosterQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblShowPosterQ.Location = New System.Drawing.Point(3, 141) + Me.lblShowPosterQ.Name = "lblShowPosterQ" + Me.lblShowPosterQ.Size = New System.Drawing.Size(46, 13) + Me.lblShowPosterQ.TabIndex = 10 + Me.lblShowPosterQ.Text = "Quality:" + ' + 'lblShowPosterWidth + ' + Me.lblShowPosterWidth.AutoSize = True + Me.lblShowPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblShowPosterWidth.Location = New System.Drawing.Point(3, 117) + Me.lblShowPosterWidth.Name = "lblShowPosterWidth" + Me.lblShowPosterWidth.Size = New System.Drawing.Size(66, 13) + Me.lblShowPosterWidth.TabIndex = 6 + Me.lblShowPosterWidth.Text = "Max Width:" + ' + 'lblShowPosterHeight + ' + Me.lblShowPosterHeight.AutoSize = True + Me.lblShowPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblShowPosterHeight.Location = New System.Drawing.Point(112, 117) + Me.lblShowPosterHeight.Name = "lblShowPosterHeight" + Me.lblShowPosterHeight.Size = New System.Drawing.Size(69, 13) + Me.lblShowPosterHeight.TabIndex = 8 + Me.lblShowPosterHeight.Text = "Max Height:" + ' + 'chkResizeShowPoster + ' + Me.chkResizeShowPoster.AutoSize = True + Me.chkResizeShowPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkResizeShowPoster.Location = New System.Drawing.Point(6, 92) + Me.chkResizeShowPoster.Name = "chkResizeShowPoster" + Me.chkResizeShowPoster.Size = New System.Drawing.Size(133, 17) + Me.chkResizeShowPoster.TabIndex = 5 + Me.chkResizeShowPoster.Text = "Automatically Resize:" + Me.chkResizeShowPoster.UseVisualStyleBackColor = True + ' + 'lblShowPosterSize + ' + Me.lblShowPosterSize.AutoSize = True + Me.lblShowPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblShowPosterSize.Location = New System.Drawing.Point(3, 14) + Me.lblShowPosterSize.Name = "lblShowPosterSize" + Me.lblShowPosterSize.Size = New System.Drawing.Size(83, 13) + Me.lblShowPosterSize.TabIndex = 0 + Me.lblShowPosterSize.Text = "Preferred Type:" + ' + 'cbShowPosterSize + ' + Me.cbShowPosterSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbShowPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbShowPosterSize.FormattingEnabled = True + Me.cbShowPosterSize.Location = New System.Drawing.Point(6, 52) + Me.cbShowPosterSize.Name = "cbShowPosterSize" + Me.cbShowPosterSize.Size = New System.Drawing.Size(148, 21) + Me.cbShowPosterSize.TabIndex = 3 + ' + 'chkOverwriteShowPoster + ' + Me.chkOverwriteShowPoster.AutoSize = True + Me.chkOverwriteShowPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOverwriteShowPoster.Location = New System.Drawing.Point(6, 76) + Me.chkOverwriteShowPoster.Name = "chkOverwriteShowPoster" + Me.chkOverwriteShowPoster.Size = New System.Drawing.Size(119, 17) + Me.chkOverwriteShowPoster.TabIndex = 4 + Me.chkOverwriteShowPoster.Text = "Overwrite Existing" + Me.chkOverwriteShowPoster.UseVisualStyleBackColor = True + ' + 'gbShowFanartOpts + ' + Me.gbShowFanartOpts.Controls.Add(Me.txtShowFanartWidth) + Me.gbShowFanartOpts.Controls.Add(Me.txtShowFanartHeight) + Me.gbShowFanartOpts.Controls.Add(Me.lblShowFanartQual) + Me.gbShowFanartOpts.Controls.Add(Me.tbShowFanartQual) + Me.gbShowFanartOpts.Controls.Add(Me.lblShowFanartQ) + Me.gbShowFanartOpts.Controls.Add(Me.lblShowFanartWidth) + Me.gbShowFanartOpts.Controls.Add(Me.lblShowFanartHeight) + Me.gbShowFanartOpts.Controls.Add(Me.chkResizeShowFanart) + Me.gbShowFanartOpts.Controls.Add(Me.cbShowFanartSize) + Me.gbShowFanartOpts.Controls.Add(Me.lblShowFanartSize) + Me.gbShowFanartOpts.Controls.Add(Me.chkOverwriteShowFanart) + Me.gbShowFanartOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbShowFanartOpts.Location = New System.Drawing.Point(4, 199) + Me.gbShowFanartOpts.Name = "gbShowFanartOpts" + Me.gbShowFanartOpts.Size = New System.Drawing.Size(228, 167) + Me.gbShowFanartOpts.TabIndex = 1 + Me.gbShowFanartOpts.TabStop = False + Me.gbShowFanartOpts.Text = "Fanart" + ' + 'txtShowFanartWidth + ' + Me.txtShowFanartWidth.Enabled = False + Me.txtShowFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtShowFanartWidth.Location = New System.Drawing.Point(71, 90) + Me.txtShowFanartWidth.Name = "txtShowFanartWidth" + Me.txtShowFanartWidth.Size = New System.Drawing.Size(40, 22) + Me.txtShowFanartWidth.TabIndex = 5 + ' + 'txtShowFanartHeight + ' + Me.txtShowFanartHeight.Enabled = False + Me.txtShowFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtShowFanartHeight.Location = New System.Drawing.Point(182, 90) + Me.txtShowFanartHeight.Name = "txtShowFanartHeight" + Me.txtShowFanartHeight.Size = New System.Drawing.Size(40, 22) + Me.txtShowFanartHeight.TabIndex = 7 + ' + 'lblShowFanartQual + ' + Me.lblShowFanartQual.AutoSize = True + Me.lblShowFanartQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblShowFanartQual.Location = New System.Drawing.Point(183, 138) + Me.lblShowFanartQual.Name = "lblShowFanartQual" + Me.lblShowFanartQual.Size = New System.Drawing.Size(29, 17) + Me.lblShowFanartQual.TabIndex = 10 + Me.lblShowFanartQual.Text = "100" + ' + 'tbShowFanartQual + ' + Me.tbShowFanartQual.AutoSize = False + Me.tbShowFanartQual.BackColor = System.Drawing.Color.White + Me.tbShowFanartQual.LargeChange = 10 + Me.tbShowFanartQual.Location = New System.Drawing.Point(7, 131) + Me.tbShowFanartQual.Maximum = 100 + Me.tbShowFanartQual.Name = "tbShowFanartQual" + Me.tbShowFanartQual.Size = New System.Drawing.Size(180, 27) + Me.tbShowFanartQual.TabIndex = 9 + Me.tbShowFanartQual.TickFrequency = 10 + Me.tbShowFanartQual.Value = 100 + ' + 'lblShowFanartQ + ' + Me.lblShowFanartQ.AutoSize = True + Me.lblShowFanartQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblShowFanartQ.Location = New System.Drawing.Point(3, 118) + Me.lblShowFanartQ.Name = "lblShowFanartQ" + Me.lblShowFanartQ.Size = New System.Drawing.Size(46, 13) + Me.lblShowFanartQ.TabIndex = 8 + Me.lblShowFanartQ.Text = "Quality:" + ' + 'lblShowFanartWidth + ' + Me.lblShowFanartWidth.AutoSize = True + Me.lblShowFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblShowFanartWidth.Location = New System.Drawing.Point(3, 94) + Me.lblShowFanartWidth.Name = "lblShowFanartWidth" + Me.lblShowFanartWidth.Size = New System.Drawing.Size(66, 13) + Me.lblShowFanartWidth.TabIndex = 4 + Me.lblShowFanartWidth.Text = "Max Width:" + ' + 'lblShowFanartHeight + ' + Me.lblShowFanartHeight.AutoSize = True + Me.lblShowFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblShowFanartHeight.Location = New System.Drawing.Point(112, 94) + Me.lblShowFanartHeight.Name = "lblShowFanartHeight" + Me.lblShowFanartHeight.Size = New System.Drawing.Size(69, 13) + Me.lblShowFanartHeight.TabIndex = 6 + Me.lblShowFanartHeight.Text = "Max Height:" + ' + 'chkResizeShowFanart + ' + Me.chkResizeShowFanart.AutoSize = True + Me.chkResizeShowFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkResizeShowFanart.Location = New System.Drawing.Point(6, 69) + Me.chkResizeShowFanart.Name = "chkResizeShowFanart" + Me.chkResizeShowFanart.Size = New System.Drawing.Size(133, 17) + Me.chkResizeShowFanart.TabIndex = 3 + Me.chkResizeShowFanart.Text = "Automatically Resize:" + Me.chkResizeShowFanart.UseVisualStyleBackColor = True + ' + 'cbShowFanartSize + ' + Me.cbShowFanartSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbShowFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbShowFanartSize.FormattingEnabled = True + Me.cbShowFanartSize.Location = New System.Drawing.Point(6, 29) + Me.cbShowFanartSize.Name = "cbShowFanartSize" + Me.cbShowFanartSize.Size = New System.Drawing.Size(148, 21) + Me.cbShowFanartSize.TabIndex = 1 + ' + 'lblShowFanartSize + ' + Me.lblShowFanartSize.AutoSize = True + Me.lblShowFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblShowFanartSize.Location = New System.Drawing.Point(3, 14) + Me.lblShowFanartSize.Name = "lblShowFanartSize" + Me.lblShowFanartSize.Size = New System.Drawing.Size(80, 13) + Me.lblShowFanartSize.TabIndex = 0 + Me.lblShowFanartSize.Text = "Preferred Size:" + ' + 'chkOverwriteShowFanart + ' + Me.chkOverwriteShowFanart.AutoSize = True + Me.chkOverwriteShowFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOverwriteShowFanart.Location = New System.Drawing.Point(6, 53) + Me.chkOverwriteShowFanart.Name = "chkOverwriteShowFanart" + Me.chkOverwriteShowFanart.Size = New System.Drawing.Size(119, 17) + Me.chkOverwriteShowFanart.TabIndex = 2 + Me.chkOverwriteShowFanart.Text = "Overwrite Existing" + Me.chkOverwriteShowFanart.UseVisualStyleBackColor = True + ' + 'TabPage6 + ' + Me.TabPage6.Controls.Add(Me.gbSeaPosterOpts) + Me.TabPage6.Controls.Add(Me.gbSeaFanartOpts) + Me.TabPage6.Location = New System.Drawing.Point(4, 22) + Me.TabPage6.Name = "TabPage6" + Me.TabPage6.Size = New System.Drawing.Size(601, 371) + Me.TabPage6.TabIndex = 2 + Me.TabPage6.Text = "TV Season" + Me.TabPage6.UseVisualStyleBackColor = True + ' + 'gbSeaPosterOpts + ' + Me.gbSeaPosterOpts.Controls.Add(Me.txtSeaPosterWidth) + Me.gbSeaPosterOpts.Controls.Add(Me.txtSeaPosterHeight) + Me.gbSeaPosterOpts.Controls.Add(Me.lblSeaPosterQual) + Me.gbSeaPosterOpts.Controls.Add(Me.tbSeaPosterQual) + Me.gbSeaPosterOpts.Controls.Add(Me.lblSeaPosterQ) + Me.gbSeaPosterOpts.Controls.Add(Me.lblSeaPosterWidth) + Me.gbSeaPosterOpts.Controls.Add(Me.lblSeaPosterHeight) + Me.gbSeaPosterOpts.Controls.Add(Me.chkSeaResizePoster) + Me.gbSeaPosterOpts.Controls.Add(Me.lblSeaPosterSize) + Me.gbSeaPosterOpts.Controls.Add(Me.cbSeaPosterSize) + Me.gbSeaPosterOpts.Controls.Add(Me.chkSeaOverwritePoster) + Me.gbSeaPosterOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbSeaPosterOpts.Location = New System.Drawing.Point(4, 5) + Me.gbSeaPosterOpts.Name = "gbSeaPosterOpts" + Me.gbSeaPosterOpts.Size = New System.Drawing.Size(228, 167) + Me.gbSeaPosterOpts.TabIndex = 0 + Me.gbSeaPosterOpts.TabStop = False + Me.gbSeaPosterOpts.Text = "Poster" + ' + 'txtSeaPosterWidth + ' + Me.txtSeaPosterWidth.Enabled = False + Me.txtSeaPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtSeaPosterWidth.Location = New System.Drawing.Point(71, 90) + Me.txtSeaPosterWidth.Name = "txtSeaPosterWidth" + Me.txtSeaPosterWidth.Size = New System.Drawing.Size(40, 22) + Me.txtSeaPosterWidth.TabIndex = 5 + ' + 'txtSeaPosterHeight + ' + Me.txtSeaPosterHeight.Enabled = False + Me.txtSeaPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtSeaPosterHeight.Location = New System.Drawing.Point(182, 90) + Me.txtSeaPosterHeight.Name = "txtSeaPosterHeight" + Me.txtSeaPosterHeight.Size = New System.Drawing.Size(40, 22) + Me.txtSeaPosterHeight.TabIndex = 7 + ' + 'lblSeaPosterQual + ' + Me.lblSeaPosterQual.AutoSize = True + Me.lblSeaPosterQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSeaPosterQual.Location = New System.Drawing.Point(183, 138) + Me.lblSeaPosterQual.Name = "lblSeaPosterQual" + Me.lblSeaPosterQual.Size = New System.Drawing.Size(29, 17) + Me.lblSeaPosterQual.TabIndex = 10 + Me.lblSeaPosterQual.Text = "100" + ' + 'tbSeaPosterQual + ' + Me.tbSeaPosterQual.AutoSize = False + Me.tbSeaPosterQual.BackColor = System.Drawing.Color.White + Me.tbSeaPosterQual.LargeChange = 10 + Me.tbSeaPosterQual.Location = New System.Drawing.Point(7, 131) + Me.tbSeaPosterQual.Maximum = 100 + Me.tbSeaPosterQual.Name = "tbSeaPosterQual" + Me.tbSeaPosterQual.Size = New System.Drawing.Size(179, 27) + Me.tbSeaPosterQual.TabIndex = 9 + Me.tbSeaPosterQual.TickFrequency = 10 + Me.tbSeaPosterQual.Value = 100 + ' + 'lblSeaPosterQ + ' + Me.lblSeaPosterQ.AutoSize = True + Me.lblSeaPosterQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSeaPosterQ.Location = New System.Drawing.Point(3, 118) + Me.lblSeaPosterQ.Name = "lblSeaPosterQ" + Me.lblSeaPosterQ.Size = New System.Drawing.Size(46, 13) + Me.lblSeaPosterQ.TabIndex = 8 + Me.lblSeaPosterQ.Text = "Quality:" + ' + 'lblSeaPosterWidth + ' + Me.lblSeaPosterWidth.AutoSize = True + Me.lblSeaPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSeaPosterWidth.Location = New System.Drawing.Point(3, 94) + Me.lblSeaPosterWidth.Name = "lblSeaPosterWidth" + Me.lblSeaPosterWidth.Size = New System.Drawing.Size(66, 13) + Me.lblSeaPosterWidth.TabIndex = 4 + Me.lblSeaPosterWidth.Text = "Max Width:" + ' + 'lblSeaPosterHeight + ' + Me.lblSeaPosterHeight.AutoSize = True + Me.lblSeaPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSeaPosterHeight.Location = New System.Drawing.Point(112, 94) + Me.lblSeaPosterHeight.Name = "lblSeaPosterHeight" + Me.lblSeaPosterHeight.Size = New System.Drawing.Size(69, 13) + Me.lblSeaPosterHeight.TabIndex = 6 + Me.lblSeaPosterHeight.Text = "Max Height:" + ' + 'chkSeaResizePoster + ' + Me.chkSeaResizePoster.AutoSize = True + Me.chkSeaResizePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeaResizePoster.Location = New System.Drawing.Point(6, 69) + Me.chkSeaResizePoster.Name = "chkSeaResizePoster" + Me.chkSeaResizePoster.Size = New System.Drawing.Size(133, 17) + Me.chkSeaResizePoster.TabIndex = 3 + Me.chkSeaResizePoster.Text = "Automatically Resize:" + Me.chkSeaResizePoster.UseVisualStyleBackColor = True + ' + 'lblSeaPosterSize + ' + Me.lblSeaPosterSize.AutoSize = True + Me.lblSeaPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSeaPosterSize.Location = New System.Drawing.Point(3, 14) + Me.lblSeaPosterSize.Name = "lblSeaPosterSize" + Me.lblSeaPosterSize.Size = New System.Drawing.Size(83, 13) + Me.lblSeaPosterSize.TabIndex = 0 + Me.lblSeaPosterSize.Text = "Preferred Type:" + ' + 'cbSeaPosterSize + ' + Me.cbSeaPosterSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbSeaPosterSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbSeaPosterSize.FormattingEnabled = True + Me.cbSeaPosterSize.Location = New System.Drawing.Point(6, 29) + Me.cbSeaPosterSize.Name = "cbSeaPosterSize" + Me.cbSeaPosterSize.Size = New System.Drawing.Size(148, 21) + Me.cbSeaPosterSize.TabIndex = 1 + ' + 'chkSeaOverwritePoster + ' + Me.chkSeaOverwritePoster.AutoSize = True + Me.chkSeaOverwritePoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeaOverwritePoster.Location = New System.Drawing.Point(6, 53) + Me.chkSeaOverwritePoster.Name = "chkSeaOverwritePoster" + Me.chkSeaOverwritePoster.Size = New System.Drawing.Size(119, 17) + Me.chkSeaOverwritePoster.TabIndex = 2 + Me.chkSeaOverwritePoster.Text = "Overwrite Existing" + Me.chkSeaOverwritePoster.UseVisualStyleBackColor = True + ' + 'gbSeaFanartOpts + ' + Me.gbSeaFanartOpts.Controls.Add(Me.txtSeaFanartWidth) + Me.gbSeaFanartOpts.Controls.Add(Me.txtSeaFanartHeight) + Me.gbSeaFanartOpts.Controls.Add(Me.lblSeaFanartQual) + Me.gbSeaFanartOpts.Controls.Add(Me.tbSeaFanartQual) + Me.gbSeaFanartOpts.Controls.Add(Me.lblSeaFanartQ) + Me.gbSeaFanartOpts.Controls.Add(Me.lblSeaFanartWidth) + Me.gbSeaFanartOpts.Controls.Add(Me.lblSeaFanartHeight) + Me.gbSeaFanartOpts.Controls.Add(Me.chkSeaResizeFanart) + Me.gbSeaFanartOpts.Controls.Add(Me.cbSeaFanartSize) + Me.gbSeaFanartOpts.Controls.Add(Me.lblSeaFanartSize) + Me.gbSeaFanartOpts.Controls.Add(Me.chkSeaOverwriteFanart) + Me.gbSeaFanartOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbSeaFanartOpts.Location = New System.Drawing.Point(238, 5) + Me.gbSeaFanartOpts.Name = "gbSeaFanartOpts" + Me.gbSeaFanartOpts.Size = New System.Drawing.Size(228, 167) + Me.gbSeaFanartOpts.TabIndex = 1 + Me.gbSeaFanartOpts.TabStop = False + Me.gbSeaFanartOpts.Text = "Fanart" + ' + 'txtSeaFanartWidth + ' + Me.txtSeaFanartWidth.Enabled = False + Me.txtSeaFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtSeaFanartWidth.Location = New System.Drawing.Point(71, 90) + Me.txtSeaFanartWidth.Name = "txtSeaFanartWidth" + Me.txtSeaFanartWidth.Size = New System.Drawing.Size(40, 22) + Me.txtSeaFanartWidth.TabIndex = 5 + ' + 'txtSeaFanartHeight + ' + Me.txtSeaFanartHeight.Enabled = False + Me.txtSeaFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtSeaFanartHeight.Location = New System.Drawing.Point(182, 90) + Me.txtSeaFanartHeight.Name = "txtSeaFanartHeight" + Me.txtSeaFanartHeight.Size = New System.Drawing.Size(40, 22) + Me.txtSeaFanartHeight.TabIndex = 7 + ' + 'lblSeaFanartQual + ' + Me.lblSeaFanartQual.AutoSize = True + Me.lblSeaFanartQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSeaFanartQual.Location = New System.Drawing.Point(183, 138) + Me.lblSeaFanartQual.Name = "lblSeaFanartQual" + Me.lblSeaFanartQual.Size = New System.Drawing.Size(29, 17) + Me.lblSeaFanartQual.TabIndex = 10 + Me.lblSeaFanartQual.Text = "100" + ' + 'tbSeaFanartQual + ' + Me.tbSeaFanartQual.AutoSize = False + Me.tbSeaFanartQual.BackColor = System.Drawing.Color.White + Me.tbSeaFanartQual.LargeChange = 10 + Me.tbSeaFanartQual.Location = New System.Drawing.Point(7, 131) + Me.tbSeaFanartQual.Maximum = 100 + Me.tbSeaFanartQual.Name = "tbSeaFanartQual" + Me.tbSeaFanartQual.Size = New System.Drawing.Size(180, 27) + Me.tbSeaFanartQual.TabIndex = 9 + Me.tbSeaFanartQual.TickFrequency = 10 + Me.tbSeaFanartQual.Value = 100 + ' + 'lblSeaFanartQ + ' + Me.lblSeaFanartQ.AutoSize = True + Me.lblSeaFanartQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSeaFanartQ.Location = New System.Drawing.Point(3, 118) + Me.lblSeaFanartQ.Name = "lblSeaFanartQ" + Me.lblSeaFanartQ.Size = New System.Drawing.Size(46, 13) + Me.lblSeaFanartQ.TabIndex = 8 + Me.lblSeaFanartQ.Text = "Quality:" + ' + 'lblSeaFanartWidth + ' + Me.lblSeaFanartWidth.AutoSize = True + Me.lblSeaFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSeaFanartWidth.Location = New System.Drawing.Point(3, 94) + Me.lblSeaFanartWidth.Name = "lblSeaFanartWidth" + Me.lblSeaFanartWidth.Size = New System.Drawing.Size(66, 13) + Me.lblSeaFanartWidth.TabIndex = 4 + Me.lblSeaFanartWidth.Text = "Max Width:" + ' + 'lblSeaFanartHeight + ' + Me.lblSeaFanartHeight.AutoSize = True + Me.lblSeaFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSeaFanartHeight.Location = New System.Drawing.Point(112, 94) + Me.lblSeaFanartHeight.Name = "lblSeaFanartHeight" + Me.lblSeaFanartHeight.Size = New System.Drawing.Size(69, 13) + Me.lblSeaFanartHeight.TabIndex = 6 + Me.lblSeaFanartHeight.Text = "Max Height:" + ' + 'chkSeaResizeFanart + ' + Me.chkSeaResizeFanart.AutoSize = True + Me.chkSeaResizeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeaResizeFanart.Location = New System.Drawing.Point(6, 69) + Me.chkSeaResizeFanart.Name = "chkSeaResizeFanart" + Me.chkSeaResizeFanart.Size = New System.Drawing.Size(133, 17) + Me.chkSeaResizeFanart.TabIndex = 3 + Me.chkSeaResizeFanart.Text = "Automatically Resize:" + Me.chkSeaResizeFanart.UseVisualStyleBackColor = True + ' + 'cbSeaFanartSize + ' + Me.cbSeaFanartSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbSeaFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbSeaFanartSize.FormattingEnabled = True + Me.cbSeaFanartSize.Location = New System.Drawing.Point(6, 29) + Me.cbSeaFanartSize.Name = "cbSeaFanartSize" + Me.cbSeaFanartSize.Size = New System.Drawing.Size(148, 21) + Me.cbSeaFanartSize.TabIndex = 1 + ' + 'lblSeaFanartSize + ' + Me.lblSeaFanartSize.AutoSize = True + Me.lblSeaFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSeaFanartSize.Location = New System.Drawing.Point(3, 14) + Me.lblSeaFanartSize.Name = "lblSeaFanartSize" + Me.lblSeaFanartSize.Size = New System.Drawing.Size(80, 13) + Me.lblSeaFanartSize.TabIndex = 0 + Me.lblSeaFanartSize.Text = "Preferred Size:" + ' + 'chkSeaOverwriteFanart + ' + Me.chkSeaOverwriteFanart.AutoSize = True + Me.chkSeaOverwriteFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeaOverwriteFanart.Location = New System.Drawing.Point(6, 53) + Me.chkSeaOverwriteFanart.Name = "chkSeaOverwriteFanart" + Me.chkSeaOverwriteFanart.Size = New System.Drawing.Size(119, 17) + Me.chkSeaOverwriteFanart.TabIndex = 2 + Me.chkSeaOverwriteFanart.Text = "Overwrite Existing" + Me.chkSeaOverwriteFanart.UseVisualStyleBackColor = True + ' + 'TabPage7 + ' + Me.TabPage7.Controls.Add(Me.gbEpPosterOpts) + Me.TabPage7.Controls.Add(Me.gbEpFanartOpts) + Me.TabPage7.Location = New System.Drawing.Point(4, 22) + Me.TabPage7.Name = "TabPage7" + Me.TabPage7.Padding = New System.Windows.Forms.Padding(3) + Me.TabPage7.Size = New System.Drawing.Size(601, 371) + Me.TabPage7.TabIndex = 1 + Me.TabPage7.Text = "TV Episode" + Me.TabPage7.UseVisualStyleBackColor = True + ' + 'gbEpPosterOpts + ' + Me.gbEpPosterOpts.Controls.Add(Me.txtEpPosterWidth) + Me.gbEpPosterOpts.Controls.Add(Me.txtEpPosterHeight) + Me.gbEpPosterOpts.Controls.Add(Me.lblEpPosterQual) + Me.gbEpPosterOpts.Controls.Add(Me.tbEpPosterQual) + Me.gbEpPosterOpts.Controls.Add(Me.lblEpPosterQ) + Me.gbEpPosterOpts.Controls.Add(Me.lblEpPosterWidth) + Me.gbEpPosterOpts.Controls.Add(Me.lblEpPosterHeight) + Me.gbEpPosterOpts.Controls.Add(Me.chkResizeEpPoster) + Me.gbEpPosterOpts.Controls.Add(Me.chkOverwriteEpPoster) + Me.gbEpPosterOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbEpPosterOpts.Location = New System.Drawing.Point(4, 5) + Me.gbEpPosterOpts.Name = "gbEpPosterOpts" + Me.gbEpPosterOpts.Size = New System.Drawing.Size(228, 135) + Me.gbEpPosterOpts.TabIndex = 0 + Me.gbEpPosterOpts.TabStop = False + Me.gbEpPosterOpts.Text = "Poster" + ' + 'txtEpPosterWidth + ' + Me.txtEpPosterWidth.Enabled = False + Me.txtEpPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtEpPosterWidth.Location = New System.Drawing.Point(71, 49) + Me.txtEpPosterWidth.Name = "txtEpPosterWidth" + Me.txtEpPosterWidth.Size = New System.Drawing.Size(40, 22) + Me.txtEpPosterWidth.TabIndex = 3 + ' + 'txtEpPosterHeight + ' + Me.txtEpPosterHeight.Enabled = False + Me.txtEpPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtEpPosterHeight.Location = New System.Drawing.Point(182, 49) + Me.txtEpPosterHeight.Name = "txtEpPosterHeight" + Me.txtEpPosterHeight.Size = New System.Drawing.Size(40, 22) + Me.txtEpPosterHeight.TabIndex = 5 + ' + 'lblEpPosterQual + ' + Me.lblEpPosterQual.AutoSize = True + Me.lblEpPosterQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblEpPosterQual.Location = New System.Drawing.Point(181, 98) + Me.lblEpPosterQual.Name = "lblEpPosterQual" + Me.lblEpPosterQual.Size = New System.Drawing.Size(29, 17) + Me.lblEpPosterQual.TabIndex = 8 + Me.lblEpPosterQual.Text = "100" + ' + 'tbEpPosterQual + ' + Me.tbEpPosterQual.AutoSize = False + Me.tbEpPosterQual.BackColor = System.Drawing.Color.White + Me.tbEpPosterQual.LargeChange = 10 + Me.tbEpPosterQual.Location = New System.Drawing.Point(5, 91) + Me.tbEpPosterQual.Maximum = 100 + Me.tbEpPosterQual.Name = "tbEpPosterQual" + Me.tbEpPosterQual.Size = New System.Drawing.Size(179, 27) + Me.tbEpPosterQual.TabIndex = 7 + Me.tbEpPosterQual.TickFrequency = 10 + Me.tbEpPosterQual.Value = 100 + ' + 'lblEpPosterQ + ' + Me.lblEpPosterQ.AutoSize = True + Me.lblEpPosterQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblEpPosterQ.Location = New System.Drawing.Point(1, 78) + Me.lblEpPosterQ.Name = "lblEpPosterQ" + Me.lblEpPosterQ.Size = New System.Drawing.Size(46, 13) + Me.lblEpPosterQ.TabIndex = 6 + Me.lblEpPosterQ.Text = "Quality:" + ' + 'lblEpPosterWidth + ' + Me.lblEpPosterWidth.AutoSize = True + Me.lblEpPosterWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblEpPosterWidth.Location = New System.Drawing.Point(3, 53) + Me.lblEpPosterWidth.Name = "lblEpPosterWidth" + Me.lblEpPosterWidth.Size = New System.Drawing.Size(66, 13) + Me.lblEpPosterWidth.TabIndex = 2 + Me.lblEpPosterWidth.Text = "Max Width:" + ' + 'lblEpPosterHeight + ' + Me.lblEpPosterHeight.AutoSize = True + Me.lblEpPosterHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblEpPosterHeight.Location = New System.Drawing.Point(112, 53) + Me.lblEpPosterHeight.Name = "lblEpPosterHeight" + Me.lblEpPosterHeight.Size = New System.Drawing.Size(69, 13) + Me.lblEpPosterHeight.TabIndex = 4 + Me.lblEpPosterHeight.Text = "Max Height:" + ' + 'chkResizeEpPoster + ' + Me.chkResizeEpPoster.AutoSize = True + Me.chkResizeEpPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkResizeEpPoster.Location = New System.Drawing.Point(4, 30) + Me.chkResizeEpPoster.Name = "chkResizeEpPoster" + Me.chkResizeEpPoster.Size = New System.Drawing.Size(133, 17) + Me.chkResizeEpPoster.TabIndex = 1 + Me.chkResizeEpPoster.Text = "Automatically Resize:" + Me.chkResizeEpPoster.UseVisualStyleBackColor = True + ' + 'chkOverwriteEpPoster + ' + Me.chkOverwriteEpPoster.AutoSize = True + Me.chkOverwriteEpPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOverwriteEpPoster.Location = New System.Drawing.Point(4, 14) + Me.chkOverwriteEpPoster.Name = "chkOverwriteEpPoster" + Me.chkOverwriteEpPoster.Size = New System.Drawing.Size(119, 17) + Me.chkOverwriteEpPoster.TabIndex = 0 + Me.chkOverwriteEpPoster.Text = "Overwrite Existing" + Me.chkOverwriteEpPoster.UseVisualStyleBackColor = True + ' + 'gbEpFanartOpts + ' + Me.gbEpFanartOpts.Controls.Add(Me.txtEpFanartWidth) + Me.gbEpFanartOpts.Controls.Add(Me.txtEpFanartHeight) + Me.gbEpFanartOpts.Controls.Add(Me.lblEpFanartQual) + Me.gbEpFanartOpts.Controls.Add(Me.tbEpFanartQual) + Me.gbEpFanartOpts.Controls.Add(Me.lblEpFanartQ) + Me.gbEpFanartOpts.Controls.Add(Me.lblEpFanartWidth) + Me.gbEpFanartOpts.Controls.Add(Me.lblEpFanartHeight) + Me.gbEpFanartOpts.Controls.Add(Me.chkResizeEpFanart) + Me.gbEpFanartOpts.Controls.Add(Me.cbEpFanartSize) + Me.gbEpFanartOpts.Controls.Add(Me.lblEpFanartSize) + Me.gbEpFanartOpts.Controls.Add(Me.chkOverwriteEpFanart) + Me.gbEpFanartOpts.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbEpFanartOpts.Location = New System.Drawing.Point(238, 5) + Me.gbEpFanartOpts.Name = "gbEpFanartOpts" + Me.gbEpFanartOpts.Size = New System.Drawing.Size(228, 167) + Me.gbEpFanartOpts.TabIndex = 1 + Me.gbEpFanartOpts.TabStop = False + Me.gbEpFanartOpts.Text = "Fanart" + ' + 'txtEpFanartWidth + ' + Me.txtEpFanartWidth.Enabled = False + Me.txtEpFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtEpFanartWidth.Location = New System.Drawing.Point(71, 90) + Me.txtEpFanartWidth.Name = "txtEpFanartWidth" + Me.txtEpFanartWidth.Size = New System.Drawing.Size(40, 22) + Me.txtEpFanartWidth.TabIndex = 5 + ' + 'txtEpFanartHeight + ' + Me.txtEpFanartHeight.Enabled = False + Me.txtEpFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtEpFanartHeight.Location = New System.Drawing.Point(182, 90) + Me.txtEpFanartHeight.Name = "txtEpFanartHeight" + Me.txtEpFanartHeight.Size = New System.Drawing.Size(40, 22) + Me.txtEpFanartHeight.TabIndex = 7 + ' + 'lblEpFanartQual + ' + Me.lblEpFanartQual.AutoSize = True + Me.lblEpFanartQual.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblEpFanartQual.Location = New System.Drawing.Point(183, 138) + Me.lblEpFanartQual.Name = "lblEpFanartQual" + Me.lblEpFanartQual.Size = New System.Drawing.Size(29, 17) + Me.lblEpFanartQual.TabIndex = 10 + Me.lblEpFanartQual.Text = "100" + ' + 'tbEpFanartQual + ' + Me.tbEpFanartQual.AutoSize = False + Me.tbEpFanartQual.BackColor = System.Drawing.Color.White + Me.tbEpFanartQual.LargeChange = 10 + Me.tbEpFanartQual.Location = New System.Drawing.Point(7, 131) + Me.tbEpFanartQual.Maximum = 100 + Me.tbEpFanartQual.Name = "tbEpFanartQual" + Me.tbEpFanartQual.Size = New System.Drawing.Size(180, 27) + Me.tbEpFanartQual.TabIndex = 9 + Me.tbEpFanartQual.TickFrequency = 10 + Me.tbEpFanartQual.Value = 100 + ' + 'lblEpFanartQ + ' + Me.lblEpFanartQ.AutoSize = True + Me.lblEpFanartQ.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblEpFanartQ.Location = New System.Drawing.Point(3, 118) + Me.lblEpFanartQ.Name = "lblEpFanartQ" + Me.lblEpFanartQ.Size = New System.Drawing.Size(46, 13) + Me.lblEpFanartQ.TabIndex = 8 + Me.lblEpFanartQ.Text = "Quality:" + ' + 'lblEpFanartWidth + ' + Me.lblEpFanartWidth.AutoSize = True + Me.lblEpFanartWidth.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblEpFanartWidth.Location = New System.Drawing.Point(3, 94) + Me.lblEpFanartWidth.Name = "lblEpFanartWidth" + Me.lblEpFanartWidth.Size = New System.Drawing.Size(66, 13) + Me.lblEpFanartWidth.TabIndex = 4 + Me.lblEpFanartWidth.Text = "Max Width:" + ' + 'lblEpFanartHeight + ' + Me.lblEpFanartHeight.AutoSize = True + Me.lblEpFanartHeight.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblEpFanartHeight.Location = New System.Drawing.Point(112, 94) + Me.lblEpFanartHeight.Name = "lblEpFanartHeight" + Me.lblEpFanartHeight.Size = New System.Drawing.Size(69, 13) + Me.lblEpFanartHeight.TabIndex = 6 + Me.lblEpFanartHeight.Text = "Max Height:" + ' + 'chkResizeEpFanart + ' + Me.chkResizeEpFanart.AutoSize = True + Me.chkResizeEpFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkResizeEpFanart.Location = New System.Drawing.Point(6, 69) + Me.chkResizeEpFanart.Name = "chkResizeEpFanart" + Me.chkResizeEpFanart.Size = New System.Drawing.Size(133, 17) + Me.chkResizeEpFanart.TabIndex = 3 + Me.chkResizeEpFanart.Text = "Automatically Resize:" + Me.chkResizeEpFanart.UseVisualStyleBackColor = True + ' + 'cbEpFanartSize + ' + Me.cbEpFanartSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbEpFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbEpFanartSize.FormattingEnabled = True + Me.cbEpFanartSize.Location = New System.Drawing.Point(6, 29) + Me.cbEpFanartSize.Name = "cbEpFanartSize" + Me.cbEpFanartSize.Size = New System.Drawing.Size(148, 21) + Me.cbEpFanartSize.TabIndex = 1 + ' + 'lblEpFanartSize + ' + Me.lblEpFanartSize.AutoSize = True + Me.lblEpFanartSize.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblEpFanartSize.Location = New System.Drawing.Point(3, 14) + Me.lblEpFanartSize.Name = "lblEpFanartSize" + Me.lblEpFanartSize.Size = New System.Drawing.Size(80, 13) + Me.lblEpFanartSize.TabIndex = 0 + Me.lblEpFanartSize.Text = "Preferred Size:" + ' + 'chkOverwriteEpFanart + ' + Me.chkOverwriteEpFanart.AutoSize = True + Me.chkOverwriteEpFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOverwriteEpFanart.Location = New System.Drawing.Point(6, 53) + Me.chkOverwriteEpFanart.Name = "chkOverwriteEpFanart" + Me.chkOverwriteEpFanart.Size = New System.Drawing.Size(119, 17) + Me.chkOverwriteEpFanart.TabIndex = 2 + Me.chkOverwriteEpFanart.Text = "Overwrite Existing" + Me.chkOverwriteEpFanart.UseVisualStyleBackColor = True + ' + 'TabPage8 + ' + Me.TabPage8.Controls.Add(Me.chkGetEnglishImages) + Me.TabPage8.Controls.Add(Me.chkOnlyTVImagesLanguage) + Me.TabPage8.Location = New System.Drawing.Point(4, 22) + Me.TabPage8.Name = "TabPage8" + Me.TabPage8.Size = New System.Drawing.Size(601, 371) + Me.TabPage8.TabIndex = 3 + Me.TabPage8.Text = "General" + Me.TabPage8.UseVisualStyleBackColor = True + ' + 'chkGetEnglishImages + ' + Me.chkGetEnglishImages.AutoSize = True + Me.chkGetEnglishImages.Enabled = False + Me.chkGetEnglishImages.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkGetEnglishImages.Location = New System.Drawing.Point(21, 32) + Me.chkGetEnglishImages.Name = "chkGetEnglishImages" + Me.chkGetEnglishImages.Size = New System.Drawing.Size(149, 17) + Me.chkGetEnglishImages.TabIndex = 1 + Me.chkGetEnglishImages.Text = "Also Get English Images" + Me.chkGetEnglishImages.UseVisualStyleBackColor = True + ' + 'chkOnlyTVImagesLanguage + ' + Me.chkOnlyTVImagesLanguage.AutoSize = True + Me.chkOnlyTVImagesLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkOnlyTVImagesLanguage.Location = New System.Drawing.Point(8, 14) + Me.chkOnlyTVImagesLanguage.Name = "chkOnlyTVImagesLanguage" + Me.chkOnlyTVImagesLanguage.Size = New System.Drawing.Size(248, 17) + Me.chkOnlyTVImagesLanguage.TabIndex = 0 + Me.chkOnlyTVImagesLanguage.Text = "Only Get Images for the Selected Language" + Me.chkOnlyTVImagesLanguage.UseVisualStyleBackColor = True + ' + 'pnlTVScraper + ' + Me.pnlTVScraper.BackColor = System.Drawing.Color.White + Me.pnlTVScraper.Controls.Add(Me.GroupBox32) + Me.pnlTVScraper.Controls.Add(Me.GroupBox33) + Me.pnlTVScraper.Controls.Add(Me.GroupBox31) + Me.pnlTVScraper.Controls.Add(Me.gbTVScraperOptions) + Me.pnlTVScraper.Location = New System.Drawing.Point(717, 746) + Me.pnlTVScraper.Name = "pnlTVScraper" + Me.pnlTVScraper.Size = New System.Drawing.Size(617, 400) + Me.pnlTVScraper.TabIndex = 19 + Me.pnlTVScraper.Visible = False + ' + 'GroupBox32 + ' + Me.GroupBox32.Controls.Add(Me.GroupBox35) + Me.GroupBox32.Controls.Add(Me.GroupBox34) + Me.GroupBox32.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox32.Location = New System.Drawing.Point(208, 252) + Me.GroupBox32.Name = "GroupBox32" + Me.GroupBox32.Size = New System.Drawing.Size(403, 114) + Me.GroupBox32.TabIndex = 3 + Me.GroupBox32.TabStop = False + Me.GroupBox32.Text = "Scraper Fields" + ' + 'GroupBox35 + ' + Me.GroupBox35.Controls.Add(Me.chkScraperShowRating) + Me.GroupBox35.Controls.Add(Me.chkScraperShowActors) + Me.GroupBox35.Controls.Add(Me.chkScraperShowStudio) + Me.GroupBox35.Controls.Add(Me.chkScraperShowPremiered) + Me.GroupBox35.Controls.Add(Me.chkScraperShowEGU) + Me.GroupBox35.Controls.Add(Me.chkScraperShowMPAA) + Me.GroupBox35.Controls.Add(Me.chkScraperShowPlot) + Me.GroupBox35.Controls.Add(Me.chkScraperShowGenre) + Me.GroupBox35.Controls.Add(Me.chkScraperShowTitle) + Me.GroupBox35.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox35.Location = New System.Drawing.Point(3, 14) + Me.GroupBox35.Name = "GroupBox35" + Me.GroupBox35.Size = New System.Drawing.Size(213, 96) + Me.GroupBox35.TabIndex = 0 + Me.GroupBox35.TabStop = False + Me.GroupBox35.Text = "Show" + ' + 'chkScraperShowRating + ' + Me.chkScraperShowRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperShowRating.Location = New System.Drawing.Point(130, 29) + Me.chkScraperShowRating.Name = "chkScraperShowRating" + Me.chkScraperShowRating.Size = New System.Drawing.Size(78, 17) + Me.chkScraperShowRating.TabIndex = 6 + Me.chkScraperShowRating.Text = "Rating" + Me.chkScraperShowRating.UseVisualStyleBackColor = True + ' + 'chkScraperShowActors + ' + Me.chkScraperShowActors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperShowActors.Location = New System.Drawing.Point(130, 61) + Me.chkScraperShowActors.Name = "chkScraperShowActors" + Me.chkScraperShowActors.Size = New System.Drawing.Size(78, 17) + Me.chkScraperShowActors.TabIndex = 8 + Me.chkScraperShowActors.Text = "Actors" + Me.chkScraperShowActors.UseVisualStyleBackColor = True + ' + 'chkScraperShowStudio + ' + Me.chkScraperShowStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperShowStudio.Location = New System.Drawing.Point(130, 45) + Me.chkScraperShowStudio.Name = "chkScraperShowStudio" + Me.chkScraperShowStudio.Size = New System.Drawing.Size(78, 17) + Me.chkScraperShowStudio.TabIndex = 7 + Me.chkScraperShowStudio.Text = "Studio" + Me.chkScraperShowStudio.UseVisualStyleBackColor = True + ' + 'chkScraperShowPremiered + ' + Me.chkScraperShowPremiered.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperShowPremiered.Location = New System.Drawing.Point(130, 13) + Me.chkScraperShowPremiered.Name = "chkScraperShowPremiered" + Me.chkScraperShowPremiered.Size = New System.Drawing.Size(78, 17) + Me.chkScraperShowPremiered.TabIndex = 5 + Me.chkScraperShowPremiered.Text = "Premiered" + Me.chkScraperShowPremiered.UseVisualStyleBackColor = True + ' + 'chkScraperShowEGU + ' + Me.chkScraperShowEGU.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperShowEGU.Location = New System.Drawing.Point(6, 29) + Me.chkScraperShowEGU.Name = "chkScraperShowEGU" + Me.chkScraperShowEGU.Size = New System.Drawing.Size(118, 17) + Me.chkScraperShowEGU.TabIndex = 1 + Me.chkScraperShowEGU.Text = "EpisodeGuideURL" + Me.chkScraperShowEGU.UseVisualStyleBackColor = True + ' + 'chkScraperShowMPAA + ' + Me.chkScraperShowMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperShowMPAA.Location = New System.Drawing.Point(6, 61) + Me.chkScraperShowMPAA.Name = "chkScraperShowMPAA" + Me.chkScraperShowMPAA.Size = New System.Drawing.Size(119, 17) + Me.chkScraperShowMPAA.TabIndex = 3 + Me.chkScraperShowMPAA.Text = "MPAA" + Me.chkScraperShowMPAA.UseVisualStyleBackColor = True + ' + 'chkScraperShowPlot + ' + Me.chkScraperShowPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperShowPlot.Location = New System.Drawing.Point(6, 77) + Me.chkScraperShowPlot.Name = "chkScraperShowPlot" + Me.chkScraperShowPlot.Size = New System.Drawing.Size(119, 17) + Me.chkScraperShowPlot.TabIndex = 4 + Me.chkScraperShowPlot.Text = "Plot" + Me.chkScraperShowPlot.UseVisualStyleBackColor = True + ' + 'chkScraperShowGenre + ' + Me.chkScraperShowGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperShowGenre.Location = New System.Drawing.Point(6, 45) + Me.chkScraperShowGenre.Name = "chkScraperShowGenre" + Me.chkScraperShowGenre.Size = New System.Drawing.Size(118, 17) + Me.chkScraperShowGenre.TabIndex = 2 + Me.chkScraperShowGenre.Text = "Genre" + Me.chkScraperShowGenre.UseVisualStyleBackColor = True + ' + 'chkScraperShowTitle + ' + Me.chkScraperShowTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperShowTitle.Location = New System.Drawing.Point(6, 13) + Me.chkScraperShowTitle.Name = "chkScraperShowTitle" + Me.chkScraperShowTitle.Size = New System.Drawing.Size(118, 17) + Me.chkScraperShowTitle.TabIndex = 0 + Me.chkScraperShowTitle.Text = "Title" + Me.chkScraperShowTitle.UseVisualStyleBackColor = True + ' + 'GroupBox34 + ' + Me.GroupBox34.Controls.Add(Me.chkScraperEpActors) + Me.GroupBox34.Controls.Add(Me.chkScraperEpCredits) + Me.GroupBox34.Controls.Add(Me.chkScraperEpDirector) + Me.GroupBox34.Controls.Add(Me.chkScraperEpPlot) + Me.GroupBox34.Controls.Add(Me.chkScraperEpRating) + Me.GroupBox34.Controls.Add(Me.chkScraperEpAired) + Me.GroupBox34.Controls.Add(Me.chkScraperEpTitle) + Me.GroupBox34.Controls.Add(Me.chkScraperEpEpisode) + Me.GroupBox34.Controls.Add(Me.chkScraperEpSeason) + Me.GroupBox34.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox34.Location = New System.Drawing.Point(219, 14) + Me.GroupBox34.Name = "GroupBox34" + Me.GroupBox34.Size = New System.Drawing.Size(181, 96) + Me.GroupBox34.TabIndex = 1 + Me.GroupBox34.TabStop = False + Me.GroupBox34.Text = "Episode" + ' + 'chkScraperEpActors + ' + Me.chkScraperEpActors.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperEpActors.Location = New System.Drawing.Point(94, 60) + Me.chkScraperEpActors.Name = "chkScraperEpActors" + Me.chkScraperEpActors.Size = New System.Drawing.Size(67, 17) + Me.chkScraperEpActors.TabIndex = 0 + Me.chkScraperEpActors.Text = "Actors" + Me.chkScraperEpActors.UseVisualStyleBackColor = True + ' + 'chkScraperEpCredits + ' + Me.chkScraperEpCredits.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperEpCredits.Location = New System.Drawing.Point(94, 44) + Me.chkScraperEpCredits.Name = "chkScraperEpCredits" + Me.chkScraperEpCredits.Size = New System.Drawing.Size(67, 17) + Me.chkScraperEpCredits.TabIndex = 8 + Me.chkScraperEpCredits.Text = "Credits" + Me.chkScraperEpCredits.UseVisualStyleBackColor = True + ' + 'chkScraperEpDirector + ' + Me.chkScraperEpDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperEpDirector.Location = New System.Drawing.Point(94, 28) + Me.chkScraperEpDirector.Name = "chkScraperEpDirector" + Me.chkScraperEpDirector.Size = New System.Drawing.Size(67, 17) + Me.chkScraperEpDirector.TabIndex = 7 + Me.chkScraperEpDirector.Text = "Director" + Me.chkScraperEpDirector.UseVisualStyleBackColor = True + ' + 'chkScraperEpPlot + ' + Me.chkScraperEpPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperEpPlot.Location = New System.Drawing.Point(94, 12) + Me.chkScraperEpPlot.Name = "chkScraperEpPlot" + Me.chkScraperEpPlot.Size = New System.Drawing.Size(67, 17) + Me.chkScraperEpPlot.TabIndex = 6 + Me.chkScraperEpPlot.Text = "Plot" + Me.chkScraperEpPlot.UseVisualStyleBackColor = True + ' + 'chkScraperEpRating + ' + Me.chkScraperEpRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperEpRating.Location = New System.Drawing.Point(6, 77) + Me.chkScraperEpRating.Name = "chkScraperEpRating" + Me.chkScraperEpRating.Size = New System.Drawing.Size(67, 17) + Me.chkScraperEpRating.TabIndex = 5 + Me.chkScraperEpRating.Text = "Rating" + Me.chkScraperEpRating.UseVisualStyleBackColor = True + ' + 'chkScraperEpAired + ' + Me.chkScraperEpAired.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperEpAired.Location = New System.Drawing.Point(6, 61) + Me.chkScraperEpAired.Name = "chkScraperEpAired" + Me.chkScraperEpAired.Size = New System.Drawing.Size(67, 17) + Me.chkScraperEpAired.TabIndex = 4 + Me.chkScraperEpAired.Text = "Aired" + Me.chkScraperEpAired.UseVisualStyleBackColor = True + ' + 'chkScraperEpTitle + ' + Me.chkScraperEpTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperEpTitle.Location = New System.Drawing.Point(6, 13) + Me.chkScraperEpTitle.Name = "chkScraperEpTitle" + Me.chkScraperEpTitle.Size = New System.Drawing.Size(67, 17) + Me.chkScraperEpTitle.TabIndex = 0 + Me.chkScraperEpTitle.Text = "Title" + Me.chkScraperEpTitle.UseVisualStyleBackColor = True + ' + 'chkScraperEpEpisode + ' + Me.chkScraperEpEpisode.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperEpEpisode.Location = New System.Drawing.Point(6, 45) + Me.chkScraperEpEpisode.Name = "chkScraperEpEpisode" + Me.chkScraperEpEpisode.Size = New System.Drawing.Size(67, 17) + Me.chkScraperEpEpisode.TabIndex = 3 + Me.chkScraperEpEpisode.Text = "Episode" + Me.chkScraperEpEpisode.UseVisualStyleBackColor = True + ' + 'chkScraperEpSeason + ' + Me.chkScraperEpSeason.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScraperEpSeason.Location = New System.Drawing.Point(6, 29) + Me.chkScraperEpSeason.Name = "chkScraperEpSeason" + Me.chkScraperEpSeason.Size = New System.Drawing.Size(67, 17) + Me.chkScraperEpSeason.TabIndex = 2 + Me.chkScraperEpSeason.Text = "Season" + Me.chkScraperEpSeason.UseVisualStyleBackColor = True + ' + 'GroupBox33 + ' + Me.GroupBox33.Controls.Add(Me.gbEpLocks) + Me.GroupBox33.Controls.Add(Me.gbShowLocks) + Me.GroupBox33.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox33.Location = New System.Drawing.Point(208, 6) + Me.GroupBox33.Name = "GroupBox33" + Me.GroupBox33.Size = New System.Drawing.Size(191, 243) + Me.GroupBox33.TabIndex = 1 + Me.GroupBox33.TabStop = False + Me.GroupBox33.Text = "Global Locks" + ' + 'gbEpLocks + ' + Me.gbEpLocks.Controls.Add(Me.chkEpLockTitle) + Me.gbEpLocks.Controls.Add(Me.chkEpLockRating) + Me.gbEpLocks.Controls.Add(Me.chkEpLockPlot) + Me.gbEpLocks.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbEpLocks.Location = New System.Drawing.Point(5, 112) + Me.gbEpLocks.Name = "gbEpLocks" + Me.gbEpLocks.Size = New System.Drawing.Size(181, 66) + Me.gbEpLocks.TabIndex = 1 + Me.gbEpLocks.TabStop = False + Me.gbEpLocks.Text = "Episode" + ' + 'chkEpLockTitle + ' + Me.chkEpLockTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpLockTitle.Location = New System.Drawing.Point(6, 15) + Me.chkEpLockTitle.Name = "chkEpLockTitle" + Me.chkEpLockTitle.Size = New System.Drawing.Size(166, 17) + Me.chkEpLockTitle.TabIndex = 0 + Me.chkEpLockTitle.Text = "Lock Title" + Me.chkEpLockTitle.UseVisualStyleBackColor = True + ' + 'chkEpLockRating + ' + Me.chkEpLockRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpLockRating.Location = New System.Drawing.Point(6, 47) + Me.chkEpLockRating.Name = "chkEpLockRating" + Me.chkEpLockRating.Size = New System.Drawing.Size(168, 17) + Me.chkEpLockRating.TabIndex = 2 + Me.chkEpLockRating.Text = "Lock Rating" + Me.chkEpLockRating.UseVisualStyleBackColor = True + ' + 'chkEpLockPlot + ' + Me.chkEpLockPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpLockPlot.Location = New System.Drawing.Point(6, 31) + Me.chkEpLockPlot.Name = "chkEpLockPlot" + Me.chkEpLockPlot.Size = New System.Drawing.Size(166, 17) + Me.chkEpLockPlot.TabIndex = 1 + Me.chkEpLockPlot.Text = "Lock Plot" + Me.chkEpLockPlot.UseVisualStyleBackColor = True + ' + 'gbShowLocks + ' + Me.gbShowLocks.Controls.Add(Me.chkShowLockPlot) + Me.gbShowLocks.Controls.Add(Me.chkShowLockGenre) + Me.gbShowLocks.Controls.Add(Me.chkShowLockStudio) + Me.gbShowLocks.Controls.Add(Me.chkShowLockRating) + Me.gbShowLocks.Controls.Add(Me.chkShowLockTitle) + Me.gbShowLocks.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbShowLocks.Location = New System.Drawing.Point(5, 13) + Me.gbShowLocks.Name = "gbShowLocks" + Me.gbShowLocks.Size = New System.Drawing.Size(181, 96) + Me.gbShowLocks.TabIndex = 0 + Me.gbShowLocks.TabStop = False + Me.gbShowLocks.Text = "Show" + ' + 'chkShowLockPlot + ' + Me.chkShowLockPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowLockPlot.Location = New System.Drawing.Point(6, 29) + Me.chkShowLockPlot.Name = "chkShowLockPlot" + Me.chkShowLockPlot.Size = New System.Drawing.Size(168, 17) + Me.chkShowLockPlot.TabIndex = 1 + Me.chkShowLockPlot.Text = "Lock Plot" + Me.chkShowLockPlot.UseVisualStyleBackColor = True + ' + 'chkShowLockGenre + ' + Me.chkShowLockGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowLockGenre.Location = New System.Drawing.Point(6, 61) + Me.chkShowLockGenre.Name = "chkShowLockGenre" + Me.chkShowLockGenre.Size = New System.Drawing.Size(168, 17) + Me.chkShowLockGenre.TabIndex = 3 + Me.chkShowLockGenre.Text = "Lock Genre" + Me.chkShowLockGenre.UseVisualStyleBackColor = True + ' + 'chkShowLockStudio + ' + Me.chkShowLockStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowLockStudio.Location = New System.Drawing.Point(6, 77) + Me.chkShowLockStudio.Name = "chkShowLockStudio" + Me.chkShowLockStudio.Size = New System.Drawing.Size(168, 17) + Me.chkShowLockStudio.TabIndex = 4 + Me.chkShowLockStudio.Text = "Lock Studio" + Me.chkShowLockStudio.UseVisualStyleBackColor = True + ' + 'chkShowLockRating + ' + Me.chkShowLockRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowLockRating.Location = New System.Drawing.Point(6, 45) + Me.chkShowLockRating.Name = "chkShowLockRating" + Me.chkShowLockRating.Size = New System.Drawing.Size(168, 17) + Me.chkShowLockRating.TabIndex = 2 + Me.chkShowLockRating.Text = "Lock Rating" + Me.chkShowLockRating.UseVisualStyleBackColor = True + ' + 'chkShowLockTitle + ' + Me.chkShowLockTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowLockTitle.Location = New System.Drawing.Point(6, 13) + Me.chkShowLockTitle.Name = "chkShowLockTitle" + Me.chkShowLockTitle.Size = New System.Drawing.Size(168, 17) + Me.chkShowLockTitle.TabIndex = 0 + Me.chkShowLockTitle.Text = "Lock Title" + Me.chkShowLockTitle.UseVisualStyleBackColor = True + ' + 'GroupBox31 + ' + Me.GroupBox31.Controls.Add(Me.gbTVMIDefaults) + Me.GroupBox31.Controls.Add(Me.cboTVMetaDataOverlay) + Me.GroupBox31.Controls.Add(Me.Label50) + Me.GroupBox31.Controls.Add(Me.chkTVScanMetaData) + Me.GroupBox31.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox31.Location = New System.Drawing.Point(403, 6) + Me.GroupBox31.Name = "GroupBox31" + Me.GroupBox31.Size = New System.Drawing.Size(208, 243) + Me.GroupBox31.TabIndex = 2 + Me.GroupBox31.TabStop = False + Me.GroupBox31.Text = "Meta Data" + ' + 'gbTVMIDefaults + ' + Me.gbTVMIDefaults.Controls.Add(Me.lstTVMetaData) + Me.gbTVMIDefaults.Controls.Add(Me.txtTVDefFIExt) + Me.gbTVMIDefaults.Controls.Add(Me.Label49) + Me.gbTVMIDefaults.Controls.Add(Me.btnRemoveTVMetaDataFT) + Me.gbTVMIDefaults.Controls.Add(Me.btnEditTVMetaDataFT) + Me.gbTVMIDefaults.Controls.Add(Me.btnNewTVMetaDataFT) + Me.gbTVMIDefaults.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbTVMIDefaults.Location = New System.Drawing.Point(12, 93) + Me.gbTVMIDefaults.Name = "gbTVMIDefaults" + Me.gbTVMIDefaults.Size = New System.Drawing.Size(183, 144) + Me.gbTVMIDefaults.TabIndex = 3 + Me.gbTVMIDefaults.TabStop = False + Me.gbTVMIDefaults.Text = "Defaults by File Type" + ' + 'lstTVMetaData + ' + Me.lstTVMetaData.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstTVMetaData.FormattingEnabled = True + Me.lstTVMetaData.Location = New System.Drawing.Point(10, 16) + Me.lstTVMetaData.Name = "lstTVMetaData" + Me.lstTVMetaData.Size = New System.Drawing.Size(165, 95) + Me.lstTVMetaData.TabIndex = 0 + ' + 'txtTVDefFIExt + ' + Me.txtTVDefFIExt.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTVDefFIExt.Location = New System.Drawing.Point(73, 116) + Me.txtTVDefFIExt.Name = "txtTVDefFIExt" + Me.txtTVDefFIExt.Size = New System.Drawing.Size(35, 22) + Me.txtTVDefFIExt.TabIndex = 2 + ' + 'Label49 + ' + Me.Label49.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label49.Location = New System.Drawing.Point(8, 116) + Me.Label49.Name = "Label49" + Me.Label49.Size = New System.Drawing.Size(66, 19) + Me.Label49.TabIndex = 1 + Me.Label49.Text = "File Type" + Me.Label49.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'btnRemoveTVMetaDataFT + ' + Me.btnRemoveTVMetaDataFT.Enabled = False + Me.btnRemoveTVMetaDataFT.Image = CType(resources.GetObject("btnRemoveTVMetaDataFT.Image"), System.Drawing.Image) + Me.btnRemoveTVMetaDataFT.Location = New System.Drawing.Point(153, 115) + Me.btnRemoveTVMetaDataFT.Name = "btnRemoveTVMetaDataFT" + Me.btnRemoveTVMetaDataFT.Size = New System.Drawing.Size(23, 23) + Me.btnRemoveTVMetaDataFT.TabIndex = 4 + Me.btnRemoveTVMetaDataFT.UseVisualStyleBackColor = True + ' + 'btnEditTVMetaDataFT + ' + Me.btnEditTVMetaDataFT.Enabled = False + Me.btnEditTVMetaDataFT.Image = CType(resources.GetObject("btnEditTVMetaDataFT.Image"), System.Drawing.Image) + Me.btnEditTVMetaDataFT.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnEditTVMetaDataFT.Location = New System.Drawing.Point(130, 115) + Me.btnEditTVMetaDataFT.Name = "btnEditTVMetaDataFT" + Me.btnEditTVMetaDataFT.Size = New System.Drawing.Size(23, 23) + Me.btnEditTVMetaDataFT.TabIndex = 3 + Me.btnEditTVMetaDataFT.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnEditTVMetaDataFT.UseVisualStyleBackColor = True + ' + 'btnNewTVMetaDataFT + ' + Me.btnNewTVMetaDataFT.Enabled = False + Me.btnNewTVMetaDataFT.Image = CType(resources.GetObject("btnNewTVMetaDataFT.Image"), System.Drawing.Image) + Me.btnNewTVMetaDataFT.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnNewTVMetaDataFT.Location = New System.Drawing.Point(108, 115) + Me.btnNewTVMetaDataFT.Name = "btnNewTVMetaDataFT" + Me.btnNewTVMetaDataFT.Size = New System.Drawing.Size(23, 23) + Me.btnNewTVMetaDataFT.TabIndex = 29 + Me.btnNewTVMetaDataFT.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnNewTVMetaDataFT.UseVisualStyleBackColor = True + ' + 'cboTVMetaDataOverlay + ' + Me.cboTVMetaDataOverlay.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cboTVMetaDataOverlay.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cboTVMetaDataOverlay.FormattingEnabled = True + Me.cboTVMetaDataOverlay.Location = New System.Drawing.Point(13, 62) + Me.cboTVMetaDataOverlay.Name = "cboTVMetaDataOverlay" + Me.cboTVMetaDataOverlay.Size = New System.Drawing.Size(182, 21) + Me.cboTVMetaDataOverlay.Sorted = True + Me.cboTVMetaDataOverlay.TabIndex = 2 + ' + 'Label50 + ' + Me.Label50.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label50.Location = New System.Drawing.Point(4, 35) + Me.Label50.Name = "Label50" + Me.Label50.Size = New System.Drawing.Size(202, 29) + Me.Label50.TabIndex = 1 + Me.Label50.Text = "Display Overlay if Video Contains an Audio Stream With the Following Language:" + Me.Label50.TextAlign = System.Drawing.ContentAlignment.TopCenter + ' + 'chkTVScanMetaData + ' + Me.chkTVScanMetaData.AutoSize = True + Me.chkTVScanMetaData.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTVScanMetaData.Location = New System.Drawing.Point(5, 16) + Me.chkTVScanMetaData.Name = "chkTVScanMetaData" + Me.chkTVScanMetaData.Size = New System.Drawing.Size(106, 17) + Me.chkTVScanMetaData.TabIndex = 0 + Me.chkTVScanMetaData.Text = "Scan Meta Data" + Me.chkTVScanMetaData.UseVisualStyleBackColor = True + ' + 'gbTVScraperOptions + ' + Me.gbTVScraperOptions.Controls.Add(Me.lblOrdering) + Me.gbTVScraperOptions.Controls.Add(Me.cbOrdering) + Me.gbTVScraperOptions.Controls.Add(Me.lblTVUpdate) + Me.gbTVScraperOptions.Controls.Add(Me.cboTVUpdate) + Me.gbTVScraperOptions.Controls.Add(Me.lblAPIKey) + Me.gbTVScraperOptions.Controls.Add(Me.lblTVDBMirror) + Me.gbTVScraperOptions.Controls.Add(Me.txtAPIKey) + Me.gbTVScraperOptions.Controls.Add(Me.txtTVDBMirror) + Me.gbTVScraperOptions.Controls.Add(Me.gbLanguage) + Me.gbTVScraperOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbTVScraperOptions.Location = New System.Drawing.Point(5, 6) + Me.gbTVScraperOptions.Name = "gbTVScraperOptions" + Me.gbTVScraperOptions.Size = New System.Drawing.Size(200, 359) + Me.gbTVScraperOptions.TabIndex = 0 + Me.gbTVScraperOptions.TabStop = False + Me.gbTVScraperOptions.Text = "Options" + ' + 'lblOrdering + ' + Me.lblOrdering.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblOrdering.Location = New System.Drawing.Point(12, 284) + Me.lblOrdering.Name = "lblOrdering" + Me.lblOrdering.Size = New System.Drawing.Size(177, 13) + Me.lblOrdering.TabIndex = 7 + Me.lblOrdering.Text = "Default Episode Ordering:" + Me.lblOrdering.TextAlign = System.Drawing.ContentAlignment.TopCenter + ' + 'cbOrdering + ' + Me.cbOrdering.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbOrdering.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbOrdering.FormattingEnabled = True + Me.cbOrdering.Location = New System.Drawing.Point(17, 304) + Me.cbOrdering.Name = "cbOrdering" + Me.cbOrdering.Size = New System.Drawing.Size(166, 21) + Me.cbOrdering.TabIndex = 8 + ' + 'lblTVUpdate + ' + Me.lblTVUpdate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTVUpdate.Location = New System.Drawing.Point(5, 217) + Me.lblTVUpdate.Name = "lblTVUpdate" + Me.lblTVUpdate.Size = New System.Drawing.Size(190, 31) + Me.lblTVUpdate.TabIndex = 5 + Me.lblTVUpdate.Text = "Re-download Show Information Every:" + Me.lblTVUpdate.TextAlign = System.Drawing.ContentAlignment.TopCenter + ' + 'cboTVUpdate + ' + Me.cboTVUpdate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cboTVUpdate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cboTVUpdate.FormattingEnabled = True + Me.cboTVUpdate.Location = New System.Drawing.Point(17, 248) + Me.cboTVUpdate.Name = "cboTVUpdate" + Me.cboTVUpdate.Size = New System.Drawing.Size(166, 21) + Me.cboTVUpdate.TabIndex = 6 + ' + 'lblAPIKey + ' + Me.lblAPIKey.AutoSize = True + Me.lblAPIKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblAPIKey.Location = New System.Drawing.Point(4, 60) + Me.lblAPIKey.Name = "lblAPIKey" + Me.lblAPIKey.Size = New System.Drawing.Size(73, 13) + Me.lblAPIKey.TabIndex = 2 + Me.lblAPIKey.Text = "TVDB APIKey:" + ' + 'lblTVDBMirror + ' + Me.lblTVDBMirror.AutoSize = True + Me.lblTVDBMirror.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTVDBMirror.Location = New System.Drawing.Point(4, 17) + Me.lblTVDBMirror.Name = "lblTVDBMirror" + Me.lblTVDBMirror.Size = New System.Drawing.Size(72, 13) + Me.lblTVDBMirror.TabIndex = 0 + Me.lblTVDBMirror.Text = "TVDB Mirror:" + ' + 'txtAPIKey + ' + Me.txtAPIKey.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtAPIKey.Location = New System.Drawing.Point(6, 75) + Me.txtAPIKey.Name = "txtAPIKey" + Me.txtAPIKey.Size = New System.Drawing.Size(189, 22) + Me.txtAPIKey.TabIndex = 3 + ' + 'txtTVDBMirror + ' + Me.txtTVDBMirror.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtTVDBMirror.Location = New System.Drawing.Point(6, 32) + Me.txtTVDBMirror.Name = "txtTVDBMirror" + Me.txtTVDBMirror.Size = New System.Drawing.Size(189, 22) + Me.txtTVDBMirror.TabIndex = 1 + ' + 'gbLanguage + ' + Me.gbLanguage.Controls.Add(Me.lblTVLanguagePreferred) + Me.gbLanguage.Controls.Add(Me.btnTVLanguageFetch) + Me.gbLanguage.Controls.Add(Me.cbTVLanguage) + Me.gbLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbLanguage.Location = New System.Drawing.Point(5, 104) + Me.gbLanguage.Name = "gbLanguage" + Me.gbLanguage.Size = New System.Drawing.Size(190, 100) + Me.gbLanguage.TabIndex = 4 + Me.gbLanguage.TabStop = False + Me.gbLanguage.Text = "Language" + ' + 'lblTVLanguagePreferred + ' + Me.lblTVLanguagePreferred.AutoSize = True + Me.lblTVLanguagePreferred.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTVLanguagePreferred.Location = New System.Drawing.Point(10, 24) + Me.lblTVLanguagePreferred.Name = "lblTVLanguagePreferred" + Me.lblTVLanguagePreferred.Size = New System.Drawing.Size(111, 13) + Me.lblTVLanguagePreferred.TabIndex = 0 + Me.lblTVLanguagePreferred.Text = "Preferred Language:" + ' + 'btnTVLanguageFetch + ' + Me.btnTVLanguageFetch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnTVLanguageFetch.Location = New System.Drawing.Point(12, 68) + Me.btnTVLanguageFetch.Name = "btnTVLanguageFetch" + Me.btnTVLanguageFetch.Size = New System.Drawing.Size(166, 23) + Me.btnTVLanguageFetch.TabIndex = 2 + Me.btnTVLanguageFetch.Text = "Fetch Available Languages" + Me.btnTVLanguageFetch.UseVisualStyleBackColor = True + ' + 'cbTVLanguage + ' + Me.cbTVLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTVLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbTVLanguage.Location = New System.Drawing.Point(12, 39) + Me.cbTVLanguage.Name = "cbTVLanguage" + Me.cbTVLanguage.Size = New System.Drawing.Size(166, 21) + Me.cbTVLanguage.TabIndex = 1 + ' + 'gbOptions + ' + Me.gbOptions.Controls.Add(Me.chkCertification) + Me.gbOptions.Controls.Add(Me.chkTop250) + Me.gbOptions.Controls.Add(Me.chkCountry) + Me.gbOptions.Controls.Add(Me.txtGenreLimit) + Me.gbOptions.Controls.Add(Me.lblLimit2) + Me.gbOptions.Controls.Add(Me.txtActorLimit) + Me.gbOptions.Controls.Add(Me.lblLimit) + Me.gbOptions.Controls.Add(Me.chkCrew) + Me.gbOptions.Controls.Add(Me.chkMusicBy) + Me.gbOptions.Controls.Add(Me.chkProducers) + Me.gbOptions.Controls.Add(Me.chkWriters) + Me.gbOptions.Controls.Add(Me.chkStudio) + Me.gbOptions.Controls.Add(Me.chkRuntime) + Me.gbOptions.Controls.Add(Me.chkPlot) + Me.gbOptions.Controls.Add(Me.chkOutline) + Me.gbOptions.Controls.Add(Me.chkGenre) + Me.gbOptions.Controls.Add(Me.chkDirector) + Me.gbOptions.Controls.Add(Me.chkTagline) + Me.gbOptions.Controls.Add(Me.chkCast) + Me.gbOptions.Controls.Add(Me.chkVotes) + Me.gbOptions.Controls.Add(Me.chkTrailer) + Me.gbOptions.Controls.Add(Me.chkRating) + Me.gbOptions.Controls.Add(Me.chkRelease) + Me.gbOptions.Controls.Add(Me.chkMPAA) + Me.gbOptions.Controls.Add(Me.chkYear) + Me.gbOptions.Controls.Add(Me.chkTitle) + Me.gbOptions.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbOptions.Location = New System.Drawing.Point(8, 227) + Me.gbOptions.Name = "gbOptions" + Me.gbOptions.Size = New System.Drawing.Size(302, 170) + Me.gbOptions.TabIndex = 67 + Me.gbOptions.TabStop = False + Me.gbOptions.Text = "Scraper Fields - Global" + ' + 'chkCertification + ' + Me.chkCertification.AutoSize = True + Me.chkCertification.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCertification.Location = New System.Drawing.Point(6, 76) + Me.chkCertification.Name = "chkCertification" + Me.chkCertification.Size = New System.Drawing.Size(89, 17) + Me.chkCertification.TabIndex = 24 + Me.chkCertification.Text = "Certification" + Me.chkCertification.UseVisualStyleBackColor = True + ' + 'chkTop250 + ' + Me.chkTop250.AutoSize = True + Me.chkTop250.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTop250.Location = New System.Drawing.Point(205, 133) + Me.chkTop250.Name = "chkTop250" + Me.chkTop250.Size = New System.Drawing.Size(66, 17) + Me.chkTop250.TabIndex = 23 + Me.chkTop250.Text = "Top 250" + Me.chkTop250.UseVisualStyleBackColor = True + ' + 'chkCountry + ' + Me.chkCountry.AutoSize = True + Me.chkCountry.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCountry.Location = New System.Drawing.Point(205, 152) + Me.chkCountry.Name = "chkCountry" + Me.chkCountry.Size = New System.Drawing.Size(67, 17) + Me.chkCountry.TabIndex = 25 + Me.chkCountry.Text = "Country" + Me.chkCountry.UseVisualStyleBackColor = True + ' + 'txtGenreLimit + ' + Me.txtGenreLimit.Enabled = False + Me.txtGenreLimit.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtGenreLimit.Location = New System.Drawing.Point(255, 55) + Me.txtGenreLimit.Name = "txtGenreLimit" + Me.txtGenreLimit.Size = New System.Drawing.Size(39, 22) + Me.txtGenreLimit.TabIndex = 21 + ' + 'lblLimit2 + ' + Me.lblLimit2.AutoSize = True + Me.lblLimit2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblLimit2.Location = New System.Drawing.Point(223, 58) + Me.lblLimit2.Name = "lblLimit2" + Me.lblLimit2.Size = New System.Drawing.Size(34, 13) + Me.lblLimit2.TabIndex = 22 + Me.lblLimit2.Text = "Limit:" + Me.lblLimit2.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'txtActorLimit + ' + Me.txtActorLimit.Enabled = False + Me.txtActorLimit.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtActorLimit.Location = New System.Drawing.Point(151, 112) + Me.txtActorLimit.Name = "txtActorLimit" + Me.txtActorLimit.Size = New System.Drawing.Size(39, 22) + Me.txtActorLimit.TabIndex = 19 + ' + 'lblLimit + ' + Me.lblLimit.AutoSize = True + Me.lblLimit.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblLimit.Location = New System.Drawing.Point(118, 115) + Me.lblLimit.Name = "lblLimit" + Me.lblLimit.Size = New System.Drawing.Size(34, 13) + Me.lblLimit.TabIndex = 20 + Me.lblLimit.Text = "Limit:" + Me.lblLimit.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'chkCrew + ' + Me.chkCrew.AutoSize = True + Me.chkCrew.Enabled = False + Me.chkCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCrew.Location = New System.Drawing.Point(205, 114) + Me.chkCrew.Name = "chkCrew" + Me.chkCrew.Size = New System.Drawing.Size(85, 17) + Me.chkCrew.TabIndex = 18 + Me.chkCrew.Text = "Other Crew" + Me.chkCrew.UseVisualStyleBackColor = True + ' + 'chkMusicBy + ' + Me.chkMusicBy.AutoSize = True + Me.chkMusicBy.Enabled = False + Me.chkMusicBy.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMusicBy.Location = New System.Drawing.Point(205, 95) + Me.chkMusicBy.Name = "chkMusicBy" + Me.chkMusicBy.Size = New System.Drawing.Size(71, 17) + Me.chkMusicBy.TabIndex = 17 + Me.chkMusicBy.Text = "Music By" + Me.chkMusicBy.UseVisualStyleBackColor = True + ' + 'chkProducers + ' + Me.chkProducers.AutoSize = True + Me.chkProducers.Enabled = False + Me.chkProducers.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkProducers.Location = New System.Drawing.Point(205, 19) + Me.chkProducers.Name = "chkProducers" + Me.chkProducers.Size = New System.Drawing.Size(77, 17) + Me.chkProducers.TabIndex = 16 + Me.chkProducers.Text = "Producers" + Me.chkProducers.UseVisualStyleBackColor = True + ' + 'chkWriters + ' + Me.chkWriters.AutoSize = True + Me.chkWriters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkWriters.Location = New System.Drawing.Point(101, 152) + Me.chkWriters.Name = "chkWriters" + Me.chkWriters.Size = New System.Drawing.Size(63, 17) + Me.chkWriters.TabIndex = 15 + Me.chkWriters.Text = "Writers" + Me.chkWriters.UseVisualStyleBackColor = True + ' + 'chkStudio + ' + Me.chkStudio.AutoSize = True + Me.chkStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkStudio.Location = New System.Drawing.Point(101, 19) + Me.chkStudio.Name = "chkStudio" + Me.chkStudio.Size = New System.Drawing.Size(60, 17) + Me.chkStudio.TabIndex = 14 + Me.chkStudio.Text = "Studio" + Me.chkStudio.UseVisualStyleBackColor = True + ' + 'chkRuntime + ' + Me.chkRuntime.AutoSize = True + Me.chkRuntime.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRuntime.Location = New System.Drawing.Point(6, 114) + Me.chkRuntime.Name = "chkRuntime" + Me.chkRuntime.Size = New System.Drawing.Size(69, 17) + Me.chkRuntime.TabIndex = 13 + Me.chkRuntime.Text = "Runtime" + Me.chkRuntime.UseVisualStyleBackColor = True + ' + 'chkPlot + ' + Me.chkPlot.AutoSize = True + Me.chkPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkPlot.Location = New System.Drawing.Point(101, 76) + Me.chkPlot.Name = "chkPlot" + Me.chkPlot.Size = New System.Drawing.Size(46, 17) + Me.chkPlot.TabIndex = 12 + Me.chkPlot.Text = "Plot" + Me.chkPlot.UseVisualStyleBackColor = True + ' + 'chkOutline + ' + Me.chkOutline.AutoSize = True + Me.chkOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutline.Location = New System.Drawing.Point(101, 57) + Me.chkOutline.Name = "chkOutline" + Me.chkOutline.Size = New System.Drawing.Size(65, 17) + Me.chkOutline.TabIndex = 11 + Me.chkOutline.Text = "Outline" + Me.chkOutline.UseVisualStyleBackColor = True + ' + 'chkGenre + ' + Me.chkGenre.AutoSize = True + Me.chkGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkGenre.Location = New System.Drawing.Point(205, 38) + Me.chkGenre.Name = "chkGenre" + Me.chkGenre.Size = New System.Drawing.Size(57, 17) + Me.chkGenre.TabIndex = 10 + Me.chkGenre.Text = "Genre" + Me.chkGenre.UseVisualStyleBackColor = True + ' + 'chkDirector + ' + Me.chkDirector.AutoSize = True + Me.chkDirector.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkDirector.Location = New System.Drawing.Point(101, 133) + Me.chkDirector.Name = "chkDirector" + Me.chkDirector.Size = New System.Drawing.Size(67, 17) + Me.chkDirector.TabIndex = 9 + Me.chkDirector.Text = "Director" + Me.chkDirector.UseVisualStyleBackColor = True + ' + 'chkTagline + ' + Me.chkTagline.AutoSize = True + Me.chkTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTagline.Location = New System.Drawing.Point(101, 38) + Me.chkTagline.Name = "chkTagline" + Me.chkTagline.Size = New System.Drawing.Size(63, 17) + Me.chkTagline.TabIndex = 8 + Me.chkTagline.Text = "Tagline" + Me.chkTagline.UseVisualStyleBackColor = True + ' + 'chkCast + ' + Me.chkCast.AutoSize = True + Me.chkCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCast.Location = New System.Drawing.Point(101, 95) + Me.chkCast.Name = "chkCast" + Me.chkCast.Size = New System.Drawing.Size(48, 17) + Me.chkCast.TabIndex = 7 + Me.chkCast.Text = "Cast" + Me.chkCast.UseVisualStyleBackColor = True + ' + 'chkVotes + ' + Me.chkVotes.AutoSize = True + Me.chkVotes.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVotes.Location = New System.Drawing.Point(6, 152) + Me.chkVotes.Name = "chkVotes" + Me.chkVotes.Size = New System.Drawing.Size(55, 17) + Me.chkVotes.TabIndex = 6 + Me.chkVotes.Text = "Votes" + Me.chkVotes.UseVisualStyleBackColor = True + ' + 'chkTrailer + ' + Me.chkTrailer.AutoSize = True + Me.chkTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTrailer.Location = New System.Drawing.Point(205, 76) + Me.chkTrailer.Name = "chkTrailer" + Me.chkTrailer.Size = New System.Drawing.Size(57, 17) + Me.chkTrailer.TabIndex = 5 + Me.chkTrailer.Text = "Trailer" + Me.chkTrailer.UseVisualStyleBackColor = True + ' + 'chkRating + ' + Me.chkRating.AutoSize = True + Me.chkRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRating.Location = New System.Drawing.Point(6, 133) + Me.chkRating.Name = "chkRating" + Me.chkRating.Size = New System.Drawing.Size(60, 17) + Me.chkRating.TabIndex = 4 + Me.chkRating.Text = "Rating" + Me.chkRating.UseVisualStyleBackColor = True + ' + 'chkRelease + ' + Me.chkRelease.AutoSize = True + Me.chkRelease.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkRelease.Location = New System.Drawing.Point(6, 95) + Me.chkRelease.Name = "chkRelease" + Me.chkRelease.Size = New System.Drawing.Size(92, 17) + Me.chkRelease.TabIndex = 3 + Me.chkRelease.Text = "Release Date" + Me.chkRelease.UseVisualStyleBackColor = True + ' + 'chkMPAA + ' + Me.chkMPAA.AutoSize = True + Me.chkMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMPAA.Location = New System.Drawing.Point(6, 57) + Me.chkMPAA.Name = "chkMPAA" + Me.chkMPAA.Size = New System.Drawing.Size(56, 17) + Me.chkMPAA.TabIndex = 2 + Me.chkMPAA.Text = "MPAA" + Me.chkMPAA.UseVisualStyleBackColor = True + ' + 'chkYear + ' + Me.chkYear.AutoSize = True + Me.chkYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkYear.Location = New System.Drawing.Point(6, 38) + Me.chkYear.Name = "chkYear" + Me.chkYear.Size = New System.Drawing.Size(47, 17) + Me.chkYear.TabIndex = 1 + Me.chkYear.Text = "Year" + Me.chkYear.UseVisualStyleBackColor = True + ' + 'chkTitle + ' + Me.chkTitle.AutoSize = True + Me.chkTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkTitle.Location = New System.Drawing.Point(6, 19) + Me.chkTitle.Name = "chkTitle" + Me.chkTitle.Size = New System.Drawing.Size(47, 17) + Me.chkTitle.TabIndex = 0 + Me.chkTitle.Text = "Title" + Me.chkTitle.UseVisualStyleBackColor = True + ' + 'GroupBox26 + ' + Me.GroupBox26.Controls.Add(Me.GroupBox28) + Me.GroupBox26.Controls.Add(Me.chkIFOScan) + Me.GroupBox26.Controls.Add(Me.cbLanguages) + Me.GroupBox26.Controls.Add(Me.Label31) + Me.GroupBox26.Controls.Add(Me.gbRTFormat) + Me.GroupBox26.Controls.Add(Me.chkScanMediaInfo) + Me.GroupBox26.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox26.Location = New System.Drawing.Point(168, 6) + Me.GroupBox26.Name = "GroupBox26" + Me.GroupBox26.Size = New System.Drawing.Size(434, 176) + Me.GroupBox26.TabIndex = 63 + Me.GroupBox26.TabStop = False + Me.GroupBox26.Text = "Meta Data" + ' + 'GroupBox28 + ' + Me.GroupBox28.Controls.Add(Me.lstMetaData) + Me.GroupBox28.Controls.Add(Me.txtDefFIExt) + Me.GroupBox28.Controls.Add(Me.Label34) + Me.GroupBox28.Controls.Add(Me.btnRemoveMetaDataFT) + Me.GroupBox28.Controls.Add(Me.btnEditMetaDataFT) + Me.GroupBox28.Controls.Add(Me.btnNewMetaDataFT) + Me.GroupBox28.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox28.Location = New System.Drawing.Point(249, 10) + Me.GroupBox28.Name = "GroupBox28" + Me.GroupBox28.Size = New System.Drawing.Size(183, 144) + Me.GroupBox28.TabIndex = 8 + Me.GroupBox28.TabStop = False + Me.GroupBox28.Text = "Defaults by File Type" + ' + 'lstMetaData + ' + Me.lstMetaData.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lstMetaData.FormattingEnabled = True + Me.lstMetaData.Location = New System.Drawing.Point(9, 15) + Me.lstMetaData.Name = "lstMetaData" + Me.lstMetaData.Size = New System.Drawing.Size(165, 95) + Me.lstMetaData.TabIndex = 34 + ' + 'txtDefFIExt + ' + Me.txtDefFIExt.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtDefFIExt.Location = New System.Drawing.Point(72, 115) + Me.txtDefFIExt.Name = "txtDefFIExt" + Me.txtDefFIExt.Size = New System.Drawing.Size(35, 22) + Me.txtDefFIExt.TabIndex = 33 + ' + 'Label34 + ' + Me.Label34.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label34.Location = New System.Drawing.Point(7, 118) + Me.Label34.Name = "Label34" + Me.Label34.Size = New System.Drawing.Size(63, 19) + Me.Label34.TabIndex = 32 + Me.Label34.Text = "File Type:" + Me.Label34.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'btnRemoveMetaDataFT + ' + Me.btnRemoveMetaDataFT.Enabled = False + Me.btnRemoveMetaDataFT.Image = CType(resources.GetObject("btnRemoveMetaDataFT.Image"), System.Drawing.Image) + Me.btnRemoveMetaDataFT.Location = New System.Drawing.Point(152, 114) + Me.btnRemoveMetaDataFT.Name = "btnRemoveMetaDataFT" + Me.btnRemoveMetaDataFT.Size = New System.Drawing.Size(23, 23) + Me.btnRemoveMetaDataFT.TabIndex = 31 + Me.btnRemoveMetaDataFT.UseVisualStyleBackColor = True + ' + 'btnEditMetaDataFT + ' + Me.btnEditMetaDataFT.Enabled = False + Me.btnEditMetaDataFT.Image = CType(resources.GetObject("btnEditMetaDataFT.Image"), System.Drawing.Image) + Me.btnEditMetaDataFT.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnEditMetaDataFT.Location = New System.Drawing.Point(129, 114) + Me.btnEditMetaDataFT.Name = "btnEditMetaDataFT" + Me.btnEditMetaDataFT.Size = New System.Drawing.Size(23, 23) + Me.btnEditMetaDataFT.TabIndex = 30 + Me.btnEditMetaDataFT.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnEditMetaDataFT.UseVisualStyleBackColor = True + ' + 'btnNewMetaDataFT + ' + Me.btnNewMetaDataFT.Enabled = False + Me.btnNewMetaDataFT.Image = CType(resources.GetObject("btnNewMetaDataFT.Image"), System.Drawing.Image) + Me.btnNewMetaDataFT.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnNewMetaDataFT.Location = New System.Drawing.Point(107, 114) + Me.btnNewMetaDataFT.Name = "btnNewMetaDataFT" + Me.btnNewMetaDataFT.Size = New System.Drawing.Size(23, 23) + Me.btnNewMetaDataFT.TabIndex = 29 + Me.btnNewMetaDataFT.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnNewMetaDataFT.UseVisualStyleBackColor = True + ' + 'chkIFOScan + ' + Me.chkIFOScan.AutoSize = True + Me.chkIFOScan.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkIFOScan.Location = New System.Drawing.Point(6, 33) + Me.chkIFOScan.Name = "chkIFOScan" + Me.chkIFOScan.Size = New System.Drawing.Size(123, 17) + Me.chkIFOScan.TabIndex = 18 + Me.chkIFOScan.Text = "Enable IFO Parsing" + Me.chkIFOScan.UseVisualStyleBackColor = True + ' + 'cbLanguages + ' + Me.cbLanguages.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbLanguages.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbLanguages.FormattingEnabled = True + Me.cbLanguages.Location = New System.Drawing.Point(38, 147) + Me.cbLanguages.Name = "cbLanguages" + Me.cbLanguages.Size = New System.Drawing.Size(174, 21) + Me.cbLanguages.Sorted = True + Me.cbLanguages.TabIndex = 17 + ' + 'Label31 + ' + Me.Label31.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label31.Location = New System.Drawing.Point(2, 117) + Me.Label31.Name = "Label31" + Me.Label31.Size = New System.Drawing.Size(245, 29) + Me.Label31.TabIndex = 16 + Me.Label31.Text = "Display Overlay if Video Contains an Audio Stream With the Following Language:" + Me.Label31.TextAlign = System.Drawing.ContentAlignment.TopCenter + ' + 'gbRTFormat + ' + Me.gbRTFormat.Controls.Add(Me.Label51) + Me.gbRTFormat.Controls.Add(Me.txtRuntimeFormat) + Me.gbRTFormat.Controls.Add(Me.chkUseMIDuration) + Me.gbRTFormat.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbRTFormat.Location = New System.Drawing.Point(6, 50) + Me.gbRTFormat.Name = "gbRTFormat" + Me.gbRTFormat.Size = New System.Drawing.Size(234, 64) + Me.gbRTFormat.TabIndex = 9 + Me.gbRTFormat.TabStop = False + Me.gbRTFormat.Text = "Duration Format" + ' + 'Label51 + ' + Me.Label51.Font = New System.Drawing.Font("Segoe UI", 7.0!) + Me.Label51.Location = New System.Drawing.Point(160, 10) + Me.Label51.Name = "Label51" + Me.Label51.Size = New System.Drawing.Size(72, 50) + Me.Label51.TabIndex = 23 + Me.Label51.Text = "=Hours" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "=Minutes" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "=Seconds" + Me.Label51.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'txtRuntimeFormat + ' + Me.txtRuntimeFormat.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtRuntimeFormat.Location = New System.Drawing.Point(5, 34) + Me.txtRuntimeFormat.Name = "txtRuntimeFormat" + Me.txtRuntimeFormat.Size = New System.Drawing.Size(145, 22) + Me.txtRuntimeFormat.TabIndex = 22 + ' + 'chkUseMIDuration + ' + Me.chkUseMIDuration.AutoSize = True + Me.chkUseMIDuration.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMIDuration.Location = New System.Drawing.Point(5, 15) + Me.chkUseMIDuration.Name = "chkUseMIDuration" + Me.chkUseMIDuration.Size = New System.Drawing.Size(158, 17) + Me.chkUseMIDuration.TabIndex = 8 + Me.chkUseMIDuration.Text = "Use Duration for Runtime" + Me.chkUseMIDuration.UseVisualStyleBackColor = True + ' + 'chkScanMediaInfo + ' + Me.chkScanMediaInfo.AutoSize = True + Me.chkScanMediaInfo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkScanMediaInfo.Location = New System.Drawing.Point(6, 16) + Me.chkScanMediaInfo.Name = "chkScanMediaInfo" + Me.chkScanMediaInfo.Size = New System.Drawing.Size(106, 17) + Me.chkScanMediaInfo.TabIndex = 7 + Me.chkScanMediaInfo.Text = "Scan Meta Data" + Me.chkScanMediaInfo.UseVisualStyleBackColor = True + ' + 'GroupBox10 + ' + Me.GroupBox10.Controls.Add(Me.chkLockSubtitle) + Me.GroupBox10.Controls.Add(Me.chkLockMPAA) + Me.GroupBox10.Controls.Add(Me.chkLockLanguageA) + Me.GroupBox10.Controls.Add(Me.chkLockLanguageV) + Me.GroupBox10.Controls.Add(Me.chkLockOutline) + Me.GroupBox10.Controls.Add(Me.chkLockPlot) + Me.GroupBox10.Controls.Add(Me.chkLockTrailer) + Me.GroupBox10.Controls.Add(Me.chkLockGenre) + Me.GroupBox10.Controls.Add(Me.chkLockRealStudio) + Me.GroupBox10.Controls.Add(Me.chkLockRating) + Me.GroupBox10.Controls.Add(Me.chkLockTagline) + Me.GroupBox10.Controls.Add(Me.chkLockTitle) + Me.GroupBox10.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox10.Location = New System.Drawing.Point(8, 6) + Me.GroupBox10.Name = "GroupBox10" + Me.GroupBox10.Size = New System.Drawing.Size(156, 224) + Me.GroupBox10.TabIndex = 1 + Me.GroupBox10.TabStop = False + Me.GroupBox10.Text = "Global Locks" + ' + 'chkLockSubtitle + ' + Me.chkLockSubtitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLockSubtitle.Location = New System.Drawing.Point(6, 203) + Me.chkLockSubtitle.Name = "chkLockSubtitle" + Me.chkLockSubtitle.Size = New System.Drawing.Size(129, 17) + Me.chkLockSubtitle.TabIndex = 50 + Me.chkLockSubtitle.Text = "Lock Subtitle" + Me.chkLockSubtitle.UseVisualStyleBackColor = True + ' + 'chkLockMPAA + ' + Me.chkLockMPAA.AutoSize = True + Me.chkLockMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLockMPAA.Location = New System.Drawing.Point(6, 186) + Me.chkLockMPAA.Name = "chkLockMPAA" + Me.chkLockMPAA.Size = New System.Drawing.Size(149, 17) + Me.chkLockMPAA.TabIndex = 49 + Me.chkLockMPAA.Text = "Lock MPAA/Certification" + Me.chkLockMPAA.UseVisualStyleBackColor = True + ' + 'chkLockLanguageA + ' + Me.chkLockLanguageA.AutoSize = True + Me.chkLockLanguageA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLockLanguageA.Location = New System.Drawing.Point(6, 169) + Me.chkLockLanguageA.Name = "chkLockLanguageA" + Me.chkLockLanguageA.Size = New System.Drawing.Size(142, 17) + Me.chkLockLanguageA.TabIndex = 48 + Me.chkLockLanguageA.Text = "Lock Language (audio)" + Me.chkLockLanguageA.UseVisualStyleBackColor = True + ' + 'chkLockLanguageV + ' + Me.chkLockLanguageV.AutoSize = True + Me.chkLockLanguageV.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLockLanguageV.Location = New System.Drawing.Point(6, 152) + Me.chkLockLanguageV.Name = "chkLockLanguageV" + Me.chkLockLanguageV.Size = New System.Drawing.Size(140, 17) + Me.chkLockLanguageV.TabIndex = 47 + Me.chkLockLanguageV.Text = "Lock Language (video)" + Me.chkLockLanguageV.UseVisualStyleBackColor = True + ' + 'chkLockOutline + ' + Me.chkLockOutline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLockOutline.Location = New System.Drawing.Point(6, 50) + Me.chkLockOutline.Name = "chkLockOutline" + Me.chkLockOutline.Size = New System.Drawing.Size(129, 17) + Me.chkLockOutline.TabIndex = 1 + Me.chkLockOutline.Text = "Lock Outline" + Me.chkLockOutline.UseVisualStyleBackColor = True + ' + 'chkLockPlot + ' + Me.chkLockPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLockPlot.Location = New System.Drawing.Point(6, 33) + Me.chkLockPlot.Name = "chkLockPlot" + Me.chkLockPlot.Size = New System.Drawing.Size(76, 17) + Me.chkLockPlot.TabIndex = 0 + Me.chkLockPlot.Text = "Lock Plot" + Me.chkLockPlot.UseVisualStyleBackColor = True + ' + 'chkLockTrailer + ' + Me.chkLockTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLockTrailer.Location = New System.Drawing.Point(6, 135) + Me.chkLockTrailer.Name = "chkLockTrailer" + Me.chkLockTrailer.Size = New System.Drawing.Size(129, 17) + Me.chkLockTrailer.TabIndex = 46 + Me.chkLockTrailer.Text = "Lock Trailer" + Me.chkLockTrailer.UseVisualStyleBackColor = True + ' + 'chkLockGenre + ' + Me.chkLockGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLockGenre.Location = New System.Drawing.Point(6, 118) + Me.chkLockGenre.Name = "chkLockGenre" + Me.chkLockGenre.Size = New System.Drawing.Size(129, 17) + Me.chkLockGenre.TabIndex = 7 + Me.chkLockGenre.Text = "Lock Genre" + Me.chkLockGenre.UseVisualStyleBackColor = True + ' + 'chkLockRealStudio + ' + Me.chkLockRealStudio.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLockRealStudio.Location = New System.Drawing.Point(6, 101) + Me.chkLockRealStudio.Name = "chkLockRealStudio" + Me.chkLockRealStudio.Size = New System.Drawing.Size(129, 17) + Me.chkLockRealStudio.TabIndex = 5 + Me.chkLockRealStudio.Text = "Lock Studio" + Me.chkLockRealStudio.UseVisualStyleBackColor = True + ' + 'chkLockRating + ' + Me.chkLockRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLockRating.Location = New System.Drawing.Point(6, 84) + Me.chkLockRating.Name = "chkLockRating" + Me.chkLockRating.Size = New System.Drawing.Size(129, 17) + Me.chkLockRating.TabIndex = 4 + Me.chkLockRating.Text = "Lock Rating" + Me.chkLockRating.UseVisualStyleBackColor = True + ' + 'chkLockTagline + ' + Me.chkLockTagline.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLockTagline.Location = New System.Drawing.Point(6, 67) + Me.chkLockTagline.Name = "chkLockTagline" + Me.chkLockTagline.Size = New System.Drawing.Size(129, 17) + Me.chkLockTagline.TabIndex = 3 + Me.chkLockTagline.Text = "Lock Tagline" + Me.chkLockTagline.UseVisualStyleBackColor = True + ' + 'chkLockTitle + ' + Me.chkLockTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkLockTitle.Location = New System.Drawing.Point(6, 16) + Me.chkLockTitle.Name = "chkLockTitle" + Me.chkLockTitle.Size = New System.Drawing.Size(129, 17) + Me.chkLockTitle.TabIndex = 2 + Me.chkLockTitle.Text = "Lock Title" + Me.chkLockTitle.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.chkUseMPAAFSK) + Me.GroupBox1.Controls.Add(Me.chkOnlyValueForCert) + Me.GroupBox1.Controls.Add(Me.cbForce) + Me.GroupBox1.Controls.Add(Me.chkForceTitle) + Me.GroupBox1.Controls.Add(Me.chkOutlineForPlot) + Me.GroupBox1.Controls.Add(Me.chkCastWithImg) + Me.GroupBox1.Controls.Add(Me.chkUseCertForMPAA) + Me.GroupBox1.Controls.Add(Me.chkFullCast) + Me.GroupBox1.Controls.Add(Me.chkFullCrew) + Me.GroupBox1.Controls.Add(Me.cbCert) + Me.GroupBox1.Controls.Add(Me.chkCert) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(313, 187) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(289, 210) + Me.GroupBox1.TabIndex = 0 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Miscellaneous" + ' + 'chkUseMPAAFSK + ' + Me.chkUseMPAAFSK.AutoSize = True + Me.chkUseMPAAFSK.Enabled = False + Me.chkUseMPAAFSK.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseMPAAFSK.Location = New System.Drawing.Point(25, 163) + Me.chkUseMPAAFSK.Name = "chkUseMPAAFSK" + Me.chkUseMPAAFSK.Size = New System.Drawing.Size(213, 17) + Me.chkUseMPAAFSK.TabIndex = 67 + Me.chkUseMPAAFSK.Text = "Use MPAA as Fallback for FSK Rating" + Me.chkUseMPAAFSK.UseVisualStyleBackColor = True + ' + 'chkOnlyValueForCert + ' + Me.chkOnlyValueForCert.AutoSize = True + Me.chkOnlyValueForCert.Enabled = False + Me.chkOnlyValueForCert.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOnlyValueForCert.Location = New System.Drawing.Point(25, 142) + Me.chkOnlyValueForCert.Name = "chkOnlyValueForCert" + Me.chkOnlyValueForCert.Size = New System.Drawing.Size(168, 17) + Me.chkOnlyValueForCert.TabIndex = 66 + Me.chkOnlyValueForCert.Text = "Only Save the Value to NFO" + Me.chkOnlyValueForCert.UseVisualStyleBackColor = True + ' + 'cbForce + ' + Me.cbForce.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbForce.Enabled = False + Me.cbForce.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbForce.FormattingEnabled = True + Me.cbForce.Location = New System.Drawing.Point(139, 183) + Me.cbForce.Name = "cbForce" + Me.cbForce.Size = New System.Drawing.Size(144, 21) + Me.cbForce.Sorted = True + Me.cbForce.TabIndex = 65 + ' + 'chkForceTitle + ' + Me.chkForceTitle.AutoSize = True + Me.chkForceTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkForceTitle.Location = New System.Drawing.Point(6, 184) + Me.chkForceTitle.Name = "chkForceTitle" + Me.chkForceTitle.Size = New System.Drawing.Size(135, 17) + Me.chkForceTitle.TabIndex = 64 + Me.chkForceTitle.Text = "Force Title Language:" + Me.chkForceTitle.UseVisualStyleBackColor = True + ' + 'chkOutlineForPlot + ' + Me.chkOutlineForPlot.AutoSize = True + Me.chkOutlineForPlot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkOutlineForPlot.Location = New System.Drawing.Point(6, 82) + Me.chkOutlineForPlot.Name = "chkOutlineForPlot" + Me.chkOutlineForPlot.Size = New System.Drawing.Size(206, 17) + Me.chkOutlineForPlot.TabIndex = 3 + Me.chkOutlineForPlot.Text = "Use Outline for Plot if Plot is Empty" + Me.chkOutlineForPlot.UseVisualStyleBackColor = True + ' + 'chkCastWithImg + ' + Me.chkCastWithImg.AutoSize = True + Me.chkCastWithImg.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCastWithImg.Location = New System.Drawing.Point(6, 40) + Me.chkCastWithImg.Name = "chkCastWithImg" + Me.chkCastWithImg.Size = New System.Drawing.Size(189, 17) + Me.chkCastWithImg.TabIndex = 1 + Me.chkCastWithImg.Text = "Scrape Only Actors With Images" + Me.chkCastWithImg.UseVisualStyleBackColor = True + ' + 'chkUseCertForMPAA + ' + Me.chkUseCertForMPAA.AutoSize = True + Me.chkUseCertForMPAA.Enabled = False + Me.chkUseCertForMPAA.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkUseCertForMPAA.Location = New System.Drawing.Point(6, 124) + Me.chkUseCertForMPAA.Name = "chkUseCertForMPAA" + Me.chkUseCertForMPAA.Size = New System.Drawing.Size(162, 17) + Me.chkUseCertForMPAA.TabIndex = 6 + Me.chkUseCertForMPAA.Text = "Use Certification for MPAA" + Me.chkUseCertForMPAA.UseVisualStyleBackColor = True + ' + 'chkFullCast + ' + Me.chkFullCast.AutoSize = True + Me.chkFullCast.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCast.Location = New System.Drawing.Point(6, 19) + Me.chkFullCast.Name = "chkFullCast" + Me.chkFullCast.Size = New System.Drawing.Size(107, 17) + Me.chkFullCast.TabIndex = 0 + Me.chkFullCast.Text = "Scrape Full Cast" + Me.chkFullCast.UseVisualStyleBackColor = True + ' + 'chkFullCrew + ' + Me.chkFullCrew.AutoSize = True + Me.chkFullCrew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFullCrew.Location = New System.Drawing.Point(6, 61) + Me.chkFullCrew.Name = "chkFullCrew" + Me.chkFullCrew.Size = New System.Drawing.Size(111, 17) + Me.chkFullCrew.TabIndex = 2 + Me.chkFullCrew.Text = "Scrape Full Crew" + Me.chkFullCrew.UseVisualStyleBackColor = True + ' + 'cbCert + ' + Me.cbCert.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbCert.Enabled = False + Me.cbCert.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbCert.FormattingEnabled = True + Me.cbCert.Items.AddRange(New Object() {"Argentina", "Australia", "Belgium", "Brazil", "Canada", "Finland", "France", "Germany", "Hong Kong", "Iceland", "Ireland", "Netherlands", "New Zealand", "Peru", "Portugal", "Singapore", "South Korea", "Spain", "Sweden", "Switzerland", "UK", "USA"}) + Me.cbCert.Location = New System.Drawing.Point(175, 102) + Me.cbCert.Name = "cbCert" + Me.cbCert.Size = New System.Drawing.Size(108, 21) + Me.cbCert.Sorted = True + Me.cbCert.TabIndex = 5 + ' + 'chkCert + ' + Me.chkCert.AutoSize = True + Me.chkCert.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkCert.Location = New System.Drawing.Point(6, 103) + Me.chkCert.Name = "chkCert" + Me.chkCert.Size = New System.Drawing.Size(168, 17) + Me.chkCert.TabIndex = 4 + Me.chkCert.Text = "Use Certification Language:" + Me.chkCert.UseVisualStyleBackColor = True + ' + 'pnlScraper + ' + Me.pnlScraper.BackColor = System.Drawing.Color.White + Me.pnlScraper.Controls.Add(Me.GroupBox10) + Me.pnlScraper.Controls.Add(Me.gbOptions) + Me.pnlScraper.Controls.Add(Me.GroupBox1) + Me.pnlScraper.Controls.Add(Me.GroupBox26) + Me.pnlScraper.Location = New System.Drawing.Point(902, 202) + Me.pnlScraper.Name = "pnlScraper" + Me.pnlScraper.Size = New System.Drawing.Size(617, 400) + Me.pnlScraper.TabIndex = 14 + Me.pnlScraper.Visible = False + ' + 'ToolStrip1 + ' + Me.ToolStrip1.AllowMerge = False + Me.ToolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden + Me.ToolStrip1.ImageScalingSize = New System.Drawing.Size(32, 32) + Me.ToolStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow + Me.ToolStrip1.Location = New System.Drawing.Point(0, 64) + Me.ToolStrip1.Name = "ToolStrip1" + Me.ToolStrip1.Size = New System.Drawing.Size(892, 25) + Me.ToolStrip1.Stretch = True + Me.ToolStrip1.TabIndex = 4 + Me.ToolStrip1.Text = "ToolStrip1" + ' + 'pnlMain + ' + Me.pnlMain.AutoScroll = True + Me.pnlMain.BackColor = System.Drawing.Color.White + Me.pnlMain.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlMain.Location = New System.Drawing.Point(251, 147) + Me.pnlMain.Name = "pnlMain" + Me.pnlMain.Size = New System.Drawing.Size(636, 402) + Me.pnlMain.TabIndex = 9 + ' + 'gbHelp + ' + Me.gbHelp.BackColor = System.Drawing.Color.White + Me.gbHelp.Controls.Add(Me.PictureBox2) + Me.gbHelp.Controls.Add(Me.lblHelp) + Me.gbHelp.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.gbHelp.Location = New System.Drawing.Point(3, 3) + Me.gbHelp.Name = "gbHelp" + Me.gbHelp.Size = New System.Drawing.Size(628, 62) + Me.gbHelp.TabIndex = 0 + Me.gbHelp.TabStop = False + Me.gbHelp.Text = " Help" + ' + 'PictureBox2 + ' + Me.PictureBox2.Image = CType(resources.GetObject("PictureBox2.Image"), System.Drawing.Image) + Me.PictureBox2.Location = New System.Drawing.Point(6, -2) + Me.PictureBox2.Name = "PictureBox2" + Me.PictureBox2.Size = New System.Drawing.Size(16, 16) + Me.PictureBox2.TabIndex = 1 + Me.PictureBox2.TabStop = False + ' + 'lblHelp + ' + Me.lblHelp.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblHelp.Location = New System.Drawing.Point(3, 14) + Me.lblHelp.Name = "lblHelp" + Me.lblHelp.Size = New System.Drawing.Size(622, 43) + Me.lblHelp.TabIndex = 0 + ' + 'Panel2 + ' + Me.Panel2.BackColor = System.Drawing.Color.White + Me.Panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Panel2.Controls.Add(Me.gbHelp) + Me.Panel2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Panel2.Location = New System.Drawing.Point(5, 555) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(636, 69) + Me.Panel2.TabIndex = 8 + ' + 'dlgSettings + ' + Me.AcceptButton = Me.btnOK + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.btnCancel + Me.ClientSize = New System.Drawing.Size(892, 628) + Me.Controls.Add(Me.pnlShows) + Me.Controls.Add(Me.pnlSources) + Me.Controls.Add(Me.pnlTVSources) + Me.Controls.Add(Me.pnlImages) + Me.Controls.Add(Me.pnlScraper) + Me.Controls.Add(Me.Panel2) + Me.Controls.Add(Me.ToolStrip1) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.pnlCurrent) + Me.Controls.Add(Me.tvSettings) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.btnCancel) + Me.Controls.Add(Me.btnApply) + Me.Controls.Add(Me.btnOK) + Me.Controls.Add(Me.pnlMovies) + Me.Controls.Add(Me.pnlTVImages) + Me.Controls.Add(Me.pnlExtensions) + Me.Controls.Add(Me.pnlXBMCCom) + Me.Controls.Add(Me.pnlMain) + Me.Controls.Add(Me.pnlTVScraper) + Me.DoubleBuffered = True + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgSettings" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "ss" + Me.GroupBox4.ResumeLayout(False) + Me.GroupBox4.PerformLayout() + Me.GroupBox29.ResumeLayout(False) + Me.GroupBox29.PerformLayout() + Me.GroupBox3.ResumeLayout(False) + Me.tcCleaner.ResumeLayout(False) + Me.tpStandard.ResumeLayout(False) + Me.tpStandard.PerformLayout() + Me.tpExpert.ResumeLayout(False) + Me.tpExpert.PerformLayout() + Me.GroupBox12.ResumeLayout(False) + Me.GroupBox12.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.GroupBox25.ResumeLayout(False) + Me.GroupBox25.PerformLayout() + Me.GroupBox8.ResumeLayout(False) + Me.GroupBox21.ResumeLayout(False) + Me.GroupBox21.PerformLayout() + Me.GroupBox7.ResumeLayout(False) + Me.GroupBox7.PerformLayout() + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox6.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + Me.GroupBox14.ResumeLayout(False) + Me.GroupBox14.PerformLayout() + CType(Me.tbPosterQual, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox13.ResumeLayout(False) + Me.GroupBox13.PerformLayout() + CType(Me.tbFanartQual, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox9.ResumeLayout(False) + Me.GroupBox17.ResumeLayout(False) + Me.GroupBox17.PerformLayout() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlGeneral.ResumeLayout(False) + Me.gbInterface.ResumeLayout(False) + Me.gbInterface.PerformLayout() + Me.pnlXBMCCom.ResumeLayout(False) + Me.gbProxy.ResumeLayout(False) + Me.gbProxy.PerformLayout() + Me.gbCreds.ResumeLayout(False) + Me.gbCreds.PerformLayout() + Me.pnlMovies.ResumeLayout(False) + Me.gbGenreFilter.ResumeLayout(False) + Me.gbFilters.ResumeLayout(False) + Me.gbFilters.PerformLayout() + Me.GroupBox27.ResumeLayout(False) + Me.GroupBox16.ResumeLayout(False) + Me.GroupBox16.PerformLayout() + Me.Panel1.ResumeLayout(False) + CType(Me.pbCurrent, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlExtensions.ResumeLayout(False) + Me.GroupBox22.ResumeLayout(False) + Me.GroupBox22.PerformLayout() + Me.GroupBox18.ResumeLayout(False) + Me.GroupBox18.PerformLayout() + Me.pnlSources.ResumeLayout(False) + Me.GroupBox19.ResumeLayout(False) + Me.GroupBox19.PerformLayout() + Me.pnlImages.ResumeLayout(False) + Me.GroupBox15.ResumeLayout(False) + Me.GroupBox15.PerformLayout() + Me.GroupBox23.ResumeLayout(False) + Me.GroupBox23.PerformLayout() + Me.GroupBox24.ResumeLayout(False) + Me.GroupBox24.PerformLayout() + Me.pnlTVSources.ResumeLayout(False) + Me.TabControl2.ResumeLayout(False) + Me.TabPage3.ResumeLayout(False) + Me.gbMiscTVSourceOpts.ResumeLayout(False) + Me.gbMiscTVSourceOpts.PerformLayout() + Me.gbTVNaming.ResumeLayout(False) + Me.gbShowBanner.ResumeLayout(False) + Me.gbShowBanner.PerformLayout() + Me.gbAllSeasonPoster.ResumeLayout(False) + Me.gbAllSeasonPoster.PerformLayout() + Me.gbEpisodeFanart.ResumeLayout(False) + Me.gbEpisodeFanart.PerformLayout() + Me.gbEpisodePosters.ResumeLayout(False) + Me.gbEpisodePosters.PerformLayout() + Me.gbSeasonFanart.ResumeLayout(False) + Me.gbSeasonFanart.PerformLayout() + Me.gbSeasonPosters.ResumeLayout(False) + Me.gbSeasonPosters.PerformLayout() + Me.gbShowFanart.ResumeLayout(False) + Me.gbShowFanart.PerformLayout() + Me.gbShowPosters.ResumeLayout(False) + Me.gbShowPosters.PerformLayout() + Me.TabPage4.ResumeLayout(False) + Me.gbShowRegex.ResumeLayout(False) + Me.gbShowRegex.PerformLayout() + Me.pnlShows.ResumeLayout(False) + Me.gbTVListOptions.ResumeLayout(False) + Me.gbTVListOptions.PerformLayout() + Me.gbEpisodeListOptions.ResumeLayout(False) + Me.gbEpisodeListOptions.PerformLayout() + Me.gbSeasonListOptions.ResumeLayout(False) + Me.gbSeasonListOptions.PerformLayout() + Me.gbShowListOptions.ResumeLayout(False) + Me.gbShowListOptions.PerformLayout() + Me.gbTVMisc.ResumeLayout(False) + Me.gbTVMisc.PerformLayout() + Me.gbEpFilter.ResumeLayout(False) + Me.gbEpFilter.PerformLayout() + Me.gbShowFilter.ResumeLayout(False) + Me.gbShowFilter.PerformLayout() + Me.pnlTVImages.ResumeLayout(False) + Me.TabControl3.ResumeLayout(False) + Me.TabPage5.ResumeLayout(False) + Me.gbAllSPosterOpts.ResumeLayout(False) + Me.gbAllSPosterOpts.PerformLayout() + CType(Me.tbAllSPosterQual, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbShowPosterOpts.ResumeLayout(False) + Me.gbShowPosterOpts.PerformLayout() + CType(Me.tbShowPosterQual, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbShowFanartOpts.ResumeLayout(False) + Me.gbShowFanartOpts.PerformLayout() + CType(Me.tbShowFanartQual, System.ComponentModel.ISupportInitialize).EndInit() + Me.TabPage6.ResumeLayout(False) + Me.gbSeaPosterOpts.ResumeLayout(False) + Me.gbSeaPosterOpts.PerformLayout() + CType(Me.tbSeaPosterQual, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbSeaFanartOpts.ResumeLayout(False) + Me.gbSeaFanartOpts.PerformLayout() + CType(Me.tbSeaFanartQual, System.ComponentModel.ISupportInitialize).EndInit() + Me.TabPage7.ResumeLayout(False) + Me.gbEpPosterOpts.ResumeLayout(False) + Me.gbEpPosterOpts.PerformLayout() + CType(Me.tbEpPosterQual, System.ComponentModel.ISupportInitialize).EndInit() + Me.gbEpFanartOpts.ResumeLayout(False) + Me.gbEpFanartOpts.PerformLayout() + CType(Me.tbEpFanartQual, System.ComponentModel.ISupportInitialize).EndInit() + Me.TabPage8.ResumeLayout(False) + Me.TabPage8.PerformLayout() + Me.pnlTVScraper.ResumeLayout(False) + Me.GroupBox32.ResumeLayout(False) + Me.GroupBox35.ResumeLayout(False) + Me.GroupBox34.ResumeLayout(False) + Me.GroupBox33.ResumeLayout(False) + Me.gbEpLocks.ResumeLayout(False) + Me.gbShowLocks.ResumeLayout(False) + Me.GroupBox31.ResumeLayout(False) + Me.GroupBox31.PerformLayout() + Me.gbTVMIDefaults.ResumeLayout(False) + Me.gbTVMIDefaults.PerformLayout() + Me.gbTVScraperOptions.ResumeLayout(False) + Me.gbTVScraperOptions.PerformLayout() + Me.gbLanguage.ResumeLayout(False) + Me.gbLanguage.PerformLayout() + Me.gbOptions.ResumeLayout(False) + Me.gbOptions.PerformLayout() + Me.GroupBox26.ResumeLayout(False) + Me.GroupBox26.PerformLayout() + Me.GroupBox28.ResumeLayout(False) + Me.GroupBox28.PerformLayout() + Me.gbRTFormat.ResumeLayout(False) + Me.gbRTFormat.PerformLayout() + Me.GroupBox10.ResumeLayout(False) + Me.GroupBox10.PerformLayout() + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox1.PerformLayout() + Me.pnlScraper.ResumeLayout(False) + Me.gbHelp.ResumeLayout(False) + CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit() + Me.Panel2.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() - End Sub + End Sub Friend WithEvents btnOK As System.Windows.Forms.Button Friend WithEvents btnApply As System.Windows.Forms.Button Friend WithEvents btnCancel As System.Windows.Forms.Button @@ -7925,7 +8058,7 @@ Partial Class dlgSettings Friend WithEvents btnGetTVProfiles As System.Windows.Forms.Button Friend WithEvents chkAskCheckboxScrape As System.Windows.Forms.CheckBox Friend WithEvents chkClickScrape As System.Windows.Forms.CheckBox - Friend WithEvents chkActorCache As System.Windows.Forms.CheckBox + Friend WithEvents chkScraperActorThumbs As System.Windows.Forms.CheckBox Friend WithEvents chkPosterOnly As System.Windows.Forms.CheckBox Friend WithEvents gbShowBanner As System.Windows.Forms.GroupBox Friend WithEvents chkShowBannerJPG As System.Windows.Forms.CheckBox @@ -7936,4 +8069,14 @@ Partial Class dlgSettings Friend WithEvents chkMovieNameDashPosterJPG As System.Windows.Forms.CheckBox Friend WithEvents btnMovieFrodo As System.Windows.Forms.Button Friend WithEvents btnTVShowFrodo As System.Windows.Forms.Button + Friend WithEvents chkVideoTSParentXBMC As System.Windows.Forms.CheckBox + Friend WithEvents chkMovieNameNFOStack As System.Windows.Forms.CheckBox + Friend WithEvents chkSpecialDateAdd As System.Windows.Forms.CheckBox + Friend WithEvents chkLockLanguageV As System.Windows.Forms.CheckBox + Friend WithEvents chkLockLanguageA As System.Windows.Forms.CheckBox + Friend WithEvents chkLockMPAA As System.Windows.Forms.CheckBox + Friend WithEvents chkUseMPAAFSK As System.Windows.Forms.CheckBox + Friend WithEvents chkMovieWatchedCol As System.Windows.Forms.CheckBox + Friend WithEvents chkLockSubtitle As System.Windows.Forms.CheckBox + Friend WithEvents chkEpisodeWatchedCol As System.Windows.Forms.CheckBox End Class \ No newline at end of file diff --git a/Ember Media Manager/dlgSettings.resx b/Ember Media Manager/dlgSettings.resx index 3cec402..614fa81 100644 --- a/Ember Media Manager/dlgSettings.resx +++ b/Ember Media Manager/dlgSettings.resx @@ -120,197 +120,195 @@ - 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 - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T6XSS0sCYRQG4BEXERG46UI3yCRNnZmw/AGZFUagJO2rZSFEJi6MFtFNhAxBBSlokW7NQIlIKLvJ + FyJtBKEoqKCCfsPpO2pD1repFs9wfM87x81wAPAvzBDt3QxYdvOibzcv+KI3pjFWBzFDtJPrfQyTRgiT + BtjOia+sDmKGKER0xa2rJkB0vmd1EDNEgWxvwXfRCiiQFe9YHSQNQWLqC5FhW5AMWUPXFqv/yvi0lukA + tHnZ/xImo9YgGaZGbOHrEWPVAe+5oXk100PL+goeVk41sHyiKsEZs8/9akYL62f6FunAUlrftZhWw0+a + L6p3nuNulXTAc2Rsc6Z0MJ/USpypalW7pA7ch2K7dADNHRjsjoTgohbQbJx/m4nrAdH53bFPc5TgXbQ7 + ESU7pfekA99NxYTCZIyHMuGW1UHMENkjQnE8wkOZ8PvvwOwXHwb9PCCzX3hmdRAn50oUVCeloXgZx6m1 + U8oNg7sni3TTSi9muKt0sKsoHcAH/SGnaqhaqo6qp3dl0r8AJ8OsssMOduXSgb8D7gMxXmeO6KXG2gAA + AABJRU5ErkJggg== - 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 - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T6XSS0sCYRQG4BEXERG46UI3yCRNnZmw/AGZFUagJO2rZSFEJi6MFtFNhAxBBSlokW7NQIlIKLvJ + FyJtBKEoqKCCfsPpO2pD1repFs9wfM87x81wAPAvzBDt3QxYdvOibzcv+KI3pjFWBzFDtJPrfQyTRgiT + BtjOia+sDmKGKER0xa2rJkB0vmd1EDNEgWxvwXfRCiiQFe9YHSQNQWLqC5FhW5AMWUPXFqv/yvi0lukA + tHnZ/xImo9YgGaZGbOHrEWPVAe+5oXk100PL+goeVk41sHyiKsEZs8/9akYL62f6FunAUlrftZhWw0+a + L6p3nuNulXTAc2Rsc6Z0MJ/USpypalW7pA7ch2K7dADNHRjsjoTgohbQbJx/m4nrAdH53bFPc5TgXbQ7 + ESU7pfekA99NxYTCZIyHMuGW1UHMENkjQnE8wkOZ8PvvwOwXHwb9PCCzX3hmdRAn50oUVCeloXgZx6m1 + U8oNg7sni3TTSi9muKt0sKsoHcAH/SGnaqhaqo6qp3dl0r8AJ8OsssMOduXSgb8D7gMxXmeO6KXG2gAA + AABJRU5ErkJggg== - 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 - QmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAACrUlE + QVQ4T6XOXUhTYRzH8YGUBBUKRXdNkwjMLpKKMKSLLrroBatJYhYVmqmVORUlS1vm61YqxXozIzOToAyn + qV0sL8y1wve55nRO5zY3tzPnNNs5Z+PXs8EOyq6iA9/zPA88/w8PD8B/xW3c0zXRtPFxImOSCmjzM9Jz + AT1XL6AtDb4S3eaXR1cPBvL/XMOF4axZynqsL+CZr4fH9goe+2t4qSZ4Hc3wOlv8/TZ/rJh1YH0QsDiQ + G8kYHoKdfQDWWAPWVAfW/AieOSk8lqfwwd75J1ia64GdWjbabPMih4MK5QCHMotP68vB6O+TSsFMl5Eq + wMxUgTWI/bDHWAmXqRtOlxsUZQdB9nKArTeVT0+WgJksAjNxi6x3wOiKwUzdJYn8KDt1G4sGGRYW/8Bu + t80QZB0HWHtS+O7xAtAaIehfOWTNBT2eD2iLgAkCEZTV3oBT3wrKueIDCn1zHGD6cpa/MiaEezSTlAFa + lQl27DqGRxLwc+Q4QbPgUpeDsllAORbc5Plb1gD6dgF/aTAbS/1XsNyfBnbgKpihTEiVEahWbMXycApW + tC1wuLywWi3NgWEOGP9wir/w4xqcilRQfRehVSRBo0xG3bdoVPVGQaVMgGa0FHPkBabBt2VBgOrdSb6t + NwPOnstQfT2NbHkE8uRRKJbvQgkpT74TWd2boNC9h1vdVh0EfG84FmmQp8PUdQHqzkRIOg74E7bHIFu2 + G+KOWEi649E1JIO6r6E2CBh6kxCm+ZzGjH06B01rMgxt5zEtS0F6UyySGmOg6zgDXZcIGlleo6XzxI41 + QAjP/20suLQvoTY/vkScc0gkuRlXKhHG3TtSvsd4uDLGJco9KC5I2V1A7kWRIshMJCmMewE5hKxWA/G2 + hW8O2789nDvzeBvIXV+hgZmgoX8LvL+LddNtLbmnwgAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAFnhJREFUaEPNWnlc - zmnXNzM8zzxulBnMjOdlxoyxjX1XKEK2kJFoUdpLUVJIizZGSpStotCi0nK3iJAW7SEtWtStss3GaIZZ - Hk33eb/nym0qM555/3v7fM7nd+7rd37XdfZzruuqBxH1eBOsXaPzDwszC4mVhaXExtpaYrfJVrLZbrPE - wd5e4ujoKHHe5izZsX27xGXHTomryy6J2y43iYe7h8TT00vi5ekt8fLylngL8MGYp2S3h4fE3c0ddK7i - m+3O2yVOjtskWzHfZltbiY2VtcTC1ExiYmQsMdTXf7dHjx5vvYm/v2Teycl51JEjx5wiwiPOREZFSePi - 4qRJSYnS1LQ06cULF6RZWVnSvLw8aVFRkfR6aam0/Ga5tKqySlpbWyttaGiQNjU1S1ta7globm6R3m1q - EuN1eF9dVQX6m9LSkhJpQX6+NOvKFWlGero0OSFBGoO1ToaFSY8EB0n379sX6+Hm5m1ns0n9r4R4TQBI - 3DMw8OBXp06d/vFMZGT7qdNnKCo6hmLOnqW4+HOULJWSVJpCaekZlJl5mS5dvkJZWdmUm3uNruUXUkFh - EZWUllHZ9ZtUWnaDym6U81NeWFRChYXFoCmQZ2fn0JUrV+nSpcvytLR0Sk6S0rlzCfKoyCgKD4+g0JBQ - OnTwEO3b50e73d3ljg4OzywszNNmzZzxQXdBugiwYL5G34OHDp2IiDhFR44ea09IksqzwRgzno/FC4tL - BX6toEjg8ecSKDcvnwrAHAt08dJlgZ/PuEgZFy8BLxbPjIuZYpzf8zvGc68VUEpqupg3D4KnQhDGee7U - tPOChvGo6LPk739Abm5uTjprdQrV5swd2lmILgLs2bPXMTQ0jCKjYuTZOXlUV1dP9+7dl9fiKbt7l+7d - vy/GGG+5d5/q6xtIJmui5pZ74tkou0uNjTK629T8Gt7Q2EjNzffE+J2GBrr/4BGeMmoAPX/Pzwb8bm5p - EXM0ymTU1NxC9Xca5Lcqquhk+Cm5haUlmZiYpMBLeimEeCXA1ClTPgkPD287fjyEXUGOCeVlpdeppqYW - kzXRjes3qLrqNjXebaYbN25SVVW1wMtv3aKKikpBcxu0xdC6DOO1tfVUWFDYgdfdAZ4v8Po7jZSfny/o - +TfT8Hd3m1oI8STmlQEvhRtWVFYKmpraOroMVw07ES53cnIiczNzo9cE8PPz24NgpcSkFPnN8gq6ejWb - KqtvUyWYzs7OpluV1R04xm9VVol3ufDl8luVVAG8EIyz7/N4UXEJlZR04DxWXFIq8NKy62CyWOA38V0B - mK8Aw+VQQH5+wSu8ADivwe/yQcP8YH15cnIKeXt5AbxLFVYQFsDfOydOnCg8ezaWEhKT5RyIHGgclBx8 - HXiBYLIznpOTS3nw5XzQ513Lfwn4DVrFb4EjThiYmby8ayJueN5c4EzH6yGjid8dOBIC5lXg/OR3mYgh - xOjvwUHBTzTmaXwqeH8pQN+YmLONHJRnzpxBhsiS5+TmUVpqGvArxHh6WhpnjZd4OvBLAs/IQPBevEjZ - wNnMKchS2bm5AkfeFTRZWVcpKSERmSpPWDYR6+QgxnLAVFJiIl0BLTMoTU6mS5mYF3hqSqqY94/vEzBn - Fh0PCWk7GR7+VG+d3vTOAignJCTIEjFZXGyc+DA2JkakyczMzJd4psDjYs5SJrJKJhaKj42lCxcu0kWM - S5OSKSUlRQiWcT5DuArjPCZNlsJ9ygSeDDpBA8GZ+Q78AiUmJIj5LwBnYXmNi4BE4DwfrxeLVB4SEtoG - T3mqt15PhYucwgLKmFzG+f1E2AlKhiZioqPFx7x4LJjmBbrjcRCArXQdAc6TJ5w7B0igPGj6x59+gjVS - xO+cnBx6/vxnSkAKPhcfD0A9gSA8H48l43kuLl58nwSrMQ3jTMO44hmNGA0LO9GWkprWamhgqNpFAGhE - xkXF76t9FB0VLRYJPXbsFR6G4sKFhsfDQkIoEq4WH9fB0E9g9vqNG4SqTUeDg+nBw4ckh33LylArQMPp - t10uF34eg6J4MCCAqm/fFlkm+OBBsQY8gI4eDqYozMtChxw9SmdOnRLr8fujwUHiiULXhuLZamxk3FUA - +LeMzRoMBpi5IDFx1Es8kKKAR0VGEkq80Bzjhw8dFJZ59vw5/faf30S8sFXawfyLtjb6vb2dcqF9fvLv - luZmOnrkCFWCcRawurpaMHUajB7DeDysEHkmko6DeZ6f+WD8dESEoGOewk+Gt+XlF7SabjTpKkBubq6M - fdDXx5dCjx8XWuKPWduHDhygYwIPFQKwhgsLC8U4M/z8558Fgz88fYo8f+cVwwoh+MnAdMy84ncjilsI - rMxCSZOT6OGjh7DCESjmEMYOUwj4OBx0CDTHsW4wHfD3J3QJbaXXb7SiFnQVAAzJWINODlvpUGCgmMjX - y1MwyfheH286sN9fTMqV9Jdff0U1vocAS6fWH38Uv3/97TfxVOD8+7f//KfLeOf39/D9Pl8fYQmm4+ce - b29Y46hY23/fPrE2a95j1y46eCCQ0Ju13aqqbrWwsOwqQGlpqewq0p27mxskDSA3l510EIIcDgqifXv3 - UBC0ciDgALnvchHab219Sk+h8R/BPD9bW1vp+++/pwcPHlBzUxOh60RwX0dBK6Hb8Pe7aD++++47QasA - /s3Bzt8+e/ZM+L6/337y9vSkQHhAMNb28dyNMT8wfwA8uVB4RETb7br6VitL664CoB2W5aBgOdo70B4f - H3LZ7gwteJHX7t1UAwZKi4uRm6Xkt3evyPXffP2Ivn70iB4//h7MyZApkoTAO3fsoC12dmSJ5svS3II2 - WVuTtYUFmRhvpAq0Hd99+w3V1txG33OHnjx+LOZg+Pabb8Ra+/bsgasep8tIr1xHXHfuJF9Yhd/tQBtx - EkFc3yhrtbay6SpAVVWV7BoKiJGBvtC+NyS3t91Eu7ZvF/7/CH5/Fw1WfV0dtFsj8BY0WwnxcWRjZUXc - ozg7OpKdlaVYzN11F9laWojSz1bbutmOHiAbPYSFAv33EzZHIvXeQ2A3Ya7amhrKvJABZVVTA+Lo0cMH - tNPZGXN5kIebK1mbmdIuWACZrq2xqbnVxnpTVwGwEZFxk2VrY0OuEGATtOaGhdlsVmZmdB2FCDRorGrQ - kdahgasgb0xuvGGDoN/mYE9OWx0E49scHAS4Y2Ees7ezRXFKQPdaj2atklxgpV2A9Wt1yN3dncrLy8Wc - DDUQ5A4ESExMIoctm8kBgrMgHq6uZAOFhIWFQYCWVhubbhbAbknGneFGow20E1oPOhCA4AmkvQgyW2tL - Ebzl5TfpFuDypUyy37yZTDYYwuXsaRuYtLOxhuvY0lb7LYLhzZtsyBFCbYYVN0MpeWgvbt0qF67GNPwN - 01iYmgoLYpcn3vMa5TdvgPktgs7Gwhx0mAPzWJiaELrlNlkzBLDuJgC2fLL8a9dIdfo02qCvjx3RQSqB - 3+eiE83OyqKsy5epEBYqAI2LsxN82kgsYqSvR5YmG8keuCXMrKezRmiOtbVWe5UYZ5fKQz0oKihAMAbQ - 6uVLOxiEgKu1lpGVuRlaZDN0ulcFDRdHdr89yERhoSFI1WfJFy5toL8ederwC7aAdXcBUC0hQD6tWL6c - DPTW05xZM+nM6dN0FalVATlYgIXJR6wEo4hxvNhBu3bQpAksZwEBWPtWCGDWriv7PrTITPMc7ONOjlth - PTvBtLGhAW19Kay+7lrahLlyoLCc7Kt0DRbjdj03J5sCkP/nz5tHSxYuoAOBgR0CdM9CDx8+kl2DdjUX - LSRdaHH+nNm0TldX9CScdTLSz4v0mgTfzIS5r8CNjiLNsbbNYAH99WsFU5z+zpyKQI+UIlztEorjRe5Y - ASkoVmwZdgWzjcbETFviG/G9rg6tXbOGPD08xPypaPxSse4+ZD2NeeqYX5cWzFMj/4CAFw13m1utrLql - 0UePvpZxrzJ82MdC0i9h/mmTJtAm+Cf77dmYaFq0QIPmqKrSEfQsOKFAoCWIcfZPZoQbQE593BYzpHQD - HouPi4WbfQnl6JDe+nU0a8okWH2Z+K0ydTLNV1ejU+HhaFHOiRo0F4pcsWwJTR4/llZqLaeAgAMQoOn1 - OvDgwUNZMXyeMwe7TjR6kXNxcaJVYHy3uxutXrWSlmouoqmTJ4uCx80WvzuL1jsq8ozAuRn7b8BtuAV8 - XmvZUtJaspi0V64QQjC+EjGxDekYxyt0GO0D82OFQF67Wpu0QOPv7/+irkHWamlh1TWNYpMu49586pTJ - 5ImgizgZLjIPw3H0K+bw7xXQwNTx42jliuU0DXRrtLXpK5hYQfd/eQYfCqJlUMaqFVq0HBqePXM65tWi - ZRBi9UotWPkwjldC0N6HoYE7SSdw2MCx5ue3/0XtnYbXWwmUetkVZJoRn35C474YQ8YISm4fIDHtBZNq - qirwRTWxmOqMacIfFy6YT6bwXw4ypusMAYgFrswHAw/C7AGvvwe9I1Lp1InjadFCDShnmcAXwIU0NReS - r6/vq2+C4EomxsY0duwXGN/z4nbdnVZzc4uuFuA6wLugKRMn0NIlmjQRTx0dHfJAocHRIanNVqXF0Bgz - raE+lxYj2Pm349atgqYzsHuZwUWWLIVbrFhJtrZ2r9Ew/U60Ccwwz8XJYx78fRHij/3eHskBx5CiNVGZ - OZMmTRhH6upzyMfX90XV7dpWM7NuAtTW1MrOp6eRqsos0kWF1FunSw7I087I+dbWVjR/vjotXbqExo0a - QUsWawp86oTxtBUCMA23EqKdQNU0QXHSWLCQ1qxZS4YbjGmNji5tc3LG+22v6AQt+i1dBO8qxABb+Msv - V9NqJA+12SpkgizF741Q6bURe8sRL+PHjCIPj90vKqpuvy5AVWWlLOP8edLT0yM7NGObUWkVYGhoSGNH - jxSaWQALTEJGmA1BF0FrW1CQOtPy71WIjZWrtNE5nqJg+LIxGjnn7TtAZ4e5/5iXv7O1taVNqLRoDQQu - fr/EFfMyP9bonbQhnJe3z4ubFZWtpiZmXV0IB1ey6KhIGjVqJOmjkJmamJAF+iEGXdQD1VkzaIHGfFKb - O4fUIIiGxjxSV5tDVkizOLfsBKjAoF+zRhcB50dbUbgMDAzJBx2uGSzTMaeCHl2qiSmftnWFjRuFC3bQ - dfDANNraKwmn3r+X3SxvNdlo2lWAImxoWICR0DRnoskTEAswGwcpm1WdgxbBNgJ1QgNWWABf/WLkCDJE - NTVCwHeGDbAYu47hBiMyYu07bxe+zJbsTLcRbjIdrcsErDUJMHHiRJowfjxNRKZbtmyZWFsHxW024m82 - 6s+HAwfAFZ1elJTdaDU27ralRAmXcbr690cfin3sDGQaXoBbae1Vq2jkiOGkqjqL1NTm0tgxY2jmjOk0 - F9ZYgdS3HgVp3bquwIKxu3CgboYLrF+//jWaNWDu4yFDxFpqSAzDPh4KfDrNUplJy5YupUjUltVwx/EQ - iJtBfu502dWWX1TSatR9U49SL+PNsxG09PyXX0QAR6IwZUMY9nVfbCnXofSrQAiVmTNoDrTCC6kji3y5 - evWfgjYWXwXhmYk/o5k/fz6NR8pmRbCFJyMpWMJtXLB91IC7cst+BPtlTzRyP2HHZgyFRp+Na7+anfd0 - g6FRVxdCCyDjg6YynPH8DAF4O9hyj0+KG2kDMsGz58/IFD3MkMEfIZC8aDFS7egRI2jx4sW0HA3gci0U - pL8FoAX9Umh4/LixYFydFiEdb0eGUkEmctzmKLama5EJf/jhB6qrrxP7ED754D0zjujbL125+hRx1VWA - 2OgYWTxah0bsXXmPqoDHT57g5LhJnDToo3XmQ6+0tFTEw0Kk1nnC1CzEkiVLUIA0/xYsQ2yNHjVKaP6T - oUNgyVk4EC6Gux6BBSyo7fffxaaGDws68/LNt9/ShczL7bhzeGqgb9BVAPi/jHsbPnHgvSrDY2hCAfy7 - EfvYnzDpafRKOuhYucnjfp8z1xAwojZ3LmnALd4E6urq9Plnn9LEyRNpx84ddAyNoRYClpXHG3tZY8f6 - 3dd+8uQxjl0e4YLkQntqegaOFvW7CoDGScbtcgDKfzQ6zEuXL4mTBN60P8J5zYMH98XzIfaqpSXF1NKC - u4HyWzQYLvUFSvyMqVNoyP/8m0aNHkWT0ezNmcN+rS6CnvG5EI6zyfDhn6GWaNDUaVNp5OefCU3z/rq4 - qFDMrVjraxwaMNPoEHD2elEcrB1FTxYbF9+enJLGAnQ5G+2919e3whXBo4uMYmZhLjfAdnEFAtABlRZH - Lripwe0K4kEBzdiM70eet8eGpbCw4BVTnyCTjIBFBg4YQH0kvWnQoIE0/PPhNGsWgl9FhaYjy6gi+Itx - mbEFhexURDg1wUU7z30fm3/eHW5CUdNauZIMjYzIHPsIfQMDOnEyov1cYvIPWsu1JnU+ne6Fi7RIF6Q8 - +60Ocm/sgxk8EP026PUXwre9cLTBNyi4YaRKZAeGWmzwG6EhXLfSeGSQWdjFjYc15kLrqgjIcWNGCytM - QV2ZBo1Pnz6dZiKDDRk8WDSIMiiEN/GK+Xhu3FqKLLQIcWXL/RA6Yy6CzI+j0zb5qTOR8tOR0Y042B3Y - WYC3F8ybr8X+bLfFjjyxF/VG2mTwwYf82xQbFlNURz6vLINFiqB1FD/svFLJADnfBpt6zlLzENgTkK8Z - mPmJ6DDHwCIT0Bxy0bKFQpzRBxliO8q7tI55CghXtbhCCqMN2GvzXZiXt6dYW8EHZ74dLi7ymNh41AJX - fwjw7isBGFHqLRm0VkcnnplxcnaWQ+NyxceKpwv2uIZY4BDabL6I4O6Vz+7TcarN204N+PZstBkKYEsw - PgfZZgzyPVuJ83saLkv4WF6c+2MOnssPV6rsKq7YwPyxLq6ToEQvH2/5LjdX+RHEwLHQsOYBSv3HKS7A - X13yjRj2ac/RI0bN1F69utoIvTd3gnAhObTPIKzA4IY2WA++GIrTM84cDEnYWs6DtidNnkSqCNTuwEJM - hhuNHDmShiJGOPVyzeFvz+FgjA9316H/cvNwf7XOy/XE+u4eHvLgw0fhPlGtmosWrxs6eLDktUs+Hhik - 3P/d6VOmaqJnyd6Othj/GkC+OOrbj5O0QByzHMaJMa540GHiwBXbPb5PSMdmnyEIY3u++op84dsMPjhP - 9cG3DF57fKFFX9FSu+xyJX8c0qbgCikZFyD89MPm5ghOoENPnKAQ7LyOYReIe2qsdxTrhaL6xiIDhdSu - X69nPkBJ+b2/vCfmFwOV+/9zzMhR4xYtWLhlm+O2PLjL08jIqPaExCT5+fMXKOtqDi7fiqkUV618c1mN - K9BaXJ3WN+L+F3fAOLck7FkF8Dh2T6Cpp8oanOZV11A5vrmBW8cS3OQX4SaTL7dzcKGXlZ1HqLCUAXdK - wzpIlXK0DT8HHgqqQNvgO2Pq9Dnv91Pq98abesXLzz7+5K3Bgz7o07vXP4b98+13pr2n1F/jfeX+mu/1 - U9ZU7tdPU6lPX00lSV/Nfr37aPbtLdHs86/efwn8XsC/JJr9AAKXAJf0EcBzKfcF9Omn2b+vkuZ7gP79 - lDTfV1JeiLVVevboMZK1PnzYp+/82f9LvPE/VfiDYUOGvjWof/+esExPPHsNUlIWMFBJqdcAhn5/E0DL - 3yi+7/JUxpz9AfxU7t/rg/7v9YK2ew798KO33/SfKl2y0H8j/P/6/n8B35DNRRk4JPUAAAAASUVORK5C - YII= + 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 + gIb9N9+QzUUyILFUAAAAAElFTkSuQmCC @@ -320,8 +318,8 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADk - VgAAAk1TRnQBSQFMAgEBCwEAAQwBBgEMAQYBGAEAARgBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFg + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADI + VgAAAk1TRnQBSQFMAgEBCwEAAYQBBgGEAQYBGAEAARgBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFg AwABSAMAAQEBAAEgBgABbP8AowADAQQCBAMBBAMDBAQBBQMEAQYDBAEGAwQBBQMAAQEDBAEGAwQBBgME AQUDBAEFAwMBBAcAAQEDAAEB/wAxAAMBAQIDCAELAw0BEgMRARcDEwEaAxQBHAMWAR4DFwEgAxgBIQMY ASIDFgEfAxMBGgMTARoDGAEhAxcBIAMWAR8DEAEWAw0BEQMPARQDDgETAwoBDQMCAQP/ACkAAwMBBAMS @@ -331,546 +329,544 @@ ASIDIwEzAyMBMwMYASIDLAFEAzwBZgMYASIDIwEzAyMBMwMjATMDIwEzAxgBIgMYASIDGAEiAw0BERgA Aw0BEQMYASIDDQERAyMBMwMsAUQDGAEiAyMBMwMjATMDIwEzAyMBMwMjATMDIwEzAxgBIgMsAUQDLAFE Aw0BEQMNAREDDQEReAADUgGhAwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8CAAGMAf8CAAGM - Af8CAAGRAf8CAAEJAf8CAAGOAf8CAAGOAf8CAAGDAf8DAAH/A1sBywMMARAYAAMNAREDDQERAw0BEQMY - ASIDDQERAzUBVQFWAWEBVgHuAQABhAEFAf8DQwF3Aw0BEQMYASIDGAEiAxgBIgMNAREDDQERAw0BESAA - Aw0BEQMjATMCWgFeAd0CAAFAAf8DSQGIBAADGAEiAxgBIgMYASIDGAEiAw0BEQMsAUQCVgFhAe4CVgFh - Ae4DPAFmfAADHAEnAwAF/wMAAf8BpQGmAagB/wHSAdMB1AH/AwAF/wMAAf8BnwGgAZ0B/wG4AboB4QH/ - AgABjgH/AgABlAH/AgABmAH/AgABlQH/AgABmAH/AwAB/wL9AfUB/wMAAf8DNQFVKAADLAFEAVYBYQFW - Ae4BAAGVARMB/wEAAZUBEwH/AVoBXgFaAd0DDQEROAADIwEzAloBXgHdAgABgwH/AgABgwH/AgABgwH/ - AzwBZhAAAyMBMwJaAV4B3QIAAYMB/wIAAYMB/wJWAWEB7gM1AVV4AAMiATEDAAH/AwAB/wMAAf8DAAH/ - AwAB/wMAAf8DAAH/AwAB/wMAAf8CAAEMAf8CAAGgAf8CAAGdAf8CAAGdAf8CAAGdAf8CAAGiAf8CAAEG - Af8DAAH/AwAB/wM6AWEkAAMsAUQBVgFhAVcB7gEAAZ0BHQH/AQABnQEdAf8BAAGdAR0B/wEAAZ0BHQH/ - A04BmTgAA04BmQIAAYoB/wIAAYoB/wIAAYoB/wIAAYoB/wIAAYoB/wM8AWYIAAMjATMCWgFeAd0CAAGK - Af8CAAGKAf8CAAGKAf8CAAGKAf8CWgFeAd0DDQERdAADIgExAwAB/wGOAY8BkQH/ApkBmwH/ApYBmAH/ - ApUBlwH/ApkBmwH/ApgBlgH/AZUBlgGaAf8CAAGXAf8CAAGjAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGm - Af8CAAGmAf8CAAGpAf8CAAGaAf8DAAH/AzoBYCAAAywBRAFWAmEB7gEAAagBKgH/AQABqQEqAf8BAAGp - ASoB/wEAAakBKgH/AQABqQEqAf8BVgJhAe4DLAFENAADNQFVAgABlAH/AgABlAH/AgABlAH/AgABlAH/ - AgABigH/AgABigH/AzwBZgMjATMCWgFeAd0CAAGKAf8CAAGUAf8CAAGUAf8CAAGUAf8CAAGUAf8DSQGI - eAADIgExAwAB/wKtAa4B/wOsAf8BrAGrAawB/wKrAawB/wKuAawB/wGYAZkBrQH/AgABsgH/AgABsgH/ - AgABsQH/AgABsQH/AgABrwH/AgABrgH/AgABrgH/AgABsAH/AgABsQH/AgABtAH/AgABrwH/AzoBYBwA - AywBRAFWAmEB7gEAAbEBMwH/AQABsQEzAf8BAAGwATMB/wEAAbEBMwH/AQABsQEzAf8BAAGxATMB/wEA - AbEBMwH/AVoCXgHdAw0BETQAAzUBVQIAAZQB/wIAAZQB/wIAAZQB/wIAAZQB/wIAAZQB/wIAAZQB/wJW - AWEB7gIAAZQB/wIAAZQB/wIAAZQB/wIAAZQB/wIAAZQB/wNOAZl8AAMiATEDAAH/Aq8BsAH/Aq4BrwH/ - Aq4BrwH/Aq4BrwH/ArABrwH/AZ0BngGwAf8CAAG7Af8CAAG8Af8CAAG9Af8CAAHBAf8CAAHCAf8CAAG1 - Af8CAAG8Af8CAAHEAf8CAAG+Af8CAAHAAf8CAAGgAf8DOgFgGAADLAFEAVYCYQHuAQABtQE6Af8BAAG1 - AToB/wEAAbUBOgH/AQABuAFBAf8BVgJhAe4BAAG4AUEB/wEAAbUBOgH/AQABtQE6Af8BAAG1AToB/wNJ - AYg4AAM1AVUCAAGcAf8CAAGcAf8CAAGcAf8CAAGcAf8CAAGcAf8CAAGcAf8CAAGcAf8CAAGcAf8CAAGc - Af8CAAGcAf8DTgGZgAADIgExAwAB/wK5AboB/wK4AbkB/wK4AbkB/wK4AbkB/wK4AbkB/wK6AbkB/wHB - Ab8BuAH/AcABvwG3Af8CwAG3Af8BvQG8AbAB/wIAAbAB/wIAAcIB/wIAAcgB/wK2AboB/wHCAcEBuAH/ - AsgBwAH/AwAB/wM6AWAYAANJAYgBAAG9AUYB/wEAAbwBQwH/AQABvAFDAf8BAAG9AUYB/wNTAaoDDQER - A1MBqgEAAbwBQwH/AQABvAFDAf8BAAG8AUMB/wEAAbwBQwH/AywBRDgAAzUBVQJWAWEB7gIAAacB/wIA - AacB/wIAAacB/wIAAacB/wIAAacB/wIAAacB/wIAAZwB/wNJAYiEAAMiATEDAAH/AsIBwwH/AcIBwQHC - Af8CwQHCAf8CwQHCAf8CwQHCAf8CwQHCAf8CwQHCAf8CwQHCAf8CwgHDAf8CwAG4Af8CAAGPAf8CAAHR - Af8CAAHKAf8BzAHLAcIB/wLCAcMB/wLKAcsB/wMAAf8DOgFgGAADIwEzAVoCXgHdAQABwwGGAf8BAAHD - AYYB/wFXAlgBuwMNAREEAAMYASIBVgJhAe4BAAG+AUYB/wEAAb8BgQH/AQABvwGBAf8BWgJeAd0DDQER - OAADQwF3AgABpwH/AgABpwH/AgABpwH/AgABpwH/AgABpwH/AgABpwH/AlcBWAG7iAADIgExAwAB/wLM - Ac0B/wLMAc0B/wLLAcwB/wLLAcwB/wLLAcwB/wLLAcwB/wLLAcwB/wLLAcwB/wLMAc0B/wLHAcQB/wIA - AYEB/wIAAd0B/wGVAZoB0AH/AdMB0gHLAf8CywHMAf8B1AHTAdQB/wMAAf8DOgFgHAADGAEiAVcCWAG7 - A1MBqgMNAREMAAM8AWYBAAHEAYoB/wEAAcEBhQH/AQABwgGFAf8BAAHBAYUB/wNTAao0AAMjATMCWgFe - Ad0CAAGtAf8CAAGtAf8CAAGtAf8CAAGtAf8CAAGtAf8CAAGtAf8CVgFhAe4DPAFmhAADIgExAwAB/wLV - AdYB/wLVAdYB/wLUAdUB/wLUAdUB/wLUAdUB/wLUAdUB/wLUAdUB/wLUAdUB/wLVAdYB/wLMAc0B/wGB - AYIBgQH/AaMBpwHeAf8CywHVAf8D1QH/AtQB1QH/At0B3gH/AwAB/wM6AWAgAAMNAREYAANTAaoBAAHE - AYoB/wEAAcUBjQH/AQABxAGKAf8BAAHEAYoB/wNJAYgsAAMjATMCVgFhAe4CAAG0Af8CAAG0Af8CAAG0 - Af8CAAG0Af8CAAG0Af8CAAG0Af8CAAG0Af8CAAG0Af8CAAG0Af8DPAFmgAADIgExAwAB/wHgAeEB4gH/ - At0B3gH/At0B3gH/At0B3gH/At0B3gH/At0B3gH/At0B3gH/At0B3gH/At4B3wH/AtYB2AH/AYYBhwGK - Af8C7AHlAf8D3gH/At0B3gH/At0B3gH/AucB6AH/AgABAgH/AzoBYDwAAxgBIgFaAlwBzAEAAcUBjQH/ - AQABxQGNAf8BAAHFAY0B/wEAAcUBjQH/A0kBiCQAAyMBMwJWAWEB7gIAAb8B/wIAAb8B/wIAAb8B/wIA - AbQB/wIAAcYB/wIAAcUB/wIAAbQB/wIAAb8B/wIAAb8B/wIAAb8B/wIAAb8B/wM8AWZ8AAMiATEDAAH/ - AuwB7QH/A/UB/wLyAfQB/wLyAfMB/wLzAfQB/wLyAfMB/wPzAf8D8wH/A/UB/wLgAeIB/wEKAQsBgQH/ - AvMB9AH/A/MB/wPyAf8D8wH/A/gB/wMAAf8DOgFgQAADLAFEAQABzAGZAf8BAAHIAZIB/wEAAcYBkQH/ - AQAByAGUAf8BWgJcAcwDDQERHAADIwEzAloBXgHdAgABvwH/AgABvwH/AgABvwH/AgABvwH/AgABxgH/ - A0kBiAM1AVUCAAHFAf8CAAG/Af8CAAG/Af8CAAG/Af8CAAG/Af8CAAG/Af8DPAFmeAADIgExAwAB/wMA - Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8CAAECAf8CAAEDAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/AwAB/wM6AWBEAAM1AVUBAAHMAZkB/wEAAcwBmwH/AVcCWAG7AyMBMyAAA04BmQIAAcYB/wIA - AcYB/wIAAcYB/wIAAcYB/wIAAcsB/wNOAZkIAAM1AVUCAAHOAf8CAAHGAf8CAAHGAf8CAAHGAf8CAAHG - Af8CWgFeAd0DDQERdAADHwEtAwAB/wPxAf8DAAH/AaMBpAGmAf8CyQHKAf8DAAH/AvUB9gH/AQIBAwEF - Af8BpAGlAacB/wHMAs0B/wMAAf8D9wH/AQkBCgEMAf8BnwGgAaIB/wLQAdEB/wMAAf8C5wHoAf8BBgEH - AQoB/wM4AV1IAAMsAUQDPAFmKAADLAFEAlYBYQHuAgABzQH/AgABzQH/AgABywH/A04BmRAAAzUBVQIA - AdQB/wIAAc0B/wIAAc0B/wIAAc4B/wNDAXd4AAMGAQgDXgHZAZ4BnwGhAf8DAAH/AQsBDAGBAf8BlAGV - AZcB/wMAAf8CsAGxAf8DAAH/AocBigH/AZ0BngGgAf8DAAH/Aq4BsAH/AwAB/wINAYEB/wGUAZUBlwH/ - AwAB/wGaAZsBnQH/A20B9wMcASh8AAMsAUQCVgFhAe4CAAHYAf8DTgGZGAADNQFVAgAB2AH/AgAB2AH/ - A0kBiIAAAxABFgNOAZkDWAHBA1oBvQNaAb0DWgG9A1oBvQNaAb0DWgG9A1oBvQNaAb0DWgG9A1oBvQNa - Ab0DWgG9A1oBwANUAawDIAEuhAADIwEzAzUBVSAAAyMBMwMsAUT/AP8A/wD/AP8A2AAEAQQCAQMDAgQD - AQQDAwEEAwMBBAMDAQQDAwEEAwIBAwMCAQMDAQECAwABAR8AAQEDAAEBAwAEAQECAwEEAgEDAwIBAwMC - AQMDAgQDAQQDAwEEAwMBBAMCAQMDAgEDAwIBAwMBAQIDAQECAwEBAgMAAQEDAAEB0AADBAEGAwgBCwMF - AQcDBQQHAQoDCQEMAwoBDgMLAQ8DDAEQAw0BEQMNAREDDQERAwsBDwMLAQ8DCgENAwgBCwMHAQkDBgEI - AwkBDAMIAQsDAgEDCAADAgEDAwsBDwMSARgDFQEdAxgBIQMaASQDGwEmAxwBKAMdASkDHQEpAx0BKgMd - ASoDHQEqAx0BKQMcASgDHAEnAxoBJAMYASIDFgEfAxMBGgMNARIDBAEGEAADAwEEAxIBGAMVAR0DFAQc - AScDHQEpAx4BKwMfASwDHwEtAyABLgMfAS0DHwEsAx0BKgMcASgDFQEdAxYBHgMUARsDBQEHEAADAwEE - AwkBDAMBAQIDAwQEAQYDBwEJAwgBCwMJAQwDCgENAwoBDgMLAQ8DCwEPAwoBDgMKAQ0DCQEMAwoBDQMS - ARkDEQEXAw8BFAMNAREDCQEMAwMBBAgAAwEBAgMPARQDHQEpA0ABcQNLAY4DTAGPA0wBkANNAZEDTAGS - A0wBkgNMAZMDTAGTA0wBkwNMAZIDTAGSA00BkQNMAZADTAGQA0YBfgMnATsDFQEdAwgBCwgAAwMBBAMP - ARQDGAEhA0ABbgNOAZUDTgGYA04BmQNQAZsDUAGbA1EBnANRAZwDUQGcA1EBnANQAZsDUAGbA1ABmgNO - AZgDTwGXA0cBgAMkATUDEgEYAwYBCBAAAwIBAwMNAREDIwE0A1sBxgFhAl0B4gNhAeEDYQHhA2EB4QNh - AeEDYQHhA2EB4QNhAeEDYQHhAWECXQHiA1wByQMnAToDDgETAwQBBRAAAwgBCwMRARcDRAF6A1gBuwNZ - Ab8DWgHAA1gBwQNYAcEDWAHBA1kBwgNZAcIDWQHCA1sBwwNZAcIDWQG/A0gBhAMbASYDHwEtAyIBMQMd - ASoDFwEgAwgBCwwAAwUBBwNWAbED2wH/AtwB3QH/At8B4AH/AuIB4wH/AuQB5QH/AuYB5wH/AugB6QH/ - A+kB/wLpAeoB/wLpAeoB/wLpAeoB/wLnAegB/wLmAecB/wLkAeUB/wLiAeMB/wPiAf8BYQJeAdoDDAEQ - EAADCgENA1YBsQMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/AwAB/wMAAf8DXgHQAxIBGBwAA04BlQLOAc8B/wLSAdMB/wLVAdYB/wLXAdgB/wLZAdoB/wLa - AdsB/wLaAdsB/wLaAdsB/wLZAdoB/wLXAdgB/wPWAf8C0wHUAf8DUAGeHAADJgE4AQABtwHYAf8BAAG0 - AdcB/wEAAawB0gH/AQABrwHVAf8BAAGwAdcB/wEAAbEB2QH/AQABsgHbAf8BAAG0AdwB/wEAAbUB3wH/ - AQABtgHgAf8BAAG3AeIB/wEAAbkB5gH/AQABtAHXAf8BAAGxAcoB/wM7AWQDEAEWAwABARgAAysBQgLR - AdIB/wLRAdIB/wLUAdUB/wLXAdgB/wLaAdsB/wLdAd4B/wLfAeAB/wLgAeEB/wLgAeEB/wLhAeIB/wLh - AeIB/wLgAeEB/wLgAeEB/wLfAeAB/wLdAd4B/wLbAdwB/wLYAdkB/wLXAdgB/wM/AW0QAAMqAUABUgFX - AXUB/gIAAaEB/wIAAdQB/wIAAdUB/wIAAdUB/wIAAdYB/wIAAdYB/wIAAdYB/wIAAdYB/wIAAdYB/wIA - AdYB/wIAAdUB/wIAAbAB/wMAAf8DAAH/AQABpAHRAf8CAAGcAf8DAAH/Az0BaBwAA1QBrALTAdQB/wLX - AdgB/wLaAdsB/wLdAd4B/wLeAd8B/wLfAeAB/wLfAeAB/wLfAeAB/wLfAeAB/wLdAd4B/wLbAdwB/wLY - AdkB/wNVAbAcAAM7AWMBAAG8Ad4B/wEAAbgB3QH/AQABsQHaAf8BAAGzAd0B/wEAAbQB3gH/AQABtQHg - Af8BAAG2AeIB/wEAAbgB4wH/AQABuQHlAf8BAAG6AeYB/wEAAbsB5wH/AQABvAHqAf8BAAG7AeMB/wHJ - AdQB2wH/AY4BwwHUAf8DXgHVAwIBAxgAAzABSwLSAdMB/wLWAdgB/wLaAd0B/wHeAd8B4QH/AeEB4gHj - Af8B4gHjAeUB/wHiAeQB5QH/AeMB5AHmAf8B4wHlAeYB/wHkAeUB5gH/AeQB5QHmAf8B4wHlAeYB/wHj - AeQB5gH/AeIB5AHlAf8B4gHjAeQB/wLhAeMB/wLeAd8B/wLaAdsB/wNFAX0QAAMyAVABUgFXAXgB/gIA - Ab4B/wEAAYEB6AH/AQABgQHoAf8BAAGBAegB/wEAAYEB6AH/AQABgQHoAf8BAAGBAegB/wEAAYEB6AH/ - AQABgQHoAf8BAAGBAegB/wEAAYEB6AH/AgAB1gH/AwAB/wIAAZEB/wGYAdkB+QH/AQABgQG5Af8DAAH/ - A0UBfBwAA1IBqQLaAdsB/wLeAd8B/wLgAeEB/wHhAuIB/wLiAeMB/wHiAuMB/wHiAuMB/wHiAuMB/wHi - AuMB/wHhAuIB/wHgAuEB/wHeAt8B/wNVAa0cAAM6AWABAAHBAeYB/wEAAb4B5gH/AQABtwHkAf8BAAG5 - AeYB/wEAAboB5wH/AQABuwHoAf8BAAG8AekB/wEAAb0B6gH/AQABvgHqAf8BAAG+AeoB/wEAAb8B6wH/ - AQABwAHtAf8BAAG8AeQB/wHZAd4B5gL/AeEBtQH/A2EB7gMHAQkYAAMvAUoC1wHaAf8C2wHdAf8B3QHc - AdUB/wHeAdwB1gH/Ad0B2QHUAf8B3wHbAdYB/wHfAdsB1gH/AeAB3AHXAf8B4AHcAdgB/wHhAd0B2AH/ - AeEB3QHYAf8B4AHcAdgB/wHgAdwB1wH/Ad8B2wHWAf8B3wHcAdYB/wHgAd8B2AH/AuEB4gH/Ad8B4AHj - Af8DRAF7EAADMgFQAVMBVwF6Af4CAAHAAf8BAAGHAeoB/wEAAYcB6gH/AQABhwHqAf8BAAGHAeoB/wEA - AYcB6gH/AQABhwHqAf8BAAGHAeoB/wEAAYcB6gH/AQABhwHqAf8BAAGHAeoB/wIAAdcB/wMAAf8DAAH/ - AgABkAH/AwAB/wMAAf8DRQF8HAADUgGpAt8B4AH/AuIB4wH/AuMB5AH/AuQB5QH/AeQC5QH/AuUB5gH/ - AeUC5gH/AuUB5gH/AuUB5gH/AuQB5QH/AuMB5AH/AuIB4wH/A1UBrRwAAzoBYAEAAcUB7AH/AQABwwHr - Af8BAAG8AekB/wEAAb4B6gH/AQABvwHrAf8BAAHAAesB/wEAAcEB6wH/AQABwQHsAf8BAAHCAe0B/wEA - AcMB7QH/AQABxAHuAf8BAAHFAfAB/wEAAcMB6QH/AeAB4gHkAf8B9QLwAf8DYgHpAwcBCRgAAy8BSgLa - AdkB/wHKAb8BAAH/AcQBuAEAAf8BugGcAQAB/wGkAgAB/wGmAgAB/wGmAgAB/wGmAgAB/wGmAgAB/wGm - AgAB/wGmAgAB/wGmAgAB/wGmAgAB/wGkAgAB/wGyAYYBAAH/AcUBuQEAAf8ByAG7AQAB/wHeAd0B1AH/ - A0QBexAAAzIBUAFTAVgBfAH+AgABwgH/AQABjQHsAf8BAAGNAewB/wEAAY0B7AH/AQABjQHsAf8BAAGN - AewB/wEAAY0B7AH/AQABjQHsAf8BAAGNAewB/wEAAY0B7AH/AQABjQHsAf8BAAGBAdkB/wMAAf8CAAGL - Af8BAAGvAdsB/wIAAacB/wMAAf8DRQF8HAADUgGpAuIB4wH/AeMC5AH/AuUB5gH/AeYC5wH/AecC6AH/ - AecC6AH/AugB6QH/AugB6QH/AecC6AH/AeYC5wH/AeUC5gH/AuQB5QH/A1UBrRwAAzoBYAEAAckB7gH/ - AQABxgHuAf8BAAHBAewB/wEAAcIB7QH/AQABwwHtAf8BAAHEAe4B/wEAAcUB7wH/AQABxQHvAf8BAAHG - AfAB/wEAAccB8AH/AQAByAHxAf8BAAHJAfMB/wEAAcUB6gH/AeIB5AHlAf8B8gHsAeoB/wNiAekDBwEJ - GAADLwFKAdgB1AG4Af8BwAGxAQAB/wHCAbUBAAH/Ab4BqQEAAf8BqAIAAf8BqAIAAf8BqAIAAf8BqAIA - Af8BqAIAAf8BqAIAAf8BqAIAAf8BqAIAAf8BqAIAAf8BpwIAAf8BvQGiAQAB/wHDAbYBAAH/Ab8BsAEA - Af8B2QHVAbIB/wNEAXsQAAMyAVABUwFYAX4B/gIAAcMB/wEAAZQB7QH/AQABlAHtAf8BAAGUAe0B/wEA - AZQB7QH/AQABlAHtAf8BAAGUAe0B/wEAAZQB7QH/AQABlAHtAf8BAAGUAe0B/wEAAZQB7QH/AQABhwHa - Af8DAAH/AgABjwH/AYQByAH3Af8CAAGzAf8DAAH/A0UBfBwAA1IBqQLkAeUB/wLmAecB/wHnAugB/wHp - AuoB/wHqAusB/wLrAewB/wLrAewB/wLrAewB/wHqAusB/wHpAuoB/wHoAukB/wHmAucB/wNVAa0cAAM6 - AWABAAHMAfAB/wEAAcoB8QH/AQABxQHvAf8BAAHHAfAB/wEAAcgB8AH/AQAByAHxAf8BAAHJAfIB/wEA - AcoB8gH/AQABywHzAf8BAAHLAfMB/wEAAcwB8wH/AQABzgH1Af8BAAHLAe4B/wHqAewB7QH/AfAB6wHp - Af8DZAHnAwQBBhgAAy8BSgHaAdYBuwH/AcEBsQEAAf8BwgGzAQAB/wHDAbgBAAH/AbgBjwEAAf8BrQIA - Af8BrgIAAf8BrgIAAf8BrgIAAf8BrgIAAf8BrgIAAf8BrgIAAf8BrAIAAf8BtQGEAQAB/wHDAbgBAAH/ - AcIBswEAAf8BwAGxAQAB/wHaAdYBtQH/A0QBexAAAzIBUAFTAVgBfwH+AgABxAH/AQABmwHuAf8BAAGb - Ae4B/wEAAZsB7gH/AQABmwHuAf8BAAGbAe4B/wEAAZsB7gH/AQABmwHuAf8BAAGbAe4B/wEAAZsB7gH/ - AQABmwHuAf8BAAGNAdwB/wMAAf8DAAH/AgABjwH/AwAB/wMAAf8DRQF8HAADUgGpAuYB5wH/AegC6QH/ - AeoC6wH/AesC7AH/AewB7QHuAf8B6wLtAf8B7ALtAf8B6wLtAf8B6wLsAf8B6wLsAf8B6gLrAf8B6ALp - Af8DVQGtHAADOgFgAQAB0AHzAf8BAAHOAfMB/wEAAckB8gH/AQABywHzAf8BAAHMAfMB/wEAAc0B9AH/ - AQABzgH0Af8BAAHOAfUB/wEAAc8B9QH/AQAB0AH2Af8BAAHRAfcB/wEAAdIB+QH/AQABzQHwAf8B5wHp - AeoB/wHyAvEB/wNkAfEDCgEOGAADLwFKAdoB1wG8Af8BwQGxAQAB/wHCAbMBAAH/AcIBswEAAf8BwwG1 - AQAB/wG5AYoBAAH/AbMCAAH/AbMCAAH/AbMCAAH/AbMCAAH/AbMCAAH/AbMCAAH/AbgBggEAAf8BwgGy - AQAB/wHCAbQBAAH/AcIBswEAAf8BwAGxAQAB/wHcAdgBtgH/A0QBexAAAzIBUAFUAVkBfwH+AQABggHG - Af8BAAGiAfAB/wEAAaIB8AH/AQABogHwAf8BAAGiAfAB/wEAAaIB8AH/AQABogHwAf8BAAGiAfAB/wEA - AaIB8AH/AQABogHwAf8BAAGiAfAB/wEAAZMB3gH/AwAB/wIAAZQB/wEAAbsB5AH/AgABsAH/AwAB/wNF - AXwcAANSAakB5wLoAf8B6gLrAf8B6wLsAf8B7AHtAe4B/wHqAekB5wH/AeEB2wHSAf8B4gHdAdQB/wLr - AeoB/wHrAuwB/wHrAuwB/wHrAuwB/wLrAewB/wNVAa0cAAM6AWABAAHTAfUB/wEAAdIB9gH/AQABzgH1 - Af8BAAHPAfYB/wEAAdEB9gH/AQAB0QH3Af8BAAHSAfcB/wEAAdMB+AH/AQAB0wH4Af8BAAHUAfkB/wEA - AdQB+QH/AQAB1gH6Af8BAAHRAfMB/wHwAu0B/wHuAu0B/wPtAf8DOgFiGAADLwFKAdsB2AG9Af8BwQGx - AQAB/wHCAbMBAAH/AcIBswEAAf8BwgG0AQAB/wHDAbkBAAH/Ab8BnAEAAf8BuAIAAf8BuAIAAf8BuAIA - Af8BuAIAAf8BvQGSAQAB/wHDAbgBAAH/AcIBtAEAAf8BwgGzAQAB/wHCAbMBAAH/AcABsQEAAf8B3AHZ - AbgB/wNEAXsQAAMyAVABVAFZAX8B/gEAAYYByAH/AQABqAHxAf8BAAGoAfEB/wEAAagB8QH/AQABqAHx - Af8BAAGoAfEB/wEAAagB8QH/AQABqAHxAf8BAAGoAfEB/wEAAagB8QH/AQABqAHxAf8BAAGZAd8B/wMA - Af8CAAGLAf8BAAG1Ae8B/wIAAaoB/wMAAf8DRQF8HAADUgGpAekC6gH/AesC7AH/AesC7AH/AewB7QHu - Af8B3QHWAc0B/wHrAuoB/wHlAeMB3gH/AeIB3gHXAf8C7gHwAf8B6wLsAf8B6wLsAf8B6wLsAf8DVQGt - HAADOgFgAQAB1wH4Af8BAAHVAfkB/wEAAdIB+AH/AQAB1AH5Af8BAAHUAfkB/wEAAdUB+QH/AQAB1QH5 - Af8BAAHVAfkB/wEAAdYB+QH/AQAB1gH5Af8BAAHXAfkB/wEAAdgB+gH/AQAB1AH2Af8BrgHXAegB/wH0 - AvMB/wHsAe0B7AH/A14BzhgAAy8BSgHcAdkBwAH/AcMBtAEAAf8BxAG2AQAB/wHEAbYBAAH/AcQBtgEA - Af8BxAG4AQAB/wHBAY8BAAH/Ab4CAAH/Ab4CAAH/Ab4CAAH/Ab4CAAH/AcABhgEAAf8BxAG1AQAB/wHE - AbYBAAH/AcQBtgEAAf8BxAG2AQAB/wHCAbQBAAH/Ad4B2gG7Af8DRAF7EAADMgFQAVQBWQF/Af4BAAGL - AckB/wEAAa8B8wH/AQABrwHzAf8BAAGvAfMB/wEAAa8B8wH/AQABrwHzAf8BAAGvAfMB/wEAAa8B8wH/ - AQABrwHzAf8BAAGvAfMB/wEAAa8B8wH/AQABngHhAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wNFAXwcAANS - AakB6gLrAf8B6wLsAf8B7wHxAfIB/wHbAdcB0QH/AdoB1QHOAf8B8wH2AfkB/wHZAdQBzQH/Ad8B3AHW - Af8B7gHvAfEB/wLsAe0B/wHrAuwB/wHrAuwB/wNVAa0cAAM6AWABAAHaAfkB/wEAAdkB+gH/AQAB1gH5 - Af8BAAHWAfkB/wEAAdcB+QH/AQAB1wH5Af8BAAHYAfkB/wEAAdgB+QH/AQAB2QH5Af8BAAHZAfkB/wEA - AdoB+QH/AQAB2gH5Af8BAAHbAfoB/wEAAdUB+AH/AcMB3gHpAf8B9gHzAfEB/wHrAuwB/wMlATcUAAMv - AUoB3gHbAcQB/wHIAboBAAH/AckBuwEAAf8ByQG7AQAB/wHJAb4BAAH/AccBqQEAAf8BwwIAAf8BxAIA - Af8BxAIAAf8BxAIAAf8BxAIAAf8BwwIAAf8BxwGlAQAB/wHJAb4BAAH/AckBuwEAAf8ByQG7AQAB/wHH - AbkBAAH/AeAB3QHAAf8DRAF7EAADMgFQAVQBWQF/Af4BAAGQAcoB/wEAAbYB9QH/AQABtQH1Af8BAAG1 - AfUB/wEAAbUB9QH/AQABtQH1Af8BAAG1AfUB/wEAAbUB9QH/AQABtQH1Af8BAAG1AfUB/wEAAbUB9QH/ - AQABpgHjAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wNFAXwcAANSAakB6wLsAf8B6wLtAf8B6wLsAf8BwwG8 - Aa4B/wHsAu0B/wPqAf8BxAG8Aa8B/wLuAe8B/wHsAe0B7gH/Au0B7gH/Au0B7gH/AewC7QH/A1UBrRwA - AzoBYAEAAdsB+QH/AQAB2wH6Af8BAAHYAfkB/wEAAdkB+QH/AQAB2QH5Af8BAAHaAfkB/wEAAdoB+QH/ - AQAB2wH6Af8BAAHbAfoB/wEAAdsB+gH/AQAB3AH6Af8BAAHcAfoB/wEAAd0B+gH/AQAB2wH6Af8BvAHg - Ae4B/wH1Ae8B7QH/AewC7QH/A1IBpBQAAy8BSgHgAd0BxwH/AcwBvwEAAf8BzQHAAQAB/wHNAcABAAH/ - Ac0BwwEAAf8BzQGlAQAB/wHKAgAB/wHKAYEBAAH/AcoBgQEAAf8BygGBAQAB/wHKAYEBAAH/AcoCAAH/ - AcwBnQEAAf8BzQHEAQAB/wHNAcABAAH/Ac0BwAEAAf8BzAG+AQAB/wHiAd8BxAH/A0QBexAAAzABSwFU - AVkBfwH+AQABjgHCAf8BAAHFAfcB/wEAAcYB9wH/AQABxgH3Af8BAAHGAfcB/wEAAcYB9wH/AQABxgH3 - Af8BAAHGAfcB/wEAAcYB9wH/AQABxgH3Af8BAAHGAfcB/wEAAZ0B1wH/AwAB/wMAAf8DAAH/AwAB/wMA - Af8DQwF4HAADUgGpAesC7AH/AfIB9AH2Af8ByAHDAbkB/wHMAccBvgH/AfkB/AL/AcUBvgG0Af8B0QHN - AcYB/wHyAfMB9QH/AvAB8QH/Ae4C8AH/AuoB6wH/AegB6QHqAf8DVwG3HAADOgFgAYEB3gH5Af8BAAHd - AfoB/wEAAdsB+gH/AQAB2wH6Af8BAAHcAfoB/wEAAdwB+gH/AQAB3QH6Af8BAAHdAfoB/wGBAd4B+gH/ - AYEB3gH6Af8BggHfAfoB/wGDAd8B+gH/AYQB3wH6Af8BAAHdAfoB/wG/AeIB7wH/AfoB9gH1Af8C7QHu - Af8BbQJSAfcDEQEXEAADLwFKAeEB3gHLAf8B0AHEAQAB/wHRAcUBAAH/AdEBxQEAAf8B0QHIAQAB/wHS - AbMBAAH/AdIBiAEAAf8BzgGFAQAB/wHPAYYBAAH/Ac8BhgEAAf8BzgGFAQAB/wHRAYYBAAH/AdIBsAEA - Af8B0QHIAQAB/wHRAcUBAAH/AdEBxQEAAf8B0AHDAQAB/wHkAeAByAH/A0QBexAAAw4BEwNbAcsBVQFo - AX8B/gIAAZwB/wIAAaAB/wIAAaIB/wIAAaQB/wIAAaUB/wIAAacB/wIAAagB/wIAAagB/wIAAagB/wIA - AaUB/wIAAYMB/wMAAf8DAAH/AwAB/wFXAVwBfwH+A2AB3gMZASMcAANSAakB7AHtAe4B/wPnAf8BqQGg - AY8B/wHvAfAB8QH/AeYB5QHkAf8BqwGiAZEB/wLxAfMB/wPxAf8C2wHcAf8BoAGhAaIB/wGgAaEBogH/ - AqoBqwH/AzYBWBwAAzoBYAGFAeAB+gH/AYMB3wH6Af8BAAHdAfoB/wGBAd4B+gH/AYIB3gH6Af8BgwHf - AfoB/wGEAd8B+gH/AYUB4AH6Af8BhgHgAfoB/wGHAeEB+gH/AYgB4QH6Af8BiQHhAfoB/wGLAeIB+wH/ - AYMB4AH7Af8BvwHhAe0B/wHzAe0B7AH/AvAB8QH/Ae0C7gH/A0QBehAAAy8BSgHiAeABzgH/AdQByAEA - Af8B1QHJAQAB/wHVAckBAAH/AdUBygGBAf8B1QHJAQAB/wHZAaEBAAH/AdcBjAEAAf8B0wGJAQAB/wHT - AYkBAAH/AdYBiwEAAf8B2wGdAQAB/wHVAcYBAAH/AdUBygGBAf8B1QHJAQAB/wHVAckBAAH/AdQBxwEA - Af8B5QHiAcwB/wNEAXsUAAMaASQDQgFzA00BkQNMAZIDTAGSA0wBkgNMAZIDVAGuA2UB9AMrAfwDXQHK - A0wBkwNMAZIDTAGSA0wBkgNMAZIDRwGBAygBPCAAA1IBqQHzAfUB9wH/AbYBrwGjAf8BxQHAAbcB/wH7 - Af0C/wGuAacBmAH/AcoBxQG+Af8B9AH1AfgB/wLyAfMB/wKnAagB/wGHAYgBiQH/ApoBmwH/AzgBXCAA - AzoBYAGKAeEB+gH/AYkB4QH6Af8BhQHgAfoB/wGHAeAB+gH/AYgB4QH6Af8BiQHhAfoB/wGKAeIB+wH/ - AYwB4wH7Af8BjQHjAfsB/wGPAeQB+wH/AZAB5AH7Af8BkQHlAfsB/wGTAeYB+wH/AYwB5AH7Af8BxQHm - AfIB/wH6AfYB9AH/Ae8C8AH/AesC7AH/A0cBgRAAAy8BSgHjAeEB0QH/AdkBzQGJAf8B2gHOAYwB/wHa - Ac4BjAH/AdoBzgGMAf8B2gHQAZAB/wHZAckBgQH/Ad8BrwEAAf8B3gGaAQAB/wHeAZkBAAH/Ad8BqwEA - Af8B2gHFAQAB/wHZAdABkQH/AdoBzgGMAf8B2gHOAYwB/wHaAc4BjAH/AdgBzQGHAf8B5gHjAdAB/wNE - AXssAAMCAQMDVwG6A0oBigMyAVEDYQHaAyUBNzgAA1QBrgLkAeIB/wGfAZcBhgH/Ae4B7wHwAf8C7gHw - Af8BzQHKAcMB/wHsAu0B/wHtAu4B/wHvAvAB/wGkAaUBpgH/AZQBlQGWAf8DOAFcJAADOgFgAY8B4wH6 - Af8BjgHkAfsB/wGMAeMB+wH/AY4B5AH7Af8BkAHkAfsB/wGRAeUB+wH/AZMB5gH7Af8BlAHnAfsB/wGW - AecB/AH/AZcB6AH8Af8BmQHoAfwB/wGaAekB/AH/AZwB6gH8Af8BlQHpAfwB/wHFAeQB7wH/AfIB7AHr - Af8DZQHlA0gBhAMHAQoQAAMwAUwB5AHhAdMB/wHfAdUBnAH/Ad4B0wGZAf8B3gHTAZkB/wHeAdMBmQH/ - Ad4B0wGZAf8B3gHUAZsB/wHdAdUBngH/Ad0BzgGNAf8B3gHNAYwB/wHdAdQBnAH/Ad0B1AGcAf8B3gHT - AZkB/wHeAdMBmQH/Ad4B0wGZAf8B3gHTAZkB/wHgAdYBngH/AecB5QHUAf8DRgF+JAADIgEyA0IBcwNZ - Ab8DTAGQAw0BEQQAAzoBYQNZAb8DRAF5AzEBTwMHAQksAANCAXYBywHJAcMB/wGwAaoBngH/AfYB+AH6 - Af8B6wLsAf8B+QH6Af4B/wHtAe4B7wH/Au0B7gH/Au4B7wH/AasBrAGtAf8DNwFbKAADOgFhAZYB5wH7 - Af8BlgHnAfsB/wGVAecB/AH/AZcB6AH8Af8BmQHoAfwB/wGaAekB/AH/AZwB6gH8Af8BnQHrAfwB/wGf - AesB/AH/AaAB7AH8Af8BogHtAf0B/wGjAe0B/QH/AaUB7gH9Af8BogHuAf0B/wNdAdIDOQFfAwcBChgA - AyYBOALjAd0B/wHlAdwBsgH/AecB3wG0Af8B5wHfAbUB/wHnAd4BtQH/AecB3gG1Af8B5wHeAbUB/wHn - Ad4BtQH/AecB3wG3Af8B5wHfAbcB/wHnAd4BtQH/AecB3gG1Af8B5wHeAbUB/wHnAd4BtQH/AecB3gG1 - Af8B5wHeAbUB/wHlAdwBrwH/AecB5gHbAf8DOAFeJAADVQGwAXQCfwH+AWMCfwH+AxYBHwgAAwoBDgNW - AbYBAAG/AeYB/wNhAdoDIgExMAADQAFxAV4CWwHZA0UBfANHAYIDXwHjA0wBkwNIAYMDSAGFAzABTCwA - AxgBIQFnAlkB8gGdAesB/AH/AZ0B6wH8Af8BnwHrAfwB/wGhAewB/AH/AaIB7QH8Af8BpAHtAf0B/wGl - Ae4B/QH/AacB7wH9Af8BqAHwAf0B/wGqAfAB/QH/AasB8QH9Af8BrQHyAf0B/wNkAfEDEQEXIAADAQEC - A0kBiAHlAeQB3AH/AecB5AHWAf8B6QHnAdgB/wHpAecB2AH/AekB5wHYAf8B6QHnAdkB/wHpAecB2QH/ - AekB5wHZAf8B6QHnAdkB/wHpAecB2QH/AekB5wHZAf8B6QHnAdkB/wHpAecB2QH/AekB5wHYAf8B6QHm - AdgB/wHoAecB3QH/A1UBtQMFAQckAANQAZ4DfwH+A14B3QMDAQQLAAEBA0wBkAN/Af4DXAHRAxwBKDQA - A0ABbgNCAXMDRgF/AzcBWkAAAxgBIQM6AWEDOwFkAzsBYwM7AWMDOwFjAzsBYwM7AWMDOwFjAzsBYwM7 - AWMDOwFkAzoBYQMYASEoAAMFAQcDQwF4A1ABngNQAZsDUAGbA1ABmwNQAZsDUAGbA1ABmwNQAZsDUAGb - A1ABmwNQAZsDUAGbA1ABmwNQAZ0DSgGJAxMBGigAAw4BEwMtAUYDDQESEAADCAELAzABTAMcAScDAAEB - OAADHgErAxYBH/8A/wD/AP8A/wCIAAEBAwQBBgMBAQIDAAEBAwIBAwMEAQUDBAEGAwUBBwMEAQYDBAEF - AwMBBAMAAQEDAAEBAwQBBQMBAQIgAAMDAQQDCQEMAw0BEQMPARQDEQEXAxIBGQMTARoDFAEcAxYBHgMT - ARoDDQESAw0BEQMUARwDFQEdAxQBHAMTARoDEgEZAxEBFwMPARQDDQERAwkBDAMDAQRvAAEBAwIBAwMC - AQMDAQQCBAMEBAEGAwQBBgMFAQcDBQEHAwUBBwMFAQcDBAEGAwQBBgMEAQUDAgEDAwEBAgMBBAIBAwMA - AQEQAAMEAQYDFgEfAzoBYgNKAYsDSgGMA0sBjgNLAY4DTAGPA0wBjwNLAY4DSgGNA0oBjANCAXYDHwEt - AwkBDCAAAwkBDAMXASADHQEqAyIBMQMkATUDIwE0AxwBKAMeASsDJgE5Ay4BSANcAckDWAG7AykBPgMn - AToDHQEqAxwBKAMkATYDJAE1AyIBMQMdASoDFwEgAwgBCxcABAEEAgQDAQQDAwQEAQUDBAEFAwQBBQME - AQUDBAEFAwQBBQMDAQQDAwEEAwIBAwMBAQIYAAMEAQUDFAEbAxYBHwMkATUDMAFLAzEBTQMxAU8DMgFR - AzMBUgMzAVMDMwFTAzMBUwMzAVMDMwFSAzIBUQMxAU8DMQFNAzABTAMoATwDFwEgAxUBHQMFAQcQAAMv - AUoC1wHYAf8C1gHXAf8C1wHYAf8C2gHbAf8C2wHcAf8C3AHdAf8B3AHdAd4B/wLbAdwB/wLeAd8B/wLg - AeEB/wLkAeUB/wNJAYgwAAMBAQIDAQECAxEBFwNSAacDRgF+BAADLAFEAwAB/wMAAf8DFwEgBAADTQGR - A1ABmgMJAQwDAQECAwEBAhQAAwkBDAMXASADHQEqAyEBMAMjATQDJgE4AycBOgMnATsDKAE9AykBPgMp - AT4DKQE+AykBPgMoAT0DJwE7AycBOgMkATYDGgElAzMBUgMjATMDFgEeAwgBCwsAAQEEAANAAXEDWQHy - AwAB/wNAAf0DQAH9A0AB/QNAAf0DQAH9A0AB/QNAAf0DQAH9A0AB/QNAAf0DQAH9A0AB/QFSAVEBVAH+ - A0cB+QNQAZoDBAEFAwABARAAA0EBcgLRAdIB/wKyAbMB/wKuAa8B/wGwAbEBsgH/AbEBsgGzAf8CsgGz - Af8CsgGzAf8CrwGwAf8CxQHGAf8C3QHeAf8C4gHjAf8DVQGtAwABAQMEAQYDAgQDBAQBBgMAAQEgAAM9 - AWcDAAH/AwAB/wNKAYoDWAG7AwAB/wMAAf8BUwJRAaUDTAGTAwAB/wMAAf8DKQE/HAADAwEEAwoEDQER - AxABFQMSARgDEwEaAxQBHAMVAR0DFgEeAxYBHwMWAR8DFgEfAxYBHwMWAR4DFQEdAxIBGAMHAQkDTAGP - AgAB5wH/AyMBMwMFAQcDAwEEDAADFQEdA1wB+APyAf8DAAH/AZgBmgGcAf8BwwHEAcUB/wMAAf8D+QH/ - AwAB/wGRAZMBlQH/AsUBxgH/AwAB/wP1Af8DAAH/AZABkgGUAf8CzQHOAf8DAAH/AecC6AH/AwAB/wMu - AUgUAANAAW8C1wHYAf8BxAHFAcYB/wHCAcMBxAH/AsQBxQH/AcQBxQHGAf8CxQHGAf8CxAHFAf8CyQHK - Af8C5AHlAf8C4gHjAf8C5wHoAf8DXgHOAz4BawNAAXEDQAFwAzIBUAMWAR4DBwEJIAADEAEVA00B+gEA - AYEBggH/AQACgQH/AQACgQH/AQABgQGCAf8BAAGBAYIB/wEAAoEB/wEAAoEB/wEAAYEBggH/A2EB5mAA - A1ABnQEAAYMB6wH/A1wBzxgAAyIBMQMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wIAAYEB/wMAAf8DAAH/ - AwAB/wMAAf8BAAGBAYMB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wM6AWAUAANAAW8C3gHfAf8CvwHA - Af8BuQG6AbsB/wG7ArwB/wG7AbwBvQH/AbsBvAG9Af8BuwG8Ab0B/wG3AbgBuQH/AbICswH/AsoBywH/ - AuYB5wH/AtwB3QH/AtMB1AH/AtIB0wH/AtEB0gH/AW0CUgH3AzABTAMAAQEUAAMQARUDUgGnA0cBgANC - AXMBhAFAAYAB/QKFAYcB/wGDAYQBhgH/AYMBhAGGAf8BhgGHAYgB/wKGAYgB/wKDAYUB/wGDAYQBhgH/ - AoUBhwH/A18B8wM6AWADTAGPA04BlgMHAQk0AAMIAQsDCAELAwgBCwMIAQsDCAELAxgBIQNbAcMBAAGH - AeoB/wEAAYgB6gH/A0QBehgAAyIBMQMAAf8DAAH/AoEBggH/AwAB/wMAAf8CgQGCAf8DAAH/AQABgQGC - Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AQABgQGCAf8DAAH/AwAB/wM6AWAUAANAAW8C4AHh - Af8CuwG8Af8BtAG1AbYB/wG2AbcBuAH/AbcCuAH/AbYBtwG4Af8BuQK6Af8B5ALlAf8B6QLqAf8C5QHm - Af8C6AHpAf8C0AHRAf8BpQGmAacB/wK4AbkB/wLLAcwB/wLKAcsB/wNRAaIYAAM7AWMBiQGKAYwB/wGJ - AYoBiwH/AYkBigGLAf8BiQGKAYwB/wKIAYoB/wKQAZIB/wNfAdsDUgGjA1IBpwNhAeQBjgGPAZAB/wGI - AYkBigH/AYkBigGMAf8BiQGKAYsB/wGJAYoBiwH/AYkBigGMAf8DLAFEGAADEAEWAyEBMAwAAz4BawNh - AdwDYQHuA2EB7gNhAe4DYQHuA2EB7gFHAmoB+QEAAY4B7AH/AQABjgHsAf8BAAGOAewB/wNhAeYDTgGV - AwMBBBAAAyIBMQMAAf8BsQGwAbEB/wKvAbAB/wOvAf8DrwH/Aa8BrgGvAf8BrwGuAa8B/wGvAa4BrwH/ - Aq4BrwH/Aq8BsAH/AqcBqAH/AwAB/wG1AbQBtQH/A68B/wKvAbAB/wKvAbAB/wK3AbgB/wMAAf8DOgFg - FAADQAFvAeIC4wH/AcYBxwHLAf8BwgHFAckB/wHEAcgBywH/AcUByAHMAf8BxAHHAcsB/wHDAcUBxgH/ - AckCygH/AdMB1AHVAf8B6gLrAf8B6gLrAf8B0wLUAf8CsQGzAf8CywHMAf8CzwHQAf8CygHLAf8DUgGh - GAADEgEZA1sBwwKPAZEB/wKPAZEB/wGNAY4BjwH/AZcBmAGZAf8DQgF1AwEBAggAAwgBCwNMAY8ClQGX - Af8BjQGOAY8B/wKPAZEB/wN/Af4DVgGxAwoBDRgAAyUBNwMAAf8DPgFrBAADFAEbAQABlAHsAf8BAAGT - Ae0B/wEAAZQB7QH/AQABlAHtAf8BAAGUAe0B/wEAAZQB7QH/AQABlAHtAf8BAAGUAe0B/wEAAZQB7QH/ - AQABlAHtAf8BAAGUAe0B/wEAAZMB7QH/AQABkwHtAf8DNQFXEAADIgExAwAB/wKtAa4B/wKsAa0B/wKs - Aa0B/wKsAa0B/wKsAa0B/wKsAa0B/wKsAa0B/wKsAa0B/wKtAa4B/wKlAaYB/wMAAf8CsgGzAf8CrQGu - Af8CrQGuAf8CrQGuAf8CtAG1Af8DAAH/AzoBYBQAA0ABbwHmAucB/wHaAdcBxgH/AdIBxQGyAf8B1AHH - AbUB/wHTAcUBtQH/AdYBywG3Af8C4AHXAf8C4wHlAf8D5QH/AesC7AH/AewC7QH/AtUB1gH/Aa0BrgGv - Af8CtAG1Af8CvwHAAf8CzwHQAf8DUQGgHAADFgEeAZMBlAGVAf8BkwGUAZUB/wGWAZcBmAH/A0oBixgA - A1QBrgGUAZUBlgH/AZMBlAGVAf8DXAH4JAADYAHWAwAB/wNIAYYDHAEoAQABmwHwAf8BAAGaAe4B/wEA - AZoB7gH/AQABmgHuAf8BAAGaAe4B/wEAAZoB7gH/AQABmgHuAf8BAAGaAe4B/wEAAZoB7gH/AQABmgHu - Af8BAAGaAe4B/wEAAZoB7gH/AQABmgHuAf8DQAFuEAADIgExAwAB/wK2AbcB/wK1AbYB/wK1AbYB/wK1 - AbYB/wK1AbYB/wK1AbYB/wK1AbYB/wK1AbYB/wK2AbcB/wKuAa8B/wMAAf8CuwG8Af8CtgG3Af8CtgG3 - Af8CtgG3Af8DvgH/AwAB/wM6AWAUAANAAW8B5wHoAeUB/wHHAbkBAAH/Aa4CAAH/AakCAAH/AakCAAH/ - AbUBjgEAAf8B3AHWAZ4B/wHoAfAB9gH/AeoB7QHsAf8B6wLsAf8B7gLvAf8B1QLWAf8CvgG/Af8CwQHC - Af8CxgHHAf8C0QHSAf8DUQGgFAADDwEUA0kBhwNcAckCmQGbAf8BlwGYAZkB/wNcAfgDEAEWGAADJAE1 - A38B/gGXAZgBmgH/A38B/gNYAbkDRAF6AwcBCRQAAwoBDQNTAagDAAH/AwAB/wNeAdoDKwH8AQABoAHw - Af8BAAGgAfAB/wEAAaAB8AH/AQABoAHwAf8BAAGgAfAB/wEAAaAB8AH/AQABoAHwAf8BAAGgAfAB/wEA - AaAB8AH/AQABoAHwAf8BAAGgAfAB/wEAAaAB8AH/Az4BahAAAyIBMQMAAf8CvwHAAf8CvgG/Af8CvgG/ - Af8CvgG/Af8CvgG/Af8CvgG/Af8CvgG/Af8CvgG/Af8CvwHAAf8CtwG4Af8DAAH/AsQBxQH/Ar8BwAH/ - Ar8BwAH/Ar8BwAH/AscByAH/AwAB/wM6AWAUAANAAW8C6AHlAf8ByQG/AQAB/wHBAaUBAAH/AbsCAAH/ - Ab0BggEAAf8BwgGzAQAB/wHiAdQBoQH/AZcB4AHQAf8BygHmAd4B/wH2Ae4B8QH/Ae0B7wHuAf8B2wHZ - AdoB/wHKAccByQH/As8B0AH/AtYB1wH/AtIB0wH/A1EBoBQAA0cBgQGdAZ4BnwH/AZ0BngGfAf8CngGf - Af8BnAGdAZ4B/wNcAd8cAAMOARMDagH5AZwBnQGeAf8CngGfAf8BnQGeAZ8B/wGdAZ4BnwH/AzYBWBAA - AxgBIgNhAeQDAAH/AwAB/wGBAgAB/wMAAf8BAAGrAfoB/wEAAaYB8QH/AQABpgHxAf8BAAGmAfEB/wEA - AaYB8QH/AQABpgHxAf8BAAGmAfEB/wEAAaYB8QH/AQABpgHxAf8BAAGmAfEB/wEAAaYB8QH/AQABpgHx - Af8BAAGmAfEB/wM+AWoQAAMiATEDAAH/AskBygH/AskBygH/AsgByQH/AsgByQH/AsgByQH/AsgByQH/ - AsgByQH/AsgByQH/AskBygH/AsABwQH/AwAB/wPOAf8CyAHJAf8CyAHJAf8CyAHJAf8C0AHRAf8DAAH/ - AzoBYBQAA0ABbwHpAeoB5wH/AdMBygGBAf8BzgGtAQAB/wHMAgAB/wHNAYwBAAH/Ac0BvgEAAf8B6wHc - AbcB/wEAAdcBugH/AQABywGaAf8B2AHpAeQB/wH9AfEB9gH/Ac8B3wHbAf8BrwHAAbwB/wHJAccByAH/ - AtYB1wH/AtQB1QH/A1EBoBQAAyIBMQNZAccBZwJZAfICowGkAf8CogGkAf8DXQHwAwcBChgAAxoBJQGm - AZ4BnwH9AaIBowGkAf8CowGkAf8DXQHtA1kBvgMWAR8QAAM/AW0BhQIAAf8BhQIAAf8BhQIAAf8BjQIA - Af8CAAGCAf8BAAGxAfsB/wEAAawB8gH/AQABrAHyAf8BAAGsAfIB/wEAAawB8gH/AQABrAHyAf8BAAGs - AfIB/wEAAawB8gH/AQABrAHyAf8BAAGsAfIB/wEAAawB8gH/AQABrAHyAf8BAAGsAfIB/wM+AWoQAAMi - ATEDAAH/AtIB0wH/AtIB0wH/AtEB0gH/AtEB0gH/AtEB0gH/AtEB0gH/AtEB0gH/AtEB0gH/AtIB0wH/ - AskBygH/AgABgQH/AtcB2AH/AtEB0gH/AtEB0gH/AtEB0gH/A9oB/wMAAf8DOgFgFAADQAFvAeoB6wHp - Af8B3wHWAaMB/wHdAdEBkQH/Ad8BugEAAf8B3gHFAQAB/wHcAdIBlAH/AfAB4wHLAf8BrwHgAc8B/wEA - Ab0BAAH/AQABxgGOAf8BigHYAbsB/wEAAdUBrwH/AYYB1gG9Af8B6QHeAeMB/wHYAdkB2gH/AtYB1wH/ - A1EBoBwAAyIBMQKoAakB/wKoAakB/wKoAaoB/wM6AWAYAANJAYcCqAGpAf8CqAGpAf8DXAH4AxEBFxgA - Az4BagGRAgAB/wGRAgAB/wGRAgAB/wGZAgAB/wIAAY4B/wEAAbcB/AH/AQABsQH0Af8BAAGxAfQB/wEA - AbEB9AH/AQABsQH0Af8BAAGxAfQB/wEAAbEB9AH/AQABsQH0Af8BAAGxAfQB/wEAAbEB9AH/AQABsQH0 - Af8BAAGxAfQB/wEAAbEB9AH/Az4BaxAAAyIBMQMAAf8C2wHcAf8D2gH/AtkB2gH/AtkB2gH/AtkB2gH/ - AtkB2gH/AtkB2gH/AtkB2gH/AtoB2wH/AtEB0wH/AYMBhAGGAf8C3wHgAf8C2QHaAf8C2QHaAf8C2QHa - Af8C4gHjAf8DAAH/AzoBYBQAA0ABbwHqAewB6wH/AesB6QHiAf8B6wHpAeAB/wHrAe0B5wH/AuwB5QH/ - AewB6gHgAf8B8QHuAewB/wHdAeMB4QH/AQABsgEAAf8BAAG6AQAB/wEAAb0BAAH/AQABwAGBAf8BAAHL - AZwB/wHbAt0B/wHcAdsB3AH/AtgB2QH/A1EBoBgAAwQBBQNKAY0CrQGuAf8CrQGuAf8CrQGuAf8DZAHx - AycBOhAAAzMBUwMrAfwCrQGuAf8CrQGuAf8DKwH8A0ABbxgAAz4BagGdAgAB/wGdAgAB/wGdAgAB/wGk - AgAB/wIAAZMB/wEAAcAC/wEAAbgB9QH/AQABtwH1Af8BAAG3AfUB/wEAAbcB9QH/AQABtwH1Af8BAAG3 - AfUB/wEAAbcB9QH/AQABtwH1Af8BAAG3AfUB/wEAAbcB9QH/AQABtwH1Af8BAAG6AfUB/wM8AWYQAAMi - ATEDAAH/AvUB9gH/A/cB/wP2Af8D9gH/AvUB9gH/AvUB9gH/A/UB/wP1Af8D9gH/AugB6QH/AYcBiAGK - Af8C+gH7Af8C9QH2Af8C9QH2Af8D9gX/AwAB/wM6AWAUAANAAXAB6gLrAf8B6wHtAe4B/wHsAe0B8AH/ - AewB7QHvAf8B7QHuAfAB/wHtAe4B8QH/AvIB9AH/AdIBzgHRAf8BAAGRAYkB/wEAAakBAAH/AQABtAEA - Af8BAAG5AQAB/wEAAb0BAAH/AbMB2AHKAf8B5AHeAeIB/wLaAdsB/wNRAaAYAAM4AV4CsgGzAf8BsgGz - AbQB/wGzAbQBtQH/AbEBsgGzAf8BsQGyAbMB/wN/Af4DUAGeAzgBXgM6AWIDVAGsAa8BsAGxAf8BsQGy - AbMB/wGxAbIBswH/AbMBtAG1Af8BsQGyAbMB/wGyAbMBtAH/AygBPRQAAz4BagGpAQABhAH/AakBAAGE - Af8BqQEAAYQB/wGqAQABgwH/AaoBAAGCAf8BAAGrAdMB/wEAAccB/gH/AQABxQH8Af8BAAHFAfsB/wEA - AcUB+wH/AQABxQH7Af8BAAHEAfsB/wEAAcMB+AH/AQABwwH3Af8BAAHDAfcB/wEAAcMB9wH/AQABwwH3 - Af8DXAHMAw4BExAAAyIBMQMAAf8DAAH/ApQBlwH/AY8BkAGSAf8BjwGQAZIB/wGYAZkBmwH/AZABkQGT - Af8CmgGdAf8BlwGYAZoB/wGXAZgBmgH/AYsBjAGOAf8DAAH/AZABkQGTAf8BkQGSAZQB/wGLAYwBjwH/ - AZMBlAGWAf8BhAGFAYgB/wMAAf8DOgFgFAADQAFuAekC6gH/AesC7AH/AesC7AH/AuwB7QH/AewC7QH/ - AewC7QH/AvEB8gH/AcoBywHNAf8BmwGSAZQB/wGfAaYBAAH/AQABngEAAf8BAAGvAQAB/wEAAcYBmgH/ - AckB3wHXAf8B5QHhAeQB/wLcAd0B/wNSAacYAAMgAS8DYQHhA1kBvwNVAbIDfwH+ArcBuAH/ArcBuAH/ - ArYBtwH/ArQBtQH/ArQBtgH/ArYBtwH/ArcBuAH/ArcBuAH/A18B+wNSAacDXAHPA2AB1AMUARsUAAM+ - AWoBtAGJAZIB/wG1AYkBkgH/AbUBiQGSAf8BtAGJAZIB/wG4AYgBkAH/AbYBhwGPAf8BlAGWAacB/wGR - AZkBqwH/AZIBmAGqAf8BkgGYAaoB/wGSAZgBqgH/AZIBmAGqAf8DOAFcAx0BKgMfASwDHwEsAxsBJhgA - AyEBMAMAAf8BsAGxAbIB/wMAAf8CAAGBAf8BmAGZAZsB/wMAAf8CuQG7Af8DAAH/AYMBhAGHAf8BngGf - AaEB/wMAAf8BvwHAAcEB/wMAAf8CAAGBAf8BmwGdAZ4B/wMAAf8BqAGpAasB/wMAAf8DOgFgFAADFgEf - A10B1wNfAfsDXwH7A00B+gGoAqAB/QLsAe0B/wLvAfAB/wHPAdAB0wH/AcsBxgG5Af8BzgHWAbMB/wG5 - Ac8BrAH/Ad0B4gHSAf8B7QHmAewB/wG4AbUBtwH/AaUBpgGnAf8BrAGtAa4B/wM6AWEcAAMCAQMEAAMI - AQsDXwH7AbsBvAG9Af8CvAG9Af8CvAG+Af8CvAG+Af8CvAG9Af8CvAG+Af8CvAG+Af8BuwG8Ab0B/wFh - Al0B4iQAAz4BawHDAZwBpAH/Ab8BlgGeAf8BvwGXAZ8B/wG/AZcBnwH/Ab8BlwGfAf8BwQGWAZ4B/wHH - AZQBmgH/AcgBlAGZAf8ByAGUAZoB/wHIAZQBmQH/AccBkwGZAf8BzAGbAaEB/wMaASUoAAMRARcDUgH0 - AeEC4gH/AwAB/wGeAZ8BoQH/AcIBwwHEAf8DAAH/A+sB/wMAAf8CowGlAf8CxwHJAf8DAAH/A+gB/wMA - Af8CnAGfAf8CxwHIAf8DAAH/AdoC2wH/AwAB/wMqAUAYAAMKAQ0DGgEkAxoBJAMZASMDTgGVAdkB2AHa - Af8C3QHeAf8C3gHfAf8B4QHiAeMB/wHnAeYB6gH/Ae4B6gHuAf8B7gHtAe8B/wG9Ab4BvwH/AYcBiAGJ - Af8DfwH+Az8BbSgAAzsBYwLBAcIB/wLBAcIB/wNaAcUDYQHkAcEBwAHCAf8BwQHAAcIB/wNeAdgDXAHR - AsEBwgH/AsEBwgH/AycBOiAAAxYBHgNhAdwB0wGxAbgB/wHSAbABtwH/AdMBsAG3Af8B0wGwAbcB/wHT - AbABtwH/AdMBsAG3Af8B0wGwAbcB/wHTAbABtwH/AdMBsAG3Af8B0wGxAbgB/wNUAa8DAgEDLAADLQFF - A2AB3gNSAfcDWQH1A1kB9QNZAfUDWQH1A1kB9QNZAfUDWQH1A1kB9QNZAfUDWQH1A1kB9QNZAfUDUgH3 - A10B7QM+AWosAANIAYMC1AHVAf8C2QHaAf8C3AHdAf8C3gHfAf8C4AHhAf8C4gHjAf8C5wHoAf8BswG0 - AbUB/wGLAYwBjQH/Az8BbSwAAyIBMQNgAd4DVgGzBAADNAFUAsYBxwH/AsYBxwH/Ax0BKQMDAQQDXAHM - A2AB1AMSARkkAAMGAQgDHQEpAx0BKQMdASkDHQEpAx0BKQMdASkDHQEpAx0BKQMdASkDHAEnNAADBQEH - A0ABbwNQAZoDTwGXA08BlwNPAZcDTwGXA08BlwNPAZcDTwGXA08BlwNPAZcDTwGXA08BlwNPAZcDUAGa - A0gBgwMRARcsAAMsAUMDfwH+AtcB2AH/AtoB2wH/AtwB3QH/At4B3wH/At4B3wH/AuIB4wH/ArgBuQH/ - Az0BaTQAAwEBAggAAxgBIQNcAeoDXQHXAwgBC/8ACQADAgEDA0ABcANQAZ4DUAGbA1ABmwNQAZsDUAGb - A1ABngNGAX5IAAMJAQwDBAEG/wD/AM4AAUIBTQE+BwABPgMAASgDAAFgAwABSAMAAQEBAAEBBQABYAED - FgAD/wEACf8DAAHwAQABJwb/AwABgAEAAQEG/wMAAYABAAEBBv8DAAHgAQABBwHgAQABBwHgAQABBwMA - AeABAAEDAfABAAEPAfABQAEfAwABwAEAAQMB/wEDAf8B8AE8AQ8DAAHAAQABAwH+AQMB/wHwARgBBwMA - AcABAAEDAfwBAQH/AfABAAEPAwABwAEAAQMB+AEAAf8B+AEAAR8DAAHAAQABAwHwAQAB/wH8AQABPwMA - AcABAAEDAfABAAF/Af4BAAF/AwABwAEAAQMB8AEgAT8B/wEAAf8DAAHAAQABAwH4AXABPwH+AQABfwMA - AcABAAEDAf0B+AEfAfwBAAE/AwABwAEAAQMB/wH4AQ8B+AEAAR8DAAHAAQABAwH/AfwBBwHwAQABDwMA - AcABAAEDAf8B/gEPAfABGAEHAwABwAEAAQMC/wE/AfABPAEPAwABwAEAAQMD/wH4AX4BHwMAAeABAAEH - A/8B/AH/AT8DAAn/AwAJ/wMACf8DAAb/AfwBAAEfAcABAAEDBv8BwAEAAQEBgAEAAQEB4AEAAQcBgAEA - AQEBgAEAAQEBgAEAAQEB4AEAAQcBgAEAAQEBwAEAAQMBwAEAAQMB+AEAAR8BwAEAAQ8BwAEAAQMBwAEA - AQMB+AEAAR8BwAEAAQ8BwAEAAQMBwAEAAQMB+AEAAR8BwAEAAQ8BwAEAAQMBwAEAAQMB+AEAAR8BwAEA - AQ8BwAEAAQMBwAEAAQMB+AEAAR8BwAEAAQ8BwAEAAQMBwAEAAQMB+AEAAR8BwAEAAQ8BwAEAAQMBwAEA - AQMB+AEAAR8BwAEAAQ8BwAEAAQMBwAEAAQMB+AEAAR8BwAEAAQ8BwAEAAQMBwAEAAQMB+AEAAR8BwAEA - AQ8BwAEAAQMBwAEAAQMB+AEAAR8BwAEAAQcBwAEAAQMBwAEAAQMB+AEAAR8BwAEAAQcBwAEAAQMBwAEA - AQMB+AEAAR8BwAEAAQMBwAEAAQMBwAEAAQMB+AEAAR8BwAEAAQMBwAEAAQMB4AEAAQcB+AEAAT8BwAEA - AQMBwAEAAQMB/wGBAf8B+AEAAX8BwAEAAQMBwAEAAQMB/gEIAT8B+AEAAf8BwAEAAQ8BwAEAAQMB/gEY - AT8B/AEBAf8BwAEAAT8BwAEAAQMB/gEYAT8B/gEfAf8B4AEAAX8B4AEAAQcB/gE8AT8B/wE/K/8BwAEA - AX8BgAEAAQED/wHAAQABAwHAAQABfwGAAQABAQHwAQABHwGAAQABAQHgAQAB/wHwAUIBDwGAAQABAQGg - AQABAQHgAQABAwH8AQABPwGAAQABAQHAAQABAwHgAQABAwH8AQABfwL/AY8BwAEAAQMB4AEAAQMB4AEA - AQcB/wHAAQ8BwAEAAQMB4AEAAQcB4AEAAQcB5wEAAQMBwAEAAQMB4AEAAQcB4AEYAQcB4gEAAQMBwAEA - AQMB4AEAAQcB8AF+AR8B8AEAAQMBwAEAAQMB4AEAAQcBwAF+AQMB4AEAAQMBwAEAAQMB4AEAAQcBwAH+ - AQMBwAEAAQMBwAEAAQMB4AEAAQcBwAF+AQMBwAEAAQMBwAEAAQMB4AEAAQcB8AF+AQ8BwAEAAQMBwAEA - AQMB4AEAAQcB4AE8AQ8BwAEAAQMBwAEAAQMB4AEAAQcB4AEAAQcBwAEAAQMBwAEAAQMB4AEAAQcB4AEA - AQcBwAEAAQ8BwAEAAQMB4AEAAQcB9AEAAX8BwAEAAf8BwAEAAQMB8AEAAQ8B/AEAAT8BwAEAAf8B4AEA - AQcB/wEAAR8B/AFAAT8B4AEDAf8B4AEAAQcB/wEAAT8B/gHDCP8BAAF/Af8B5xb/Cw== + Af8CAAGRAf8DAAH/AgABjgH/AgABjgH/AgABgwH/AwAB/wNbAcsDDAEQGAADDQERAw0BEQMNAREDGAEi + Aw0BEQM1AVUBVgFhAVYB7gEAAYQBAAH/A0MBdwMNAREDGAEiAxgBIgMYASIDDQERAw0BEQMNAREgAAMN + AREDIwEzAloBXgHdAgABMQH/A0kBiAQAAxgBIgMYASIDGAEiAxgBIgMNAREDLAFEAlYBYQHuAlYBYQHu + AzwBZnwAAxwBJwMABf8DAAH/AaUBpgGoAf8B0gHTAdQB/wMABf8DAAH/AZ8BoAGdAf8BuAG6AeEB/wIA + AY4B/wIAAZQB/wIAAZgB/wIAAZUB/wIAAZgB/wMAAf8C/QH1Af8DAAH/AzUBVSgAAywBRAFWAWEBVgHu + AQABlQEEAf8BAAGVAQQB/wFaAV4BWgHdAw0BETgAAyMBMwJaAV4B3QIAAYMB/wIAAYMB/wIAAYMB/wM8 + AWYQAAMjATMCWgFeAd0CAAGDAf8CAAGDAf8CVgFhAe4DNQFVeAADIgExAwAB/wMAAf8DAAH/AwAB/wMA + Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wIAAaAB/wIAAZ0B/wIAAZ0B/wIAAZ0B/wIAAaIB/wMAAf8DAAH/ + AwAB/wM6AWEkAAMsAUQBVgFhAVcB7gEAAZ0BDgH/AQABnQEOAf8BAAGdAQ4B/wEAAZ0BDgH/A04BmTgA + A04BmQIAAYoB/wIAAYoB/wIAAYoB/wIAAYoB/wIAAYoB/wM8AWYIAAMjATMCWgFeAd0CAAGKAf8CAAGK + Af8CAAGKAf8CAAGKAf8CWgFeAd0DDQERdAADIgExAwAB/wGOAY8BkQH/ApkBmwH/ApYBmAH/ApUBlwH/ + ApkBmwH/ApgBlgH/AZUBlgGaAf8CAAGXAf8CAAGjAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGm + Af8CAAGpAf8CAAGaAf8DAAH/AzoBYCAAAywBRAFWAmEB7gEAAagBGwH/AQABqQEbAf8BAAGpARsB/wEA + AakBGwH/AQABqQEbAf8BVgJhAe4DLAFENAADNQFVAgABlAH/AgABlAH/AgABlAH/AgABlAH/AgABigH/ + AgABigH/AzwBZgMjATMCWgFeAd0CAAGKAf8CAAGUAf8CAAGUAf8CAAGUAf8CAAGUAf8DSQGIeAADIgEx + AwAB/wKtAa4B/wOsAf8BrAGrAawB/wKrAawB/wKuAawB/wGYAZkBrQH/AgABsgH/AgABsgH/AgABsQH/ + AgABsQH/AgABrwH/AgABrgH/AgABrgH/AgABsAH/AgABsQH/AgABtAH/AgABrwH/AzoBYBwAAywBRAFW + AmEB7gEAAbEBJAH/AQABsQEkAf8BAAGwASQB/wEAAbEBJAH/AQABsQEkAf8BAAGxASQB/wEAAbEBJAH/ + AVoCXgHdAw0BETQAAzUBVQIAAZQB/wIAAZQB/wIAAZQB/wIAAZQB/wIAAZQB/wIAAZQB/wJWAWEB7gIA + AZQB/wIAAZQB/wIAAZQB/wIAAZQB/wIAAZQB/wNOAZl8AAMiATEDAAH/Aq8BsAH/Aq4BrwH/Aq4BrwH/ + Aq4BrwH/ArABrwH/AZ0BngGwAf8CAAG7Af8CAAG8Af8CAAG9Af8CAAHBAf8CAAHCAf8CAAG1Af8CAAG8 + Af8CAAHEAf8CAAG+Af8CAAHAAf8CAAGgAf8DOgFgGAADLAFEAVYCYQHuAQABtQErAf8BAAG1ASsB/wEA + AbUBKwH/AQABuAEyAf8BVgJhAe4BAAG4ATIB/wEAAbUBKwH/AQABtQErAf8BAAG1ASsB/wNJAYg4AAM1 + AVUCAAGcAf8CAAGcAf8CAAGcAf8CAAGcAf8CAAGcAf8CAAGcAf8CAAGcAf8CAAGcAf8CAAGcAf8CAAGc + Af8DTgGZgAADIgExAwAB/wK5AboB/wK4AbkB/wK4AbkB/wK4AbkB/wK4AbkB/wK6AbkB/wHBAb8BuAH/ + AcABvwG3Af8CwAG3Af8BvQG8AbAB/wIAAbAB/wIAAcIB/wIAAcgB/wK2AboB/wHCAcEBuAH/AsgBwAH/ + AwAB/wM6AWAYAANJAYgBAAG9ATcB/wEAAbwBNAH/AQABvAE0Af8BAAG9ATcB/wNTAaoDDQERA1MBqgEA + AbwBNAH/AQABvAE0Af8BAAG8ATQB/wEAAbwBNAH/AywBRDgAAzUBVQJWAWEB7gIAAacB/wIAAacB/wIA + AacB/wIAAacB/wIAAacB/wIAAacB/wIAAZwB/wNJAYiEAAMiATEDAAH/AsIBwwH/AcIBwQHCAf8CwQHC + Af8CwQHCAf8CwQHCAf8CwQHCAf8CwQHCAf8CwQHCAf8CwgHDAf8CwAG4Af8CAAGPAf8CAAHRAf8CAAHK + Af8BzAHLAcIB/wLCAcMB/wLKAcsB/wMAAf8DOgFgGAADIwEzAVoCXgHdAQABwwGGAf8BAAHDAYYB/wFX + AlgBuwMNAREEAAMYASIBVgJhAe4BAAG+ATcB/wEAAb8BgQH/AQABvwGBAf8BWgJeAd0DDQEROAADQwF3 + AgABpwH/AgABpwH/AgABpwH/AgABpwH/AgABpwH/AgABpwH/AlcBWAG7iAADIgExAwAB/wLMAc0B/wLM + Ac0B/wLLAcwB/wLLAcwB/wLLAcwB/wLLAcwB/wLLAcwB/wLLAcwB/wLMAc0B/wLHAcQB/wIAAYEB/wIA + Ad0B/wGVAZoB0AH/AdMB0gHLAf8CywHMAf8B1AHTAdQB/wMAAf8DOgFgHAADGAEiAVcCWAG7A1MBqgMN + AREMAAM8AWYBAAHEAYoB/wEAAcEBhQH/AQABwgGFAf8BAAHBAYUB/wNTAao0AAMjATMCWgFeAd0CAAGt + Af8CAAGtAf8CAAGtAf8CAAGtAf8CAAGtAf8CAAGtAf8CVgFhAe4DPAFmhAADIgExAwAB/wLVAdYB/wLV + AdYB/wLUAdUB/wLUAdUB/wLUAdUB/wLUAdUB/wLUAdUB/wLUAdUB/wLVAdYB/wLMAc0B/wGBAYIBgQH/ + AaMBpwHeAf8CywHVAf8D1QH/AtQB1QH/At0B3gH/AwAB/wM6AWAgAAMNAREYAANTAaoBAAHEAYoB/wEA + AcUBjQH/AQABxAGKAf8BAAHEAYoB/wNJAYgsAAMjATMCVgFhAe4CAAG0Af8CAAG0Af8CAAG0Af8CAAG0 + Af8CAAG0Af8CAAG0Af8CAAG0Af8CAAG0Af8CAAG0Af8DPAFmgAADIgExAwAB/wHgAeEB4gH/At0B3gH/ + At0B3gH/At0B3gH/At0B3gH/At0B3gH/At0B3gH/At0B3gH/At4B3wH/AtYB2AH/AYYBhwGKAf8C7AHl + Af8D3gH/At0B3gH/At0B3gH/AucB6AH/AwAB/wM6AWA8AAMYASIBWgJcAcwBAAHFAY0B/wEAAcUBjQH/ + AQABxQGNAf8BAAHFAY0B/wNJAYgkAAMjATMCVgFhAe4CAAG/Af8CAAG/Af8CAAG/Af8CAAG0Af8CAAHG + Af8CAAHFAf8CAAG0Af8CAAG/Af8CAAG/Af8CAAG/Af8CAAG/Af8DPAFmfAADIgExAwAB/wLsAe0B/wP1 + Af8C8gH0Af8C8gHzAf8C8wH0Af8C8gHzAf8D8wH/A/MB/wP1Af8C4AHiAf8CAAGBAf8C8wH0Af8D8wH/ + A/IB/wPzAf8D+AH/AwAB/wM6AWBAAAMsAUQBAAHMAZkB/wEAAcgBkgH/AQABxgGRAf8BAAHIAZQB/wFa + AlwBzAMNAREcAAMjATMCWgFeAd0CAAG/Af8CAAG/Af8CAAG/Af8CAAG/Af8CAAHGAf8DSQGIAzUBVQIA + AcUB/wIAAb8B/wIAAb8B/wIAAb8B/wIAAb8B/wIAAb8B/wM8AWZ4AAMiATEDAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DOgFg + RAADNQFVAQABzAGZAf8BAAHMAZsB/wFXAlgBuwMjATMgAANOAZkCAAHGAf8CAAHGAf8CAAHGAf8CAAHG + Af8CAAHLAf8DTgGZCAADNQFVAgABzgH/AgABxgH/AgABxgH/AgABxgH/AgABxgH/AloBXgHdAw0BEXQA + Ax8BLQMAAf8D8QH/AwAB/wGjAaQBpgH/AskBygH/AwAB/wL1AfYB/wMAAf8BpAGlAacB/wHMAs0B/wMA + Af8D9wH/AwAB/wGfAaABogH/AtAB0QH/AwAB/wLnAegB/wMAAf8DOAFdSAADLAFEAzwBZigAAywBRAJW + AWEB7gIAAc0B/wIAAc0B/wIAAcsB/wNOAZkQAAM1AVUCAAHUAf8CAAHNAf8CAAHNAf8CAAHOAf8DQwF3 + eAADBgEIA14B2QGeAZ8BoQH/AwAB/wIAAYEB/wGUAZUBlwH/AwAB/wKwAbEB/wMAAf8ChwGKAf8BnQGe + AaAB/wMAAf8CrgGwAf8DAAH/AgABgQH/AZQBlQGXAf8DAAH/AZoBmwGdAf8DbQH3AxwBKHwAAywBRAJW + AWEB7gIAAdgB/wNOAZkYAAM1AVUCAAHYAf8CAAHYAf8DSQGIgAADEAEWA04BmQNYAcEDWgG9A1oBvQNa + Ab0DWgG9A1oBvQNaAb0DWgG9A1oBvQNaAb0DWgG9A1oBvQNaAb0DWgHAA1QBrAMgAS6EAAMjATMDNQFV + IAADIwEzAywBRP8A/wD/AP8A/wDYAAQBBAIBAwMCBAMBBAMDAQQDAwEEAwMBBAMDAQQDAgEDAwIBAwMB + AQIDAAEBHwABAQMAAQEDAAQBAQIDAQQCAQMDAgEDAwIBAwMCBAMBBAMDAQQDAwEEAwIBAwMCAQMDAgED + AwEBAgMBAQIDAQECAwABAQMAAQHQAAMEAQYDCAELAwUBBwMFBAcBCgMJAQwDCgEOAwsBDwMMARADDQER + Aw0BEQMNAREDCwEPAwsBDwMKAQ0DCAELAwcBCQMGAQgDCQEMAwgBCwMCAQMIAAMCAQMDCwEPAxIBGAMV + AR0DGAEhAxoBJAMbASYDHAEoAx0BKQMdASkDHQEqAx0BKgMdASoDHQEpAxwBKAMcAScDGgEkAxgBIgMW + AR8DEwEaAw0BEgMEAQYQAAMDAQQDEgEYAxUBHQMUBBwBJwMdASkDHgErAx8BLAMfAS0DIAEuAx8BLQMf + ASwDHQEqAxwBKAMVAR0DFgEeAxQBGwMFAQcQAAMDAQQDCQEMAwEBAgMDBAQBBgMHAQkDCAELAwkBDAMK + AQ0DCgEOAwsBDwMLAQ8DCgEOAwoBDQMJAQwDCgENAxIBGQMRARcDDwEUAw0BEQMJAQwDAwEECAADAQEC + Aw8BFAMdASkDQAFxA0sBjgNMAY8DTAGQA00BkQNMAZIDTAGSA0wBkwNMAZMDTAGTA0wBkgNMAZIDTQGR + A0wBkANMAZADRgF+AycBOwMVAR0DCAELCAADAwEEAw8BFAMYASEDQAFuA04BlQNOAZgDTgGZA1ABmwNQ + AZsDUQGcA1EBnANRAZwDUQGcA1ABmwNQAZsDUAGaA04BmANPAZcDRwGAAyQBNQMSARgDBgEIEAADAgED + Aw0BEQMjATQDWwHGAWECXQHiA2EB4QNhAeEDYQHhA2EB4QNhAeEDYQHhA2EB4QNhAeEBYQJdAeIDXAHJ + AycBOgMOARMDBAEFEAADCAELAxEBFwNEAXoDWAG7A1kBvwNaAcADWAHBA1gBwQNYAcEDWQHCA1kBwgNZ + AcIDWwHDA1kBwgNZAb8DSAGEAxsBJgMfAS0DIgExAx0BKgMXASADCAELDAADBQEHA1YBsQPbAf8C3AHd + Af8C3wHgAf8C4gHjAf8C5AHlAf8C5gHnAf8C6AHpAf8D6QH/AukB6gH/AukB6gH/AukB6gH/AucB6AH/ + AuYB5wH/AuQB5QH/AuIB4wH/A+IB/wFhAl4B2gMMARAQAAMKAQ0DVgGxAwAB/wMAAf8DAAH/AwAB/wMA + Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wNeAdADEgEYHAADTgGV + As4BzwH/AtIB0wH/AtUB1gH/AtcB2AH/AtkB2gH/AtoB2wH/AtoB2wH/AtoB2wH/AtkB2gH/AtcB2AH/ + A9YB/wLTAdQB/wNQAZ4cAAMmATgBAAG3AdgB/wEAAbQB1wH/AQABrAHSAf8BAAGvAdUB/wEAAbAB1wH/ + AQABsQHZAf8BAAGyAdsB/wEAAbQB3AH/AQABtQHfAf8BAAG2AeAB/wEAAbcB4gH/AQABuQHmAf8BAAG0 + AdcB/wEAAbEBygH/AzsBZAMQARYDAAEBGAADKwFCAtEB0gH/AtEB0gH/AtQB1QH/AtcB2AH/AtoB2wH/ + At0B3gH/At8B4AH/AuAB4QH/AuAB4QH/AuEB4gH/AuEB4gH/AuAB4QH/AuAB4QH/At8B4AH/At0B3gH/ + AtsB3AH/AtgB2QH/AtcB2AH/Az8BbRAAAyoBQAFSAVcBdQH+AgABoQH/AgAB1AH/AgAB1QH/AgAB1QH/ + AgAB1gH/AgAB1gH/AgAB1gH/AgAB1gH/AgAB1gH/AgAB1gH/AgAB1QH/AgABsAH/AwAB/wMAAf8BAAGk + AdEB/wIAAZwB/wMAAf8DPQFoHAADVAGsAtMB1AH/AtcB2AH/AtoB2wH/At0B3gH/At4B3wH/At8B4AH/ + At8B4AH/At8B4AH/At8B4AH/At0B3gH/AtsB3AH/AtgB2QH/A1UBsBwAAzsBYwEAAbwB3gH/AQABuAHd + Af8BAAGxAdoB/wEAAbMB3QH/AQABtAHeAf8BAAG1AeAB/wEAAbYB4gH/AQABuAHjAf8BAAG5AeUB/wEA + AboB5gH/AQABuwHnAf8BAAG8AeoB/wEAAbsB4wH/AckB1AHbAf8BjgHDAdQB/wNeAdUDAgEDGAADMAFL + AtIB0wH/AtYB2AH/AtoB3QH/Ad4B3wHhAf8B4QHiAeMB/wHiAeMB5QH/AeIB5AHlAf8B4wHkAeYB/wHj + AeUB5gH/AeQB5QHmAf8B5AHlAeYB/wHjAeUB5gH/AeMB5AHmAf8B4gHkAeUB/wHiAeMB5AH/AuEB4wH/ + At4B3wH/AtoB2wH/A0UBfRAAAzIBUAFSAVcBeAH+AgABvgH/AQABgQHoAf8BAAGBAegB/wEAAYEB6AH/ + AQABgQHoAf8BAAGBAegB/wEAAYEB6AH/AQABgQHoAf8BAAGBAegB/wEAAYEB6AH/AQABgQHoAf8CAAHW + Af8DAAH/AgABkQH/AZgB2QH5Af8BAAGBAbkB/wMAAf8DRQF8HAADUgGpAtoB2wH/At4B3wH/AuAB4QH/ + AeEC4gH/AuIB4wH/AeIC4wH/AeIC4wH/AeIC4wH/AeIC4wH/AeEC4gH/AeAC4QH/Ad4C3wH/A1UBrRwA + AzoBYAEAAcEB5gH/AQABvgHmAf8BAAG3AeQB/wEAAbkB5gH/AQABugHnAf8BAAG7AegB/wEAAbwB6QH/ + AQABvQHqAf8BAAG+AeoB/wEAAb4B6gH/AQABvwHrAf8BAAHAAe0B/wEAAbwB5AH/AdkB3gHmAv8B4QG1 + Af8DYQHuAwcBCRgAAy8BSgLXAdoB/wLbAd0B/wHdAdwB1QH/Ad4B3AHWAf8B3QHZAdQB/wHfAdsB1gH/ + Ad8B2wHWAf8B4AHcAdcB/wHgAdwB2AH/AeEB3QHYAf8B4QHdAdgB/wHgAdwB2AH/AeAB3AHXAf8B3wHb + AdYB/wHfAdwB1gH/AeAB3wHYAf8C4QHiAf8B3wHgAeMB/wNEAXsQAAMyAVABUwFXAXoB/gIAAcAB/wEA + AYcB6gH/AQABhwHqAf8BAAGHAeoB/wEAAYcB6gH/AQABhwHqAf8BAAGHAeoB/wEAAYcB6gH/AQABhwHq + Af8BAAGHAeoB/wEAAYcB6gH/AgAB1wH/AwAB/wMAAf8CAAGQAf8DAAH/AwAB/wNFAXwcAANSAakC3wHg + Af8C4gHjAf8C4wHkAf8C5AHlAf8B5ALlAf8C5QHmAf8B5QLmAf8C5QHmAf8C5QHmAf8C5AHlAf8C4wHk + Af8C4gHjAf8DVQGtHAADOgFgAQABxQHsAf8BAAHDAesB/wEAAbwB6QH/AQABvgHqAf8BAAG/AesB/wEA + AcAB6wH/AQABwQHrAf8BAAHBAewB/wEAAcIB7QH/AQABwwHtAf8BAAHEAe4B/wEAAcUB8AH/AQABwwHp + Af8B4AHiAeQB/wH1AvAB/wNiAekDBwEJGAADLwFKAtoB2QH/AcoBvwEAAf8BxAG4AQAB/wG6AZwBAAH/ + AaQCAAH/AaYCAAH/AaYCAAH/AaYCAAH/AaYCAAH/AaYCAAH/AaYCAAH/AaYCAAH/AaYCAAH/AaQCAAH/ + AbIBhgEAAf8BxQG5AQAB/wHIAbsBAAH/Ad4B3QHUAf8DRAF7EAADMgFQAVMBWAF8Af4CAAHCAf8BAAGN + AewB/wEAAY0B7AH/AQABjQHsAf8BAAGNAewB/wEAAY0B7AH/AQABjQHsAf8BAAGNAewB/wEAAY0B7AH/ + AQABjQHsAf8BAAGNAewB/wEAAYEB2QH/AwAB/wIAAYsB/wEAAa8B2wH/AgABpwH/AwAB/wNFAXwcAANS + AakC4gHjAf8B4wLkAf8C5QHmAf8B5gLnAf8B5wLoAf8B5wLoAf8C6AHpAf8C6AHpAf8B5wLoAf8B5gLn + Af8B5QLmAf8C5AHlAf8DVQGtHAADOgFgAQAByQHuAf8BAAHGAe4B/wEAAcEB7AH/AQABwgHtAf8BAAHD + Ae0B/wEAAcQB7gH/AQABxQHvAf8BAAHFAe8B/wEAAcYB8AH/AQABxwHwAf8BAAHIAfEB/wEAAckB8wH/ + AQABxQHqAf8B4gHkAeUB/wHyAewB6gH/A2IB6QMHAQkYAAMvAUoB2AHUAbgB/wHAAbEBAAH/AcIBtQEA + Af8BvgGpAQAB/wGoAgAB/wGoAgAB/wGoAgAB/wGoAgAB/wGoAgAB/wGoAgAB/wGoAgAB/wGoAgAB/wGo + AgAB/wGnAgAB/wG9AaIBAAH/AcMBtgEAAf8BvwGwAQAB/wHZAdUBsgH/A0QBexAAAzIBUAFTAVgBfgH+ + AgABwwH/AQABlAHtAf8BAAGUAe0B/wEAAZQB7QH/AQABlAHtAf8BAAGUAe0B/wEAAZQB7QH/AQABlAHt + Af8BAAGUAe0B/wEAAZQB7QH/AQABlAHtAf8BAAGHAdoB/wMAAf8CAAGPAf8BhAHIAfcB/wIAAbMB/wMA + Af8DRQF8HAADUgGpAuQB5QH/AuYB5wH/AecC6AH/AekC6gH/AeoC6wH/AusB7AH/AusB7AH/AusB7AH/ + AeoC6wH/AekC6gH/AegC6QH/AeYC5wH/A1UBrRwAAzoBYAEAAcwB8AH/AQABygHxAf8BAAHFAe8B/wEA + AccB8AH/AQAByAHwAf8BAAHIAfEB/wEAAckB8gH/AQABygHyAf8BAAHLAfMB/wEAAcsB8wH/AQABzAHz + Af8BAAHOAfUB/wEAAcsB7gH/AeoB7AHtAf8B8AHrAekB/wNkAecDBAEGGAADLwFKAdoB1gG7Af8BwQGx + AQAB/wHCAbMBAAH/AcMBuAEAAf8BuAGPAQAB/wGtAgAB/wGuAgAB/wGuAgAB/wGuAgAB/wGuAgAB/wGu + AgAB/wGuAgAB/wGsAgAB/wG1AYQBAAH/AcMBuAEAAf8BwgGzAQAB/wHAAbEBAAH/AdoB1gG1Af8DRAF7 + EAADMgFQAVMBWAF/Af4CAAHEAf8BAAGbAe4B/wEAAZsB7gH/AQABmwHuAf8BAAGbAe4B/wEAAZsB7gH/ + AQABmwHuAf8BAAGbAe4B/wEAAZsB7gH/AQABmwHuAf8BAAGbAe4B/wEAAY0B3AH/AwAB/wMAAf8CAAGP + Af8DAAH/AwAB/wNFAXwcAANSAakC5gHnAf8B6ALpAf8B6gLrAf8B6wLsAf8B7AHtAe4B/wHrAu0B/wHs + Au0B/wHrAu0B/wHrAuwB/wHrAuwB/wHqAusB/wHoAukB/wNVAa0cAAM6AWABAAHQAfMB/wEAAc4B8wH/ + AQAByQHyAf8BAAHLAfMB/wEAAcwB8wH/AQABzQH0Af8BAAHOAfQB/wEAAc4B9QH/AQABzwH1Af8BAAHQ + AfYB/wEAAdEB9wH/AQAB0gH5Af8BAAHNAfAB/wHnAekB6gH/AfIC8QH/A2QB8QMKAQ4YAAMvAUoB2gHX + AbwB/wHBAbEBAAH/AcIBswEAAf8BwgGzAQAB/wHDAbUBAAH/AbkBigEAAf8BswIAAf8BswIAAf8BswIA + Af8BswIAAf8BswIAAf8BswIAAf8BuAGCAQAB/wHCAbIBAAH/AcIBtAEAAf8BwgGzAQAB/wHAAbEBAAH/ + AdwB2AG2Af8DRAF7EAADMgFQAVQBWQF/Af4BAAGCAcYB/wEAAaIB8AH/AQABogHwAf8BAAGiAfAB/wEA + AaIB8AH/AQABogHwAf8BAAGiAfAB/wEAAaIB8AH/AQABogHwAf8BAAGiAfAB/wEAAaIB8AH/AQABkwHe + Af8DAAH/AgABlAH/AQABuwHkAf8CAAGwAf8DAAH/A0UBfBwAA1IBqQHnAugB/wHqAusB/wHrAuwB/wHs + Ae0B7gH/AeoB6QHnAf8B4QHbAdIB/wHiAd0B1AH/AusB6gH/AesC7AH/AesC7AH/AesC7AH/AusB7AH/ + A1UBrRwAAzoBYAEAAdMB9QH/AQAB0gH2Af8BAAHOAfUB/wEAAc8B9gH/AQAB0QH2Af8BAAHRAfcB/wEA + AdIB9wH/AQAB0wH4Af8BAAHTAfgB/wEAAdQB+QH/AQAB1AH5Af8BAAHWAfoB/wEAAdEB8wH/AfAC7QH/ + Ae4C7QH/A+0B/wM6AWIYAAMvAUoB2wHYAb0B/wHBAbEBAAH/AcIBswEAAf8BwgGzAQAB/wHCAbQBAAH/ + AcMBuQEAAf8BvwGcAQAB/wG4AgAB/wG4AgAB/wG4AgAB/wG4AgAB/wG9AZIBAAH/AcMBuAEAAf8BwgG0 + AQAB/wHCAbMBAAH/AcIBswEAAf8BwAGxAQAB/wHcAdkBuAH/A0QBexAAAzIBUAFUAVkBfwH+AQABhgHI + Af8BAAGoAfEB/wEAAagB8QH/AQABqAHxAf8BAAGoAfEB/wEAAagB8QH/AQABqAHxAf8BAAGoAfEB/wEA + AagB8QH/AQABqAHxAf8BAAGoAfEB/wEAAZkB3wH/AwAB/wIAAYsB/wEAAbUB7wH/AgABqgH/AwAB/wNF + AXwcAANSAakB6QLqAf8B6wLsAf8B6wLsAf8B7AHtAe4B/wHdAdYBzQH/AesC6gH/AeUB4wHeAf8B4gHe + AdcB/wLuAfAB/wHrAuwB/wHrAuwB/wHrAuwB/wNVAa0cAAM6AWABAAHXAfgB/wEAAdUB+QH/AQAB0gH4 + Af8BAAHUAfkB/wEAAdQB+QH/AQAB1QH5Af8BAAHVAfkB/wEAAdUB+QH/AQAB1gH5Af8BAAHWAfkB/wEA + AdcB+QH/AQAB2AH6Af8BAAHUAfYB/wGuAdcB6AH/AfQC8wH/AewB7QHsAf8DXgHOGAADLwFKAdwB2QHA + Af8BwwG0AQAB/wHEAbYBAAH/AcQBtgEAAf8BxAG2AQAB/wHEAbgBAAH/AcEBjwEAAf8BvgIAAf8BvgIA + Af8BvgIAAf8BvgIAAf8BwAGGAQAB/wHEAbUBAAH/AcQBtgEAAf8BxAG2AQAB/wHEAbYBAAH/AcIBtAEA + Af8B3gHaAbsB/wNEAXsQAAMyAVABVAFZAX8B/gEAAYsByQH/AQABrwHzAf8BAAGvAfMB/wEAAa8B8wH/ + AQABrwHzAf8BAAGvAfMB/wEAAa8B8wH/AQABrwHzAf8BAAGvAfMB/wEAAa8B8wH/AQABrwHzAf8BAAGe + AeEB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A0UBfBwAA1IBqQHqAusB/wHrAuwB/wHvAfEB8gH/AdsB1wHR + Af8B2gHVAc4B/wHzAfYB+QH/AdkB1AHNAf8B3wHcAdYB/wHuAe8B8QH/AuwB7QH/AesC7AH/AesC7AH/ + A1UBrRwAAzoBYAEAAdoB+QH/AQAB2QH6Af8BAAHWAfkB/wEAAdYB+QH/AQAB1wH5Af8BAAHXAfkB/wEA + AdgB+QH/AQAB2AH5Af8BAAHZAfkB/wEAAdkB+QH/AQAB2gH5Af8BAAHaAfkB/wEAAdsB+gH/AQAB1QH4 + Af8BwwHeAekB/wH2AfMB8QH/AesC7AH/AyUBNxQAAy8BSgHeAdsBxAH/AcgBugEAAf8ByQG7AQAB/wHJ + AbsBAAH/AckBvgEAAf8BxwGpAQAB/wHDAgAB/wHEAgAB/wHEAgAB/wHEAgAB/wHEAgAB/wHDAgAB/wHH + AaUBAAH/AckBvgEAAf8ByQG7AQAB/wHJAbsBAAH/AccBuQEAAf8B4AHdAcAB/wNEAXsQAAMyAVABVAFZ + AX8B/gEAAZABygH/AQABtgH1Af8BAAG1AfUB/wEAAbUB9QH/AQABtQH1Af8BAAG1AfUB/wEAAbUB9QH/ + AQABtQH1Af8BAAG1AfUB/wEAAbUB9QH/AQABtQH1Af8BAAGmAeMB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + A0UBfBwAA1IBqQHrAuwB/wHrAu0B/wHrAuwB/wHDAbwBrgH/AewC7QH/A+oB/wHEAbwBrwH/Au4B7wH/ + AewB7QHuAf8C7QHuAf8C7QHuAf8B7ALtAf8DVQGtHAADOgFgAQAB2wH5Af8BAAHbAfoB/wEAAdgB+QH/ + AQAB2QH5Af8BAAHZAfkB/wEAAdoB+QH/AQAB2gH5Af8BAAHbAfoB/wEAAdsB+gH/AQAB2wH6Af8BAAHc + AfoB/wEAAdwB+gH/AQAB3QH6Af8BAAHbAfoB/wG8AeAB7gH/AfUB7wHtAf8B7ALtAf8DUgGkFAADLwFK + AeAB3QHHAf8BzAG/AQAB/wHNAcABAAH/Ac0BwAEAAf8BzQHDAQAB/wHNAaUBAAH/AcoCAAH/AcoBgQEA + Af8BygGBAQAB/wHKAYEBAAH/AcoBgQEAAf8BygIAAf8BzAGdAQAB/wHNAcQBAAH/Ac0BwAEAAf8BzQHA + AQAB/wHMAb4BAAH/AeIB3wHEAf8DRAF7EAADMAFLAVQBWQF/Af4BAAGOAcIB/wEAAcUB9wH/AQABxgH3 + Af8BAAHGAfcB/wEAAcYB9wH/AQABxgH3Af8BAAHGAfcB/wEAAcYB9wH/AQABxgH3Af8BAAHGAfcB/wEA + AcYB9wH/AQABnQHXAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wNDAXgcAANSAakB6wLsAf8B8gH0AfYB/wHI + AcMBuQH/AcwBxwG+Af8B+QH8Av8BxQG+AbQB/wHRAc0BxgH/AfIB8wH1Af8C8AHxAf8B7gLwAf8C6gHr + Af8B6AHpAeoB/wNXAbccAAM6AWABgQHeAfkB/wEAAd0B+gH/AQAB2wH6Af8BAAHbAfoB/wEAAdwB+gH/ + AQAB3AH6Af8BAAHdAfoB/wEAAd0B+gH/AYEB3gH6Af8BgQHeAfoB/wGCAd8B+gH/AYMB3wH6Af8BhAHf + AfoB/wEAAd0B+gH/Ab8B4gHvAf8B+gH2AfUB/wLtAe4B/wFtAlIB9wMRARcQAAMvAUoB4QHeAcsB/wHQ + AcQBAAH/AdEBxQEAAf8B0QHFAQAB/wHRAcgBAAH/AdIBswEAAf8B0gGIAQAB/wHOAYUBAAH/Ac8BhgEA + Af8BzwGGAQAB/wHOAYUBAAH/AdEBhgEAAf8B0gGwAQAB/wHRAcgBAAH/AdEBxQEAAf8B0QHFAQAB/wHQ + AcMBAAH/AeQB4AHIAf8DRAF7EAADDgETA1sBywFVAWgBfwH+AgABnAH/AgABoAH/AgABogH/AgABpAH/ + AgABpQH/AgABpwH/AgABqAH/AgABqAH/AgABqAH/AgABpQH/AgABgwH/AwAB/wMAAf8DAAH/AVcBXAF/ + Af4DYAHeAxkBIxwAA1IBqQHsAe0B7gH/A+cB/wGpAaABjwH/Ae8B8AHxAf8B5gHlAeQB/wGrAaIBkQH/ + AvEB8wH/A/EB/wLbAdwB/wGgAaEBogH/AaABoQGiAf8CqgGrAf8DNgFYHAADOgFgAYUB4AH6Af8BgwHf + AfoB/wEAAd0B+gH/AYEB3gH6Af8BggHeAfoB/wGDAd8B+gH/AYQB3wH6Af8BhQHgAfoB/wGGAeAB+gH/ + AYcB4QH6Af8BiAHhAfoB/wGJAeEB+gH/AYsB4gH7Af8BgwHgAfsB/wG/AeEB7QH/AfMB7QHsAf8C8AHx + Af8B7QLuAf8DRAF6EAADLwFKAeIB4AHOAf8B1AHIAQAB/wHVAckBAAH/AdUByQEAAf8B1QHKAYEB/wHV + AckBAAH/AdkBoQEAAf8B1wGMAQAB/wHTAYkBAAH/AdMBiQEAAf8B1gGLAQAB/wHbAZ0BAAH/AdUBxgEA + Af8B1QHKAYEB/wHVAckBAAH/AdUByQEAAf8B1AHHAQAB/wHlAeIBzAH/A0QBexQAAxoBJANCAXMDTQGR + A0wBkgNMAZIDTAGSA0wBkgNUAa4DZQH0AysB/ANdAcoDTAGTA0wBkgNMAZIDTAGSA0wBkgNHAYEDKAE8 + IAADUgGpAfMB9QH3Af8BtgGvAaMB/wHFAcABtwH/AfsB/QL/Aa4BpwGYAf8BygHFAb4B/wH0AfUB+AH/ + AvIB8wH/AqcBqAH/AYcBiAGJAf8CmgGbAf8DOAFcIAADOgFgAYoB4QH6Af8BiQHhAfoB/wGFAeAB+gH/ + AYcB4AH6Af8BiAHhAfoB/wGJAeEB+gH/AYoB4gH7Af8BjAHjAfsB/wGNAeMB+wH/AY8B5AH7Af8BkAHk + AfsB/wGRAeUB+wH/AZMB5gH7Af8BjAHkAfsB/wHFAeYB8gH/AfoB9gH0Af8B7wLwAf8B6wLsAf8DRwGB + EAADLwFKAeMB4QHRAf8B2QHNAYkB/wHaAc4BjAH/AdoBzgGMAf8B2gHOAYwB/wHaAdABkAH/AdkByQGB + Af8B3wGvAQAB/wHeAZoBAAH/Ad4BmQEAAf8B3wGrAQAB/wHaAcUBAAH/AdkB0AGRAf8B2gHOAYwB/wHa + Ac4BjAH/AdoBzgGMAf8B2AHNAYcB/wHmAeMB0AH/A0QBeywAAwIBAwNXAboDSgGKAzIBUQNhAdoDJQE3 + OAADVAGuAuQB4gH/AZ8BlwGGAf8B7gHvAfAB/wLuAfAB/wHNAcoBwwH/AewC7QH/Ae0C7gH/Ae8C8AH/ + AaQBpQGmAf8BlAGVAZYB/wM4AVwkAAM6AWABjwHjAfoB/wGOAeQB+wH/AYwB4wH7Af8BjgHkAfsB/wGQ + AeQB+wH/AZEB5QH7Af8BkwHmAfsB/wGUAecB+wH/AZYB5wH8Af8BlwHoAfwB/wGZAegB/AH/AZoB6QH8 + Af8BnAHqAfwB/wGVAekB/AH/AcUB5AHvAf8B8gHsAesB/wNlAeUDSAGEAwcBChAAAzABTAHkAeEB0wH/ + Ad8B1QGcAf8B3gHTAZkB/wHeAdMBmQH/Ad4B0wGZAf8B3gHTAZkB/wHeAdQBmwH/Ad0B1QGeAf8B3QHO + AY0B/wHeAc0BjAH/Ad0B1AGcAf8B3QHUAZwB/wHeAdMBmQH/Ad4B0wGZAf8B3gHTAZkB/wHeAdMBmQH/ + AeAB1gGeAf8B5wHlAdQB/wNGAX4kAAMiATIDQgFzA1kBvwNMAZADDQERBAADOgFhA1kBvwNEAXkDMQFP + AwcBCSwAA0IBdgHLAckBwwH/AbABqgGeAf8B9gH4AfoB/wHrAuwB/wH5AfoB/gH/Ae0B7gHvAf8C7QHu + Af8C7gHvAf8BqwGsAa0B/wM3AVsoAAM6AWEBlgHnAfsB/wGWAecB+wH/AZUB5wH8Af8BlwHoAfwB/wGZ + AegB/AH/AZoB6QH8Af8BnAHqAfwB/wGdAesB/AH/AZ8B6wH8Af8BoAHsAfwB/wGiAe0B/QH/AaMB7QH9 + Af8BpQHuAf0B/wGiAe4B/QH/A10B0gM5AV8DBwEKGAADJgE4AuMB3QH/AeUB3AGyAf8B5wHfAbQB/wHn + Ad8BtQH/AecB3gG1Af8B5wHeAbUB/wHnAd4BtQH/AecB3gG1Af8B5wHfAbcB/wHnAd8BtwH/AecB3gG1 + Af8B5wHeAbUB/wHnAd4BtQH/AecB3gG1Af8B5wHeAbUB/wHnAd4BtQH/AeUB3AGvAf8B5wHmAdsB/wM4 + AV4kAANVAbABdAJ/Af4BYwJ/Af4DFgEfCAADCgEOA1YBtgEAAb8B5gH/A2EB2gMiATEwAANAAXEBXgJb + AdkDRQF8A0cBggNfAeMDTAGTA0gBgwNIAYUDMAFMLAADGAEhAWcCWQHyAZ0B6wH8Af8BnQHrAfwB/wGf + AesB/AH/AaEB7AH8Af8BogHtAfwB/wGkAe0B/QH/AaUB7gH9Af8BpwHvAf0B/wGoAfAB/QH/AaoB8AH9 + Af8BqwHxAf0B/wGtAfIB/QH/A2QB8QMRARcgAAMBAQIDSQGIAeUB5AHcAf8B5wHkAdYB/wHpAecB2AH/ + AekB5wHYAf8B6QHnAdgB/wHpAecB2QH/AekB5wHZAf8B6QHnAdkB/wHpAecB2QH/AekB5wHZAf8B6QHn + AdkB/wHpAecB2QH/AekB5wHZAf8B6QHnAdgB/wHpAeYB2AH/AegB5wHdAf8DVQG1AwUBByQAA1ABngN/ + Af4DXgHdAwMBBAsAAQEDTAGQA38B/gNcAdEDHAEoNAADQAFuA0IBcwNGAX8DNwFaQAADGAEhAzoBYQM7 + AWQDOwFjAzsBYwM7AWMDOwFjAzsBYwM7AWMDOwFjAzsBYwM7AWQDOgFhAxgBISgAAwUBBwNDAXgDUAGe + A1ABmwNQAZsDUAGbA1ABmwNQAZsDUAGbA1ABmwNQAZsDUAGbA1ABmwNQAZsDUAGbA1ABnQNKAYkDEwEa + KAADDgETAy0BRgMNARIQAAMIAQsDMAFMAxwBJwMAAQE4AAMeASsDFgEf/wD/AP8A/wD/AIgAAQEDBAEG + AwEBAgMAAQEDAgEDAwQBBQMEAQYDBQEHAwQBBgMEAQUDAwEEAwABAQMAAQEDBAEFAwEBAiAAAwMBBAMJ + AQwDDQERAw8BFAMRARcDEgEZAxMBGgMUARwDFgEeAxMBGgMNARIDDQERAxQBHAMVAR0DFAEcAxMBGgMS + ARkDEQEXAw8BFAMNAREDCQEMAwMBBG8AAQEDAgEDAwIBAwMBBAIEAwQEAQYDBAEGAwUBBwMFAQcDBQEH + AwUBBwMEAQYDBAEGAwQBBQMCAQMDAQECAwEEAgEDAwABARAAAwQBBgMWAR8DOgFiA0oBiwNKAYwDSwGO + A0sBjgNMAY8DTAGPA0sBjgNKAY0DSgGMA0IBdgMfAS0DCQEMIAADCQEMAxcBIAMdASoDIgExAyQBNQMj + ATQDHAEoAx4BKwMmATkDLgFIA1wByQNYAbsDKQE+AycBOgMdASoDHAEoAyQBNgMkATUDIgExAx0BKgMX + ASADCAELFwAEAQQCBAMBBAMDBAQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwMBBAMDAQQDAgEDAwEBAhgA + AwQBBQMUARsDFgEfAyQBNQMwAUsDMQFNAzEBTwMyAVEDMwFSAzMBUwMzAVMDMwFTAzMBUwMzAVIDMgFR + AzEBTwMxAU0DMAFMAygBPAMXASADFQEdAwUBBxAAAy8BSgLXAdgB/wLWAdcB/wLXAdgB/wLaAdsB/wLb + AdwB/wLcAd0B/wHcAd0B3gH/AtsB3AH/At4B3wH/AuAB4QH/AuQB5QH/A0kBiDAAAwEBAgMBAQIDEQEX + A1IBpwNGAX4EAAMsAUQDAAH/AwAB/wMXASAEAANNAZEDUAGaAwkBDAMBAQIDAQECFAADCQEMAxcBIAMd + ASoDIQEwAyMBNAMmATgDJwE6AycBOwMoAT0DKQE+AykBPgMpAT4DKQE+AygBPQMnATsDJwE6AyQBNgMa + ASUDMwFSAyMBMwMWAR4DCAELCwABAQQAA0ABcQNZAfIDAAH/A0AB/QNAAf0DQAH9A0AB/QNAAf0DQAH9 + A0AB/QNAAf0DQAH9A0AB/QNAAf0DQAH9AVIBUQFUAf4DRwH5A1ABmgMEAQUDAAEBEAADQQFyAtEB0gH/ + ArIBswH/Aq4BrwH/AbABsQGyAf8BsQGyAbMB/wKyAbMB/wKyAbMB/wKvAbAB/wLFAcYB/wLdAd4B/wLi + AeMB/wNVAa0DAAEBAwQBBgMCBAMEBAEGAwABASAAAz0BZwMAAf8DAAH/A0oBigNYAbsDAAH/AwAB/wFT + AlEBpQNMAZMDAAH/AwAB/wMpAT8cAAMDAQQDCgQNAREDEAEVAxIBGAMTARoDFAEcAxUBHQMWAR4DFgEf + AxYBHwMWAR8DFgEfAxYBHgMVAR0DEgEYAwcBCQNMAY8CAAHnAf8DIwEzAwUBBwMDAQQMAAMVAR0DXAH4 + A/IB/wMAAf8BmAGaAZwB/wHDAcQBxQH/AwAB/wP5Af8DAAH/AZEBkwGVAf8CxQHGAf8DAAH/A/UB/wMA + Af8BkAGSAZQB/wLNAc4B/wMAAf8B5wLoAf8DAAH/Ay4BSBQAA0ABbwLXAdgB/wHEAcUBxgH/AcIBwwHE + Af8CxAHFAf8BxAHFAcYB/wLFAcYB/wLEAcUB/wLJAcoB/wLkAeUB/wLiAeMB/wLnAegB/wNeAc4DPgFr + A0ABcQNAAXADMgFQAxYBHgMHAQkgAAMQARUDTQH6AQABgQGCAf8BAAKBAf8BAAKBAf8BAAGBAYIB/wEA + AYEBggH/AQACgQH/AQACgQH/AQABgQGCAf8DYQHmYAADUAGdAQABgwHrAf8DXAHPGAADIgExAwAB/wMA + Af8DAAH/AwAB/wMAAf8DAAH/AgABgQH/AwAB/wMAAf8DAAH/AwAB/wEAAYEBgwH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AzoBYBQAA0ABbwLeAd8B/wK/AcAB/wG5AboBuwH/AbsCvAH/AbsBvAG9Af8BuwG8 + Ab0B/wG7AbwBvQH/AbcBuAG5Af8BsgKzAf8CygHLAf8C5gHnAf8C3AHdAf8C0wHUAf8C0gHTAf8C0QHS + Af8BbQJSAfcDMAFMAwABARQAAxABFQNSAacDRwGAA0IBcwGEAUABgAH9AoUBhwH/AYMBhAGGAf8BgwGE + AYYB/wGGAYcBiAH/AoYBiAH/AoMBhQH/AYMBhAGGAf8ChQGHAf8DXwHzAzoBYANMAY8DTgGWAwcBCTQA + AwgBCwMIAQsDCAELAwgBCwMIAQsDGAEhA1sBwwEAAYcB6gH/AQABiAHqAf8DRAF6GAADIgExAwAB/wMA + Af8CgQGCAf8DAAH/AwAB/wKBAYIB/wMAAf8BAAGBAYIB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA + Af8BAAGBAYIB/wMAAf8DAAH/AzoBYBQAA0ABbwLgAeEB/wK7AbwB/wG0AbUBtgH/AbYBtwG4Af8BtwK4 + Af8BtgG3AbgB/wG5AroB/wHkAuUB/wHpAuoB/wLlAeYB/wLoAekB/wLQAdEB/wGlAaYBpwH/ArgBuQH/ + AssBzAH/AsoBywH/A1EBohgAAzsBYwGJAYoBjAH/AYkBigGLAf8BiQGKAYsB/wGJAYoBjAH/AogBigH/ + ApABkgH/A18B2wNSAaMDUgGnA2EB5AGOAY8BkAH/AYgBiQGKAf8BiQGKAYwB/wGJAYoBiwH/AYkBigGL + Af8BiQGKAYwB/wMsAUQYAAMQARYDIQEwDAADPgFrA2EB3ANhAe4DYQHuA2EB7gNhAe4DYQHuAUcCagH5 + AQABjgHsAf8BAAGOAewB/wEAAY4B7AH/A2EB5gNOAZUDAwEEEAADIgExAwAB/wGxAbABsQH/Aq8BsAH/ + A68B/wOvAf8BrwGuAa8B/wGvAa4BrwH/Aa8BrgGvAf8CrgGvAf8CrwGwAf8CpwGoAf8DAAH/AbUBtAG1 + Af8DrwH/Aq8BsAH/Aq8BsAH/ArcBuAH/AwAB/wM6AWAUAANAAW8B4gLjAf8BxgHHAcsB/wHCAcUByQH/ + AcQByAHLAf8BxQHIAcwB/wHEAccBywH/AcMBxQHGAf8ByQLKAf8B0wHUAdUB/wHqAusB/wHqAusB/wHT + AtQB/wKxAbMB/wLLAcwB/wLPAdAB/wLKAcsB/wNSAaEYAAMSARkDWwHDAo8BkQH/Ao8BkQH/AY0BjgGP + Af8BlwGYAZkB/wNCAXUDAQECCAADCAELA0wBjwKVAZcB/wGNAY4BjwH/Ao8BkQH/A38B/gNWAbEDCgEN + GAADJQE3AwAB/wM+AWsEAAMUARsBAAGUAewB/wEAAZMB7QH/AQABlAHtAf8BAAGUAe0B/wEAAZQB7QH/ + AQABlAHtAf8BAAGUAe0B/wEAAZQB7QH/AQABlAHtAf8BAAGUAe0B/wEAAZQB7QH/AQABkwHtAf8BAAGT + Ae0B/wM1AVcQAAMiATEDAAH/Aq0BrgH/AqwBrQH/AqwBrQH/AqwBrQH/AqwBrQH/AqwBrQH/AqwBrQH/ + AqwBrQH/Aq0BrgH/AqUBpgH/AwAB/wKyAbMB/wKtAa4B/wKtAa4B/wKtAa4B/wK0AbUB/wMAAf8DOgFg + FAADQAFvAeYC5wH/AdoB1wHGAf8B0gHFAbIB/wHUAccBtQH/AdMBxQG1Af8B1gHLAbcB/wLgAdcB/wLj + AeUB/wPlAf8B6wLsAf8B7ALtAf8C1QHWAf8BrQGuAa8B/wK0AbUB/wK/AcAB/wLPAdAB/wNRAaAcAAMW + AR4BkwGUAZUB/wGTAZQBlQH/AZYBlwGYAf8DSgGLGAADVAGuAZQBlQGWAf8BkwGUAZUB/wNcAfgkAANg + AdYDAAH/A0gBhgMcASgBAAGbAfAB/wEAAZoB7gH/AQABmgHuAf8BAAGaAe4B/wEAAZoB7gH/AQABmgHu + Af8BAAGaAe4B/wEAAZoB7gH/AQABmgHuAf8BAAGaAe4B/wEAAZoB7gH/AQABmgHuAf8BAAGaAe4B/wNA + AW4QAAMiATEDAAH/ArYBtwH/ArUBtgH/ArUBtgH/ArUBtgH/ArUBtgH/ArUBtgH/ArUBtgH/ArUBtgH/ + ArYBtwH/Aq4BrwH/AwAB/wK7AbwB/wK2AbcB/wK2AbcB/wK2AbcB/wO+Af8DAAH/AzoBYBQAA0ABbwHn + AegB5QH/AccBuQEAAf8BrgIAAf8BqQIAAf8BqQIAAf8BtQGOAQAB/wHcAdYBngH/AegB8AH2Af8B6gHt + AewB/wHrAuwB/wHuAu8B/wHVAtYB/wK+Ab8B/wLBAcIB/wLGAccB/wLRAdIB/wNRAaAUAAMPARQDSQGH + A1wByQKZAZsB/wGXAZgBmQH/A1wB+AMQARYYAAMkATUDfwH+AZcBmAGaAf8DfwH+A1gBuQNEAXoDBwEJ + FAADCgENA1MBqAMAAf8DAAH/A14B2gMrAfwBAAGgAfAB/wEAAaAB8AH/AQABoAHwAf8BAAGgAfAB/wEA + AaAB8AH/AQABoAHwAf8BAAGgAfAB/wEAAaAB8AH/AQABoAHwAf8BAAGgAfAB/wEAAaAB8AH/AQABoAHw + Af8DPgFqEAADIgExAwAB/wK/AcAB/wK+Ab8B/wK+Ab8B/wK+Ab8B/wK+Ab8B/wK+Ab8B/wK+Ab8B/wK+ + Ab8B/wK/AcAB/wK3AbgB/wMAAf8CxAHFAf8CvwHAAf8CvwHAAf8CvwHAAf8CxwHIAf8DAAH/AzoBYBQA + A0ABbwLoAeUB/wHJAb8BAAH/AcEBpQEAAf8BuwIAAf8BvQGCAQAB/wHCAbMBAAH/AeIB1AGhAf8BlwHg + AdAB/wHKAeYB3gH/AfYB7gHxAf8B7QHvAe4B/wHbAdkB2gH/AcoBxwHJAf8CzwHQAf8C1gHXAf8C0gHT + Af8DUQGgFAADRwGBAZ0BngGfAf8BnQGeAZ8B/wKeAZ8B/wGcAZ0BngH/A1wB3xwAAw4BEwNqAfkBnAGd + AZ4B/wKeAZ8B/wGdAZ4BnwH/AZ0BngGfAf8DNgFYEAADGAEiA2EB5AMAAf8DAAH/AYECAAH/AwAB/wEA + AasB+gH/AQABpgHxAf8BAAGmAfEB/wEAAaYB8QH/AQABpgHxAf8BAAGmAfEB/wEAAaYB8QH/AQABpgHx + Af8BAAGmAfEB/wEAAaYB8QH/AQABpgHxAf8BAAGmAfEB/wEAAaYB8QH/Az4BahAAAyIBMQMAAf8CyQHK + Af8CyQHKAf8CyAHJAf8CyAHJAf8CyAHJAf8CyAHJAf8CyAHJAf8CyAHJAf8CyQHKAf8CwAHBAf8DAAH/ + A84B/wLIAckB/wLIAckB/wLIAckB/wLQAdEB/wMAAf8DOgFgFAADQAFvAekB6gHnAf8B0wHKAYEB/wHO + Aa0BAAH/AcwCAAH/Ac0BjAEAAf8BzQG+AQAB/wHrAdwBtwH/AQAB1wG6Af8BAAHLAZoB/wHYAekB5AH/ + Af0B8QH2Af8BzwHfAdsB/wGvAcABvAH/AckBxwHIAf8C1gHXAf8C1AHVAf8DUQGgFAADIgExA1kBxwFn + AlkB8gKjAaQB/wKiAaQB/wNdAfADBwEKGAADGgElAaYBngGfAf0BogGjAaQB/wKjAaQB/wNdAe0DWQG+ + AxYBHxAAAz8BbQGFAgAB/wGFAgAB/wGFAgAB/wGNAgAB/wIAAYIB/wEAAbEB+wH/AQABrAHyAf8BAAGs + AfIB/wEAAawB8gH/AQABrAHyAf8BAAGsAfIB/wEAAawB8gH/AQABrAHyAf8BAAGsAfIB/wEAAawB8gH/ + AQABrAHyAf8BAAGsAfIB/wEAAawB8gH/Az4BahAAAyIBMQMAAf8C0gHTAf8C0gHTAf8C0QHSAf8C0QHS + Af8C0QHSAf8C0QHSAf8C0QHSAf8C0QHSAf8C0gHTAf8CyQHKAf8CAAGBAf8C1wHYAf8C0QHSAf8C0QHS + Af8C0QHSAf8D2gH/AwAB/wM6AWAUAANAAW8B6gHrAekB/wHfAdYBowH/Ad0B0QGRAf8B3wG6AQAB/wHe + AcUBAAH/AdwB0gGUAf8B8AHjAcsB/wGvAeABzwH/AQABvQEAAf8BAAHGAY4B/wGKAdgBuwH/AQAB1QGv + Af8BhgHWAb0B/wHpAd4B4wH/AdgB2QHaAf8C1gHXAf8DUQGgHAADIgExAqgBqQH/AqgBqQH/AqgBqgH/ + AzoBYBgAA0kBhwKoAakB/wKoAakB/wNcAfgDEQEXGAADPgFqAZECAAH/AZECAAH/AZECAAH/AZkCAAH/ + AgABjgH/AQABtwH8Af8BAAGxAfQB/wEAAbEB9AH/AQABsQH0Af8BAAGxAfQB/wEAAbEB9AH/AQABsQH0 + Af8BAAGxAfQB/wEAAbEB9AH/AQABsQH0Af8BAAGxAfQB/wEAAbEB9AH/AQABsQH0Af8DPgFrEAADIgEx + AwAB/wLbAdwB/wPaAf8C2QHaAf8C2QHaAf8C2QHaAf8C2QHaAf8C2QHaAf8C2QHaAf8C2gHbAf8C0QHT + Af8BgwGEAYYB/wLfAeAB/wLZAdoB/wLZAdoB/wLZAdoB/wLiAeMB/wMAAf8DOgFgFAADQAFvAeoB7AHr + Af8B6wHpAeIB/wHrAekB4AH/AesB7QHnAf8C7AHlAf8B7AHqAeAB/wHxAe4B7AH/Ad0B4wHhAf8BAAGy + AQAB/wEAAboBAAH/AQABvQEAAf8BAAHAAYEB/wEAAcsBnAH/AdsC3QH/AdwB2wHcAf8C2AHZAf8DUQGg + GAADBAEFA0oBjQKtAa4B/wKtAa4B/wKtAa4B/wNkAfEDJwE6EAADMwFTAysB/AKtAa4B/wKtAa4B/wMr + AfwDQAFvGAADPgFqAZ0CAAH/AZ0CAAH/AZ0CAAH/AaQCAAH/AgABkwH/AQABwAL/AQABuAH1Af8BAAG3 + AfUB/wEAAbcB9QH/AQABtwH1Af8BAAG3AfUB/wEAAbcB9QH/AQABtwH1Af8BAAG3AfUB/wEAAbcB9QH/ + AQABtwH1Af8BAAG3AfUB/wEAAboB9QH/AzwBZhAAAyIBMQMAAf8C9QH2Af8D9wH/A/YB/wP2Af8C9QH2 + Af8C9QH2Af8D9QH/A/UB/wP2Af8C6AHpAf8BhwGIAYoB/wL6AfsB/wL1AfYB/wL1AfYB/wP2Bf8DAAH/ + AzoBYBQAA0ABcAHqAusB/wHrAe0B7gH/AewB7QHwAf8B7AHtAe8B/wHtAe4B8AH/Ae0B7gHxAf8C8gH0 + Af8B0gHOAdEB/wEAAZEBiQH/AQABqQEAAf8BAAG0AQAB/wEAAbkBAAH/AQABvQEAAf8BswHYAcoB/wHk + Ad4B4gH/AtoB2wH/A1EBoBgAAzgBXgKyAbMB/wGyAbMBtAH/AbMBtAG1Af8BsQGyAbMB/wGxAbIBswH/ + A38B/gNQAZ4DOAFeAzoBYgNUAawBrwGwAbEB/wGxAbIBswH/AbEBsgGzAf8BswG0AbUB/wGxAbIBswH/ + AbIBswG0Af8DKAE9FAADPgFqAakBAAGEAf8BqQEAAYQB/wGpAQABhAH/AaoBAAGDAf8BqgEAAYIB/wEA + AasB0wH/AQABxwH+Af8BAAHFAfwB/wEAAcUB+wH/AQABxQH7Af8BAAHFAfsB/wEAAcQB+wH/AQABwwH4 + Af8BAAHDAfcB/wEAAcMB9wH/AQABwwH3Af8BAAHDAfcB/wNcAcwDDgETEAADIgExAwAB/wMAAf8ClAGX + Af8BjwGQAZIB/wGPAZABkgH/AZgBmQGbAf8BkAGRAZMB/wKaAZ0B/wGXAZgBmgH/AZcBmAGaAf8BiwGM + AY4B/wMAAf8BkAGRAZMB/wGRAZIBlAH/AYsBjAGPAf8BkwGUAZYB/wGEAYUBiAH/AwAB/wM6AWAUAANA + AW4B6QLqAf8B6wLsAf8B6wLsAf8C7AHtAf8B7ALtAf8B7ALtAf8C8QHyAf8BygHLAc0B/wGbAZIBlAH/ + AZ8BpgEAAf8BAAGeAQAB/wEAAa8BAAH/AQABxgGaAf8ByQHfAdcB/wHlAeEB5AH/AtwB3QH/A1IBpxgA + AyABLwNhAeEDWQG/A1UBsgN/Af4CtwG4Af8CtwG4Af8CtgG3Af8CtAG1Af8CtAG2Af8CtgG3Af8CtwG4 + Af8CtwG4Af8DXwH7A1IBpwNcAc8DYAHUAxQBGxQAAz4BagG0AYkBkgH/AbUBiQGSAf8BtQGJAZIB/wG0 + AYkBkgH/AbgBiAGQAf8BtgGHAY8B/wGUAZYBpwH/AZEBmQGrAf8BkgGYAaoB/wGSAZgBqgH/AZIBmAGq + Af8BkgGYAaoB/wM4AVwDHQEqAx8BLAMfASwDGwEmGAADIQEwAwAB/wGwAbEBsgH/AwAB/wIAAYEB/wGY + AZkBmwH/AwAB/wK5AbsB/wMAAf8BgwGEAYcB/wGeAZ8BoQH/AwAB/wG/AcABwQH/AwAB/wIAAYEB/wGb + AZ0BngH/AwAB/wGoAakBqwH/AwAB/wM6AWAUAAMWAR8DXQHXA18B+wNfAfsDTQH6AagCoAH9AuwB7QH/ + Au8B8AH/Ac8B0AHTAf8BywHGAbkB/wHOAdYBswH/AbkBzwGsAf8B3QHiAdIB/wHtAeYB7AH/AbgBtQG3 + Af8BpQGmAacB/wGsAa0BrgH/AzoBYRwAAwIBAwQAAwgBCwNfAfsBuwG8Ab0B/wK8Ab0B/wK8Ab4B/wK8 + Ab4B/wK8Ab0B/wK8Ab4B/wK8Ab4B/wG7AbwBvQH/AWECXQHiJAADPgFrAcMBnAGkAf8BvwGWAZ4B/wG/ + AZcBnwH/Ab8BlwGfAf8BvwGXAZ8B/wHBAZYBngH/AccBlAGaAf8ByAGUAZkB/wHIAZQBmgH/AcgBlAGZ + Af8BxwGTAZkB/wHMAZsBoQH/AxoBJSgAAxEBFwNSAfQB4QLiAf8DAAH/AZ4BnwGhAf8BwgHDAcQB/wMA + Af8D6wH/AwAB/wKjAaUB/wLHAckB/wMAAf8D6AH/AwAB/wKcAZ8B/wLHAcgB/wMAAf8B2gLbAf8DAAH/ + AyoBQBgAAwoBDQMaASQDGgEkAxkBIwNOAZUB2QHYAdoB/wLdAd4B/wLeAd8B/wHhAeIB4wH/AecB5gHq + Af8B7gHqAe4B/wHuAe0B7wH/Ab0BvgG/Af8BhwGIAYkB/wN/Af4DPwFtKAADOwFjAsEBwgH/AsEBwgH/ + A1oBxQNhAeQBwQHAAcIB/wHBAcABwgH/A14B2ANcAdECwQHCAf8CwQHCAf8DJwE6IAADFgEeA2EB3AHT + AbEBuAH/AdIBsAG3Af8B0wGwAbcB/wHTAbABtwH/AdMBsAG3Af8B0wGwAbcB/wHTAbABtwH/AdMBsAG3 + Af8B0wGwAbcB/wHTAbEBuAH/A1QBrwMCAQMsAAMtAUUDYAHeA1IB9wNZAfUDWQH1A1kB9QNZAfUDWQH1 + A1kB9QNZAfUDWQH1A1kB9QNZAfUDWQH1A1kB9QNSAfcDXQHtAz4BaiwAA0gBgwLUAdUB/wLZAdoB/wLc + Ad0B/wLeAd8B/wLgAeEB/wLiAeMB/wLnAegB/wGzAbQBtQH/AYsBjAGNAf8DPwFtLAADIgExA2AB3gNW + AbMEAAM0AVQCxgHHAf8CxgHHAf8DHQEpAwMBBANcAcwDYAHUAxIBGSQAAwYBCAMdASkDHQEpAx0BKQMd + ASkDHQEpAx0BKQMdASkDHQEpAx0BKQMcASc0AAMFAQcDQAFvA1ABmgNPAZcDTwGXA08BlwNPAZcDTwGX + A08BlwNPAZcDTwGXA08BlwNPAZcDTwGXA08BlwNQAZoDSAGDAxEBFywAAywBQwN/Af4C1wHYAf8C2gHb + Af8C3AHdAf8C3gHfAf8C3gHfAf8C4gHjAf8CuAG5Af8DPQFpNAADAQECCAADGAEhA1wB6gNdAdcDCAEL + /wAJAAMCAQMDQAFwA1ABngNQAZsDUAGbA1ABmwNQAZsDUAGeA0YBfkgAAwkBDAMEAQb/AP8AzgABQgFN + AT4HAAE+AwABKAMAAWADAAFIAwABAQEAAQEFAAFgAQMWAAP/AQAJ/wMAAfABAAEnBv8DAAGAAQABAQb/ + AwABgAEAAQEG/wMAAeABAAEHAeABAAEHAeABAAEHAwAB4AEAAQMB8AEAAQ8B8AFAAR8DAAHAAQABAwH/ + AQMB/wHwATwBDwMAAcABAAEDAf4BAwH/AfABGAEHAwABwAEAAQMB/AEBAf8B8AEAAQ8DAAHAAQABAwH4 + AQAB/wH4AQABHwMAAcABAAEDAfABAAH/AfwBAAE/AwABwAEAAQMB8AEAAX8B/gEAAX8DAAHAAQABAwHw + ASABPwH/AQAB/wMAAcABAAEDAfgBcAE/Af4BAAF/AwABwAEAAQMB/QH4AR8B/AEAAT8DAAHAAQABAwH/ + AfgBDwH4AQABHwMAAcABAAEDAf8B/AEHAfABAAEPAwABwAEAAQMB/wH+AQ8B8AEYAQcDAAHAAQABAwL/ + AT8B8AE8AQ8DAAHAAQABAwP/AfgBfgEfAwAB4AEAAQcD/wH8Af8BPwMACf8DAAn/AwAJ/wMABv8B/AEA + AR8BwAEAAQMG/wHAAQABAQGAAQABAQHgAQABBwGAAQABAQGAAQABAQGAAQABAQHgAQABBwGAAQABAQHA + AQABAwHAAQABAwH4AQABHwHAAQABDwHAAQABAwHAAQABAwH4AQABHwHAAQABDwHAAQABAwHAAQABAwH4 + AQABHwHAAQABDwHAAQABAwHAAQABAwH4AQABHwHAAQABDwHAAQABAwHAAQABAwH4AQABHwHAAQABDwHA + AQABAwHAAQABAwH4AQABHwHAAQABDwHAAQABAwHAAQABAwH4AQABHwHAAQABDwHAAQABAwHAAQABAwH4 + AQABHwHAAQABDwHAAQABAwHAAQABAwH4AQABHwHAAQABDwHAAQABAwHAAQABAwH4AQABHwHAAQABBwHA + AQABAwHAAQABAwH4AQABHwHAAQABBwHAAQABAwHAAQABAwH4AQABHwHAAQABAwHAAQABAwHAAQABAwH4 + AQABHwHAAQABAwHAAQABAwHgAQABBwH4AQABPwHAAQABAwHAAQABAwH/AYEB/wH4AQABfwHAAQABAwHA + AQABAwH+AQgBPwH4AQAB/wHAAQABDwHAAQABAwH+ARgBPwH8AQEB/wHAAQABPwHAAQABAwH+ARgBPwH+ + AR8B/wHgAQABfwHgAQABBwH+ATwBPwH/AT8r/wHAAQABfwGAAQABAQP/AcABAAEDAcABAAF/AYABAAEB + AfABAAEfAYABAAEBAeABAAH/AfABQgEPAYABAAEBAaABAAEBAeABAAEDAfwBAAE/AYABAAEBAcABAAED + AeABAAEDAfwBAAF/Av8BjwHAAQABAwHgAQABAwHgAQABBwH/AcABDwHAAQABAwHgAQABBwHgAQABBwHn + AQABAwHAAQABAwHgAQABBwHgARgBBwHiAQABAwHAAQABAwHgAQABBwHwAX4BHwHwAQABAwHAAQABAwHg + AQABBwHAAX4BAwHgAQABAwHAAQABAwHgAQABBwHAAf4BAwHAAQABAwHAAQABAwHgAQABBwHAAX4BAwHA + AQABAwHAAQABAwHgAQABBwHwAX4BDwHAAQABAwHAAQABAwHgAQABBwHgATwBDwHAAQABAwHAAQABAwHg + AQABBwHgAQABBwHAAQABAwHAAQABAwHgAQABBwHgAQABBwHAAQABDwHAAQABAwHgAQABBwH0AQABfwHA + AQAB/wHAAQABAwHwAQABDwH8AQABPwHAAQAB/wHgAQABBwH/AQABHwH8AUABPwHgAQMB/wHgAQABBwH/ + AQABPwH+AcMI/wEAAX8B/wHnFv8L - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA - Cv8BNGKaggAAAsJJREFUOE99kktPE1EUx+9OMDExIaIGYnAhQdEgBIJIontd+BHURMNDoh9BA4lLS6c0 - PATdgxToc9pKXzCEdjrttPb9hCLyHQT8e+6FYnTh4j/33nN//3POnBlWLBYYV6lUZOVSiVUq5Z6dnepk - rbYb2dur1Uj03FUpZiyXS72c43yhcCJxOE1wjgDD7u7Oz2qlAgJRKOSFSsUiqtUK6O6QihiJbzhLQCZe - vYEgK+2RzWaQTqWQTv8jimUzGXCGEjhIjbwbVq6UWb6QN+TzOSSTib+VSCCTSXOD6CSV+oZEQgdn6Wyi - rhjL5bJdmXT6SI/HEY/FoOtxYUroOiVLwm6zwmySMG2egtfjRpKScpY8x9RtD6OAFI/HoKoRaNEowuFt - TEkSNjc3KFEG7yfG0X27E08eP0IoGKAimmC5hzo2s2hU1bgpvL1NwTjm52bRdasD4+/eIp/LYYLWB/cH - MNjfh4+zs4LhLPeQV2dbW8q+omyCS9OieDP2Cnc62vH50wJi9EorlmXMzUzjbudNjI0OC6bOk/eAhULB - 76FgELQiEgljbGQYN9quUbUZmodOg0vh08I82ik2OvQSkXBYsKeeAxYI+GN+nw9cW4oihnW99Sq1fQ/S - pAEm4yQeDg6greUKpmiYnKnz5E2wYDBg8no8+Or1CgUDAbweHUHr5SZcungBzaSW5ibqbAhkOOO4h9hp - pihKt+xyHZPA5XG74Vtfh2Q04MXzZ6SnMBo+YJ1i/K7O0fprIxTqZfTpGBkku80Gh91+IoddVPLRa3Hx - PY/V721WK4+bNU1jzO/38QSNdOlYW12FdW3tv+KMy+mUVVU9Tz8eYy6Xk8luF3O75QYySysWy6FleRlC - 9AmF/pyPiDHTEBt551xMloWZuWWZUReMgD6LxWL6srSkLS0u7pN+0D5GicxUvd/pcPCOWVRVRYLfkN7p - ErGspUwAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr/AAAK/wE0YpqCAAACv0lE + QVQ4T32SW08TURSFz5tgYmJCRA3E4IMERYMQCCKJvuuDP0FNNFwk+hM0kPho6ZSGi4DvIAV6nbbSGwyh + nU47xd6vtIj8BwGX+xwtXh58WJ1z9vnW3qtnhhUKeaFiscBKxSIrl0s9e3uVyVqtGtnfr9VI9FtVqWYs + lYq9nON8Pv9TfzY4Q4ChWt37VimXQXvk8zmhYqGASqUMOjuiIUbiG04bkImbGwiy0hqZTBqpZBKp1D+i + WiadBmeogYPUyNOwUrnEcvmcIZfLYnc38bcSCaTTKW4QSZLJz0gkdHCW9iZKxVg2m+lKp1LHejyOeCwG + XY8LU0LXqcku7DYrzCYJ0+YpeD1u0ZSz5DmhtD2MClI8HoOqRqBFowiHdzAlSdja2qRGabydGEf3zU48 + evgAoWCAhmiC5R5KaWbRqKpxU3hnh4pxzM/NoutGB8bfvEYum8UEPe/dHcBgfx/ez84KhrPcQ16dbW8r + B4qyBS5Ni+LV2Avc6mjHh8UFxOgvrVpWMDczjdud1zE2OiyYOk/eQxYKBb+EgkHQE5FIGGMjw7jWdoWm + zdB96HRxSSwuzKOdaqNDzxEJhwX7y3PIAgF/zO/zgWtbUcRlXW29TLHvQJo0wGScxP3BAbS1XMIUXSZn + 6jx5EywYDJi8Hg8+eb1CwUAAL0dH0HqxCRfOn0MzqaW5iZINccMpxz3ETjNFUbpll+uEBC6P2w3fxgYk + owHPnj4hPYbR8A4bVONndY70fTMU6mX06hgZJLvNBofd/lMOu5jio5hcfM1r9XOb1crrZk3TGPP7fbxB + Ix041tfWYF1f/68443I6ZVVVz9KHx5jL5WSy28XcbrmBAGnVYjmyrKxAiF6h0O/9MTFmusBGnpyLybIw + M7csM0rBCOizWCymj8vL2vLS0gHpK61jZDbT9H6nw8ETs6iqUoMo+wGQ3ukSwrHlrAAAAABJRU5ErkJg + gg== - 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 + rkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A - ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje - PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH - m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF - jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh - /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y - uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX - g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT - uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX - IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g - GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 - ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACgklE + QVQ4T6WOa0iTURjHn6VuLSMqTYQMqUwnL7NBZEUhg1IJP5Qf7AKSEmZEmVrMS4Gp29LKLdmaJUWalzRf + CS+Y2xLz+mZSps7mps4rKVkfRBD8IHs675sM7DUKOvDjPOec//M7DyDif+Eq5pds8HH2OfR+NYB1vhIm + F4zQPBp75bU1MuPLt2fCrqkseDOaBF1TBeD8m8D+g4aembuxpZ+PLJX0HXS2OJLSmZncfxP0zT6F9sns + 2Me9FOp6vAleWNQrwQZbfLZpLPnPgu9LI9A/Vw6m0bQ4/YcQ1HT7opbx49AwvkREYZUlJpeZfujq+U1g + 39gyrk7QMvsxv9MP73f5r+EeuSvoprDelqxyOlcEPMFbh/piQXcoZr/bicr23ahu34uqVX7VezCnbReq + OyRoHlOG8ATTC5/EjfZbsvKB+Ajte3lHVmsAkQVx3Gndh3mdBybK+i9E0NbrYQvLsx48wdziILROaMkk + OihkTlcrmgMwwxTMkW4MQmXb0YH64RwwO/JheWXR1ecqOiYqwGg3gHmkGPLbTtHX6gMxuZHiSGoIxtum + YxbaogTakgvMVA1fYBx/Ak0jRdBkLYYcczSdUCPBy7VSjks0hTcbwywv+9RQNaiCV8MqviAh8wxo6Eww + OspAURdNx5RI8PwLKcfZUgoTq4lg8AHk1abAoXApX8AukUgIadqrkFp3rjZSJ8Eog5TjpJ7CuIrjQ4pH + iSDeJOKyPIEbgEAA4L4BBB4nMg/XyPUylBeuopNhuDp0SOjmLiIZEZtdT+BG8CKBQPFmodwnZHuKN7WV + JdVHuu3Glh2eUeQtmGT82ex6AhZ3gpgEPciRbGtgP/AkCAmrEyD8BK5+NdGVjkx7AAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAetJREFUOE9j+P//PwMlGEXzfQdj37t2Bs24DLxnZ5B5z96oEFkebsAtV7OIKwaq/y9p - Kfy/bqW7Bd2QG3YGjZd1lf9f1lH6f8PesPf/wZmMIDVgA656WHGd1lH+f1xRGoxPqcv9v2iJMOSyrUHj - aW0loJwUGJ/SVPx/3kzbFG7ATk4uxgOK0j0HlGX+gzFQ0SE1uf9nLHVXnLM3rDmqrfh/P1AMLq8kvf+A - rAQ33ACYc3cqy/TuUJL+vxOIdyhI/d8DdMk+LcX/2xUkIWIQuf1LNBVZYHowYmAj0JANQIVgDLR1PdAg - GH+jkvTe+doqrFgDEVlwhZL08RXAsEDD7zaZGsBtxumCBYrSDQsVpP4A8X90vEBRaiN67KB4YYaidONM - oEYYngFkgzCqmPSW/0+/w/WBGRNU5RkmKkg1TJSX+g/DE0BsBenNkxSku8BsZKwgtWWSihwHPBZ61RS4 - OuUl/6Ph/bX6qkwgRV0KUr0daPJditJmKNHYoSSb2AS0pUlO8j+Q3vctwBusGYab5aW6wXJA3KIoM/2x - sxVYnoGZAYwFgBRvnKRofba02BZuFmYDIF8HKG4MwkA2iK+QIik6N1NafCGQLQLEfHAXABUxAzHYT2BB - BgZOIJ8XGQPFeJDk2UB6MFIiOdkaALyqHwCXXFYvAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB7UlE + QVQ4T6WQQUgbQRSG18YWjbV4UNudicnMxiiahK4VAwaaFEqhUAoeeyoIXsSTd0WjHmzagHpRD1KFHnKr + 0UANWJMWiqBFaWOpFNSDePWol8Lzzeisu3vUw7fz3v+/98/uagBwKxzN0bPO1wcJc9yu2TlMmP2HySeD + ds0q/r2IvdkzQ/C7ncHfeDRvHxLsJ8xUORqEcsSA/WRHBr7NVwhdmn9exr3bkSBscirZavXDr+7rkPJT + M7UdNtAjkq02DruxcJcVUKj2VpQ4/VAK+kCCQ99b/PCzO5rdSXYM/QhzKKJm+QYtlpoe1VgBikLQl1kz + KBSQNUZgHd9ko53DF6Zfapde8VMbr1Q7jgBBDkOWcVCCt37GINXnDPr1Y7j5rn3esazIGnQzi//CxelK + l2ndrHA0gkVOR5cY+Y+Am0VOcu55RzPHaWoeBxVzVzg1moeTc2fAVCigTTMyOh0goJgSJ6OrM4ymZW2H + kfxMs7/KCsi0MO+7gA4uisOPQ3eEn2YkM+ny05zGrADBpNHUO4bpY34d8Nw463kllxXjAfJeesgE980e + P49LX/Nokjo8at/qDSMDtDFfU+kxsY+g3inAWvSsT29Y6KcPl7CuRx7IAPHAIQ8iv0mKmlaNfa0d1O7b + /HuoeWStxJsB2gW8qh8AcaOVUQAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAZlJREFUOE9j+P//PwMlGKfmJRcdPRec1+9ecF6ve+lFJx9cluA0YO5Zg8fTT4n9n35K - 9P+cs/ovSTZg2intmxOOi/8HYSD7PskGTDphcK37qPR/EJ50Qv8uQQOmnnIynnbKLWDqKVf/aac9/fuP - mz5pOyT3H4T7jpm8mH7Ky3/qKTcgdg+YftrdFGYgOAw6jxhJtB7SBCrWgWLd/y0HNf43HVABYxC77ZAu - XL71kNb/9sM6UiC9YAPq9uoo1+xV/4+JNYBiMIwqX71HTQVuQPUuU5nibdr/i7ZqwXHxNq3/yBhFbqv2 - //Id+rJwA0CMgk1Gwbkb9UqBuASEs9frvspar/MfhIHst7kbgOIgvFG3FKg2dOmpuWDX40wHicv0riUs - 0/0PwXp3CMYCuoLgWXo3g2bp/odgPdLTgUu//gPnft3/IOzSr/cUpwuYGRgYgFgAiBWBWAOIdRkZGNS1 - EpU6jMo1T4CwdpJSJ0gMJAdVA1IrAA8DIIcZiNmBmBOIuYGYF2guIyKxMDCCxKByIDUgtcx4A5HYLA4A - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T6XSS0sCYRQG4BEXERG46UI3yCRNnZmw/AGZFUagJO2rZSFEJi6MFtFNhAxBBSlokW7NQIlIKLvJ + FyJtBKEoqKCCfsPpO2pD1repFs9wfM87x81wAPAvzBDt3QxYdvOibzcv+KI3pjFWBzFDtJPrfQyTRgiT + BtjOia+sDmKGKER0xa2rJkB0vmd1EDNEgWxvwXfRCiiQFe9YHSQNQWLqC5FhW5AMWUPXFqv/yvi0lukA + tHnZ/xImo9YgGaZGbOHrEWPVAe+5oXk100PL+goeVk41sHyiKsEZs8/9akYL62f6FunAUlrftZhWw0+a + L6p3nuNulXTAc2Rsc6Z0MJ/USpypalW7pA7ch2K7dADNHRjsjoTgohbQbJx/m4nrAdH53bFPc5TgXbQ7 + ESU7pfekA99NxYTCZIyHMuGW1UHMENkjQnE8wkOZ8PvvwOwXHwb9PCCzX3hmdRAn50oUVCeloXgZx6m1 + U8oNg7sni3TTSi9muKt0sKsoHcAH/SGnaqhaqo6qp3dl0r8AJ8OsssMOduXSgb8D7gMxXmeO6KXG2gAA + AABJRU5ErkJggg== - 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 - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T6XSS0sCYRQG4BEXERG46UI3yCRNnZmw/AGZFUagJO2rZSFEJi6MFtFNhAxBBSlokW7NQIlIKLvJ + FyJtBKEoqKCCfsPpO2pD1repFs9wfM87x81wAPAvzBDt3QxYdvOibzcv+KI3pjFWBzFDtJPrfQyTRgiT + BtjOia+sDmKGKER0xa2rJkB0vmd1EDNEgWxvwXfRCiiQFe9YHSQNQWLqC5FhW5AMWUPXFqv/yvi0lukA + tHnZ/xImo9YgGaZGbOHrEWPVAe+5oXk100PL+goeVk41sHyiKsEZs8/9akYL62f6FunAUlrftZhWw0+a + L6p3nuNulXTAc2Rsc6Z0MJ/USpypalW7pA7ch2K7dADNHRjsjoTgohbQbJx/m4nrAdH53bFPc5TgXbQ7 + ESU7pfekA99NxYTCZIyHMuGW1UHMENkjQnE8wkOZ8PvvwOwXHwb9PCCzX3hmdRAn50oUVCeloXgZx6m1 + U8oNg7sni3TTSi9muKt0sKsoHcAH/SGnaqhaqo6qp3dl0r8AJ8OsssMOduXSgb8D7gMxXmeO6KXG2gAA + AABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA - Cv8BNGKaggAAAsJJREFUOE99kktPE1EUx+9OMDExIaIGYnAhQdEgBIJIontd+BHURMNDoh9BA4lLS6c0 - PATdgxToc9pKXzCEdjrttPb9hCLyHQT8e+6FYnTh4j/33nN//3POnBlWLBYYV6lUZOVSiVUq5Z6dnepk - rbYb2dur1Uj03FUpZiyXS72c43yhcCJxOE1wjgDD7u7Oz2qlAgJRKOSFSsUiqtUK6O6QihiJbzhLQCZe - vYEgK+2RzWaQTqWQTv8jimUzGXCGEjhIjbwbVq6UWb6QN+TzOSSTib+VSCCTSXOD6CSV+oZEQgdn6Wyi - rhjL5bJdmXT6SI/HEY/FoOtxYUroOiVLwm6zwmySMG2egtfjRpKScpY8x9RtD6OAFI/HoKoRaNEowuFt - TEkSNjc3KFEG7yfG0X27E08eP0IoGKAimmC5hzo2s2hU1bgpvL1NwTjm52bRdasD4+/eIp/LYYLWB/cH - MNjfh4+zs4LhLPeQV2dbW8q+omyCS9OieDP2Cnc62vH50wJi9EorlmXMzUzjbudNjI0OC6bOk/eAhULB - 76FgELQiEgljbGQYN9quUbUZmodOg0vh08I82ik2OvQSkXBYsKeeAxYI+GN+nw9cW4oihnW99Sq1fQ/S - pAEm4yQeDg6greUKpmiYnKnz5E2wYDBg8no8+Or1CgUDAbweHUHr5SZcungBzaSW5ibqbAhkOOO4h9hp - pihKt+xyHZPA5XG74Vtfh2Q04MXzZ6SnMBo+YJ1i/K7O0fprIxTqZfTpGBkku80Gh91+IoddVPLRa3Hx - PY/V721WK4+bNU1jzO/38QSNdOlYW12FdW3tv+KMy+mUVVU9Tz8eYy6Xk8luF3O75QYySysWy6FleRlC - 9AmF/pyPiDHTEBt551xMloWZuWWZUReMgD6LxWL6srSkLS0u7pN+0D5GicxUvd/pcPCOWVRVRYLfkN7p - ErGspUwAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr/AAAK/wE0YpqCAAACv0lE + QVQ4T32SW08TURSFz5tgYmJCRA3E4IMERYMQCCKJvuuDP0FNNFwk+hM0kPho6ZSGi4DvIAV6nbbSGwyh + nU47xd6vtIj8BwGX+xwtXh58WJ1z9vnW3qtnhhUKeaFiscBKxSIrl0s9e3uVyVqtGtnfr9VI9FtVqWYs + lYq9nON8Pv9TfzY4Q4ChWt37VimXQXvk8zmhYqGASqUMOjuiIUbiG04bkImbGwiy0hqZTBqpZBKp1D+i + WiadBmeogYPUyNOwUrnEcvmcIZfLYnc38bcSCaTTKW4QSZLJz0gkdHCW9iZKxVg2m+lKp1LHejyOeCwG + XY8LU0LXqcku7DYrzCYJ0+YpeD1u0ZSz5DmhtD2MClI8HoOqRqBFowiHdzAlSdja2qRGabydGEf3zU48 + evgAoWCAhmiC5R5KaWbRqKpxU3hnh4pxzM/NoutGB8bfvEYum8UEPe/dHcBgfx/ez84KhrPcQ16dbW8r + B4qyBS5Ni+LV2Avc6mjHh8UFxOgvrVpWMDczjdud1zE2OiyYOk/eQxYKBb+EgkHQE5FIGGMjw7jWdoWm + zdB96HRxSSwuzKOdaqNDzxEJhwX7y3PIAgF/zO/zgWtbUcRlXW29TLHvQJo0wGScxP3BAbS1XMIUXSZn + 6jx5EywYDJi8Hg8+eb1CwUAAL0dH0HqxCRfOn0MzqaW5iZINccMpxz3ETjNFUbpll+uEBC6P2w3fxgYk + owHPnj4hPYbR8A4bVONndY70fTMU6mX06hgZJLvNBofd/lMOu5jio5hcfM1r9XOb1crrZk3TGPP7fbxB + Ix041tfWYF1f/68443I6ZVVVz9KHx5jL5WSy28XcbrmBAGnVYjmyrKxAiF6h0O/9MTFmusBGnpyLybIw + M7csM0rBCOizWCymj8vL2vLS0gHpK61jZDbT9H6nw8ETs6iqUoMo+wGQ3ukSwrHlrAAAAABJRU5ErkJg + gg== - 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 - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T6XSS0sCYRQG4BEXERG46UI3yCRNnZmw/AGZFUagJO2rZSFEJi6MFtFNhAxBBSlokW7NQIlIKLvJ + FyJtBKEoqKCCfsPpO2pD1repFs9wfM87x81wAPAvzBDt3QxYdvOibzcv+KI3pjFWBzFDtJPrfQyTRgiT + BtjOia+sDmKGKER0xa2rJkB0vmd1EDNEgWxvwXfRCiiQFe9YHSQNQWLqC5FhW5AMWUPXFqv/yvi0lukA + tHnZ/xImo9YgGaZGbOHrEWPVAe+5oXk100PL+goeVk41sHyiKsEZs8/9akYL62f6FunAUlrftZhWw0+a + L6p3nuNulXTAc2Rsc6Z0MJ/USpypalW7pA7ch2K7dADNHRjsjoTgohbQbJx/m4nrAdH53bFPc5TgXbQ7 + ESU7pfekA99NxYTCZIyHMuGW1UHMENkjQnE8wkOZ8PvvwOwXHwb9PCCzX3hmdRAn50oUVCeloXgZx6m1 + U8oNg7sni3TTSi9muKt0sKsoHcAH/SGnaqhaqo6qp3dl0r8AJ8OsssMOduXSgb8D7gMxXmeO6KXG2gAA + AABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAoRJREFUOE+lk11Ik1EYx5+md7XEMHPmB4tyZBEmESaW0kV64UV4EYZGCAoFaurFIrAQ - hCKFMgsKJMKbKEmI8CLCPkArLXXOuU03nfvAnHNu6faq78f277yWc2FdeeAH5zzw/53ncM4hALQd1sOh - oOM/2AlhH833NGsMV9Tahe46la/3Di0Pd1Jg7MV69reAc/2TsOCloKU/cbQyw2iqiIfjhua7p+vakeB4 - F3Hm7k1BWPhJWxCDrPYjRtf78t1gbQEmK5SYqU7AeNV+v/NZTa77TfOmAKKb/sZDkHwkWUpbF01XYbdN - wHKvEvpSJQZL4vG1TFM/XJ0bJVi1EiJMEYQ5kuzaKsGYB8laCMFcBM+cHgNtN/H58nEz59QlhcXFKAHv - JGwg+Sk025bPj2Xzoq0c/MghiBPnIbpqYTE8989O6jJFzk1rS64oQShAkIFE4cBgMq8/YRNtl8DrNBCM - hRAdNZDmGwHu40VxbZkEboFCq74oAWcmrFgpvDykFAxn+sTpC2AdQDDkQ7SWQZwpR2ipmxl4FpIBra54 - o67Ra6bQopUER18xb25iu54EP5rNWi8Br8+C5Lr+im2/HvB6nNR0S0upKaqoDlbcJPnZmVwDTYL1E4Sp - dgimYqx92YWQ8bQe8MYHAn5qbblNqqR9tDEiD+np43aaMo3S+9edbznrB8A/Cyz1A/YiT9DTc/huy31S - p6dGgjFsJhMRKBQKatQ27Gyor5vr7HgEn23IM/Jt4GFHx5MDWceObgluEcjCPXG7886dLZjOzcl5kJaS - corVVAw1Q8MCGYyDDDUjlZHAiI10IC/kYuwO2ssCSjmsIEpjtfQ/yHM5mMxIZMQxYiKC7XznX8JFYFou - bf5cAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACf0lE + QVQ4T6WPW0jTURzHf6lvtcQwc+aFRTm6ECYRJpbSQ/rgQ/gQhkYICgVq6sMisBCEIoUyCwokwpcoSYjw + IcIuoJWWOufcppvOXTDnnFu6Tf3f9u38TbeR9VIHPufy4/f9nHMIwH+xPkkB+1+wEUJemu9pVusvqzQL + 3XVKb+9tWh7uJP/Y8yhB0PlHQryHAub+pNHKTIOxIgH26+pv7q6rhwPjXRQ0dUcEIf7HVoQAW7/Hantf + vB2sLcBkhQIz1YkYr9rrczytyXW9bo4IILh+w00QvSSaS1sXjVdgs07AfLcSulIFBksS8KVMXT9cnRsl + WLVEMUXg50i0aap4Qx5ESyF4UxHcczoMtN3Ap0vHTEGHNjkkLEYJOEcE0UfSbFs+N5bNCdZycCMHIEyc + g+CshVn/zDc7qT0kBF20tuSMEkj+X0CkkH8whdMdtwrWi+C0avCGQgj2GojzjUDwwwVhbZn44AJJq94o + QdBEWLFQaHlIwetP9wnT58FeAF6fD8FSBmGmHNJSNzNwrF8GtLriiQgkj4mkRQvx9r5iztTEbj0BbjSb + Pb0EnC4LovPaS3b9eq/H7aCmmxpKS1VGBFhxkehjf3IONPGWj+Cn2sEbi7H2eQckwykd4Enw+33U2nKL + lMl7aHOEBU8etdOUcZTevep8E7S8B3yzwFI/YCtyB9w9B++03CNVRtpGjCh2g7AgJiaGGjUN2xvq6+Y6 + Ox7Cax1yj3wdeNDR8Xhf1tEj6yF5bAa3COTzrvideWfPFEzn5uTcT09NPclqSoaKoWbNmYz9DBUjjZHI + iAsL5INcjNtGu1lAIYdjiNJZLWMDeS8HUxhJjHhGbFjw74B+AsJFYFrRskcjAAAAAElFTkSuQmCC @@ -881,464 +877,453 @@ - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAArRJREFUOE+l01tIU3EAx/GBlAQVCkVvTZMI1B6SijCkhx566MIqJbEVFZqplTmVSZa2 - zOsslWLdzMjMJCjDaWoPywdzrfA+15zOy9zV7cw5zXbO2fj13wFHom8e+HI48P9/zv+c/zk8ALz1FJjs - maqKpI1PEhiTLJ42Pye9iKcttfG0tc5fgsf86thaN+IA92BeKGuWsV7bS3hna+G1v4bX8QY+qgE+ZyN8 - riauP+ZPpTNObPwf4oD5vuxwxvAI7MxDsMYqsKYasObH8Fpk8FqfwQ/7Zp9iwdIFB7VotNtnJU4nFeyf - ywFOVQafniwBM/mAVARmqphUCma6HKxBysFeYxncpk643B5QlAME2RcA7N3JfHq8EMx4Ppix2+R8F4y+ - AMzEPZKEQ9mJO5g3yDE3/xcOh32aIBsCgK1LyPeMikFrRaB/Z5FzNujRXECXD4wRiKCs7iZck82gXEt+ - IG/5PXCPYPp6jr80IoJnOJ2UBlqdDnbkBgaHBPg1dIKgGXBrSkDZraCccx6y/G0rgMnWeP5CfyYWeq9i - sTcFbN81MAPpkKnCUKHcjsVBIZZ0TXC6fbDZrI2rdmH042n+3M/rcCmTQfVcgk6ZCK0qCTXfI1HeHQG1 - SgDtcBEsZAWm/nfFqwD1+1N8e3caXF1XoP52BpmKMOQoIlCg2INCUo5iNzI6t0Cp/wCPpqViFfCj7ni4 - QZEKU8dFaNoTUNl2kEvUGo1MeRSkbTGo7IxDx4Acmp666lXAwFtBiPZLCjPy+Ty0zUkwtFzAlFyI1IYY - JNZHQ992FvoOCbTynHpr+8ldK4AgHndsFl/eL6jOjSuUZh2WVN6KLaoUxd4/WrLXeKQs2i3JPiQVC6PE - ZFwEKYzMCSeFBL4DchG05o+yI3RryIGdoYEt4/E2kbH+gpfnrOtX9sP/AIt1021BwrQaAAAAAElFTkSu - QmCC + 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 - bf5cAAAAAElFTkSuQmCC + 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 - XgJwIDJGN7ducgAAAABJRU5ErkJggg== + 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 + rkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A - ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje - PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH - m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF - jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh - /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y - uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX - g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT - uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX - IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g - GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 - ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + 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 - ErGspUwAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr/AAAK/wE0YpqCAAACv0lE + QVQ4T32SW08TURSFz5tgYmJCRA3E4IMERYMQCCKJvuuDP0FNNFwk+hM0kPho6ZSGi4DvIAV6nbbSGwyh + nU47xd6vtIj8BwGX+xwtXh58WJ1z9vnW3qtnhhUKeaFiscBKxSIrl0s9e3uVyVqtGtnfr9VI9FtVqWYs + lYq9nON8Pv9TfzY4Q4ChWt37VimXQXvk8zmhYqGASqUMOjuiIUbiG04bkImbGwiy0hqZTBqpZBKp1D+i + WiadBmeogYPUyNOwUrnEcvmcIZfLYnc38bcSCaTTKW4QSZLJz0gkdHCW9iZKxVg2m+lKp1LHejyOeCwG + XY8LU0LXqcku7DYrzCYJ0+YpeD1u0ZSz5DmhtD2MClI8HoOqRqBFowiHdzAlSdja2qRGabydGEf3zU48 + evgAoWCAhmiC5R5KaWbRqKpxU3hnh4pxzM/NoutGB8bfvEYum8UEPe/dHcBgfx/ez84KhrPcQ16dbW8r + B4qyBS5Ni+LV2Avc6mjHh8UFxOgvrVpWMDczjdud1zE2OiyYOk/eQxYKBb+EgkHQE5FIGGMjw7jWdoWm + zdB96HRxSSwuzKOdaqNDzxEJhwX7y3PIAgF/zO/zgWtbUcRlXW29TLHvQJo0wGScxP3BAbS1XMIUXSZn + 6jx5EywYDJi8Hg8+eb1CwUAAL0dH0HqxCRfOn0MzqaW5iZINccMpxz3ETjNFUbpll+uEBC6P2w3fxgYk + owHPnj4hPYbR8A4bVONndY70fTMU6mX06hgZJLvNBofd/lMOu5jio5hcfM1r9XOb1crrZk3TGPP7fbxB + Ix041tfWYF1f/68443I6ZVVVz9KHx5jL5WSy28XcbrmBAGnVYjmyrKxAiF6h0O/9MTFmusBGnpyLybIw + M7csM0rBCOizWCymj8vL2vLS0gHpK61jZDbT9H6nw8ETs6iqUoMo+wGQ3ukSwrHlrAAAAABJRU5ErkJg + gg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA - Cv8BNGKaggAAAv1JREFUOE9j+P//PwMlGK75yacTDPvvlUusvx4pvuN2PuP++80MN9+sVdt1J7Xg7rv9 - DKuuljEsuVDEsPv2bIbPP97B9cEZZ58tZFh2KXzW1FPWh+ef95+76mpK0YorMYunnDL6ePjRJM4NN2oZ - VlwqY9h/dz7Dj99fMA24+XYvw8YbjWYzT8WkTjoe2tmyz2Vd9U67E8VbLW6Wb3V+ULnd81zNDv8tU4/m - Nx2/v40f5m24SZ9/vmD48P0Jw8EHRfY7bycmb7sVm7jxWkLq6ssxxfNPh/X1HnDeX7PF5mTjlryaxSen - Yhpw7/02htNPuj2nnJT8P+es+uvZZ1R+zTqj8GveOY23s8/I/19y0eD2rLPS/w/cz0u6+mo+phf23C0D - eiHevfsI//81V0PTll3ymLDkouuy5Ze9Euafs9yy9VaGR+dhnv/rroVnHXnYgmnA/vvtDDvuVCi2H5L+ - P/+8Z/HiCwEdc8+5rpx91ill4QWfVcsuhYU2HxD5v+lGjteRRxMwDdhxp5Fhy60qoaYDyv8XnA+vm37a - vW7mGe9V0097pE477b5g6aX4+Ib98v+33KpW3XOvC9OAbTfbGLbebGOp3avzY8bp8M6pJ4OLJ53wWz3x - uE9a3zH36fPOJWbX7NX+s+VmC/u2Wx2YBmy42sWw8Vo3Q8UO82dt+32mTj+Rmt1+wG91237f9N5DYX39 - R6LKKrabv9h1awbDzlvTMQ1Yd7OXYd21fobCjfYXy7a4LejYF59QtzNwVfV2n7SOfXHNtTv8G0o2O1/Y - fmc2w/b7MzENsHI3ZCifmM6Qtc5jX/7qgI01m+NjitYFr6vcFFNQsi6stmJj1KTCzYFbKydmM9h7WWAa - wMDAwAjELOZx2k0eM0z/+8yw+uI+1eS/13Tzf97TLX56zTT7YxWtXwJSA1KLkRKZGRiYmRgYpICmqImq - CiaIaPOXimgLFAFxsYiOQImIskAsUE4VqEYCpBabAQxACTagAjagDSAAchEyBnHYgWpYgRjuBQBD4TbN - MxoArgAAAABJRU5ErkJggg== + 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 - QmCC + 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 - bf5cAAAAAElFTkSuQmCC + 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 - ErGspUwAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr/AAAK/wE0YpqCAAACv0lE + QVQ4T32SW08TURSFz5tgYmJCRA3E4IMERYMQCCKJvuuDP0FNNFwk+hM0kPho6ZSGi4DvIAV6nbbSGwyh + nU47xd6vtIj8BwGX+xwtXh58WJ1z9vnW3qtnhhUKeaFiscBKxSIrl0s9e3uVyVqtGtnfr9VI9FtVqWYs + lYq9nON8Pv9TfzY4Q4ChWt37VimXQXvk8zmhYqGASqUMOjuiIUbiG04bkImbGwiy0hqZTBqpZBKp1D+i + WiadBmeogYPUyNOwUrnEcvmcIZfLYnc38bcSCaTTKW4QSZLJz0gkdHCW9iZKxVg2m+lKp1LHejyOeCwG + XY8LU0LXqcku7DYrzCYJ0+YpeD1u0ZSz5DmhtD2MClI8HoOqRqBFowiHdzAlSdja2qRGabydGEf3zU48 + evgAoWCAhmiC5R5KaWbRqKpxU3hnh4pxzM/NoutGB8bfvEYum8UEPe/dHcBgfx/ez84KhrPcQ16dbW8r + B4qyBS5Ni+LV2Avc6mjHh8UFxOgvrVpWMDczjdud1zE2OiyYOk/eQxYKBb+EgkHQE5FIGGMjw7jWdoWm + zdB96HRxSSwuzKOdaqNDzxEJhwX7y3PIAgF/zO/zgWtbUcRlXW29TLHvQJo0wGScxP3BAbS1XMIUXSZn + 6jx5EywYDJi8Hg8+eb1CwUAAL0dH0HqxCRfOn0MzqaW5iZINccMpxz3ETjNFUbpll+uEBC6P2w3fxgYk + owHPnj4hPYbR8A4bVONndY70fTMU6mX06hgZJLvNBofd/lMOu5jio5hcfM1r9XOb1crrZk3TGPP7fbxB + Ix041tfWYF1f/68443I6ZVVVz9KHx5jL5WSy28XcbrmBAGnVYjmyrKxAiF6h0O/9MTFmusBGnpyLybIw + M7csM0rBCOizWCymj8vL2vLS0gHpK61jZDbT9H6nw8ETs6iqUoMo+wGQ3ukSwrHlrAAAAABJRU5ErkJg + gg== - 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 + rkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A - ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje - PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH - m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF - jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh - /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y - uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX - g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT - uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX - IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g - GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 - ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + 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 - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T6XSS0sCYRQG4BEXERG46UI3yCRNnZmw/AGZFUagJO2rZSFEJi6MFtFNhAxBBSlokW7NQIlIKLvJ + FyJtBKEoqKCCfsPpO2pD1repFs9wfM87x81wAPAvzBDt3QxYdvOibzcv+KI3pjFWBzFDtJPrfQyTRgiT + BtjOia+sDmKGKER0xa2rJkB0vmd1EDNEgWxvwXfRCiiQFe9YHSQNQWLqC5FhW5AMWUPXFqv/yvi0lukA + tHnZ/xImo9YgGaZGbOHrEWPVAe+5oXk100PL+goeVk41sHyiKsEZs8/9akYL62f6FunAUlrftZhWw0+a + L6p3nuNulXTAc2Rsc6Z0MJ/USpypalW7pA7ch2K7dADNHRjsjoTgohbQbJx/m4nrAdH53bFPc5TgXbQ7 + ESU7pfekA99NxYTCZIyHMuGW1UHMENkjQnE8wkOZ8PvvwOwXHwb9PCCzX3hmdRAn50oUVCeloXgZx6m1 + U8oNg7sni3TTSi9muKt0sKsoHcAH/SGnaqhaqo6qp3dl0r8AJ8OsssMOduXSgb8D7gMxXmeO6KXG2gAA + AABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA - Cv8BNGKaggAAAsJJREFUOE99kktPE1EUx+9OMDExIaIGYnAhQdEgBIJIontd+BHURMNDoh9BA4lLS6c0 - PATdgxToc9pKXzCEdjrttPb9hCLyHQT8e+6FYnTh4j/33nN//3POnBlWLBYYV6lUZOVSiVUq5Z6dnepk - rbYb2dur1Uj03FUpZiyXS72c43yhcCJxOE1wjgDD7u7Oz2qlAgJRKOSFSsUiqtUK6O6QihiJbzhLQCZe - vYEgK+2RzWaQTqWQTv8jimUzGXCGEjhIjbwbVq6UWb6QN+TzOSSTib+VSCCTSXOD6CSV+oZEQgdn6Wyi - rhjL5bJdmXT6SI/HEY/FoOtxYUroOiVLwm6zwmySMG2egtfjRpKScpY8x9RtD6OAFI/HoKoRaNEowuFt - TEkSNjc3KFEG7yfG0X27E08eP0IoGKAimmC5hzo2s2hU1bgpvL1NwTjm52bRdasD4+/eIp/LYYLWB/cH - MNjfh4+zs4LhLPeQV2dbW8q+omyCS9OieDP2Cnc62vH50wJi9EorlmXMzUzjbudNjI0OC6bOk/eAhULB - 76FgELQiEgljbGQYN9quUbUZmodOg0vh08I82ik2OvQSkXBYsKeeAxYI+GN+nw9cW4oihnW99Sq1fQ/S - pAEm4yQeDg6greUKpmiYnKnz5E2wYDBg8no8+Or1CgUDAbweHUHr5SZcungBzaSW5ibqbAhkOOO4h9hp - pihKt+xyHZPA5XG74Vtfh2Q04MXzZ6SnMBo+YJ1i/K7O0fprIxTqZfTpGBkku80Gh91+IoddVPLRa3Hx - PY/V721WK4+bNU1jzO/38QSNdOlYW12FdW3tv+KMy+mUVVU9Tz8eYy6Xk8luF3O75QYySysWy6FleRlC - 9AmF/pyPiDHTEBt551xMloWZuWWZUReMgD6LxWL6srSkLS0u7pN+0D5GicxUvd/pcPCOWVRVRYLfkN7p - ErGspUwAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr/AAAK/wE0YpqCAAACv0lE + QVQ4T32SW08TURSFz5tgYmJCRA3E4IMERYMQCCKJvuuDP0FNNFwk+hM0kPho6ZSGi4DvIAV6nbbSGwyh + nU47xd6vtIj8BwGX+xwtXh58WJ1z9vnW3qtnhhUKeaFiscBKxSIrl0s9e3uVyVqtGtnfr9VI9FtVqWYs + lYq9nON8Pv9TfzY4Q4ChWt37VimXQXvk8zmhYqGASqUMOjuiIUbiG04bkImbGwiy0hqZTBqpZBKp1D+i + WiadBmeogYPUyNOwUrnEcvmcIZfLYnc38bcSCaTTKW4QSZLJz0gkdHCW9iZKxVg2m+lKp1LHejyOeCwG + XY8LU0LXqcku7DYrzCYJ0+YpeD1u0ZSz5DmhtD2MClI8HoOqRqBFowiHdzAlSdja2qRGabydGEf3zU48 + evgAoWCAhmiC5R5KaWbRqKpxU3hnh4pxzM/NoutGB8bfvEYum8UEPe/dHcBgfx/ez84KhrPcQ16dbW8r + B4qyBS5Ni+LV2Avc6mjHh8UFxOgvrVpWMDczjdud1zE2OiyYOk/eQxYKBb+EgkHQE5FIGGMjw7jWdoWm + zdB96HRxSSwuzKOdaqNDzxEJhwX7y3PIAgF/zO/zgWtbUcRlXW29TLHvQJo0wGScxP3BAbS1XMIUXSZn + 6jx5EywYDJi8Hg8+eb1CwUAAL0dH0HqxCRfOn0MzqaW5iZINccMpxz3ETjNFUbpll+uEBC6P2w3fxgYk + owHPnj4hPYbR8A4bVONndY70fTMU6mX06hgZJLvNBofd/lMOu5jio5hcfM1r9XOb1crrZk3TGPP7fbxB + Ix041tfWYF1f/68443I6ZVVVz9KHx5jL5WSy28XcbrmBAGnVYjmyrKxAiF6h0O/9MTFmusBGnpyLybIw + M7csM0rBCOizWCymj8vL2vLS0gHpK61jZDbT9H6nw8ETs6iqUoMo+wGQ3ukSwrHlrAAAAABJRU5ErkJg + gg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAApRJREFUOE+l0GtIU2EYB/DHC0Ve2lDsIppZ2TQ9UwPJsCAJirDsQ/lhlHT5YFCWXbDm - Xam0vMGm4mVeppApXiDSckynNc2pa5jTbOmWqSEtA6WUwuTpOSeS5PitAz94zvs+7/+9ACLC/1hZbF3Q - A+vrohEGZ+Rh5XqvikqDj4JVpveo7J/OjFpa/gaLS1bO301XihFrFbBMs7XQaoqmRSKseB3AUeh9sWkk - QmeafQyj1hoOL6B3KhNY/Z9y4dGbg02yXiEW6Nw48l4XNmRE8+EWdFiuc3gBPZM5wNJNy6Bm8HBDbs9m - zH/lwcnr2YrFA2JjhyUJ2s1SDi9AO5ED2olcOoUcqgxHGrK07pjd7cV5qPXEgr5go9qcAqrxRHg+dnuN - K0yWw8sJOXR/LIJS/bGGjK5teO/FTs7dLm86SYixbSwNnr1Ppk0U/ICp+VHoMJdAu0UGxQOR9SmaHZje - KeKkaXzoJPuHWkzp8GT0Pnz/OccPmJ57a9dqyvOsNlwNzNYeVce37Uapyo9zRyXCDE3omNIQG1g3JPWd - //HFhvcGzcMPLqaqw5cTVGF4szUI4576r3KjRYyJqgMobQvF5uEsMS/g84JFUK1PSoiu3Y4xjQF4qZFZ - JYb+z9ftwnT1ybK5XzP2vIDBdzrQjjeDwpAUH1UlQokyACXVzB9KBqOUfpjReaaksi8ZWjRN/DcA+ty2 - COFCrARS6y/HRZYHYkQRgxGFDJ5QiPFKzalCybXjsMldyLbyA+wAbGjcnjg4OzjZ7pMwqYfygzBcFowh - 5/aUCgQb2TlHsp7t5V2BBu2IK/GjpGBq9HXxEJx29RaepdqfxvbSHEO82N61AoAm7MkG4mRLaCGVYEu1 - IxXOxIGs+/cEvwG4WS+MPfOKlQAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAAChklE + QVQ4T6XOaUjTcRjA8ceDIo82FDtEMyubppsaSIYFSVCEHS/KF6Ok44VBWXZgzVuptLxgU/GYxxQyxQMi + Lcd0WtM2dQ1zmi11mRrSMlBKKUyenv0MQ/6+6w8fePgd3/8PEPG/rAyWeT3zbcEI/dOysDK9V3mFwUdu + Var3qOidyohcXPoOC4sWhhMYslQyppkaaDFF0SUBlr8JYOR6X2wcitCZZp7AsKWa4QS0kxlM7+ccePz2 + YKNUy8d8nRsj07pYI0Pqj7eh3XyD4QS6J7IZ3ZQUqvsP1+d0b8a81x5MbvdWLOoTGdvNidA2JmE4Ac14 + NsmhV8ig0nCkPlPjjlldXswjjSfm9wQbVWPJoBxNgBcjd7gB7UQZvBqXQdenQijRH6tP79yG91/uZO51 + etNLQoytI6nw/EMS/UTODUzODUP7WDG0maVQ1HeyLlm9A9M6BEyq2odesn+g2ZQGT4cfwI9fs9zA1Ow7 + uxZTrmeV4VpgluaoKq51N0qUfsxdpQDT1aEjCkNMYO2AxHfu51cbTqBp8OGlFFX4UrwyDG+1BGHsM/9V + bjaLMEF5ACWtodg0mCniBL7Mm3lV+sT4qJrtGN0QgJcbhKtEkwu1uzBNdap09ve0PSfQ/14HmtEmkBsS + 4yIrBShWBKC4SrhMIcRIhR+md5wtruhJgmZ148q9fwN9blv4cDFGDCl1V2JPlgViRKEQIwqEeEIuwqvV + pwvE14/DJnc+O8sJ2AHY0Lo9cXB2cLLdJxamHMoLwnBpMIac31PC42207jmS9dazawXsiCvxo1IwHfR1 + 8eCdcfXmn6PZn9b20p6QeFnPrhWwsicbiJMtWV4CW5odaXAmDmQd+fsChD+4WS+MAxa1eQAAAABJRU5E + rkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAo1JREFUOE+lkW1IU1EYx5+lbi0jKk2EDKlMJ5eZEFlRyKBUwg/lB3sBSYllRC218K3A - ptvSSpfMtKRIU0vzSviCuU0xnXozKVNn06lzTklJ+yDCwA+yp7ObDeUaBB34cd7+53cezgFEhP/BdXje - PgqfZ19C3/diMM2/hqlFLbSMx117Z4rK+PbjBb/blgXvx2XQbcsHx5pLNxSYf9LQO3M/rvzrMXtZ/2FH - m0WWzszk/Jugf/Y5dE7J4572Uajp9SZ4YUmfCBtHE+S6iaS/V7BgH4OBuUrQjafFF30KwYIeX1QzfiwF - jC8RUVhtjM1hph+vezPXZMFu3tw2qZKqmYOY1+WHD7v91/GArOX3UNgwmqR0OFZ4fx7eJWi1qC7n94Sh - /MNuVHTuRVXnflSu8nu8D7M79qDKIEL9hCKEI5he/CJsMt8JrRxMiFR/lBiy2gOILIjlXvsBzO06ZK0Y - uBRJm26GLy7PenAEc0tD0G5VQ6tFA4XM2ZrUlgDM0AWzpGuDUNFxfLBhJBv0ljxYXllyVe4aGKxVoDUX - g36sFPI6ztA3GgIxqYlikTUG413dCSNtVABtzAHGVssVaCefQfNYCTSbSiFbH0NLa0V4tU7McoWm8HZT - uPFNvwqqh5TwdkTJFUgzz0EBnQlaSwWk1sfQsWUivPhKzHK+nMLEGiIYegS5dclwJELMFQBpAgEf0tTX - IaX+Ql2URoTRxWKW00UUxledHE59kgjCLQJnlCtwA+DxANw3Ac/jVObRWklRKEoKV9GEYoQqbJjv5i4g - GYEzy/kFsuhG8CKBQOFWvsQnZGeyN7XdSYqPeMetbbs8o8leMMn4O7MbCYBsuBOEJOhBqiTdOpwXeBL4 - ayv4Ba5+NdG8cgGAAAAAAElFTkSuQmCC + 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 - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T6XSS0sCYRQG4BEXERG46UI3yCRNnZmw/AGZFUagJO2rZSFEJi6MFtFNhAxBBSlokW7NQIlIKLvJ + FyJtBKEoqKCCfsPpO2pD1repFs9wfM87x81wAPAvzBDt3QxYdvOibzcv+KI3pjFWBzFDtJPrfQyTRgiT + BtjOia+sDmKGKER0xa2rJkB0vmd1EDNEgWxvwXfRCiiQFe9YHSQNQWLqC5FhW5AMWUPXFqv/yvi0lukA + tHnZ/xImo9YgGaZGbOHrEWPVAe+5oXk100PL+goeVk41sHyiKsEZs8/9akYL62f6FunAUlrftZhWw0+a + L6p3nuNulXTAc2Rsc6Z0MJ/USpypalW7pA7ch2K7dADNHRjsjoTgohbQbJx/m4nrAdH53bFPc5TgXbQ7 + ESU7pfekA99NxYTCZIyHMuGW1UHMENkjQnE8wkOZ8PvvwOwXHwb9PCCzX3hmdRAn50oUVCeloXgZx6m1 + U8oNg7sni3TTSi9muKt0sKsoHcAH/SGnaqhaqo6qp3dl0r8AJ8OsssMOduXSgb8D7gMxXmeO6KXG2gAA + AABJRU5ErkJggg== - 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 - bf5cAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACf0lE + QVQ4T6WPW0jTURzHf6lvtcQwc+aFRTm6ECYRJpbSQ/rgQ/gQhkYICgVq6sMisBCEIoUyCwokwpcoSYjw + IcIuoJWWOufcppvOXTDnnFu6Tf3f9u38TbeR9VIHPufy4/f9nHMIwH+xPkkB+1+wEUJemu9pVusvqzQL + 3XVKb+9tWh7uJP/Y8yhB0PlHQryHAub+pNHKTIOxIgH26+pv7q6rhwPjXRQ0dUcEIf7HVoQAW7/Hantf + vB2sLcBkhQIz1YkYr9rrczytyXW9bo4IILh+w00QvSSaS1sXjVdgs07AfLcSulIFBksS8KVMXT9cnRsl + WLVEMUXg50i0aap4Qx5ESyF4UxHcczoMtN3Ap0vHTEGHNjkkLEYJOEcE0UfSbFs+N5bNCdZycCMHIEyc + g+CshVn/zDc7qT0kBF20tuSMEkj+X0CkkH8whdMdtwrWi+C0avCGQgj2GojzjUDwwwVhbZn44AJJq94o + QdBEWLFQaHlIwetP9wnT58FeAF6fD8FSBmGmHNJSNzNwrF8GtLriiQgkj4mkRQvx9r5iztTEbj0BbjSb + Pb0EnC4LovPaS3b9eq/H7aCmmxpKS1VGBFhxkehjf3IONPGWj+Cn2sEbi7H2eQckwykd4Enw+33U2nKL + lMl7aHOEBU8etdOUcZTevep8E7S8B3yzwFI/YCtyB9w9B++03CNVRtpGjCh2g7AgJiaGGjUN2xvq6+Y6 + Ox7Cax1yj3wdeNDR8Xhf1tEj6yF5bAa3COTzrvideWfPFEzn5uTcT09NPclqSoaKoWbNmYz9DBUjjZHI + iAsL5INcjNtGu1lAIYdjiNJZLWMDeS8HUxhJjHhGbFjw74B+AsJFYFrRskcjAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAZlJREFUOE9j+P//PwMlGKfmJRcdPRec1+9ecF6ve+lFJx9cluA0YO5Zg8fTT4n9n35K - 9P+cs/ovSTZg2intmxOOi/8HYSD7PskGTDphcK37qPR/EJ50Qv8uQQOmnnIynnbKLWDqKVf/aac9/fuP - mz5pOyT3H4T7jpm8mH7Ky3/qKTcgdg+YftrdFGYgOAw6jxhJtB7SBCrWgWLd/y0HNf43HVABYxC77ZAu - XL71kNb/9sM6UiC9YAPq9uoo1+xV/4+JNYBiMIwqX71HTQVuQPUuU5nibdr/i7ZqwXHxNq3/yBhFbqv2 - //Id+rJwA0CMgk1Gwbkb9UqBuASEs9frvspar/MfhIHst7kbgOIgvFG3FKg2dOmpuWDX40wHicv0riUs - 0/0PwXp3CMYCuoLgWXo3g2bp/odgPdLTgUu//gPnft3/IOzSr/cUpwuYGRgYgFgAiBWBWAOIdRkZGNS1 - EpU6jMo1T4CwdpJSJ0gMJAdVA1IrAA8DIIcZiNmBmBOIuYGYF2guIyKxMDCCxKByIDUgtcx4A5HYLA4A - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T6XSS0sCYRQG4BEXERG46UI3yCRNnZmw/AGZFUagJO2rZSFEJi6MFtFNhAxBBSlokW7NQIlIKLvJ + FyJtBKEoqKCCfsPpO2pD1repFs9wfM87x81wAPAvzBDt3QxYdvOibzcv+KI3pjFWBzFDtJPrfQyTRgiT + BtjOia+sDmKGKER0xa2rJkB0vmd1EDNEgWxvwXfRCiiQFe9YHSQNQWLqC5FhW5AMWUPXFqv/yvi0lukA + tHnZ/xImo9YgGaZGbOHrEWPVAe+5oXk100PL+goeVk41sHyiKsEZs8/9akYL62f6FunAUlrftZhWw0+a + L6p3nuNulXTAc2Rsc6Z0MJ/USpypalW7pA7ch2K7dADNHRjsjoTgohbQbJx/m4nrAdH53bFPc5TgXbQ7 + ESU7pfekA99NxYTCZIyHMuGW1UHMENkjQnE8wkOZ8PvvwOwXHwb9PCCzX3hmdRAn50oUVCeloXgZx6m1 + U8oNg7sni3TTSi9muKt0sKsoHcAH/SGnaqhaqo6qp3dl0r8AJ8OsssMOduXSgb8D7gMxXmeO6KXG2gAA + AABJRU5ErkJggg== - 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 - bf5cAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACf0lE + QVQ4T6WPW0jTURzHf6lvtcQwc+aFRTm6ECYRJpbSQ/rgQ/gQhkYICgVq6sMisBCEIoUyCwokwpcoSYjw + IcIuoJWWOufcppvOXTDnnFu6Tf3f9u38TbeR9VIHPufy4/f9nHMIwH+xPkkB+1+wEUJemu9pVusvqzQL + 3XVKb+9tWh7uJP/Y8yhB0PlHQryHAub+pNHKTIOxIgH26+pv7q6rhwPjXRQ0dUcEIf7HVoQAW7/Hantf + vB2sLcBkhQIz1YkYr9rrczytyXW9bo4IILh+w00QvSSaS1sXjVdgs07AfLcSulIFBksS8KVMXT9cnRsl + WLVEMUXg50i0aap4Qx5ESyF4UxHcczoMtN3Ap0vHTEGHNjkkLEYJOEcE0UfSbFs+N5bNCdZycCMHIEyc + g+CshVn/zDc7qT0kBF20tuSMEkj+X0CkkH8whdMdtwrWi+C0avCGQgj2GojzjUDwwwVhbZn44AJJq94o + QdBEWLFQaHlIwetP9wnT58FeAF6fD8FSBmGmHNJSNzNwrF8GtLriiQgkj4mkRQvx9r5iztTEbj0BbjSb + Pb0EnC4LovPaS3b9eq/H7aCmmxpKS1VGBFhxkehjf3IONPGWj+Cn2sEbi7H2eQckwykd4Enw+33U2nKL + lMl7aHOEBU8etdOUcZTevep8E7S8B3yzwFI/YCtyB9w9B++03CNVRtpGjCh2g7AgJiaGGjUN2xvq6+Y6 + Ox7Cax1yj3wdeNDR8Xhf1tEj6yF5bAa3COTzrvideWfPFEzn5uTcT09NPclqSoaKoWbNmYz9DBUjjZHI + iAsL5INcjNtGu1lAIYdjiNJZLWMDeS8HUxhJjHhGbFjw74B+AsJFYFrRskcjAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAZlJREFUOE9j+P//PwMlGKfmJRcdPRec1+9ecF6ve+lFJx9cluA0YO5Zg8fTT4n9n35K - 9P+cs/ovSTZg2intmxOOi/8HYSD7PskGTDphcK37qPR/EJ50Qv8uQQOmnnIynnbKLWDqKVf/aac9/fuP - mz5pOyT3H4T7jpm8mH7Ky3/qKTcgdg+YftrdFGYgOAw6jxhJtB7SBCrWgWLd/y0HNf43HVABYxC77ZAu - XL71kNb/9sM6UiC9YAPq9uoo1+xV/4+JNYBiMIwqX71HTQVuQPUuU5nibdr/i7ZqwXHxNq3/yBhFbqv2 - //Id+rJwA0CMgk1Gwbkb9UqBuASEs9frvspar/MfhIHst7kbgOIgvFG3FKg2dOmpuWDX40wHicv0riUs - 0/0PwXp3CMYCuoLgWXo3g2bp/odgPdLTgUu//gPnft3/IOzSr/cUpwuYGRgYgFgAiBWBWAOIdRkZGNS1 - EpU6jMo1T4CwdpJSJ0gMJAdVA1IrAA8DIIcZiNmBmBOIuYGYF2guIyKxMDCCxKByIDUgtcx4A5HYLA4A - MV5njhcGgLEAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABnElE + QVQ4T6XSS0sCYRQG4BEXERG46UI3yCRNnZmw/AGZFUagJO2rZSFEJi6MFtFNhAxBBSlokW7NQIlIKLvJ + FyJtBKEoqKCCfsPpO2pD1repFs9wfM87x81wAPAvzBDt3QxYdvOibzcv+KI3pjFWBzFDtJPrfQyTRgiT + BtjOia+sDmKGKER0xa2rJkB0vmd1EDNEgWxvwXfRCiiQFe9YHSQNQWLqC5FhW5AMWUPXFqv/yvi0lukA + tHnZ/xImo9YgGaZGbOHrEWPVAe+5oXk100PL+goeVk41sHyiKsEZs8/9akYL62f6FunAUlrftZhWw0+a + L6p3nuNulXTAc2Rsc6Z0MJ/USpypalW7pA7ch2K7dADNHRjsjoTgohbQbJx/m4nrAdH53bFPc5TgXbQ7 + ESU7pfekA99NxYTCZIyHMuGW1UHMENkjQnE8wkOZ8PvvwOwXHwb9PCCzX3hmdRAn50oUVCeloXgZx6m1 + U8oNg7sni3TTSi9muKt0sKsoHcAH/SGnaqhaqo6qp3dl0r8AJ8OsssMOduXSgb8D7gMxXmeO6KXG2gAA + AABJRU5ErkJggg== @@ -1346,20 +1331,20 @@ - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAZxJREFUOE9j+P//PwMlGKdm4a6zeoJdZ5IEu8+kC3WdtcVlCYYB0tPvsfK1n17F0Xzi - P0vDsf8s9Uf/szcd/8/TfvqsSNd5KXSDMAzgaTwyh6X64H+Gsr3/GSv23WSs2H+IoXzvf6bKA/+5Go4c - STyD6mUUA4SqdguwF2//z5y3+T9r/patMNtYC7b2Mudt+c9WtO0/X8UuFFegGCBYuJmHLX3VM7a0lf85 - 01bowAxgT1s5Cyj+Hyj+jyt7rTCyNzC8wBUzV4QrYaEmTBFH7LxWjrgF/zni5v/njJs/mWAYICvgCp0y - mSts2n/u0Cn/ucKmLscWEzijkc+3W5vXt+c/r2/3f16/7tlERyNMIZ9zQyC/S8N/EJa0KGAn2QBB53o+ - IbvKtYJ2lRX4UipOL4jqZ8iKGmbtEjHIWi5ikMlDsgtE9TOLRPXS/ovqpf8XN8xxJMoAZgYGYSBWZmJg - UOUS0fUS1oy9IawRdZKNW8IUKK4BxCpALAbEcJejeAEowQ7EfEAsBFTDC8QcQMwOxAIgMSDmB2IOnAaQ - k60BK0Rr5wDzb+4AAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABrElE + QVQ4T6XOyS8DYRjH8dFtxminpjNjjROSCrocJC4kwklSiQMH0QaHlhKqEloOLSKSlpMtsTvRJk62hNSW + 2qKNKxdHf4bH+x5GTPs6iMMnmefbXydDAcC/ECMmRNIWPpLq46MpjymSbiBtsKxQuvau5eaf48zsI2jC + 96AJ3QE98wD6+ee0GHkpydwrDkw/ndzUTN0ANZ6AnMDlW07g6paaSIAqeA1sOJnsTSn3isM0eZFPj52B + evgItCPHJ3LX+k4W1cPHoPOfAhc4V3zF9wPGjx7pdZ74h84dg1z3QY3caXdsHXVA/ZMdPBR+/uf7QcZ2 + b4lsz16VfDPO7TnGtQuMawdyXTtLP7eY4sjEdiwvsZ2rkNexDGznyj5pkxVknCNabXAsgMERBUNbdIO0 + wYgR45rD7caWMGDF9T6atMGIEeObQ5ypMXjINwYDpN9lxIhJ1v4yye49F23efdE2oCdtMGLEJOuAX7K4 + QbJ4oNA+1ETaYIpDTVECUq6iqEpWrG0VqpyvgrnrSZdXVIe6GalACpBfX0AjHGJCGwPCIDSSjxtiRBiE + /IK/A+oLK0Rr5wubW8gAAAAASUVORK5CYII= - 53 + 25 diff --git a/Ember Media Manager/dlgSettings.vb b/Ember Media Manager/dlgSettings.vb deleted file mode 100644 index c3682a9..0000000 --- a/Ember Media Manager/dlgSettings.vb +++ /dev/null @@ -1,4603 +0,0 @@ -' ################################################################################ -' # EMBER MEDIA MANAGER # -' ################################################################################ -' ################################################################################ -' # This file is part of Ember Media Manager. # -' # # -' # Ember Media Manager is free software: you can redistribute it and/or modify # -' # it under the terms of the GNU General Public License as published by # -' # the Free Software Foundation, either version 3 of the License, or # -' # (at your option) any later version. # -' # # -' # Ember Media Manager is distributed in the hope that it will be useful, # -' # but WITHOUT ANY WARRANTY; without even the implied warranty of # -' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # -' # GNU General Public License for more details. # -' # # -' # You should have received a copy of the GNU General Public License # -' # along with Ember Media Manager. If not, see . # -' ################################################################################ -' # -' # Dialog size: 898, 656 -' # Enlarge it to see all the panels. - -Imports System -Imports System.IO -Imports EmberAPI -Imports System.Net - -Public Class dlgSettings - -#Region "Fields" - - Private currPanel As New Panel - Private currText As String = String.Empty - Private dHelp As New Dictionary(Of String, String) - Private didApply As Boolean = False - Private Meta As New List(Of Settings.MetadataPerType) - Private NoUpdate As Boolean = True - Private SettingsPanels As New List(Of Containers.SettingsPanel) - Private ShowRegex As New List(Of Settings.TVShowRegEx) - Private sResult As New Structures.SettingsResult - Private tLangList As New List(Of Containers.TVLanguage) - Private TVMeta As New List(Of Settings.MetadataPerType) - Public Event LoadEnd() - -#End Region 'Fields - -#Region "Methods" - - Public Overloads Function ShowDialog() As Structures.SettingsResult - MyBase.ShowDialog() - Return Me.sResult - End Function - - Private Sub AddButtons() - Dim TSBs As New List(Of ToolStripButton) - Dim TSB As ToolStripButton - Dim ButtonsWidth As Integer = 0 - - Me.ToolStrip1.Items.Clear() - - 'first create all the buttons so we can get their size to calculate the spacer - TSB = New ToolStripButton With { _ - .Text = Master.eLang.GetString(390, "Options"), _ - .Image = My.Resources.General, _ - .TextImageRelation = TextImageRelation.ImageAboveText, _ - .DisplayStyle = ToolStripItemDisplayStyle.ImageAndText, _ - .Tag = 100} - AddHandler TSB.Click, AddressOf ToolStripButton_Click - TSBs.Add(TSB) - TSB = New ToolStripButton With { _ - .Text = Master.eLang.GetString(36, "Movies"), _ - .Image = My.Resources.Movie, _ - .TextImageRelation = TextImageRelation.ImageAboveText, _ - .DisplayStyle = ToolStripItemDisplayStyle.ImageAndText, _ - .Tag = 200} - AddHandler TSB.Click, AddressOf ToolStripButton_Click - TSBs.Add(TSB) - TSB = New ToolStripButton With { _ - .Text = Master.eLang.GetString(698, "TV Shows"), _ - .Image = My.Resources.TVShows, _ - .TextImageRelation = TextImageRelation.ImageAboveText, _ - .DisplayStyle = ToolStripItemDisplayStyle.ImageAndText, _ - .Tag = 300} - AddHandler TSB.Click, AddressOf ToolStripButton_Click - TSBs.Add(TSB) - TSB = New ToolStripButton With { _ - .Text = Master.eLang.GetString(802, "Modules"), _ - .Image = My.Resources.modules, _ - .TextImageRelation = TextImageRelation.ImageAboveText, _ - .DisplayStyle = ToolStripItemDisplayStyle.ImageAndText, _ - .Tag = 400} - AddHandler TSB.Click, AddressOf ToolStripButton_Click - TSBs.Add(TSB) - - TSB = New ToolStripButton With { _ - .Text = Master.eLang.GetString(822, "Miscellaneous"), _ - .Image = My.Resources.Miscellaneous, _ - .TextImageRelation = TextImageRelation.ImageAboveText, _ - .DisplayStyle = ToolStripItemDisplayStyle.ImageAndText, _ - .Tag = 400} - AddHandler TSB.Click, AddressOf ToolStripButton_Click - TSBs.Add(TSB) - - If TSBs.Count > 0 Then - Dim spacerMod As Integer = 4 - - 'calculate the spacer width - For Each tsbWidth As ToolStripButton In TSBs - ButtonsWidth += tsbWidth.Width - Next - - Using g As Graphics = Me.CreateGraphics - spacerMod = Convert.ToInt32(4 * (g.DpiX / 100)) - End Using - - Dim sSpacer As String = New String(Convert.ToChar(" "), Convert.ToInt32(((Me.ToolStrip1.Width - ButtonsWidth) / (TSBs.Count + 1)) / spacerMod)) - - 'add it all - For Each tButton As ToolStripButton In TSBs.OrderBy(Function(b) Convert.ToInt32(b.Tag)) - If sSpacer.Length > 0 Then Me.ToolStrip1.Items.Add(New ToolStripLabel With {.Text = sSpacer}) - Me.ToolStrip1.Items.Add(tButton) - Next - - 'set default page - Me.currText = TSBs.Item(0).Text - Me.FillList(currText) - End If - End Sub - - Private Sub AddHelpHandlers(ByVal Parent As Control, ByVal Prefix As String) - Dim pfName As String = String.Empty - - For Each ctrl As Control In Parent.Controls - If Not TypeOf ctrl Is GroupBox AndAlso Not TypeOf ctrl Is Panel AndAlso Not TypeOf ctrl Is Label AndAlso _ - Not TypeOf ctrl Is TreeView AndAlso Not TypeOf ctrl Is ToolStrip AndAlso Not TypeOf ctrl Is PictureBox AndAlso _ - Not TypeOf ctrl Is TabControl Then - pfName = String.Concat(Prefix, ctrl.Name) - ctrl.AccessibleDescription = pfName - If dHelp.ContainsKey(pfName) Then - dHelp.Item(pfName) = Master.eLang.GetHelpString(pfName) - Else - AddHandler ctrl.MouseEnter, AddressOf HelpMouseEnter - AddHandler ctrl.MouseLeave, AddressOf HelpMouseLeave - dHelp.Add(pfName, Master.eLang.GetHelpString(pfName)) - End If - End If - If ctrl.HasChildren Then - AddHelpHandlers(ctrl, Prefix) - End If - Next - End Sub - - Private Sub AddPanels() - Me.SettingsPanels.Clear() - - Me.SettingsPanels.Add(New Containers.SettingsPanel With { _ - .Name = "pnlMovies", _ - .Text = Master.eLang.GetString(38, "General"), _ - .ImageIndex = 2, _ - .Type = Master.eLang.GetString(36, "Movies"), _ - .Panel = Me.pnlMovies, _ - .Order = 100}) - Me.SettingsPanels.Add(New Containers.SettingsPanel With { _ - .Name = "pnlSources", _ - .Text = Master.eLang.GetString(555, "Files and Sources"), _ - .ImageIndex = 5, _ - .Type = Master.eLang.GetString(36, "Movies"), _ - .Panel = Me.pnlSources, _ - .Order = 200}) - Me.SettingsPanels.Add(New Containers.SettingsPanel With { _ - .Name = "pnlMovieData", _ - .Text = Master.eLang.GetString(556, "Scrapers - Data"), _ - .ImageIndex = 3, _ - .Type = Master.eLang.GetString(36, "Movies"), _ - .Panel = Me.pnlScraper, _ - .Order = 300}) - Me.SettingsPanels.Add(New Containers.SettingsPanel With { _ - .Name = "pnlMovieMedia", _ - .Text = Master.eLang.GetString(557, "Scrapers - Images & Trailers"), _ - .ImageIndex = 6, _ - .Type = Master.eLang.GetString(36, "Movies"), _ - .Panel = Me.pnlImages, _ - .Order = 400}) - Me.SettingsPanels.Add(New Containers.SettingsPanel With { _ - .Name = "pnlShows", _ - .Text = Master.eLang.GetString(38, "General"), _ - .ImageIndex = 7, _ - .Type = Master.eLang.GetString(698, "TV Shows"), _ - .Panel = Me.pnlShows, _ - .Order = 100}) - Me.SettingsPanels.Add(New Containers.SettingsPanel With { _ - .Name = "pnlTVSources", _ - .Text = Master.eLang.GetString(555, "Files and Sources"), _ - .ImageIndex = 5, _ - .Type = Master.eLang.GetString(698, "TV Shows"), _ - .Panel = Me.pnlTVSources, _ - .Order = 200}) - Me.SettingsPanels.Add(New Containers.SettingsPanel With { _ - .Name = "pnlTVData", _ - .Text = Master.eLang.GetString(556, "Scrapers - Data"), _ - .ImageIndex = 3, _ - .Type = Master.eLang.GetString(698, "TV Shows"), _ - .Panel = Me.pnlTVScraper, _ - .Order = 300}) - Me.SettingsPanels.Add(New Containers.SettingsPanel With { _ - .Name = "pnlTVMedia", _ - .Text = Master.eLang.GetString(837, "Scrapers - Images"), _ - .ImageIndex = 6, _ - .Type = Master.eLang.GetString(698, "TV Shows"), _ - .Panel = Me.pnlTVImages, _ - .Order = 400}) - Me.SettingsPanels.Add(New Containers.SettingsPanel With { _ - .Name = "pnlGeneral", _ - .Text = Master.eLang.GetString(38, "General"), _ - .ImageIndex = 0, _ - .Type = Master.eLang.GetString(390, "Options"), _ - .Panel = Me.pnlGeneral, _ - .Order = 100}) - Me.SettingsPanels.Add(New Containers.SettingsPanel With { _ - .Name = "pnlExtensions", _ - .Text = Master.eLang.GetString(553, "File System"), _ - .ImageIndex = 4, _ - .Type = Master.eLang.GetString(390, "Options"), _ - .Panel = Me.pnlExtensions, _ - .Order = 200}) - Me.SettingsPanels.Add(New Containers.SettingsPanel With { _ - .Name = "pnlXBMCCom", _ - .Text = Master.eLang.GetString(421, "Connection"), _ - .ImageIndex = 1, _ - .Type = Master.eLang.GetString(390, "Options"), _ - .Panel = Me.pnlXBMCCom, _ - .Order = 300}) - AddScraperPanels() - End Sub - - Sub AddScraperPanels() - Dim ModuleCounter As Integer = 1 - Dim tPanel As New Containers.SettingsPanel - For Each s As ModulesManager._externalScraperModuleClass In ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).OrderBy(Function(x) x.ScraperOrder) - tPanel = s.ProcessorModule.InjectSetupScraper - tPanel.Order += ModuleCounter - Me.SettingsPanels.Add(tPanel) - ModuleCounter += 1 - AddHandler s.ProcessorModule.ScraperSetupChanged, AddressOf Handle_ModuleSetupChanged - AddHandler s.ProcessorModule.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged - Me.AddHelpHandlers(tPanel.Panel, tPanel.Prefix) - Next - ModuleCounter = 1 - For Each s As ModulesManager._externalScraperModuleClass In ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).OrderBy(Function(x) x.PostScraperOrder) - tPanel = s.ProcessorModule.InjectSetupPostScraper - tPanel.Order += ModuleCounter - Me.SettingsPanels.Add(tPanel) - ModuleCounter += 1 - AddHandler s.ProcessorModule.PostScraperSetupChanged, AddressOf Handle_ModuleSetupChanged - AddHandler s.ProcessorModule.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged - Me.AddHelpHandlers(tPanel.Panel, tPanel.Prefix) - Next - ModuleCounter = 1 - For Each s As ModulesManager._externalTVScraperModuleClass In ModulesManager.Instance.externalTVScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).OrderBy(Function(x) x.ScraperOrder) - tPanel = s.ProcessorModule.InjectSetupScraper - tPanel.Order += ModuleCounter - Me.SettingsPanels.Add(tPanel) - ModuleCounter += 1 - AddHandler s.ProcessorModule.SetupScraperChanged, AddressOf Handle_ModuleSetupChanged - AddHandler s.ProcessorModule.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged - Me.AddHelpHandlers(tPanel.Panel, tPanel.Prefix) - Next - ModuleCounter = 1 - For Each s As ModulesManager._externalTVScraperModuleClass In ModulesManager.Instance.externalTVScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).OrderBy(Function(x) x.PostScraperOrder) - tPanel = s.ProcessorModule.InjectSetupPostScraper - tPanel.Order += ModuleCounter - Me.SettingsPanels.Add(tPanel) - ModuleCounter += 1 - AddHandler s.ProcessorModule.SetupPostScraperChanged, AddressOf Handle_ModuleSetupChanged - AddHandler s.ProcessorModule.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged - Me.AddHelpHandlers(tPanel.Panel, tPanel.Prefix) - Next - ModuleCounter = 1 - For Each s As ModulesManager._externalGenericModuleClass In ModulesManager.Instance.externalProcessorModules - tPanel = s.ProcessorModule.InjectSetup - If Not tPanel Is Nothing Then - tPanel.Order += ModuleCounter - If tPanel.ImageIndex = -1 AndAlso Not tPanel.Image Is Nothing Then - ilSettings.Images.Add(String.Concat(s.AssemblyName, tPanel.Name), tPanel.Image) - tPanel.ImageIndex = ilSettings.Images.IndexOfKey(String.Concat(s.AssemblyName, tPanel.Name)) - End If - Me.SettingsPanels.Add(tPanel) - ModuleCounter += 1 - AddHandler s.ProcessorModule.ModuleSetupChanged, AddressOf Handle_ModuleSetupChanged - AddHandler s.ProcessorModule.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged - Me.AddHelpHandlers(tPanel.Panel, tPanel.Prefix) - End If - Next - End Sub - - Sub RemoveScraperPanels() - For Each s As ModulesManager._externalScraperModuleClass In ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsScraper).OrderBy(Function(x) x.ScraperOrder) - RemoveHandler s.ProcessorModule.ScraperSetupChanged, AddressOf Handle_ModuleSetupChanged - RemoveHandler s.ProcessorModule.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged - Next - For Each s As ModulesManager._externalScraperModuleClass In ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).OrderBy(Function(x) x.PostScraperOrder) - RemoveHandler s.ProcessorModule.PostScraperSetupChanged, AddressOf Handle_ModuleSetupChanged - RemoveHandler s.ProcessorModule.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged - Next - For Each s As ModulesManager._externalTVScraperModuleClass In ModulesManager.Instance.externalTVScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).OrderBy(Function(x) x.ScraperOrder) - RemoveHandler s.ProcessorModule.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged - Next - For Each s As ModulesManager._externalTVScraperModuleClass In ModulesManager.Instance.externalTVScrapersModules.Where(Function(y) y.ProcessorModule.IsPostScraper).OrderBy(Function(x) x.PostScraperOrder) - RemoveHandler s.ProcessorModule.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged - Next - For Each s As ModulesManager._externalGenericModuleClass In ModulesManager.Instance.externalProcessorModules - RemoveHandler s.ProcessorModule.ModuleSetupChanged, AddressOf Handle_ModuleSetupChanged - RemoveHandler s.ProcessorModule.ModuleSettingsChanged, AddressOf Handle_ModuleSettingsChanged - Next - End Sub - - Private Sub btnAddEpFilter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddEpFilter.Click - If Not String.IsNullOrEmpty(Me.txtEpFilter.Text) Then - Me.lstEpFilters.Items.Add(Me.txtEpFilter.Text) - Me.txtEpFilter.Text = String.Empty - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - End If - - Me.txtEpFilter.Focus() - End Sub - - Private Sub btnAddFilter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddFilter.Click - If Not String.IsNullOrEmpty(Me.txtFilter.Text) Then - Me.lstFilters.Items.Add(Me.txtFilter.Text) - Me.txtFilter.Text = String.Empty - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - End If - - Me.txtFilter.Focus() - End Sub - - Private Sub btnAddMovieExt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddMovieExt.Click - If Not String.IsNullOrEmpty(txtMovieExt.Text) Then - If Not Strings.Left(txtMovieExt.Text, 1) = "." Then txtMovieExt.Text = String.Concat(".", txtMovieExt.Text) - If Not lstMovieExts.Items.Contains(txtMovieExt.Text.ToLower) Then - lstMovieExts.Items.Add(txtMovieExt.Text.ToLower) - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - txtMovieExt.Text = String.Empty - txtMovieExt.Focus() - End If - End If - End Sub - - Private Sub btnAddNoStack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddNoStack.Click - If Not String.IsNullOrEmpty(txtNoStack.Text) Then - If Not Strings.Left(txtNoStack.Text, 1) = "." Then txtNoStack.Text = String.Concat(".", txtNoStack.Text) - If Not lstNoStack.Items.Contains(txtNoStack.Text) Then - lstNoStack.Items.Add(txtNoStack.Text) - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - txtNoStack.Text = String.Empty - txtNoStack.Focus() - End If - End If - End Sub - - Private Sub btnAddShowFilter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddShowFilter.Click - If Not String.IsNullOrEmpty(Me.txtShowFilter.Text) Then - Me.lstShowFilters.Items.Add(Me.txtShowFilter.Text) - Me.txtShowFilter.Text = String.Empty - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - End If - - Me.txtShowFilter.Focus() - End Sub - - Private Sub btnAddShowRegex_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddShowRegex.Click - If String.IsNullOrEmpty(Me.btnAddShowRegex.Tag.ToString) Then - Dim lID = (From lRegex As Settings.TVShowRegEx In Me.ShowRegex Select lRegex.ID).Max - Me.ShowRegex.Add(New Settings.TVShowRegEx With {.ID = Convert.ToInt32(lID) + 1, .SeasonRegex = Me.txtSeasonRegex.Text, .SeasonFromDirectory = Not Convert.ToBoolean(Me.cboSeasonRetrieve.SelectedIndex), .EpisodeRegex = Me.txtEpRegex.Text, .EpisodeRetrieve = DirectCast(Me.cboEpRetrieve.SelectedIndex, Settings.EpRetrieve)}) - Else - Dim selRex = From lRegex As Settings.TVShowRegEx In Me.ShowRegex Where lRegex.ID = Convert.ToInt32(Me.btnAddShowRegex.Tag) - If selRex.Count > 0 Then - selRex(0).SeasonRegex = Me.txtSeasonRegex.Text - selRex(0).SeasonFromDirectory = Not Convert.ToBoolean(Me.cboSeasonRetrieve.SelectedIndex) - selRex(0).EpisodeRegex = Me.txtEpRegex.Text - selRex(0).EpisodeRetrieve = DirectCast(Me.cboEpRetrieve.SelectedIndex, Settings.EpRetrieve) - End If - End If - - Me.ClearRegex() - Me.SetApplyButton(True) - Me.LoadShowRegex() - End Sub - - Private Sub btnAddToken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddToken.Click - If Not String.IsNullOrEmpty(txtSortToken.Text) Then - If Not lstSortTokens.Items.Contains(txtSortToken.Text) Then - lstSortTokens.Items.Add(txtSortToken.Text) - Me.sResult.NeedsRefresh = True - Me.SetApplyButton(True) - txtSortToken.Text = String.Empty - txtSortToken.Focus() - End If - End If - End Sub - - Private Sub btnAddTVSource_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddTVSource.Click - Using dSource As New dlgTVSource - If dSource.ShowDialog = Windows.Forms.DialogResult.OK Then - RefreshTVSources() - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - End If - End Using - End Sub - - Private Sub btnAddWhitelist_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddWhitelist.Click - If Not String.IsNullOrEmpty(Me.txtWhitelist.Text) Then - If Not Strings.Left(txtWhitelist.Text, 1) = "." Then txtWhitelist.Text = String.Concat(".", txtWhitelist.Text) - If Not lstWhitelist.Items.Contains(txtWhitelist.Text.ToLower) Then - lstWhitelist.Items.Add(txtWhitelist.Text.ToLower) - Me.SetApplyButton(True) - txtWhitelist.Text = String.Empty - txtWhitelist.Focus() - End If - End If - End Sub - - Private Sub btnApply_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnApply.Click - Try - Me.SaveSettings(True) - Me.SetApplyButton(False) - If Me.sResult.NeedsUpdate OrElse Me.sResult.NeedsRefresh Then Me.didApply = True - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click - With Me.fbdBrowse - If .ShowDialog = Windows.Forms.DialogResult.OK Then - If Not String.IsNullOrEmpty(.SelectedPath.ToString) AndAlso Directory.Exists(.SelectedPath) Then - Me.txtBDPath.Text = .SelectedPath.ToString - End If - End If - End With - End Sub - - Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click - If Not didApply Then sResult.DidCancel = True - RemoveScraperPanels() - Me.Close() - End Sub - - Private Sub btnClearRegex_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClearRegex.Click - Me.ClearRegex() - End Sub - - Private Sub btnDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDown.Click - Try - If Me.lstFilters.Items.Count > 0 AndAlso Not IsNothing(Me.lstFilters.SelectedItem) AndAlso Me.lstFilters.SelectedIndex < (Me.lstFilters.Items.Count - 1) Then - Dim iIndex As Integer = Me.lstFilters.SelectedIndices(0) - Me.lstFilters.Items.Insert(iIndex + 2, Me.lstFilters.SelectedItems(0)) - Me.lstFilters.Items.RemoveAt(iIndex) - Me.lstFilters.SelectedIndex = iIndex + 1 - Me.SetApplyButton(True) - Me.sResult.NeedsRefresh = True - Me.lstFilters.Focus() - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub btnEditMetaDataFT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditMetaDataFT.Click - Using dEditMeta As New dlgFileInfo - Dim fi As New MediaInfo.Fileinfo - For Each x As Settings.MetadataPerType In Meta - If x.FileType = lstMetaData.SelectedItems(0).ToString Then - fi = dEditMeta.ShowDialog(x.MetaData, False) - If Not fi Is Nothing Then - Meta.Remove(x) - Dim m As New Settings.MetadataPerType - m.FileType = x.FileType - m.MetaData = New MediaInfo.Fileinfo - m.MetaData = fi - Meta.Add(m) - LoadMetadata() - Me.SetApplyButton(True) - End If - Exit For - End If - Next - End Using - End Sub - - Private Sub btnEditShowRegex_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditShowRegex.Click - If Me.lvShowRegex.SelectedItems.Count > 0 Then Me.EditShowRegex(lvShowRegex.SelectedItems(0)) - End Sub - - Private Sub btnEditSource_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditSource.Click - If lvMovies.SelectedItems.Count > 0 Then - Using dMovieSource As New dlgMovieSource - If dMovieSource.ShowDialog(Convert.ToInt32(lvMovies.SelectedItems(0).Text)) = Windows.Forms.DialogResult.OK Then - Me.RefreshSources() - Me.sResult.NeedsUpdate = True - Me.SetApplyButton(True) - End If - End Using - End If - End Sub - - Private Sub btnEditTVMetaDataFT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditTVMetaDataFT.Click - Using dEditMeta As New dlgFileInfo - Dim fi As New MediaInfo.Fileinfo - For Each x As Settings.MetadataPerType In TVMeta - If x.FileType = lstTVMetaData.SelectedItems(0).ToString Then - fi = dEditMeta.ShowDialog(x.MetaData, True) - If Not fi Is Nothing Then - TVMeta.Remove(x) - Dim m As New Settings.MetadataPerType - m.FileType = x.FileType - m.MetaData = New MediaInfo.Fileinfo - m.MetaData = fi - TVMeta.Add(m) - LoadTVMetadata() - Me.SetApplyButton(True) - End If - Exit For - End If - Next - End Using - End Sub - - Private Sub btnEditTVSource_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEditTVSource.Click - If lvTVSources.SelectedItems.Count > 0 Then - Using dTVSource As New dlgTVSource - If dTVSource.ShowDialog(Convert.ToInt32(lvTVSources.SelectedItems(0).Text)) = Windows.Forms.DialogResult.OK Then - Me.RefreshTVSources() - Me.sResult.NeedsUpdate = True - Me.SetApplyButton(True) - End If - End Using - End If - End Sub - - Private Sub btnEpFilterDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEpFilterDown.Click - Try - If Me.lstEpFilters.Items.Count > 0 AndAlso Not IsNothing(Me.lstEpFilters.SelectedItem) AndAlso Me.lstEpFilters.SelectedIndex < (Me.lstEpFilters.Items.Count - 1) Then - Dim iIndex As Integer = Me.lstEpFilters.SelectedIndices(0) - Me.lstEpFilters.Items.Insert(iIndex + 2, Me.lstEpFilters.SelectedItems(0)) - Me.lstEpFilters.Items.RemoveAt(iIndex) - Me.lstEpFilters.SelectedIndex = iIndex + 1 - Me.SetApplyButton(True) - Me.sResult.NeedsRefresh = True - Me.lstEpFilters.Focus() - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub btnEpFilterUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEpFilterUp.Click - Try - If Me.lstEpFilters.Items.Count > 0 AndAlso Not IsNothing(Me.lstEpFilters.SelectedItem) AndAlso Me.lstEpFilters.SelectedIndex > 0 Then - Dim iIndex As Integer = Me.lstEpFilters.SelectedIndices(0) - Me.lstEpFilters.Items.Insert(iIndex - 1, Me.lstEpFilters.SelectedItems(0)) - Me.lstEpFilters.Items.RemoveAt(iIndex + 1) - Me.lstEpFilters.SelectedIndex = iIndex - 1 - Me.SetApplyButton(True) - Me.sResult.NeedsRefresh = True - Me.lstEpFilters.Focus() - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub btnMovieAddFolders_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMovieAddFolder.Click - Using dSource As New dlgMovieSource - If dSource.ShowDialog = Windows.Forms.DialogResult.OK Then - RefreshSources() - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - End If - End Using - End Sub - - Private Sub btnMovieRem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMovieRem.Click - Me.RemoveMovieSource() - Master.DB.LoadMovieSourcesFromDB() - End Sub - - Private Sub btnNewMetaDataFT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNewMetaDataFT.Click - If Not txtDefFIExt.Text.StartsWith(".") Then txtDefFIExt.Text = String.Concat(".", txtDefFIExt.Text) - Using dEditMeta As New dlgFileInfo - Dim fi As New MediaInfo.Fileinfo - fi = dEditMeta.ShowDialog(fi, False) - If Not fi Is Nothing Then - Dim m As New Settings.MetadataPerType - m.FileType = txtDefFIExt.Text - m.MetaData = New MediaInfo.Fileinfo - m.MetaData = fi - Meta.Add(m) - LoadMetadata() - Me.SetApplyButton(True) - Me.txtDefFIExt.Text = String.Empty - Me.txtDefFIExt.Focus() - End If - End Using - End Sub - - Private Sub btnNewTVMetaDataFT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNewTVMetaDataFT.Click - If Not txtTVDefFIExt.Text.StartsWith(".") Then txtTVDefFIExt.Text = String.Concat(".", txtTVDefFIExt.Text) - Using dEditMeta As New dlgFileInfo - Dim fi As New MediaInfo.Fileinfo - fi = dEditMeta.ShowDialog(fi, True) - If Not fi Is Nothing Then - Dim m As New Settings.MetadataPerType - m.FileType = txtTVDefFIExt.Text - m.MetaData = New MediaInfo.Fileinfo - m.MetaData = fi - TVMeta.Add(m) - LoadTVMetadata() - Me.SetApplyButton(True) - Me.txtTVDefFIExt.Text = String.Empty - Me.txtTVDefFIExt.Focus() - End If - End Using - End Sub - - Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click - NoUpdate = True - Me.SaveSettings(False) - RemoveScraperPanels() - Me.Close() - End Sub - - Private Sub btnRegexUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegexUp.Click - Try - If Me.lvShowRegex.Items.Count > 0 AndAlso Me.lvShowRegex.SelectedItems.Count > 0 AndAlso Not Me.lvShowRegex.SelectedItems(0).Index = 0 Then - Dim selItem As Settings.TVShowRegEx = Me.ShowRegex.FirstOrDefault(Function(r) r.ID = Convert.ToInt32(Me.lvShowRegex.SelectedItems(0).Text)) - - If Not IsNothing(selItem) Then - Me.lvShowRegex.SuspendLayout() - Dim iIndex As Integer = Me.ShowRegex.IndexOf(selItem) - Dim selIndex As Integer = Me.lvShowRegex.SelectedIndices(0) - Me.ShowRegex.Remove(selItem) - Me.ShowRegex.Insert(iIndex - 1, selItem) - - Me.RenumberRegex() - Me.LoadShowRegex() - - Me.lvShowRegex.Items(selIndex - 1).Selected = True - Me.lvShowRegex.ResumeLayout() - End If - - Me.SetApplyButton(True) - Me.lvShowRegex.Focus() - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub btnRegexDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegexDown.Click - Try - If Me.lvShowRegex.Items.Count > 0 AndAlso Me.lvShowRegex.SelectedItems.Count > 0 AndAlso Me.lvShowRegex.SelectedItems(0).Index < (Me.lvShowRegex.Items.Count - 1) Then - Dim selItem As Settings.TVShowRegEx = Me.ShowRegex.FirstOrDefault(Function(r) r.ID = Convert.ToInt32(Me.lvShowRegex.SelectedItems(0).Text)) - - If Not IsNothing(selItem) Then - Me.lvShowRegex.SuspendLayout() - Dim iIndex As Integer = Me.ShowRegex.IndexOf(selItem) - Dim selIndex As Integer = Me.lvShowRegex.SelectedIndices(0) - Me.ShowRegex.Remove(selItem) - Me.ShowRegex.Insert(iIndex + 1, selItem) - - Me.RenumberRegex() - Me.LoadShowRegex() - - Me.lvShowRegex.Items(selIndex + 1).Selected = True - Me.lvShowRegex.ResumeLayout() - End If - - Me.SetApplyButton(True) - Me.lvShowRegex.Focus() - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub btnResetShowFilters_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnResetShowFilters.Click - If MsgBox(Master.eLang.GetString(840, "Are you sure you want to reset to the default list of show filters?"), MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Master.eLang.GetString(104, "Are You Sure?")) = MsgBoxResult.Yes Then - Master.eSettings.SetDefaultsForLists(Enums.DefaultType.ShowFilters, True) - Me.RefreshShowFilters() - Me.SetApplyButton(True) - End If - End Sub - - Private Sub btnResetEpFilter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnResetEpFilter.Click - If MsgBox(Master.eLang.GetString(841, "Are you sure you want to reset to the default list of episode filters?"), MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Master.eLang.GetString(104, "Are You Sure?")) = MsgBoxResult.Yes Then - Master.eSettings.SetDefaultsForLists(Enums.DefaultType.EpFilters, True) - Me.RefreshEpFilters() - Me.SetApplyButton(True) - End If - End Sub - - Private Sub btnResetMovieFilters_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnResetMovieFilters.Click - If MsgBox(Master.eLang.GetString(842, "Are you sure you want to reset to the default list of movie filters?"), MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Master.eLang.GetString(104, "Are You Sure?")) = MsgBoxResult.Yes Then - Master.eSettings.SetDefaultsForLists(Enums.DefaultType.MovieFilters, True) - Me.RefreshMovieFilters() - Me.SetApplyButton(True) - End If - End Sub - - Private Sub btnResetValidExts_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnResetValidExts.Click - If MsgBox(Master.eLang.GetString(843, "Are you sure you want to reset to the default list of valid video extensions?"), MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Master.eLang.GetString(104, "Are You Sure?")) = MsgBoxResult.Yes Then - Master.eSettings.SetDefaultsForLists(Enums.DefaultType.ValidExts, True) - Me.RefreshValidExts() - Me.SetApplyButton(True) - End If - End Sub - - Private Sub btnGetTVProfiles_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetTVProfiles.Click - Using dd As New dlgTVRegExProfiles - If dd.ShowDialog() = Windows.Forms.DialogResult.OK Then - Me.ShowRegex.Clear() - Me.ShowRegex.AddRange(dd.ShowRegex) - Me.LoadShowRegex() - Me.SetApplyButton(True) - End If - End Using - End Sub - - Private Sub btnResetShowRegex_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnResetShowRegex.Click - If MsgBox(Master.eLang.GetString(844, "Are you sure you want to reset to the default list of show regex?"), MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Master.eLang.GetString(104, "Are You Sure?")) = MsgBoxResult.Yes Then - Master.eSettings.SetDefaultsForLists(Enums.DefaultType.ShowRegex, True) - Me.ShowRegex.Clear() - Me.ShowRegex.AddRange(Master.eSettings.TVShowRegexes) - Me.LoadShowRegex() - Me.SetApplyButton(True) - End If - - End Sub - - Private Sub btnRemMovieExt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemMovieExt.Click - Me.RemoveMovieExt() - End Sub - - Private Sub btnRemoveEpFilter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveEpFilter.Click - Me.RemoveEpFilter() - End Sub - - Private Sub btnRemoveFilter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveFilter.Click - Me.RemoveFilter() - End Sub - - Private Sub btnRemoveMetaDataFT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveMetaDataFT.Click - Me.RemoveMetaData() - End Sub - - Private Sub btnRemoveNoStack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveNoStack.Click - Me.RemoveNoStack() - End Sub - - Private Sub btnRemoveShowFilter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveShowFilter.Click - Me.RemoveShowFilter() - End Sub - - Private Sub btnRemoveShowRegex_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveShowRegex.Click - Me.RemoveRegex() - End Sub - - Private Sub btnRemoveToken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveToken.Click - Me.RemoveSortToken() - End Sub - - Private Sub btnRemoveTVMetaDataFT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveTVMetaDataFT.Click - Me.RemoveTVMetaData() - End Sub - - Private Sub btnRemoveWhitelist_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveWhitelist.Click - If Me.lstWhitelist.Items.Count > 0 AndAlso Me.lstWhitelist.SelectedItems.Count > 0 Then - While Me.lstWhitelist.SelectedItems.Count > 0 - lstWhitelist.Items.Remove(Me.lstWhitelist.SelectedItems(0)) - End While - Me.SetApplyButton(True) - End If - End Sub - - Private Sub btnRemTVSource_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemTVSource.Click - Me.RemoveTVSource() - Master.DB.LoadTVSourcesFromDB() - End Sub - - Private Sub btnShowFilterDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowFilterDown.Click - Try - If Me.lstShowFilters.Items.Count > 0 AndAlso Not IsNothing(Me.lstShowFilters.SelectedItem) AndAlso Me.lstShowFilters.SelectedIndex < (Me.lstShowFilters.Items.Count - 1) Then - Dim iIndex As Integer = Me.lstShowFilters.SelectedIndices(0) - Me.lstShowFilters.Items.Insert(iIndex + 2, Me.lstShowFilters.SelectedItems(0)) - Me.lstShowFilters.Items.RemoveAt(iIndex) - Me.lstShowFilters.SelectedIndex = iIndex + 1 - Me.SetApplyButton(True) - Me.sResult.NeedsRefresh = True - Me.lstShowFilters.Focus() - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub btnShowFilterUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowFilterUp.Click - Try - If Me.lstShowFilters.Items.Count > 0 AndAlso Not IsNothing(Me.lstShowFilters.SelectedItem) AndAlso Me.lstShowFilters.SelectedIndex > 0 Then - Dim iIndex As Integer = Me.lstShowFilters.SelectedIndices(0) - Me.lstShowFilters.Items.Insert(iIndex - 1, Me.lstShowFilters.SelectedItems(0)) - Me.lstShowFilters.Items.RemoveAt(iIndex + 1) - Me.lstShowFilters.SelectedIndex = iIndex - 1 - Me.SetApplyButton(True) - Me.sResult.NeedsRefresh = True - Me.lstShowFilters.Focus() - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub btnTVLanguageFetch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTVLanguageFetch.Click - Me.tLangList.Clear() - Me.tLangList.AddRange(ModulesManager.Instance.TVGetLangs(Master.eSettings.TVDBMirror)) - Me.cbTVLanguage.Items.AddRange((From lLang In tLangList Select lLang.LongLang).ToArray) - - If Me.cbTVLanguage.Items.Count > 0 Then - Me.cbTVLanguage.Text = Me.tLangList.FirstOrDefault(Function(l) l.ShortLang = Master.eSettings.TVDBLanguage).LongLang - End If - End Sub - - Private Sub btnUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUp.Click - Try - If Me.lstFilters.Items.Count > 0 AndAlso Not IsNothing(Me.lstFilters.SelectedItem) AndAlso Me.lstFilters.SelectedIndex > 0 Then - Dim iIndex As Integer = Me.lstFilters.SelectedIndices(0) - Me.lstFilters.Items.Insert(iIndex - 1, Me.lstFilters.SelectedItems(0)) - Me.lstFilters.Items.RemoveAt(iIndex + 1) - Me.lstFilters.SelectedIndex = iIndex - 1 - Me.SetApplyButton(True) - Me.sResult.NeedsRefresh = True - Me.lstFilters.Focus() - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub btnMovieFrodo_Click(sender As Object, e As EventArgs) Handles btnMovieFrodo.Click - Me.chkFanartJPG.Checked = False - Me.chkFolderJPG.Checked = False - Me.chkMovieJPG.Checked = False - Me.chkMovieNameDashPosterJPG.Checked = True - Me.chkMovieNameDotFanartJPG.Checked = False - Me.chkMovieNameFanartJPG.Checked = True - Me.chkMovieNameJPG.Checked = False - Me.chkMovieNameNFO.Checked = True - Me.chkMovieNameTBN.Checked = False - Me.chkMovieNFO.Checked = False - Me.chkMovieTBN.Checked = False - Me.chkPosterJPG.Checked = False - Me.chkPosterTBN.Checked = False - Me.rbDashTrailer.Checked = True - End Sub - - Private Sub btnTVShowFrodo_Click(sender As Object, e As EventArgs) Handles btnTVShowFrodo.Click - Me.chkEpisodeDashFanart.Checked = False - Me.chkEpisodeDashThumbJPG.Checked = True - Me.chkEpisodeDotFanart.Checked = False - Me.chkEpisodeJPG.Checked = False - Me.chkEpisodeTBN.Checked = False - Me.chkSeasonAllJPG.Checked = False - Me.chkSeasonAllPosterJPG.Checked = True - Me.chkSeasonAllTBN.Checked = False - Me.chkSeasonDashFanart.Checked = False - Me.chkSeasonDotFanart.Checked = False - Me.chkSeasonFanartJPG.Checked = False - Me.chkSeasonFolderJPG.Checked = False - Me.chkSeasonNameJPG.Checked = False - Me.chkSeasonNameTBN.Checked = False - Me.chkSeasonPosterJPG.Checked = False - Me.chkSeasonPosterTBN.Checked = False - Me.chkSeasonXTBN.Checked = False - Me.chkSeasonXXDashFanartJPG.Checked = True - Me.chkSeasonXXDashPosterJPG.Checked = True - Me.chkSeasonXXTBN.Checked = False - 'Me.chkShowBannerJPG.Checked = True (banners not implemented at time) - Me.chkShowDashFanart.Checked = False - Me.chkShowDotFanart.Checked = False - Me.chkShowFanartJPG.Checked = True - Me.chkShowFolderJPG.Checked = False - Me.chkShowJPG.Checked = False - Me.chkShowPosterJPG.Checked = True - Me.chkShowPosterTBN.Checked = False - Me.chkShowTBN.Checked = False - End Sub - - Private Sub cbAutoETSize_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbAutoETSize.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbCert_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbCert.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbFanartSize_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbFanartSize.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbForce_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbForce.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbIntLang_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbIntLang.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbLanguages_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbLanguages.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbMovieTheme_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbMovieTheme.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbOrdering_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbOrdering.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cboEpRetrieve_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboEpRetrieve.SelectedIndexChanged - Me.ValidateRegex() - End Sub - - Private Sub cboSeasonRetrieve_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboSeasonRetrieve.SelectedIndexChanged - Me.ValidateRegex() - End Sub - - Private Sub cboTVMetaDataOverlay_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboTVMetaDataOverlay.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cboTVUpdate_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboTVUpdate.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbPosterSize_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbPosterSize.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbRatingRegion_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbRatingRegion.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbSeaFanartSize_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbSeaFanartSize.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbSeaPosterSize_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbSeaPosterSize.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbShowFanartSize_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbShowFanartSize.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbTrailerQuality_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbTrailerQuality.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbTVEpTheme_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEpTheme.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbTVLanguage_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbTVLanguage.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub cbTVShowTheme_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbTVShowTheme.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chAllSPosterSize_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbAllSPosterSize.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chEpFanartSize_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEpFanartSize.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - Private Sub chkClickScrape_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkClickScrape.CheckedChanged - chkAskCheckboxScrape.Enabled = chkClickScrape.Checked - Me.SetApplyButton(True) - - End Sub - Private Sub chkAskCheckboxScrape_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkAskCheckboxScrape.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkAutoBD_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkAutoBD.CheckedChanged - Me.SetApplyButton(True) - Me.txtBDPath.Enabled = chkAutoBD.Checked - Me.btnBrowse.Enabled = chkAutoBD.Checked - - End Sub - - Private Sub chkAutoDetectVTS_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkAutoDetectVTS.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkAutoETSize_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkAutoETSize.CheckedChanged - Me.SetApplyButton(True) - Me.cbAutoETSize.Enabled = Me.chkAutoETSize.Checked - End Sub - - Private Sub chkAutoThumbs_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkAutoThumbs.CheckedChanged - Me.txtAutoThumbs.Enabled = Me.chkAutoThumbs.Checked - Me.chkNoSpoilers.Enabled = Me.chkAutoThumbs.Checked - Me.chkUseETasFA.Enabled = Me.chkAutoThumbs.Checked - If Not chkAutoThumbs.Checked Then - Me.txtAutoThumbs.Text = String.Empty - Me.chkNoSpoilers.Checked = False - Me.chkUseETasFA.Checked = False - End If - Me.SetApplyButton(True) - End Sub - - Private Sub chkCastWithImg_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCastWithImg.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCast.CheckedChanged - Me.SetApplyButton(True) - - Me.chkFullCast.Enabled = Me.chkCast.Checked - Me.chkCastWithImg.Enabled = Me.chkCast.Checked - Me.txtActorLimit.Enabled = Me.chkCast.Checked - - If Not chkCast.Checked Then - Me.chkFullCast.Checked = False - Me.chkCastWithImg.Checked = False - Me.txtActorLimit.Text = "0" - End If - End Sub - - Private Sub chkCertification_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCertification.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCert_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCert.CheckedChanged - Me.cbCert.SelectedIndex = -1 - Me.cbCert.Enabled = Me.chkCert.Checked - Me.chkUseCertForMPAA.Enabled = Me.chkCert.Checked - If Not Me.chkCert.Checked Then - Me.chkUseCertForMPAA.Checked = False - Me.chkOnlyValueForCert.Checked = False - Me.chkOnlyValueForCert.Enabled = False - End If - Me.SetApplyButton(True) - End Sub - - Private Sub chkCheckTitles_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCheckTitles.CheckedChanged - Me.SetApplyButton(True) - Me.txtCheckTitleTol.Enabled = Me.chkCheckTitles.Checked - If Not Me.chkCheckTitles.Checked Then Me.txtCheckTitleTol.Text = String.Empty - End Sub - - Private Sub chkCleanDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanDB.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanDotFanartJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanDotFanartJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanExtrathumbs_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanExtrathumbs.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanFanartJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanFanartJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanFolderJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanFolderJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanMovieFanartJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanMovieFanartJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanMovieJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanMovieJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanMovieNameJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanMovieNameJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanMovieNFOb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanMovieNFOb.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanMovieNFO_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanMovieNFO.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanMovieTBNb_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanMovieTBNb.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanMovieTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanMovieTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanPosterJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanPosterJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCleanPosterTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCleanPosterTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCrew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCrew.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkDeleteAllTrailers_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDeleteAllTrailers.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkDirector_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDirector.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkDisplayAllSeason_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDisplayAllSeason.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkDisplayMissingEpisodes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDisplayMissingEpisodes.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkDisplayYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDisplayYear.CheckedChanged - Me.sResult.NeedsRefresh = True - Me.SetApplyButton(True) - End Sub - - Private Sub chkDownloadTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDownloadTrailer.CheckedChanged - Me.SetApplyButton(True) - Me.chkUpdaterTrailer.Enabled = Me.chkDownloadTrailer.Checked - - Me.chkSingleScrapeTrailer.Enabled = Me.chkDownloadTrailer.Checked - Me.chkOverwriteTrailer.Enabled = Me.chkDownloadTrailer.Checked - Me.chkNoDLTrailer.Enabled = Me.chkDownloadTrailer.Checked - Me.chkDeleteAllTrailers.Enabled = Me.chkDownloadTrailer.Checked - - If Not Me.chkDownloadTrailer.Checked Then - Me.chkUpdaterTrailer.Checked = False - Me.chkSingleScrapeTrailer.Checked = False - Me.chkNoDLTrailer.Checked = False - Me.chkOverwriteTrailer.Checked = False - Me.chkDeleteAllTrailers.Checked = False - Me.cbTrailerQuality.Enabled = False - Me.cbTrailerQuality.SelectedIndex = -1 - Else - Me.cbTrailerQuality.Enabled = True - End If - End Sub - - Private Sub chkEnableCredentials_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEnableCredentials.CheckedChanged - Me.SetApplyButton(True) - Me.txtProxyUsername.Enabled = Me.chkEnableCredentials.Checked - Me.txtProxyPassword.Enabled = Me.chkEnableCredentials.Checked - Me.txtProxyDomain.Enabled = Me.chkEnableCredentials.Checked - - If Not Me.chkEnableCredentials.Checked Then - Me.txtProxyUsername.Text = String.Empty - Me.txtProxyPassword.Text = String.Empty - Me.txtProxyDomain.Text = String.Empty - End If - End Sub - - Private Sub chkEnableProxy_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEnableProxy.CheckedChanged - Me.SetApplyButton(True) - Me.txtProxyURI.Enabled = Me.chkEnableProxy.Checked - Me.txtProxyPort.Enabled = Me.chkEnableProxy.Checked - Me.gbCreds.Enabled = Me.chkEnableProxy.Checked - - If Not Me.chkEnableProxy.Checked Then - Me.txtProxyURI.Text = String.Empty - Me.txtProxyPort.Text = String.Empty - Me.chkEnableCredentials.Checked = False - Me.txtProxyUsername.Text = String.Empty - Me.txtProxyPassword.Text = String.Empty - Me.txtProxyDomain.Text = String.Empty - End If - End Sub - - Private Sub chkEpisodeDashFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEpisodeDashFanart.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkEpisodeDotFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEpisodeDotFanart.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkEpisodeFanartCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEpisodeFanartCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkEpisodeJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEpisodeJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkEpisodeDashThumbJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEpisodeDashThumbJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkEpisodeNfoCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEpisodeNfoCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkEpisodePosterCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEpisodePosterCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkEpisodeTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEpisodeTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkEpLockPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEpLockPlot.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkEpLockRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEpLockRating.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkEpLockTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEpLockTitle.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkEpProperCase_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEpProperCase.CheckedChanged - Me.SetApplyButton(True) - Me.sResult.NeedsRefresh = True - End Sub - - Private Sub chkETPadding_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkETPadding.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkFanartJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFanartJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkPosterOnly_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPosterOnly.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkFanartOnly_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFanartOnly.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkFolderJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFolderJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkForceTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkForceTitle.CheckedChanged - Me.cbForce.SelectedIndex = -1 - Me.cbForce.Enabled = Me.chkForceTitle.Checked - Me.SetApplyButton(True) - End Sub - - Private Sub chkFullCast_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFullCast.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkFullCrew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFullCrew.CheckedChanged - Me.SetApplyButton(True) - - Me.chkProducers.Enabled = Me.chkFullCrew.Checked - Me.chkMusicBy.Enabled = Me.chkFullCrew.Checked - Me.chkCrew.Enabled = Me.chkFullCrew.Checked - - If Not Me.chkFullCrew.Checked Then - Me.chkProducers.Checked = False - Me.chkMusicBy.Checked = False - Me.chkCrew.Checked = False - End If - End Sub - - Private Sub chkGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGenre.CheckedChanged - Me.SetApplyButton(True) - - Me.txtGenreLimit.Enabled = Me.chkGenre.Checked - - If Not Me.chkGenre.Checked Then Me.txtGenreLimit.Text = "0" - End Sub - - Private Sub chkGetEnglishImages_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkGetEnglishImages.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkIFOScan_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkIFOScan.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkIgnoreLastScan_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkIgnoreLastScan.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkInfoPanelAnim_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkInfoPanelAnim.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkLockGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLockGenre.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkLockOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLockOutline.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkLockPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLockPlot.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkLockRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLockRating.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkLockRealStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLockRealStudio.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkLockTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLockTagline.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkLockTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLockTitle.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkLockTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLockTrailer.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkLogErrors_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkLogErrors.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMarkNewEpisodes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMarkNewEpisodes.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMarkNewShows_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMarkNewShows.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMarkNew_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMarkNew.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMissingExtra_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMissingExtra.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMissingFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMissingFanart.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMissingNFO_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMissingNFO.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMissingPoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMissingPoster.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMissingSubs_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMissingSubs.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMissingTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMissingTrailer.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieExtraCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieExtraCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieFanartCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieFanartCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieInfoCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieInfoCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieNameDotFanartJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieNameDotFanartJPG.CheckedChanged - btnApply.Enabled = True - End Sub - - Private Sub chkMovieNameFanartJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieNameFanartJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieNameJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieNameJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieNameDashPosterJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieNameDashPosterJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieNameMultiOnly_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieNameMultiOnly.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieNameNFO_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieNameNFO.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieNameTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieNameTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieNFO_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieNFO.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMoviePosterCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMoviePosterCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieSubCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieSubCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMovieTrailerCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMovieTrailerCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMPAA.CheckedChanged - Me.SetApplyButton(True) - - Me.chkCert.Enabled = Me.chkMPAA.Checked - - If Not Me.chkMPAA.Checked Then - Me.chkCert.Checked = False - Me.cbCert.Enabled = False - Me.cbCert.SelectedIndex = -1 - Me.chkUseCertForMPAA.Enabled = False - Me.chkUseCertForMPAA.Checked = False - End If - End Sub - - Private Sub chkMusicBy_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkMusicBy.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkNoDisplayFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkNoDisplayFanart.CheckedChanged - Me.SetApplyButton(True) - If Me.chkNoDisplayFanart.Checked AndAlso Me.chkNoDisplayPoster.Checked Then - Me.chkShowDims.Enabled = False - Me.chkShowDims.Checked = False - Else - Me.chkShowDims.Enabled = True - End If - End Sub - - Private Sub chkNoDisplayPoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkNoDisplayPoster.CheckedChanged - Me.SetApplyButton(True) - If Me.chkNoDisplayFanart.Checked AndAlso Me.chkNoDisplayPoster.Checked Then - Me.chkShowDims.Enabled = False - Me.chkShowDims.Checked = False - Else - Me.chkShowDims.Enabled = True - End If - End Sub - - Private Sub chkNoDLTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkNoDLTrailer.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkNoFilterEpisode_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkNoFilterEpisode.CheckedChanged - Me.SetApplyButton(True) - - Me.chkEpProperCase.Enabled = Not Me.chkNoFilterEpisode.Checked - Me.lstEpFilters.Enabled = Not Me.chkNoFilterEpisode.Checked - Me.txtEpFilter.Enabled = Not Me.chkNoFilterEpisode.Checked - Me.btnAddEpFilter.Enabled = Not Me.chkNoFilterEpisode.Checked - Me.btnEpFilterUp.Enabled = Not Me.chkNoFilterEpisode.Checked - Me.btnEpFilterDown.Enabled = Not Me.chkNoFilterEpisode.Checked - Me.btnRemoveEpFilter.Enabled = Not Me.chkNoFilterEpisode.Checked - End Sub - - Private Sub chkNoSaveImagesToNfo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkNoSaveImagesToNfo.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkNoSpoilers_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkNoSpoilers.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkOnlyTVImagesLanguage_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOnlyTVImagesLanguage.CheckedChanged - Me.SetApplyButton(True) - - Me.chkGetEnglishImages.Enabled = Me.chkOnlyTVImagesLanguage.Checked - - If Not Me.chkOnlyTVImagesLanguage.Checked Then Me.chkGetEnglishImages.Checked = False - End Sub - - Private Sub chkOnlyValueForCert_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOnlyValueForCert.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkOutlineForPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutlineForPlot.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkOutline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOutline.CheckedChanged - Me.SetApplyButton(True) - - Me.chkOutlineForPlot.Enabled = Me.chkOutline.Checked - If Not Me.chkOutline.Checked Then Me.chkOutlineForPlot.Checked = False - End Sub - - Private Sub chkOverwriteAllSPoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOverwriteAllSPoster.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkOverwriteEpFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOverwriteEpFanart.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkOverwriteEpPoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOverwriteEpPoster.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkOverwriteFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOverwriteFanart.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkOverwriteNfo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOverwriteNfo.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkOverwritePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOverwritePoster.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkOverwriteShowFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOverwriteShowFanart.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkOverwriteShowPoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOverwriteShowPoster.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkOverwriteTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOverwriteTrailer.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkPersistImgCache_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPersistImgCache.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPlot.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkPosterJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPosterJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkPosterTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkPosterTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkProducers_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkProducers.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkProperCase_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkProperCase.CheckedChanged - Me.SetApplyButton(True) - Me.sResult.NeedsRefresh = True - End Sub - - Private Sub chkRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRating.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkRelease_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRelease.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkResizeAllSPoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkResizeAllSPoster.CheckedChanged - Me.SetApplyButton(True) - - txtAllSPosterWidth.Enabled = chkResizeAllSPoster.Checked - txtAllSPosterHeight.Enabled = chkResizeAllSPoster.Checked - - If Not chkResizeAllSPoster.Checked Then - txtAllSPosterWidth.Text = String.Empty - txtAllSPosterHeight.Text = String.Empty - End If - End Sub - - Private Sub chkResizeEpFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkResizeEpFanart.CheckedChanged - Me.SetApplyButton(True) - - txtEpFanartWidth.Enabled = chkResizeEpFanart.Checked - txtEpFanartHeight.Enabled = chkResizeEpFanart.Checked - - If Not chkResizeEpFanart.Checked Then - txtEpFanartWidth.Text = String.Empty - txtEpFanartHeight.Text = String.Empty - End If - End Sub - - Private Sub chkResizeEpPoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkResizeEpPoster.CheckedChanged - Me.SetApplyButton(True) - - txtEpPosterWidth.Enabled = chkResizeEpPoster.Checked - txtEpPosterHeight.Enabled = chkResizeEpPoster.Checked - - If Not chkResizeEpFanart.Checked Then - txtEpPosterWidth.Text = String.Empty - txtEpPosterHeight.Text = String.Empty - End If - End Sub - - Private Sub chkResizeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkResizeFanart.CheckedChanged - Me.SetApplyButton(True) - - txtFanartWidth.Enabled = chkResizeFanart.Checked - txtFanartHeight.Enabled = chkResizeFanart.Checked - - If Not chkResizeFanart.Checked Then - txtFanartWidth.Text = String.Empty - txtFanartHeight.Text = String.Empty - End If - End Sub - - Private Sub chkResizePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkResizePoster.CheckedChanged - Me.SetApplyButton(True) - - txtPosterWidth.Enabled = chkResizePoster.Checked - txtPosterHeight.Enabled = chkResizePoster.Checked - - If Not chkResizePoster.Checked Then - txtPosterWidth.Text = String.Empty - txtPosterHeight.Text = String.Empty - End If - End Sub - - Private Sub chkResizeShowFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkResizeShowFanart.CheckedChanged - Me.SetApplyButton(True) - - txtShowFanartWidth.Enabled = chkResizeShowFanart.Checked - txtShowFanartHeight.Enabled = chkResizeShowFanart.Checked - - If Not chkResizeShowFanart.Checked Then - txtShowFanartWidth.Text = String.Empty - txtShowFanartHeight.Text = String.Empty - End If - End Sub - - Private Sub chkResizeShowPoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkResizeShowPoster.CheckedChanged - Me.SetApplyButton(True) - - txtShowPosterWidth.Enabled = chkResizeShowPoster.Checked - txtShowPosterHeight.Enabled = chkResizeShowPoster.Checked - - If Not chkResizeShowPoster.Checked Then - txtShowPosterWidth.Text = String.Empty - txtShowPosterHeight.Text = String.Empty - End If - End Sub - - Private Sub chkRuntime_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRuntime.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScanMediaInfo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScanMediaInfo.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScanOrderModify_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScanOrderModify.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperEpActors_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperEpActors.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperEpAired_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperEpAired.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperEpCredits_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperEpCredits.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperEpDirector_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperEpDirector.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperEpEpisode_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperEpEpisode.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperEpPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperEpPlot.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperEpRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperEpRating.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperEpSeason_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperEpSeason.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperEpTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperEpTitle.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperShowActors_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperShowActors.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperShowEGU_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperShowEGU.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperShowGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperShowGenre.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperShowMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperShowMPAA.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperShowPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperShowPlot.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperShowPremiered_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperShowPremiered.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperShowRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperShowRating.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperShowStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperShowStudio.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkScraperShowTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScraperShowTitle.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeaOverwriteFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeaOverwriteFanart.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeaOverwritePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeaOverwritePoster.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeaResizeFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeaResizeFanart.CheckedChanged - Me.SetApplyButton(True) - - txtSeaFanartWidth.Enabled = chkSeaResizeFanart.Checked - txtSeaFanartHeight.Enabled = chkSeaResizeFanart.Checked - - If Not chkSeaResizeFanart.Checked Then - txtSeaFanartWidth.Text = String.Empty - txtSeaFanartHeight.Text = String.Empty - End If - End Sub - - Private Sub chkSeaResizePoster_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeaResizePoster.CheckedChanged - Me.SetApplyButton(True) - - txtSeaPosterWidth.Enabled = chkSeaResizePoster.Checked - txtSeaPosterHeight.Enabled = chkSeaResizePoster.Checked - - If Not chkSeaResizePoster.Checked Then - txtSeaPosterWidth.Text = String.Empty - txtSeaPosterHeight.Text = String.Empty - End If - End Sub - - Private Sub chkSeasonAllJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonAllJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonAllTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonAllTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonAllPosterJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonAllPosterJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonDashFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonDashFanart.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonXXDashFanartJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonXXDashFanartJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonDotFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonDotFanart.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonFanartCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonFanartCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonFanartJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonFanartJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonFolderJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonFolderJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonNameJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonNameJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonNameTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonNameTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonPosterCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonPosterCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonPosterJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonPosterJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonPosterTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonPosterTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonXTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonXTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonXXTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonXXTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSeasonXXDashPosterJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSeasonXXDashPosterJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowDashFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowDashFanart.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowDims_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowDims.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowDotFanart_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowDotFanart.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowFanartCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowFanartCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowFanartJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowFanartJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowFolderJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowFolderJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowGenresText_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowGenresText.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowLockGenre_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowLockGenre.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowLockPlot_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowLockPlot.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowLockRating_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowLockRating.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowLockStudio_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowLockStudio.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowLockTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowLockTitle.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowNfoCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowNfoCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowPosterCol_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowPosterCol.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowPosterJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowPosterJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowBannerJPG_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowBannerJPG.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowPosterTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowPosterTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkShowProperCase_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowProperCase.CheckedChanged - Me.SetApplyButton(True) - Me.sResult.NeedsRefresh = True - End Sub - - Private Sub chkShowTBN_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkShowTBN.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSingleScrapeImages_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSingleScrapeImages.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSingleScrapeTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSingleScrapeTrailer.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSortBeforeScan_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSortBeforeScan.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkSourceFromFolder_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSourceFromFolder.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkStudio_CheckedChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStudio.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkTagline_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTagline.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkTitle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTitle.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkTop250_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTop250.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkCountry_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCountry.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTrailer.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkTVCleanDB_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTVCleanDB.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkTVIgnoreLastScan_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTVIgnoreLastScan.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkTVScanMetaData_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTVScanMetaData.CheckedChanged - Me.SetApplyButton(True) - - Me.cboTVMetaDataOverlay.Enabled = Me.chkTVScanMetaData.Checked - - If Not Me.chkTVScanMetaData.Checked Then - Me.cboTVMetaDataOverlay.SelectedIndex = 0 - End If - End Sub - - Private Sub chkTVScanOrderModify_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkTVScanOrderModify.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkUpdaterTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUpdaterTrailer.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkUpdates_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUpdates.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkUseCertForMPAA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseCertForMPAA.CheckedChanged - Me.SetApplyButton(True) - - Me.chkOnlyValueForCert.Enabled = Me.chkUseCertForMPAA.Checked - - If Not Me.chkUseCertForMPAA.Checked Then Me.chkOnlyValueForCert.Checked = False - End Sub - - Private Sub chkUseETasFA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseETasFA.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkUseImgCacheUpdaters_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseImgCacheUpdaters.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkUseImgCache_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseImgCache.CheckedChanged - Me.chkPersistImgCache.Enabled = Me.chkUseImgCache.Checked - Me.chkUseImgCacheUpdaters.Enabled = Me.chkUseImgCache.Checked - If Not Me.chkUseImgCache.Checked Then - Me.chkPersistImgCache.Checked = False - Me.chkUseImgCacheUpdaters.Checked = False - End If - Me.SetApplyButton(True) - End Sub - - Private Sub chkUseMIDuration_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseMIDuration.CheckedChanged - Me.txtRuntimeFormat.Enabled = Me.chkUseMIDuration.Checked - Me.SetApplyButton(True) - End Sub - - Private Sub chkVideoTSParent_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - End Sub - - Private Sub chkVotes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkVotes.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkWhitelistVideo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkWhitelistVideo.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkWriters_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkWriters.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chkYAMJCompatibleSets_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) - Me.SetApplyButton(True) - End Sub - - Private Sub chkYear_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkYear.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub chShowPosterSize_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbShowPosterSize.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub ClearRegex() - Me.btnAddShowRegex.Text = Master.eLang.GetString(115, "Add Regex") - Me.btnAddShowRegex.Tag = String.Empty - Me.btnAddShowRegex.Enabled = False - Me.txtSeasonRegex.Text = String.Empty - Me.cboSeasonRetrieve.SelectedIndex = -1 - Me.txtEpRegex.Text = String.Empty - Me.cboEpRetrieve.SelectedIndex = -1 - End Sub - - Private Sub dlgSettings_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown - Me.Activate() - End Sub - - Private Sub EditShowRegex(ByVal lItem As ListViewItem) - Me.btnAddShowRegex.Text = Master.eLang.GetString(124, "Update Regex") - Me.btnAddShowRegex.Tag = lItem.Text - - Me.txtSeasonRegex.Text = lItem.SubItems(1).Text.ToString - - Select Case lItem.SubItems(2).Text - Case "Folder" - Me.cboSeasonRetrieve.SelectedIndex = 0 - Case "File" - Me.cboSeasonRetrieve.SelectedIndex = 1 - End Select - - Me.txtEpRegex.Text = lItem.SubItems(3).Text - - Select Case lItem.SubItems(4).Text - Case "Folder" - Me.cboEpRetrieve.SelectedIndex = 0 - Case "File" - Me.cboEpRetrieve.SelectedIndex = 1 - Case "Result" - Me.cboEpRetrieve.SelectedIndex = 2 - End Select - End Sub - - Private Sub FillGenres() - If Not String.IsNullOrEmpty(Master.eSettings.GenreFilter) Then - Dim genreArray() As String - genreArray = Strings.Split(Master.eSettings.GenreFilter, ",") - For g As Integer = 0 To UBound(genreArray) - If Me.lbGenre.FindString(Strings.Trim(genreArray(g))) > 0 Then Me.lbGenre.SetItemChecked(Me.lbGenre.FindString(Strings.Trim(genreArray(g))), True) - Next - - If Me.lbGenre.CheckedItems.Count = 0 Then - Me.lbGenre.SetItemChecked(0, True) - End If - Else - Me.lbGenre.SetItemChecked(0, True) - End If - End Sub - - Private Sub FillList(ByVal sType As String) - Dim pNode As New TreeNode - Dim cNode As New TreeNode - - Me.tvSettings.Nodes.Clear() - Me.RemoveCurrPanel() - - For Each pPanel As Containers.SettingsPanel In SettingsPanels.Where(Function(s) s.Type = sType AndAlso String.IsNullOrEmpty(s.Parent)).OrderBy(Function(s) s.Order) - pNode = New TreeNode(pPanel.Text, pPanel.ImageIndex, pPanel.ImageIndex) - pNode.Name = pPanel.Name - For Each cPanel As Containers.SettingsPanel In SettingsPanels.Where(Function(p) p.Type = sType AndAlso p.Parent = pNode.Name).OrderBy(Function(s) s.Order) - cNode = New TreeNode(cPanel.Text, cPanel.ImageIndex, cPanel.ImageIndex) - cNode.Name = cPanel.Name - pNode.Nodes.Add(cNode) - Next - Me.tvSettings.Nodes.Add(pNode) - Next - - If Me.tvSettings.Nodes.Count > 0 Then - Me.tvSettings.ExpandAll() - Me.tvSettings.SelectedNode = Me.tvSettings.Nodes(0) - Else - Me.pbCurrent.Image = Nothing - Me.lblCurrent.Text = String.Empty - End If - End Sub - - Private Sub FillSettings() - Try - Me.chkProperCase.Checked = Master.eSettings.ProperCase - Me.chkShowProperCase.Checked = Master.eSettings.ShowProperCase - Me.chkEpProperCase.Checked = Master.eSettings.EpProperCase - Me.chkCleanFolderJPG.Checked = Master.eSettings.CleanFolderJPG - Me.chkCleanMovieTBN.Checked = Master.eSettings.CleanMovieTBN - Me.chkCleanMovieTBNb.Checked = Master.eSettings.CleanMovieTBNB - Me.chkCleanFanartJPG.Checked = Master.eSettings.CleanFanartJPG - Me.chkCleanMovieFanartJPG.Checked = Master.eSettings.CleanMovieFanartJPG - Me.chkCleanMovieNFO.Checked = Master.eSettings.CleanMovieNFO - Me.chkCleanMovieNFOb.Checked = Master.eSettings.CleanMovieNFOB - Me.chkCleanPosterTBN.Checked = Master.eSettings.CleanPosterTBN - Me.chkCleanPosterJPG.Checked = Master.eSettings.CleanPosterJPG - Me.chkCleanMovieJPG.Checked = Master.eSettings.CleanMovieJPG - Me.chkCleanMovieNameJPG.Checked = Master.eSettings.CleanMovieNameJPG - Me.chkCleanDotFanartJPG.Checked = Master.eSettings.CleanDotFanartJPG - Me.chkCleanExtrathumbs.Checked = Master.eSettings.CleanExtraThumbs - Me.tcCleaner.SelectedTab = If(Master.eSettings.ExpertCleaner, Me.tpExpert, Me.tpStandard) - Me.chkWhitelistVideo.Checked = Master.eSettings.CleanWhitelistVideo - Me.lstWhitelist.Items.AddRange(Master.eSettings.CleanWhitelistExts.ToArray) - Me.chkOverwriteNfo.Checked = Master.eSettings.OverwriteNfo - 'Me.chkYAMJCompatibleSets.Checked = Master.eSettings.YAMJSetsCompatible - Me.chkLogErrors.Checked = Master.eSettings.LogErrors - Me.lstNoStack.Items.AddRange(Master.eSettings.NoStackExts.ToArray) - Me.chkUpdates.Checked = Master.eSettings.CheckUpdates - Me.chkInfoPanelAnim.Checked = Master.eSettings.InfoPanelAnim - - If Not String.IsNullOrEmpty(Master.eSettings.CertificationLang) Then - Me.chkCert.Checked = True - Me.cbCert.Enabled = True - Me.cbCert.Text = Master.eSettings.CertificationLang - Me.chkUseCertForMPAA.Enabled = True - Me.chkUseCertForMPAA.Checked = Master.eSettings.UseCertForMPAA - End If - If Not String.IsNullOrEmpty(Master.eSettings.ForceTitle) Then - Me.chkForceTitle.Checked = True - Me.cbForce.Enabled = True - Me.cbForce.Text = Master.eSettings.ForceTitle - End If - Me.chkScanMediaInfo.Checked = Master.eSettings.ScanMediaInfo - Me.chkTVScanMetaData.Checked = Master.eSettings.ScanTVMediaInfo - Me.chkFullCast.Checked = Master.eSettings.FullCast - Me.chkFullCrew.Checked = Master.eSettings.FullCrew - Me.chkCastWithImg.Checked = Master.eSettings.CastImagesOnly - Me.chkMoviePosterCol.Checked = Master.eSettings.MoviePosterCol - Me.chkMovieFanartCol.Checked = Master.eSettings.MovieFanartCol - Me.chkMovieInfoCol.Checked = Master.eSettings.MovieInfoCol - Me.chkMovieTrailerCol.Checked = Master.eSettings.MovieTrailerCol - Me.chkMovieSubCol.Checked = Master.eSettings.MovieSubCol - Me.chkMovieExtraCol.Checked = Master.eSettings.MovieExtraCol - - Me.cbPosterSize.SelectedIndex = Master.eSettings.PreferredPosterSize - Me.cbFanartSize.SelectedIndex = Master.eSettings.PreferredFanartSize - If Master.eSettings.IsShowBanner Then - Me.rbBanner.Checked = True - Me.cbShowPosterSize.SelectedIndex = Master.eSettings.PreferredShowBannerType - Else - Me.rbPoster.Checked = True - Me.cbShowPosterSize.SelectedIndex = Master.eSettings.PreferredShowPosterSize - End If - If Master.eSettings.IsAllSBanner Then - Me.rbAllSBanner.Checked = True - Me.cbAllSPosterSize.SelectedIndex = Master.eSettings.PreferredAllSBannerType - Else - Me.rbAllSPoster.Checked = True - Me.cbAllSPosterSize.SelectedIndex = Master.eSettings.PreferredAllSPosterSize - End If - Me.cbShowFanartSize.SelectedIndex = Master.eSettings.PreferredShowFanartSize - Me.cbEpFanartSize.SelectedIndex = Master.eSettings.PreferredEpFanartSize - Me.cbSeaPosterSize.SelectedIndex = Master.eSettings.PreferredSeasonPosterSize - Me.cbSeaFanartSize.SelectedIndex = Master.eSettings.PreferredSeasonFanartSize - Me.chkAutoETSize.Checked = Master.eSettings.AutoET - Me.cbAutoETSize.SelectedIndex = Master.eSettings.AutoETSize - Me.chkFanartOnly.Checked = Master.eSettings.FanartPrefSizeOnly - Me.chkPosterOnly.Checked = Master.eSettings.PosterPrefSizeOnly - Me.tbPosterQual.Value = Master.eSettings.PosterQuality - Me.tbFanartQual.Value = Master.eSettings.FanartQuality - Me.tbShowPosterQual.Value = Master.eSettings.ShowPosterQuality - Me.tbShowFanartQual.Value = Master.eSettings.ShowFanartQuality - Me.tbAllSPosterQual.Value = Master.eSettings.AllSPosterQuality - Me.tbEpPosterQual.Value = Master.eSettings.EpPosterQuality - Me.tbEpFanartQual.Value = Master.eSettings.EpFanartQuality - Me.tbSeaPosterQual.Value = Master.eSettings.SeasonPosterQuality - Me.tbSeaFanartQual.Value = Master.eSettings.SeasonFanartQuality - Me.chkOverwritePoster.Checked = Master.eSettings.OverwritePoster - Me.chkOverwriteFanart.Checked = Master.eSettings.OverwriteFanart - Me.chkOverwriteShowPoster.Checked = Master.eSettings.OverwriteShowPoster - Me.chkOverwriteAllSPoster.Checked = Master.eSettings.OverwriteAllSPoster - Me.chkOverwriteShowFanart.Checked = Master.eSettings.OverwriteShowFanart - Me.chkOverwriteEpPoster.Checked = Master.eSettings.OverwriteEpPoster - Me.chkOverwriteEpFanart.Checked = Master.eSettings.OverwriteEpFanart - Me.chkSeaOverwritePoster.Checked = Master.eSettings.OverwriteSeasonPoster - Me.chkSeaOverwriteFanart.Checked = Master.eSettings.OverwriteSeasonFanart - Me.chkMovieTBN.Checked = Master.eSettings.MovieTBN - Me.chkMovieNameTBN.Checked = Master.eSettings.MovieNameTBN - Me.chkMovieJPG.Checked = Master.eSettings.MovieJPG - Me.chkMovieNameJPG.Checked = Master.eSettings.MovieNameJPG - Me.chkMovieNameDashPosterJPG.Checked = Master.eSettings.MovieNameDashPosterJPG - Me.chkPosterTBN.Checked = Master.eSettings.PosterTBN - Me.chkPosterJPG.Checked = Master.eSettings.PosterJPG - Me.chkFolderJPG.Checked = Master.eSettings.FolderJPG - Me.chkFanartJPG.Checked = Master.eSettings.FanartJPG - Me.chkMovieNameFanartJPG.Checked = Master.eSettings.MovieNameFanartJPG - Me.chkMovieNameDotFanartJPG.Checked = Master.eSettings.MovieNameDotFanartJPG - Me.chkMovieNFO.Checked = Master.eSettings.MovieNFO - Me.chkMovieNameNFO.Checked = Master.eSettings.MovieNameNFO - Me.chkMovieNameMultiOnly.Checked = Master.eSettings.MovieNameMultiOnly - Me.rbDashTrailer.Checked = Master.eSettings.DashTrailer - Me.rbBracketTrailer.Checked = Not Master.eSettings.DashTrailer - 'Me.chkVideoTSParent.Checked = Master.eSettings.VideoTSParent - Me.chkLockPlot.Checked = Master.eSettings.LockPlot - Me.chkLockOutline.Checked = Master.eSettings.LockOutline - Me.chkLockTitle.Checked = Master.eSettings.LockTitle - Me.chkLockTagline.Checked = Master.eSettings.LockTagline - Me.chkLockRating.Checked = Master.eSettings.LockRating - Me.chkLockRealStudio.Checked = Master.eSettings.LockStudio - Me.chkLockGenre.Checked = Master.eSettings.LockGenre - Me.chkLockTrailer.Checked = Master.eSettings.LockTrailer - Me.chkSingleScrapeImages.Checked = Master.eSettings.SingleScrapeImages - Me.chkClickScrape.Checked = Master.eSettings.ClickScrape - Me.chkAskCheckboxScrape.Enabled = Me.chkClickScrape.Checked - Me.chkAskCheckboxScrape.Checked = Master.eSettings.AskCheckboxScrape - Me.chkMarkNew.Checked = Master.eSettings.MarkNew - Me.chkResizeFanart.Checked = Master.eSettings.ResizeFanart - If Master.eSettings.ResizeFanart Then - Me.txtFanartWidth.Text = Master.eSettings.FanartWidth.ToString - Me.txtFanartHeight.Text = Master.eSettings.FanartHeight.ToString - End If - Me.chkResizePoster.Checked = Master.eSettings.ResizePoster - If Master.eSettings.ResizePoster Then - Me.txtPosterWidth.Text = Master.eSettings.PosterWidth.ToString - Me.txtPosterHeight.Text = Master.eSettings.PosterHeight.ToString - End If - Me.chkResizeShowFanart.Checked = Master.eSettings.ResizeShowFanart - If Master.eSettings.ResizeShowFanart Then - Me.txtShowFanartWidth.Text = Master.eSettings.ShowFanartWidth.ToString - Me.txtShowFanartHeight.Text = Master.eSettings.ShowFanartHeight.ToString - End If - Me.chkResizeShowPoster.Checked = Master.eSettings.ResizeShowPoster - If Master.eSettings.ResizeShowPoster Then - Me.txtShowPosterWidth.Text = Master.eSettings.ShowPosterWidth.ToString - Me.txtShowPosterHeight.Text = Master.eSettings.ShowPosterHeight.ToString - End If - Me.chkResizeAllSPoster.Checked = Master.eSettings.ResizeAllSPoster - If Master.eSettings.ResizeAllSPoster Then - Me.txtAllSPosterWidth.Text = Master.eSettings.AllSPosterWidth.ToString - Me.txtAllSPosterHeight.Text = Master.eSettings.AllSPosterHeight.ToString - End If - Me.chkResizeEpFanart.Checked = Master.eSettings.ResizeEpFanart - If Master.eSettings.ResizeEpFanart Then - Me.txtEpFanartWidth.Text = Master.eSettings.EpFanartWidth.ToString - Me.txtEpFanartHeight.Text = Master.eSettings.EpFanartHeight.ToString - End If - Me.chkResizeEpPoster.Checked = Master.eSettings.ResizeEpPoster - If Master.eSettings.ResizeEpPoster Then - Me.txtEpPosterWidth.Text = Master.eSettings.EpPosterWidth.ToString - Me.txtEpPosterHeight.Text = Master.eSettings.EpPosterHeight.ToString - End If - Me.chkSeaResizeFanart.Checked = Master.eSettings.ResizeSeasonFanart - If Master.eSettings.ResizeSeasonFanart Then - Me.txtSeaFanartWidth.Text = Master.eSettings.SeasonFanartWidth.ToString - Me.txtSeaFanartHeight.Text = Master.eSettings.SeasonFanartHeight.ToString - End If - Me.chkSeaResizePoster.Checked = Master.eSettings.ResizeSeasonPoster - If Master.eSettings.ResizeSeasonPoster Then - Me.txtSeaPosterWidth.Text = Master.eSettings.SeasonPosterWidth.ToString - Me.txtSeaPosterHeight.Text = Master.eSettings.SeasonPosterHeight.ToString - End If - If Master.eSettings.AutoThumbs > 0 Then - Me.chkAutoThumbs.Checked = True - Me.txtAutoThumbs.Enabled = True - Me.txtAutoThumbs.Text = Master.eSettings.AutoThumbs.ToString - Me.chkNoSpoilers.Enabled = True - Me.chkNoSpoilers.Checked = Master.eSettings.AutoThumbsNoSpoilers - Me.chkUseETasFA.Enabled = True - Me.chkUseETasFA.Checked = Master.eSettings.UseETasFA - End If - - Me.txtBDPath.Text = Master.eSettings.BDPath - Me.txtBDPath.Enabled = Master.eSettings.AutoBD - Me.btnBrowse.Enabled = Master.eSettings.AutoBD - Me.chkAutoBD.Checked = Master.eSettings.AutoBD - Me.chkUseMIDuration.Checked = Master.eSettings.UseMIDuration - Me.txtRuntimeFormat.Enabled = Master.eSettings.UseMIDuration - Me.txtRuntimeFormat.Text = Master.eSettings.RuntimeMask - Me.chkUseImgCache.Checked = Master.eSettings.UseImgCache - Me.chkUseImgCacheUpdaters.Checked = Master.eSettings.UseImgCacheUpdaters - Me.chkPersistImgCache.Checked = Master.eSettings.PersistImgCache - Me.txtSkipLessThan.Text = Master.eSettings.SkipLessThan.ToString - Me.chkSkipStackedSizeCheck.Checked = Master.eSettings.SkipStackSizeCheck - Me.txtTVSkipLessThan.Text = Master.eSettings.SkipLessThanEp.ToString - Me.chkNoSaveImagesToNfo.Checked = Master.eSettings.NoSaveImagesToNfo - Me.chkDownloadTrailer.Checked = Master.eSettings.DownloadTrailers - Me.chkUpdaterTrailer.Checked = Master.eSettings.UpdaterTrailers - Me.chkNoDLTrailer.Checked = Master.eSettings.UpdaterTrailersNoDownload - Me.chkSingleScrapeTrailer.Checked = Master.eSettings.SingleScrapeTrailer - - Me.chkOverwriteTrailer.Checked = Master.eSettings.OverwriteTrailer - Me.chkDeleteAllTrailers.Checked = Master.eSettings.DeleteAllTrailers - - Me.cbTrailerQuality.SelectedValue = Master.eSettings.PreferredTrailerQuality - - FillGenres() - - Me.chkShowDims.Checked = Master.eSettings.ShowDims - Me.chkNoDisplayFanart.Checked = Master.eSettings.NoDisplayFanart - Me.chkNoDisplayPoster.Checked = Master.eSettings.NoDisplayPoster - Me.chkOutlineForPlot.Checked = Master.eSettings.OutlineForPlot - - Me.chkShowGenresText.Checked = Master.eSettings.AllwaysDisplayGenresText - Me.chkDisplayYear.Checked = Master.eSettings.DisplayYear - - Me.rbETNative.Checked = Master.eSettings.ETNative - If Not Master.eSettings.ETNative AndAlso Master.eSettings.ETWidth > 0 AndAlso Master.eSettings.ETHeight > 0 Then - Me.rbETCustom.Checked = True - Me.txtETHeight.Text = Master.eSettings.ETHeight.ToString - Me.txtETWidth.Text = Master.eSettings.ETWidth.ToString - Me.chkETPadding.Checked = Master.eSettings.ETPadding - Else - Me.rbETNative.Checked = True - End If - - Me.lstSortTokens.Items.AddRange(Master.eSettings.SortTokens.ToArray) - - If Master.eSettings.LevTolerance > 0 Then - Me.chkCheckTitles.Checked = True - Me.txtCheckTitleTol.Enabled = True - Me.txtCheckTitleTol.Text = Master.eSettings.LevTolerance.ToString - End If - Me.chkAutoDetectVTS.Checked = Master.eSettings.AutoDetectVTS - Me.cbLanguages.SelectedItem = If(String.IsNullOrEmpty(Master.eSettings.FlagLang), Master.eLang.Disabled, Master.eSettings.FlagLang) - Me.cboTVMetaDataOverlay.SelectedItem = If(String.IsNullOrEmpty(Master.eSettings.TVFlagLang), Master.eLang.Disabled, Master.eSettings.TVFlagLang) - Me.cbIntLang.SelectedItem = Master.eSettings.Language - - Me.chkTitle.Checked = Master.eSettings.FieldTitle - Me.chkYear.Checked = Master.eSettings.FieldYear - Me.chkMPAA.Checked = Master.eSettings.FieldMPAA - Me.chkCertification.Checked = Master.eSettings.FieldCert - Me.chkRelease.Checked = Master.eSettings.FieldRelease - Me.chkRuntime.Checked = Master.eSettings.FieldRuntime - Me.chkRating.Checked = Master.eSettings.FieldRating - Me.chkVotes.Checked = Master.eSettings.FieldVotes - Me.chkStudio.Checked = Master.eSettings.FieldStudio - Me.chkGenre.Checked = Master.eSettings.FieldGenre - Me.chkTrailer.Checked = Master.eSettings.FieldTrailer - Me.chkTagline.Checked = Master.eSettings.FieldTagline - Me.chkOutline.Checked = Master.eSettings.FieldOutline - Me.chkPlot.Checked = Master.eSettings.FieldPlot - Me.chkCast.Checked = Master.eSettings.FieldCast - Me.chkDirector.Checked = Master.eSettings.FieldDirector - Me.chkWriters.Checked = Master.eSettings.FieldWriters - If Master.eSettings.FullCrew Then - Me.chkProducers.Checked = Master.eSettings.FieldProducers - Me.chkMusicBy.Checked = Master.eSettings.FieldMusic - Me.chkCrew.Checked = Master.eSettings.FieldCrew - End If - Me.chkTop250.Checked = Master.eSettings.Field250 - Me.chkCountry.Checked = Master.eSettings.FieldCountry - Me.txtActorLimit.Text = Master.eSettings.ActorLimit.ToString - Me.txtGenreLimit.Text = Master.eSettings.GenreLimit.ToString - - Me.chkMissingPoster.Checked = Master.eSettings.MissingFilterPoster - Me.chkMissingFanart.Checked = Master.eSettings.MissingFilterFanart - Me.chkMissingNFO.Checked = Master.eSettings.MissingFilterNFO - Me.chkMissingTrailer.Checked = Master.eSettings.MissingFilterTrailer - Me.chkMissingSubs.Checked = Master.eSettings.MissingFilterSubs - Me.chkMissingExtra.Checked = Master.eSettings.MissingFilterExtras - Me.cbMovieTheme.SelectedItem = Master.eSettings.MovieTheme - Me.cbTVShowTheme.SelectedItem = Master.eSettings.TVShowTheme - Me.cbEpTheme.SelectedItem = Master.eSettings.TVEpTheme - Me.Meta.AddRange(Master.eSettings.MetadataPerFileType) - Me.LoadMetadata() - Me.TVMeta.AddRange(Master.eSettings.TVMetadataperFileType) - Me.LoadTVMetadata() - Me.chkIFOScan.Checked = Master.eSettings.EnableIFOScan - Me.chkCleanDB.Checked = Master.eSettings.CleanDB - Me.chkIgnoreLastScan.Checked = Master.eSettings.IgnoreLastScan - Me.chkTVCleanDB.Checked = Master.eSettings.TVCleanDB - Me.chkTVIgnoreLastScan.Checked = Master.eSettings.TVIgnoreLastScan - Me.ShowRegex.AddRange(Master.eSettings.TVShowRegexes) - Me.LoadShowRegex() - Me.cbRatingRegion.Text = Master.eSettings.ShowRatingRegion - Me.chkSeasonAllTBN.Checked = Master.eSettings.SeasonAllTBN - Me.chkSeasonAllJPG.Checked = Master.eSettings.SeasonAllJPG - Me.chkSeasonAllPosterJPG.Checked = Master.eSettings.SeasonAllPosterJPG - Me.chkShowTBN.Checked = Master.eSettings.ShowTBN - Me.chkShowJPG.Checked = Master.eSettings.ShowJPG - Me.chkShowFolderJPG.Checked = Master.eSettings.ShowFolderJPG - Me.chkShowPosterTBN.Checked = Master.eSettings.ShowPosterTBN - Me.chkShowPosterJPG.Checked = Master.eSettings.ShowPosterJPG - Me.chkShowBannerJPG.Checked = Master.eSettings.ShowBannerJPG - Me.chkShowFanartJPG.Checked = Master.eSettings.ShowFanartJPG - Me.chkShowDashFanart.Checked = Master.eSettings.ShowDashFanart - Me.chkShowDotFanart.Checked = Master.eSettings.ShowDotFanart - Me.chkSeasonXXTBN.Checked = Master.eSettings.SeasonXX - Me.chkSeasonXTBN.Checked = Master.eSettings.SeasonX - Me.chkSeasonXXDashPosterJPG.Checked = Master.eSettings.SeasonXXDashPosterJPG - Me.chkSeasonPosterTBN.Checked = Master.eSettings.SeasonPosterTBN - Me.chkSeasonPosterJPG.Checked = Master.eSettings.SeasonPosterJPG - Me.chkSeasonNameTBN.Checked = Master.eSettings.SeasonNameTBN - Me.chkSeasonNameJPG.Checked = Master.eSettings.SeasonNameJPG - Me.chkSeasonFolderJPG.Checked = Master.eSettings.SeasonFolderJPG - Me.chkSeasonFanartJPG.Checked = Master.eSettings.SeasonFanartJPG - Me.chkSeasonDashFanart.Checked = Master.eSettings.SeasonDashFanart - Me.chkSeasonXXDashFanartJPG.Checked = Master.eSettings.SeasonXXDashFanartJPG - Me.chkSeasonDotFanart.Checked = Master.eSettings.SeasonDotFanart - Me.chkEpisodeTBN.Checked = Master.eSettings.EpisodeTBN - Me.chkEpisodeJPG.Checked = Master.eSettings.EpisodeJPG - Me.chkEpisodeDashThumbJPG.Checked = Master.eSettings.EpisodeDashThumbJPG - Me.chkEpisodeDashFanart.Checked = Master.eSettings.EpisodeDashFanart - Me.chkEpisodeDotFanart.Checked = Master.eSettings.EpisodeDotFanart - Me.chkShowPosterCol.Checked = Master.eSettings.ShowPosterCol - Me.chkShowFanartCol.Checked = Master.eSettings.ShowFanartCol - Me.chkShowNfoCol.Checked = Master.eSettings.ShowNfoCol - Me.chkSeasonPosterCol.Checked = Master.eSettings.SeasonPosterCol - Me.chkSeasonFanartCol.Checked = Master.eSettings.SeasonFanartCol - Me.chkEpisodePosterCol.Checked = Master.eSettings.EpisodePosterCol - Me.chkEpisodeFanartCol.Checked = Master.eSettings.EpisodeFanartCol - Me.chkEpisodeNfoCol.Checked = Master.eSettings.EpisodeNfoCol - Me.chkSourceFromFolder.Checked = Master.eSettings.SourceFromFolder - Me.chkSortBeforeScan.Checked = Master.eSettings.SortBeforeScan - Me.tLangList.Clear() - Me.tLangList.AddRange(Master.eSettings.TVDBLanguages) - Me.cbTVLanguage.Items.AddRange((From lLang In Master.eSettings.TVDBLanguages Select lLang.LongLang).ToArray) - If Me.cbTVLanguage.Items.Count > 0 Then - Me.cbTVLanguage.Text = Me.tLangList.FirstOrDefault(Function(l) l.ShortLang = Master.eSettings.TVDBLanguage).LongLang - End If - Me.txtTVDBMirror.Text = Master.eSettings.TVDBMirror - - If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then - Me.chkEnableProxy.Checked = True - Me.txtProxyURI.Text = Master.eSettings.ProxyURI - Me.txtProxyPort.Text = Master.eSettings.ProxyPort.ToString - - If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) Then - Me.chkEnableCredentials.Checked = True - Me.txtProxyUsername.Text = Master.eSettings.ProxyCreds.UserName - Me.txtProxyPassword.Text = Master.eSettings.ProxyCreds.Password - Me.txtProxyDomain.Text = Master.eSettings.ProxyCreds.Domain - End If - End If - Me.txtAPIKey.Text = Master.eSettings.ExternalTVDBAPIKey - Me.chkScanOrderModify.Checked = Master.eSettings.ScanOrderModify - Me.chkTVScanOrderModify.Checked = Master.eSettings.TVScanOrderModify - Me.cboTVUpdate.SelectedIndex = Master.eSettings.TVUpdateTime - Me.chkNoFilterEpisode.Checked = Master.eSettings.NoFilterEpisode - Me.chkOnlyTVImagesLanguage.Checked = Master.eSettings.OnlyGetTVImagesForSelectedLanguage - Me.chkGetEnglishImages.Checked = Master.eSettings.AlwaysGetEnglishTVImages - Me.chkDisplayMissingEpisodes.Checked = Master.eSettings.DisplayMissingEpisodes - Me.chkShowLockTitle.Checked = Master.eSettings.ShowLockTitle - Me.chkShowLockPlot.Checked = Master.eSettings.ShowLockPlot - Me.chkShowLockRating.Checked = Master.eSettings.ShowLockRating - Me.chkShowLockGenre.Checked = Master.eSettings.ShowLockGenre - Me.chkShowLockStudio.Checked = Master.eSettings.ShowLockStudio - Me.chkEpLockTitle.Checked = Master.eSettings.EpLockTitle - Me.chkEpLockPlot.Checked = Master.eSettings.EpLockPlot - Me.chkEpLockRating.Checked = Master.eSettings.EpLockRating - Me.chkScraperShowTitle.Checked = Master.eSettings.ScraperShowTitle - Me.chkScraperShowEGU.Checked = Master.eSettings.ScraperShowEGU - Me.chkScraperShowGenre.Checked = Master.eSettings.ScraperShowGenre - Me.chkScraperShowMPAA.Checked = Master.eSettings.ScraperShowMPAA - Me.chkScraperShowPlot.Checked = Master.eSettings.ScraperShowPlot - Me.chkScraperShowPremiered.Checked = Master.eSettings.ScraperShowPremiered - Me.chkScraperShowRating.Checked = Master.eSettings.ScraperShowRating - Me.chkScraperShowStudio.Checked = Master.eSettings.ScraperShowStudio - Me.chkScraperShowActors.Checked = Master.eSettings.ScraperShowActors - Me.chkScraperEpTitle.Checked = Master.eSettings.ScraperEpTitle - Me.chkScraperEpSeason.Checked = Master.eSettings.ScraperEpSeason - Me.chkScraperEpEpisode.Checked = Master.eSettings.ScraperEpEpisode - Me.chkScraperEpAired.Checked = Master.eSettings.ScraperEpAired - Me.chkScraperEpRating.Checked = Master.eSettings.ScraperEpRating - Me.chkScraperEpPlot.Checked = Master.eSettings.ScraperEpPlot - Me.chkScraperEpDirector.Checked = Master.eSettings.ScraperEpDirector - Me.chkScraperEpCredits.Checked = Master.eSettings.ScraperEpCredits - Me.chkScraperEpActors.Checked = Master.eSettings.ScraperEpActors - Me.chkDisplayAllSeason.Checked = Master.eSettings.DisplayAllSeason - Me.chkMarkNewShows.Checked = Master.eSettings.MarkNewShows - Me.chkMarkNewEpisodes.Checked = Master.eSettings.MarkNewEpisodes - Me.cbOrdering.SelectedIndex = Master.eSettings.OrderDefault - Me.chkOnlyValueForCert.Checked = Master.eSettings.OnlyValueForCert - Me.chkActorCache.Checked = AdvancedSettings.GetBooleanSetting("ScrapeActorsThumbs", False) - Me.RefreshSources() - Me.RefreshTVSources() - Me.RefreshShowFilters() - Me.RefreshEpFilters() - Me.RefreshMovieFilters() - Me.RefreshValidExts() - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub frmSettings_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load - Try - Functions.PNLDoubleBuffer(Me.pnlMain) - Me.SetUp() - Me.AddPanels() - Me.AddButtons() - Me.AddHelpHandlers(Me, "Core_") - - Dim iBackground As New Bitmap(Me.pnlTop.Width, Me.pnlTop.Height) - Using g As Graphics = Graphics.FromImage(iBackground) - g.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlTop.ClientRectangle, Color.SteelBlue, Color.LightSteelBlue, Drawing2D.LinearGradientMode.Horizontal), pnlTop.ClientRectangle) - Me.pnlTop.BackgroundImage = iBackground - End Using - - iBackground = New Bitmap(Me.pnlCurrent.Width, Me.pnlCurrent.Height) - Using b As Graphics = Graphics.FromImage(iBackground) - b.FillRectangle(New Drawing2D.LinearGradientBrush(Me.pnlCurrent.ClientRectangle, Color.SteelBlue, Color.FromKnownColor(KnownColor.Control), Drawing2D.LinearGradientMode.Horizontal), pnlCurrent.ClientRectangle) - Me.pnlCurrent.BackgroundImage = iBackground - End Using - - Me.LoadGenreLangs() - Me.LoadIntLangs() - Me.LoadLangs() - Me.LoadThemes() - Me.LoadRatingRegions() - Me.FillSettings() - Me.lvMovies.ListViewItemSorter = New ListViewItemComparer(1) - Me.lvTVSources.ListViewItemSorter = New ListViewItemComparer(1) - Me.sResult.NeedsUpdate = False - Me.sResult.NeedsRefresh = False - Me.sResult.DidCancel = False - Me.didApply = False - Me.NoUpdate = False - RaiseEvent LoadEnd() - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub Handle_ModuleSettingsChanged() - Me.SetApplyButton(True) - End Sub - - Private Sub Handle_ModuleSetupChanged(ByVal Name As String, ByVal State As Boolean, ByVal diffOrder As Integer) - If Name = "!#RELOAD" Then - Me.FillSettings() - Return - End If - Dim tSetPan As New Containers.SettingsPanel - Dim oSetPan As New Containers.SettingsPanel - Me.SuspendLayout() - tSetPan = SettingsPanels.FirstOrDefault(Function(s) s.Name = Name) - - If Not IsNothing(tSetPan) Then - tSetPan.ImageIndex = If(State, 9, 10) - - Try - 'If tvSettings.Nodes.Count > 0 AndAlso tvSettings.Nodes(0).TreeView.IsDisposed Then Return 'Dont know yet why we need this. second call to settings will raise Exception with treview been disposed - If Not IsNothing(tvSettings.Nodes.Find(Name, True)(0)) Then - Dim t As TreeNode = tvSettings.Nodes.Find(Name, True)(0) - If Not diffOrder = 0 Then - Dim p As TreeNode = t.Parent - Dim i As Integer = t.Index - If diffOrder < 0 AndAlso Not t.PrevNode Is Nothing Then - oSetPan = SettingsPanels.FirstOrDefault(Function(s) s.Name = t.PrevNode.Name) - If Not IsNothing(oSetPan) Then oSetPan.Order = i + (diffOrder * -1) - End If - If diffOrder > 0 AndAlso Not t.NextNode Is Nothing Then - oSetPan = SettingsPanels.FirstOrDefault(Function(s) s.Name = t.NextNode.Name) - If Not IsNothing(oSetPan) Then oSetPan.Order = i + (diffOrder * -1) - End If - p.Nodes.Remove(t) - p.Nodes.Insert(i + diffOrder, t) - t.TreeView.SelectedNode = t - tSetPan.Order = i + diffOrder - End If - t.ImageIndex = If(State, 9, 10) - t.SelectedImageIndex = If(State, 9, 10) - Me.pbCurrent.Image = Me.ilSettings.Images(If(State, 9, 10)) - End If - - For Each s As ModulesManager._externalScraperModuleClass In (ModulesManager.Instance.externalScrapersModules.Where(Function(y) y.AssemblyName <> Name)) - s.ProcessorModule.ScraperOrderChanged() - s.ProcessorModule.PostScraperOrderChanged() - Next - - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End If - Me.ResumeLayout() - Me.SetApplyButton(True) - End Sub - - Private Sub HelpMouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) - Me.lblHelp.Text = dHelp.Item(DirectCast(sender, Control).AccessibleDescription) - End Sub - - Private Sub HelpMouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) - Me.lblHelp.Text = String.Empty - End Sub - - Private Sub lbGenre_ItemCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles lbGenre.ItemCheck - If e.Index = 0 Then - For i As Integer = 1 To lbGenre.Items.Count - 1 - Me.lbGenre.SetItemChecked(i, False) - Next - Else - Me.lbGenre.SetItemChecked(0, False) - End If - Me.SetApplyButton(True) - End Sub - - Private Sub LoadGenreLangs() - Me.lbGenre.Items.Add(Master.eLang.All) - Me.lbGenre.Items.AddRange(APIXML.GetGenreList(True)) - End Sub - - Private Sub LoadIntLangs() - Me.cbIntLang.Items.Clear() - If Directory.Exists(Path.Combine(Functions.AppPath, "Langs")) Then - Dim alL As New List(Of String) - Dim alLangs As New List(Of String) - Try - alL.AddRange(Directory.GetFiles(Path.Combine(Functions.AppPath, "Langs"), "*).xml")) - Catch - End Try - alLangs.AddRange(alL.Cast(Of String)().Select(Function(AL) Path.GetFileNameWithoutExtension(AL)).ToList) - Me.cbIntLang.Items.AddRange(alLangs.ToArray) - End If - End Sub - - Private Sub LoadLangs() - Me.cbLanguages.Items.Add(Master.eLang.Disabled) - Me.cbLanguages.Items.AddRange(Localization.ISOLangGetLanguagesList.ToArray) - Me.cboTVMetaDataOverlay.Items.Add(Master.eLang.Disabled) - Me.cboTVMetaDataOverlay.Items.AddRange(Localization.ISOLangGetLanguagesList.ToArray) - End Sub - - Private Sub LoadMetadata() - Me.lstMetaData.Items.Clear() - For Each x As Settings.MetadataPerType In Meta - Me.lstMetaData.Items.Add(x.FileType) - Next - End Sub - - Private Sub LoadRatingRegions() - Me.cbRatingRegion.Items.AddRange(APIXML.GetRatingRegions) - End Sub - - Private Sub LoadShowRegex() - Dim lvItem As ListViewItem - lvShowRegex.Items.Clear() - For Each rShow As Settings.TVShowRegEx In Me.ShowRegex - lvItem = New ListViewItem(rShow.ID.ToString) - lvItem.SubItems.Add(rShow.SeasonRegex) - lvItem.SubItems.Add(If(rShow.SeasonFromDirectory, "Folder", "File")) - lvItem.SubItems.Add(rShow.EpisodeRegex) - Select Case rShow.EpisodeRetrieve - Case Settings.EpRetrieve.FromDirectory - lvItem.SubItems.Add("Folder") - Case Settings.EpRetrieve.FromFilename - lvItem.SubItems.Add("File") - Case Settings.EpRetrieve.FromSeasonResult - lvItem.SubItems.Add("Result") - End Select - Me.lvShowRegex.Items.Add(lvItem) - Next - End Sub - - Private Sub LoadThemes() - Me.cbMovieTheme.Items.Clear() - Me.cbTVShowTheme.Items.Clear() - Me.cbEpTheme.Items.Clear() - If Directory.Exists(Path.Combine(Functions.AppPath, "Themes")) Then - Dim mT As New List(Of String) - Dim sT As New List(Of String) - Dim eT As New List(Of String) - Try - mT.AddRange(Directory.GetFiles(Path.Combine(Functions.AppPath, "Themes"), "movie-*.xml")) - Catch - End Try - Me.cbMovieTheme.Items.AddRange(mT.Cast(Of String)().Select(Function(AL) Path.GetFileNameWithoutExtension(AL).Replace("movie-", String.Empty)).ToArray) - Try - sT.AddRange(Directory.GetFiles(Path.Combine(Functions.AppPath, "Themes"), "tvshow-*.xml")) - Catch - End Try - Me.cbTVShowTheme.Items.AddRange(sT.Cast(Of String)().Select(Function(AL) Path.GetFileNameWithoutExtension(AL).Replace("tvshow-", String.Empty)).ToArray) - Try - eT.AddRange(Directory.GetFiles(Path.Combine(Functions.AppPath, "Themes"), "tvep-*.xml")) - Catch - End Try - Me.cbEpTheme.Items.AddRange(eT.Cast(Of String)().Select(Function(AL) Path.GetFileNameWithoutExtension(AL).Replace("tvep-", String.Empty)).ToArray) - End If - End Sub - - Private Sub LoadTrailerQualities() - Dim items As New Dictionary(Of String, Enums.TrailerQuality) - items.Add("1080p", Enums.TrailerQuality.HD1080p) - items.Add("1080p (VP8)", Enums.TrailerQuality.HD1080pVP8) - items.Add("720p", Enums.TrailerQuality.HD720p) - items.Add("720p (VP8)", Enums.TrailerQuality.HD720pVP8) - items.Add("SQ (MP4)", Enums.TrailerQuality.SQMP4) - items.Add("HQ (FLV)", Enums.TrailerQuality.HQFLV) - items.Add("HQ (VP8)", Enums.TrailerQuality.HQVP8) - items.Add("SQ (FLV)", Enums.TrailerQuality.SQFLV) - items.Add("SQ (VP8)", Enums.TrailerQuality.SQVP8) - Me.cbTrailerQuality.DataSource = items.ToList - Me.cbTrailerQuality.DisplayMember = "Key" - Me.cbTrailerQuality.ValueMember = "Value" - End Sub - - Private Sub LoadTVMetadata() - Me.lstTVMetaData.Items.Clear() - For Each x As Settings.MetadataPerType In TVMeta - Me.lstTVMetaData.Items.Add(x.FileType) - Next - End Sub - - Private Sub lstEpFilters_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles lstEpFilters.KeyDown - If e.KeyCode = Keys.Delete Then Me.RemoveEpFilter() - End Sub - - Private Sub lstFilters_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles lstFilters.KeyDown - If e.KeyCode = Keys.Delete Then Me.RemoveFilter() - End Sub - - Private Sub lstMetaData_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lstMetaData.DoubleClick - If Me.lstMetaData.SelectedItems.Count > 0 Then - Using dEditMeta As New dlgFileInfo - Dim fi As New MediaInfo.Fileinfo - For Each x As Settings.MetadataPerType In Meta - If x.FileType = lstMetaData.SelectedItems(0).ToString Then - fi = dEditMeta.ShowDialog(x.MetaData, False) - If Not fi Is Nothing Then - Meta.Remove(x) - Dim m As New Settings.MetadataPerType - m.FileType = x.FileType - m.MetaData = New MediaInfo.Fileinfo - m.MetaData = fi - Meta.Add(m) - LoadMetadata() - Me.SetApplyButton(True) - End If - Exit For - End If - Next - End Using - End If - End Sub - - Private Sub lstMetaData_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles lstMetaData.KeyDown - If e.KeyCode = Keys.Delete Then Me.RemoveMetaData() - End Sub - - Private Sub lstMetadata_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstMetaData.SelectedIndexChanged - If lstMetaData.SelectedItems.Count > 0 Then - btnEditMetaDataFT.Enabled = True - btnRemoveMetaDataFT.Enabled = True - txtDefFIExt.Text = String.Empty - Else - btnEditMetaDataFT.Enabled = False - btnRemoveMetaDataFT.Enabled = False - End If - End Sub - - Private Sub lstMovieExts_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles lstMovieExts.KeyDown - If e.KeyCode = Keys.Delete Then Me.RemoveMovieExt() - End Sub - - Private Sub lstNoStack_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles lstNoStack.KeyDown - If e.KeyCode = Keys.Delete Then Me.RemoveNoStack() - End Sub - - Private Sub lstShowFilters_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles lstShowFilters.KeyDown - If e.KeyCode = Keys.Delete Then Me.RemoveShowFilter() - End Sub - - Private Sub lstSortTokens_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles lstSortTokens.KeyDown - If e.KeyCode = Keys.Delete Then Me.RemoveSortToken() - End Sub - - Private Sub lstTVMetaData_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lstTVMetaData.DoubleClick - If Me.lstTVMetaData.SelectedItems.Count > 0 Then - Using dEditMeta As New dlgFileInfo - Dim fi As New MediaInfo.Fileinfo - For Each x As Settings.MetadataPerType In TVMeta - If x.FileType = lstTVMetaData.SelectedItems(0).ToString Then - fi = dEditMeta.ShowDialog(x.MetaData, True) - If Not fi Is Nothing Then - TVMeta.Remove(x) - Dim m As New Settings.MetadataPerType - m.FileType = x.FileType - m.MetaData = New MediaInfo.Fileinfo - m.MetaData = fi - TVMeta.Add(m) - LoadTVMetadata() - Me.SetApplyButton(True) - End If - Exit For - End If - Next - End Using - End If - End Sub - - Private Sub lstTVMetaData_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles lstTVMetaData.KeyDown - If e.KeyCode = Keys.Delete Then Me.RemoveTVMetaData() - End Sub - - Private Sub lstTVMetadata_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstTVMetaData.SelectedIndexChanged - If lstTVMetaData.SelectedItems.Count > 0 Then - btnEditTVMetaDataFT.Enabled = True - btnRemoveTVMetaDataFT.Enabled = True - txtTVDefFIExt.Text = String.Empty - Else - btnEditTVMetaDataFT.Enabled = False - btnRemoveTVMetaDataFT.Enabled = False - End If - End Sub - - Private Sub lvMovies_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lvMovies.ColumnClick - Me.lvMovies.ListViewItemSorter = New ListViewItemComparer(e.Column) - End Sub - - Private Sub lvMovies_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvMovies.DoubleClick - If lvMovies.SelectedItems.Count > 0 Then - Using dMovieSource As New dlgMovieSource - If dMovieSource.ShowDialog(Convert.ToInt32(lvMovies.SelectedItems(0).Text)) = Windows.Forms.DialogResult.OK Then - Me.RefreshSources() - Me.sResult.NeedsUpdate = True - Me.SetApplyButton(True) - End If - End Using - End If - End Sub - - Private Sub lvMovies_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles lvMovies.KeyDown - If e.KeyCode = Keys.Delete Then Me.RemoveMovieSource() - End Sub - - Private Sub lvShowRegex_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvShowRegex.DoubleClick - If Me.lvShowRegex.SelectedItems.Count > 0 Then Me.EditShowRegex(lvShowRegex.SelectedItems(0)) - End Sub - - Private Sub lvShowRegex_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles lvShowRegex.KeyDown - If e.KeyCode = Keys.Delete Then Me.RemoveRegex() - End Sub - - Private Sub lvShowRegex_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvShowRegex.SelectedIndexChanged - If Not String.IsNullOrEmpty(Me.btnAddShowRegex.Tag.ToString) Then Me.ClearRegex() - End Sub - - Private Sub lvTVSources_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lvTVSources.ColumnClick - Me.lvTVSources.ListViewItemSorter = New ListViewItemComparer(e.Column) - End Sub - - Private Sub lvTVSources_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvTVSources.DoubleClick - If lvTVSources.SelectedItems.Count > 0 Then - Using dTVSource As New dlgTVSource - If dTVSource.ShowDialog(Convert.ToInt32(lvTVSources.SelectedItems(0).Text)) = Windows.Forms.DialogResult.OK Then - Me.RefreshTVSources() - Me.sResult.NeedsUpdate = True - Me.SetApplyButton(True) - End If - End Using - End If - End Sub - - Private Sub lvTVSources_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles lvTVSources.KeyDown - If e.KeyCode = Keys.Delete Then Me.RemoveTVSource() - End Sub - - Private Sub rbAllSBanner_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbAllSBanner.CheckedChanged, rbAllSPoster.CheckedChanged - Me.SetApplyButton(True) - - Me.cbAllSPosterSize.Items.Clear() - - If Me.rbAllSBanner.Checked Then - Me.cbAllSPosterSize.Items.AddRange(New String() {Master.eLang.GetString(745, "None"), Master.eLang.GetString(746, "Blank"), Master.eLang.GetString(747, "Graphical"), Master.eLang.GetString(748, "Text")}) - Else - Me.cbAllSPosterSize.Items.AddRange(New String() {Master.eLang.GetString(322, "X-Large"), Master.eLang.GetString(323, "Large"), Master.eLang.GetString(324, "Medium"), Master.eLang.GetString(325, "Small"), Master.eLang.GetString(558, "Wide")}) - End If - Me.cbAllSPosterSize.SelectedIndex = 0 - End Sub - - Private Sub rbBanner_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbBanner.CheckedChanged, rbPoster.CheckedChanged - Me.SetApplyButton(True) - - Me.cbShowPosterSize.Items.Clear() - - If Me.rbBanner.Checked Then - Me.cbShowPosterSize.Items.AddRange(New String() {Master.eLang.GetString(745, "None"), Master.eLang.GetString(746, "Blank"), Master.eLang.GetString(747, "Graphical"), Master.eLang.GetString(748, "Text")}) - Else - Me.cbShowPosterSize.Items.AddRange(New String() {Master.eLang.GetString(322, "X-Large"), Master.eLang.GetString(323, "Large"), Master.eLang.GetString(324, "Medium"), Master.eLang.GetString(325, "Small"), Master.eLang.GetString(558, "Wide")}) - End If - Me.cbShowPosterSize.SelectedIndex = 0 - End Sub - - Private Sub rbBracketTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbBracketTrailer.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub rbDashTrailer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbDashTrailer.CheckedChanged - Me.SetApplyButton(True) - End Sub - - Private Sub rbETCustom_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbETCustom.CheckedChanged - Me.SetApplyButton(False) - Me.txtETHeight.Enabled = Me.rbETCustom.Checked - Me.txtETWidth.Enabled = Me.rbETCustom.Checked - Me.chkETPadding.Enabled = Me.rbETCustom.Checked - End Sub - - Private Sub rbETNative_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbETNative.CheckedChanged - Me.SetApplyButton(False) - If rbETNative.Checked Then - Me.txtETHeight.Text = String.Empty - Me.txtETWidth.Text = String.Empty - Me.chkETPadding.Checked = False - End If - End Sub - - Private Sub RefreshEpFilters() - Me.lstEpFilters.Items.Clear() - Me.lstEpFilters.Items.AddRange(Master.eSettings.EpFilterCustom.ToArray) - End Sub - - Private Sub RefreshHelpStrings(ByVal Language As String) - For Each sKey As String In dHelp.Keys - dHelp.Item(sKey) = Master.eLang.GetHelpString(sKey) - Next - End Sub - - Private Sub RefreshMovieFilters() - Me.lstFilters.Items.Clear() - Me.lstFilters.Items.AddRange(Master.eSettings.FilterCustom.ToArray) - End Sub - - Private Sub RefreshShowFilters() - Me.lstShowFilters.Items.Clear() - Me.lstShowFilters.Items.AddRange(Master.eSettings.ShowFilterCustom.ToArray) - End Sub - - Private Sub RefreshSources() - Dim lvItem As ListViewItem - - lvMovies.Items.Clear() - Master.DB.LoadMovieSourcesFromDB() - For Each s As Structures.MovieSource In Master.MovieSources - lvItem = New ListViewItem(s.id) - lvItem.SubItems.Add(s.Name) - lvItem.SubItems.Add(s.Path) - lvItem.SubItems.Add(If(s.Recursive, "Yes", "No")) - lvItem.SubItems.Add(If(s.UseFolderName, "Yes", "No")) - lvItem.SubItems.Add(If(s.IsSingle, "Yes", "No")) - lvMovies.Items.Add(lvItem) - Next - End Sub - - Private Sub RefreshTVSources() - Dim lvItem As ListViewItem - Master.DB.LoadTVSourcesFromDB() - lvTVSources.Items.Clear() - Using SQLcommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() - SQLcommand.CommandText = "SELECT * FROM TVSources;" - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLreader.Read - lvItem = New ListViewItem(SQLreader("ID").ToString) - lvItem.SubItems.Add(SQLreader("Name").ToString) - lvItem.SubItems.Add(SQLreader("Path").ToString) - lvTVSources.Items.Add(lvItem) - End While - End Using - End Using - End Sub - - Private Sub RefreshValidExts() - Me.lstMovieExts.Items.Clear() - Me.lstMovieExts.Items.AddRange(Master.eSettings.ValidExts.ToArray) - End Sub - - Private Sub RemoveCurrPanel() - If Me.pnlMain.Controls.Count > 0 Then - Me.pnlMain.Controls.Remove(Me.currPanel) - End If - End Sub - - Private Sub RemoveEpFilter() - If Me.lstEpFilters.Items.Count > 0 AndAlso Me.lstEpFilters.SelectedItems.Count > 0 Then - While Me.lstEpFilters.SelectedItems.Count > 0 - Me.lstEpFilters.Items.Remove(Me.lstEpFilters.SelectedItems(0)) - End While - Me.SetApplyButton(True) - Me.sResult.NeedsRefresh = True - End If - End Sub - - Private Sub RemoveFilter() - If Me.lstFilters.Items.Count > 0 AndAlso Me.lstFilters.SelectedItems.Count > 0 Then - While Me.lstFilters.SelectedItems.Count > 0 - Me.lstFilters.Items.Remove(Me.lstFilters.SelectedItems(0)) - End While - Me.SetApplyButton(True) - Me.sResult.NeedsRefresh = True - End If - End Sub - - Private Sub RemoveMetaData() - If Me.lstMetaData.SelectedItems.Count > 0 Then - For Each x As Settings.MetadataPerType In Meta - If x.FileType = lstMetaData.SelectedItems(0).ToString Then - Meta.Remove(x) - LoadMetadata() - Me.SetApplyButton(True) - Exit For - End If - Next - End If - End Sub - - Private Sub RemoveMovieExt() - If lstMovieExts.Items.Count > 0 AndAlso lstMovieExts.SelectedItems.Count > 0 Then - While Me.lstMovieExts.SelectedItems.Count > 0 - Me.lstMovieExts.Items.Remove(Me.lstMovieExts.SelectedItems(0)) - End While - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - End If - End Sub - - Private Sub RemoveMovieSource() - Try - If Me.lvMovies.SelectedItems.Count > 0 Then - If MsgBox(Master.eLang.GetString(418, "Are you sure you want to remove the selected sources? This will remove the movies from these sources from the Ember database."), MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Master.eLang.GetString(104, "Are You Sure?")) = MsgBoxResult.Yes Then - Me.lvMovies.BeginUpdate() - - Using SQLtransaction As SQLite.SQLiteTransaction = Master.DB.MediaDBConn.BeginTransaction() - Using SQLcommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() - Dim parSource As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parSource", DbType.String, 0, "source") - While Me.lvMovies.SelectedItems.Count > 0 - parSource.Value = lvMovies.SelectedItems(0).SubItems(1).Text - SQLcommand.CommandText = "SELECT Id FROM movies WHERE source = (?);" - Using SQLReader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLReader.Read - Master.DB.DeleteFromDB(Convert.ToInt64(SQLReader("ID")), True) - End While - End Using - SQLcommand.CommandText = String.Concat("DELETE FROM sources WHERE name = (?);") - SQLcommand.ExecuteNonQuery() - lvMovies.Items.Remove(lvMovies.SelectedItems(0)) - End While - End Using - SQLtransaction.Commit() - End Using - - Me.lvMovies.Sort() - Me.lvMovies.EndUpdate() - Me.lvMovies.Refresh() - - Functions.GetListOfSources() - - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - End If - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub RemoveNoStack() - If lstNoStack.Items.Count > 0 AndAlso lstNoStack.SelectedItems.Count > 0 Then - While Me.lstNoStack.SelectedItems.Count > 0 - Me.lstNoStack.Items.Remove(Me.lstNoStack.SelectedItems(0)) - End While - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - End If - End Sub - - Private Sub RemoveRegex() - Dim ID As Integer - For Each lItem As ListViewItem In lvShowRegex.SelectedItems - ID = Convert.ToInt32(lItem.Text) - Dim selRex = From lRegex As Settings.TVShowRegEx In Me.ShowRegex Where lRegex.ID = ID - If selRex.Count > 0 Then - Me.ShowRegex.Remove(selRex(0)) - Me.SetApplyButton(True) - End If - Next - Me.LoadShowRegex() - End Sub - - Private Sub RemoveShowFilter() - If Me.lstShowFilters.Items.Count > 0 AndAlso Me.lstShowFilters.SelectedItems.Count > 0 Then - While Me.lstShowFilters.SelectedItems.Count > 0 - Me.lstShowFilters.Items.Remove(Me.lstShowFilters.SelectedItems(0)) - End While - Me.SetApplyButton(True) - Me.sResult.NeedsRefresh = True - End If - End Sub - - Private Sub RemoveSortToken() - If Me.lstSortTokens.Items.Count > 0 AndAlso Me.lstSortTokens.SelectedItems.Count > 0 Then - While Me.lstSortTokens.SelectedItems.Count > 0 - Me.lstSortTokens.Items.Remove(Me.lstSortTokens.SelectedItems(0)) - End While - Me.sResult.NeedsRefresh = True - Me.SetApplyButton(True) - End If - End Sub - - Private Sub RemoveTVMetaData() - If Me.lstTVMetaData.SelectedItems.Count > 0 Then - For Each x As Settings.MetadataPerType In TVMeta - If x.FileType = lstTVMetaData.SelectedItems(0).ToString Then - TVMeta.Remove(x) - LoadTVMetadata() - Me.SetApplyButton(True) - Exit For - End If - Next - End If - End Sub - - Private Sub RemoveTVSource() - Try - If Me.lvTVSources.SelectedItems.Count > 0 Then - If MsgBox(Master.eLang.GetString(418, "Are you sure you want to remove the selected sources? This will remove the TV Shows from these sources from the Ember database."), MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Master.eLang.GetString(104, "Are You Sure?")) = MsgBoxResult.Yes Then - Me.lvTVSources.BeginUpdate() - - Using SQLtransaction As SQLite.SQLiteTransaction = Master.DB.MediaDBConn.BeginTransaction() - Using SQLcommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() - Dim parSource As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parSource", DbType.String, 0, "source") - While Me.lvTVSources.SelectedItems.Count > 0 - parSource.Value = lvTVSources.SelectedItems(0).SubItems(1).Text - SQLcommand.CommandText = "SELECT Id FROM TVShows WHERE Source = (?);" - Using SQLReader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLReader.Read - Master.DB.DeleteTVShowFromDB(Convert.ToInt64(SQLReader("ID")), True) - End While - End Using - SQLcommand.CommandText = String.Concat("DELETE FROM TVSources WHERE name = (?);") - SQLcommand.ExecuteNonQuery() - lvTVSources.Items.Remove(lvTVSources.SelectedItems(0)) - End While - End Using - SQLtransaction.Commit() - End Using - - Me.lvTVSources.Sort() - Me.lvTVSources.EndUpdate() - Me.lvTVSources.Refresh() - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - End If - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub RenumberRegex() - For i As Integer = 0 To Me.ShowRegex.Count - 1 - Me.ShowRegex(i).ID = i - Next - End Sub - - Private Sub SaveSettings(ByVal isApply As Boolean) - Try - Master.eSettings.FilterCustom.Clear() - Master.eSettings.FilterCustom.AddRange(Me.lstFilters.Items.OfType(Of String).ToList) - If Master.eSettings.FilterCustom.Count <= 0 Then Master.eSettings.NoFilters = True - Master.eSettings.ProperCase = Me.chkProperCase.Checked - - Master.eSettings.ShowFilterCustom.Clear() - Master.eSettings.ShowFilterCustom.AddRange(Me.lstShowFilters.Items.OfType(Of String).ToList) - If Master.eSettings.ShowFilterCustom.Count <= 0 Then Master.eSettings.NoShowFilters = True - Master.eSettings.ShowProperCase = Me.chkShowProperCase.Checked - - Master.eSettings.EpFilterCustom.Clear() - Master.eSettings.EpFilterCustom.AddRange(Me.lstEpFilters.Items.OfType(Of String).ToList) - If Master.eSettings.EpFilterCustom.Count <= 0 Then Master.eSettings.NoEpFilters = True - Master.eSettings.EpProperCase = Me.chkEpProperCase.Checked - - If Me.tcCleaner.SelectedTab.Name = "tpExpert" Then - Master.eSettings.ExpertCleaner = True - Master.eSettings.CleanFolderJPG = False - Master.eSettings.CleanMovieTBN = False - Master.eSettings.CleanMovieTBNB = False - Master.eSettings.CleanFanartJPG = False - Master.eSettings.CleanMovieFanartJPG = False - Master.eSettings.CleanMovieNFO = False - Master.eSettings.CleanMovieNFOB = False - Master.eSettings.CleanPosterTBN = False - Master.eSettings.CleanPosterJPG = False - Master.eSettings.CleanMovieJPG = False - Master.eSettings.CleanMovieNameJPG = False - Master.eSettings.CleanDotFanartJPG = False - Master.eSettings.CleanExtraThumbs = False - Master.eSettings.CleanWhitelistVideo = Me.chkWhitelistVideo.Checked - Master.eSettings.CleanWhitelistExts.Clear() - Master.eSettings.CleanWhitelistExts.AddRange(Me.lstWhitelist.Items.OfType(Of String).ToList) - Else - Master.eSettings.ExpertCleaner = False - Master.eSettings.CleanFolderJPG = Me.chkCleanFolderJPG.Checked - Master.eSettings.CleanMovieTBN = Me.chkCleanMovieTBN.Checked - Master.eSettings.CleanMovieTBNB = Me.chkCleanMovieTBNb.Checked - Master.eSettings.CleanFanartJPG = Me.chkCleanFanartJPG.Checked - Master.eSettings.CleanMovieFanartJPG = Me.chkCleanMovieFanartJPG.Checked - Master.eSettings.CleanMovieNFO = Me.chkCleanMovieNFO.Checked - Master.eSettings.CleanMovieNFOB = Me.chkCleanMovieNFOb.Checked - Master.eSettings.CleanPosterTBN = Me.chkCleanPosterTBN.Checked - Master.eSettings.CleanPosterJPG = Me.chkCleanPosterJPG.Checked - Master.eSettings.CleanMovieJPG = Me.chkCleanMovieJPG.Checked - Master.eSettings.CleanMovieNameJPG = Me.chkCleanMovieNameJPG.Checked - Master.eSettings.CleanDotFanartJPG = Me.chkCleanDotFanartJPG.Checked - Master.eSettings.CleanExtraThumbs = Me.chkCleanExtrathumbs.Checked - Master.eSettings.CleanWhitelistVideo = False - Master.eSettings.CleanWhitelistExts.Clear() - End If - Master.eSettings.LogErrors = Me.chkLogErrors.Checked - Master.eSettings.OverwriteNfo = Me.chkOverwriteNfo.Checked - Master.eSettings.ValidExts.Clear() - Master.eSettings.ValidExts.AddRange(lstMovieExts.Items.OfType(Of String).ToList) - Master.eSettings.NoStackExts.Clear() - Master.eSettings.NoStackExts.AddRange(lstNoStack.Items.OfType(Of String).ToList) - Master.eSettings.CheckUpdates = chkUpdates.Checked - Master.eSettings.InfoPanelAnim = chkInfoPanelAnim.Checked - 'Master.eSettings.YAMJSetsCompatible = chkYAMJCompatibleSets.Checked - Master.eSettings.CertificationLang = Me.cbCert.Text - If Not String.IsNullOrEmpty(Me.cbCert.Text) Then - Master.eSettings.UseCertForMPAA = Me.chkUseCertForMPAA.Checked - Else - Master.eSettings.UseCertForMPAA = False - End If - Master.eSettings.ForceTitle = Me.cbForce.Text - Master.eSettings.ScanMediaInfo = Me.chkScanMediaInfo.Checked - Master.eSettings.ScanTVMediaInfo = Me.chkTVScanMetaData.Checked - Master.eSettings.FullCast = Me.chkFullCast.Checked - Master.eSettings.FullCrew = Me.chkFullCrew.Checked - Master.eSettings.CastImagesOnly = Me.chkCastWithImg.Checked - Master.eSettings.MoviePosterCol = Me.chkMoviePosterCol.Checked - Master.eSettings.MovieFanartCol = Me.chkMovieFanartCol.Checked - Master.eSettings.MovieInfoCol = Me.chkMovieInfoCol.Checked - Master.eSettings.MovieTrailerCol = Me.chkMovieTrailerCol.Checked - Master.eSettings.MovieSubCol = Me.chkMovieSubCol.Checked - Master.eSettings.MovieExtraCol = Me.chkMovieExtraCol.Checked - - Master.eSettings.PreferredPosterSize = DirectCast(Me.cbPosterSize.SelectedIndex, Enums.PosterSize) - Master.eSettings.PreferredFanartSize = DirectCast(Me.cbFanartSize.SelectedIndex, Enums.FanartSize) - If Me.rbBanner.Checked Then - Master.eSettings.IsShowBanner = True - Master.eSettings.PreferredShowBannerType = DirectCast(Me.cbShowPosterSize.SelectedIndex, Enums.ShowBannerType) - Else - Master.eSettings.IsShowBanner = False - Master.eSettings.PreferredShowPosterSize = DirectCast(Me.cbShowPosterSize.SelectedIndex, Enums.PosterSize) - End If - If Me.rbAllSBanner.Checked Then - Master.eSettings.IsAllSBanner = True - Master.eSettings.PreferredAllSBannerType = DirectCast(Me.cbAllSPosterSize.SelectedIndex, Enums.ShowBannerType) - Else - Master.eSettings.IsAllSBanner = False - Master.eSettings.PreferredAllSPosterSize = DirectCast(Me.cbAllSPosterSize.SelectedIndex, Enums.PosterSize) - End If - Master.eSettings.PreferredShowFanartSize = DirectCast(Me.cbShowFanartSize.SelectedIndex, Enums.FanartSize) - Master.eSettings.PreferredEpFanartSize = DirectCast(Me.cbEpFanartSize.SelectedIndex, Enums.FanartSize) - Master.eSettings.PreferredSeasonPosterSize = DirectCast(Me.cbSeaPosterSize.SelectedIndex, Enums.SeasonPosterType) - Master.eSettings.PreferredEpFanartSize = DirectCast(Me.cbSeaFanartSize.SelectedIndex, Enums.FanartSize) - Master.eSettings.AutoET = Me.chkAutoETSize.Checked - Master.eSettings.AutoETSize = DirectCast(Me.cbAutoETSize.SelectedIndex, Enums.FanartSize) - Master.eSettings.FanartPrefSizeOnly = Me.chkFanartOnly.Checked - Master.eSettings.PosterPrefSizeOnly = Me.chkPosterOnly.Checked - Master.eSettings.PosterQuality = Me.tbPosterQual.Value - Master.eSettings.FanartQuality = Me.tbFanartQual.Value - Master.eSettings.OverwritePoster = Me.chkOverwritePoster.Checked - Master.eSettings.OverwriteFanart = Me.chkOverwriteFanart.Checked - Master.eSettings.ShowPosterQuality = Me.tbShowPosterQual.Value - Master.eSettings.ShowFanartQuality = Me.tbShowFanartQual.Value - Master.eSettings.OverwriteShowPoster = Me.chkOverwriteShowPoster.Checked - Master.eSettings.OverwriteShowFanart = Me.chkOverwriteShowFanart.Checked - Master.eSettings.AllSPosterQuality = Me.tbAllSPosterQual.Value - Master.eSettings.OverwriteAllSPoster = Me.chkOverwriteAllSPoster.Checked - Master.eSettings.EpPosterQuality = Me.tbEpPosterQual.Value - Master.eSettings.EpFanartQuality = Me.tbEpFanartQual.Value - Master.eSettings.OverwriteEpPoster = Me.chkOverwriteEpPoster.Checked - Master.eSettings.OverwriteEpFanart = Me.chkOverwriteEpFanart.Checked - Master.eSettings.SeasonPosterQuality = Me.tbSeaPosterQual.Value - Master.eSettings.SeasonFanartQuality = Me.tbSeaFanartQual.Value - Master.eSettings.OverwriteSeasonPoster = Me.chkSeaOverwritePoster.Checked - Master.eSettings.OverwriteSeasonFanart = Me.chkSeaOverwriteFanart.Checked - Master.eSettings.MovieTBN = Me.chkMovieTBN.Checked - Master.eSettings.MovieNameTBN = Me.chkMovieNameTBN.Checked - Master.eSettings.MovieJPG = Me.chkMovieJPG.Checked - Master.eSettings.MovieNameJPG = Me.chkMovieNameJPG.Checked - Master.eSettings.MovieNameDashPosterJPG = Me.chkMovieNameDashPosterJPG.Checked - Master.eSettings.PosterTBN = Me.chkPosterTBN.Checked - Master.eSettings.PosterJPG = Me.chkPosterJPG.Checked - Master.eSettings.FolderJPG = Me.chkFolderJPG.Checked - Master.eSettings.FanartJPG = Me.chkFanartJPG.Checked - Master.eSettings.MovieNameFanartJPG = Me.chkMovieNameFanartJPG.Checked - Master.eSettings.MovieNameDotFanartJPG = Me.chkMovieNameDotFanartJPG.Checked - Master.eSettings.MovieNFO = Me.chkMovieNFO.Checked - Master.eSettings.MovieNameNFO = Me.chkMovieNameNFO.Checked - Master.eSettings.MovieNameMultiOnly = Me.chkMovieNameMultiOnly.Checked - Master.eSettings.DashTrailer = Me.rbDashTrailer.Checked - 'Master.eSettings.VideoTSParent = Me.chkVideoTSParent.Checked - Master.eSettings.LockPlot = Me.chkLockPlot.Checked - Master.eSettings.LockOutline = Me.chkLockOutline.Checked - Master.eSettings.LockTitle = Me.chkLockTitle.Checked - Master.eSettings.LockTagline = Me.chkLockTagline.Checked - Master.eSettings.LockRating = Me.chkLockRating.Checked - Master.eSettings.LockStudio = Me.chkLockRealStudio.Checked - Master.eSettings.LockGenre = Me.chkLockGenre.Checked - Master.eSettings.LockTrailer = Me.chkLockTrailer.Checked - Master.eSettings.SingleScrapeImages = Me.chkSingleScrapeImages.Checked - Master.eSettings.ClickScrape = Me.chkClickScrape.Checked - Master.eSettings.AskCheckboxScrape = Me.chkAskCheckboxScrape.Checked - Master.eSettings.MarkNew = Me.chkMarkNew.Checked - Master.eSettings.ResizeFanart = Me.chkResizeFanart.Checked - Master.eSettings.FanartHeight = If(Not String.IsNullOrEmpty(Me.txtFanartHeight.Text), Convert.ToInt32(Me.txtFanartHeight.Text), 0) - Master.eSettings.FanartWidth = If(Not String.IsNullOrEmpty(Me.txtFanartWidth.Text), Convert.ToInt32(Me.txtFanartWidth.Text), 0) - Master.eSettings.ResizePoster = Me.chkResizePoster.Checked - Master.eSettings.PosterHeight = If(Not String.IsNullOrEmpty(Me.txtPosterHeight.Text), Convert.ToInt32(Me.txtPosterHeight.Text), 0) - Master.eSettings.PosterWidth = If(Not String.IsNullOrEmpty(Me.txtPosterWidth.Text), Convert.ToInt32(Me.txtPosterWidth.Text), 0) - Master.eSettings.ResizeShowFanart = Me.chkResizeShowFanart.Checked - Master.eSettings.ShowFanartHeight = If(Not String.IsNullOrEmpty(Me.txtShowFanartHeight.Text), Convert.ToInt32(Me.txtShowFanartHeight.Text), 0) - Master.eSettings.ShowFanartWidth = If(Not String.IsNullOrEmpty(Me.txtShowFanartWidth.Text), Convert.ToInt32(Me.txtShowFanartWidth.Text), 0) - Master.eSettings.ResizeShowPoster = Me.chkResizeShowPoster.Checked - Master.eSettings.ShowPosterHeight = If(Not String.IsNullOrEmpty(Me.txtShowPosterHeight.Text), Convert.ToInt32(Me.txtShowPosterHeight.Text), 0) - Master.eSettings.ShowPosterWidth = If(Not String.IsNullOrEmpty(Me.txtShowPosterWidth.Text), Convert.ToInt32(Me.txtShowPosterWidth.Text), 0) - Master.eSettings.ResizeAllSPoster = Me.chkResizeAllSPoster.Checked - Master.eSettings.AllSPosterHeight = If(Not String.IsNullOrEmpty(Me.txtAllSPosterHeight.Text), Convert.ToInt32(Me.txtAllSPosterHeight.Text), 0) - Master.eSettings.AllSPosterWidth = If(Not String.IsNullOrEmpty(Me.txtAllSPosterWidth.Text), Convert.ToInt32(Me.txtAllSPosterWidth.Text), 0) - Master.eSettings.ResizeEpFanart = Me.chkResizeEpFanart.Checked - Master.eSettings.EpFanartHeight = If(Not String.IsNullOrEmpty(Me.txtEpFanartHeight.Text), Convert.ToInt32(Me.txtEpFanartHeight.Text), 0) - Master.eSettings.EpFanartWidth = If(Not String.IsNullOrEmpty(Me.txtEpFanartWidth.Text), Convert.ToInt32(Me.txtEpFanartWidth.Text), 0) - Master.eSettings.ResizeEpPoster = Me.chkResizeEpPoster.Checked - Master.eSettings.EpPosterHeight = If(Not String.IsNullOrEmpty(Me.txtEpPosterHeight.Text), Convert.ToInt32(Me.txtEpPosterHeight.Text), 0) - Master.eSettings.EpPosterWidth = If(Not String.IsNullOrEmpty(Me.txtEpPosterWidth.Text), Convert.ToInt32(Me.txtEpPosterWidth.Text), 0) - Master.eSettings.ResizeSeasonFanart = Me.chkSeaResizeFanart.Checked - Master.eSettings.SeasonFanartHeight = If(Not String.IsNullOrEmpty(Me.txtSeaFanartHeight.Text), Convert.ToInt32(Me.txtSeaFanartHeight.Text), 0) - Master.eSettings.SeasonFanartWidth = If(Not String.IsNullOrEmpty(Me.txtSeaFanartWidth.Text), Convert.ToInt32(Me.txtSeaFanartWidth.Text), 0) - Master.eSettings.ResizeSeasonPoster = Me.chkSeaResizePoster.Checked - Master.eSettings.SeasonPosterHeight = If(Not String.IsNullOrEmpty(Me.txtSeaPosterHeight.Text), Convert.ToInt32(Me.txtSeaPosterHeight.Text), 0) - Master.eSettings.SeasonPosterWidth = If(Not String.IsNullOrEmpty(Me.txtSeaPosterWidth.Text), Convert.ToInt32(Me.txtSeaPosterWidth.Text), 0) - - If Not String.IsNullOrEmpty(txtAutoThumbs.Text) AndAlso Convert.ToInt32(txtAutoThumbs.Text) > 0 Then - Master.eSettings.AutoThumbs = Convert.ToInt32(txtAutoThumbs.Text) - Master.eSettings.AutoThumbsNoSpoilers = Me.chkNoSpoilers.Checked - Master.eSettings.UseETasFA = Me.chkUseETasFA.Checked - Else - Master.eSettings.AutoThumbs = 0 - Master.eSettings.AutoThumbsNoSpoilers = False - Master.eSettings.UseETasFA = False - End If - Master.eSettings.BDPath = Me.txtBDPath.Text - If Not String.IsNullOrEmpty(Me.txtBDPath.Text) Then - Master.eSettings.AutoBD = Me.chkAutoBD.Checked - Else - Master.eSettings.AutoBD = False - End If - Master.eSettings.UseMIDuration = Me.chkUseMIDuration.Checked - Master.eSettings.RuntimeMask = Me.txtRuntimeFormat.Text - Master.eSettings.UseImgCache = Me.chkUseImgCache.Checked - Master.eSettings.UseImgCacheUpdaters = Me.chkUseImgCacheUpdaters.Checked - Master.eSettings.PersistImgCache = Me.chkPersistImgCache.Checked - Master.eSettings.SkipLessThan = Convert.ToInt32(Me.txtSkipLessThan.Text) - Master.eSettings.SkipStackSizeCheck = Me.chkSkipStackedSizeCheck.Checked - Master.eSettings.SkipLessThanEp = Convert.ToInt32(Me.txtTVSkipLessThan.Text) - Master.eSettings.NoSaveImagesToNfo = Me.chkNoSaveImagesToNfo.Checked - - If Me.cbTrailerQuality.SelectedValue IsNot Nothing Then - Master.eSettings.PreferredTrailerQuality = DirectCast(Me.cbTrailerQuality.SelectedValue, Enums.TrailerQuality) - End If - - Master.eSettings.DownloadTrailers = Me.chkDownloadTrailer.Checked - Master.eSettings.UpdaterTrailers = Me.chkUpdaterTrailer.Checked - - Master.eSettings.SingleScrapeTrailer = Me.chkSingleScrapeTrailer.Checked - Master.eSettings.UpdaterTrailersNoDownload = Me.chkNoDLTrailer.Checked - Master.eSettings.OverwriteTrailer = Me.chkOverwriteTrailer.Checked - Master.eSettings.DeleteAllTrailers = Me.chkDeleteAllTrailers.Checked - - - If Me.lbGenre.CheckedItems.Count > 0 Then - If Me.lbGenre.CheckedItems.Contains(String.Format("{0}", Master.eLang.GetString(569, Master.eLang.All))) Then - Master.eSettings.GenreFilter = String.Format("{0}", Master.eLang.GetString(569, Master.eLang.All)) - Else - Dim strGenre As String = String.Empty - Dim iChecked = From iCheck In Me.lbGenre.CheckedItems - strGenre = Strings.Join(iChecked.ToArray, ",") - Master.eSettings.GenreFilter = strGenre.Trim - End If - End If - - Master.eSettings.ShowDims = Me.chkShowDims.Checked - Master.eSettings.NoDisplayFanart = Me.chkNoDisplayFanart.Checked - Master.eSettings.NoDisplayPoster = Me.chkNoDisplayPoster.Checked - Master.eSettings.OutlineForPlot = Me.chkOutlineForPlot.Checked - - Master.eSettings.AllwaysDisplayGenresText = Me.chkShowGenresText.Checked - Master.eSettings.DisplayYear = Me.chkDisplayYear.Checked - Master.eSettings.ETNative = Me.rbETNative.Checked - Dim iWidth As Integer = If(Me.txtETWidth.Text.Length > 0, Convert.ToInt32(Me.txtETWidth.Text), 0) - Dim iHeight As Integer = If(Me.txtETHeight.Text.Length > 0, Convert.ToInt32(Me.txtETHeight.Text), 0) - If Me.rbETCustom.Checked AndAlso iWidth > 0 AndAlso iHeight > 0 Then - Master.eSettings.ETWidth = iWidth - Master.eSettings.ETHeight = iHeight - Master.eSettings.ETPadding = Me.chkETPadding.Checked - Else - Master.eSettings.ETWidth = 0 - Master.eSettings.ETHeight = 0 - Master.eSettings.ETPadding = False - End If - - Master.eSettings.SortTokens.Clear() - Master.eSettings.SortTokens.AddRange(lstSortTokens.Items.OfType(Of String).ToList) - If Master.eSettings.SortTokens.Count <= 0 Then Master.eSettings.NoTokens = True - - Master.eSettings.LevTolerance = If(Not String.IsNullOrEmpty(Me.txtCheckTitleTol.Text), Convert.ToInt32(Me.txtCheckTitleTol.Text), 0) - Master.eSettings.AutoDetectVTS = Me.chkAutoDetectVTS.Checked - Master.eSettings.FlagLang = If(Me.cbLanguages.Text = Master.eLang.Disabled, String.Empty, Me.cbLanguages.Text) - Master.eSettings.TVFlagLang = If(Me.cboTVMetaDataOverlay.Text = Master.eLang.Disabled, String.Empty, Me.cboTVMetaDataOverlay.Text) - Master.eSettings.Language = Me.cbIntLang.Text - Me.lbGenre.Items.Clear() - LoadGenreLangs() - FillGenres() - Master.eSettings.FieldTitle = Me.chkTitle.Checked - Master.eSettings.FieldYear = Me.chkYear.Checked - Master.eSettings.FieldMPAA = Me.chkMPAA.Checked - Master.eSettings.FieldCert = Me.chkCertification.Checked - Master.eSettings.FieldRelease = Me.chkRelease.Checked - Master.eSettings.FieldRuntime = Me.chkRuntime.Checked - Master.eSettings.FieldRating = Me.chkRating.Checked - Master.eSettings.FieldVotes = Me.chkVotes.Checked - Master.eSettings.FieldStudio = Me.chkStudio.Checked - Master.eSettings.FieldGenre = Me.chkGenre.Checked - Master.eSettings.FieldTrailer = Me.chkTrailer.Checked - Master.eSettings.FieldTagline = Me.chkTagline.Checked - Master.eSettings.FieldOutline = Me.chkOutline.Checked - Master.eSettings.FieldPlot = Me.chkPlot.Checked - Master.eSettings.FieldCast = Me.chkCast.Checked - Master.eSettings.FieldDirector = Me.chkDirector.Checked - Master.eSettings.FieldWriters = Me.chkWriters.Checked - Master.eSettings.FieldProducers = Me.chkProducers.Checked - Master.eSettings.FieldMusic = Me.chkMusicBy.Checked - Master.eSettings.FieldCrew = Me.chkCrew.Checked - Master.eSettings.Field250 = Me.chkTop250.Checked - Master.eSettings.FieldCountry = Me.chkCountry.Checked - - If Not String.IsNullOrEmpty(Me.txtActorLimit.Text) Then - Master.eSettings.ActorLimit = Convert.ToInt32(Me.txtActorLimit.Text) - Else - Master.eSettings.ActorLimit = 0 - End If - If Not String.IsNullOrEmpty(Me.txtGenreLimit.Text) Then - Master.eSettings.GenreLimit = Convert.ToInt32(Me.txtGenreLimit.Text) - Else - Master.eSettings.GenreLimit = 0 - End If - - Master.eSettings.MissingFilterPoster = Me.chkMissingPoster.Checked - Master.eSettings.MissingFilterFanart = Me.chkMissingFanart.Checked - Master.eSettings.MissingFilterNFO = Me.chkMissingNFO.Checked - Master.eSettings.MissingFilterTrailer = Me.chkMissingTrailer.Checked - Master.eSettings.MissingFilterSubs = Me.chkMissingSubs.Checked - Master.eSettings.MissingFilterExtras = Me.chkMissingExtra.Checked - - Master.eSettings.MovieTheme = Me.cbMovieTheme.Text - Master.eSettings.TVShowTheme = Me.cbTVShowTheme.Text - Master.eSettings.TVEpTheme = Me.cbEpTheme.Text - Master.eSettings.MetadataPerFileType.Clear() - Master.eSettings.MetadataPerFileType.AddRange(Me.Meta) - Master.eSettings.TVMetadataperFileType.Clear() - Master.eSettings.TVMetadataperFileType.AddRange(Me.TVMeta) - Master.eSettings.EnableIFOScan = Me.chkIFOScan.Checked - Master.eSettings.CleanDB = Me.chkCleanDB.Checked - Master.eSettings.IgnoreLastScan = Me.chkIgnoreLastScan.Checked - Master.eSettings.TVCleanDB = Me.chkTVCleanDB.Checked - Master.eSettings.TVIgnoreLastScan = Me.chkTVIgnoreLastScan.Checked - Master.eSettings.TVShowRegexes.Clear() - Master.eSettings.TVShowRegexes.AddRange(Me.ShowRegex) - If String.IsNullOrEmpty(Me.cbRatingRegion.Text) Then - Master.eSettings.ShowRatingRegion = "usa" - Else - Master.eSettings.ShowRatingRegion = Me.cbRatingRegion.Text - End If - Master.eSettings.SeasonAllTBN = Me.chkSeasonAllTBN.Checked - Master.eSettings.SeasonAllJPG = Me.chkSeasonAllJPG.Checked - Master.eSettings.SeasonAllPosterJPG = Me.chkSeasonAllPosterJPG.Checked - Master.eSettings.ShowTBN = Me.chkShowTBN.Checked - Master.eSettings.ShowJPG = Me.chkShowJPG.Checked - Master.eSettings.ShowFolderJPG = Me.chkShowFolderJPG.Checked - Master.eSettings.ShowPosterTBN = Me.chkShowPosterTBN.Checked - Master.eSettings.ShowPosterJPG = Me.chkShowPosterJPG.Checked - Master.eSettings.ShowBannerJPG = Me.chkShowBannerJPG.Checked - Master.eSettings.ShowFanartJPG = Me.chkShowFanartJPG.Checked - Master.eSettings.ShowDashFanart = Me.chkShowDashFanart.Checked - Master.eSettings.ShowDotFanart = Me.chkShowDotFanart.Checked - Master.eSettings.SeasonXX = Me.chkSeasonXXTBN.Checked - Master.eSettings.SeasonX = Me.chkSeasonXTBN.Checked - Master.eSettings.SeasonXXDashPosterJPG = Me.chkSeasonXXDashPosterJPG.Checked - Master.eSettings.SeasonPosterTBN = Me.chkSeasonPosterTBN.Checked - Master.eSettings.SeasonPosterJPG = Me.chkSeasonPosterJPG.Checked - Master.eSettings.SeasonNameTBN = Me.chkSeasonNameTBN.Checked - Master.eSettings.SeasonNameJPG = Me.chkSeasonNameJPG.Checked - Master.eSettings.SeasonFolderJPG = Me.chkSeasonFolderJPG.Checked - Master.eSettings.SeasonFanartJPG = Me.chkSeasonFanartJPG.Checked - Master.eSettings.SeasonDashFanart = Me.chkSeasonDashFanart.Checked - Master.eSettings.SeasonXXDashFanartJPG = Me.chkSeasonXXDashFanartJPG.Checked - Master.eSettings.SeasonDotFanart = Me.chkSeasonDotFanart.Checked - Master.eSettings.EpisodeTBN = Me.chkEpisodeTBN.Checked - Master.eSettings.EpisodeJPG = Me.chkEpisodeJPG.Checked - Master.eSettings.EpisodeDashThumbJPG = Me.chkEpisodeDashThumbJPG.Checked - Master.eSettings.EpisodeDashFanart = Me.chkEpisodeDashFanart.Checked - Master.eSettings.EpisodeDotFanart = Me.chkEpisodeDotFanart.Checked - Master.eSettings.ShowPosterCol = Me.chkShowPosterCol.Checked - Master.eSettings.ShowFanartCol = Me.chkShowFanartCol.Checked - Master.eSettings.ShowNfoCol = Me.chkShowNfoCol.Checked - Master.eSettings.SeasonPosterCol = Me.chkSeasonPosterCol.Checked - Master.eSettings.SeasonFanartCol = Me.chkSeasonFanartCol.Checked - Master.eSettings.EpisodePosterCol = Me.chkEpisodePosterCol.Checked - Master.eSettings.EpisodeFanartCol = Me.chkEpisodeFanartCol.Checked - Master.eSettings.EpisodeNfoCol = Me.chkEpisodeNfoCol.Checked - Master.eSettings.SourceFromFolder = Me.chkSourceFromFolder.Checked - Master.eSettings.SortBeforeScan = Me.chkSortBeforeScan.Checked - If tLangList.Count > 0 Then - Dim tLang As String = tLangList.FirstOrDefault(Function(l) l.LongLang = Me.cbTVLanguage.Text).ShortLang - If Not String.IsNullOrEmpty(tLang) Then - Master.eSettings.TVDBLanguage = tLang - Else - Master.eSettings.TVDBLanguage = "en" - End If - Else - Master.eSettings.TVDBLanguage = "en" - End If - Master.eSettings.TVDBLanguages = Me.tLangList - If Not String.IsNullOrEmpty(Me.txtTVDBMirror.Text) Then - Master.eSettings.TVDBMirror = Strings.Replace(Me.txtTVDBMirror.Text, "http://", String.Empty) - Else - Master.eSettings.TVDBMirror = "thetvdb.com" - End If - - If Not String.IsNullOrEmpty(Me.txtProxyURI.Text) AndAlso Not String.IsNullOrEmpty(Me.txtProxyPort.Text) Then - Master.eSettings.ProxyURI = Me.txtProxyURI.Text - Master.eSettings.ProxyPort = Convert.ToInt32(Me.txtProxyPort.Text) - - If Not String.IsNullOrEmpty(Me.txtProxyUsername.Text) AndAlso Not String.IsNullOrEmpty(Me.txtProxyPassword.Text) Then - Master.eSettings.ProxyCreds.UserName = Me.txtProxyUsername.Text - Master.eSettings.ProxyCreds.Password = Me.txtProxyPassword.Text - Master.eSettings.ProxyCreds.Domain = Me.txtProxyDomain.Text - Else - Master.eSettings.ProxyCreds = New NetworkCredential - End If - Else - Master.eSettings.ProxyURI = String.Empty - Master.eSettings.ProxyPort = -1 - End If - - Master.eSettings.ExternalTVDBAPIKey = Me.txtAPIKey.Text - Master.eSettings.ScanOrderModify = Me.chkScanOrderModify.Checked - Master.eSettings.TVScanOrderModify = Me.chkTVScanOrderModify.Checked - Master.eSettings.TVUpdateTime = DirectCast(Me.cboTVUpdate.SelectedIndex, Enums.TVUpdateTime) - Master.eSettings.NoFilterEpisode = Me.chkNoFilterEpisode.Checked - Master.eSettings.OnlyGetTVImagesForSelectedLanguage = Me.chkOnlyTVImagesLanguage.Checked - Master.eSettings.AlwaysGetEnglishTVImages = Me.chkGetEnglishImages.Checked - Master.eSettings.DisplayMissingEpisodes = Me.chkDisplayMissingEpisodes.Checked - Master.eSettings.ShowLockTitle = Me.chkShowLockTitle.Checked - Master.eSettings.ShowLockPlot = Me.chkShowLockPlot.Checked - Master.eSettings.ShowLockRating = Me.chkShowLockRating.Checked - Master.eSettings.ShowLockGenre = Me.chkShowLockGenre.Checked - Master.eSettings.ShowLockStudio = Me.chkShowLockStudio.Checked - Master.eSettings.EpLockTitle = Me.chkEpLockTitle.Checked - Master.eSettings.EpLockPlot = Me.chkEpLockPlot.Checked - Master.eSettings.EpLockRating = Me.chkEpLockRating.Checked - Master.eSettings.ScraperShowTitle = Me.chkScraperShowTitle.Checked - Master.eSettings.ScraperShowEGU = Me.chkScraperShowEGU.Checked - Master.eSettings.ScraperShowGenre = Me.chkScraperShowGenre.Checked - Master.eSettings.ScraperShowMPAA = Me.chkScraperShowMPAA.Checked - Master.eSettings.ScraperShowPlot = Me.chkScraperShowPlot.Checked - Master.eSettings.ScraperShowPremiered = Me.chkScraperShowPremiered.Checked - Master.eSettings.ScraperShowRating = Me.chkScraperShowRating.Checked - Master.eSettings.ScraperShowStudio = Me.chkScraperShowStudio.Checked - Master.eSettings.ScraperShowActors = Me.chkScraperShowActors.Checked - Master.eSettings.ScraperEpTitle = Me.chkScraperEpTitle.Checked - Master.eSettings.ScraperEpSeason = Me.chkScraperEpSeason.Checked - Master.eSettings.ScraperEpEpisode = Me.chkScraperEpEpisode.Checked - Master.eSettings.ScraperEpAired = Me.chkScraperEpAired.Checked - Master.eSettings.ScraperEpRating = Me.chkScraperEpRating.Checked - Master.eSettings.ScraperEpPlot = Me.chkScraperEpPlot.Checked - Master.eSettings.ScraperEpDirector = Me.chkScraperEpDirector.Checked - Master.eSettings.ScraperEpCredits = Me.chkScraperEpCredits.Checked - Master.eSettings.ScraperEpActors = Me.chkScraperEpActors.Checked - Master.eSettings.DisplayAllSeason = Me.chkDisplayAllSeason.Checked - Master.eSettings.MarkNewShows = Me.chkMarkNewShows.Checked - Master.eSettings.MarkNewEpisodes = Me.chkMarkNewEpisodes.Checked - Master.eSettings.OrderDefault = DirectCast(Me.cbOrdering.SelectedIndex, Enums.Ordering) - Master.eSettings.OnlyValueForCert = Me.chkOnlyValueForCert.Checked - AdvancedSettings.SetBooleanSetting("ScrapeActorsThumbs", Me.chkActorCache.Checked) - For Each s As ModulesManager._externalScraperModuleClass In ModulesManager.Instance.externalScrapersModules - Try - If s.ProcessorModule.IsScraper Then s.ProcessorModule.SaveSetupScraper(Not isApply) - If s.ProcessorModule.IsPostScraper Then s.ProcessorModule.SaveSetupPostScraper(Not isApply) - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - Next - For Each s As ModulesManager._externalTVScraperModuleClass In ModulesManager.Instance.externalTVScrapersModules - Try - If s.ProcessorModule.IsScraper Then s.ProcessorModule.SaveSetupScraper(Not isApply) - If s.ProcessorModule.IsPostScraper Then s.ProcessorModule.SaveSetupPostScraper(Not isApply) - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - Next - For Each s As ModulesManager._externalGenericModuleClass In ModulesManager.Instance.externalProcessorModules - Try - s.ProcessorModule.SaveSetup(Not isApply) - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - Next - ModulesManager.Instance.SaveSettings() - Functions.CreateDefaultOptions() - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Private Sub SetApplyButton(ByVal v As Boolean) - If Not NoUpdate Then Me.btnApply.Enabled = v - End Sub - - Private Sub SetUp() - Me.cbForce.Items.AddRange(Strings.Split(AdvancedSettings.GetSetting("ForceTitle", ""), "|")) - Me.btnAddShowRegex.Tag = String.Empty - Me.Text = Master.eLang.GetString(420, "Settings") - Me.GroupBox4.Text = Master.eLang.GetString(429, "Miscellaneous") - Me.Label32.Text = Master.eLang.GetString(430, "Interface Language:") - Me.chkInfoPanelAnim.Text = Master.eLang.GetString(431, "Enable Panel Animation") - Me.chkUpdates.Text = Master.eLang.GetString(432, "Check for Updates") - Me.chkOverwriteNfo.Text = Master.eLang.GetString(433, "Overwrite Non-conforming nfos") - Me.Label5.Text = Master.eLang.GetString(434, "(If unchecked, non-conforming nfos will be renamed to .info)") - Me.chkLogErrors.Text = Master.eLang.GetString(435, "Log Errors to File") - Me.Label31.Text = Master.eLang.GetString(436, "Display Overlay if Video Contains an Audio Stream With the Following Language:") - Me.Label50.Text = Me.Label31.Text - Me.GroupBox3.Text = Master.eLang.GetString(437, "Clean Files") - Me.tpStandard.Text = Master.eLang.GetString(438, "Standard") - Me.tpExpert.Text = Master.eLang.GetString(439, "Expert") - Me.chkWhitelistVideo.Text = Master.eLang.GetString(440, "Whitelist Video Extensions") - Me.Label27.Text = Master.eLang.GetString(441, "Whitelisted Extensions:") - Me.Label25.Text = Master.eLang.GetString(442, "WARNING: Using the Expert Mode Cleaner could potentially delete wanted files. Take care when using this tool.") - Me.gbFilters.Text = Master.eLang.GetString(451, "Folder/File Name Filters") - Me.chkProperCase.Text = Master.eLang.GetString(452, "Convert Names to Proper Case") - Me.chkShowProperCase.Text = Me.chkProperCase.Text - Me.chkEpProperCase.Text = Me.chkProperCase.Text - Me.GroupBox12.Text = Me.GroupBox4.Text - Me.chkShowGenresText.Text = Master.eLang.GetString(453, "Always Display Genre Text") - Me.gbGenreFilter.Text = Master.eLang.GetString(454, "Genre Language Filter") - Me.chkNoDisplayFanart.Text = Master.eLang.GetString(455, "Do Not Display Fanart") - Me.chkNoDisplayPoster.Text = Master.eLang.GetString(456, "Do Not Display Poster") - Me.chkShowDims.Text = Master.eLang.GetString(457, "Display Image Dimensions") - Me.chkMarkNew.Text = Master.eLang.GetString(459, "Mark New Movies") - Me.GroupBox2.Text = Master.eLang.GetString(460, "Media List Options") - Me.Label30.Text = Master.eLang.GetString(461, "Mismatch Tolerance:") - Me.chkCheckTitles.Text = Master.eLang.GetString(462, "Check Title Match Confidence") - Me.GroupBox25.Text = Master.eLang.GetString(463, "Sort Tokens to Ignore") - Me.chkDisplayYear.Text = Master.eLang.GetString(464, "Display Year in List Title") - Me.chkMovieExtraCol.Text = Master.eLang.GetString(465, "Hide Extrathumb Column") - Me.chkMovieSubCol.Text = Master.eLang.GetString(466, "Hide Sub Column") - Me.chkMovieTrailerCol.Text = Master.eLang.GetString(467, "Hide Trailer Column") - Me.chkMovieInfoCol.Text = Master.eLang.GetString(468, "Hide Info Column") - Me.chkMovieFanartCol.Text = Master.eLang.GetString(469, "Hide Fanart Column") - Me.chkMoviePosterCol.Text = Master.eLang.GetString(470, "Hide Poster Column") - Me.GroupBox8.Text = Master.eLang.GetString(471, "File Naming") - Me.gbTVNaming.Text = Me.GroupBox8.Text - Me.chkMovieNameMultiOnly.Text = Master.eLang.GetString(472, "Use Only for Folders with Multiple Movies") - Me.GroupBox21.Text = Master.eLang.GetString(151, "Trailer") - 'Me.chkVideoTSParent.Text = Master.eLang.GetString(473, "YAMJ Compatible VIDEO_TS File Placement/Naming") - Me.GroupBox6.Text = Master.eLang.GetString(149, "Fanart") - Me.GroupBox5.Text = Master.eLang.GetString(148, "Poster") - Me.colName.Text = Master.eLang.GetString(232, "Name") - Me.colPath.Text = Master.eLang.GetString(410, "Path") - Me.colRecur.Text = Master.eLang.GetString(411, "Recursive") - Me.colFolder.Text = Master.eLang.GetString(412, "Use Folder Name") - Me.colSingle.Text = Master.eLang.GetString(413, "Single Video") - Me.btnMovieRem.Text = Master.eLang.GetString(30, "Remove") - Me.btnRemTVSource.Text = Master.eLang.GetString(30, "Remove") - Me.btnMovieAddFolder.Text = Master.eLang.GetString(407, "Add Source") - Me.btnAddTVSource.Text = Me.btnMovieAddFolder.Text - Me.GroupBox14.Text = Me.GroupBox5.Text - Me.Label24.Text = Master.eLang.GetString(478, "Quality:") - Me.Label11.Text = Master.eLang.GetString(479, "Max Width:") - Me.Label12.Text = Master.eLang.GetString(480, "Max Height:") - Me.chkResizePoster.Text = Master.eLang.GetString(481, "Automatically Resize:") - Me.lblPosterSize.Text = Master.eLang.GetString(482, "Preferred Size:") - Me.chkOverwritePoster.Text = Master.eLang.GetString(483, "Overwrite Existing") - Me.GroupBox13.Text = Me.GroupBox6.Text - Me.chkFanartOnly.Text = Master.eLang.GetString(145, "Only") - Me.chkPosterOnly.Text = Master.eLang.GetString(145, "Only") - Me.Label26.Text = Me.Label24.Text - Me.Label9.Text = Me.Label11.Text - Me.Label10.Text = Me.Label12.Text - Me.chkResizeFanart.Text = Me.chkResizePoster.Text - Me.lblFanartSize.Text = Me.lblPosterSize.Text - Me.chkOverwriteFanart.Text = Me.chkOverwritePoster.Text - Me.GroupBox10.Text = Master.eLang.GetString(488, "Global Locks") - Me.chkLockTrailer.Text = Master.eLang.GetString(489, "Lock Trailer") - Me.chkLockGenre.Text = Master.eLang.GetString(490, "Lock Genre") - Me.chkLockRealStudio.Text = Master.eLang.GetString(491, "Lock Studio") - Me.chkLockRating.Text = Master.eLang.GetString(492, "Lock Rating") - Me.chkLockTagline.Text = Master.eLang.GetString(493, "Lock Tagline") - Me.chkLockTitle.Text = Master.eLang.GetString(494, "Lock Title") - Me.chkLockOutline.Text = Master.eLang.GetString(495, "Lock Outline") - Me.chkLockPlot.Text = Master.eLang.GetString(496, "Lock Plot") - Me.GroupBox9.Text = Master.eLang.GetString(497, "Images") - Me.chkNoSaveImagesToNfo.Text = Master.eLang.GetString(498, "Do Not Save URLs to Nfo") - Me.chkSingleScrapeImages.Text = Master.eLang.GetString(499, "Get on Single Scrape") - - Me.chkUseETasFA.Text = Master.eLang.GetString(503, "Use if no Fanart Found") - Me.chkNoSpoilers.Text = Master.eLang.GetString(505, "No Spoilers") - Me.Label15.Text = Master.eLang.GetString(506, "Number To Create:") - Me.chkAutoThumbs.Text = Master.eLang.GetString(507, "Extract During Scrapers") - Me.chkOutlineForPlot.Text = Master.eLang.GetString(508, "Use Outline for Plot if Plot is Empty") - - Me.chkCastWithImg.Text = Master.eLang.GetString(510, "Scrape Only Actors With Images") - Me.chkUseCertForMPAA.Text = Master.eLang.GetString(511, "Use Certification for MPAA") - Me.chkFullCast.Text = Master.eLang.GetString(512, "Scrape Full Cast") - Me.chkFullCrew.Text = Master.eLang.GetString(513, "Scrape Full Crew") - Me.chkCert.Text = Master.eLang.GetString(514, "Use Certification Language:") - Me.gbRTFormat.Text = Master.eLang.GetString(515, "Duration Format") - Me.chkUseMIDuration.Text = Master.eLang.GetString(516, "Use Duration for Runtime") - Me.chkScanMediaInfo.Text = Master.eLang.GetString(517, "Scan Meta Data") - Me.chkTVScanMetaData.Text = Me.chkScanMediaInfo.Text - Me.btnOK.Text = Master.eLang.GetString(179, "OK") - Me.btnApply.Text = Master.eLang.GetString(276, "Apply") - Me.btnCancel.Text = Master.eLang.GetString(167, "Cancel") - Me.Label2.Text = Master.eLang.GetString(518, "Configure Ember's appearance and operation.") - Me.Label4.Text = Me.Text - Me.GroupBox16.Text = Master.eLang.GetString(520, "Backdrops Folder") - Me.chkAutoBD.Text = Master.eLang.GetString(521, "Automatically Save Fanart To Backdrops Folder") - Me.GroupBox26.Text = Master.eLang.GetString(59, "Meta Data") - Me.GroupBox31.Text = Me.GroupBox26.Text - - Me.chkDeleteAllTrailers.Text = Master.eLang.GetString(522, "Delete All Existing") - Me.chkOverwriteTrailer.Text = Master.eLang.GetString(483, "Overwrite Existing") - Me.chkNoDLTrailer.Text = Master.eLang.GetString(524, "Only Get URLs When Scraping") - Me.chkSingleScrapeTrailer.Text = Master.eLang.GetString(525, "Get During Single Scrape") - - Me.chkUpdaterTrailer.Text = Master.eLang.GetString(527, "Get During Automated Scrapers") - - Me.chkDownloadTrailer.Text = Master.eLang.GetString(529, "Enable Trailer Support") - Me.GroupBox22.Text = Master.eLang.GetString(530, "No Stack Extensions") - - Me.GroupBox18.Text = Master.eLang.GetString(534, "Valid Video Extensions") - Me.btnEditSource.Text = Master.eLang.GetString(535, "Edit Source") - Me.btnEditTVSource.Text = Master.eLang.GetString(535, "Edit Source") - Me.GroupBox19.Text = Master.eLang.GetString(536, "Miscellaneous Options") - Me.gbMiscTVSourceOpts.Text = Master.eLang.GetString(536, "Miscellaneous Options") - Me.chkAutoDetectVTS.Text = Master.eLang.GetString(537, "Automatically Detect VIDEO_TS Folders Even if They Are Not Named ""VIDEO_TS""") - Me.chkSkipStackedSizeCheck.Text = Master.eLang.GetString(538, "Skip Size Check of Stacked Files") - Me.Label21.Text = Master.eLang.GetString(539, "MB") - Me.Label20.Text = Master.eLang.GetString(540, "Skip files smaller than:") - Me.Label6.Text = Me.Label21.Text - Me.Label7.Text = Me.Label20.Text - Me.GroupBox23.Text = Master.eLang.GetString(153, "Extrathumbs") - Me.GroupBox24.Text = Master.eLang.GetString(541, "Sizing (Extracted Frames)") - Me.chkETPadding.Text = Master.eLang.GetString(542, "Padding") - Me.Label28.Text = Master.eLang.GetString(543, "Width:") - Me.Label29.Text = Master.eLang.GetString(544, "Height:") - Me.rbETCustom.Text = Master.eLang.GetString(545, "Use Custom Size") - Me.rbETNative.Text = Master.eLang.GetString(546, "Use Native Resolution") - Me.GroupBox17.Text = Master.eLang.GetString(547, "Caching") - Me.chkUseImgCacheUpdaters.Text = Master.eLang.GetString(548, "Use During Automated Scrapers") - Me.chkPersistImgCache.Text = Master.eLang.GetString(550, "Persistent Image Cache") - Me.chkUseImgCache.Text = Master.eLang.GetString(551, "Use Image Cache") - Me.fbdBrowse.Description = Master.eLang.GetString(552, "Select the folder where you wish to store your backdrops.") - Me.gbOptions.Text = Master.eLang.GetString(577, "Scraper Fields") - Me.GroupBox32.Text = Master.eLang.GetString(577, "Scraper Fields") - Me.chkCrew.Text = Master.eLang.GetString(391, "Other Crew") - Me.chkMusicBy.Text = Master.eLang.GetString(392, "Music By") - Me.chkProducers.Text = Master.eLang.GetString(393, "Producers") - Me.chkWriters.Text = Master.eLang.GetString(394, "Writers") - Me.chkStudio.Text = Master.eLang.GetString(395, "Studio") - Me.chkRuntime.Text = Master.eLang.GetString(396, "Runtime") - Me.chkPlot.Text = Master.eLang.GetString(65, "Plot") - Me.chkOutline.Text = Master.eLang.GetString(64, "Plot Outline") - Me.chkGenre.Text = Master.eLang.GetString(20, "Genres") - Me.chkDirector.Text = Master.eLang.GetString(62, "Director") - Me.chkTagline.Text = Master.eLang.GetString(397, "Tagline") - Me.chkCast.Text = Master.eLang.GetString(398, "Cast") - Me.chkVotes.Text = Master.eLang.GetString(399, "Votes") - Me.chkTrailer.Text = Master.eLang.GetString(151, "Trailer") - Me.chkRating.Text = Master.eLang.GetString(400, "Rating") - Me.chkRelease.Text = Master.eLang.GetString(57, "Release Date") - Me.chkMPAA.Text = Master.eLang.GetString(401, "MPAA") - Me.chkCertification.Text = Master.eLang.GetString(722, "Certification") - Me.chkYear.Text = Master.eLang.GetString(278, "Year") - Me.chkTitle.Text = Master.eLang.GetString(21, "Title") - Me.chkScraperShowTitle.Text = Master.eLang.GetString(21, "Title") - Me.chkScraperShowEGU.Text = Master.eLang.GetString(723, "EpisodeGuideURL") - Me.chkScraperShowGenre.Text = Master.eLang.GetString(20, "Genres") - Me.chkScraperShowMPAA.Text = Master.eLang.GetString(401, "MPAA") - Me.chkScraperShowPlot.Text = Master.eLang.GetString(65, "Plot") - Me.chkScraperShowPremiered.Text = Master.eLang.GetString(724, "Premiered") - Me.chkScraperShowRating.Text = Master.eLang.GetString(400, "Rating") - Me.chkScraperShowStudio.Text = Master.eLang.GetString(395, "Studio") - Me.chkScraperShowActors.Text = Master.eLang.GetString(725, "Actors") - Me.chkScraperEpTitle.Text = Master.eLang.GetString(21, "Title") - Me.chkScraperEpSeason.Text = Master.eLang.GetString(650, "Season") - Me.chkScraperEpEpisode.Text = Master.eLang.GetString(727, "Episode") - Me.chkScraperEpAired.Text = Master.eLang.GetString(728, "Aired") - Me.chkScraperEpRating.Text = Master.eLang.GetString(400, "Rating") - Me.chkScraperEpPlot.Text = Master.eLang.GetString(65, "Plot") - Me.chkScraperEpDirector.Text = Master.eLang.GetString(62, "Director") - Me.chkScraperEpCredits.Text = Master.eLang.GetString(729, "Credits") - Me.chkScraperEpActors.Text = Master.eLang.GetString(725, "Actors") - Me.GroupBox1.Text = Me.GroupBox4.Text - Me.lblLimit.Text = Master.eLang.GetString(578, "Limit:") - Me.lblLimit2.Text = Me.lblLimit.Text - Me.GroupBox27.Text = Master.eLang.GetString(581, "Missing Items Filter") - Me.chkMissingPoster.Text = Master.eLang.GetString(582, "Check for Poster") - Me.chkMissingFanart.Text = Master.eLang.GetString(583, "Check for Fanart") - Me.chkMissingNFO.Text = Master.eLang.GetString(584, "Check for NFO") - Me.chkMissingTrailer.Text = Master.eLang.GetString(585, "Check for Trailer") - Me.chkMissingSubs.Text = Master.eLang.GetString(586, "Check for Subs") - Me.chkMissingExtra.Text = Master.eLang.GetString(587, "Check for Extrathumbs") - Me.chkTop250.Text = Master.eLang.GetString(591, "Top 250") - Me.chkCountry.Text = Master.eLang.GetString(301, "Country") - Me.chkClickScrape.Text = Master.eLang.GetString(849, "Enable Click Scrape") - - Me.chkAutoETSize.Text = Master.eLang.GetString(599, "Download All Fanart Images of the Following Size as Extrathumbs:") - Me.Label35.Text = String.Concat(Master.eLang.GetString(620, "Movie Theme"), ":") - Me.Label1.Text = String.Concat(Master.eLang.GetString(666, "TV Show Theme"), ":") - Me.Label3.Text = String.Concat(Master.eLang.GetString(667, "Episode Theme"), ":") - Me.GroupBox28.Text = Master.eLang.GetString(625, "Defaults by File Type") - Me.gbTVMIDefaults.Text = Me.gbTVMIDefaults.Text - Me.Label34.Text = Master.eLang.GetString(626, "File Type") - Me.Label49.Text = Me.Label34.Text - Me.chkIFOScan.Text = Master.eLang.GetString(628, "Enable IFO Parsing") - Me.GroupBox29.Text = Master.eLang.GetString(629, "Themes") - 'Me.chkYAMJCompatibleSets.Text = Master.eLang.GetString(643, "YAMJ Compatible Sets") - Me.chkCleanDB.Text = Master.eLang.GetString(668, "Clean database after updating library") - Me.chkTVCleanDB.Text = Me.chkCleanDB.Text - Me.chkIgnoreLastScan.Text = Master.eLang.GetString(669, "Ignore last scan time when updating library") - Me.chkTVIgnoreLastScan.Text = Me.chkIgnoreLastScan.Text - Me.gbShowFilter.Text = Master.eLang.GetString(670, "Show Folder/File Name Filters") - Me.gbEpFilter.Text = Master.eLang.GetString(671, "Episode Folder/File Name Filters") - Me.gbProxy.Text = Master.eLang.GetString(672, "Proxy") - Me.chkEnableProxy.Text = Master.eLang.GetString(673, "Enable Proxy") - Me.lblProxyURI.Text = Master.eLang.GetString(674, "Proxy URL:") - Me.lblProxyPort.Text = Master.eLang.GetString(675, "Proxy Port:") - Me.gbCreds.Text = Master.eLang.GetString(676, "Credentials") - Me.chkEnableCredentials.Text = Master.eLang.GetString(677, "Enable Credentials") - Me.lblProxyUN.Text = Master.eLang.GetString(425, "Username:") - Me.lblProxyPW.Text = Master.eLang.GetString(426, "Password:") - Me.lblProxyDomain.Text = Master.eLang.GetString(678, "Domain:") - Me.gbTVMisc.Text = Me.GroupBox4.Text - Me.lblRatingRegion.Text = Master.eLang.GetString(679, "TV Rating Region") - Me.gbTVListOptions.Text = Master.eLang.GetString(460, "Media List Options") - Me.gbShowListOptions.Text = Master.eLang.GetString(680, "Shows") - Me.gbSeasonListOptions.Text = Master.eLang.GetString(681, "Seasons") - Me.gbEpisodeListOptions.Text = Master.eLang.GetString(682, "Episodes") - Me.chkShowPosterCol.Text = Me.chkMoviePosterCol.Text - Me.chkSeasonPosterCol.Text = Me.chkMoviePosterCol.Text - Me.chkEpisodePosterCol.Text = Me.chkMoviePosterCol.Text - Me.chkShowFanartCol.Text = Me.chkMovieFanartCol.Text - Me.chkSeasonFanartCol.Text = Me.chkMovieFanartCol.Text - Me.chkEpisodeFanartCol.Text = Me.chkMovieFanartCol.Text - Me.chkShowNfoCol.Text = Me.chkMovieInfoCol.Text - Me.chkEpisodeNfoCol.Text = Me.chkMovieInfoCol.Text - Me.gbShowPosters.Text = Master.eLang.GetString(683, "Show Posters") - Me.gbShowFanart.Text = Master.eLang.GetString(684, "Show Fanart") - Me.gbSeasonPosters.Text = Master.eLang.GetString(685, "Season Posters") - Me.gbSeasonFanart.Text = Master.eLang.GetString(686, "Season Fanart") - Me.gbEpisodePosters.Text = Master.eLang.GetString(687, "Episode Posters") - Me.gbEpisodeFanart.Text = Master.eLang.GetString(688, "Episode Fanart") - Me.btnEditShowRegex.Text = Master.eLang.GetString(690, "Edit Regex") - Me.btnRemoveShowRegex.Text = Master.eLang.GetString(30, "Remove") - Me.gbShowRegex.Text = Master.eLang.GetString(691, "Show Match Regex") - Me.lblSeasonMatch.Text = Master.eLang.GetString(692, "Season Match Regex:") - Me.lblEpisodeMatch.Text = Master.eLang.GetString(693, "Episode Match Regex:") - Me.lblSeasonRetrieve.Text = String.Concat(Master.eLang.GetString(694, "Apply To"), ":") - Me.lblEpisodeRetrieve.Text = Me.lblSeasonRetrieve.Text - Me.btnAddShowRegex.Text = Master.eLang.GetString(695, "Edit Regex") - Me.gbShowPosterOpts.Text = Me.GroupBox5.Text - Me.lblShowPosterSize.Text = Master.eLang.GetString(730, "Preferred Type:") - Me.chkOverwriteShowPoster.Text = Me.chkOverwritePoster.Text - Me.chkResizeShowPoster.Text = Me.chkResizePoster.Text - Me.lblShowPosterWidth.Text = Me.Label11.Text - Me.lblShowPosterHeight.Text = Me.Label12.Text - Me.lblShowPosterQ.Text = Me.Label24.Text - Me.gbShowFanartOpts.Text = Me.GroupBox6.Text - Me.lblShowFanartSize.Text = Me.lblFanartSize.Text - Me.chkOverwriteShowFanart.Text = Me.chkOverwriteFanart.Text - Me.chkResizeShowFanart.Text = Me.chkResizeFanart.Text - Me.lblShowFanartWidth.Text = Me.Label11.Text - Me.lblShowFanartHeight.Text = Me.Label12.Text - Me.lblShowFanartQ.Text = Me.Label26.Text - Me.gbEpPosterOpts.Text = Me.GroupBox5.Text - Me.chkOverwriteEpPoster.Text = Me.chkOverwritePoster.Text - Me.chkResizeEpPoster.Text = Me.chkResizePoster.Text - Me.lblEpPosterWidth.Text = Me.Label11.Text - Me.lblEpPosterHeight.Text = Me.Label12.Text - Me.lblEpPosterQ.Text = Me.Label24.Text - Me.gbEpFanartOpts.Text = Me.GroupBox6.Text - Me.lblEpFanartSize.Text = Me.lblFanartSize.Text - Me.chkOverwriteEpFanart.Text = Me.chkOverwriteFanart.Text - Me.chkResizeEpFanart.Text = Me.chkResizeFanart.Text - Me.lblEpFanartWidth.Text = Me.Label11.Text - Me.lblEpFanartHeight.Text = Me.Label12.Text - Me.lblEpFanartQ.Text = Me.Label26.Text - Me.gbSeaPosterOpts.Text = Me.GroupBox5.Text - Me.lblSeaPosterSize.Text = Me.lblShowPosterSize.Text - Me.chkSeaOverwritePoster.Text = Me.chkOverwritePoster.Text - Me.chkSeaResizePoster.Text = Me.chkResizePoster.Text - Me.lblSeaPosterWidth.Text = Me.Label11.Text - Me.lblSeaPosterHeight.Text = Me.Label12.Text - Me.lblSeaPosterQ.Text = Me.Label24.Text - Me.gbSeaFanartOpts.Text = Me.GroupBox6.Text - Me.lblSeaFanartSize.Text = Me.lblFanartSize.Text - Me.chkSeaOverwriteFanart.Text = Me.chkOverwriteFanart.Text - Me.chkSeaResizeFanart.Text = Me.chkResizeFanart.Text - Me.lblSeaFanartWidth.Text = Me.Label11.Text - Me.lblSeaFanartHeight.Text = Me.Label12.Text - Me.lblSeaFanartQ.Text = Me.Label26.Text - Me.Label51.Text = Master.eLang.GetString(732, "=Hours =Minutes =Seconds") - Me.chkDisplayMissingEpisodes.Text = Master.eLang.GetString(733, "Display Missing Episodes") - Me.chkForceTitle.Text = Master.eLang.GetString(710, "Force Title Language:") - Me.chkSourceFromFolder.Text = Master.eLang.GetString(711, "Include Folder Name in Source Type Check") - Me.chkSortBeforeScan.Text = Master.eLang.GetString(712, "Sort files into folder before each library update") - Me.chkNoFilterEpisode.Text = Master.eLang.GetString(734, "Build Episode Title Instead of Filtering") - Me.gbAllSeasonPoster.Text = Master.eLang.GetString(735, "All Season Posters") - Me.chkOnlyTVImagesLanguage.Text = Master.eLang.GetString(736, "Only Get Images for the Selected Language") - Me.chkGetEnglishImages.Text = Master.eLang.GetString(737, "Also Get English Images") - Me.lblAPIKey.Text = Master.eLang.GetString(738, "API Key:") - Me.lblTVUpdate.Text = Master.eLang.GetString(740, "Re-download Show Information Every:") - Me.gbLanguage.Text = Master.eLang.GetString(610, "Language") - Me.lblTVLanguagePreferred.Text = Master.eLang.GetString(741, "Preferred Language:") - Me.btnTVLanguageFetch.Text = Master.eLang.GetString(742, "Fetch Available Languages") - Me.GroupBox33.Text = Master.eLang.GetString(488, "Global Locks") - Me.gbShowLocks.Text = Master.eLang.GetString(743, "Show") - Me.chkShowLockTitle.Text = Master.eLang.GetString(494, "Lock Title") - Me.chkShowLockPlot.Text = Master.eLang.GetString(496, "Lock Plot") - Me.chkShowLockRating.Text = Master.eLang.GetString(492, "Lock Rating") - Me.chkShowLockGenre.Text = Master.eLang.GetString(490, "Lock Genre") - Me.chkShowLockStudio.Text = Master.eLang.GetString(491, "Lock Studio") - Me.gbEpLocks.Text = Master.eLang.GetString(727, "Episode") - Me.chkEpLockTitle.Text = Master.eLang.GetString(494, "Lock Title") - Me.chkEpLockPlot.Text = Master.eLang.GetString(496, "Lock Plot") - Me.chkEpLockRating.Text = Master.eLang.GetString(492, "Lock Rating") - Me.GroupBox35.Text = Master.eLang.GetString(743, "Show") - Me.GroupBox34.Text = Master.eLang.GetString(727, "Episode") - Me.gbInterface.Text = Master.eLang.GetString(795, "Interface") - Me.chkScanOrderModify.Text = Master.eLang.GetString(796, "Scan in order of last write time") - Me.chkTVScanOrderModify.Text = Me.chkScanOrderModify.Text - Me.lblPreferredQuality.Text = Master.eLang.GetString(800, "Preferred Quality:") - Me.gbTVScraperOptions.Text = Master.eLang.GetString(390, "Options") - Me.lblTVDBMirror.Text = Master.eLang.GetString(801, "TVDB Mirror") - Me.chkDisplayAllSeason.Text = Master.eLang.GetString(832, "Display All Season Poster") - Me.gbHelp.Text = String.Concat(" ", Master.eLang.GetString(458, "Help")) - Me.chkMarkNewShows.Text = Master.eLang.GetString(549, "Mark New Shows") - Me.chkMarkNewEpisodes.Text = Master.eLang.GetString(621, "Mark New Episodes") - Me.lblOrdering.Text = Master.eLang.GetString(797, "Default Episode Ordering:") - Me.chkOnlyValueForCert.Text = Master.eLang.GetString(835, "Only Save the Value to NFO") - Me.chkActorCache.Text = Master.eLang.GetString(828, "Enable Actors Cache") - Me.rbBanner.Text = Master.eLang.GetString(838, "Banner") - Me.rbPoster.Text = Me.GroupBox5.Text - Me.rbAllSBanner.Text = Me.rbBanner.Text - Me.rbAllSPoster.Text = Me.GroupBox5.Text - Me.gbAllSPosterOpts.Text = Me.gbAllSeasonPoster.Text - Me.lblAllSPosterSize.Text = Me.lblShowPosterSize.Text - Me.chkOverwriteAllSPoster.Text = Me.chkOverwritePoster.Text - Me.chkResizeAllSPoster.Text = Me.chkResizePoster.Text - Me.lblAllSPosterWidth.Text = Me.Label11.Text - Me.lblAllSPosterHeight.Text = Me.Label12.Text - Me.lblAllSPosterQ.Text = Me.Label24.Text - Me.btnClearRegex.Text = Master.eLang.GetString(123, "Clear") - Me.chkAskCheckboxScrape.Text = Master.eLang.GetString(852, "Ask On Click Scrape") - Me.btnMovieFrodo.Text = Master.eLang.GetString(867, "XBMC Frodo") - Me.btnTVShowFrodo.Text = Master.eLang.GetString(867, "XBMC Frodo") - - Me.lvTVSources.Columns(1).Text = Master.eLang.GetString(232, "Name") - Me.lvTVSources.Columns(2).Text = Master.eLang.GetString(410, "Path") - - Me.lvShowRegex.Columns(1).Text = Master.eLang.GetString(696, "Show Regex") - Me.lvShowRegex.Columns(2).Text = Master.eLang.GetString(694, "Apply To") - Me.lvShowRegex.Columns(3).Text = Master.eLang.GetString(697, "Episode Regex") - Me.lvShowRegex.Columns(4).Text = Master.eLang.GetString(694, "Apply To") - - Me.lvMovies.Columns(1).Text = Master.eLang.GetString(232, "Name") - Me.lvMovies.Columns(2).Text = Master.eLang.GetString(410, "Path") - Me.lvMovies.Columns(3).Text = Master.eLang.GetString(411, "Recursive") - Me.lvMovies.Columns(4).Text = Master.eLang.GetString(412, "Use Folder Name") - Me.lvMovies.Columns(5).Text = Master.eLang.GetString(413, "Single Video") - - Me.TabPage3.Text = Master.eLang.GetString(38, "General") - Me.TabPage4.Text = Master.eLang.GetString(699, "Regex") - Me.TabPage5.Text = Master.eLang.GetString(700, "TV Show") - Me.TabPage6.Text = Master.eLang.GetString(744, "TV Season") - Me.TabPage7.Text = Master.eLang.GetString(701, "TV Episode") - Me.TabPage8.Text = Master.eLang.GetString(38, "General") - - Me.cbPosterSize.Items.Clear() - Me.cbPosterSize.Items.AddRange(New String() {Master.eLang.GetString(322, "X-Large"), Master.eLang.GetString(323, "Large"), Master.eLang.GetString(324, "Medium"), Master.eLang.GetString(325, "Small"), Master.eLang.GetString(558, "Wide")}) - Me.cbFanartSize.Items.Clear() - Me.cbFanartSize.Items.AddRange(New String() {Master.eLang.GetString(323, "Large"), Master.eLang.GetString(324, "Medium"), Master.eLang.GetString(325, "Small")}) - Me.cbAutoETSize.Items.Clear() - Me.cbAutoETSize.Items.AddRange(New String() {Master.eLang.GetString(323, "Large"), Master.eLang.GetString(324, "Medium"), Master.eLang.GetString(325, "Small")}) - Me.cbShowFanartSize.Items.Clear() - Me.cbShowFanartSize.Items.AddRange(New String() {Master.eLang.GetString(323, "Large"), Master.eLang.GetString(324, "Medium"), Master.eLang.GetString(325, "Small")}) - Me.cbEpFanartSize.Items.Clear() - Me.cbEpFanartSize.Items.AddRange(New String() {Master.eLang.GetString(323, "Large"), Master.eLang.GetString(324, "Medium"), Master.eLang.GetString(325, "Small")}) - Me.cbSeaPosterSize.Items.Clear() - Me.cbSeaPosterSize.Items.AddRange(New String() {Master.eLang.GetString(745, "None"), Me.GroupBox5.Text, Master.eLang.GetString(558, "Wide")}) - Me.cbSeaFanartSize.Items.Clear() - Me.cbSeaFanartSize.Items.AddRange(New String() {Master.eLang.GetString(323, "Large"), Master.eLang.GetString(324, "Medium"), Master.eLang.GetString(325, "Small")}) - - Me.cboTVUpdate.Items.Clear() - Me.cboTVUpdate.Items.AddRange(New String() {Master.eLang.GetString(749, "Week"), Master.eLang.GetString(750, "Bi-Weekly"), Master.eLang.GetString(751, "Month"), Master.eLang.GetString(752, "Never"), Master.eLang.GetString(753, "Always")}) - - Me.cbOrdering.Items.Clear() - Me.cbOrdering.Items.AddRange(New String() {Master.eLang.GetString(438, "Standard"), Master.eLang.GetString(350, "DVD"), Master.eLang.GetString(839, "Absolute")}) - - Me.cboSeasonRetrieve.Items.Clear() - Me.cboSeasonRetrieve.Items.AddRange(New String() {Master.eLang.GetString(13, "Folder Name"), Master.eLang.GetString(15, "File Name")}) - - Me.cboEpRetrieve.Items.Clear() - Me.cboEpRetrieve.Items.AddRange(New String() {Master.eLang.GetString(13, "Folder Name"), Master.eLang.GetString(15, "File Name"), Master.eLang.GetString(16, "Season Result")}) - - Me.LoadTrailerQualities() - End Sub - - Private Sub tbAllSPosterQual_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbAllSPosterQual.ValueChanged - Me.SetApplyButton(True) - Me.lblAllSPosterQual.Text = tbAllSPosterQual.Value.ToString - 'change text color to indicate recommendations - With Me.lblAllSPosterQual - Select Case True - Case tbAllSPosterQual.Value = 0 - .ForeColor = Color.Black - Case tbAllSPosterQual.Value > 95 OrElse tbAllSPosterQual.Value < 20 - .ForeColor = Color.Red - Case tbAllSPosterQual.Value > 85 - .ForeColor = Color.FromArgb(255, 155 + tbAllSPosterQual.Value, 300 - tbAllSPosterQual.Value, 0) - Case tbAllSPosterQual.Value >= 80 AndAlso tbAllSPosterQual.Value <= 85 - .ForeColor = Color.Blue - Case tbAllSPosterQual.Value <= 50 - .ForeColor = Color.FromArgb(255, 255, Convert.ToInt32(8.5 * (tbAllSPosterQual.Value - 20)), 0) - Case tbAllSPosterQual.Value < 80 - .ForeColor = Color.FromArgb(255, Convert.ToInt32(255 - (8.5 * (tbAllSPosterQual.Value - 50))), 255, 0) - End Select - End With - End Sub - - Private Sub tbEpFanartQual_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbEpFanartQual.ValueChanged - Me.SetApplyButton(True) - Me.lblEpFanartQual.Text = tbEpFanartQual.Value.ToString - 'change text color to indicate recommendations - With Me.lblEpFanartQual - Select Case True - Case tbEpFanartQual.Value = 0 - .ForeColor = Color.Black - Case tbEpFanartQual.Value > 95 OrElse tbEpFanartQual.Value < 20 - .ForeColor = Color.Red - Case tbEpFanartQual.Value > 85 - .ForeColor = Color.FromArgb(255, 155 + tbEpFanartQual.Value, 300 - tbEpFanartQual.Value, 0) - Case tbEpFanartQual.Value >= 80 AndAlso tbEpFanartQual.Value <= 85 - .ForeColor = Color.Blue - Case tbEpFanartQual.Value <= 50 - .ForeColor = Color.FromArgb(255, 255, Convert.ToInt32(8.5 * (tbEpFanartQual.Value - 20)), 0) - Case tbEpFanartQual.Value < 80 - .ForeColor = Color.FromArgb(255, Convert.ToInt32(255 - (8.5 * (tbEpFanartQual.Value - 50))), 255, 0) - End Select - End With - End Sub - - Private Sub tbEpPosterQual_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbEpPosterQual.ValueChanged - Me.SetApplyButton(True) - Me.lblEpPosterQual.Text = tbEpPosterQual.Value.ToString - 'change text color to indicate recommendations - With Me.lblEpPosterQual - Select Case True - Case tbEpPosterQual.Value = 0 - .ForeColor = Color.Black - Case tbEpPosterQual.Value > 95 OrElse tbEpPosterQual.Value < 20 - .ForeColor = Color.Red - Case tbEpPosterQual.Value > 85 - .ForeColor = Color.FromArgb(255, 155 + tbEpPosterQual.Value, 300 - tbEpPosterQual.Value, 0) - Case tbEpPosterQual.Value >= 80 AndAlso tbEpPosterQual.Value <= 85 - .ForeColor = Color.Blue - Case tbEpPosterQual.Value <= 50 - .ForeColor = Color.FromArgb(255, 255, Convert.ToInt32(8.5 * (tbEpPosterQual.Value - 20)), 0) - Case tbEpPosterQual.Value < 80 - .ForeColor = Color.FromArgb(255, Convert.ToInt32(255 - (8.5 * (tbEpPosterQual.Value - 50))), 255, 0) - End Select - End With - End Sub - - Private Sub tbFanartQual_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbFanartQual.ValueChanged - Me.SetApplyButton(True) - Me.lblFanartQual.Text = tbFanartQual.Value.ToString - 'change text color to indicate recommendations - With Me.lblFanartQual - Select Case True - Case tbFanartQual.Value = 0 - .ForeColor = Color.Black - Case tbFanartQual.Value > 95 OrElse tbFanartQual.Value < 20 - .ForeColor = Color.Red - Case tbFanartQual.Value > 85 - .ForeColor = Color.FromArgb(255, 155 + tbFanartQual.Value, 300 - tbFanartQual.Value, 0) - Case tbFanartQual.Value >= 80 AndAlso tbFanartQual.Value <= 85 - .ForeColor = Color.Blue - Case tbFanartQual.Value <= 50 - .ForeColor = Color.FromArgb(255, 255, Convert.ToInt32(8.5 * (tbFanartQual.Value - 20)), 0) - Case tbFanartQual.Value < 80 - .ForeColor = Color.FromArgb(255, Convert.ToInt32(255 - (8.5 * (tbFanartQual.Value - 50))), 255, 0) - End Select - End With - End Sub - - Private Sub tbPosterQual_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbPosterQual.ValueChanged - Me.SetApplyButton(True) - Me.lblPosterQual.Text = tbPosterQual.Value.ToString - 'change text color to indicate recommendations - With Me.lblPosterQual - Select Case True - Case tbPosterQual.Value = 0 - .ForeColor = Color.Black - Case tbPosterQual.Value > 95 OrElse tbPosterQual.Value < 20 - .ForeColor = Color.Red - Case tbPosterQual.Value > 85 - .ForeColor = Color.FromArgb(255, 155 + tbPosterQual.Value, 300 - tbPosterQual.Value, 0) - Case tbPosterQual.Value >= 80 AndAlso tbPosterQual.Value <= 85 - .ForeColor = Color.Blue - Case tbPosterQual.Value <= 50 - .ForeColor = Color.FromArgb(255, 255, Convert.ToInt32(8.5 * (tbPosterQual.Value - 20)), 0) - Case tbPosterQual.Value < 80 - .ForeColor = Color.FromArgb(255, Convert.ToInt32(255 - (8.5 * (tbPosterQual.Value - 50))), 255, 0) - End Select - End With - End Sub - - Private Sub tbSeaFanartQual_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbSeaFanartQual.ValueChanged - Me.SetApplyButton(True) - Me.lblSeaFanartQual.Text = tbSeaFanartQual.Value.ToString - 'change text color to indicate recommendations - With Me.lblSeaFanartQual - Select Case True - Case tbSeaFanartQual.Value = 0 - .ForeColor = Color.Black - Case tbSeaFanartQual.Value > 95 OrElse tbSeaFanartQual.Value < 20 - .ForeColor = Color.Red - Case tbSeaFanartQual.Value > 85 - .ForeColor = Color.FromArgb(255, 155 + tbSeaFanartQual.Value, 300 - tbSeaFanartQual.Value, 0) - Case tbSeaFanartQual.Value >= 80 AndAlso tbSeaFanartQual.Value <= 85 - .ForeColor = Color.Blue - Case tbSeaFanartQual.Value <= 50 - .ForeColor = Color.FromArgb(255, 255, Convert.ToInt32(8.5 * (tbSeaFanartQual.Value - 20)), 0) - Case tbSeaFanartQual.Value < 80 - .ForeColor = Color.FromArgb(255, Convert.ToInt32(255 - (8.5 * (tbSeaFanartQual.Value - 50))), 255, 0) - End Select - End With - End Sub - - Private Sub tbSeaPosterQual_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbSeaPosterQual.ValueChanged - Me.SetApplyButton(True) - Me.lblSeaPosterQual.Text = tbSeaPosterQual.Value.ToString - 'change text color to indicate recommendations - With Me.lblSeaPosterQual - Select Case True - Case tbSeaPosterQual.Value = 0 - .ForeColor = Color.Black - Case tbSeaPosterQual.Value > 95 OrElse tbSeaPosterQual.Value < 20 - .ForeColor = Color.Red - Case tbSeaPosterQual.Value > 85 - .ForeColor = Color.FromArgb(255, 155 + tbSeaPosterQual.Value, 300 - tbSeaPosterQual.Value, 0) - Case tbSeaPosterQual.Value >= 80 AndAlso tbSeaPosterQual.Value <= 85 - .ForeColor = Color.Blue - Case tbSeaPosterQual.Value <= 50 - .ForeColor = Color.FromArgb(255, 255, Convert.ToInt32(8.5 * (tbSeaPosterQual.Value - 20)), 0) - Case tbSeaPosterQual.Value < 80 - .ForeColor = Color.FromArgb(255, Convert.ToInt32(255 - (8.5 * (tbSeaPosterQual.Value - 50))), 255, 0) - End Select - End With - End Sub - - Private Sub tbShowFanartQual_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbShowFanartQual.ValueChanged - Me.SetApplyButton(True) - Me.lblShowFanartQual.Text = tbShowFanartQual.Value.ToString - 'change text color to indicate recommendations - With Me.lblShowFanartQual - Select Case True - Case tbShowFanartQual.Value = 0 - .ForeColor = Color.Black - Case tbShowFanartQual.Value > 95 OrElse tbShowFanartQual.Value < 20 - .ForeColor = Color.Red - Case tbShowFanartQual.Value > 85 - .ForeColor = Color.FromArgb(255, 155 + tbShowFanartQual.Value, 300 - tbShowFanartQual.Value, 0) - Case tbShowFanartQual.Value >= 80 AndAlso tbShowFanartQual.Value <= 85 - .ForeColor = Color.Blue - Case tbShowFanartQual.Value <= 50 - .ForeColor = Color.FromArgb(255, 255, Convert.ToInt32(8.5 * (tbShowFanartQual.Value - 20)), 0) - Case tbShowFanartQual.Value < 80 - .ForeColor = Color.FromArgb(255, Convert.ToInt32(255 - (8.5 * (tbShowFanartQual.Value - 50))), 255, 0) - End Select - End With - End Sub - - Private Sub tbShowPosterQual_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbShowPosterQual.ValueChanged - Me.SetApplyButton(True) - Me.lblShowPosterQual.Text = tbShowPosterQual.Value.ToString - 'change text color to indicate recommendations - With Me.lblShowPosterQual - Select Case True - Case tbShowPosterQual.Value = 0 - .ForeColor = Color.Black - Case tbShowPosterQual.Value > 95 OrElse tbShowPosterQual.Value < 20 - .ForeColor = Color.Red - Case tbShowPosterQual.Value > 85 - .ForeColor = Color.FromArgb(255, 155 + tbShowPosterQual.Value, 300 - tbShowPosterQual.Value, 0) - Case tbShowPosterQual.Value >= 80 AndAlso tbShowPosterQual.Value <= 85 - .ForeColor = Color.Blue - Case tbShowPosterQual.Value <= 50 - .ForeColor = Color.FromArgb(255, 255, Convert.ToInt32(8.5 * (tbShowPosterQual.Value - 20)), 0) - Case tbShowPosterQual.Value < 80 - .ForeColor = Color.FromArgb(255, Convert.ToInt32(255 - (8.5 * (tbShowPosterQual.Value - 50))), 255, 0) - End Select - End With - End Sub - - Private Sub tcCleaner_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tcCleaner.SelectedIndexChanged - Me.SetApplyButton(True) - End Sub - - Private Sub ToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) - currText = DirectCast(sender, ToolStripButton).Text - Me.FillList(currText) - End Sub - - Private Sub tvSettings_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvSettings.AfterSelect - Me.pbCurrent.Image = Me.ilSettings.Images(Me.tvSettings.SelectedNode.ImageIndex) - Me.lblCurrent.Text = String.Format("{0} - {1}", Me.currText, Me.tvSettings.SelectedNode.Text) - - Me.RemoveCurrPanel() - - Me.currPanel = Me.SettingsPanels.FirstOrDefault(Function(p) p.Name = tvSettings.SelectedNode.Name).Panel - Me.currPanel.Location = New Point(0, 0) - Me.pnlMain.Controls.Add(Me.currPanel) - Me.currPanel.Visible = True - Me.pnlMain.Refresh() - End Sub - - Private Sub txtActorLimit_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtActorLimit.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtActorLimit_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtActorLimit.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtAllSPosterHeight_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtAllSPosterHeight.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtAllSPosterHeight_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtAllSPosterHeight.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtAllSPosterWidth_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtAllSPosterWidth.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtAllSPosterWidth_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtAllSPosterWidth.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtAPIKey_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtAPIKey.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtAutoThumbs_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtAutoThumbs.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtAutoThumbs_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtAutoThumbs.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtBDPath_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBDPath.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtCheckTitleTol_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtCheckTitleTol.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtCheckTitleTol_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCheckTitleTol.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtDefFIExt_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtDefFIExt.TextChanged - btnNewMetaDataFT.Enabled = Not String.IsNullOrEmpty(txtDefFIExt.Text) AndAlso Not Me.lstMetaData.Items.Contains(If(txtDefFIExt.Text.StartsWith("."), txtDefFIExt.Text, String.Concat(".", txtDefFIExt.Text))) - If btnNewMetaDataFT.Enabled Then - btnEditMetaDataFT.Enabled = False - btnRemoveMetaDataFT.Enabled = False - End If - End Sub - - Private Sub txtEpFanartHeight_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtEpFanartHeight.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtEpFanartHeight_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtEpFanartHeight.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtEpFanartWidth_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtEpFanartWidth.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtEpFanartWidth_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtEpFanartWidth.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtEpPosterHeight_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtEpPosterHeight.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtEpPosterHeight_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtEpPosterHeight.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtEpPosterWidth_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtEpPosterWidth.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtEpPosterWidth_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtEpPosterWidth.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtEpRegex_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtEpRegex.TextChanged - Me.ValidateRegex() - End Sub - - Private Sub txtETHeight_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtETHeight.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtETHeight_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtETHeight.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtETWidth_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtETWidth.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtETWidth_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtETWidth.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtFanartHeight_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtFanartHeight.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtFanartHeight_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtFanartHeight.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtFanartWidth_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtFanartWidth.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtFanartWidth_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtFanartWidth.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtGenreLimit_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtGenreLimit.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtGenreLimit_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtGenreLimit.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtPosterHeight_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPosterHeight.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtPosterHeight_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtPosterHeight.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtPosterWidth_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPosterWidth.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtPosterWidth_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtPosterWidth.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtProxyDomain_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtProxyDomain.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtProxyPassword_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtProxyPassword.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtProxyPort_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtProxyPort.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtProxyPort_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtProxyPort.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtProxyUsername_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtProxyUsername.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtRuntimeFormat_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtRuntimeFormat.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtSeaFanartHeight_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSeaFanartHeight.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtSeaFanartWidth_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSeaFanartWidth.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtSeaPosterHeight_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSeaPosterHeight.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtSeaPosterWidth_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSeaPosterWidth.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtSeasonRegex_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtSeasonRegex.TextChanged - Me.ValidateRegex() - End Sub - - Private Sub txtShowFanartHeight_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtShowFanartHeight.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtShowFanartHeight_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtShowFanartHeight.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtShowFanartWidth_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtShowFanartWidth.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtShowFanartWidth_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtShowFanartWidth.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtShowPosterHeight_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtShowPosterHeight.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtShowPosterHeight_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtShowPosterHeight.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtShowPosterWidth_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtShowPosterWidth.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtShowPosterWidth_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtShowPosterWidth.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtSkipLessThan_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtSkipLessThan.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtSkipLessThan_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSkipLessThan.TextChanged - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - End Sub - - Private Sub txtTVSkipLessThan_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTVSkipLessThan.KeyPress - e.Handled = StringUtils.NumericOnly(e.KeyChar) - End Sub - - Private Sub txtTVSkipLessThan_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTVSkipLessThan.TextChanged - Me.SetApplyButton(True) - Me.sResult.NeedsUpdate = True - End Sub - - Private Sub txtTVDBMirror_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTVDBMirror.TextChanged - Me.SetApplyButton(True) - End Sub - - Private Sub txtTVDefFIExt_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTVDefFIExt.TextChanged - btnNewTVMetaDataFT.Enabled = Not String.IsNullOrEmpty(txtTVDefFIExt.Text) AndAlso Not Me.lstTVMetaData.Items.Contains(If(txtTVDefFIExt.Text.StartsWith("."), txtTVDefFIExt.Text, String.Concat(".", txtTVDefFIExt.Text))) - If btnNewTVMetaDataFT.Enabled Then - btnEditTVMetaDataFT.Enabled = False - btnRemoveTVMetaDataFT.Enabled = False - End If - End Sub - - Private Sub ValidateRegex() - If Not String.IsNullOrEmpty(Me.txtSeasonRegex.Text) AndAlso Not String.IsNullOrEmpty(Me.txtEpRegex.Text) Then - If Me.cboSeasonRetrieve.SelectedIndex > -1 AndAlso Me.cboEpRetrieve.SelectedIndex > -1 Then - Me.btnAddShowRegex.Enabled = True - Else - Me.btnAddShowRegex.Enabled = False - End If - End If - End Sub - - Class ListViewItemComparer - Implements IComparer - Private col As Integer - Public Sub New() - col = 0 - End Sub - Public Sub New(ByVal column As Integer) - col = column - End Sub - Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _ - Implements IComparer.Compare - Return [String].Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text) - End Function - End Class - -#End Region 'Methods - -End Class \ No newline at end of file diff --git a/Ember Media Manager/dlgWizard.Designer.vb b/Ember Media Manager/dlgWizard.Designer.vb index a9fa021..74c7550 100644 --- a/Ember Media Manager/dlgWizard.Designer.vb +++ b/Ember Media Manager/dlgWizard.Designer.vb @@ -22,1370 +22,1395 @@ Partial Class dlgWizard 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgWizard)) - Me.OK_Button = New System.Windows.Forms.Button() - Me.Cancel_Button = New System.Windows.Forms.Button() - Me.btnBack = New System.Windows.Forms.Button() - Me.btnNext = New System.Windows.Forms.Button() - Me.Panel1 = New System.Windows.Forms.Panel() - Me.Label32 = New System.Windows.Forms.Label() - Me.cbIntLang = New System.Windows.Forms.ComboBox() - Me.Label2 = New System.Windows.Forms.Label() - Me.Label1 = New System.Windows.Forms.Label() - Me.Panel3 = New System.Windows.Forms.Panel() - Me.btnMovieFrodo = New System.Windows.Forms.Button() - Me.chkMovieNameMultiOnly = New System.Windows.Forms.CheckBox() - Me.GroupBox7 = New System.Windows.Forms.GroupBox() - Me.chkMovieNameNFO = New System.Windows.Forms.CheckBox() - Me.chkMovieNFO = New System.Windows.Forms.CheckBox() - Me.GroupBox6 = New System.Windows.Forms.GroupBox() - Me.chkMovieNameDotFanartJPG = New System.Windows.Forms.CheckBox() - Me.chkMovieNameFanartJPG = New System.Windows.Forms.CheckBox() - Me.chkFanartJPG = New System.Windows.Forms.CheckBox() - Me.GroupBox5 = New System.Windows.Forms.GroupBox() - Me.chkFolderJPG = New System.Windows.Forms.CheckBox() - Me.chkPosterJPG = New System.Windows.Forms.CheckBox() - Me.chkPosterTBN = New System.Windows.Forms.CheckBox() - Me.chkMovieNameJPG = New System.Windows.Forms.CheckBox() - Me.chkMovieJPG = New System.Windows.Forms.CheckBox() - Me.chkMovieNameTBN = New System.Windows.Forms.CheckBox() - Me.chkMovieTBN = New System.Windows.Forms.CheckBox() - Me.Label5 = New System.Windows.Forms.Label() - Me.Label4 = New System.Windows.Forms.Label() - Me.PictureBox1 = New System.Windows.Forms.PictureBox() - Me.Panel2 = New System.Windows.Forms.Panel() - Me.lvMovies = New System.Windows.Forms.ListView() - Me.colID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colPath = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colRecur = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colFolder = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.colSingle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.btnMovieRem = New System.Windows.Forms.Button() - Me.btnMovieAddFolder = New System.Windows.Forms.Button() - Me.Label3 = New System.Windows.Forms.Label() - Me.Panel6 = New System.Windows.Forms.Panel() - Me.Label8 = New System.Windows.Forms.Label() - Me.Label6 = New System.Windows.Forms.Label() - Me.Label7 = New System.Windows.Forms.Label() - Me.Panel4 = New System.Windows.Forms.Panel() - Me.Label10 = New System.Windows.Forms.Label() - Me.btnTVLanguageFetch = New System.Windows.Forms.Button() - Me.lvTVSources = New System.Windows.Forms.ListView() - Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) - Me.cbTVLanguage = New System.Windows.Forms.ComboBox() - Me.btnTVRemoveSource = New System.Windows.Forms.Button() - Me.btnTVAddSource = New System.Windows.Forms.Button() - Me.Label9 = New System.Windows.Forms.Label() - Me.Panel5 = New System.Windows.Forms.Panel() - Me.btnTVShowFrodo = New System.Windows.Forms.Button() - Me.gbAllSeasonPoster = New System.Windows.Forms.GroupBox() - Me.chkSeasonAllPosterJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonAllJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonAllTBN = New System.Windows.Forms.CheckBox() - Me.lblInsideSeason = New System.Windows.Forms.Label() - Me.gbSeasonFanart = New System.Windows.Forms.GroupBox() - Me.chkSeasonXXDashFanartJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonDotFanart = New System.Windows.Forms.CheckBox() - Me.chkSeasonDashFanart = New System.Windows.Forms.CheckBox() - Me.chkSeasonFanartJPG = New System.Windows.Forms.CheckBox() - Me.gbSeasonPosters = New System.Windows.Forms.GroupBox() - Me.chkSeasonXXDashPosterJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonFolderJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonNameJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonNameTBN = New System.Windows.Forms.CheckBox() - Me.chkSeasonPosterJPG = New System.Windows.Forms.CheckBox() - Me.chkSeasonPosterTBN = New System.Windows.Forms.CheckBox() - Me.chkSeasonXTBN = New System.Windows.Forms.CheckBox() - Me.chkSeasonXXTBN = New System.Windows.Forms.CheckBox() - Me.gbEpisodePosters = New System.Windows.Forms.GroupBox() - Me.chkEpisodeDashThumbJPG = New System.Windows.Forms.CheckBox() - Me.chkEpisodeJPG = New System.Windows.Forms.CheckBox() - Me.chkEpisodeTBN = New System.Windows.Forms.CheckBox() - Me.gbShowFanart = New System.Windows.Forms.GroupBox() - Me.chkShowDotFanart = New System.Windows.Forms.CheckBox() - Me.chkShowDashFanart = New System.Windows.Forms.CheckBox() - Me.chkShowFanartJPG = New System.Windows.Forms.CheckBox() - Me.gbEpisodeFanart = New System.Windows.Forms.GroupBox() - Me.chkEpisodeDotFanart = New System.Windows.Forms.CheckBox() - Me.chkEpisodeDashFanart = New System.Windows.Forms.CheckBox() - Me.gbShowPosters = New System.Windows.Forms.GroupBox() - Me.chkShowJPG = New System.Windows.Forms.CheckBox() - Me.chkShowTBN = New System.Windows.Forms.CheckBox() - Me.chkShowPosterJPG = New System.Windows.Forms.CheckBox() - Me.chkShowPosterTBN = New System.Windows.Forms.CheckBox() - Me.chkShowFolderJPG = New System.Windows.Forms.CheckBox() - Me.Label11 = New System.Windows.Forms.Label() - Me.chkMovieNameDashPosterJPG = New System.Windows.Forms.CheckBox() - Me.GroupBox21 = New System.Windows.Forms.GroupBox() - Me.rbBracketTrailer = New System.Windows.Forms.RadioButton() - Me.rbDashTrailer = New System.Windows.Forms.RadioButton() - Me.Panel1.SuspendLayout() - Me.Panel3.SuspendLayout() - Me.GroupBox7.SuspendLayout() - Me.GroupBox6.SuspendLayout() - Me.GroupBox5.SuspendLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() - Me.Panel2.SuspendLayout() - Me.Panel6.SuspendLayout() - Me.Panel4.SuspendLayout() - Me.Panel5.SuspendLayout() - Me.gbAllSeasonPoster.SuspendLayout() - Me.gbSeasonFanart.SuspendLayout() - Me.gbSeasonPosters.SuspendLayout() - Me.gbEpisodePosters.SuspendLayout() - Me.gbShowFanart.SuspendLayout() - Me.gbEpisodeFanart.SuspendLayout() - Me.gbShowPosters.SuspendLayout() - Me.GroupBox21.SuspendLayout() - Me.SuspendLayout() - ' - 'OK_Button - ' - Me.OK_Button.DialogResult = System.Windows.Forms.DialogResult.OK - Me.OK_Button.Enabled = False - Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.OK_Button.Location = New System.Drawing.Point(402, 337) - Me.OK_Button.Name = "OK_Button" - Me.OK_Button.Size = New System.Drawing.Size(67, 23) - Me.OK_Button.TabIndex = 0 - Me.OK_Button.Text = "OK" - ' - 'Cancel_Button - ' - Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel - Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Cancel_Button.Location = New System.Drawing.Point(475, 337) - Me.Cancel_Button.Name = "Cancel_Button" - Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) - Me.Cancel_Button.TabIndex = 1 - Me.Cancel_Button.Text = "Cancel" - ' - 'btnBack - ' - Me.btnBack.Enabled = False - Me.btnBack.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnBack.Location = New System.Drawing.Point(219, 337) - Me.btnBack.Name = "btnBack" - Me.btnBack.Size = New System.Drawing.Size(67, 23) - Me.btnBack.TabIndex = 3 - Me.btnBack.Text = "< Back" - ' - 'btnNext - ' - Me.btnNext.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnNext.Location = New System.Drawing.Point(292, 337) - Me.btnNext.Name = "btnNext" - Me.btnNext.Size = New System.Drawing.Size(67, 23) - Me.btnNext.TabIndex = 2 - Me.btnNext.Text = "Next >" - ' - 'Panel1 - ' - Me.Panel1.BackColor = System.Drawing.Color.White - Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Panel1.Controls.Add(Me.Label32) - Me.Panel1.Controls.Add(Me.cbIntLang) - Me.Panel1.Controls.Add(Me.Label2) - Me.Panel1.Controls.Add(Me.Label1) - Me.Panel1.Location = New System.Drawing.Point(166, 7) - Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(376, 323) - Me.Panel1.TabIndex = 4 - ' - 'Label32 - ' - Me.Label32.AutoSize = True - Me.Label32.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label32.Location = New System.Drawing.Point(108, 260) - Me.Label32.Name = "Label32" - Me.Label32.Size = New System.Drawing.Size(110, 13) - Me.Label32.TabIndex = 2 - Me.Label32.Text = "Interface Language:" - ' - 'cbIntLang - ' - Me.cbIntLang.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbIntLang.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbIntLang.FormattingEnabled = True - Me.cbIntLang.Location = New System.Drawing.Point(110, 275) - Me.cbIntLang.Name = "cbIntLang" - Me.cbIntLang.Size = New System.Drawing.Size(148, 21) - Me.cbIntLang.TabIndex = 3 - ' - 'Label2 - ' - Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label2.Location = New System.Drawing.Point(17, 46) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(337, 201) - Me.Label2.TabIndex = 1 - Me.Label2.Text = resources.GetString("Label2.Text") - Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'Label1 - ' - Me.Label1.AutoSize = True - Me.Label1.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label1.Location = New System.Drawing.Point(15, 15) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(325, 25) - Me.Label1.TabIndex = 0 - Me.Label1.Text = "Welcome to Ember Media Manager" - ' - 'Panel3 - ' - Me.Panel3.BackColor = System.Drawing.Color.White - Me.Panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Panel3.Controls.Add(Me.GroupBox21) - Me.Panel3.Controls.Add(Me.chkMovieNameMultiOnly) - Me.Panel3.Controls.Add(Me.btnMovieFrodo) - Me.Panel3.Controls.Add(Me.GroupBox7) - Me.Panel3.Controls.Add(Me.GroupBox6) - Me.Panel3.Controls.Add(Me.GroupBox5) - Me.Panel3.Controls.Add(Me.Label5) - Me.Panel3.Controls.Add(Me.Label4) - Me.Panel3.Location = New System.Drawing.Point(959, 7) - Me.Panel3.Name = "Panel3" - Me.Panel3.Size = New System.Drawing.Size(376, 323) - Me.Panel3.TabIndex = 6 - Me.Panel3.Visible = False - ' - 'btnMovieFrodo - ' - Me.btnMovieFrodo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnMovieFrodo.Location = New System.Drawing.Point(121, 219) - Me.btnMovieFrodo.Name = "btnMovieFrodo" - Me.btnMovieFrodo.Size = New System.Drawing.Size(91, 23) - Me.btnMovieFrodo.TabIndex = 6 - Me.btnMovieFrodo.Text = "XBMC Frodo" - Me.btnMovieFrodo.UseVisualStyleBackColor = True - ' - 'chkMovieNameMultiOnly - ' - Me.chkMovieNameMultiOnly.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieNameMultiOnly.Location = New System.Drawing.Point(121, 247) - Me.chkMovieNameMultiOnly.Name = "chkMovieNameMultiOnly" - Me.chkMovieNameMultiOnly.Size = New System.Drawing.Size(236, 34) - Me.chkMovieNameMultiOnly.TabIndex = 3 - Me.chkMovieNameMultiOnly.Text = "Use Only for Folders with Multiple Movies" - Me.chkMovieNameMultiOnly.UseVisualStyleBackColor = True - ' - 'GroupBox7 - ' - Me.GroupBox7.Controls.Add(Me.chkMovieNameNFO) - Me.GroupBox7.Controls.Add(Me.chkMovieNFO) - Me.GroupBox7.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox7.Location = New System.Drawing.Point(218, 187) - Me.GroupBox7.Name = "GroupBox7" - Me.GroupBox7.Size = New System.Drawing.Size(139, 54) - Me.GroupBox7.TabIndex = 4 - Me.GroupBox7.TabStop = False - Me.GroupBox7.Text = "NFO" - ' - 'chkMovieNameNFO - ' - Me.chkMovieNameNFO.AutoSize = True - Me.chkMovieNameNFO.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkMovieNameNFO.Location = New System.Drawing.Point(6, 34) - Me.chkMovieNameNFO.Name = "chkMovieNameNFO" - Me.chkMovieNameNFO.Size = New System.Drawing.Size(93, 17) - Me.chkMovieNameNFO.TabIndex = 1 - Me.chkMovieNameNFO.Text = ".nfo" - Me.chkMovieNameNFO.UseVisualStyleBackColor = True - ' - 'chkMovieNFO - ' - Me.chkMovieNFO.AutoSize = True - Me.chkMovieNFO.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkMovieNFO.Location = New System.Drawing.Point(6, 18) - Me.chkMovieNFO.Name = "chkMovieNFO" - Me.chkMovieNFO.Size = New System.Drawing.Size(77, 17) - Me.chkMovieNFO.TabIndex = 0 - Me.chkMovieNFO.Text = "movie.nfo" - Me.chkMovieNFO.UseVisualStyleBackColor = True - ' - 'GroupBox6 - ' - Me.GroupBox6.Controls.Add(Me.chkMovieNameDotFanartJPG) - Me.GroupBox6.Controls.Add(Me.chkMovieNameFanartJPG) - Me.GroupBox6.Controls.Add(Me.chkFanartJPG) - Me.GroupBox6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox6.Location = New System.Drawing.Point(218, 111) - Me.GroupBox6.Name = "GroupBox6" - Me.GroupBox6.Size = New System.Drawing.Size(139, 70) - Me.GroupBox6.TabIndex = 2 - Me.GroupBox6.TabStop = False - Me.GroupBox6.Text = "Fanart" - ' - 'chkMovieNameDotFanartJPG - ' - Me.chkMovieNameDotFanartJPG.AutoSize = True - Me.chkMovieNameDotFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkMovieNameDotFanartJPG.Location = New System.Drawing.Point(6, 51) - Me.chkMovieNameDotFanartJPG.Name = "chkMovieNameDotFanartJPG" - Me.chkMovieNameDotFanartJPG.Size = New System.Drawing.Size(126, 17) - Me.chkMovieNameDotFanartJPG.TabIndex = 2 - Me.chkMovieNameDotFanartJPG.Text = ".fanart.jpg" - Me.chkMovieNameDotFanartJPG.UseVisualStyleBackColor = True - ' - 'chkMovieNameFanartJPG - ' - Me.chkMovieNameFanartJPG.AutoSize = True - Me.chkMovieNameFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkMovieNameFanartJPG.Location = New System.Drawing.Point(6, 35) - Me.chkMovieNameFanartJPG.Name = "chkMovieNameFanartJPG" - Me.chkMovieNameFanartJPG.Size = New System.Drawing.Size(127, 17) - Me.chkMovieNameFanartJPG.TabIndex = 1 - Me.chkMovieNameFanartJPG.Text = "-fanart.jpg" - Me.chkMovieNameFanartJPG.UseVisualStyleBackColor = True - ' - 'chkFanartJPG - ' - Me.chkFanartJPG.AutoSize = True - Me.chkFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkFanartJPG.Location = New System.Drawing.Point(6, 19) - Me.chkFanartJPG.Name = "chkFanartJPG" - Me.chkFanartJPG.Size = New System.Drawing.Size(77, 17) - Me.chkFanartJPG.TabIndex = 0 - Me.chkFanartJPG.Text = "fanart.jpg" - Me.chkFanartJPG.UseVisualStyleBackColor = True - ' - 'GroupBox5 - ' - Me.GroupBox5.Controls.Add(Me.chkMovieNameDashPosterJPG) - Me.GroupBox5.Controls.Add(Me.chkFolderJPG) - Me.GroupBox5.Controls.Add(Me.chkPosterJPG) - Me.GroupBox5.Controls.Add(Me.chkPosterTBN) - Me.GroupBox5.Controls.Add(Me.chkMovieNameJPG) - Me.GroupBox5.Controls.Add(Me.chkMovieJPG) - Me.GroupBox5.Controls.Add(Me.chkMovieNameTBN) - Me.GroupBox5.Controls.Add(Me.chkMovieTBN) - Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox5.Location = New System.Drawing.Point(13, 111) - Me.GroupBox5.Name = "GroupBox5" - Me.GroupBox5.Size = New System.Drawing.Size(199, 104) - Me.GroupBox5.TabIndex = 1 - Me.GroupBox5.TabStop = False - Me.GroupBox5.Text = "Posters" - ' - 'chkFolderJPG - ' - Me.chkFolderJPG.AutoSize = True - Me.chkFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkFolderJPG.Location = New System.Drawing.Point(10, 65) - Me.chkFolderJPG.Name = "chkFolderJPG" - Me.chkFolderJPG.Size = New System.Drawing.Size(77, 17) - Me.chkFolderJPG.TabIndex = 3 - Me.chkFolderJPG.Text = "folder.jpg" - Me.chkFolderJPG.UseVisualStyleBackColor = True - ' - 'chkPosterJPG - ' - Me.chkPosterJPG.AutoSize = True - Me.chkPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkPosterJPG.Location = New System.Drawing.Point(100, 49) - Me.chkPosterJPG.Name = "chkPosterJPG" - Me.chkPosterJPG.Size = New System.Drawing.Size(79, 17) - Me.chkPosterJPG.TabIndex = 6 - Me.chkPosterJPG.Text = "poster.jpg" - Me.chkPosterJPG.UseVisualStyleBackColor = True - ' - 'chkPosterTBN - ' - Me.chkPosterTBN.AutoSize = True - Me.chkPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkPosterTBN.Location = New System.Drawing.Point(10, 49) - Me.chkPosterTBN.Name = "chkPosterTBN" - Me.chkPosterTBN.Size = New System.Drawing.Size(80, 17) - Me.chkPosterTBN.TabIndex = 2 - Me.chkPosterTBN.Text = "poster.tbn" - Me.chkPosterTBN.UseVisualStyleBackColor = True - ' - 'chkMovieNameJPG - ' - Me.chkMovieNameJPG.AutoSize = True - Me.chkMovieNameJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkMovieNameJPG.Location = New System.Drawing.Point(100, 33) - Me.chkMovieNameJPG.Name = "chkMovieNameJPG" - Me.chkMovieNameJPG.Size = New System.Drawing.Size(92, 17) - Me.chkMovieNameJPG.TabIndex = 5 - Me.chkMovieNameJPG.Text = ".jpg" - Me.chkMovieNameJPG.UseVisualStyleBackColor = True - ' - 'chkMovieJPG - ' - Me.chkMovieJPG.AutoSize = True - Me.chkMovieJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkMovieJPG.Location = New System.Drawing.Point(10, 33) - Me.chkMovieJPG.Name = "chkMovieJPG" - Me.chkMovieJPG.Size = New System.Drawing.Size(76, 17) - Me.chkMovieJPG.TabIndex = 1 - Me.chkMovieJPG.Text = "movie.jpg" - Me.chkMovieJPG.UseVisualStyleBackColor = True - ' - 'chkMovieNameTBN - ' - Me.chkMovieNameTBN.AutoSize = True - Me.chkMovieNameTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkMovieNameTBN.Location = New System.Drawing.Point(100, 17) - Me.chkMovieNameTBN.Name = "chkMovieNameTBN" - Me.chkMovieNameTBN.Size = New System.Drawing.Size(93, 17) - Me.chkMovieNameTBN.TabIndex = 4 - Me.chkMovieNameTBN.Text = ".tbn" - Me.chkMovieNameTBN.UseVisualStyleBackColor = True - ' - 'chkMovieTBN - ' - Me.chkMovieTBN.AutoSize = True - Me.chkMovieTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkMovieTBN.Location = New System.Drawing.Point(10, 17) - Me.chkMovieTBN.Name = "chkMovieTBN" - Me.chkMovieTBN.Size = New System.Drawing.Size(77, 17) - Me.chkMovieTBN.TabIndex = 0 - Me.chkMovieTBN.Text = "movie.tbn" - Me.chkMovieTBN.UseVisualStyleBackColor = True - ' - 'Label5 - ' - Me.Label5.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label5.Location = New System.Drawing.Point(45, 284) - Me.Label5.Name = "Label5" - Me.Label5.Size = New System.Drawing.Size(286, 30) - Me.Label5.TabIndex = 5 - Me.Label5.Text = "TIP: Selections containing the text means that Ember Media Manager will u" & _ - "se the filename of the movie." - Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'Label4 - ' - Me.Label4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label4.Location = New System.Drawing.Point(13, 15) - Me.Label4.Name = "Label4" - Me.Label4.Size = New System.Drawing.Size(341, 93) - Me.Label4.TabIndex = 0 - Me.Label4.Text = resources.GetString("Label4.Text") - Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'PictureBox1 - ' - Me.PictureBox1.BackColor = System.Drawing.Color.White - Me.PictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.PictureBox1.Image = Global.Ember_Media_Manager.My.Resources.Resources.Wizard - Me.PictureBox1.Location = New System.Drawing.Point(3, 7) - Me.PictureBox1.Name = "PictureBox1" - Me.PictureBox1.Size = New System.Drawing.Size(157, 353) - Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage - Me.PictureBox1.TabIndex = 0 - Me.PictureBox1.TabStop = False - ' - 'Panel2 - ' - Me.Panel2.BackColor = System.Drawing.Color.White - Me.Panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Panel2.Controls.Add(Me.lvMovies) - Me.Panel2.Controls.Add(Me.btnMovieRem) - Me.Panel2.Controls.Add(Me.btnMovieAddFolder) - Me.Panel2.Controls.Add(Me.Label3) - Me.Panel2.Location = New System.Drawing.Point(566, 7) - Me.Panel2.Name = "Panel2" - Me.Panel2.Size = New System.Drawing.Size(376, 323) - Me.Panel2.TabIndex = 5 - Me.Panel2.Visible = False - ' - 'lvMovies - ' - Me.lvMovies.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colID, Me.colName, Me.colPath, Me.colRecur, Me.colFolder, Me.colSingle}) - Me.lvMovies.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lvMovies.FullRowSelect = True - Me.lvMovies.HideSelection = False - Me.lvMovies.Location = New System.Drawing.Point(6, 124) - Me.lvMovies.Name = "lvMovies" - Me.lvMovies.Size = New System.Drawing.Size(362, 105) - Me.lvMovies.Sorting = System.Windows.Forms.SortOrder.Ascending - Me.lvMovies.TabIndex = 1 - Me.lvMovies.UseCompatibleStateImageBehavior = False - Me.lvMovies.View = System.Windows.Forms.View.Details - ' - 'colID - ' - Me.colID.Width = 0 - ' - 'colName - ' - Me.colName.Text = "Name" - Me.colName.Width = 50 - ' - 'colPath - ' - Me.colPath.Text = "Path" - Me.colPath.Width = 125 - ' - 'colRecur - ' - Me.colRecur.Text = "Recursive" - ' - 'colFolder - ' - Me.colFolder.Text = "Use Folder Name" - ' - 'colSingle - ' - Me.colSingle.Text = "Single Video" - ' - 'btnMovieRem - ' - Me.btnMovieRem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnMovieRem.Image = CType(resources.GetObject("btnMovieRem.Image"), System.Drawing.Image) - Me.btnMovieRem.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnMovieRem.Location = New System.Drawing.Point(264, 236) - Me.btnMovieRem.Name = "btnMovieRem" - Me.btnMovieRem.Size = New System.Drawing.Size(104, 23) - Me.btnMovieRem.TabIndex = 3 - Me.btnMovieRem.Text = "Remove" - Me.btnMovieRem.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnMovieRem.UseVisualStyleBackColor = True - ' - 'btnMovieAddFolder - ' - Me.btnMovieAddFolder.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnMovieAddFolder.Image = CType(resources.GetObject("btnMovieAddFolder.Image"), System.Drawing.Image) - Me.btnMovieAddFolder.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnMovieAddFolder.Location = New System.Drawing.Point(4, 236) - Me.btnMovieAddFolder.Name = "btnMovieAddFolder" - Me.btnMovieAddFolder.Size = New System.Drawing.Size(104, 23) - Me.btnMovieAddFolder.TabIndex = 2 - Me.btnMovieAddFolder.Text = "Add Source" - Me.btnMovieAddFolder.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnMovieAddFolder.UseVisualStyleBackColor = True - ' - 'Label3 - ' - Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label3.Location = New System.Drawing.Point(19, 15) - Me.Label3.Name = "Label3" - Me.Label3.Size = New System.Drawing.Size(332, 93) - Me.Label3.TabIndex = 0 - Me.Label3.Text = "First, let's tell Ember Media Manager where to locate all your movies. You can ad" & _ - "d as many sources as you wish." - Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'Panel6 - ' - Me.Panel6.BackColor = System.Drawing.Color.White - Me.Panel6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Panel6.Controls.Add(Me.Label8) - Me.Panel6.Controls.Add(Me.Label6) - Me.Panel6.Controls.Add(Me.Label7) - Me.Panel6.Location = New System.Drawing.Point(959, 406) - Me.Panel6.Name = "Panel6" - Me.Panel6.Size = New System.Drawing.Size(376, 323) - Me.Panel6.TabIndex = 9 - Me.Panel6.Visible = False - ' - 'Label8 - ' - Me.Label8.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label8.Location = New System.Drawing.Point(3, 105) - Me.Label8.Name = "Label8" - Me.Label8.Size = New System.Drawing.Size(369, 216) - Me.Label8.TabIndex = 2 - Me.Label8.Text = resources.GetString("Label8.Text") - ' - 'Label6 - ' - Me.Label6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label6.Location = New System.Drawing.Point(17, 57) - Me.Label6.Name = "Label6" - Me.Label6.Size = New System.Drawing.Size(337, 46) - Me.Label6.TabIndex = 1 - Me.Label6.Text = "That wasn't so hard was it? As mentioned earlier, you can change these or any ot" & _ - "her options in the Settings dialog." - Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'Label7 - ' - Me.Label7.AutoSize = True - Me.Label7.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label7.Location = New System.Drawing.Point(36, 5) - Me.Label7.Name = "Label7" - Me.Label7.Size = New System.Drawing.Size(297, 50) - Me.Label7.TabIndex = 0 - Me.Label7.Text = "That's it!" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Ember Media Manager is Ready!" - Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'Panel4 - ' - Me.Panel4.BackColor = System.Drawing.Color.White - Me.Panel4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Panel4.Controls.Add(Me.Label10) - Me.Panel4.Controls.Add(Me.btnTVLanguageFetch) - Me.Panel4.Controls.Add(Me.lvTVSources) - Me.Panel4.Controls.Add(Me.cbTVLanguage) - Me.Panel4.Controls.Add(Me.btnTVRemoveSource) - Me.Panel4.Controls.Add(Me.btnTVAddSource) - Me.Panel4.Controls.Add(Me.Label9) - Me.Panel4.Location = New System.Drawing.Point(166, 406) - Me.Panel4.Name = "Panel4" - Me.Panel4.Size = New System.Drawing.Size(376, 323) - Me.Panel4.TabIndex = 7 - Me.Panel4.Visible = False - ' - 'Label10 - ' - Me.Label10.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label10.Location = New System.Drawing.Point(18, 220) - Me.Label10.Name = "Label10" - Me.Label10.Size = New System.Drawing.Size(332, 41) - Me.Label10.TabIndex = 4 - Me.Label10.Text = "Now select the default language you would like Ember to look for when scraping TV" & _ - " Show items." - Me.Label10.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'btnTVLanguageFetch - ' - Me.btnTVLanguageFetch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnTVLanguageFetch.Location = New System.Drawing.Point(101, 293) - Me.btnTVLanguageFetch.Name = "btnTVLanguageFetch" - Me.btnTVLanguageFetch.Size = New System.Drawing.Size(166, 23) - Me.btnTVLanguageFetch.TabIndex = 5 - Me.btnTVLanguageFetch.Text = "Fetch Available Languages" - Me.btnTVLanguageFetch.UseVisualStyleBackColor = True - ' - 'lvTVSources - ' - Me.lvTVSources.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3}) - Me.lvTVSources.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lvTVSources.FullRowSelect = True - Me.lvTVSources.HideSelection = False - Me.lvTVSources.Location = New System.Drawing.Point(6, 82) - Me.lvTVSources.Name = "lvTVSources" - Me.lvTVSources.Size = New System.Drawing.Size(360, 105) - Me.lvTVSources.Sorting = System.Windows.Forms.SortOrder.Ascending - Me.lvTVSources.TabIndex = 1 - Me.lvTVSources.UseCompatibleStateImageBehavior = False - Me.lvTVSources.View = System.Windows.Forms.View.Details - ' - 'ColumnHeader1 - ' - Me.ColumnHeader1.Width = 0 - ' - 'ColumnHeader2 - ' - Me.ColumnHeader2.Text = "Name" - Me.ColumnHeader2.Width = 94 - ' - 'ColumnHeader3 - ' - Me.ColumnHeader3.Text = "Path" - Me.ColumnHeader3.Width = 261 - ' - 'cbTVLanguage - ' - Me.cbTVLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbTVLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbTVLanguage.Location = New System.Drawing.Point(101, 268) - Me.cbTVLanguage.Name = "cbTVLanguage" - Me.cbTVLanguage.Size = New System.Drawing.Size(166, 21) - Me.cbTVLanguage.TabIndex = 6 - ' - 'btnTVRemoveSource - ' - Me.btnTVRemoveSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnTVRemoveSource.Image = CType(resources.GetObject("btnTVRemoveSource.Image"), System.Drawing.Image) - Me.btnTVRemoveSource.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnTVRemoveSource.Location = New System.Drawing.Point(264, 194) - Me.btnTVRemoveSource.Name = "btnTVRemoveSource" - Me.btnTVRemoveSource.Size = New System.Drawing.Size(104, 23) - Me.btnTVRemoveSource.TabIndex = 3 - Me.btnTVRemoveSource.Text = "Remove" - Me.btnTVRemoveSource.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnTVRemoveSource.UseVisualStyleBackColor = True - ' - 'btnTVAddSource - ' - Me.btnTVAddSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnTVAddSource.Image = CType(resources.GetObject("btnTVAddSource.Image"), System.Drawing.Image) - Me.btnTVAddSource.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnTVAddSource.Location = New System.Drawing.Point(4, 194) - Me.btnTVAddSource.Name = "btnTVAddSource" - Me.btnTVAddSource.Size = New System.Drawing.Size(104, 23) - Me.btnTVAddSource.TabIndex = 2 - Me.btnTVAddSource.Text = "Add Source" - Me.btnTVAddSource.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnTVAddSource.UseVisualStyleBackColor = True - ' - 'Label9 - ' - Me.Label9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label9.Location = New System.Drawing.Point(19, 15) - Me.Label9.Name = "Label9" - Me.Label9.Size = New System.Drawing.Size(332, 64) - Me.Label9.TabIndex = 0 - Me.Label9.Text = "Next, let's tell Ember Media Manager where to locate all your TV Shows. You can a" & _ - "dd as many sources as you wish." - Me.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'Panel5 - ' - Me.Panel5.BackColor = System.Drawing.Color.White - Me.Panel5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Panel5.Controls.Add(Me.btnTVShowFrodo) - Me.Panel5.Controls.Add(Me.gbAllSeasonPoster) - Me.Panel5.Controls.Add(Me.lblInsideSeason) - Me.Panel5.Controls.Add(Me.gbSeasonFanart) - Me.Panel5.Controls.Add(Me.gbSeasonPosters) - Me.Panel5.Controls.Add(Me.gbEpisodePosters) - Me.Panel5.Controls.Add(Me.gbShowFanart) - Me.Panel5.Controls.Add(Me.gbEpisodeFanart) - Me.Panel5.Controls.Add(Me.gbShowPosters) - Me.Panel5.Controls.Add(Me.Label11) - Me.Panel5.Location = New System.Drawing.Point(566, 406) - Me.Panel5.Name = "Panel5" - Me.Panel5.Size = New System.Drawing.Size(376, 323) - Me.Panel5.TabIndex = 8 - Me.Panel5.Visible = False - ' - 'btnTVShowFrodo - ' - Me.btnTVShowFrodo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnTVShowFrodo.Location = New System.Drawing.Point(3, 170) - Me.btnTVShowFrodo.Name = "btnTVShowFrodo" - Me.btnTVShowFrodo.Size = New System.Drawing.Size(98, 32) - Me.btnTVShowFrodo.TabIndex = 9 - Me.btnTVShowFrodo.Text = "XBMC Frodo" - Me.btnTVShowFrodo.UseVisualStyleBackColor = True - ' - 'gbAllSeasonPoster - ' - Me.gbAllSeasonPoster.Controls.Add(Me.chkSeasonAllPosterJPG) - Me.gbAllSeasonPoster.Controls.Add(Me.chkSeasonAllJPG) - Me.gbAllSeasonPoster.Controls.Add(Me.chkSeasonAllTBN) - Me.gbAllSeasonPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbAllSeasonPoster.Location = New System.Drawing.Point(4, 207) - Me.gbAllSeasonPoster.Name = "gbAllSeasonPoster" - Me.gbAllSeasonPoster.Size = New System.Drawing.Size(217, 54) - Me.gbAllSeasonPoster.TabIndex = 3 - Me.gbAllSeasonPoster.TabStop = False - Me.gbAllSeasonPoster.Text = "All Season Posters" - ' - 'chkSeasonAllPosterJPG - ' - Me.chkSeasonAllPosterJPG.AutoSize = True - Me.chkSeasonAllPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonAllPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkSeasonAllPosterJPG.Location = New System.Drawing.Point(6, 16) - Me.chkSeasonAllPosterJPG.Name = "chkSeasonAllPosterJPG" - Me.chkSeasonAllPosterJPG.Size = New System.Drawing.Size(135, 17) - Me.chkSeasonAllPosterJPG.TabIndex = 7 - Me.chkSeasonAllPosterJPG.Text = "season-all-poster.jpg" - Me.chkSeasonAllPosterJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonAllJPG - ' - Me.chkSeasonAllJPG.AutoSize = True - Me.chkSeasonAllJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonAllJPG.Location = New System.Drawing.Point(6, 35) - Me.chkSeasonAllJPG.Name = "chkSeasonAllJPG" - Me.chkSeasonAllJPG.Size = New System.Drawing.Size(98, 17) - Me.chkSeasonAllJPG.TabIndex = 1 - Me.chkSeasonAllJPG.Text = "season-all.jpg" - Me.chkSeasonAllJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonAllTBN - ' - Me.chkSeasonAllTBN.AutoSize = True - Me.chkSeasonAllTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonAllTBN.Location = New System.Drawing.Point(112, 35) - Me.chkSeasonAllTBN.Name = "chkSeasonAllTBN" - Me.chkSeasonAllTBN.Size = New System.Drawing.Size(99, 17) - Me.chkSeasonAllTBN.TabIndex = 0 - Me.chkSeasonAllTBN.Text = "season-all.tbn" - Me.chkSeasonAllTBN.UseVisualStyleBackColor = True - ' - 'lblInsideSeason - ' - Me.lblInsideSeason.Font = New System.Drawing.Font("Microsoft Sans Serif", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblInsideSeason.Location = New System.Drawing.Point(232, 305) - Me.lblInsideSeason.Name = "lblInsideSeason" - Me.lblInsideSeason.Size = New System.Drawing.Size(144, 12) - Me.lblInsideSeason.TabIndex = 8 - Me.lblInsideSeason.Text = " * Inside Season directory" - Me.lblInsideSeason.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'gbSeasonFanart - ' - Me.gbSeasonFanart.Controls.Add(Me.chkSeasonXXDashFanartJPG) - Me.gbSeasonFanart.Controls.Add(Me.chkSeasonDotFanart) - Me.gbSeasonFanart.Controls.Add(Me.chkSeasonDashFanart) - Me.gbSeasonFanart.Controls.Add(Me.chkSeasonFanartJPG) - Me.gbSeasonFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbSeasonFanart.Location = New System.Drawing.Point(226, 218) - Me.gbSeasonFanart.Name = "gbSeasonFanart" - Me.gbSeasonFanart.Size = New System.Drawing.Size(145, 84) - Me.gbSeasonFanart.TabIndex = 7 - Me.gbSeasonFanart.TabStop = False - Me.gbSeasonFanart.Text = "Season Fanart" - ' - 'chkSeasonXXDashFanartJPG - ' - Me.chkSeasonXXDashFanartJPG.AutoSize = True - Me.chkSeasonXXDashFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonXXDashFanartJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkSeasonXXDashFanartJPG.Location = New System.Drawing.Point(6, 64) - Me.chkSeasonXXDashFanartJPG.Name = "chkSeasonXXDashFanartJPG" - Me.chkSeasonXXDashFanartJPG.Size = New System.Drawing.Size(129, 17) - Me.chkSeasonXXDashFanartJPG.TabIndex = 4 - Me.chkSeasonXXDashFanartJPG.Text = "seasonXX-fanart.jpg" - Me.chkSeasonXXDashFanartJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonDotFanart - ' - Me.chkSeasonDotFanart.AutoSize = True - Me.chkSeasonDotFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonDotFanart.Location = New System.Drawing.Point(6, 47) - Me.chkSeasonDotFanart.Name = "chkSeasonDotFanart" - Me.chkSeasonDotFanart.Size = New System.Drawing.Size(137, 17) - Me.chkSeasonDotFanart.TabIndex = 2 - Me.chkSeasonDotFanart.Text = ".fanart.jpg*" - Me.chkSeasonDotFanart.UseVisualStyleBackColor = True - ' - 'chkSeasonDashFanart - ' - Me.chkSeasonDashFanart.AutoSize = True - Me.chkSeasonDashFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonDashFanart.Location = New System.Drawing.Point(6, 31) - Me.chkSeasonDashFanart.Name = "chkSeasonDashFanart" - Me.chkSeasonDashFanart.Size = New System.Drawing.Size(138, 17) - Me.chkSeasonDashFanart.TabIndex = 1 - Me.chkSeasonDashFanart.Text = "-fanart.jpg*" - Me.chkSeasonDashFanart.UseVisualStyleBackColor = True - ' - 'chkSeasonFanartJPG - ' - Me.chkSeasonFanartJPG.AutoSize = True - Me.chkSeasonFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonFanartJPG.Location = New System.Drawing.Point(6, 15) - Me.chkSeasonFanartJPG.Name = "chkSeasonFanartJPG" - Me.chkSeasonFanartJPG.Size = New System.Drawing.Size(82, 17) - Me.chkSeasonFanartJPG.TabIndex = 0 - Me.chkSeasonFanartJPG.Text = "fanart.jpg*" - Me.chkSeasonFanartJPG.UseVisualStyleBackColor = True - ' - 'gbSeasonPosters - ' - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonXXDashPosterJPG) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonFolderJPG) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonNameJPG) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonNameTBN) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonPosterJPG) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonPosterTBN) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonXTBN) - Me.gbSeasonPosters.Controls.Add(Me.chkSeasonXXTBN) - Me.gbSeasonPosters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbSeasonPosters.Location = New System.Drawing.Point(233, 69) - Me.gbSeasonPosters.Name = "gbSeasonPosters" - Me.gbSeasonPosters.Size = New System.Drawing.Size(138, 150) - Me.gbSeasonPosters.TabIndex = 6 - Me.gbSeasonPosters.TabStop = False - Me.gbSeasonPosters.Text = "Season Posters" - ' - 'chkSeasonXXDashPosterJPG - ' - Me.chkSeasonXXDashPosterJPG.AutoSize = True - Me.chkSeasonXXDashPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonXXDashPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkSeasonXXDashPosterJPG.Location = New System.Drawing.Point(6, 128) - Me.chkSeasonXXDashPosterJPG.Name = "chkSeasonXXDashPosterJPG" - Me.chkSeasonXXDashPosterJPG.Size = New System.Drawing.Size(131, 17) - Me.chkSeasonXXDashPosterJPG.TabIndex = 7 - Me.chkSeasonXXDashPosterJPG.Text = "seasonXX-poster.jpg" - Me.chkSeasonXXDashPosterJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonFolderJPG - ' - Me.chkSeasonFolderJPG.AutoSize = True - Me.chkSeasonFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonFolderJPG.Location = New System.Drawing.Point(6, 111) - Me.chkSeasonFolderJPG.Name = "chkSeasonFolderJPG" - Me.chkSeasonFolderJPG.Size = New System.Drawing.Size(82, 17) - Me.chkSeasonFolderJPG.TabIndex = 6 - Me.chkSeasonFolderJPG.Text = "folder.jpg*" - Me.chkSeasonFolderJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonNameJPG - ' - Me.chkSeasonNameJPG.AutoSize = True - Me.chkSeasonNameJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonNameJPG.Location = New System.Drawing.Point(6, 95) - Me.chkSeasonNameJPG.Name = "chkSeasonNameJPG" - Me.chkSeasonNameJPG.Size = New System.Drawing.Size(103, 17) - Me.chkSeasonNameJPG.TabIndex = 5 - Me.chkSeasonNameJPG.Text = ".jpg*" - Me.chkSeasonNameJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonNameTBN - ' - Me.chkSeasonNameTBN.AutoSize = True - Me.chkSeasonNameTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonNameTBN.Location = New System.Drawing.Point(6, 79) - Me.chkSeasonNameTBN.Name = "chkSeasonNameTBN" - Me.chkSeasonNameTBN.Size = New System.Drawing.Size(104, 17) - Me.chkSeasonNameTBN.TabIndex = 4 - Me.chkSeasonNameTBN.Text = ".tbn*" - Me.chkSeasonNameTBN.UseVisualStyleBackColor = True - ' - 'chkSeasonPosterJPG - ' - Me.chkSeasonPosterJPG.AutoSize = True - Me.chkSeasonPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonPosterJPG.Location = New System.Drawing.Point(6, 63) - Me.chkSeasonPosterJPG.Name = "chkSeasonPosterJPG" - Me.chkSeasonPosterJPG.Size = New System.Drawing.Size(84, 17) - Me.chkSeasonPosterJPG.TabIndex = 3 - Me.chkSeasonPosterJPG.Text = "poster.jpg*" - Me.chkSeasonPosterJPG.UseVisualStyleBackColor = True - ' - 'chkSeasonPosterTBN - ' - Me.chkSeasonPosterTBN.AutoSize = True - Me.chkSeasonPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonPosterTBN.Location = New System.Drawing.Point(6, 47) - Me.chkSeasonPosterTBN.Name = "chkSeasonPosterTBN" - Me.chkSeasonPosterTBN.Size = New System.Drawing.Size(85, 17) - Me.chkSeasonPosterTBN.TabIndex = 2 - Me.chkSeasonPosterTBN.Text = "poster.tbn*" - Me.chkSeasonPosterTBN.UseVisualStyleBackColor = True - ' - 'chkSeasonXTBN - ' - Me.chkSeasonXTBN.AutoSize = True - Me.chkSeasonXTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonXTBN.Location = New System.Drawing.Point(6, 31) - Me.chkSeasonXTBN.Name = "chkSeasonXTBN" - Me.chkSeasonXTBN.Size = New System.Drawing.Size(89, 17) - Me.chkSeasonXTBN.TabIndex = 1 - Me.chkSeasonXTBN.Text = "seasonX.tbn" - Me.chkSeasonXTBN.UseVisualStyleBackColor = True - ' - 'chkSeasonXXTBN - ' - Me.chkSeasonXXTBN.AutoSize = True - Me.chkSeasonXXTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkSeasonXXTBN.Location = New System.Drawing.Point(6, 15) - Me.chkSeasonXXTBN.Name = "chkSeasonXXTBN" - Me.chkSeasonXXTBN.Size = New System.Drawing.Size(95, 17) - Me.chkSeasonXXTBN.TabIndex = 0 - Me.chkSeasonXXTBN.Text = "seasonXX.tbn" - Me.chkSeasonXXTBN.UseVisualStyleBackColor = True - ' - 'gbEpisodePosters - ' - Me.gbEpisodePosters.Controls.Add(Me.chkEpisodeDashThumbJPG) - Me.gbEpisodePosters.Controls.Add(Me.chkEpisodeJPG) - Me.gbEpisodePosters.Controls.Add(Me.chkEpisodeTBN) - Me.gbEpisodePosters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbEpisodePosters.Location = New System.Drawing.Point(105, 121) - Me.gbEpisodePosters.Name = "gbEpisodePosters" - Me.gbEpisodePosters.Size = New System.Drawing.Size(124, 70) - Me.gbEpisodePosters.TabIndex = 4 - Me.gbEpisodePosters.TabStop = False - Me.gbEpisodePosters.Text = "Episode Posters" - ' - 'chkEpisodeDashThumbJPG - ' - Me.chkEpisodeDashThumbJPG.AutoSize = True - Me.chkEpisodeDashThumbJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodeDashThumbJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkEpisodeDashThumbJPG.Location = New System.Drawing.Point(6, 49) - Me.chkEpisodeDashThumbJPG.Name = "chkEpisodeDashThumbJPG" - Me.chkEpisodeDashThumbJPG.Size = New System.Drawing.Size(113, 17) - Me.chkEpisodeDashThumbJPG.TabIndex = 3 - Me.chkEpisodeDashThumbJPG.Text = "-thumb.jpg" - Me.chkEpisodeDashThumbJPG.UseVisualStyleBackColor = True - ' - 'chkEpisodeJPG - ' - Me.chkEpisodeJPG.AutoSize = True - Me.chkEpisodeJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodeJPG.Location = New System.Drawing.Point(6, 31) - Me.chkEpisodeJPG.Name = "chkEpisodeJPG" - Me.chkEpisodeJPG.Size = New System.Drawing.Size(75, 17) - Me.chkEpisodeJPG.TabIndex = 1 - Me.chkEpisodeJPG.Text = ".jpg" - Me.chkEpisodeJPG.UseVisualStyleBackColor = True - ' - 'chkEpisodeTBN - ' - Me.chkEpisodeTBN.AutoSize = True - Me.chkEpisodeTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodeTBN.Location = New System.Drawing.Point(6, 15) - Me.chkEpisodeTBN.Name = "chkEpisodeTBN" - Me.chkEpisodeTBN.Size = New System.Drawing.Size(76, 17) - Me.chkEpisodeTBN.TabIndex = 0 - Me.chkEpisodeTBN.Text = ".tbn" - Me.chkEpisodeTBN.UseVisualStyleBackColor = True - ' - 'gbShowFanart - ' - Me.gbShowFanart.Controls.Add(Me.chkShowDotFanart) - Me.gbShowFanart.Controls.Add(Me.chkShowDashFanart) - Me.gbShowFanart.Controls.Add(Me.chkShowFanartJPG) - Me.gbShowFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbShowFanart.Location = New System.Drawing.Point(5, 265) - Me.gbShowFanart.Name = "gbShowFanart" - Me.gbShowFanart.Size = New System.Drawing.Size(221, 50) - Me.gbShowFanart.TabIndex = 2 - Me.gbShowFanart.TabStop = False - Me.gbShowFanart.Text = "Show Fanart" - ' - 'chkShowDotFanart - ' - Me.chkShowDotFanart.AutoSize = True - Me.chkShowDotFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowDotFanart.Location = New System.Drawing.Point(6, 31) - Me.chkShowDotFanart.Name = "chkShowDotFanart" - Me.chkShowDotFanart.Size = New System.Drawing.Size(124, 17) - Me.chkShowDotFanart.TabIndex = 1 - Me.chkShowDotFanart.Text = ".fanart.jpg" - Me.chkShowDotFanart.UseVisualStyleBackColor = True - ' - 'chkShowDashFanart - ' - Me.chkShowDashFanart.AutoSize = True - Me.chkShowDashFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowDashFanart.Location = New System.Drawing.Point(6, 15) - Me.chkShowDashFanart.Name = "chkShowDashFanart" - Me.chkShowDashFanart.Size = New System.Drawing.Size(125, 17) - Me.chkShowDashFanart.TabIndex = 0 - Me.chkShowDashFanart.Text = "-fanart.jpg" - Me.chkShowDashFanart.UseVisualStyleBackColor = True - ' - 'chkShowFanartJPG - ' - Me.chkShowFanartJPG.AutoSize = True - Me.chkShowFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowFanartJPG.Location = New System.Drawing.Point(134, 15) - Me.chkShowFanartJPG.Name = "chkShowFanartJPG" - Me.chkShowFanartJPG.Size = New System.Drawing.Size(77, 17) - Me.chkShowFanartJPG.TabIndex = 2 - Me.chkShowFanartJPG.Text = "fanart.jpg" - Me.chkShowFanartJPG.UseVisualStyleBackColor = True - ' - 'gbEpisodeFanart - ' - Me.gbEpisodeFanart.Controls.Add(Me.chkEpisodeDotFanart) - Me.gbEpisodeFanart.Controls.Add(Me.chkEpisodeDashFanart) - Me.gbEpisodeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbEpisodeFanart.Location = New System.Drawing.Point(105, 67) - Me.gbEpisodeFanart.Name = "gbEpisodeFanart" - Me.gbEpisodeFanart.Size = New System.Drawing.Size(124, 52) - Me.gbEpisodeFanart.TabIndex = 5 - Me.gbEpisodeFanart.TabStop = False - Me.gbEpisodeFanart.Text = "Episode Fanart" - ' - 'chkEpisodeDotFanart - ' - Me.chkEpisodeDotFanart.AutoSize = True - Me.chkEpisodeDotFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodeDotFanart.Location = New System.Drawing.Point(5, 31) - Me.chkEpisodeDotFanart.Name = "chkEpisodeDotFanart" - Me.chkEpisodeDotFanart.Size = New System.Drawing.Size(109, 17) - Me.chkEpisodeDotFanart.TabIndex = 1 - Me.chkEpisodeDotFanart.Text = ".fanart.jpg" - Me.chkEpisodeDotFanart.UseVisualStyleBackColor = True - ' - 'chkEpisodeDashFanart - ' - Me.chkEpisodeDashFanart.AutoSize = True - Me.chkEpisodeDashFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkEpisodeDashFanart.Location = New System.Drawing.Point(5, 15) - Me.chkEpisodeDashFanart.Name = "chkEpisodeDashFanart" - Me.chkEpisodeDashFanart.Size = New System.Drawing.Size(110, 17) - Me.chkEpisodeDashFanart.TabIndex = 0 - Me.chkEpisodeDashFanart.Text = "-fanart.jpg" - Me.chkEpisodeDashFanart.UseVisualStyleBackColor = True - ' - 'gbShowPosters - ' - Me.gbShowPosters.Controls.Add(Me.chkShowJPG) - Me.gbShowPosters.Controls.Add(Me.chkShowTBN) - Me.gbShowPosters.Controls.Add(Me.chkShowPosterJPG) - Me.gbShowPosters.Controls.Add(Me.chkShowPosterTBN) - Me.gbShowPosters.Controls.Add(Me.chkShowFolderJPG) - Me.gbShowPosters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbShowPosters.Location = New System.Drawing.Point(3, 67) - Me.gbShowPosters.Name = "gbShowPosters" - Me.gbShowPosters.Size = New System.Drawing.Size(98, 98) - Me.gbShowPosters.TabIndex = 1 - Me.gbShowPosters.TabStop = False - Me.gbShowPosters.Text = "Show Posters" - ' - 'chkShowJPG - ' - Me.chkShowJPG.AutoSize = True - Me.chkShowJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowJPG.Location = New System.Drawing.Point(6, 32) - Me.chkShowJPG.Name = "chkShowJPG" - Me.chkShowJPG.Size = New System.Drawing.Size(90, 17) - Me.chkShowJPG.TabIndex = 1 - Me.chkShowJPG.Text = ".jpg" - Me.chkShowJPG.UseVisualStyleBackColor = True - ' - 'chkShowTBN - ' - Me.chkShowTBN.AutoSize = True - Me.chkShowTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowTBN.Location = New System.Drawing.Point(6, 16) - Me.chkShowTBN.Name = "chkShowTBN" - Me.chkShowTBN.Size = New System.Drawing.Size(91, 17) - Me.chkShowTBN.TabIndex = 0 - Me.chkShowTBN.Text = ".tbn" - Me.chkShowTBN.UseVisualStyleBackColor = True - ' - 'chkShowPosterJPG - ' - Me.chkShowPosterJPG.AutoSize = True - Me.chkShowPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowPosterJPG.Location = New System.Drawing.Point(6, 63) - Me.chkShowPosterJPG.Name = "chkShowPosterJPG" - Me.chkShowPosterJPG.Size = New System.Drawing.Size(79, 17) - Me.chkShowPosterJPG.TabIndex = 3 - Me.chkShowPosterJPG.Text = "poster.jpg" - Me.chkShowPosterJPG.UseVisualStyleBackColor = True - ' - 'chkShowPosterTBN - ' - Me.chkShowPosterTBN.AutoSize = True - Me.chkShowPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowPosterTBN.Location = New System.Drawing.Point(6, 48) - Me.chkShowPosterTBN.Name = "chkShowPosterTBN" - Me.chkShowPosterTBN.Size = New System.Drawing.Size(80, 17) - Me.chkShowPosterTBN.TabIndex = 2 - Me.chkShowPosterTBN.Text = "poster.tbn" - Me.chkShowPosterTBN.UseVisualStyleBackColor = True - ' - 'chkShowFolderJPG - ' - Me.chkShowFolderJPG.AutoSize = True - Me.chkShowFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkShowFolderJPG.Location = New System.Drawing.Point(6, 79) - Me.chkShowFolderJPG.Name = "chkShowFolderJPG" - Me.chkShowFolderJPG.Size = New System.Drawing.Size(77, 17) - Me.chkShowFolderJPG.TabIndex = 4 - Me.chkShowFolderJPG.Text = "folder.jpg" - Me.chkShowFolderJPG.UseVisualStyleBackColor = True - ' - 'Label11 - ' - Me.Label11.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label11.Location = New System.Drawing.Point(14, 4) - Me.Label11.Name = "Label11" - Me.Label11.Size = New System.Drawing.Size(341, 58) - Me.Label11.TabIndex = 0 - Me.Label11.Text = resources.GetString("Label11.Text") - Me.Label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'chkMovieNameDashPosterJPG - ' - Me.chkMovieNameDashPosterJPG.AutoSize = True - Me.chkMovieNameDashPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkMovieNameDashPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText - Me.chkMovieNameDashPosterJPG.Location = New System.Drawing.Point(10, 81) - Me.chkMovieNameDashPosterJPG.Name = "chkMovieNameDashPosterJPG" - Me.chkMovieNameDashPosterJPG.Size = New System.Drawing.Size(129, 17) - Me.chkMovieNameDashPosterJPG.TabIndex = 8 - Me.chkMovieNameDashPosterJPG.Text = "-poster.jpg" - Me.chkMovieNameDashPosterJPG.UseVisualStyleBackColor = True - ' - 'GroupBox21 - ' - Me.GroupBox21.Controls.Add(Me.rbBracketTrailer) - Me.GroupBox21.Controls.Add(Me.rbDashTrailer) - Me.GroupBox21.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox21.Location = New System.Drawing.Point(13, 218) - Me.GroupBox21.Name = "GroupBox21" - Me.GroupBox21.Size = New System.Drawing.Size(102, 59) - Me.GroupBox21.TabIndex = 7 - Me.GroupBox21.TabStop = False - Me.GroupBox21.Text = "Trailer" - ' - 'rbBracketTrailer - ' - Me.rbBracketTrailer.AutoSize = True - Me.rbBracketTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.rbBracketTrailer.Location = New System.Drawing.Point(10, 33) - Me.rbBracketTrailer.Name = "rbBracketTrailer" - Me.rbBracketTrailer.Size = New System.Drawing.Size(61, 17) - Me.rbBracketTrailer.TabIndex = 1 - Me.rbBracketTrailer.TabStop = True - Me.rbBracketTrailer.Text = "[trailer]" - Me.rbBracketTrailer.UseVisualStyleBackColor = True - ' - 'rbDashTrailer - ' - Me.rbDashTrailer.AutoSize = True - Me.rbDashTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.rbDashTrailer.ForeColor = System.Drawing.SystemColors.ControlText - Me.rbDashTrailer.Location = New System.Drawing.Point(10, 17) - Me.rbDashTrailer.Name = "rbDashTrailer" - Me.rbDashTrailer.Size = New System.Drawing.Size(59, 17) - Me.rbDashTrailer.TabIndex = 0 - Me.rbDashTrailer.TabStop = True - Me.rbDashTrailer.Text = "-trailer" - Me.rbDashTrailer.UseVisualStyleBackColor = True - ' - 'dlgWizard - ' - Me.AcceptButton = Me.OK_Button - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(546, 364) - Me.Controls.Add(Me.PictureBox1) - Me.Controls.Add(Me.btnBack) - Me.Controls.Add(Me.btnNext) - Me.Controls.Add(Me.OK_Button) - Me.Controls.Add(Me.Cancel_Button) - Me.Controls.Add(Me.Panel4) - Me.Controls.Add(Me.Panel2) - Me.Controls.Add(Me.Panel6) - Me.Controls.Add(Me.Panel5) - Me.Controls.Add(Me.Panel1) - Me.Controls.Add(Me.Panel3) - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MaximizeBox = False - Me.MinimizeBox = False - Me.Name = "dlgWizard" - Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent - Me.Text = "Ember Startup Wizard" - Me.TopMost = True - Me.Panel1.ResumeLayout(False) - Me.Panel1.PerformLayout() - Me.Panel3.ResumeLayout(False) - Me.GroupBox7.ResumeLayout(False) - Me.GroupBox7.PerformLayout() - Me.GroupBox6.ResumeLayout(False) - Me.GroupBox6.PerformLayout() - Me.GroupBox5.ResumeLayout(False) - Me.GroupBox5.PerformLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() - Me.Panel2.ResumeLayout(False) - Me.Panel6.ResumeLayout(False) - Me.Panel6.PerformLayout() - Me.Panel4.ResumeLayout(False) - Me.Panel5.ResumeLayout(False) - Me.gbAllSeasonPoster.ResumeLayout(False) - Me.gbAllSeasonPoster.PerformLayout() - Me.gbSeasonFanart.ResumeLayout(False) - Me.gbSeasonFanart.PerformLayout() - Me.gbSeasonPosters.ResumeLayout(False) - Me.gbSeasonPosters.PerformLayout() - Me.gbEpisodePosters.ResumeLayout(False) - Me.gbEpisodePosters.PerformLayout() - Me.gbShowFanart.ResumeLayout(False) - Me.gbShowFanart.PerformLayout() - Me.gbEpisodeFanart.ResumeLayout(False) - Me.gbEpisodeFanart.PerformLayout() - Me.gbShowPosters.ResumeLayout(False) - Me.gbShowPosters.PerformLayout() - Me.GroupBox21.ResumeLayout(False) - Me.GroupBox21.PerformLayout() - Me.ResumeLayout(False) + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(dlgWizard)) + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.btnBack = New System.Windows.Forms.Button() + Me.btnNext = New System.Windows.Forms.Button() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Panel3 = New System.Windows.Forms.Panel() + Me.GroupBox7 = New System.Windows.Forms.GroupBox() + Me.chkMovieNameNFOStack = New System.Windows.Forms.CheckBox() + Me.chkMovieNameNFO = New System.Windows.Forms.CheckBox() + Me.chkMovieNFO = New System.Windows.Forms.CheckBox() + Me.chkVideoTSParentXBMC = New System.Windows.Forms.CheckBox() + Me.GroupBox21 = New System.Windows.Forms.GroupBox() + Me.rbBracketTrailer = New System.Windows.Forms.RadioButton() + Me.rbDashTrailer = New System.Windows.Forms.RadioButton() + Me.chkMovieNameMultiOnly = New System.Windows.Forms.CheckBox() + Me.btnMovieFrodo = New System.Windows.Forms.Button() + Me.GroupBox6 = New System.Windows.Forms.GroupBox() + Me.chkMovieNameDotFanartJPG = New System.Windows.Forms.CheckBox() + Me.chkMovieNameFanartJPG = New System.Windows.Forms.CheckBox() + Me.chkFanartJPG = New System.Windows.Forms.CheckBox() + Me.GroupBox5 = New System.Windows.Forms.GroupBox() + Me.chkMovieNameDashPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkFolderJPG = New System.Windows.Forms.CheckBox() + Me.chkPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkPosterTBN = New System.Windows.Forms.CheckBox() + Me.chkMovieNameJPG = New System.Windows.Forms.CheckBox() + Me.chkMovieJPG = New System.Windows.Forms.CheckBox() + Me.chkMovieNameTBN = New System.Windows.Forms.CheckBox() + Me.chkMovieTBN = New System.Windows.Forms.CheckBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.Label4 = New System.Windows.Forms.Label() + Me.Label32 = New System.Windows.Forms.Label() + Me.cbIntLang = New System.Windows.Forms.ComboBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.lvMovies = New System.Windows.Forms.ListView() + Me.colID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colPath = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colRecur = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colFolder = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.colSingle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.btnMovieRem = New System.Windows.Forms.Button() + Me.btnMovieAddFolder = New System.Windows.Forms.Button() + Me.Label3 = New System.Windows.Forms.Label() + Me.Panel6 = New System.Windows.Forms.Panel() + Me.Label8 = New System.Windows.Forms.Label() + Me.Label6 = New System.Windows.Forms.Label() + Me.Label7 = New System.Windows.Forms.Label() + Me.Panel4 = New System.Windows.Forms.Panel() + Me.Label10 = New System.Windows.Forms.Label() + Me.btnTVLanguageFetch = New System.Windows.Forms.Button() + Me.lvTVSources = New System.Windows.Forms.ListView() + Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.cbTVLanguage = New System.Windows.Forms.ComboBox() + Me.btnTVRemoveSource = New System.Windows.Forms.Button() + Me.btnTVAddSource = New System.Windows.Forms.Button() + Me.Label9 = New System.Windows.Forms.Label() + Me.Panel5 = New System.Windows.Forms.Panel() + Me.btnTVShowFrodo = New System.Windows.Forms.Button() + Me.gbAllSeasonPoster = New System.Windows.Forms.GroupBox() + Me.chkSeasonAllPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonAllJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonAllTBN = New System.Windows.Forms.CheckBox() + Me.lblInsideSeason = New System.Windows.Forms.Label() + Me.gbSeasonFanart = New System.Windows.Forms.GroupBox() + Me.chkSeasonXXDashFanartJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonDotFanart = New System.Windows.Forms.CheckBox() + Me.chkSeasonDashFanart = New System.Windows.Forms.CheckBox() + Me.chkSeasonFanartJPG = New System.Windows.Forms.CheckBox() + Me.gbSeasonPosters = New System.Windows.Forms.GroupBox() + Me.chkSeasonXXDashPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonFolderJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonNameJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonNameTBN = New System.Windows.Forms.CheckBox() + Me.chkSeasonPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkSeasonPosterTBN = New System.Windows.Forms.CheckBox() + Me.chkSeasonXTBN = New System.Windows.Forms.CheckBox() + Me.chkSeasonXXTBN = New System.Windows.Forms.CheckBox() + Me.gbEpisodePosters = New System.Windows.Forms.GroupBox() + Me.chkEpisodeDashThumbJPG = New System.Windows.Forms.CheckBox() + Me.chkEpisodeJPG = New System.Windows.Forms.CheckBox() + Me.chkEpisodeTBN = New System.Windows.Forms.CheckBox() + Me.gbShowFanart = New System.Windows.Forms.GroupBox() + Me.chkShowDotFanart = New System.Windows.Forms.CheckBox() + Me.chkShowDashFanart = New System.Windows.Forms.CheckBox() + Me.chkShowFanartJPG = New System.Windows.Forms.CheckBox() + Me.gbEpisodeFanart = New System.Windows.Forms.GroupBox() + Me.chkEpisodeDotFanart = New System.Windows.Forms.CheckBox() + Me.chkEpisodeDashFanart = New System.Windows.Forms.CheckBox() + Me.gbShowPosters = New System.Windows.Forms.GroupBox() + Me.chkShowJPG = New System.Windows.Forms.CheckBox() + Me.chkShowTBN = New System.Windows.Forms.CheckBox() + Me.chkShowPosterJPG = New System.Windows.Forms.CheckBox() + Me.chkShowPosterTBN = New System.Windows.Forms.CheckBox() + Me.chkShowFolderJPG = New System.Windows.Forms.CheckBox() + Me.Label11 = New System.Windows.Forms.Label() + Me.Panel1.SuspendLayout() + Me.Panel3.SuspendLayout() + Me.GroupBox7.SuspendLayout() + Me.GroupBox21.SuspendLayout() + Me.GroupBox6.SuspendLayout() + Me.GroupBox5.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.Panel2.SuspendLayout() + Me.Panel6.SuspendLayout() + Me.Panel4.SuspendLayout() + Me.Panel5.SuspendLayout() + Me.gbAllSeasonPoster.SuspendLayout() + Me.gbSeasonFanart.SuspendLayout() + Me.gbSeasonPosters.SuspendLayout() + Me.gbEpisodePosters.SuspendLayout() + Me.gbShowFanart.SuspendLayout() + Me.gbEpisodeFanart.SuspendLayout() + Me.gbShowPosters.SuspendLayout() + Me.SuspendLayout() + ' + 'OK_Button + ' + Me.OK_Button.DialogResult = System.Windows.Forms.DialogResult.OK + Me.OK_Button.Enabled = False + Me.OK_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.OK_Button.Location = New System.Drawing.Point(402, 337) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Cancel_Button.Location = New System.Drawing.Point(475, 337) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'btnBack + ' + Me.btnBack.Enabled = False + Me.btnBack.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnBack.Location = New System.Drawing.Point(219, 337) + Me.btnBack.Name = "btnBack" + Me.btnBack.Size = New System.Drawing.Size(67, 23) + Me.btnBack.TabIndex = 3 + Me.btnBack.Text = "< Back" + ' + 'btnNext + ' + Me.btnNext.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnNext.Location = New System.Drawing.Point(292, 337) + Me.btnNext.Name = "btnNext" + Me.btnNext.Size = New System.Drawing.Size(67, 23) + Me.btnNext.TabIndex = 2 + Me.btnNext.Text = "Next >" + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Panel1.Controls.Add(Me.Label32) + Me.Panel1.Controls.Add(Me.cbIntLang) + Me.Panel1.Controls.Add(Me.Label2) + Me.Panel1.Controls.Add(Me.Label1) + Me.Panel1.Location = New System.Drawing.Point(166, 7) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(376, 323) + Me.Panel1.TabIndex = 4 + ' + 'Panel3 + ' + Me.Panel3.BackColor = System.Drawing.Color.White + Me.Panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Panel3.Controls.Add(Me.GroupBox7) + Me.Panel3.Controls.Add(Me.chkVideoTSParentXBMC) + Me.Panel3.Controls.Add(Me.GroupBox21) + Me.Panel3.Controls.Add(Me.chkMovieNameMultiOnly) + Me.Panel3.Controls.Add(Me.btnMovieFrodo) + Me.Panel3.Controls.Add(Me.GroupBox6) + Me.Panel3.Controls.Add(Me.GroupBox5) + Me.Panel3.Controls.Add(Me.Label5) + Me.Panel3.Controls.Add(Me.Label4) + Me.Panel3.Location = New System.Drawing.Point(666, 7) + Me.Panel3.Name = "Panel3" + Me.Panel3.Size = New System.Drawing.Size(376, 323) + Me.Panel3.TabIndex = 6 + Me.Panel3.Visible = False + ' + 'GroupBox7 + ' + Me.GroupBox7.Controls.Add(Me.chkMovieNameNFOStack) + Me.GroupBox7.Controls.Add(Me.chkMovieNameNFO) + Me.GroupBox7.Controls.Add(Me.chkMovieNFO) + Me.GroupBox7.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox7.Location = New System.Drawing.Point(218, 181) + Me.GroupBox7.Name = "GroupBox7" + Me.GroupBox7.Size = New System.Drawing.Size(139, 74) + Me.GroupBox7.TabIndex = 3 + Me.GroupBox7.TabStop = False + Me.GroupBox7.Text = "NFO" + ' + 'chkMovieNameNFOStack + ' + Me.chkMovieNameNFOStack.AutoSize = True + Me.chkMovieNameNFOStack.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkMovieNameNFOStack.Location = New System.Drawing.Point(6, 53) + Me.chkMovieNameNFOStack.Name = "chkMovieNameNFOStack" + Me.chkMovieNameNFOStack.Size = New System.Drawing.Size(129, 17) + Me.chkMovieNameNFOStack.TabIndex = 2 + Me.chkMovieNameNFOStack.Text = ".nfo (Stack)" + Me.chkMovieNameNFOStack.UseVisualStyleBackColor = True + ' + 'chkMovieNameNFO + ' + Me.chkMovieNameNFO.AutoSize = True + Me.chkMovieNameNFO.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkMovieNameNFO.Location = New System.Drawing.Point(6, 34) + Me.chkMovieNameNFO.Name = "chkMovieNameNFO" + Me.chkMovieNameNFO.Size = New System.Drawing.Size(93, 17) + Me.chkMovieNameNFO.TabIndex = 1 + Me.chkMovieNameNFO.Text = ".nfo" + Me.chkMovieNameNFO.UseVisualStyleBackColor = True + ' + 'chkMovieNFO + ' + Me.chkMovieNFO.AutoSize = True + Me.chkMovieNFO.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkMovieNFO.Location = New System.Drawing.Point(6, 18) + Me.chkMovieNFO.Name = "chkMovieNFO" + Me.chkMovieNFO.Size = New System.Drawing.Size(77, 17) + Me.chkMovieNFO.TabIndex = 0 + Me.chkMovieNFO.Text = "movie.nfo" + Me.chkMovieNFO.UseVisualStyleBackColor = True + ' + 'chkVideoTSParentXBMC + ' + Me.chkVideoTSParentXBMC.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkVideoTSParentXBMC.Location = New System.Drawing.Point(20, 269) + Me.chkVideoTSParentXBMC.Name = "chkVideoTSParentXBMC" + Me.chkVideoTSParentXBMC.Size = New System.Drawing.Size(337, 26) + Me.chkVideoTSParentXBMC.TabIndex = 7 + Me.chkVideoTSParentXBMC.Text = "Frodo Compatible VIDEO_TS File Placement/Naming" + Me.chkVideoTSParentXBMC.UseVisualStyleBackColor = True + ' + 'GroupBox21 + ' + Me.GroupBox21.Controls.Add(Me.rbBracketTrailer) + Me.GroupBox21.Controls.Add(Me.rbDashTrailer) + Me.GroupBox21.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox21.Location = New System.Drawing.Point(13, 205) + Me.GroupBox21.Name = "GroupBox21" + Me.GroupBox21.Size = New System.Drawing.Size(102, 59) + Me.GroupBox21.TabIndex = 4 + Me.GroupBox21.TabStop = False + Me.GroupBox21.Text = "Trailer" + ' + 'rbBracketTrailer + ' + Me.rbBracketTrailer.AutoSize = True + Me.rbBracketTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.rbBracketTrailer.Location = New System.Drawing.Point(10, 33) + Me.rbBracketTrailer.Name = "rbBracketTrailer" + Me.rbBracketTrailer.Size = New System.Drawing.Size(61, 17) + Me.rbBracketTrailer.TabIndex = 1 + Me.rbBracketTrailer.TabStop = True + Me.rbBracketTrailer.Text = "[trailer]" + Me.rbBracketTrailer.UseVisualStyleBackColor = True + ' + 'rbDashTrailer + ' + Me.rbDashTrailer.AutoSize = True + Me.rbDashTrailer.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.rbDashTrailer.ForeColor = System.Drawing.SystemColors.ControlText + Me.rbDashTrailer.Location = New System.Drawing.Point(10, 17) + Me.rbDashTrailer.Name = "rbDashTrailer" + Me.rbDashTrailer.Size = New System.Drawing.Size(59, 17) + Me.rbDashTrailer.TabIndex = 0 + Me.rbDashTrailer.TabStop = True + Me.rbDashTrailer.Text = "-trailer" + Me.rbDashTrailer.UseVisualStyleBackColor = True + ' + 'chkMovieNameMultiOnly + ' + Me.chkMovieNameMultiOnly.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieNameMultiOnly.Location = New System.Drawing.Point(121, 236) + Me.chkMovieNameMultiOnly.Name = "chkMovieNameMultiOnly" + Me.chkMovieNameMultiOnly.Size = New System.Drawing.Size(236, 34) + Me.chkMovieNameMultiOnly.TabIndex = 6 + Me.chkMovieNameMultiOnly.Text = "Use Only for Folders with Multiple Movies" + Me.chkMovieNameMultiOnly.UseVisualStyleBackColor = True + ' + 'btnMovieFrodo + ' + Me.btnMovieFrodo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnMovieFrodo.Location = New System.Drawing.Point(121, 213) + Me.btnMovieFrodo.Name = "btnMovieFrodo" + Me.btnMovieFrodo.Size = New System.Drawing.Size(91, 23) + Me.btnMovieFrodo.TabIndex = 5 + Me.btnMovieFrodo.Text = "XBMC Frodo" + Me.btnMovieFrodo.UseVisualStyleBackColor = True + ' + 'GroupBox6 + ' + Me.GroupBox6.Controls.Add(Me.chkMovieNameDotFanartJPG) + Me.GroupBox6.Controls.Add(Me.chkMovieNameFanartJPG) + Me.GroupBox6.Controls.Add(Me.chkFanartJPG) + Me.GroupBox6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox6.Location = New System.Drawing.Point(218, 107) + Me.GroupBox6.Name = "GroupBox6" + Me.GroupBox6.Size = New System.Drawing.Size(139, 70) + Me.GroupBox6.TabIndex = 2 + Me.GroupBox6.TabStop = False + Me.GroupBox6.Text = "Fanart" + ' + 'chkMovieNameDotFanartJPG + ' + Me.chkMovieNameDotFanartJPG.AutoSize = True + Me.chkMovieNameDotFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkMovieNameDotFanartJPG.Location = New System.Drawing.Point(6, 51) + Me.chkMovieNameDotFanartJPG.Name = "chkMovieNameDotFanartJPG" + Me.chkMovieNameDotFanartJPG.Size = New System.Drawing.Size(126, 17) + Me.chkMovieNameDotFanartJPG.TabIndex = 2 + Me.chkMovieNameDotFanartJPG.Text = ".fanart.jpg" + Me.chkMovieNameDotFanartJPG.UseVisualStyleBackColor = True + ' + 'chkMovieNameFanartJPG + ' + Me.chkMovieNameFanartJPG.AutoSize = True + Me.chkMovieNameFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkMovieNameFanartJPG.Location = New System.Drawing.Point(6, 35) + Me.chkMovieNameFanartJPG.Name = "chkMovieNameFanartJPG" + Me.chkMovieNameFanartJPG.Size = New System.Drawing.Size(127, 17) + Me.chkMovieNameFanartJPG.TabIndex = 1 + Me.chkMovieNameFanartJPG.Text = "-fanart.jpg" + Me.chkMovieNameFanartJPG.UseVisualStyleBackColor = True + ' + 'chkFanartJPG + ' + Me.chkFanartJPG.AutoSize = True + Me.chkFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkFanartJPG.Location = New System.Drawing.Point(6, 19) + Me.chkFanartJPG.Name = "chkFanartJPG" + Me.chkFanartJPG.Size = New System.Drawing.Size(77, 17) + Me.chkFanartJPG.TabIndex = 0 + Me.chkFanartJPG.Text = "fanart.jpg" + Me.chkFanartJPG.UseVisualStyleBackColor = True + ' + 'GroupBox5 + ' + Me.GroupBox5.Controls.Add(Me.chkMovieNameDashPosterJPG) + Me.GroupBox5.Controls.Add(Me.chkFolderJPG) + Me.GroupBox5.Controls.Add(Me.chkPosterJPG) + Me.GroupBox5.Controls.Add(Me.chkPosterTBN) + Me.GroupBox5.Controls.Add(Me.chkMovieNameJPG) + Me.GroupBox5.Controls.Add(Me.chkMovieJPG) + Me.GroupBox5.Controls.Add(Me.chkMovieNameTBN) + Me.GroupBox5.Controls.Add(Me.chkMovieTBN) + Me.GroupBox5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox5.Location = New System.Drawing.Point(13, 107) + Me.GroupBox5.Name = "GroupBox5" + Me.GroupBox5.Size = New System.Drawing.Size(199, 104) + Me.GroupBox5.TabIndex = 1 + Me.GroupBox5.TabStop = False + Me.GroupBox5.Text = "Posters" + ' + 'chkMovieNameDashPosterJPG + ' + Me.chkMovieNameDashPosterJPG.AutoSize = True + Me.chkMovieNameDashPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkMovieNameDashPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkMovieNameDashPosterJPG.Location = New System.Drawing.Point(10, 81) + Me.chkMovieNameDashPosterJPG.Name = "chkMovieNameDashPosterJPG" + Me.chkMovieNameDashPosterJPG.Size = New System.Drawing.Size(129, 17) + Me.chkMovieNameDashPosterJPG.TabIndex = 8 + Me.chkMovieNameDashPosterJPG.Text = "-poster.jpg" + Me.chkMovieNameDashPosterJPG.UseVisualStyleBackColor = True + ' + 'chkFolderJPG + ' + Me.chkFolderJPG.AutoSize = True + Me.chkFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkFolderJPG.Location = New System.Drawing.Point(10, 65) + Me.chkFolderJPG.Name = "chkFolderJPG" + Me.chkFolderJPG.Size = New System.Drawing.Size(77, 17) + Me.chkFolderJPG.TabIndex = 3 + Me.chkFolderJPG.Text = "folder.jpg" + Me.chkFolderJPG.UseVisualStyleBackColor = True + ' + 'chkPosterJPG + ' + Me.chkPosterJPG.AutoSize = True + Me.chkPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkPosterJPG.Location = New System.Drawing.Point(100, 49) + Me.chkPosterJPG.Name = "chkPosterJPG" + Me.chkPosterJPG.Size = New System.Drawing.Size(79, 17) + Me.chkPosterJPG.TabIndex = 6 + Me.chkPosterJPG.Text = "poster.jpg" + Me.chkPosterJPG.UseVisualStyleBackColor = True + ' + 'chkPosterTBN + ' + Me.chkPosterTBN.AutoSize = True + Me.chkPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkPosterTBN.Location = New System.Drawing.Point(10, 49) + Me.chkPosterTBN.Name = "chkPosterTBN" + Me.chkPosterTBN.Size = New System.Drawing.Size(80, 17) + Me.chkPosterTBN.TabIndex = 2 + Me.chkPosterTBN.Text = "poster.tbn" + Me.chkPosterTBN.UseVisualStyleBackColor = True + ' + 'chkMovieNameJPG + ' + Me.chkMovieNameJPG.AutoSize = True + Me.chkMovieNameJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkMovieNameJPG.Location = New System.Drawing.Point(100, 33) + Me.chkMovieNameJPG.Name = "chkMovieNameJPG" + Me.chkMovieNameJPG.Size = New System.Drawing.Size(92, 17) + Me.chkMovieNameJPG.TabIndex = 5 + Me.chkMovieNameJPG.Text = ".jpg" + Me.chkMovieNameJPG.UseVisualStyleBackColor = True + ' + 'chkMovieJPG + ' + Me.chkMovieJPG.AutoSize = True + Me.chkMovieJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkMovieJPG.Location = New System.Drawing.Point(10, 33) + Me.chkMovieJPG.Name = "chkMovieJPG" + Me.chkMovieJPG.Size = New System.Drawing.Size(76, 17) + Me.chkMovieJPG.TabIndex = 1 + Me.chkMovieJPG.Text = "movie.jpg" + Me.chkMovieJPG.UseVisualStyleBackColor = True + ' + 'chkMovieNameTBN + ' + Me.chkMovieNameTBN.AutoSize = True + Me.chkMovieNameTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkMovieNameTBN.Location = New System.Drawing.Point(100, 17) + Me.chkMovieNameTBN.Name = "chkMovieNameTBN" + Me.chkMovieNameTBN.Size = New System.Drawing.Size(93, 17) + Me.chkMovieNameTBN.TabIndex = 4 + Me.chkMovieNameTBN.Text = ".tbn" + Me.chkMovieNameTBN.UseVisualStyleBackColor = True + ' + 'chkMovieTBN + ' + Me.chkMovieTBN.AutoSize = True + Me.chkMovieTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkMovieTBN.Location = New System.Drawing.Point(10, 17) + Me.chkMovieTBN.Name = "chkMovieTBN" + Me.chkMovieTBN.Size = New System.Drawing.Size(77, 17) + Me.chkMovieTBN.TabIndex = 0 + Me.chkMovieTBN.Text = "movie.tbn" + Me.chkMovieTBN.UseVisualStyleBackColor = True + ' + 'Label5 + ' + Me.Label5.Font = New System.Drawing.Font("Segoe UI", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.Location = New System.Drawing.Point(45, 292) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(286, 30) + Me.Label5.TabIndex = 5 + Me.Label5.Text = "TIP: Selections containing the text means that Ember Media Manager will u" & _ + "se the filename of the movie." + Me.Label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label4 + ' + Me.Label4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label4.Location = New System.Drawing.Point(13, 15) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(341, 93) + Me.Label4.TabIndex = 0 + Me.Label4.Text = resources.GetString("Label4.Text") + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label32 + ' + Me.Label32.AutoSize = True + Me.Label32.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label32.Location = New System.Drawing.Point(108, 260) + Me.Label32.Name = "Label32" + Me.Label32.Size = New System.Drawing.Size(110, 13) + Me.Label32.TabIndex = 2 + Me.Label32.Text = "Interface Language:" + ' + 'cbIntLang + ' + Me.cbIntLang.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbIntLang.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbIntLang.FormattingEnabled = True + Me.cbIntLang.Location = New System.Drawing.Point(110, 275) + Me.cbIntLang.Name = "cbIntLang" + Me.cbIntLang.Size = New System.Drawing.Size(148, 21) + Me.cbIntLang.TabIndex = 3 + ' + 'Label2 + ' + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(17, 46) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(337, 201) + Me.Label2.TabIndex = 1 + Me.Label2.Text = resources.GetString("Label2.Text") + Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.Location = New System.Drawing.Point(15, 15) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(325, 25) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "Welcome to Ember Media Manager" + ' + 'PictureBox1 + ' + Me.PictureBox1.BackColor = System.Drawing.Color.White + Me.PictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.PictureBox1.Image = Global.Ember_Media_Manager.My.Resources.Resources.Wizard + Me.PictureBox1.Location = New System.Drawing.Point(3, 7) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(157, 353) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'Panel2 + ' + Me.Panel2.BackColor = System.Drawing.Color.White + Me.Panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Panel2.Controls.Add(Me.lvMovies) + Me.Panel2.Controls.Add(Me.btnMovieRem) + Me.Panel2.Controls.Add(Me.btnMovieAddFolder) + Me.Panel2.Controls.Add(Me.Label3) + Me.Panel2.Location = New System.Drawing.Point(566, 7) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(376, 323) + Me.Panel2.TabIndex = 5 + Me.Panel2.Visible = False + ' + 'lvMovies + ' + Me.lvMovies.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.colID, Me.colName, Me.colPath, Me.colRecur, Me.colFolder, Me.colSingle}) + Me.lvMovies.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lvMovies.FullRowSelect = True + Me.lvMovies.HideSelection = False + Me.lvMovies.Location = New System.Drawing.Point(6, 124) + Me.lvMovies.Name = "lvMovies" + Me.lvMovies.Size = New System.Drawing.Size(362, 105) + Me.lvMovies.Sorting = System.Windows.Forms.SortOrder.Ascending + Me.lvMovies.TabIndex = 1 + Me.lvMovies.UseCompatibleStateImageBehavior = False + Me.lvMovies.View = System.Windows.Forms.View.Details + ' + 'colID + ' + Me.colID.Width = 0 + ' + 'colName + ' + Me.colName.Text = "Name" + Me.colName.Width = 50 + ' + 'colPath + ' + Me.colPath.Text = "Path" + Me.colPath.Width = 125 + ' + 'colRecur + ' + Me.colRecur.Text = "Recursive" + ' + 'colFolder + ' + Me.colFolder.Text = "Use Folder Name" + ' + 'colSingle + ' + Me.colSingle.Text = "Single Video" + ' + 'btnMovieRem + ' + Me.btnMovieRem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnMovieRem.Image = CType(resources.GetObject("btnMovieRem.Image"), System.Drawing.Image) + Me.btnMovieRem.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnMovieRem.Location = New System.Drawing.Point(264, 236) + Me.btnMovieRem.Name = "btnMovieRem" + Me.btnMovieRem.Size = New System.Drawing.Size(104, 23) + Me.btnMovieRem.TabIndex = 3 + Me.btnMovieRem.Text = "Remove" + Me.btnMovieRem.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnMovieRem.UseVisualStyleBackColor = True + ' + 'btnMovieAddFolder + ' + Me.btnMovieAddFolder.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnMovieAddFolder.Image = CType(resources.GetObject("btnMovieAddFolder.Image"), System.Drawing.Image) + Me.btnMovieAddFolder.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnMovieAddFolder.Location = New System.Drawing.Point(4, 236) + Me.btnMovieAddFolder.Name = "btnMovieAddFolder" + Me.btnMovieAddFolder.Size = New System.Drawing.Size(104, 23) + Me.btnMovieAddFolder.TabIndex = 2 + Me.btnMovieAddFolder.Text = "Add Source" + Me.btnMovieAddFolder.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnMovieAddFolder.UseVisualStyleBackColor = True + ' + 'Label3 + ' + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label3.Location = New System.Drawing.Point(19, 15) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(332, 93) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "First, let's tell Ember Media Manager where to locate all your movies. You can ad" & _ + "d as many sources as you wish." + Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Panel6 + ' + Me.Panel6.BackColor = System.Drawing.Color.White + Me.Panel6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Panel6.Controls.Add(Me.Label8) + Me.Panel6.Controls.Add(Me.Label6) + Me.Panel6.Controls.Add(Me.Label7) + Me.Panel6.Location = New System.Drawing.Point(959, 406) + Me.Panel6.Name = "Panel6" + Me.Panel6.Size = New System.Drawing.Size(376, 323) + Me.Panel6.TabIndex = 9 + Me.Panel6.Visible = False + ' + 'Label8 + ' + Me.Label8.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label8.Location = New System.Drawing.Point(3, 105) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(369, 216) + Me.Label8.TabIndex = 2 + Me.Label8.Text = resources.GetString("Label8.Text") + ' + 'Label6 + ' + Me.Label6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label6.Location = New System.Drawing.Point(17, 57) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(337, 46) + Me.Label6.TabIndex = 1 + Me.Label6.Text = "That wasn't so hard was it? As mentioned earlier, you can change these or any ot" & _ + "her options in the Settings dialog." + Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Label7 + ' + Me.Label7.AutoSize = True + Me.Label7.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label7.Location = New System.Drawing.Point(36, 5) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(297, 50) + Me.Label7.TabIndex = 0 + Me.Label7.Text = "That's it!" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Ember Media Manager is Ready!" + Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Panel4 + ' + Me.Panel4.BackColor = System.Drawing.Color.White + Me.Panel4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Panel4.Controls.Add(Me.Label10) + Me.Panel4.Controls.Add(Me.btnTVLanguageFetch) + Me.Panel4.Controls.Add(Me.lvTVSources) + Me.Panel4.Controls.Add(Me.cbTVLanguage) + Me.Panel4.Controls.Add(Me.btnTVRemoveSource) + Me.Panel4.Controls.Add(Me.btnTVAddSource) + Me.Panel4.Controls.Add(Me.Label9) + Me.Panel4.Location = New System.Drawing.Point(166, 406) + Me.Panel4.Name = "Panel4" + Me.Panel4.Size = New System.Drawing.Size(376, 323) + Me.Panel4.TabIndex = 7 + Me.Panel4.Visible = False + ' + 'Label10 + ' + Me.Label10.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label10.Location = New System.Drawing.Point(18, 220) + Me.Label10.Name = "Label10" + Me.Label10.Size = New System.Drawing.Size(332, 41) + Me.Label10.TabIndex = 4 + Me.Label10.Text = "Now select the default language you would like Ember to look for when scraping TV" & _ + " Show items." + Me.Label10.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'btnTVLanguageFetch + ' + Me.btnTVLanguageFetch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnTVLanguageFetch.Location = New System.Drawing.Point(101, 293) + Me.btnTVLanguageFetch.Name = "btnTVLanguageFetch" + Me.btnTVLanguageFetch.Size = New System.Drawing.Size(166, 23) + Me.btnTVLanguageFetch.TabIndex = 5 + Me.btnTVLanguageFetch.Text = "Fetch Available Languages" + Me.btnTVLanguageFetch.UseVisualStyleBackColor = True + ' + 'lvTVSources + ' + Me.lvTVSources.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3}) + Me.lvTVSources.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lvTVSources.FullRowSelect = True + Me.lvTVSources.HideSelection = False + Me.lvTVSources.Location = New System.Drawing.Point(6, 82) + Me.lvTVSources.Name = "lvTVSources" + Me.lvTVSources.Size = New System.Drawing.Size(360, 105) + Me.lvTVSources.Sorting = System.Windows.Forms.SortOrder.Ascending + Me.lvTVSources.TabIndex = 1 + Me.lvTVSources.UseCompatibleStateImageBehavior = False + Me.lvTVSources.View = System.Windows.Forms.View.Details + ' + 'ColumnHeader1 + ' + Me.ColumnHeader1.Width = 0 + ' + 'ColumnHeader2 + ' + Me.ColumnHeader2.Text = "Name" + Me.ColumnHeader2.Width = 94 + ' + 'ColumnHeader3 + ' + Me.ColumnHeader3.Text = "Path" + Me.ColumnHeader3.Width = 261 + ' + 'cbTVLanguage + ' + Me.cbTVLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbTVLanguage.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbTVLanguage.Location = New System.Drawing.Point(101, 268) + Me.cbTVLanguage.Name = "cbTVLanguage" + Me.cbTVLanguage.Size = New System.Drawing.Size(166, 21) + Me.cbTVLanguage.TabIndex = 6 + ' + 'btnTVRemoveSource + ' + Me.btnTVRemoveSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnTVRemoveSource.Image = CType(resources.GetObject("btnTVRemoveSource.Image"), System.Drawing.Image) + Me.btnTVRemoveSource.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnTVRemoveSource.Location = New System.Drawing.Point(264, 194) + Me.btnTVRemoveSource.Name = "btnTVRemoveSource" + Me.btnTVRemoveSource.Size = New System.Drawing.Size(104, 23) + Me.btnTVRemoveSource.TabIndex = 3 + Me.btnTVRemoveSource.Text = "Remove" + Me.btnTVRemoveSource.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnTVRemoveSource.UseVisualStyleBackColor = True + ' + 'btnTVAddSource + ' + Me.btnTVAddSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnTVAddSource.Image = CType(resources.GetObject("btnTVAddSource.Image"), System.Drawing.Image) + Me.btnTVAddSource.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnTVAddSource.Location = New System.Drawing.Point(4, 194) + Me.btnTVAddSource.Name = "btnTVAddSource" + Me.btnTVAddSource.Size = New System.Drawing.Size(104, 23) + Me.btnTVAddSource.TabIndex = 2 + Me.btnTVAddSource.Text = "Add Source" + Me.btnTVAddSource.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnTVAddSource.UseVisualStyleBackColor = True + ' + 'Label9 + ' + Me.Label9.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label9.Location = New System.Drawing.Point(19, 15) + Me.Label9.Name = "Label9" + Me.Label9.Size = New System.Drawing.Size(332, 64) + Me.Label9.TabIndex = 0 + Me.Label9.Text = "Next, let's tell Ember Media Manager where to locate all your TV Shows. You can a" & _ + "dd as many sources as you wish." + Me.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Panel5 + ' + Me.Panel5.BackColor = System.Drawing.Color.White + Me.Panel5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Panel5.Controls.Add(Me.btnTVShowFrodo) + Me.Panel5.Controls.Add(Me.gbAllSeasonPoster) + Me.Panel5.Controls.Add(Me.lblInsideSeason) + Me.Panel5.Controls.Add(Me.gbSeasonFanart) + Me.Panel5.Controls.Add(Me.gbSeasonPosters) + Me.Panel5.Controls.Add(Me.gbEpisodePosters) + Me.Panel5.Controls.Add(Me.gbShowFanart) + Me.Panel5.Controls.Add(Me.gbEpisodeFanart) + Me.Panel5.Controls.Add(Me.gbShowPosters) + Me.Panel5.Controls.Add(Me.Label11) + Me.Panel5.Location = New System.Drawing.Point(566, 406) + Me.Panel5.Name = "Panel5" + Me.Panel5.Size = New System.Drawing.Size(376, 323) + Me.Panel5.TabIndex = 8 + Me.Panel5.Visible = False + ' + 'btnTVShowFrodo + ' + Me.btnTVShowFrodo.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnTVShowFrodo.Location = New System.Drawing.Point(3, 170) + Me.btnTVShowFrodo.Name = "btnTVShowFrodo" + Me.btnTVShowFrodo.Size = New System.Drawing.Size(98, 32) + Me.btnTVShowFrodo.TabIndex = 9 + Me.btnTVShowFrodo.Text = "XBMC Frodo" + Me.btnTVShowFrodo.UseVisualStyleBackColor = True + ' + 'gbAllSeasonPoster + ' + Me.gbAllSeasonPoster.Controls.Add(Me.chkSeasonAllPosterJPG) + Me.gbAllSeasonPoster.Controls.Add(Me.chkSeasonAllJPG) + Me.gbAllSeasonPoster.Controls.Add(Me.chkSeasonAllTBN) + Me.gbAllSeasonPoster.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbAllSeasonPoster.Location = New System.Drawing.Point(4, 207) + Me.gbAllSeasonPoster.Name = "gbAllSeasonPoster" + Me.gbAllSeasonPoster.Size = New System.Drawing.Size(217, 54) + Me.gbAllSeasonPoster.TabIndex = 3 + Me.gbAllSeasonPoster.TabStop = False + Me.gbAllSeasonPoster.Text = "All Season Posters" + ' + 'chkSeasonAllPosterJPG + ' + Me.chkSeasonAllPosterJPG.AutoSize = True + Me.chkSeasonAllPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonAllPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkSeasonAllPosterJPG.Location = New System.Drawing.Point(6, 16) + Me.chkSeasonAllPosterJPG.Name = "chkSeasonAllPosterJPG" + Me.chkSeasonAllPosterJPG.Size = New System.Drawing.Size(135, 17) + Me.chkSeasonAllPosterJPG.TabIndex = 7 + Me.chkSeasonAllPosterJPG.Text = "season-all-poster.jpg" + Me.chkSeasonAllPosterJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonAllJPG + ' + Me.chkSeasonAllJPG.AutoSize = True + Me.chkSeasonAllJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonAllJPG.Location = New System.Drawing.Point(6, 35) + Me.chkSeasonAllJPG.Name = "chkSeasonAllJPG" + Me.chkSeasonAllJPG.Size = New System.Drawing.Size(98, 17) + Me.chkSeasonAllJPG.TabIndex = 1 + Me.chkSeasonAllJPG.Text = "season-all.jpg" + Me.chkSeasonAllJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonAllTBN + ' + Me.chkSeasonAllTBN.AutoSize = True + Me.chkSeasonAllTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonAllTBN.Location = New System.Drawing.Point(112, 35) + Me.chkSeasonAllTBN.Name = "chkSeasonAllTBN" + Me.chkSeasonAllTBN.Size = New System.Drawing.Size(99, 17) + Me.chkSeasonAllTBN.TabIndex = 0 + Me.chkSeasonAllTBN.Text = "season-all.tbn" + Me.chkSeasonAllTBN.UseVisualStyleBackColor = True + ' + 'lblInsideSeason + ' + Me.lblInsideSeason.Font = New System.Drawing.Font("Microsoft Sans Serif", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblInsideSeason.Location = New System.Drawing.Point(232, 305) + Me.lblInsideSeason.Name = "lblInsideSeason" + Me.lblInsideSeason.Size = New System.Drawing.Size(144, 12) + Me.lblInsideSeason.TabIndex = 8 + Me.lblInsideSeason.Text = " * Inside Season directory" + Me.lblInsideSeason.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'gbSeasonFanart + ' + Me.gbSeasonFanart.Controls.Add(Me.chkSeasonXXDashFanartJPG) + Me.gbSeasonFanart.Controls.Add(Me.chkSeasonDotFanart) + Me.gbSeasonFanart.Controls.Add(Me.chkSeasonDashFanart) + Me.gbSeasonFanart.Controls.Add(Me.chkSeasonFanartJPG) + Me.gbSeasonFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbSeasonFanart.Location = New System.Drawing.Point(226, 218) + Me.gbSeasonFanart.Name = "gbSeasonFanart" + Me.gbSeasonFanart.Size = New System.Drawing.Size(145, 84) + Me.gbSeasonFanart.TabIndex = 7 + Me.gbSeasonFanart.TabStop = False + Me.gbSeasonFanart.Text = "Season Fanart" + ' + 'chkSeasonXXDashFanartJPG + ' + Me.chkSeasonXXDashFanartJPG.AutoSize = True + Me.chkSeasonXXDashFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonXXDashFanartJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkSeasonXXDashFanartJPG.Location = New System.Drawing.Point(6, 64) + Me.chkSeasonXXDashFanartJPG.Name = "chkSeasonXXDashFanartJPG" + Me.chkSeasonXXDashFanartJPG.Size = New System.Drawing.Size(129, 17) + Me.chkSeasonXXDashFanartJPG.TabIndex = 4 + Me.chkSeasonXXDashFanartJPG.Text = "seasonXX-fanart.jpg" + Me.chkSeasonXXDashFanartJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonDotFanart + ' + Me.chkSeasonDotFanart.AutoSize = True + Me.chkSeasonDotFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonDotFanart.Location = New System.Drawing.Point(6, 47) + Me.chkSeasonDotFanart.Name = "chkSeasonDotFanart" + Me.chkSeasonDotFanart.Size = New System.Drawing.Size(137, 17) + Me.chkSeasonDotFanart.TabIndex = 2 + Me.chkSeasonDotFanart.Text = ".fanart.jpg*" + Me.chkSeasonDotFanart.UseVisualStyleBackColor = True + ' + 'chkSeasonDashFanart + ' + Me.chkSeasonDashFanart.AutoSize = True + Me.chkSeasonDashFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonDashFanart.Location = New System.Drawing.Point(6, 31) + Me.chkSeasonDashFanart.Name = "chkSeasonDashFanart" + Me.chkSeasonDashFanart.Size = New System.Drawing.Size(138, 17) + Me.chkSeasonDashFanart.TabIndex = 1 + Me.chkSeasonDashFanart.Text = "-fanart.jpg*" + Me.chkSeasonDashFanart.UseVisualStyleBackColor = True + ' + 'chkSeasonFanartJPG + ' + Me.chkSeasonFanartJPG.AutoSize = True + Me.chkSeasonFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonFanartJPG.Location = New System.Drawing.Point(6, 15) + Me.chkSeasonFanartJPG.Name = "chkSeasonFanartJPG" + Me.chkSeasonFanartJPG.Size = New System.Drawing.Size(82, 17) + Me.chkSeasonFanartJPG.TabIndex = 0 + Me.chkSeasonFanartJPG.Text = "fanart.jpg*" + Me.chkSeasonFanartJPG.UseVisualStyleBackColor = True + ' + 'gbSeasonPosters + ' + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonXXDashPosterJPG) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonFolderJPG) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonNameJPG) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonNameTBN) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonPosterJPG) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonPosterTBN) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonXTBN) + Me.gbSeasonPosters.Controls.Add(Me.chkSeasonXXTBN) + Me.gbSeasonPosters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbSeasonPosters.Location = New System.Drawing.Point(233, 69) + Me.gbSeasonPosters.Name = "gbSeasonPosters" + Me.gbSeasonPosters.Size = New System.Drawing.Size(138, 150) + Me.gbSeasonPosters.TabIndex = 6 + Me.gbSeasonPosters.TabStop = False + Me.gbSeasonPosters.Text = "Season Posters" + ' + 'chkSeasonXXDashPosterJPG + ' + Me.chkSeasonXXDashPosterJPG.AutoSize = True + Me.chkSeasonXXDashPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonXXDashPosterJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkSeasonXXDashPosterJPG.Location = New System.Drawing.Point(6, 128) + Me.chkSeasonXXDashPosterJPG.Name = "chkSeasonXXDashPosterJPG" + Me.chkSeasonXXDashPosterJPG.Size = New System.Drawing.Size(131, 17) + Me.chkSeasonXXDashPosterJPG.TabIndex = 7 + Me.chkSeasonXXDashPosterJPG.Text = "seasonXX-poster.jpg" + Me.chkSeasonXXDashPosterJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonFolderJPG + ' + Me.chkSeasonFolderJPG.AutoSize = True + Me.chkSeasonFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonFolderJPG.Location = New System.Drawing.Point(6, 111) + Me.chkSeasonFolderJPG.Name = "chkSeasonFolderJPG" + Me.chkSeasonFolderJPG.Size = New System.Drawing.Size(82, 17) + Me.chkSeasonFolderJPG.TabIndex = 6 + Me.chkSeasonFolderJPG.Text = "folder.jpg*" + Me.chkSeasonFolderJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonNameJPG + ' + Me.chkSeasonNameJPG.AutoSize = True + Me.chkSeasonNameJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonNameJPG.Location = New System.Drawing.Point(6, 95) + Me.chkSeasonNameJPG.Name = "chkSeasonNameJPG" + Me.chkSeasonNameJPG.Size = New System.Drawing.Size(103, 17) + Me.chkSeasonNameJPG.TabIndex = 5 + Me.chkSeasonNameJPG.Text = ".jpg*" + Me.chkSeasonNameJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonNameTBN + ' + Me.chkSeasonNameTBN.AutoSize = True + Me.chkSeasonNameTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonNameTBN.Location = New System.Drawing.Point(6, 79) + Me.chkSeasonNameTBN.Name = "chkSeasonNameTBN" + Me.chkSeasonNameTBN.Size = New System.Drawing.Size(104, 17) + Me.chkSeasonNameTBN.TabIndex = 4 + Me.chkSeasonNameTBN.Text = ".tbn*" + Me.chkSeasonNameTBN.UseVisualStyleBackColor = True + ' + 'chkSeasonPosterJPG + ' + Me.chkSeasonPosterJPG.AutoSize = True + Me.chkSeasonPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonPosterJPG.Location = New System.Drawing.Point(6, 63) + Me.chkSeasonPosterJPG.Name = "chkSeasonPosterJPG" + Me.chkSeasonPosterJPG.Size = New System.Drawing.Size(84, 17) + Me.chkSeasonPosterJPG.TabIndex = 3 + Me.chkSeasonPosterJPG.Text = "poster.jpg*" + Me.chkSeasonPosterJPG.UseVisualStyleBackColor = True + ' + 'chkSeasonPosterTBN + ' + Me.chkSeasonPosterTBN.AutoSize = True + Me.chkSeasonPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonPosterTBN.Location = New System.Drawing.Point(6, 47) + Me.chkSeasonPosterTBN.Name = "chkSeasonPosterTBN" + Me.chkSeasonPosterTBN.Size = New System.Drawing.Size(85, 17) + Me.chkSeasonPosterTBN.TabIndex = 2 + Me.chkSeasonPosterTBN.Text = "poster.tbn*" + Me.chkSeasonPosterTBN.UseVisualStyleBackColor = True + ' + 'chkSeasonXTBN + ' + Me.chkSeasonXTBN.AutoSize = True + Me.chkSeasonXTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonXTBN.Location = New System.Drawing.Point(6, 31) + Me.chkSeasonXTBN.Name = "chkSeasonXTBN" + Me.chkSeasonXTBN.Size = New System.Drawing.Size(89, 17) + Me.chkSeasonXTBN.TabIndex = 1 + Me.chkSeasonXTBN.Text = "seasonX.tbn" + Me.chkSeasonXTBN.UseVisualStyleBackColor = True + ' + 'chkSeasonXXTBN + ' + Me.chkSeasonXXTBN.AutoSize = True + Me.chkSeasonXXTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkSeasonXXTBN.Location = New System.Drawing.Point(6, 15) + Me.chkSeasonXXTBN.Name = "chkSeasonXXTBN" + Me.chkSeasonXXTBN.Size = New System.Drawing.Size(95, 17) + Me.chkSeasonXXTBN.TabIndex = 0 + Me.chkSeasonXXTBN.Text = "seasonXX.tbn" + Me.chkSeasonXXTBN.UseVisualStyleBackColor = True + ' + 'gbEpisodePosters + ' + Me.gbEpisodePosters.Controls.Add(Me.chkEpisodeDashThumbJPG) + Me.gbEpisodePosters.Controls.Add(Me.chkEpisodeJPG) + Me.gbEpisodePosters.Controls.Add(Me.chkEpisodeTBN) + Me.gbEpisodePosters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbEpisodePosters.Location = New System.Drawing.Point(105, 121) + Me.gbEpisodePosters.Name = "gbEpisodePosters" + Me.gbEpisodePosters.Size = New System.Drawing.Size(124, 70) + Me.gbEpisodePosters.TabIndex = 4 + Me.gbEpisodePosters.TabStop = False + Me.gbEpisodePosters.Text = "Episode Posters" + ' + 'chkEpisodeDashThumbJPG + ' + Me.chkEpisodeDashThumbJPG.AutoSize = True + Me.chkEpisodeDashThumbJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeDashThumbJPG.ForeColor = System.Drawing.SystemColors.ControlText + Me.chkEpisodeDashThumbJPG.Location = New System.Drawing.Point(6, 49) + Me.chkEpisodeDashThumbJPG.Name = "chkEpisodeDashThumbJPG" + Me.chkEpisodeDashThumbJPG.Size = New System.Drawing.Size(113, 17) + Me.chkEpisodeDashThumbJPG.TabIndex = 3 + Me.chkEpisodeDashThumbJPG.Text = "-thumb.jpg" + Me.chkEpisodeDashThumbJPG.UseVisualStyleBackColor = True + ' + 'chkEpisodeJPG + ' + Me.chkEpisodeJPG.AutoSize = True + Me.chkEpisodeJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeJPG.Location = New System.Drawing.Point(6, 31) + Me.chkEpisodeJPG.Name = "chkEpisodeJPG" + Me.chkEpisodeJPG.Size = New System.Drawing.Size(75, 17) + Me.chkEpisodeJPG.TabIndex = 1 + Me.chkEpisodeJPG.Text = ".jpg" + Me.chkEpisodeJPG.UseVisualStyleBackColor = True + ' + 'chkEpisodeTBN + ' + Me.chkEpisodeTBN.AutoSize = True + Me.chkEpisodeTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeTBN.Location = New System.Drawing.Point(6, 15) + Me.chkEpisodeTBN.Name = "chkEpisodeTBN" + Me.chkEpisodeTBN.Size = New System.Drawing.Size(76, 17) + Me.chkEpisodeTBN.TabIndex = 0 + Me.chkEpisodeTBN.Text = ".tbn" + Me.chkEpisodeTBN.UseVisualStyleBackColor = True + ' + 'gbShowFanart + ' + Me.gbShowFanart.Controls.Add(Me.chkShowDotFanart) + Me.gbShowFanart.Controls.Add(Me.chkShowDashFanart) + Me.gbShowFanart.Controls.Add(Me.chkShowFanartJPG) + Me.gbShowFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbShowFanart.Location = New System.Drawing.Point(5, 265) + Me.gbShowFanart.Name = "gbShowFanart" + Me.gbShowFanart.Size = New System.Drawing.Size(221, 50) + Me.gbShowFanart.TabIndex = 2 + Me.gbShowFanart.TabStop = False + Me.gbShowFanart.Text = "Show Fanart" + ' + 'chkShowDotFanart + ' + Me.chkShowDotFanart.AutoSize = True + Me.chkShowDotFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowDotFanart.Location = New System.Drawing.Point(6, 31) + Me.chkShowDotFanart.Name = "chkShowDotFanart" + Me.chkShowDotFanart.Size = New System.Drawing.Size(124, 17) + Me.chkShowDotFanart.TabIndex = 1 + Me.chkShowDotFanart.Text = ".fanart.jpg" + Me.chkShowDotFanart.UseVisualStyleBackColor = True + ' + 'chkShowDashFanart + ' + Me.chkShowDashFanart.AutoSize = True + Me.chkShowDashFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowDashFanart.Location = New System.Drawing.Point(6, 15) + Me.chkShowDashFanart.Name = "chkShowDashFanart" + Me.chkShowDashFanart.Size = New System.Drawing.Size(125, 17) + Me.chkShowDashFanart.TabIndex = 0 + Me.chkShowDashFanart.Text = "-fanart.jpg" + Me.chkShowDashFanart.UseVisualStyleBackColor = True + ' + 'chkShowFanartJPG + ' + Me.chkShowFanartJPG.AutoSize = True + Me.chkShowFanartJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowFanartJPG.Location = New System.Drawing.Point(134, 15) + Me.chkShowFanartJPG.Name = "chkShowFanartJPG" + Me.chkShowFanartJPG.Size = New System.Drawing.Size(77, 17) + Me.chkShowFanartJPG.TabIndex = 2 + Me.chkShowFanartJPG.Text = "fanart.jpg" + Me.chkShowFanartJPG.UseVisualStyleBackColor = True + ' + 'gbEpisodeFanart + ' + Me.gbEpisodeFanart.Controls.Add(Me.chkEpisodeDotFanart) + Me.gbEpisodeFanart.Controls.Add(Me.chkEpisodeDashFanart) + Me.gbEpisodeFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbEpisodeFanart.Location = New System.Drawing.Point(105, 67) + Me.gbEpisodeFanart.Name = "gbEpisodeFanart" + Me.gbEpisodeFanart.Size = New System.Drawing.Size(124, 52) + Me.gbEpisodeFanart.TabIndex = 5 + Me.gbEpisodeFanart.TabStop = False + Me.gbEpisodeFanart.Text = "Episode Fanart" + ' + 'chkEpisodeDotFanart + ' + Me.chkEpisodeDotFanart.AutoSize = True + Me.chkEpisodeDotFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeDotFanart.Location = New System.Drawing.Point(5, 31) + Me.chkEpisodeDotFanart.Name = "chkEpisodeDotFanart" + Me.chkEpisodeDotFanart.Size = New System.Drawing.Size(109, 17) + Me.chkEpisodeDotFanart.TabIndex = 1 + Me.chkEpisodeDotFanart.Text = ".fanart.jpg" + Me.chkEpisodeDotFanart.UseVisualStyleBackColor = True + ' + 'chkEpisodeDashFanart + ' + Me.chkEpisodeDashFanart.AutoSize = True + Me.chkEpisodeDashFanart.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkEpisodeDashFanart.Location = New System.Drawing.Point(5, 15) + Me.chkEpisodeDashFanart.Name = "chkEpisodeDashFanart" + Me.chkEpisodeDashFanart.Size = New System.Drawing.Size(110, 17) + Me.chkEpisodeDashFanart.TabIndex = 0 + Me.chkEpisodeDashFanart.Text = "-fanart.jpg" + Me.chkEpisodeDashFanart.UseVisualStyleBackColor = True + ' + 'gbShowPosters + ' + Me.gbShowPosters.Controls.Add(Me.chkShowJPG) + Me.gbShowPosters.Controls.Add(Me.chkShowTBN) + Me.gbShowPosters.Controls.Add(Me.chkShowPosterJPG) + Me.gbShowPosters.Controls.Add(Me.chkShowPosterTBN) + Me.gbShowPosters.Controls.Add(Me.chkShowFolderJPG) + Me.gbShowPosters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbShowPosters.Location = New System.Drawing.Point(3, 67) + Me.gbShowPosters.Name = "gbShowPosters" + Me.gbShowPosters.Size = New System.Drawing.Size(98, 98) + Me.gbShowPosters.TabIndex = 1 + Me.gbShowPosters.TabStop = False + Me.gbShowPosters.Text = "Show Posters" + ' + 'chkShowJPG + ' + Me.chkShowJPG.AutoSize = True + Me.chkShowJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowJPG.Location = New System.Drawing.Point(6, 32) + Me.chkShowJPG.Name = "chkShowJPG" + Me.chkShowJPG.Size = New System.Drawing.Size(90, 17) + Me.chkShowJPG.TabIndex = 1 + Me.chkShowJPG.Text = ".jpg" + Me.chkShowJPG.UseVisualStyleBackColor = True + ' + 'chkShowTBN + ' + Me.chkShowTBN.AutoSize = True + Me.chkShowTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowTBN.Location = New System.Drawing.Point(6, 16) + Me.chkShowTBN.Name = "chkShowTBN" + Me.chkShowTBN.Size = New System.Drawing.Size(91, 17) + Me.chkShowTBN.TabIndex = 0 + Me.chkShowTBN.Text = ".tbn" + Me.chkShowTBN.UseVisualStyleBackColor = True + ' + 'chkShowPosterJPG + ' + Me.chkShowPosterJPG.AutoSize = True + Me.chkShowPosterJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowPosterJPG.Location = New System.Drawing.Point(6, 63) + Me.chkShowPosterJPG.Name = "chkShowPosterJPG" + Me.chkShowPosterJPG.Size = New System.Drawing.Size(79, 17) + Me.chkShowPosterJPG.TabIndex = 3 + Me.chkShowPosterJPG.Text = "poster.jpg" + Me.chkShowPosterJPG.UseVisualStyleBackColor = True + ' + 'chkShowPosterTBN + ' + Me.chkShowPosterTBN.AutoSize = True + Me.chkShowPosterTBN.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowPosterTBN.Location = New System.Drawing.Point(6, 48) + Me.chkShowPosterTBN.Name = "chkShowPosterTBN" + Me.chkShowPosterTBN.Size = New System.Drawing.Size(80, 17) + Me.chkShowPosterTBN.TabIndex = 2 + Me.chkShowPosterTBN.Text = "poster.tbn" + Me.chkShowPosterTBN.UseVisualStyleBackColor = True + ' + 'chkShowFolderJPG + ' + Me.chkShowFolderJPG.AutoSize = True + Me.chkShowFolderJPG.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkShowFolderJPG.Location = New System.Drawing.Point(6, 79) + Me.chkShowFolderJPG.Name = "chkShowFolderJPG" + Me.chkShowFolderJPG.Size = New System.Drawing.Size(77, 17) + Me.chkShowFolderJPG.TabIndex = 4 + Me.chkShowFolderJPG.Text = "folder.jpg" + Me.chkShowFolderJPG.UseVisualStyleBackColor = True + ' + 'Label11 + ' + Me.Label11.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label11.Location = New System.Drawing.Point(14, 4) + Me.Label11.Name = "Label11" + Me.Label11.Size = New System.Drawing.Size(341, 58) + Me.Label11.TabIndex = 0 + Me.Label11.Text = resources.GetString("Label11.Text") + Me.Label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'dlgWizard + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(546, 364) + Me.Controls.Add(Me.Panel3) + Me.Controls.Add(Me.PictureBox1) + Me.Controls.Add(Me.btnBack) + Me.Controls.Add(Me.btnNext) + Me.Controls.Add(Me.OK_Button) + Me.Controls.Add(Me.Cancel_Button) + Me.Controls.Add(Me.Panel4) + Me.Controls.Add(Me.Panel2) + Me.Controls.Add(Me.Panel6) + Me.Controls.Add(Me.Panel5) + Me.Controls.Add(Me.Panel1) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgWizard" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Ember Startup Wizard" + Me.TopMost = True + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.Panel3.ResumeLayout(False) + Me.GroupBox7.ResumeLayout(False) + Me.GroupBox7.PerformLayout() + Me.GroupBox21.ResumeLayout(False) + Me.GroupBox21.PerformLayout() + Me.GroupBox6.ResumeLayout(False) + Me.GroupBox6.PerformLayout() + Me.GroupBox5.ResumeLayout(False) + Me.GroupBox5.PerformLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.Panel2.ResumeLayout(False) + Me.Panel6.ResumeLayout(False) + Me.Panel6.PerformLayout() + Me.Panel4.ResumeLayout(False) + Me.Panel5.ResumeLayout(False) + Me.gbAllSeasonPoster.ResumeLayout(False) + Me.gbAllSeasonPoster.PerformLayout() + Me.gbSeasonFanart.ResumeLayout(False) + Me.gbSeasonFanart.PerformLayout() + Me.gbSeasonPosters.ResumeLayout(False) + Me.gbSeasonPosters.PerformLayout() + Me.gbEpisodePosters.ResumeLayout(False) + Me.gbEpisodePosters.PerformLayout() + Me.gbShowFanart.ResumeLayout(False) + Me.gbShowFanart.PerformLayout() + Me.gbEpisodeFanart.ResumeLayout(False) + Me.gbEpisodeFanart.PerformLayout() + Me.gbShowPosters.ResumeLayout(False) + Me.gbShowPosters.PerformLayout() + Me.ResumeLayout(False) - End Sub - Friend WithEvents OK_Button As System.Windows.Forms.Button - Friend WithEvents Cancel_Button As System.Windows.Forms.Button - Friend WithEvents btnBack As System.Windows.Forms.Button - Friend WithEvents btnNext As System.Windows.Forms.Button - Friend WithEvents Panel1 As System.Windows.Forms.Panel - Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox - Friend WithEvents Label2 As System.Windows.Forms.Label - Friend WithEvents Label1 As System.Windows.Forms.Label - Friend WithEvents Panel2 As System.Windows.Forms.Panel - Friend WithEvents Panel3 As System.Windows.Forms.Panel - Friend WithEvents Label3 As System.Windows.Forms.Label - Friend WithEvents btnMovieRem As System.Windows.Forms.Button - Friend WithEvents btnMovieAddFolder As System.Windows.Forms.Button - Friend WithEvents Label5 As System.Windows.Forms.Label - Friend WithEvents Label4 As System.Windows.Forms.Label - Friend WithEvents GroupBox7 As System.Windows.Forms.GroupBox - Friend WithEvents chkMovieNameNFO As System.Windows.Forms.CheckBox - Friend WithEvents chkMovieNFO As System.Windows.Forms.CheckBox - Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox - Friend WithEvents chkMovieNameDotFanartJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkMovieNameFanartJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkFanartJPG As System.Windows.Forms.CheckBox - Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox - Friend WithEvents chkFolderJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkPosterJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkPosterTBN As System.Windows.Forms.CheckBox - Friend WithEvents chkMovieNameJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkMovieJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkMovieNameTBN As System.Windows.Forms.CheckBox - Friend WithEvents chkMovieTBN As System.Windows.Forms.CheckBox - Friend WithEvents Panel6 As System.Windows.Forms.Panel - Friend WithEvents Label6 As System.Windows.Forms.Label - Friend WithEvents Label7 As System.Windows.Forms.Label - Friend WithEvents Label8 As System.Windows.Forms.Label - Friend WithEvents lvMovies As System.Windows.Forms.ListView - Friend WithEvents colID As System.Windows.Forms.ColumnHeader - Friend WithEvents colName As System.Windows.Forms.ColumnHeader - Friend WithEvents colPath As System.Windows.Forms.ColumnHeader - Friend WithEvents colRecur As System.Windows.Forms.ColumnHeader - Friend WithEvents colFolder As System.Windows.Forms.ColumnHeader - Friend WithEvents colSingle As System.Windows.Forms.ColumnHeader - Friend WithEvents chkMovieNameMultiOnly As System.Windows.Forms.CheckBox - Friend WithEvents Label32 As System.Windows.Forms.Label - Friend WithEvents cbIntLang As System.Windows.Forms.ComboBox - Friend WithEvents Panel4 As System.Windows.Forms.Panel - Friend WithEvents btnTVRemoveSource As System.Windows.Forms.Button - Friend WithEvents btnTVAddSource As System.Windows.Forms.Button - Friend WithEvents Label9 As System.Windows.Forms.Label - Friend WithEvents lvTVSources As System.Windows.Forms.ListView - Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader - Friend WithEvents ColumnHeader2 As System.Windows.Forms.ColumnHeader - Friend WithEvents ColumnHeader3 As System.Windows.Forms.ColumnHeader - Friend WithEvents Panel5 As System.Windows.Forms.Panel - Friend WithEvents Label11 As System.Windows.Forms.Label - Friend WithEvents gbAllSeasonPoster As System.Windows.Forms.GroupBox - Friend WithEvents chkSeasonAllJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkSeasonAllTBN As System.Windows.Forms.CheckBox - Friend WithEvents lblInsideSeason As System.Windows.Forms.Label - Friend WithEvents gbEpisodeFanart As System.Windows.Forms.GroupBox - Friend WithEvents chkEpisodeDotFanart As System.Windows.Forms.CheckBox - Friend WithEvents chkEpisodeDashFanart As System.Windows.Forms.CheckBox - Friend WithEvents gbEpisodePosters As System.Windows.Forms.GroupBox - Friend WithEvents chkEpisodeJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkEpisodeTBN As System.Windows.Forms.CheckBox - Friend WithEvents gbSeasonFanart As System.Windows.Forms.GroupBox - Friend WithEvents chkSeasonDotFanart As System.Windows.Forms.CheckBox - Friend WithEvents chkSeasonDashFanart As System.Windows.Forms.CheckBox - Friend WithEvents chkSeasonFanartJPG As System.Windows.Forms.CheckBox - Friend WithEvents gbSeasonPosters As System.Windows.Forms.GroupBox - Friend WithEvents chkSeasonFolderJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkSeasonNameJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkSeasonNameTBN As System.Windows.Forms.CheckBox - Friend WithEvents chkSeasonPosterJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkSeasonPosterTBN As System.Windows.Forms.CheckBox - Friend WithEvents chkSeasonXTBN As System.Windows.Forms.CheckBox - Friend WithEvents chkSeasonXXTBN As System.Windows.Forms.CheckBox - Friend WithEvents gbShowFanart As System.Windows.Forms.GroupBox - Friend WithEvents chkShowDotFanart As System.Windows.Forms.CheckBox - Friend WithEvents chkShowDashFanart As System.Windows.Forms.CheckBox - Friend WithEvents chkShowFanartJPG As System.Windows.Forms.CheckBox - Friend WithEvents gbShowPosters As System.Windows.Forms.GroupBox - Friend WithEvents chkShowJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkShowTBN As System.Windows.Forms.CheckBox - Friend WithEvents chkShowPosterJPG As System.Windows.Forms.CheckBox - Friend WithEvents chkShowPosterTBN As System.Windows.Forms.CheckBox - Friend WithEvents chkShowFolderJPG As System.Windows.Forms.CheckBox - Friend WithEvents Label10 As System.Windows.Forms.Label - Friend WithEvents btnTVLanguageFetch As System.Windows.Forms.Button + End Sub + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents btnBack As System.Windows.Forms.Button + Friend WithEvents btnNext As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents Panel2 As System.Windows.Forms.Panel + Friend WithEvents Panel3 As System.Windows.Forms.Panel + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents btnMovieRem As System.Windows.Forms.Button + Friend WithEvents btnMovieAddFolder As System.Windows.Forms.Button + Friend WithEvents Label5 As System.Windows.Forms.Label + Friend WithEvents Label4 As System.Windows.Forms.Label + Friend WithEvents GroupBox7 As System.Windows.Forms.GroupBox + Friend WithEvents chkMovieNameNFO As System.Windows.Forms.CheckBox + Friend WithEvents chkMovieNFO As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox6 As System.Windows.Forms.GroupBox + Friend WithEvents chkMovieNameDotFanartJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkMovieNameFanartJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkFanartJPG As System.Windows.Forms.CheckBox + Friend WithEvents GroupBox5 As System.Windows.Forms.GroupBox + Friend WithEvents chkFolderJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkPosterJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkPosterTBN As System.Windows.Forms.CheckBox + Friend WithEvents chkMovieNameJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkMovieJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkMovieNameTBN As System.Windows.Forms.CheckBox + Friend WithEvents chkMovieTBN As System.Windows.Forms.CheckBox + Friend WithEvents Panel6 As System.Windows.Forms.Panel + Friend WithEvents Label6 As System.Windows.Forms.Label + Friend WithEvents Label7 As System.Windows.Forms.Label + Friend WithEvents Label8 As System.Windows.Forms.Label + Friend WithEvents lvMovies As System.Windows.Forms.ListView + Friend WithEvents colID As System.Windows.Forms.ColumnHeader + Friend WithEvents colName As System.Windows.Forms.ColumnHeader + Friend WithEvents colPath As System.Windows.Forms.ColumnHeader + Friend WithEvents colRecur As System.Windows.Forms.ColumnHeader + Friend WithEvents colFolder As System.Windows.Forms.ColumnHeader + Friend WithEvents colSingle As System.Windows.Forms.ColumnHeader + Friend WithEvents chkMovieNameMultiOnly As System.Windows.Forms.CheckBox + Friend WithEvents Label32 As System.Windows.Forms.Label + Friend WithEvents cbIntLang As System.Windows.Forms.ComboBox + Friend WithEvents Panel4 As System.Windows.Forms.Panel + Friend WithEvents btnTVRemoveSource As System.Windows.Forms.Button + Friend WithEvents btnTVAddSource As System.Windows.Forms.Button + Friend WithEvents Label9 As System.Windows.Forms.Label + Friend WithEvents lvTVSources As System.Windows.Forms.ListView + Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader + Friend WithEvents ColumnHeader2 As System.Windows.Forms.ColumnHeader + Friend WithEvents ColumnHeader3 As System.Windows.Forms.ColumnHeader + Friend WithEvents Panel5 As System.Windows.Forms.Panel + Friend WithEvents Label11 As System.Windows.Forms.Label + Friend WithEvents gbAllSeasonPoster As System.Windows.Forms.GroupBox + Friend WithEvents chkSeasonAllJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkSeasonAllTBN As System.Windows.Forms.CheckBox + Friend WithEvents lblInsideSeason As System.Windows.Forms.Label + Friend WithEvents gbEpisodeFanart As System.Windows.Forms.GroupBox + Friend WithEvents chkEpisodeDotFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkEpisodeDashFanart As System.Windows.Forms.CheckBox + Friend WithEvents gbEpisodePosters As System.Windows.Forms.GroupBox + Friend WithEvents chkEpisodeJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkEpisodeTBN As System.Windows.Forms.CheckBox + Friend WithEvents gbSeasonFanart As System.Windows.Forms.GroupBox + Friend WithEvents chkSeasonDotFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkSeasonDashFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkSeasonFanartJPG As System.Windows.Forms.CheckBox + Friend WithEvents gbSeasonPosters As System.Windows.Forms.GroupBox + Friend WithEvents chkSeasonFolderJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkSeasonNameJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkSeasonNameTBN As System.Windows.Forms.CheckBox + Friend WithEvents chkSeasonPosterJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkSeasonPosterTBN As System.Windows.Forms.CheckBox + Friend WithEvents chkSeasonXTBN As System.Windows.Forms.CheckBox + Friend WithEvents chkSeasonXXTBN As System.Windows.Forms.CheckBox + Friend WithEvents gbShowFanart As System.Windows.Forms.GroupBox + Friend WithEvents chkShowDotFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkShowDashFanart As System.Windows.Forms.CheckBox + Friend WithEvents chkShowFanartJPG As System.Windows.Forms.CheckBox + Friend WithEvents gbShowPosters As System.Windows.Forms.GroupBox + Friend WithEvents chkShowJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkShowTBN As System.Windows.Forms.CheckBox + Friend WithEvents chkShowPosterJPG As System.Windows.Forms.CheckBox + Friend WithEvents chkShowPosterTBN As System.Windows.Forms.CheckBox + Friend WithEvents chkShowFolderJPG As System.Windows.Forms.CheckBox + Friend WithEvents Label10 As System.Windows.Forms.Label + Friend WithEvents btnTVLanguageFetch As System.Windows.Forms.Button Friend WithEvents cbTVLanguage As System.Windows.Forms.ComboBox Friend WithEvents btnTVShowFrodo As System.Windows.Forms.Button Friend WithEvents chkEpisodeDashThumbJPG As System.Windows.Forms.CheckBox @@ -1397,5 +1422,6 @@ Partial Class dlgWizard Friend WithEvents GroupBox21 As System.Windows.Forms.GroupBox Friend WithEvents rbBracketTrailer As System.Windows.Forms.RadioButton Friend WithEvents rbDashTrailer As System.Windows.Forms.RadioButton - + Friend WithEvents chkVideoTSParentXBMC As System.Windows.Forms.CheckBox + Friend WithEvents chkMovieNameNFOStack As System.Windows.Forms.CheckBox End Class diff --git a/Ember Media Manager/dlgWizard.resx b/Ember Media Manager/dlgWizard.resx index 493e645..5ed5eb6 100644 --- a/Ember Media Manager/dlgWizard.resx +++ b/Ember Media Manager/dlgWizard.resx @@ -130,34 +130,33 @@ Only a handful of settings will be covered in this wizard. You can change these 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 - QmCC + CukB/XXO0wAAAq1JREFUOE+lzl1IU2Ecx/GBlAQVCkV3TZMIzC6SijCkiy666AWrSWIWFZqplTkVJUtb + 5utWKsV6MyMzk6AMp6ldLC/MtcL3ueZ0Tuc2N7cz5zTbOWfj17PBDsquogPf8zwPPP8PDw/Af8Vt3NM1 + 0bTxcSJjkgpo8zPScwE9Vy+gLQ2+Et3ml0dXDwby/1zDheGsWcp6rC/gma+Hx/YKHvtreKkmeB3N8Dpb + /P02f6yYdWB9ELA4kBvJGB6CnX0A1lgD1lQH1vwInjkpPJan8MHe+SdYmuuBnVo22mzzIoeDCuUAhzKL + T+vLwejvk0rBTJeRKsDMVIE1iP2wx1gJl6kbTpcbFGUHQfZygK03lU9PloCZLAIzcYusd8DoisFM3SWJ + /Cg7dRuLBhkWFv/AbrfNEGQdB1h7Uvju8QLQGiHoXzlkzQU9ng9oi4AJAhGU1d6AU98KyrniAwp9cxxg + +nKWvzImhHs0k5QBWpUJduw6hkcS8HPkOEGz4FKXg7JZQDkW3OT5W9YA+nYBf2kwG0v9V7DcnwZ24CqY + oUxIlRGoVmzF8nAKVrQtcLi8sFotzYFhDhj/cIq/8OManIpUUH0XoVUkQaNMRt23aFT1RkGlTIBmtBRz + 5AWmwbdlQYDq3Um+rTcDzp7LUH09jWx5BPLkUSiW70IJKU++E1ndm6DQvYdb3VYdBHxvOBZpkKfD1HUB + 6s5ESDoO+BO2xyBbthvijlhIuuPRNSSDuq+hNggYepMQpvmcxox9OgdNazIMbecxLUtBelMskhpjoOs4 + A12XCBpZXqOl88SONUAIz/9tLLi0L6E2P75EnHNIJLkZVyoRxt07Ur7HeLgyxiXKPSguSNldQO5FkSLI + TCQpjHsBOYSsVgPxtoVvDtu/PZw783gbyF1foYGZoKF/C7y/i3XTbS25p8IAAAAASUVORK5CYII= @@ -173,34 +172,33 @@ Locks - This section allows you to "lock" certain information so it does not get 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 - QmCC + CukB/XXO0wAAAq1JREFUOE+lzl1IU2Ecx/GBlAQVCkV3TZMIzC6SijCkiy666AWrSWIWFZqplTkVJUtb + 5utWKsV6MyMzk6AMp6ldLC/MtcL3ueZ0Tuc2N7cz5zTbOWfj17PBDsquogPf8zwPPP8PDw/Af8Vt3NM1 + 0bTxcSJjkgpo8zPScwE9Vy+gLQ2+Et3ml0dXDwby/1zDheGsWcp6rC/gma+Hx/YKHvtreKkmeB3N8Dpb + /P02f6yYdWB9ELA4kBvJGB6CnX0A1lgD1lQH1vwInjkpPJan8MHe+SdYmuuBnVo22mzzIoeDCuUAhzKL + T+vLwejvk0rBTJeRKsDMVIE1iP2wx1gJl6kbTpcbFGUHQfZygK03lU9PloCZLAIzcYusd8DoisFM3SWJ + /Cg7dRuLBhkWFv/AbrfNEGQdB1h7Uvju8QLQGiHoXzlkzQU9ng9oi4AJAhGU1d6AU98KyrniAwp9cxxg + +nKWvzImhHs0k5QBWpUJduw6hkcS8HPkOEGz4FKXg7JZQDkW3OT5W9YA+nYBf2kwG0v9V7DcnwZ24CqY + oUxIlRGoVmzF8nAKVrQtcLi8sFotzYFhDhj/cIq/8OManIpUUH0XoVUkQaNMRt23aFT1RkGlTIBmtBRz + 5AWmwbdlQYDq3Um+rTcDzp7LUH09jWx5BPLkUSiW70IJKU++E1ndm6DQvYdb3VYdBHxvOBZpkKfD1HUB + 6s5ESDoO+BO2xyBbthvijlhIuuPRNSSDuq+hNggYepMQpvmcxox9OgdNazIMbecxLUtBelMskhpjoOs4 + A12XCBpZXqOl88SONUAIz/9tLLi0L6E2P75EnHNIJLkZVyoRxt07Ur7HeLgyxiXKPSguSNldQO5FkSLI + TCQpjHsBOYSsVgPxtoVvDtu/PZw783gbyF1foYGZoKF/C7y/i3XTbS25p8IAAAAASUVORK5CYII= diff --git a/Ember Media Manager/dlgWizard.vb b/Ember Media Manager/dlgWizard.vb index 3a4add6..4706c92 100644 --- a/Ember Media Manager/dlgWizard.vb +++ b/Ember Media Manager/dlgWizard.vb @@ -142,7 +142,9 @@ Public Class dlgWizard Me.chkMovieNameDotFanartJPG.Checked = Master.eSettings.MovieNameDotFanartJPG Me.chkMovieNFO.Checked = Master.eSettings.MovieNFO Me.chkMovieNameNFO.Checked = Master.eSettings.MovieNameNFO + Me.chkMovieNameNFOStack.Checked = Master.eSettings.MovieNameNFOStack Me.chkMovieNameMultiOnly.Checked = Master.eSettings.MovieNameMultiOnly + Me.chkVideoTSParentXBMC.Checked = Master.eSettings.VideoTSParentXBMC Me.cbIntLang.SelectedItem = Master.eSettings.Language Me.chkSeasonAllTBN.Checked = Master.eSettings.SeasonAllTBN Me.chkSeasonAllJPG.Checked = Master.eSettings.SeasonAllJPG @@ -165,7 +167,8 @@ Public Class dlgWizard Me.chkSeasonDashFanart.Checked = Master.eSettings.SeasonDashFanart Me.chkSeasonDotFanart.Checked = Master.eSettings.SeasonDotFanart Me.chkEpisodeTBN.Checked = Master.eSettings.EpisodeTBN - Me.chkEpisodeJPG.Checked = Master.eSettings.EpisodeJPG + Me.chkEpisodeJPG.Checked = Master.eSettings.EpisodeJPG + Me.chkEpisodeDashThumbJPG.Checked = Master.eSettings.EpisodeDashThumbJPG Me.chkEpisodeDashFanart.Checked = Master.eSettings.EpisodeDashFanart Me.chkEpisodeDotFanart.Checked = Master.eSettings.EpisodeDotFanart Me.tLangList.Clear() @@ -328,7 +331,6 @@ Public Class dlgWizard Master.eSettings.MovieNameDashPosterJPG = Me.chkMovieNameDashPosterJPG.Checked Master.eSettings.DashTrailer = Me.rbDashTrailer.Checked Master.eSettings.SeasonXXDashFanartJPG = Me.chkSeasonXXDashFanartJPG.Checked - Master.eSettings.MovieTBN = Me.chkMovieTBN.Checked Master.eSettings.MovieNameTBN = Me.chkMovieNameTBN.Checked Master.eSettings.MovieJPG = Me.chkMovieJPG.Checked @@ -341,7 +343,9 @@ Public Class dlgWizard Master.eSettings.MovieNameDotFanartJPG = Me.chkMovieNameDotFanartJPG.Checked Master.eSettings.MovieNFO = Me.chkMovieNFO.Checked Master.eSettings.MovieNameNFO = Me.chkMovieNameNFO.Checked + Master.eSettings.MovieNameNFOStack = Me.chkMovieNameNFOStack.Checked Master.eSettings.MovieNameMultiOnly = Me.chkMovieNameMultiOnly.Checked + Master.eSettings.VideoTSParentXBMC = Me.chkVideoTSParentXBMC.Checked Master.eSettings.Language = Me.cbIntLang.Text Master.eSettings.SeasonAllTBN = Me.chkSeasonAllTBN.Checked Master.eSettings.SeasonAllJPG = Me.chkSeasonAllJPG.Checked @@ -364,7 +368,8 @@ Public Class dlgWizard Master.eSettings.SeasonDashFanart = Me.chkSeasonDashFanart.Checked Master.eSettings.SeasonDotFanart = Me.chkSeasonDotFanart.Checked Master.eSettings.EpisodeTBN = Me.chkEpisodeTBN.Checked - Master.eSettings.EpisodeJPG = Me.chkEpisodeJPG.Checked + Master.eSettings.EpisodeJPG = Me.chkEpisodeJPG.Checked + Master.eSettings.EpisodeDashThumbJPG = Me.chkEpisodeDashThumbJPG.Checked Master.eSettings.EpisodeDashFanart = Me.chkEpisodeDashFanart.Checked Master.eSettings.EpisodeDotFanart = Me.chkEpisodeDotFanart.Checked If tLangList.Count > 0 Then @@ -383,6 +388,7 @@ Public Class dlgWizard Private Sub SetUp() Me.btnMovieFrodo.Text = Master.eLang.GetString(867, "XBMC Frodo") Me.btnTVShowFrodo.Text = Master.eLang.GetString(867, "XBMC Frodo") + Me.chkVideoTSParentXBMC.Text = Master.eLang.GetString(474, "Frodo Compatible VIDEO_TS File Placement/Naming") Me.Text = Master.eLang.GetString(402, "Ember Startup Wizard") Me.OK_Button.Text = Master.eLang.GetString(179, "OK") Me.Cancel_Button.Text = Master.eLang.GetString(167, "Cancel") @@ -424,8 +430,8 @@ Public Class dlgWizard Me.Panel1.Location = New Point(166, 7) Me.Panel1.Visible = True Me.Panel2.Visible = False - Me.Panel3.Visible = False - Me.Panel4.Visible = False + Me.Panel3.Visible = False + Me.Panel4.Visible = False Me.Panel5.Visible = False Me.Panel6.Visible = False Me.Panel2.Location = New Point(166, 7) @@ -453,20 +459,22 @@ Public Class dlgWizard Me.chkMovieNameDotFanartJPG.Checked = False Me.chkMovieNameFanartJPG.Checked = True Me.chkMovieNameJPG.Checked = False - Me.chkMovieNameNFO.Checked = True + Me.chkMovieNameNFO.Checked = False + Me.chkMovieNameNFOStack.Checked = True Me.chkMovieNameTBN.Checked = False Me.chkMovieNFO.Checked = False Me.chkMovieTBN.Checked = False Me.chkPosterJPG.Checked = False Me.chkPosterTBN.Checked = False Me.rbDashTrailer.Checked = True + Me.chkVideoTSParentXBMC.Checked = True End Sub Private Sub btnTVShowFrodo_Click(sender As Object, e As EventArgs) Handles btnTVShowFrodo.Click Me.chkEpisodeDashFanart.Checked = False Me.chkEpisodeDashThumbJPG.Checked = True Me.chkEpisodeDotFanart.Checked = False - Me.chkEpisodeJPG.Checked = False + Me.chkEpisodeJPG.Checked = False Me.chkEpisodeTBN.Checked = False Me.chkSeasonAllJPG.Checked = False Me.chkSeasonAllPosterJPG.Checked = True @@ -496,7 +504,4 @@ Public Class dlgWizard #End Region 'Methods - Private Sub chkSeasonAllTBN_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkSeasonAllTBN.CheckedChanged - - End Sub End Class \ No newline at end of file diff --git a/Ember Media Manager/frmMain.Designer.vb b/Ember Media Manager/frmMain.Designer.vb index c99a2e5..faf79f9 100644 --- a/Ember Media Manager/frmMain.Designer.vb +++ b/Ember Media Manager/frmMain.Designer.vb @@ -22,4529 +22,4556 @@ Partial Class frmMain 'Do not modify it using the code editor. _ Private Sub InitializeComponent() - Me.components = New System.ComponentModel.Container() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMain)) - Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() - Dim DataGridViewCellStyle2 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() - Dim DataGridViewCellStyle3 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() - Dim DataGridViewCellStyle4 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() - Me.BottomToolStripPanel = New System.Windows.Forms.ToolStripPanel() - Me.TopToolStripPanel = New System.Windows.Forms.ToolStripPanel() - Me.RightToolStripPanel = New System.Windows.Forms.ToolStripPanel() - Me.LeftToolStripPanel = New System.Windows.Forms.ToolStripPanel() - Me.ContentPanel = New System.Windows.Forms.ToolStripContentPanel() - Me.FileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ExitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.EditToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SettingsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.HelpToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.WikiStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator18 = New System.Windows.Forms.ToolStripSeparator() - Me.VersionsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.CheckUpdatesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator19 = New System.Windows.Forms.ToolStripSeparator() - Me.AboutToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.StatusStrip = New System.Windows.Forms.StatusStrip() - Me.tslStatus = New System.Windows.Forms.ToolStripStatusLabel() - Me.tsSpring = New System.Windows.Forms.ToolStripStatusLabel() - Me.tslLoading = New System.Windows.Forms.ToolStripStatusLabel() - Me.tspbLoading = New System.Windows.Forms.ToolStripProgressBar() - Me.tmrAni = New System.Windows.Forms.Timer(Me.components) - Me.MenuStrip = New System.Windows.Forms.MenuStrip() - Me.ToolsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.CleanFoldersToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ConvertFileSourceToFolderSourceToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator4 = New System.Windows.Forms.ToolStripSeparator() - Me.SetsManagerToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripMenuItem3 = New System.Windows.Forms.ToolStripSeparator() - Me.ClearAllCachesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.RefreshAllMoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.CleanDatabaseToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator5 = New System.Windows.Forms.ToolStripSeparator() - Me.DonateToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ErrorToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.scMain = New System.Windows.Forms.SplitContainer() - Me.pnlFilterGenre = New System.Windows.Forms.Panel() - Me.clbFilterGenres = New System.Windows.Forms.CheckedListBox() - Me.lblGFilClose = New System.Windows.Forms.Label() - Me.Label4 = New System.Windows.Forms.Label() - Me.pnlFilterSource = New System.Windows.Forms.Panel() - Me.lblSFilClose = New System.Windows.Forms.Label() - Me.Label8 = New System.Windows.Forms.Label() - Me.clbFilterSource = New System.Windows.Forms.CheckedListBox() - Me.dgvMediaList = New System.Windows.Forms.DataGridView() - Me.mnuMediaList = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.cmnuTitle = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator3 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuRefresh = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuMark = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuLock = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripMenuItem1 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuEditMovie = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuMetaData = New System.Windows.Forms.ToolStripMenuItem() - Me.GenresToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.LblGenreStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem() - Me.GenreListToolStripComboBox = New System.Windows.Forms.ToolStripComboBox() - Me.AddGenreToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SetGenreToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.RemoveGenreToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuSep = New System.Windows.Forms.ToolStripSeparator() - Me.ScrapingToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripMenuItem5 = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectAllAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectNfoAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectPosterAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectFanartAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectExtraAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectTrailerAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectMetaAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripMenuItem13 = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectAllAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectNfoAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectPosterÃskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectFanartAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectExtraAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripAskMenuItem19 = New System.Windows.Forms.ToolStripMenuItem() - Me.SelectMeEtaAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuRescrape = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuSearchNew = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuSep2 = New System.Windows.Forms.ToolStripSeparator() - Me.OpenContainingFolderToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator() - Me.RemoveToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.RemoveFromDatabaseToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.DeleteMovieToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.scTV = New System.Windows.Forms.SplitContainer() - Me.dgvTVShows = New System.Windows.Forms.DataGridView() - Me.mnuShows = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.cmnuShowTitle = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripMenuItem2 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuReloadShow = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuMarkShow = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuLockShow = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator8 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuEditShow = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator7 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuRescrapeShow = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuChangeShow = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator11 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuShowOpenFolder = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator20 = New System.Windows.Forms.ToolStripSeparator() - Me.RemoveShowToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuRemoveTVShow = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuDeleteTVShow = New System.Windows.Forms.ToolStripMenuItem() - Me.SplitContainer2 = New System.Windows.Forms.SplitContainer() - Me.dgvTVSeasons = New System.Windows.Forms.DataGridView() - Me.mnuSeasons = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.cmnuSeasonTitle = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator17 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuReloadSeason = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuMarkSeason = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuLockSeason = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator16 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuSeasonChangeImages = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator14 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuSeasonRescrape = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator15 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuSeasonOpenFolder = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator27 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuSeasonRemove = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuRemoveSeasonFromDB = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuDeleteSeason = New System.Windows.Forms.ToolStripMenuItem() - Me.dgvTVEpisodes = New System.Windows.Forms.DataGridView() - Me.mnuEpisodes = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.cmnuEpTitle = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator6 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuReloadEp = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuMarkEp = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuLockEp = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator9 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuEditEpisode = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator10 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuRescrapeEp = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuChangeEp = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator12 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuEpOpenFolder = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator28 = New System.Windows.Forms.ToolStripSeparator() - Me.RemoveEpToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuRemoveTVEp = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuDeleteTVEp = New System.Windows.Forms.ToolStripMenuItem() - Me.pnlListTop = New System.Windows.Forms.Panel() - Me.btnMarkAll = New System.Windows.Forms.Button() - Me.pnlSearch = New System.Windows.Forms.Panel() - Me.cbSearch = New System.Windows.Forms.ComboBox() - Me.picSearch = New System.Windows.Forms.PictureBox() - Me.txtSearch = New System.Windows.Forms.TextBox() - Me.tabsMain = New System.Windows.Forms.TabControl() - Me.tabMovies = New System.Windows.Forms.TabPage() - Me.tabTV = New System.Windows.Forms.TabPage() - Me.pnlFilter = New System.Windows.Forms.Panel() - Me.GroupBox1 = New System.Windows.Forms.GroupBox() - Me.btnIMDBRating = New System.Windows.Forms.Button() - Me.btnSortTitle = New System.Windows.Forms.Button() - Me.btnSortDate = New System.Windows.Forms.Button() - Me.btnClearFilters = New System.Windows.Forms.Button() - Me.GroupBox3 = New System.Windows.Forms.GroupBox() - Me.chkFilterTolerance = New System.Windows.Forms.CheckBox() - Me.chkFilterMissing = New System.Windows.Forms.CheckBox() - Me.chkFilterDupe = New System.Windows.Forms.CheckBox() - Me.gbSpecific = New System.Windows.Forms.GroupBox() - Me.txtFilterSource = New System.Windows.Forms.TextBox() - Me.Label6 = New System.Windows.Forms.Label() - Me.cbFilterFileSource = New System.Windows.Forms.ComboBox() - Me.chkFilterLock = New System.Windows.Forms.CheckBox() - Me.GroupBox2 = New System.Windows.Forms.GroupBox() - Me.rbFilterAnd = New System.Windows.Forms.RadioButton() - Me.rbFilterOr = New System.Windows.Forms.RadioButton() - Me.chkFilterNew = New System.Windows.Forms.CheckBox() - Me.cbFilterYear = New System.Windows.Forms.ComboBox() - Me.chkFilterMark = New System.Windows.Forms.CheckBox() - Me.cbFilterYearMod = New System.Windows.Forms.ComboBox() - Me.Label5 = New System.Windows.Forms.Label() - Me.txtFilterGenre = New System.Windows.Forms.TextBox() - Me.Label2 = New System.Windows.Forms.Label() - Me.Label3 = New System.Windows.Forms.Label() - Me.btnFilterDown = New System.Windows.Forms.Button() - Me.btnFilterUp = New System.Windows.Forms.Button() - Me.lblFilter = New System.Windows.Forms.Label() - Me.pnlTop = New System.Windows.Forms.Panel() - Me.lblTitle = New System.Windows.Forms.Label() - Me.pnlInfoIcons = New System.Windows.Forms.Panel() - Me.lblOriginalTitle = New System.Windows.Forms.Label() - Me.lblStudio = New System.Windows.Forms.Label() - Me.pbVType = New System.Windows.Forms.PictureBox() - Me.pbStudio = New System.Windows.Forms.PictureBox() - Me.pbVideo = New System.Windows.Forms.PictureBox() - Me.pbAudio = New System.Windows.Forms.PictureBox() - Me.pbResolution = New System.Windows.Forms.PictureBox() - Me.pbChannels = New System.Windows.Forms.PictureBox() - Me.lblRuntime = New System.Windows.Forms.Label() - Me.lblTagline = New System.Windows.Forms.Label() - Me.pnlRating = New System.Windows.Forms.Panel() - Me.pbStar5 = New System.Windows.Forms.PictureBox() - Me.pbStar4 = New System.Windows.Forms.PictureBox() - Me.pbStar3 = New System.Windows.Forms.PictureBox() - Me.pbStar2 = New System.Windows.Forms.PictureBox() - Me.pbStar1 = New System.Windows.Forms.PictureBox() - Me.lblVotes = New System.Windows.Forms.Label() - Me.pnlCancel = New System.Windows.Forms.Panel() - Me.pbCanceling = New System.Windows.Forms.ProgressBar() - Me.lblCanceling = New System.Windows.Forms.Label() - Me.btnCancel = New System.Windows.Forms.Button() - Me.pnlAllSeason = New System.Windows.Forms.Panel() - Me.pbAllSeason = New System.Windows.Forms.PictureBox() - Me.pbAllSeasonCache = New System.Windows.Forms.PictureBox() - Me.pnlNoInfo = New System.Windows.Forms.Panel() - Me.Panel2 = New System.Windows.Forms.Panel() - Me.PictureBox1 = New System.Windows.Forms.PictureBox() - Me.Label1 = New System.Windows.Forms.Label() - Me.pnlInfoPanel = New System.Windows.Forms.Panel() - Me.txtCerts = New System.Windows.Forms.TextBox() - Me.lblCertsHeader = New System.Windows.Forms.Label() - Me.lblReleaseDate = New System.Windows.Forms.Label() - Me.lblReleaseDateHeader = New System.Windows.Forms.Label() - Me.btnMid = New System.Windows.Forms.Button() - Me.pbMILoading = New System.Windows.Forms.PictureBox() - Me.btnMetaDataRefresh = New System.Windows.Forms.Button() - Me.lblMetaDataHeader = New System.Windows.Forms.Label() - Me.txtMetaData = New System.Windows.Forms.TextBox() - Me.btnPlay = New System.Windows.Forms.Button() - Me.txtFilePath = New System.Windows.Forms.TextBox() - Me.lblFilePathHeader = New System.Windows.Forms.Label() - Me.txtIMDBID = New System.Windows.Forms.TextBox() - Me.lblIMDBHeader = New System.Windows.Forms.Label() - Me.lblDirector = New System.Windows.Forms.Label() - Me.lblDirectorHeader = New System.Windows.Forms.Label() - Me.pnlActors = New System.Windows.Forms.Panel() - Me.pbActLoad = New System.Windows.Forms.PictureBox() - Me.lstActors = New System.Windows.Forms.ListBox() - Me.pbActors = New System.Windows.Forms.PictureBox() - Me.lblActorsHeader = New System.Windows.Forms.Label() - Me.lblOutlineHeader = New System.Windows.Forms.Label() - Me.txtOutline = New System.Windows.Forms.TextBox() - Me.pnlTop250 = New System.Windows.Forms.Panel() - Me.lblTop250 = New System.Windows.Forms.Label() - Me.pbTop250 = New System.Windows.Forms.PictureBox() - Me.lblPlotHeader = New System.Windows.Forms.Label() - Me.txtPlot = New System.Windows.Forms.TextBox() - Me.btnDown = New System.Windows.Forms.Button() - Me.btnUp = New System.Windows.Forms.Button() - Me.lblInfoPanelHeader = New System.Windows.Forms.Label() - Me.pnlPoster = New System.Windows.Forms.Panel() - Me.pbPoster = New System.Windows.Forms.PictureBox() - Me.pbPosterCache = New System.Windows.Forms.PictureBox() - Me.pnlMPAA = New System.Windows.Forms.Panel() - Me.pbMPAA = New System.Windows.Forms.PictureBox() - Me.pbFanartCache = New System.Windows.Forms.PictureBox() - Me.pbFanart = New System.Windows.Forms.PictureBox() - Me.tsMain = New System.Windows.Forms.ToolStrip() - Me.tsbAutoPilot = New System.Windows.Forms.ToolStripDropDownButton() - Me.FullToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.FullAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAutoAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAutoNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAutoPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAutoFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAutoExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAutoMI = New System.Windows.Forms.ToolStripMenuItem() - Me.FullAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAskAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAskNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAskPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAskFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAskExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAskTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllAskMI = New System.Windows.Forms.ToolStripMenuItem() - Me.FullSkipToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuAllSkipAll = New System.Windows.Forms.ToolStripMenuItem() - Me.UpdateOnlyToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.UpdateAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMissAutoAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMissAutoNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMissAutoPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMissAutoFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMissAutoExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMissAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.UpdateAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMissAskAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMissAskNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMissAskPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMissAskFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMissAskExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMissAskTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.NewMoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.AutomaticForceBestMatchToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAutoAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAutoNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAutoPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAutoFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAutoExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAutoMI = New System.Windows.Forms.ToolStripMenuItem() - Me.AskRequireInputToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAskAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAskNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAskPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAskFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAskExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAskTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuNewAskMI = New System.Windows.Forms.ToolStripMenuItem() - Me.MarkedMoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.AutomaticForceBestMatchToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAutoAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAutoNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAutoPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAutoFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAutoExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAutoMI = New System.Windows.Forms.ToolStripMenuItem() - Me.AskRequireInputIfNoExactMatchToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAskAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAskNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAskPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAskFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAskExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAskTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuMarkAskMI = New System.Windows.Forms.ToolStripMenuItem() - Me.CurrentFilterToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.AutomaticForceBestMatchToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAutoAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAutoNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAutoPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAutoFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAutoExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAutoMI = New System.Windows.Forms.ToolStripMenuItem() - Me.AskRequireInputIfNoExactMatchToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAskAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAskNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAskPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAskFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAskExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAskTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuFilterAskMI = New System.Windows.Forms.ToolStripMenuItem() - Me.CustomUpdaterToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.tsbRefreshMedia = New System.Windows.Forms.ToolStripSplitButton() - Me.mnuMoviesUpdate = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTVShowUpdate = New System.Windows.Forms.ToolStripMenuItem() - Me.tsbMediaCenters = New System.Windows.Forms.ToolStripSplitButton() - Me.ilColumnIcons = New System.Windows.Forms.ImageList(Me.components) - Me.tmrWait = New System.Windows.Forms.Timer(Me.components) - Me.tmrLoad = New System.Windows.Forms.Timer(Me.components) - Me.tmrSearchWait = New System.Windows.Forms.Timer(Me.components) - Me.tmrSearch = New System.Windows.Forms.Timer(Me.components) - Me.tmrFilterAni = New System.Windows.Forms.Timer(Me.components) - Me.ToolTips = New System.Windows.Forms.ToolTip(Me.components) - Me.tmrWaitShow = New System.Windows.Forms.Timer(Me.components) - Me.tmrLoadShow = New System.Windows.Forms.Timer(Me.components) - Me.tmrWaitSeason = New System.Windows.Forms.Timer(Me.components) - Me.tmrLoadSeason = New System.Windows.Forms.Timer(Me.components) - Me.tmrWaitEp = New System.Windows.Forms.Timer(Me.components) - Me.tmrLoadEp = New System.Windows.Forms.Timer(Me.components) - Me.cmnuTrayIcon = New System.Windows.Forms.ContextMenuStrip(Me.components) - Me.cmnuTrayIconTitle = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator21 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuTrayIconUpdateMedia = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuTrayIconUpdateMovies = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuTrayIconUpdateTV = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuTrayIconScrapeMedia = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayFullToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayFullAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAutoAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAutoNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAutoPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAutoFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAutoExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAutoMI = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayFullAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAskAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAskNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAskPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAskFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAskExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAskTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayAllAskMI = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayUpdateOnlyToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayUpdateAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMissAutoAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMissAutoNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMissAutoPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMissAutoFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMissAutoExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMissAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayUpdateAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMissAskAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMissAskNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMissAskPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMissAskFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMissAskExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMissAskTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayNewMoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayAutomaticForceBestMatchToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAutoAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAutoNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAutoPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAutoFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAutoExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAutoMI = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayAskRequireInputToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAskAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAskNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAskPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAskFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAskExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAskTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayNewAskMI = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayMarkedMoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayAutomaticForceBestMatchToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAutoAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAutoNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAutoPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAutoFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAutoExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAutoMI = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAskAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAskNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAskPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAskFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAskExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAskTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayMarkAskMI = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayCurrentFilterToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayAutomaticForceBestMatchToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAutoAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAutoNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAutoPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAutoFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAutoExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAutoMI = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAskAll = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAskNfo = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAskPoster = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAskFanart = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAskExtra = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAskTrailer = New System.Windows.Forms.ToolStripMenuItem() - Me.mnuTrayFilterAskMI = New System.Windows.Forms.ToolStripMenuItem() - Me.TrayCustomUpdaterToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.cmnuTrayIconMediaCenters = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator23 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuTrayIconTools = New System.Windows.Forms.ToolStripMenuItem() - Me.CleanFilesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.SortFilesIntoFoldersToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator24 = New System.Windows.Forms.ToolStripSeparator() - Me.SetsManagerToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator25 = New System.Windows.Forms.ToolStripSeparator() - Me.ClearAllCachesToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() - Me.ReloadAllMoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.CleanDatabaseToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator26 = New System.Windows.Forms.ToolStripSeparator() - Me.ToolStripSeparator22 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuTrayIconSettings = New System.Windows.Forms.ToolStripMenuItem() - Me.ToolStripSeparator13 = New System.Windows.Forms.ToolStripSeparator() - Me.cmnuTrayIconExit = New System.Windows.Forms.ToolStripMenuItem() - Me.Panel3 = New System.Windows.Forms.Panel() - Me.PictureBox2 = New System.Windows.Forms.PictureBox() - Me.Label7 = New System.Windows.Forms.Label() - Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() - Me.pnlLoadingSettings = New System.Windows.Forms.Panel() - Me.tmrAppExit = New System.Windows.Forms.Timer(Me.components) - Me.tmrKeyBuffer = New System.Windows.Forms.Timer(Me.components) - Me.StatusStrip.SuspendLayout() - Me.MenuStrip.SuspendLayout() - Me.scMain.Panel1.SuspendLayout() - Me.scMain.Panel2.SuspendLayout() - Me.scMain.SuspendLayout() - Me.pnlFilterGenre.SuspendLayout() - Me.pnlFilterSource.SuspendLayout() - CType(Me.dgvMediaList, System.ComponentModel.ISupportInitialize).BeginInit() - Me.mnuMediaList.SuspendLayout() - Me.scTV.Panel1.SuspendLayout() - Me.scTV.Panel2.SuspendLayout() - Me.scTV.SuspendLayout() - CType(Me.dgvTVShows, System.ComponentModel.ISupportInitialize).BeginInit() - Me.mnuShows.SuspendLayout() - Me.SplitContainer2.Panel1.SuspendLayout() - Me.SplitContainer2.Panel2.SuspendLayout() - Me.SplitContainer2.SuspendLayout() - CType(Me.dgvTVSeasons, System.ComponentModel.ISupportInitialize).BeginInit() - Me.mnuSeasons.SuspendLayout() - CType(Me.dgvTVEpisodes, System.ComponentModel.ISupportInitialize).BeginInit() - Me.mnuEpisodes.SuspendLayout() - Me.pnlListTop.SuspendLayout() - Me.pnlSearch.SuspendLayout() - CType(Me.picSearch, System.ComponentModel.ISupportInitialize).BeginInit() - Me.tabsMain.SuspendLayout() - Me.pnlFilter.SuspendLayout() - Me.GroupBox1.SuspendLayout() - Me.GroupBox3.SuspendLayout() - Me.gbSpecific.SuspendLayout() - Me.GroupBox2.SuspendLayout() - Me.pnlTop.SuspendLayout() - Me.pnlInfoIcons.SuspendLayout() - CType(Me.pbVType, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStudio, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbVideo, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbAudio, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbResolution, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbChannels, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlRating.SuspendLayout() - CType(Me.pbStar5, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStar4, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStar3, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlCancel.SuspendLayout() - Me.pnlAllSeason.SuspendLayout() - CType(Me.pbAllSeason, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbAllSeasonCache, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlNoInfo.SuspendLayout() - Me.Panel2.SuspendLayout() - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlInfoPanel.SuspendLayout() - CType(Me.pbMILoading, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlActors.SuspendLayout() - CType(Me.pbActLoad, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbActors, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlTop250.SuspendLayout() - CType(Me.pbTop250, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlPoster.SuspendLayout() - CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbPosterCache, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlMPAA.SuspendLayout() - CType(Me.pbMPAA, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbFanartCache, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pbFanart, System.ComponentModel.ISupportInitialize).BeginInit() - Me.tsMain.SuspendLayout() - Me.cmnuTrayIcon.SuspendLayout() - Me.Panel3.SuspendLayout() - CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pnlLoadingSettings.SuspendLayout() - Me.SuspendLayout() - ' - 'BottomToolStripPanel - ' - Me.BottomToolStripPanel.Location = New System.Drawing.Point(0, 0) - Me.BottomToolStripPanel.Name = "BottomToolStripPanel" - Me.BottomToolStripPanel.Orientation = System.Windows.Forms.Orientation.Horizontal - Me.BottomToolStripPanel.RowMargin = New System.Windows.Forms.Padding(3, 0, 0, 0) - Me.BottomToolStripPanel.Size = New System.Drawing.Size(0, 0) - ' - 'TopToolStripPanel - ' - Me.TopToolStripPanel.Location = New System.Drawing.Point(0, 0) - Me.TopToolStripPanel.Name = "TopToolStripPanel" - Me.TopToolStripPanel.Orientation = System.Windows.Forms.Orientation.Horizontal - Me.TopToolStripPanel.RowMargin = New System.Windows.Forms.Padding(3, 0, 0, 0) - Me.TopToolStripPanel.Size = New System.Drawing.Size(0, 0) - ' - 'RightToolStripPanel - ' - Me.RightToolStripPanel.Location = New System.Drawing.Point(0, 0) - Me.RightToolStripPanel.Name = "RightToolStripPanel" - Me.RightToolStripPanel.Orientation = System.Windows.Forms.Orientation.Horizontal - Me.RightToolStripPanel.RowMargin = New System.Windows.Forms.Padding(3, 0, 0, 0) - Me.RightToolStripPanel.Size = New System.Drawing.Size(0, 0) - ' - 'LeftToolStripPanel - ' - Me.LeftToolStripPanel.Location = New System.Drawing.Point(0, 0) - Me.LeftToolStripPanel.Name = "LeftToolStripPanel" - Me.LeftToolStripPanel.Orientation = System.Windows.Forms.Orientation.Horizontal - Me.LeftToolStripPanel.RowMargin = New System.Windows.Forms.Padding(3, 0, 0, 0) - Me.LeftToolStripPanel.Size = New System.Drawing.Size(0, 0) - ' - 'ContentPanel - ' - Me.ContentPanel.Size = New System.Drawing.Size(150, 175) - ' - 'FileToolStripMenuItem - ' - Me.FileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ExitToolStripMenuItem}) - Me.FileToolStripMenuItem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.FileToolStripMenuItem.Name = "FileToolStripMenuItem" - Me.FileToolStripMenuItem.Size = New System.Drawing.Size(37, 20) - Me.FileToolStripMenuItem.Text = "&File" - ' - 'ExitToolStripMenuItem - ' - Me.ExitToolStripMenuItem.Image = CType(resources.GetObject("ExitToolStripMenuItem.Image"), System.Drawing.Image) - Me.ExitToolStripMenuItem.Name = "ExitToolStripMenuItem" - Me.ExitToolStripMenuItem.Size = New System.Drawing.Size(92, 22) - Me.ExitToolStripMenuItem.Text = "E&xit" - ' - 'EditToolStripMenuItem - ' - Me.EditToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.SettingsToolStripMenuItem}) - Me.EditToolStripMenuItem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.EditToolStripMenuItem.Name = "EditToolStripMenuItem" - Me.EditToolStripMenuItem.Size = New System.Drawing.Size(39, 20) - Me.EditToolStripMenuItem.Text = "&Edit" - ' - 'SettingsToolStripMenuItem - ' - Me.SettingsToolStripMenuItem.Image = CType(resources.GetObject("SettingsToolStripMenuItem.Image"), System.Drawing.Image) - Me.SettingsToolStripMenuItem.Name = "SettingsToolStripMenuItem" - Me.SettingsToolStripMenuItem.Size = New System.Drawing.Size(125, 22) - Me.SettingsToolStripMenuItem.Text = "&Settings..." - ' - 'HelpToolStripMenuItem - ' - Me.HelpToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.WikiStripMenuItem, Me.ToolStripSeparator18, Me.VersionsToolStripMenuItem, Me.CheckUpdatesToolStripMenuItem, Me.ToolStripSeparator19, Me.AboutToolStripMenuItem}) - Me.HelpToolStripMenuItem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.HelpToolStripMenuItem.Name = "HelpToolStripMenuItem" - Me.HelpToolStripMenuItem.Size = New System.Drawing.Size(43, 20) - Me.HelpToolStripMenuItem.Text = "&Help" - ' - 'WikiStripMenuItem - ' - Me.WikiStripMenuItem.Image = CType(resources.GetObject("WikiStripMenuItem.Image"), System.Drawing.Image) - Me.WikiStripMenuItem.Name = "WikiStripMenuItem" - Me.WikiStripMenuItem.Size = New System.Drawing.Size(185, 22) - Me.WikiStripMenuItem.Text = "EmberMM.com &Wiki..." - ' - 'ToolStripSeparator18 - ' - Me.ToolStripSeparator18.Name = "ToolStripSeparator18" - Me.ToolStripSeparator18.Size = New System.Drawing.Size(182, 6) - ' - 'VersionsToolStripMenuItem - ' - Me.VersionsToolStripMenuItem.Image = CType(resources.GetObject("VersionsToolStripMenuItem.Image"), System.Drawing.Image) - Me.VersionsToolStripMenuItem.Name = "VersionsToolStripMenuItem" - Me.VersionsToolStripMenuItem.Size = New System.Drawing.Size(185, 22) - Me.VersionsToolStripMenuItem.Text = "&Versions..." - ' - 'CheckUpdatesToolStripMenuItem - ' - Me.CheckUpdatesToolStripMenuItem.Enabled = False - Me.CheckUpdatesToolStripMenuItem.Image = CType(resources.GetObject("CheckUpdatesToolStripMenuItem.Image"), System.Drawing.Image) - Me.CheckUpdatesToolStripMenuItem.Name = "CheckUpdatesToolStripMenuItem" - Me.CheckUpdatesToolStripMenuItem.Size = New System.Drawing.Size(185, 22) - Me.CheckUpdatesToolStripMenuItem.Text = "Check For Updates" - Me.CheckUpdatesToolStripMenuItem.Visible = False - ' - 'ToolStripSeparator19 - ' - Me.ToolStripSeparator19.Name = "ToolStripSeparator19" - Me.ToolStripSeparator19.Size = New System.Drawing.Size(182, 6) - ' - 'AboutToolStripMenuItem - ' - Me.AboutToolStripMenuItem.Image = CType(resources.GetObject("AboutToolStripMenuItem.Image"), System.Drawing.Image) - Me.AboutToolStripMenuItem.Name = "AboutToolStripMenuItem" - Me.AboutToolStripMenuItem.Size = New System.Drawing.Size(185, 22) - Me.AboutToolStripMenuItem.Text = "&About..." - ' - 'StatusStrip - ' - Me.StatusStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Visible - Me.StatusStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.tslStatus, Me.tsSpring, Me.tslLoading, Me.tspbLoading}) - Me.StatusStrip.Location = New System.Drawing.Point(0, 866) - Me.StatusStrip.Name = "StatusStrip" - Me.StatusStrip.Size = New System.Drawing.Size(1477, 22) - Me.StatusStrip.TabIndex = 6 - Me.StatusStrip.Text = "StatusStrip" - ' - 'tslStatus - ' - Me.tslStatus.Name = "tslStatus" - Me.tslStatus.Size = New System.Drawing.Size(0, 17) - Me.tslStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'tsSpring - ' - Me.tsSpring.Name = "tsSpring" - Me.tsSpring.Size = New System.Drawing.Size(1462, 17) - Me.tsSpring.Spring = True - Me.tsSpring.Text = " " - ' - 'tslLoading - ' - Me.tslLoading.AutoSize = False - Me.tslLoading.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.tslLoading.Name = "tslLoading" - Me.tslLoading.Size = New System.Drawing.Size(424, 17) - Me.tslLoading.Text = "Loading Media:" - Me.tslLoading.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.tslLoading.Visible = False - ' - 'tspbLoading - ' - Me.tspbLoading.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right - Me.tspbLoading.AutoSize = False - Me.tspbLoading.MarqueeAnimationSpeed = 25 - Me.tspbLoading.Name = "tspbLoading" - Me.tspbLoading.Size = New System.Drawing.Size(150, 16) - Me.tspbLoading.Style = System.Windows.Forms.ProgressBarStyle.Continuous - Me.tspbLoading.Visible = False - ' - 'tmrAni - ' - Me.tmrAni.Interval = 1 - ' - 'MenuStrip - ' - Me.MenuStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FileToolStripMenuItem, Me.EditToolStripMenuItem, Me.ToolsToolStripMenuItem, Me.HelpToolStripMenuItem, Me.DonateToolStripMenuItem, Me.ErrorToolStripMenuItem}) - Me.MenuStrip.Location = New System.Drawing.Point(0, 0) - Me.MenuStrip.Name = "MenuStrip" - Me.MenuStrip.Size = New System.Drawing.Size(1477, 24) - Me.MenuStrip.TabIndex = 0 - Me.MenuStrip.Text = "MenuStrip" - ' - 'ToolsToolStripMenuItem - ' - Me.ToolsToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.CleanFoldersToolStripMenuItem, Me.ConvertFileSourceToFolderSourceToolStripMenuItem, Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem, Me.ToolStripSeparator4, Me.SetsManagerToolStripMenuItem, Me.ToolStripMenuItem3, Me.ClearAllCachesToolStripMenuItem, Me.RefreshAllMoviesToolStripMenuItem, Me.CleanDatabaseToolStripMenuItem, Me.ToolStripSeparator5}) - Me.ToolsToolStripMenuItem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.ToolsToolStripMenuItem.Name = "ToolsToolStripMenuItem" - Me.ToolsToolStripMenuItem.Size = New System.Drawing.Size(46, 20) - Me.ToolsToolStripMenuItem.Text = "&Tools" - ' - 'CleanFoldersToolStripMenuItem - ' - Me.CleanFoldersToolStripMenuItem.Image = CType(resources.GetObject("CleanFoldersToolStripMenuItem.Image"), System.Drawing.Image) - Me.CleanFoldersToolStripMenuItem.Name = "CleanFoldersToolStripMenuItem" - Me.CleanFoldersToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ - Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys) - Me.CleanFoldersToolStripMenuItem.Size = New System.Drawing.Size(349, 22) - Me.CleanFoldersToolStripMenuItem.Text = "&Clean Files" - ' - 'ConvertFileSourceToFolderSourceToolStripMenuItem - ' - Me.ConvertFileSourceToFolderSourceToolStripMenuItem.Image = CType(resources.GetObject("ConvertFileSourceToFolderSourceToolStripMenuItem.Image"), System.Drawing.Image) - Me.ConvertFileSourceToFolderSourceToolStripMenuItem.Name = "ConvertFileSourceToFolderSourceToolStripMenuItem" - Me.ConvertFileSourceToFolderSourceToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ - Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) - Me.ConvertFileSourceToFolderSourceToolStripMenuItem.Size = New System.Drawing.Size(349, 22) - Me.ConvertFileSourceToFolderSourceToolStripMenuItem.Text = "&Sort Files Into Folders" - ' - 'CopyExistingFanartToBackdropsFolderToolStripMenuItem - ' - Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem.Image = CType(resources.GetObject("CopyExistingFanartToBackdropsFolderToolStripMenuItem.Image"), System.Drawing.Image) - Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem.Name = "CopyExistingFanartToBackdropsFolderToolStripMenuItem" - Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ - Or System.Windows.Forms.Keys.B), System.Windows.Forms.Keys) - Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem.Size = New System.Drawing.Size(349, 22) - Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem.Text = "Copy Existing Fanart To &Backdrops Folder" - ' - 'ToolStripSeparator4 - ' - Me.ToolStripSeparator4.Name = "ToolStripSeparator4" - Me.ToolStripSeparator4.Size = New System.Drawing.Size(346, 6) - ' - 'SetsManagerToolStripMenuItem - ' - Me.SetsManagerToolStripMenuItem.Image = CType(resources.GetObject("SetsManagerToolStripMenuItem.Image"), System.Drawing.Image) - Me.SetsManagerToolStripMenuItem.Name = "SetsManagerToolStripMenuItem" - Me.SetsManagerToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ - Or System.Windows.Forms.Keys.M), System.Windows.Forms.Keys) - Me.SetsManagerToolStripMenuItem.Size = New System.Drawing.Size(349, 22) - Me.SetsManagerToolStripMenuItem.Text = "Sets &Manager" - ' - 'ToolStripMenuItem3 - ' - Me.ToolStripMenuItem3.Name = "ToolStripMenuItem3" - Me.ToolStripMenuItem3.Size = New System.Drawing.Size(346, 6) - ' - 'ClearAllCachesToolStripMenuItem - ' - Me.ClearAllCachesToolStripMenuItem.Image = CType(resources.GetObject("ClearAllCachesToolStripMenuItem.Image"), System.Drawing.Image) - Me.ClearAllCachesToolStripMenuItem.Name = "ClearAllCachesToolStripMenuItem" - Me.ClearAllCachesToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ - Or System.Windows.Forms.Keys.A), System.Windows.Forms.Keys) - Me.ClearAllCachesToolStripMenuItem.Size = New System.Drawing.Size(349, 22) - Me.ClearAllCachesToolStripMenuItem.Text = "Clear &All Caches" - ' - 'RefreshAllMoviesToolStripMenuItem - ' - Me.RefreshAllMoviesToolStripMenuItem.Image = CType(resources.GetObject("RefreshAllMoviesToolStripMenuItem.Image"), System.Drawing.Image) - Me.RefreshAllMoviesToolStripMenuItem.Name = "RefreshAllMoviesToolStripMenuItem" - Me.RefreshAllMoviesToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ - Or System.Windows.Forms.Keys.L), System.Windows.Forms.Keys) - Me.RefreshAllMoviesToolStripMenuItem.Size = New System.Drawing.Size(349, 22) - Me.RefreshAllMoviesToolStripMenuItem.Text = "Re&load All Movies" - ' - 'CleanDatabaseToolStripMenuItem - ' - Me.CleanDatabaseToolStripMenuItem.Image = CType(resources.GetObject("CleanDatabaseToolStripMenuItem.Image"), System.Drawing.Image) - Me.CleanDatabaseToolStripMenuItem.Name = "CleanDatabaseToolStripMenuItem" - Me.CleanDatabaseToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ - Or System.Windows.Forms.Keys.D), System.Windows.Forms.Keys) - Me.CleanDatabaseToolStripMenuItem.Size = New System.Drawing.Size(349, 22) - Me.CleanDatabaseToolStripMenuItem.Text = "Clean Database" - ' - 'ToolStripSeparator5 - ' - Me.ToolStripSeparator5.Name = "ToolStripSeparator5" - Me.ToolStripSeparator5.Size = New System.Drawing.Size(346, 6) - ' - 'DonateToolStripMenuItem - ' - Me.DonateToolStripMenuItem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.DonateToolStripMenuItem.Image = CType(resources.GetObject("DonateToolStripMenuItem.Image"), System.Drawing.Image) - Me.DonateToolStripMenuItem.Name = "DonateToolStripMenuItem" - Me.DonateToolStripMenuItem.Size = New System.Drawing.Size(73, 20) - Me.DonateToolStripMenuItem.Text = "Donate" - ' - 'ErrorToolStripMenuItem - ' - Me.ErrorToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right - Me.ErrorToolStripMenuItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image - Me.ErrorToolStripMenuItem.Image = CType(resources.GetObject("ErrorToolStripMenuItem.Image"), System.Drawing.Image) - Me.ErrorToolStripMenuItem.Name = "ErrorToolStripMenuItem" - Me.ErrorToolStripMenuItem.Size = New System.Drawing.Size(28, 20) - Me.ErrorToolStripMenuItem.ToolTipText = "An Error Has Occurred" - Me.ErrorToolStripMenuItem.Visible = False - ' - 'scMain - ' - Me.scMain.Dock = System.Windows.Forms.DockStyle.Fill - Me.scMain.FixedPanel = System.Windows.Forms.FixedPanel.Panel1 - Me.scMain.Location = New System.Drawing.Point(0, 24) - Me.scMain.Name = "scMain" - ' - 'scMain.Panel1 - ' - Me.scMain.Panel1.BackColor = System.Drawing.Color.Gainsboro - Me.scMain.Panel1.Controls.Add(Me.pnlFilterGenre) - Me.scMain.Panel1.Controls.Add(Me.pnlFilterSource) - Me.scMain.Panel1.Controls.Add(Me.dgvMediaList) - Me.scMain.Panel1.Controls.Add(Me.scTV) - Me.scMain.Panel1.Controls.Add(Me.pnlListTop) - Me.scMain.Panel1.Controls.Add(Me.pnlFilter) - Me.scMain.Panel1.Margin = New System.Windows.Forms.Padding(3) - Me.scMain.Panel1MinSize = 165 - ' - 'scMain.Panel2 - ' - Me.scMain.Panel2.BackColor = System.Drawing.Color.DimGray - Me.scMain.Panel2.Controls.Add(Me.pnlTop) - Me.scMain.Panel2.Controls.Add(Me.pnlCancel) - Me.scMain.Panel2.Controls.Add(Me.pnlAllSeason) - Me.scMain.Panel2.Controls.Add(Me.pbAllSeasonCache) - Me.scMain.Panel2.Controls.Add(Me.pnlNoInfo) - Me.scMain.Panel2.Controls.Add(Me.pnlInfoPanel) - Me.scMain.Panel2.Controls.Add(Me.pnlPoster) - Me.scMain.Panel2.Controls.Add(Me.pbPosterCache) - Me.scMain.Panel2.Controls.Add(Me.pnlMPAA) - Me.scMain.Panel2.Controls.Add(Me.pbFanartCache) - Me.scMain.Panel2.Controls.Add(Me.pbFanart) - Me.scMain.Panel2.Controls.Add(Me.tsMain) - Me.scMain.Panel2.Margin = New System.Windows.Forms.Padding(3) - Me.scMain.Size = New System.Drawing.Size(1477, 842) - Me.scMain.SplitterDistance = 364 - Me.scMain.TabIndex = 7 - Me.scMain.TabStop = False - ' - 'pnlFilterGenre - ' - Me.pnlFilterGenre.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlFilterGenre.Controls.Add(Me.clbFilterGenres) - Me.pnlFilterGenre.Controls.Add(Me.lblGFilClose) - Me.pnlFilterGenre.Controls.Add(Me.Label4) - Me.pnlFilterGenre.Location = New System.Drawing.Point(186, 444) - Me.pnlFilterGenre.Name = "pnlFilterGenre" - Me.pnlFilterGenre.Size = New System.Drawing.Size(166, 146) - Me.pnlFilterGenre.TabIndex = 15 - Me.pnlFilterGenre.Visible = False - ' - 'clbFilterGenres - ' - Me.clbFilterGenres.CheckOnClick = True - Me.clbFilterGenres.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.clbFilterGenres.FormattingEnabled = True - Me.clbFilterGenres.Location = New System.Drawing.Point(1, 20) - Me.clbFilterGenres.Name = "clbFilterGenres" - Me.clbFilterGenres.Size = New System.Drawing.Size(162, 123) - Me.clbFilterGenres.TabIndex = 8 - Me.clbFilterGenres.TabStop = False - ' - 'lblGFilClose - ' - Me.lblGFilClose.AutoSize = True - Me.lblGFilClose.BackColor = System.Drawing.Color.DimGray - Me.lblGFilClose.Cursor = System.Windows.Forms.Cursors.Hand - Me.lblGFilClose.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblGFilClose.ForeColor = System.Drawing.Color.White - Me.lblGFilClose.Location = New System.Drawing.Point(130, 2) - Me.lblGFilClose.Name = "lblGFilClose" - Me.lblGFilClose.Size = New System.Drawing.Size(35, 13) - Me.lblGFilClose.TabIndex = 24 - Me.lblGFilClose.Text = "Close" - ' - 'Label4 - ' - Me.Label4.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.Label4.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.Label4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Label4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label4.ForeColor = System.Drawing.SystemColors.HighlightText - Me.Label4.Location = New System.Drawing.Point(1, 1) - Me.Label4.Name = "Label4" - Me.Label4.Size = New System.Drawing.Size(162, 17) - Me.Label4.TabIndex = 23 - Me.Label4.Text = "Genres" - Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'pnlFilterSource - ' - Me.pnlFilterSource.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlFilterSource.Controls.Add(Me.lblSFilClose) - Me.pnlFilterSource.Controls.Add(Me.Label8) - Me.pnlFilterSource.Controls.Add(Me.clbFilterSource) - Me.pnlFilterSource.Location = New System.Drawing.Point(186, 515) - Me.pnlFilterSource.Name = "pnlFilterSource" - Me.pnlFilterSource.Size = New System.Drawing.Size(166, 146) - Me.pnlFilterSource.TabIndex = 16 - Me.pnlFilterSource.Visible = False - ' - 'lblSFilClose - ' - Me.lblSFilClose.AutoSize = True - Me.lblSFilClose.BackColor = System.Drawing.Color.DimGray - Me.lblSFilClose.Cursor = System.Windows.Forms.Cursors.Hand - Me.lblSFilClose.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblSFilClose.ForeColor = System.Drawing.Color.White - Me.lblSFilClose.Location = New System.Drawing.Point(130, 2) - Me.lblSFilClose.Name = "lblSFilClose" - Me.lblSFilClose.Size = New System.Drawing.Size(33, 13) - Me.lblSFilClose.TabIndex = 24 - Me.lblSFilClose.Text = "Close" - ' - 'Label8 - ' - Me.Label8.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.Label8.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.Label8.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Label8.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label8.ForeColor = System.Drawing.SystemColors.HighlightText - Me.Label8.Location = New System.Drawing.Point(1, 1) - Me.Label8.Name = "Label8" - Me.Label8.Size = New System.Drawing.Size(162, 17) - Me.Label8.TabIndex = 23 - Me.Label8.Text = "Sources" - Me.Label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'clbFilterSource - ' - Me.clbFilterSource.CheckOnClick = True - Me.clbFilterSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.clbFilterSource.FormattingEnabled = True - Me.clbFilterSource.Location = New System.Drawing.Point(1, 20) - Me.clbFilterSource.Name = "clbFilterSource" - Me.clbFilterSource.Size = New System.Drawing.Size(162, 123) - Me.clbFilterSource.TabIndex = 8 - Me.clbFilterSource.TabStop = False - ' - 'dgvMediaList - ' - Me.dgvMediaList.AllowUserToAddRows = False - Me.dgvMediaList.AllowUserToDeleteRows = False - Me.dgvMediaList.AllowUserToResizeRows = False - DataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(CType(CType(230, Byte), Integer), CType(CType(230, Byte), Integer), CType(CType(230, Byte), Integer)) - Me.dgvMediaList.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle1 - Me.dgvMediaList.BackgroundColor = System.Drawing.Color.White - Me.dgvMediaList.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.dgvMediaList.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal - Me.dgvMediaList.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable - Me.dgvMediaList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize - Me.dgvMediaList.ContextMenuStrip = Me.mnuMediaList - Me.dgvMediaList.Dock = System.Windows.Forms.DockStyle.Fill - Me.dgvMediaList.GridColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer)) - Me.dgvMediaList.Location = New System.Drawing.Point(0, 56) - Me.dgvMediaList.Name = "dgvMediaList" - Me.dgvMediaList.ReadOnly = True - Me.dgvMediaList.RowHeadersVisible = False - Me.dgvMediaList.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect - Me.dgvMediaList.ShowCellErrors = False - Me.dgvMediaList.ShowRowErrors = False - Me.dgvMediaList.Size = New System.Drawing.Size(364, 606) - Me.dgvMediaList.StandardTab = True - Me.dgvMediaList.TabIndex = 0 - ' - 'mnuMediaList - ' - Me.mnuMediaList.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuTitle, Me.ToolStripSeparator3, Me.cmnuRefresh, Me.cmnuMark, Me.cmnuLock, Me.ToolStripMenuItem1, Me.cmnuEditMovie, Me.cmnuMetaData, Me.GenresToolStripMenuItem, Me.cmnuSep, Me.ScrapingToolStripMenuItem, Me.cmnuRescrape, Me.cmnuSearchNew, Me.cmnuSep2, Me.OpenContainingFolderToolStripMenuItem, Me.ToolStripSeparator1, Me.RemoveToolStripMenuItem}) - Me.mnuMediaList.Name = "mnuMediaList" - Me.mnuMediaList.Size = New System.Drawing.Size(245, 298) - ' - 'cmnuTitle - ' - Me.cmnuTitle.Enabled = False - Me.cmnuTitle.Image = CType(resources.GetObject("cmnuTitle.Image"), System.Drawing.Image) - Me.cmnuTitle.Name = "cmnuTitle" - Me.cmnuTitle.Size = New System.Drawing.Size(244, 22) - Me.cmnuTitle.Text = "Title" - ' - 'ToolStripSeparator3 - ' - Me.ToolStripSeparator3.Name = "ToolStripSeparator3" - Me.ToolStripSeparator3.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuRefresh - ' - Me.cmnuRefresh.Image = CType(resources.GetObject("cmnuRefresh.Image"), System.Drawing.Image) - Me.cmnuRefresh.Name = "cmnuRefresh" - Me.cmnuRefresh.ShortcutKeys = System.Windows.Forms.Keys.F5 - Me.cmnuRefresh.Size = New System.Drawing.Size(244, 22) - Me.cmnuRefresh.Text = "Reload" - ' - 'cmnuMark - ' - Me.cmnuMark.Image = CType(resources.GetObject("cmnuMark.Image"), System.Drawing.Image) - Me.cmnuMark.Name = "cmnuMark" - Me.cmnuMark.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.M), System.Windows.Forms.Keys) - Me.cmnuMark.Size = New System.Drawing.Size(244, 22) - Me.cmnuMark.Text = "Mark" - ' - 'cmnuLock - ' - Me.cmnuLock.Image = CType(resources.GetObject("cmnuLock.Image"), System.Drawing.Image) - Me.cmnuLock.Name = "cmnuLock" - Me.cmnuLock.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.L), System.Windows.Forms.Keys) - Me.cmnuLock.Size = New System.Drawing.Size(244, 22) - Me.cmnuLock.Text = "Lock" - ' - 'ToolStripMenuItem1 - ' - Me.ToolStripMenuItem1.Name = "ToolStripMenuItem1" - Me.ToolStripMenuItem1.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuEditMovie - ' - Me.cmnuEditMovie.Image = CType(resources.GetObject("cmnuEditMovie.Image"), System.Drawing.Image) - Me.cmnuEditMovie.Name = "cmnuEditMovie" - Me.cmnuEditMovie.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.E), System.Windows.Forms.Keys) - Me.cmnuEditMovie.Size = New System.Drawing.Size(244, 22) - Me.cmnuEditMovie.Text = "Edit Movie" - ' - 'cmnuMetaData - ' - Me.cmnuMetaData.Image = CType(resources.GetObject("cmnuMetaData.Image"), System.Drawing.Image) - Me.cmnuMetaData.Name = "cmnuMetaData" - Me.cmnuMetaData.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.D), System.Windows.Forms.Keys) - Me.cmnuMetaData.Size = New System.Drawing.Size(244, 22) - Me.cmnuMetaData.Text = "Edit Meta Data" - ' - 'GenresToolStripMenuItem - ' - Me.GenresToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.LblGenreStripMenuItem2, Me.GenreListToolStripComboBox, Me.AddGenreToolStripMenuItem, Me.SetGenreToolStripMenuItem, Me.RemoveGenreToolStripMenuItem}) - Me.GenresToolStripMenuItem.Image = CType(resources.GetObject("GenresToolStripMenuItem.Image"), System.Drawing.Image) - Me.GenresToolStripMenuItem.Name = "GenresToolStripMenuItem" - Me.GenresToolStripMenuItem.Size = New System.Drawing.Size(244, 22) - Me.GenresToolStripMenuItem.Text = "Genres" - ' - 'LblGenreStripMenuItem2 - ' - Me.LblGenreStripMenuItem2.Enabled = False - Me.LblGenreStripMenuItem2.Name = "LblGenreStripMenuItem2" - Me.LblGenreStripMenuItem2.Size = New System.Drawing.Size(195, 22) - Me.LblGenreStripMenuItem2.Text = ">> Select Genre <<" - ' - 'GenreListToolStripComboBox - ' - Me.GenreListToolStripComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.GenreListToolStripComboBox.FlatStyle = System.Windows.Forms.FlatStyle.Standard - Me.GenreListToolStripComboBox.Name = "GenreListToolStripComboBox" - Me.GenreListToolStripComboBox.Size = New System.Drawing.Size(135, 23) - Me.GenreListToolStripComboBox.Sorted = True - ' - 'AddGenreToolStripMenuItem - ' - Me.AddGenreToolStripMenuItem.Name = "AddGenreToolStripMenuItem" - Me.AddGenreToolStripMenuItem.Size = New System.Drawing.Size(195, 22) - Me.AddGenreToolStripMenuItem.Text = "Add" - ' - 'SetGenreToolStripMenuItem - ' - Me.SetGenreToolStripMenuItem.Name = "SetGenreToolStripMenuItem" - Me.SetGenreToolStripMenuItem.Size = New System.Drawing.Size(195, 22) - Me.SetGenreToolStripMenuItem.Text = "Set" - ' - 'RemoveGenreToolStripMenuItem - ' - Me.RemoveGenreToolStripMenuItem.Name = "RemoveGenreToolStripMenuItem" - Me.RemoveGenreToolStripMenuItem.Size = New System.Drawing.Size(195, 22) - Me.RemoveGenreToolStripMenuItem.Text = "Remove" - ' - 'cmnuSep - ' - Me.cmnuSep.Name = "cmnuSep" - Me.cmnuSep.Size = New System.Drawing.Size(241, 6) - ' - 'ScrapingToolStripMenuItem - ' - Me.ScrapingToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripMenuItem5, Me.ToolStripMenuItem13}) - Me.ScrapingToolStripMenuItem.Image = CType(resources.GetObject("ScrapingToolStripMenuItem.Image"), System.Drawing.Image) - Me.ScrapingToolStripMenuItem.Name = "ScrapingToolStripMenuItem" - Me.ScrapingToolStripMenuItem.Size = New System.Drawing.Size(244, 22) - Me.ScrapingToolStripMenuItem.Text = "(Re)Scrape Selected Movies" - ' - 'ToolStripMenuItem5 - ' - Me.ToolStripMenuItem5.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.SelectAllAutoToolStripMenuItem, Me.SelectNfoAutoToolStripMenuItem, Me.SelectPosterAutoToolStripMenuItem, Me.SelectFanartAutoToolStripMenuItem, Me.SelectExtraAutoToolStripMenuItem, Me.SelectTrailerAutoToolStripMenuItem, Me.SelectMetaAutoToolStripMenuItem}) - Me.ToolStripMenuItem5.Name = "ToolStripMenuItem5" - Me.ToolStripMenuItem5.Size = New System.Drawing.Size(271, 22) - Me.ToolStripMenuItem5.Text = "Automatic (Force Best Match)" - ' - 'SelectAllAutoToolStripMenuItem - ' - Me.SelectAllAutoToolStripMenuItem.Name = "SelectAllAutoToolStripMenuItem" - Me.SelectAllAutoToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectAllAutoToolStripMenuItem.Text = "All Items" - ' - 'SelectNfoAutoToolStripMenuItem - ' - Me.SelectNfoAutoToolStripMenuItem.Name = "SelectNfoAutoToolStripMenuItem" - Me.SelectNfoAutoToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectNfoAutoToolStripMenuItem.Text = "NFO Only" - ' - 'SelectPosterAutoToolStripMenuItem - ' - Me.SelectPosterAutoToolStripMenuItem.Name = "SelectPosterAutoToolStripMenuItem" - Me.SelectPosterAutoToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectPosterAutoToolStripMenuItem.Text = "Poster Only" - ' - 'SelectFanartAutoToolStripMenuItem - ' - Me.SelectFanartAutoToolStripMenuItem.Name = "SelectFanartAutoToolStripMenuItem" - Me.SelectFanartAutoToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectFanartAutoToolStripMenuItem.Text = "Fanart Only" - ' - 'SelectExtraAutoToolStripMenuItem - ' - Me.SelectExtraAutoToolStripMenuItem.Name = "SelectExtraAutoToolStripMenuItem" - Me.SelectExtraAutoToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectExtraAutoToolStripMenuItem.Text = "Extrathumbs Only" - ' - 'SelectTrailerAutoToolStripMenuItem - ' - Me.SelectTrailerAutoToolStripMenuItem.Name = "SelectTrailerAutoToolStripMenuItem" - Me.SelectTrailerAutoToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectTrailerAutoToolStripMenuItem.Text = "Trailer Only" - ' - 'SelectMetaAutoToolStripMenuItem - ' - Me.SelectMetaAutoToolStripMenuItem.Name = "SelectMetaAutoToolStripMenuItem" - Me.SelectMetaAutoToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectMetaAutoToolStripMenuItem.Text = "Meta Data Only" - ' - 'ToolStripMenuItem13 - ' - Me.ToolStripMenuItem13.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.SelectAllAskToolStripMenuItem, Me.SelectNfoAskToolStripMenuItem, Me.SelectPosterÃskToolStripMenuItem, Me.SelectFanartAskToolStripMenuItem, Me.SelectExtraAskToolStripMenuItem, Me.ToolStripAskMenuItem19, Me.SelectMeEtaAskToolStripMenuItem}) - Me.ToolStripMenuItem13.Name = "ToolStripMenuItem13" - Me.ToolStripMenuItem13.Size = New System.Drawing.Size(271, 22) - Me.ToolStripMenuItem13.Text = "Ask (Require Input If No Exact Match)" - ' - 'SelectAllAskToolStripMenuItem - ' - Me.SelectAllAskToolStripMenuItem.Name = "SelectAllAskToolStripMenuItem" - Me.SelectAllAskToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectAllAskToolStripMenuItem.Text = "All Items" - ' - 'SelectNfoAskToolStripMenuItem - ' - Me.SelectNfoAskToolStripMenuItem.Name = "SelectNfoAskToolStripMenuItem" - Me.SelectNfoAskToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectNfoAskToolStripMenuItem.Text = "NFO Only" - ' - 'SelectPosterÃskToolStripMenuItem - ' - Me.SelectPosterÃskToolStripMenuItem.Name = "SelectPosterÃskToolStripMenuItem" - Me.SelectPosterÃskToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectPosterÃskToolStripMenuItem.Text = "Poster Only" - ' - 'SelectFanartAskToolStripMenuItem - ' - Me.SelectFanartAskToolStripMenuItem.Name = "SelectFanartAskToolStripMenuItem" - Me.SelectFanartAskToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectFanartAskToolStripMenuItem.Text = "Fanart Only" - ' - 'SelectExtraAskToolStripMenuItem - ' - Me.SelectExtraAskToolStripMenuItem.Name = "SelectExtraAskToolStripMenuItem" - Me.SelectExtraAskToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectExtraAskToolStripMenuItem.Text = "Extrathumbs Only" - ' - 'ToolStripAskMenuItem19 - ' - Me.ToolStripAskMenuItem19.Name = "ToolStripAskMenuItem19" - Me.ToolStripAskMenuItem19.Size = New System.Drawing.Size(168, 22) - Me.ToolStripAskMenuItem19.Text = "Trailer Only" - ' - 'SelectMeEtaAskToolStripMenuItem - ' - Me.SelectMeEtaAskToolStripMenuItem.Name = "SelectMeEtaAskToolStripMenuItem" - Me.SelectMeEtaAskToolStripMenuItem.Size = New System.Drawing.Size(168, 22) - Me.SelectMeEtaAskToolStripMenuItem.Text = "Meta Data Only" - ' - 'cmnuRescrape - ' - Me.cmnuRescrape.Image = CType(resources.GetObject("cmnuRescrape.Image"), System.Drawing.Image) - Me.cmnuRescrape.Name = "cmnuRescrape" - Me.cmnuRescrape.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.I), System.Windows.Forms.Keys) - Me.cmnuRescrape.Size = New System.Drawing.Size(244, 22) - Me.cmnuRescrape.Text = "(Re)Scrape Movie" - ' - 'cmnuSearchNew - ' - Me.cmnuSearchNew.Image = CType(resources.GetObject("cmnuSearchNew.Image"), System.Drawing.Image) - Me.cmnuSearchNew.Name = "cmnuSearchNew" - Me.cmnuSearchNew.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys) - Me.cmnuSearchNew.Size = New System.Drawing.Size(244, 22) - Me.cmnuSearchNew.Text = "Change Movie" - ' - 'cmnuSep2 - ' - Me.cmnuSep2.Name = "cmnuSep2" - Me.cmnuSep2.Size = New System.Drawing.Size(241, 6) - ' - 'OpenContainingFolderToolStripMenuItem - ' - Me.OpenContainingFolderToolStripMenuItem.Image = CType(resources.GetObject("OpenContainingFolderToolStripMenuItem.Image"), System.Drawing.Image) - Me.OpenContainingFolderToolStripMenuItem.Name = "OpenContainingFolderToolStripMenuItem" - Me.OpenContainingFolderToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) - Me.OpenContainingFolderToolStripMenuItem.Size = New System.Drawing.Size(244, 22) - Me.OpenContainingFolderToolStripMenuItem.Text = "Open Containing Folder" - ' - 'ToolStripSeparator1 - ' - Me.ToolStripSeparator1.Name = "ToolStripSeparator1" - Me.ToolStripSeparator1.Size = New System.Drawing.Size(241, 6) - ' - 'RemoveToolStripMenuItem - ' - Me.RemoveToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.RemoveFromDatabaseToolStripMenuItem, Me.DeleteMovieToolStripMenuItem}) - Me.RemoveToolStripMenuItem.Image = CType(resources.GetObject("RemoveToolStripMenuItem.Image"), System.Drawing.Image) - Me.RemoveToolStripMenuItem.Name = "RemoveToolStripMenuItem" - Me.RemoveToolStripMenuItem.Size = New System.Drawing.Size(244, 22) - Me.RemoveToolStripMenuItem.Text = "Remove" - ' - 'RemoveFromDatabaseToolStripMenuItem - ' - Me.RemoveFromDatabaseToolStripMenuItem.Image = CType(resources.GetObject("RemoveFromDatabaseToolStripMenuItem.Image"), System.Drawing.Image) - Me.RemoveFromDatabaseToolStripMenuItem.Name = "RemoveFromDatabaseToolStripMenuItem" - Me.RemoveFromDatabaseToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Delete - Me.RemoveFromDatabaseToolStripMenuItem.Size = New System.Drawing.Size(221, 22) - Me.RemoveFromDatabaseToolStripMenuItem.Text = "Remove from Database" - ' - 'DeleteMovieToolStripMenuItem - ' - Me.DeleteMovieToolStripMenuItem.Image = CType(resources.GetObject("DeleteMovieToolStripMenuItem.Image"), System.Drawing.Image) - Me.DeleteMovieToolStripMenuItem.Name = "DeleteMovieToolStripMenuItem" - Me.DeleteMovieToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Delete), System.Windows.Forms.Keys) - Me.DeleteMovieToolStripMenuItem.Size = New System.Drawing.Size(221, 22) - Me.DeleteMovieToolStripMenuItem.Text = "Delete Movie" - ' - 'scTV - ' - Me.scTV.BackColor = System.Drawing.Color.Gainsboro - Me.scTV.Dock = System.Windows.Forms.DockStyle.Fill - Me.scTV.Location = New System.Drawing.Point(0, 56) - Me.scTV.Name = "scTV" - Me.scTV.Orientation = System.Windows.Forms.Orientation.Horizontal - ' - 'scTV.Panel1 - ' - Me.scTV.Panel1.BackColor = System.Drawing.Color.Gainsboro - Me.scTV.Panel1.Controls.Add(Me.dgvTVShows) - ' - 'scTV.Panel2 - ' - Me.scTV.Panel2.Controls.Add(Me.SplitContainer2) - Me.scTV.Size = New System.Drawing.Size(364, 606) - Me.scTV.SplitterDistance = 154 - Me.scTV.TabIndex = 3 - Me.scTV.TabStop = False - ' - 'dgvTVShows - ' - Me.dgvTVShows.AllowUserToAddRows = False - Me.dgvTVShows.AllowUserToDeleteRows = False - Me.dgvTVShows.AllowUserToResizeRows = False - DataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(CType(CType(249, Byte), Integer), CType(CType(249, Byte), Integer), CType(CType(249, Byte), Integer)) - Me.dgvTVShows.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle2 - Me.dgvTVShows.BackgroundColor = System.Drawing.Color.White - Me.dgvTVShows.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.dgvTVShows.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal - Me.dgvTVShows.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable - Me.dgvTVShows.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize - Me.dgvTVShows.ContextMenuStrip = Me.mnuShows - Me.dgvTVShows.Dock = System.Windows.Forms.DockStyle.Fill - Me.dgvTVShows.GridColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer)) - Me.dgvTVShows.Location = New System.Drawing.Point(0, 0) - Me.dgvTVShows.Name = "dgvTVShows" - Me.dgvTVShows.ReadOnly = True - Me.dgvTVShows.RowHeadersVisible = False - Me.dgvTVShows.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect - Me.dgvTVShows.ShowCellErrors = False - Me.dgvTVShows.ShowRowErrors = False - Me.dgvTVShows.Size = New System.Drawing.Size(364, 154) - Me.dgvTVShows.StandardTab = True - Me.dgvTVShows.TabIndex = 0 - ' - 'mnuShows - ' - Me.mnuShows.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuShowTitle, Me.ToolStripMenuItem2, Me.cmnuReloadShow, Me.cmnuMarkShow, Me.cmnuLockShow, Me.ToolStripSeparator8, Me.cmnuEditShow, Me.ToolStripSeparator7, Me.cmnuRescrapeShow, Me.cmnuChangeShow, Me.ToolStripSeparator11, Me.cmnuShowOpenFolder, Me.ToolStripSeparator20, Me.RemoveShowToolStripMenuItem}) - Me.mnuShows.Name = "mnuShows" - Me.mnuShows.Size = New System.Drawing.Size(245, 232) - ' - 'cmnuShowTitle - ' - Me.cmnuShowTitle.Enabled = False - Me.cmnuShowTitle.Image = CType(resources.GetObject("cmnuShowTitle.Image"), System.Drawing.Image) - Me.cmnuShowTitle.Name = "cmnuShowTitle" - Me.cmnuShowTitle.Size = New System.Drawing.Size(244, 22) - Me.cmnuShowTitle.Text = "Title" - ' - 'ToolStripMenuItem2 - ' - Me.ToolStripMenuItem2.Name = "ToolStripMenuItem2" - Me.ToolStripMenuItem2.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuReloadShow - ' - Me.cmnuReloadShow.Image = CType(resources.GetObject("cmnuReloadShow.Image"), System.Drawing.Image) - Me.cmnuReloadShow.Name = "cmnuReloadShow" - Me.cmnuReloadShow.ShortcutKeys = System.Windows.Forms.Keys.F5 - Me.cmnuReloadShow.Size = New System.Drawing.Size(244, 22) - Me.cmnuReloadShow.Text = "Reload" - ' - 'cmnuMarkShow - ' - Me.cmnuMarkShow.Image = CType(resources.GetObject("cmnuMarkShow.Image"), System.Drawing.Image) - Me.cmnuMarkShow.Name = "cmnuMarkShow" - Me.cmnuMarkShow.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.M), System.Windows.Forms.Keys) - Me.cmnuMarkShow.Size = New System.Drawing.Size(244, 22) - Me.cmnuMarkShow.Text = "Mark" - ' - 'cmnuLockShow - ' - Me.cmnuLockShow.Image = CType(resources.GetObject("cmnuLockShow.Image"), System.Drawing.Image) - Me.cmnuLockShow.Name = "cmnuLockShow" - Me.cmnuLockShow.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.L), System.Windows.Forms.Keys) - Me.cmnuLockShow.Size = New System.Drawing.Size(244, 22) - Me.cmnuLockShow.Text = "Lock" - ' - 'ToolStripSeparator8 - ' - Me.ToolStripSeparator8.Name = "ToolStripSeparator8" - Me.ToolStripSeparator8.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuEditShow - ' - Me.cmnuEditShow.Image = CType(resources.GetObject("cmnuEditShow.Image"), System.Drawing.Image) - Me.cmnuEditShow.Name = "cmnuEditShow" - Me.cmnuEditShow.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.E), System.Windows.Forms.Keys) - Me.cmnuEditShow.Size = New System.Drawing.Size(244, 22) - Me.cmnuEditShow.Text = "Edit Show" - ' - 'ToolStripSeparator7 - ' - Me.ToolStripSeparator7.Name = "ToolStripSeparator7" - Me.ToolStripSeparator7.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuRescrapeShow - ' - Me.cmnuRescrapeShow.Image = CType(resources.GetObject("cmnuRescrapeShow.Image"), System.Drawing.Image) - Me.cmnuRescrapeShow.Name = "cmnuRescrapeShow" - Me.cmnuRescrapeShow.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.I), System.Windows.Forms.Keys) - Me.cmnuRescrapeShow.Size = New System.Drawing.Size(244, 22) - Me.cmnuRescrapeShow.Text = "Re-scrape theTVDB" - ' - 'cmnuChangeShow - ' - Me.cmnuChangeShow.Image = CType(resources.GetObject("cmnuChangeShow.Image"), System.Drawing.Image) - Me.cmnuChangeShow.Name = "cmnuChangeShow" - Me.cmnuChangeShow.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys) - Me.cmnuChangeShow.Size = New System.Drawing.Size(244, 22) - Me.cmnuChangeShow.Text = "Change Show" - ' - 'ToolStripSeparator11 - ' - Me.ToolStripSeparator11.Name = "ToolStripSeparator11" - Me.ToolStripSeparator11.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuShowOpenFolder - ' - Me.cmnuShowOpenFolder.Image = CType(resources.GetObject("cmnuShowOpenFolder.Image"), System.Drawing.Image) - Me.cmnuShowOpenFolder.Name = "cmnuShowOpenFolder" - Me.cmnuShowOpenFolder.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) - Me.cmnuShowOpenFolder.Size = New System.Drawing.Size(244, 22) - Me.cmnuShowOpenFolder.Text = "Open Containing Folder" - ' - 'ToolStripSeparator20 - ' - Me.ToolStripSeparator20.Name = "ToolStripSeparator20" - Me.ToolStripSeparator20.Size = New System.Drawing.Size(241, 6) - ' - 'RemoveShowToolStripMenuItem - ' - Me.RemoveShowToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuRemoveTVShow, Me.cmnuDeleteTVShow}) - Me.RemoveShowToolStripMenuItem.Image = CType(resources.GetObject("RemoveShowToolStripMenuItem.Image"), System.Drawing.Image) - Me.RemoveShowToolStripMenuItem.Name = "RemoveShowToolStripMenuItem" - Me.RemoveShowToolStripMenuItem.Size = New System.Drawing.Size(244, 22) - Me.RemoveShowToolStripMenuItem.Text = "Remove" - ' - 'cmnuRemoveTVShow - ' - Me.cmnuRemoveTVShow.Image = CType(resources.GetObject("cmnuRemoveTVShow.Image"), System.Drawing.Image) - Me.cmnuRemoveTVShow.Name = "cmnuRemoveTVShow" - Me.cmnuRemoveTVShow.ShortcutKeys = System.Windows.Forms.Keys.Delete - Me.cmnuRemoveTVShow.Size = New System.Drawing.Size(221, 22) - Me.cmnuRemoveTVShow.Text = "Remove from Database" - ' - 'cmnuDeleteTVShow - ' - Me.cmnuDeleteTVShow.Image = CType(resources.GetObject("cmnuDeleteTVShow.Image"), System.Drawing.Image) - Me.cmnuDeleteTVShow.Name = "cmnuDeleteTVShow" - Me.cmnuDeleteTVShow.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Delete), System.Windows.Forms.Keys) - Me.cmnuDeleteTVShow.Size = New System.Drawing.Size(221, 22) - Me.cmnuDeleteTVShow.Text = "Delete TV Show" - ' - 'SplitContainer2 - ' - Me.SplitContainer2.Dock = System.Windows.Forms.DockStyle.Fill - Me.SplitContainer2.Location = New System.Drawing.Point(0, 0) - Me.SplitContainer2.Name = "SplitContainer2" - Me.SplitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal - ' - 'SplitContainer2.Panel1 - ' - Me.SplitContainer2.Panel1.BackColor = System.Drawing.Color.Gainsboro - Me.SplitContainer2.Panel1.Controls.Add(Me.dgvTVSeasons) - ' - 'SplitContainer2.Panel2 - ' - Me.SplitContainer2.Panel2.Controls.Add(Me.dgvTVEpisodes) - Me.SplitContainer2.Size = New System.Drawing.Size(364, 448) - Me.SplitContainer2.SplitterDistance = 154 - Me.SplitContainer2.TabIndex = 0 - Me.SplitContainer2.TabStop = False - ' - 'dgvTVSeasons - ' - Me.dgvTVSeasons.AllowUserToAddRows = False - Me.dgvTVSeasons.AllowUserToDeleteRows = False - Me.dgvTVSeasons.AllowUserToResizeRows = False - DataGridViewCellStyle3.BackColor = System.Drawing.Color.FromArgb(CType(CType(249, Byte), Integer), CType(CType(249, Byte), Integer), CType(CType(249, Byte), Integer)) - Me.dgvTVSeasons.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle3 - Me.dgvTVSeasons.BackgroundColor = System.Drawing.Color.White - Me.dgvTVSeasons.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.dgvTVSeasons.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal - Me.dgvTVSeasons.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable - Me.dgvTVSeasons.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize - Me.dgvTVSeasons.ContextMenuStrip = Me.mnuSeasons - Me.dgvTVSeasons.Dock = System.Windows.Forms.DockStyle.Fill - Me.dgvTVSeasons.GridColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer)) - Me.dgvTVSeasons.Location = New System.Drawing.Point(0, 0) - Me.dgvTVSeasons.Name = "dgvTVSeasons" - Me.dgvTVSeasons.ReadOnly = True - Me.dgvTVSeasons.RowHeadersVisible = False - Me.dgvTVSeasons.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect - Me.dgvTVSeasons.ShowCellErrors = False - Me.dgvTVSeasons.ShowRowErrors = False - Me.dgvTVSeasons.Size = New System.Drawing.Size(364, 154) - Me.dgvTVSeasons.StandardTab = True - Me.dgvTVSeasons.TabIndex = 0 - ' - 'mnuSeasons - ' - Me.mnuSeasons.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuSeasonTitle, Me.ToolStripSeparator17, Me.cmnuReloadSeason, Me.cmnuMarkSeason, Me.cmnuLockSeason, Me.ToolStripSeparator16, Me.cmnuSeasonChangeImages, Me.ToolStripSeparator14, Me.cmnuSeasonRescrape, Me.ToolStripSeparator15, Me.cmnuSeasonOpenFolder, Me.ToolStripSeparator27, Me.cmnuSeasonRemove}) - Me.mnuSeasons.Name = "mnuSeasons" - Me.mnuSeasons.Size = New System.Drawing.Size(245, 210) - ' - 'cmnuSeasonTitle - ' - Me.cmnuSeasonTitle.Enabled = False - Me.cmnuSeasonTitle.Image = CType(resources.GetObject("cmnuSeasonTitle.Image"), System.Drawing.Image) - Me.cmnuSeasonTitle.Name = "cmnuSeasonTitle" - Me.cmnuSeasonTitle.Size = New System.Drawing.Size(244, 22) - Me.cmnuSeasonTitle.Text = "Title" - ' - 'ToolStripSeparator17 - ' - Me.ToolStripSeparator17.Name = "ToolStripSeparator17" - Me.ToolStripSeparator17.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuReloadSeason - ' - Me.cmnuReloadSeason.Image = CType(resources.GetObject("cmnuReloadSeason.Image"), System.Drawing.Image) - Me.cmnuReloadSeason.Name = "cmnuReloadSeason" - Me.cmnuReloadSeason.ShortcutKeys = System.Windows.Forms.Keys.F5 - Me.cmnuReloadSeason.Size = New System.Drawing.Size(244, 22) - Me.cmnuReloadSeason.Text = "Reload" - ' - 'cmnuMarkSeason - ' - Me.cmnuMarkSeason.Image = CType(resources.GetObject("cmnuMarkSeason.Image"), System.Drawing.Image) - Me.cmnuMarkSeason.Name = "cmnuMarkSeason" - Me.cmnuMarkSeason.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.M), System.Windows.Forms.Keys) - Me.cmnuMarkSeason.Size = New System.Drawing.Size(244, 22) - Me.cmnuMarkSeason.Text = "Mark" - ' - 'cmnuLockSeason - ' - Me.cmnuLockSeason.Image = CType(resources.GetObject("cmnuLockSeason.Image"), System.Drawing.Image) - Me.cmnuLockSeason.Name = "cmnuLockSeason" - Me.cmnuLockSeason.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.L), System.Windows.Forms.Keys) - Me.cmnuLockSeason.Size = New System.Drawing.Size(244, 22) - Me.cmnuLockSeason.Text = "Lock" - ' - 'ToolStripSeparator16 - ' - Me.ToolStripSeparator16.Name = "ToolStripSeparator16" - Me.ToolStripSeparator16.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuSeasonChangeImages - ' - Me.cmnuSeasonChangeImages.Image = CType(resources.GetObject("cmnuSeasonChangeImages.Image"), System.Drawing.Image) - Me.cmnuSeasonChangeImages.Name = "cmnuSeasonChangeImages" - Me.cmnuSeasonChangeImages.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.E), System.Windows.Forms.Keys) - Me.cmnuSeasonChangeImages.Size = New System.Drawing.Size(244, 22) - Me.cmnuSeasonChangeImages.Text = "Change Images" - ' - 'ToolStripSeparator14 - ' - Me.ToolStripSeparator14.Name = "ToolStripSeparator14" - Me.ToolStripSeparator14.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuSeasonRescrape - ' - Me.cmnuSeasonRescrape.Image = CType(resources.GetObject("cmnuSeasonRescrape.Image"), System.Drawing.Image) - Me.cmnuSeasonRescrape.Name = "cmnuSeasonRescrape" - Me.cmnuSeasonRescrape.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.I), System.Windows.Forms.Keys) - Me.cmnuSeasonRescrape.Size = New System.Drawing.Size(244, 22) - Me.cmnuSeasonRescrape.Text = "Re-scrape theTVDB" - ' - 'ToolStripSeparator15 - ' - Me.ToolStripSeparator15.Name = "ToolStripSeparator15" - Me.ToolStripSeparator15.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuSeasonOpenFolder - ' - Me.cmnuSeasonOpenFolder.Image = CType(resources.GetObject("cmnuSeasonOpenFolder.Image"), System.Drawing.Image) - Me.cmnuSeasonOpenFolder.Name = "cmnuSeasonOpenFolder" - Me.cmnuSeasonOpenFolder.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) - Me.cmnuSeasonOpenFolder.Size = New System.Drawing.Size(244, 22) - Me.cmnuSeasonOpenFolder.Text = "Open Contianing Folder" - ' - 'ToolStripSeparator27 - ' - Me.ToolStripSeparator27.Name = "ToolStripSeparator27" - Me.ToolStripSeparator27.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuSeasonRemove - ' - Me.cmnuSeasonRemove.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuRemoveSeasonFromDB, Me.cmnuDeleteSeason}) - Me.cmnuSeasonRemove.Image = CType(resources.GetObject("cmnuSeasonRemove.Image"), System.Drawing.Image) - Me.cmnuSeasonRemove.Name = "cmnuSeasonRemove" - Me.cmnuSeasonRemove.Size = New System.Drawing.Size(244, 22) - Me.cmnuSeasonRemove.Text = "Remove" - ' - 'cmnuRemoveSeasonFromDB - ' - Me.cmnuRemoveSeasonFromDB.Image = CType(resources.GetObject("cmnuRemoveSeasonFromDB.Image"), System.Drawing.Image) - Me.cmnuRemoveSeasonFromDB.Name = "cmnuRemoveSeasonFromDB" - Me.cmnuRemoveSeasonFromDB.ShortcutKeys = System.Windows.Forms.Keys.Delete - Me.cmnuRemoveSeasonFromDB.Size = New System.Drawing.Size(221, 22) - Me.cmnuRemoveSeasonFromDB.Text = "Remove from Database" - ' - 'cmnuDeleteSeason - ' - Me.cmnuDeleteSeason.Image = CType(resources.GetObject("cmnuDeleteSeason.Image"), System.Drawing.Image) - Me.cmnuDeleteSeason.Name = "cmnuDeleteSeason" - Me.cmnuDeleteSeason.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Delete), System.Windows.Forms.Keys) - Me.cmnuDeleteSeason.Size = New System.Drawing.Size(221, 22) - Me.cmnuDeleteSeason.Text = "Delete Season" - ' - 'dgvTVEpisodes - ' - Me.dgvTVEpisodes.AllowUserToAddRows = False - Me.dgvTVEpisodes.AllowUserToDeleteRows = False - Me.dgvTVEpisodes.AllowUserToResizeRows = False - DataGridViewCellStyle4.BackColor = System.Drawing.Color.FromArgb(CType(CType(249, Byte), Integer), CType(CType(249, Byte), Integer), CType(CType(249, Byte), Integer)) - Me.dgvTVEpisodes.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle4 - Me.dgvTVEpisodes.BackgroundColor = System.Drawing.Color.White - Me.dgvTVEpisodes.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.dgvTVEpisodes.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal - Me.dgvTVEpisodes.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable - Me.dgvTVEpisodes.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize - Me.dgvTVEpisodes.ContextMenuStrip = Me.mnuEpisodes - Me.dgvTVEpisodes.Dock = System.Windows.Forms.DockStyle.Fill - Me.dgvTVEpisodes.GridColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer)) - Me.dgvTVEpisodes.Location = New System.Drawing.Point(0, 0) - Me.dgvTVEpisodes.Name = "dgvTVEpisodes" - Me.dgvTVEpisodes.ReadOnly = True - Me.dgvTVEpisodes.RowHeadersVisible = False - Me.dgvTVEpisodes.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect - Me.dgvTVEpisodes.ShowCellErrors = False - Me.dgvTVEpisodes.ShowRowErrors = False - Me.dgvTVEpisodes.Size = New System.Drawing.Size(364, 290) - Me.dgvTVEpisodes.StandardTab = True - Me.dgvTVEpisodes.TabIndex = 0 - ' - 'mnuEpisodes - ' - Me.mnuEpisodes.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuEpTitle, Me.ToolStripSeparator6, Me.cmnuReloadEp, Me.cmnuMarkEp, Me.cmnuLockEp, Me.ToolStripSeparator9, Me.cmnuEditEpisode, Me.ToolStripSeparator10, Me.cmnuRescrapeEp, Me.cmnuChangeEp, Me.ToolStripSeparator12, Me.cmnuEpOpenFolder, Me.ToolStripSeparator28, Me.RemoveEpToolStripMenuItem}) - Me.mnuEpisodes.Name = "mnuEpisodes" - Me.mnuEpisodes.Size = New System.Drawing.Size(245, 232) - ' - 'cmnuEpTitle - ' - Me.cmnuEpTitle.Enabled = False - Me.cmnuEpTitle.Image = CType(resources.GetObject("cmnuEpTitle.Image"), System.Drawing.Image) - Me.cmnuEpTitle.Name = "cmnuEpTitle" - Me.cmnuEpTitle.Size = New System.Drawing.Size(244, 22) - Me.cmnuEpTitle.Text = "Title" - ' - 'ToolStripSeparator6 - ' - Me.ToolStripSeparator6.Name = "ToolStripSeparator6" - Me.ToolStripSeparator6.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuReloadEp - ' - Me.cmnuReloadEp.Image = CType(resources.GetObject("cmnuReloadEp.Image"), System.Drawing.Image) - Me.cmnuReloadEp.Name = "cmnuReloadEp" - Me.cmnuReloadEp.ShortcutKeys = System.Windows.Forms.Keys.F5 - Me.cmnuReloadEp.Size = New System.Drawing.Size(244, 22) - Me.cmnuReloadEp.Text = "Reload" - ' - 'cmnuMarkEp - ' - Me.cmnuMarkEp.Image = CType(resources.GetObject("cmnuMarkEp.Image"), System.Drawing.Image) - Me.cmnuMarkEp.Name = "cmnuMarkEp" - Me.cmnuMarkEp.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.M), System.Windows.Forms.Keys) - Me.cmnuMarkEp.Size = New System.Drawing.Size(244, 22) - Me.cmnuMarkEp.Text = "Mark" - ' - 'cmnuLockEp - ' - Me.cmnuLockEp.Image = CType(resources.GetObject("cmnuLockEp.Image"), System.Drawing.Image) - Me.cmnuLockEp.Name = "cmnuLockEp" - Me.cmnuLockEp.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.L), System.Windows.Forms.Keys) - Me.cmnuLockEp.Size = New System.Drawing.Size(244, 22) - Me.cmnuLockEp.Text = "Lock" - ' - 'ToolStripSeparator9 - ' - Me.ToolStripSeparator9.Name = "ToolStripSeparator9" - Me.ToolStripSeparator9.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuEditEpisode - ' - Me.cmnuEditEpisode.Image = CType(resources.GetObject("cmnuEditEpisode.Image"), System.Drawing.Image) - Me.cmnuEditEpisode.Name = "cmnuEditEpisode" - Me.cmnuEditEpisode.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.E), System.Windows.Forms.Keys) - Me.cmnuEditEpisode.Size = New System.Drawing.Size(244, 22) - Me.cmnuEditEpisode.Text = "Edit Episode" - ' - 'ToolStripSeparator10 - ' - Me.ToolStripSeparator10.Name = "ToolStripSeparator10" - Me.ToolStripSeparator10.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuRescrapeEp - ' - Me.cmnuRescrapeEp.Image = CType(resources.GetObject("cmnuRescrapeEp.Image"), System.Drawing.Image) - Me.cmnuRescrapeEp.Name = "cmnuRescrapeEp" - Me.cmnuRescrapeEp.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.I), System.Windows.Forms.Keys) - Me.cmnuRescrapeEp.Size = New System.Drawing.Size(244, 22) - Me.cmnuRescrapeEp.Text = "Re-scrape theTVDB" - ' - 'cmnuChangeEp - ' - Me.cmnuChangeEp.Image = CType(resources.GetObject("cmnuChangeEp.Image"), System.Drawing.Image) - Me.cmnuChangeEp.Name = "cmnuChangeEp" - Me.cmnuChangeEp.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys) - Me.cmnuChangeEp.Size = New System.Drawing.Size(244, 22) - Me.cmnuChangeEp.Text = "Change Episode" - ' - 'ToolStripSeparator12 - ' - Me.ToolStripSeparator12.Name = "ToolStripSeparator12" - Me.ToolStripSeparator12.Size = New System.Drawing.Size(241, 6) - ' - 'cmnuEpOpenFolder - ' - Me.cmnuEpOpenFolder.Image = CType(resources.GetObject("cmnuEpOpenFolder.Image"), System.Drawing.Image) - Me.cmnuEpOpenFolder.Name = "cmnuEpOpenFolder" - Me.cmnuEpOpenFolder.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) - Me.cmnuEpOpenFolder.Size = New System.Drawing.Size(244, 22) - Me.cmnuEpOpenFolder.Text = "Open Contianing Folder" - ' - 'ToolStripSeparator28 - ' - Me.ToolStripSeparator28.Name = "ToolStripSeparator28" - Me.ToolStripSeparator28.Size = New System.Drawing.Size(241, 6) - ' - 'RemoveEpToolStripMenuItem - ' - Me.RemoveEpToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuRemoveTVEp, Me.cmnuDeleteTVEp}) - Me.RemoveEpToolStripMenuItem.Image = CType(resources.GetObject("RemoveEpToolStripMenuItem.Image"), System.Drawing.Image) - Me.RemoveEpToolStripMenuItem.Name = "RemoveEpToolStripMenuItem" - Me.RemoveEpToolStripMenuItem.Size = New System.Drawing.Size(244, 22) - Me.RemoveEpToolStripMenuItem.Text = "Remove" - ' - 'cmnuRemoveTVEp - ' - Me.cmnuRemoveTVEp.Image = CType(resources.GetObject("cmnuRemoveTVEp.Image"), System.Drawing.Image) - Me.cmnuRemoveTVEp.Name = "cmnuRemoveTVEp" - Me.cmnuRemoveTVEp.ShortcutKeys = System.Windows.Forms.Keys.Delete - Me.cmnuRemoveTVEp.Size = New System.Drawing.Size(221, 22) - Me.cmnuRemoveTVEp.Text = "Remove from Database" - ' - 'cmnuDeleteTVEp - ' - Me.cmnuDeleteTVEp.Image = CType(resources.GetObject("cmnuDeleteTVEp.Image"), System.Drawing.Image) - Me.cmnuDeleteTVEp.Name = "cmnuDeleteTVEp" - Me.cmnuDeleteTVEp.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Delete), System.Windows.Forms.Keys) - Me.cmnuDeleteTVEp.Size = New System.Drawing.Size(221, 22) - Me.cmnuDeleteTVEp.Text = "Delete Episode" - ' - 'pnlListTop - ' - Me.pnlListTop.Controls.Add(Me.btnMarkAll) - Me.pnlListTop.Controls.Add(Me.pnlSearch) - Me.pnlListTop.Controls.Add(Me.tabsMain) - Me.pnlListTop.Dock = System.Windows.Forms.DockStyle.Top - Me.pnlListTop.Location = New System.Drawing.Point(0, 0) - Me.pnlListTop.Name = "pnlListTop" - Me.pnlListTop.Size = New System.Drawing.Size(364, 56) - Me.pnlListTop.TabIndex = 14 - ' - 'btnMarkAll - ' - Me.btnMarkAll.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnMarkAll.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnMarkAll.Image = CType(resources.GetObject("btnMarkAll.Image"), System.Drawing.Image) - Me.btnMarkAll.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnMarkAll.Location = New System.Drawing.Point(254, 1) - Me.btnMarkAll.Name = "btnMarkAll" - Me.btnMarkAll.Size = New System.Drawing.Size(109, 21) - Me.btnMarkAll.TabIndex = 1 - Me.btnMarkAll.Text = "Mark All" - Me.btnMarkAll.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnMarkAll.UseVisualStyleBackColor = True - ' - 'pnlSearch - ' - Me.pnlSearch.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.pnlSearch.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlSearch.Controls.Add(Me.cbSearch) - Me.pnlSearch.Controls.Add(Me.picSearch) - Me.pnlSearch.Controls.Add(Me.txtSearch) - Me.pnlSearch.Location = New System.Drawing.Point(0, 23) - Me.pnlSearch.Name = "pnlSearch" - Me.pnlSearch.Size = New System.Drawing.Size(364, 33) - Me.pnlSearch.TabIndex = 0 - ' - 'cbSearch - ' - Me.cbSearch.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.cbSearch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbSearch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.cbSearch.FormattingEnabled = True - Me.cbSearch.Location = New System.Drawing.Point(253, 6) - Me.cbSearch.Name = "cbSearch" - Me.cbSearch.Size = New System.Drawing.Size(83, 21) - Me.cbSearch.TabIndex = 1 - ' - 'picSearch - ' - Me.picSearch.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.picSearch.Image = CType(resources.GetObject("picSearch.Image"), System.Drawing.Image) - Me.picSearch.Location = New System.Drawing.Point(340, 8) - Me.picSearch.Name = "picSearch" - Me.picSearch.Size = New System.Drawing.Size(16, 16) - Me.picSearch.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.picSearch.TabIndex = 1 - Me.picSearch.TabStop = False - ' - 'txtSearch - ' - Me.txtSearch.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.txtSearch.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.txtSearch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.txtSearch.Location = New System.Drawing.Point(7, 6) - Me.txtSearch.Name = "txtSearch" - Me.txtSearch.Size = New System.Drawing.Size(242, 22) - Me.txtSearch.TabIndex = 0 - ' - 'tabsMain - ' - Me.tabsMain.Controls.Add(Me.tabMovies) - Me.tabsMain.Controls.Add(Me.tabTV) - Me.tabsMain.Dock = System.Windows.Forms.DockStyle.Top - Me.tabsMain.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.tabsMain.Location = New System.Drawing.Point(0, 0) - Me.tabsMain.Name = "tabsMain" - Me.tabsMain.SelectedIndex = 0 - Me.tabsMain.Size = New System.Drawing.Size(364, 29) - Me.tabsMain.TabIndex = 0 - Me.tabsMain.TabStop = False - ' - 'tabMovies - ' - Me.tabMovies.Location = New System.Drawing.Point(4, 22) - Me.tabMovies.Name = "tabMovies" - Me.tabMovies.Padding = New System.Windows.Forms.Padding(3) - Me.tabMovies.Size = New System.Drawing.Size(356, 3) - Me.tabMovies.TabIndex = 0 - Me.tabMovies.Text = "Movies" - Me.tabMovies.UseVisualStyleBackColor = True - ' - 'tabTV - ' - Me.tabTV.Location = New System.Drawing.Point(4, 22) - Me.tabTV.Name = "tabTV" - Me.tabTV.Padding = New System.Windows.Forms.Padding(3) - Me.tabTV.Size = New System.Drawing.Size(356, 3) - Me.tabTV.TabIndex = 1 - Me.tabTV.Text = "TV Shows" - Me.tabTV.UseVisualStyleBackColor = True - ' - 'pnlFilter - ' - Me.pnlFilter.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlFilter.Controls.Add(Me.GroupBox1) - Me.pnlFilter.Controls.Add(Me.btnClearFilters) - Me.pnlFilter.Controls.Add(Me.GroupBox3) - Me.pnlFilter.Controls.Add(Me.gbSpecific) - Me.pnlFilter.Controls.Add(Me.btnFilterDown) - Me.pnlFilter.Controls.Add(Me.btnFilterUp) - Me.pnlFilter.Controls.Add(Me.lblFilter) - Me.pnlFilter.Dock = System.Windows.Forms.DockStyle.Bottom - Me.pnlFilter.Location = New System.Drawing.Point(0, 662) - Me.pnlFilter.Name = "pnlFilter" - Me.pnlFilter.Size = New System.Drawing.Size(364, 180) - Me.pnlFilter.TabIndex = 12 - Me.pnlFilter.Visible = False - ' - 'GroupBox1 - ' - Me.GroupBox1.Controls.Add(Me.btnIMDBRating) - Me.GroupBox1.Controls.Add(Me.btnSortTitle) - Me.GroupBox1.Controls.Add(Me.btnSortDate) - Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox1.Location = New System.Drawing.Point(3, 81) - Me.GroupBox1.Name = "GroupBox1" - Me.GroupBox1.Size = New System.Drawing.Size(131, 77) - Me.GroupBox1.TabIndex = 4 - Me.GroupBox1.TabStop = False - Me.GroupBox1.Text = "Extra Sorting" - ' - 'btnIMDBRating - ' - Me.btnIMDBRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnIMDBRating.Image = Global.Ember_Media_Manager.My.Resources.Resources.desc - Me.btnIMDBRating.ImageAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnIMDBRating.Location = New System.Drawing.Point(7, 53) - Me.btnIMDBRating.Name = "btnIMDBRating" - Me.btnIMDBRating.Size = New System.Drawing.Size(117, 21) - Me.btnIMDBRating.TabIndex = 2 - Me.btnIMDBRating.Text = "IMDB Rating" - Me.btnIMDBRating.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnIMDBRating.UseVisualStyleBackColor = True - ' - 'btnSortTitle - ' - Me.btnSortTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnSortTitle.Image = Global.Ember_Media_Manager.My.Resources.Resources.desc - Me.btnSortTitle.ImageAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnSortTitle.Location = New System.Drawing.Point(7, 33) - Me.btnSortTitle.Name = "btnSortTitle" - Me.btnSortTitle.Size = New System.Drawing.Size(117, 21) - Me.btnSortTitle.TabIndex = 1 - Me.btnSortTitle.Text = "Sort Title" - Me.btnSortTitle.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnSortTitle.UseVisualStyleBackColor = True - ' - 'btnSortDate - ' - Me.btnSortDate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnSortDate.Image = Global.Ember_Media_Manager.My.Resources.Resources.desc - Me.btnSortDate.ImageAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnSortDate.Location = New System.Drawing.Point(7, 13) - Me.btnSortDate.Name = "btnSortDate" - Me.btnSortDate.Size = New System.Drawing.Size(117, 21) - Me.btnSortDate.TabIndex = 0 - Me.btnSortDate.Text = "Date Added" - Me.btnSortDate.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnSortDate.UseVisualStyleBackColor = True - ' - 'btnClearFilters - ' - Me.btnClearFilters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnClearFilters.Image = CType(resources.GetObject("btnClearFilters.Image"), System.Drawing.Image) - Me.btnClearFilters.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnClearFilters.Location = New System.Drawing.Point(22, 160) - Me.btnClearFilters.Name = "btnClearFilters" - Me.btnClearFilters.Size = New System.Drawing.Size(92, 20) - Me.btnClearFilters.TabIndex = 5 - Me.btnClearFilters.Text = "Clear Filters" - Me.btnClearFilters.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnClearFilters.UseVisualStyleBackColor = True - ' - 'GroupBox3 - ' - Me.GroupBox3.Controls.Add(Me.chkFilterTolerance) - Me.GroupBox3.Controls.Add(Me.chkFilterMissing) - Me.GroupBox3.Controls.Add(Me.chkFilterDupe) - Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.GroupBox3.Location = New System.Drawing.Point(3, 22) - Me.GroupBox3.Name = "GroupBox3" - Me.GroupBox3.Size = New System.Drawing.Size(131, 59) - Me.GroupBox3.TabIndex = 3 - Me.GroupBox3.TabStop = False - Me.GroupBox3.Text = "General" - ' - 'chkFilterTolerance - ' - Me.chkFilterTolerance.AutoSize = True - Me.chkFilterTolerance.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkFilterTolerance.Location = New System.Drawing.Point(7, 41) - Me.chkFilterTolerance.Name = "chkFilterTolerance" - Me.chkFilterTolerance.Size = New System.Drawing.Size(112, 17) - Me.chkFilterTolerance.TabIndex = 2 - Me.chkFilterTolerance.Text = "Out of Tolerance" - Me.chkFilterTolerance.UseVisualStyleBackColor = True - ' - 'chkFilterMissing - ' - Me.chkFilterMissing.AutoSize = True - Me.chkFilterMissing.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkFilterMissing.Location = New System.Drawing.Point(7, 27) - Me.chkFilterMissing.Name = "chkFilterMissing" - Me.chkFilterMissing.Size = New System.Drawing.Size(96, 17) - Me.chkFilterMissing.TabIndex = 1 - Me.chkFilterMissing.Text = "Missing Items" - Me.chkFilterMissing.UseVisualStyleBackColor = True - ' - 'chkFilterDupe - ' - Me.chkFilterDupe.AutoSize = True - Me.chkFilterDupe.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkFilterDupe.Location = New System.Drawing.Point(7, 13) - Me.chkFilterDupe.Name = "chkFilterDupe" - Me.chkFilterDupe.Size = New System.Drawing.Size(80, 17) - Me.chkFilterDupe.TabIndex = 0 - Me.chkFilterDupe.Text = "Duplicates" - Me.chkFilterDupe.UseVisualStyleBackColor = True - ' - 'gbSpecific - ' - Me.gbSpecific.Controls.Add(Me.txtFilterSource) - Me.gbSpecific.Controls.Add(Me.Label6) - Me.gbSpecific.Controls.Add(Me.cbFilterFileSource) - Me.gbSpecific.Controls.Add(Me.chkFilterLock) - Me.gbSpecific.Controls.Add(Me.GroupBox2) - Me.gbSpecific.Controls.Add(Me.chkFilterNew) - Me.gbSpecific.Controls.Add(Me.cbFilterYear) - Me.gbSpecific.Controls.Add(Me.chkFilterMark) - Me.gbSpecific.Controls.Add(Me.cbFilterYearMod) - Me.gbSpecific.Controls.Add(Me.Label5) - Me.gbSpecific.Controls.Add(Me.txtFilterGenre) - Me.gbSpecific.Controls.Add(Me.Label2) - Me.gbSpecific.Controls.Add(Me.Label3) - Me.gbSpecific.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.gbSpecific.Location = New System.Drawing.Point(135, 22) - Me.gbSpecific.Name = "gbSpecific" - Me.gbSpecific.Size = New System.Drawing.Size(224, 155) - Me.gbSpecific.TabIndex = 6 - Me.gbSpecific.TabStop = False - Me.gbSpecific.Text = "Specific" - ' - 'txtFilterSource - ' - Me.txtFilterSource.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.txtFilterSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtFilterSource.Location = New System.Drawing.Point(50, 129) - Me.txtFilterSource.Name = "txtFilterSource" - Me.txtFilterSource.ReadOnly = True - Me.txtFilterSource.Size = New System.Drawing.Size(166, 22) - Me.txtFilterSource.TabIndex = 11 - ' - 'Label6 - ' - Me.Label6.AutoSize = True - Me.Label6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label6.Location = New System.Drawing.Point(6, 108) - Me.Label6.Name = "Label6" - Me.Label6.Size = New System.Drawing.Size(66, 13) - Me.Label6.TabIndex = 8 - Me.Label6.Text = "File Source:" - ' - 'cbFilterFileSource - ' - Me.cbFilterFileSource.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbFilterFileSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.cbFilterFileSource.FormattingEnabled = True - Me.cbFilterFileSource.Location = New System.Drawing.Point(77, 105) - Me.cbFilterFileSource.Name = "cbFilterFileSource" - Me.cbFilterFileSource.Size = New System.Drawing.Size(139, 21) - Me.cbFilterFileSource.TabIndex = 9 - ' - 'chkFilterLock - ' - Me.chkFilterLock.AutoSize = True - Me.chkFilterLock.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.chkFilterLock.Location = New System.Drawing.Point(73, 18) - Me.chkFilterLock.Name = "chkFilterLock" - Me.chkFilterLock.Size = New System.Drawing.Size(62, 17) - Me.chkFilterLock.TabIndex = 2 - Me.chkFilterLock.Text = "Locked" - Me.chkFilterLock.UseVisualStyleBackColor = True - ' - 'GroupBox2 - ' - Me.GroupBox2.Controls.Add(Me.rbFilterAnd) - Me.GroupBox2.Controls.Add(Me.rbFilterOr) - Me.GroupBox2.Location = New System.Drawing.Point(140, 10) - Me.GroupBox2.Name = "GroupBox2" - Me.GroupBox2.Size = New System.Drawing.Size(76, 43) - Me.GroupBox2.TabIndex = 3 - Me.GroupBox2.TabStop = False - Me.GroupBox2.Text = "Modifier" - ' - 'rbFilterAnd - ' - Me.rbFilterAnd.AutoSize = True - Me.rbFilterAnd.Checked = True - Me.rbFilterAnd.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.rbFilterAnd.Location = New System.Drawing.Point(6, 11) - Me.rbFilterAnd.Name = "rbFilterAnd" - Me.rbFilterAnd.Size = New System.Drawing.Size(46, 17) - Me.rbFilterAnd.TabIndex = 0 - Me.rbFilterAnd.TabStop = True - Me.rbFilterAnd.Text = "And" - Me.rbFilterAnd.UseVisualStyleBackColor = True - ' - 'rbFilterOr - ' - Me.rbFilterOr.AutoSize = True - Me.rbFilterOr.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.rbFilterOr.Location = New System.Drawing.Point(6, 25) - Me.rbFilterOr.Name = "rbFilterOr" - Me.rbFilterOr.Size = New System.Drawing.Size(38, 17) - Me.rbFilterOr.TabIndex = 1 - Me.rbFilterOr.Text = "Or" - Me.rbFilterOr.UseVisualStyleBackColor = True - ' - 'chkFilterNew - ' - Me.chkFilterNew.AutoSize = True - Me.chkFilterNew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkFilterNew.Location = New System.Drawing.Point(9, 18) - Me.chkFilterNew.Name = "chkFilterNew" - Me.chkFilterNew.Size = New System.Drawing.Size(49, 17) - Me.chkFilterNew.TabIndex = 0 - Me.chkFilterNew.Text = "New" - Me.chkFilterNew.UseVisualStyleBackColor = True - ' - 'cbFilterYear - ' - Me.cbFilterYear.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbFilterYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.cbFilterYear.FormattingEnabled = True - Me.cbFilterYear.Items.AddRange(New Object() {"=", ">", "<", "!="}) - Me.cbFilterYear.Location = New System.Drawing.Point(141, 81) - Me.cbFilterYear.Name = "cbFilterYear" - Me.cbFilterYear.Size = New System.Drawing.Size(75, 21) - Me.cbFilterYear.TabIndex = 7 - ' - 'chkFilterMark - ' - Me.chkFilterMark.AutoSize = True - Me.chkFilterMark.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.chkFilterMark.Location = New System.Drawing.Point(9, 36) - Me.chkFilterMark.Name = "chkFilterMark" - Me.chkFilterMark.Size = New System.Drawing.Size(65, 17) - Me.chkFilterMark.TabIndex = 1 - Me.chkFilterMark.Text = "Marked" - Me.chkFilterMark.UseVisualStyleBackColor = True - ' - 'cbFilterYearMod - ' - Me.cbFilterYearMod.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbFilterYearMod.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.cbFilterYearMod.FormattingEnabled = True - Me.cbFilterYearMod.Items.AddRange(New Object() {"=", ">", "<", "<>"}) - Me.cbFilterYearMod.Location = New System.Drawing.Point(77, 81) - Me.cbFilterYearMod.Name = "cbFilterYearMod" - Me.cbFilterYearMod.Size = New System.Drawing.Size(59, 21) - Me.cbFilterYearMod.TabIndex = 6 - ' - 'Label5 - ' - Me.Label5.AutoSize = True - Me.Label5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label5.Location = New System.Drawing.Point(6, 83) - Me.Label5.Name = "Label5" - Me.Label5.Size = New System.Drawing.Size(31, 13) - Me.Label5.TabIndex = 5 - Me.Label5.Text = "Year:" - ' - 'txtFilterGenre - ' - Me.txtFilterGenre.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.txtFilterGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtFilterGenre.Location = New System.Drawing.Point(50, 56) - Me.txtFilterGenre.Name = "txtFilterGenre" - Me.txtFilterGenre.ReadOnly = True - Me.txtFilterGenre.Size = New System.Drawing.Size(166, 22) - Me.txtFilterGenre.TabIndex = 4 - ' - 'Label2 - ' - Me.Label2.AutoSize = True - Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label2.Location = New System.Drawing.Point(6, 132) - Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(45, 13) - Me.Label2.TabIndex = 10 - Me.Label2.Text = "Source:" - ' - 'Label3 - ' - Me.Label3.AutoSize = True - Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label3.Location = New System.Drawing.Point(6, 58) - Me.Label3.Name = "Label3" - Me.Label3.Size = New System.Drawing.Size(41, 13) - Me.Label3.TabIndex = 31 - Me.Label3.Text = "Genre:" - ' - 'btnFilterDown - ' - Me.btnFilterDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnFilterDown.BackColor = System.Drawing.SystemColors.Control - Me.btnFilterDown.Enabled = False - Me.btnFilterDown.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnFilterDown.Location = New System.Drawing.Point(324, 1) - Me.btnFilterDown.Name = "btnFilterDown" - Me.btnFilterDown.Size = New System.Drawing.Size(30, 22) - Me.btnFilterDown.TabIndex = 2 - Me.btnFilterDown.TabStop = False - Me.btnFilterDown.Text = "v" - Me.btnFilterDown.TextAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnFilterDown.UseVisualStyleBackColor = False - ' - 'btnFilterUp - ' - Me.btnFilterUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnFilterUp.BackColor = System.Drawing.SystemColors.Control - Me.btnFilterUp.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnFilterUp.Location = New System.Drawing.Point(292, 1) - Me.btnFilterUp.Name = "btnFilterUp" - Me.btnFilterUp.Size = New System.Drawing.Size(30, 22) - Me.btnFilterUp.TabIndex = 1 - Me.btnFilterUp.TabStop = False - Me.btnFilterUp.Text = "^" - Me.btnFilterUp.TextAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnFilterUp.UseVisualStyleBackColor = False - ' - 'lblFilter - ' - Me.lblFilter.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblFilter.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.lblFilter.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblFilter.ForeColor = System.Drawing.SystemColors.HighlightText - Me.lblFilter.Location = New System.Drawing.Point(4, 3) - Me.lblFilter.Name = "lblFilter" - Me.lblFilter.Size = New System.Drawing.Size(354, 17) - Me.lblFilter.TabIndex = 0 - Me.lblFilter.Text = "Filters" - Me.lblFilter.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'pnlTop - ' - Me.pnlTop.BackColor = System.Drawing.Color.Gainsboro - Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlTop.Controls.Add(Me.lblTitle) - Me.pnlTop.Controls.Add(Me.pnlInfoIcons) - Me.pnlTop.Controls.Add(Me.lblRuntime) - Me.pnlTop.Controls.Add(Me.lblTagline) - Me.pnlTop.Controls.Add(Me.pnlRating) - Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top - Me.pnlTop.Location = New System.Drawing.Point(0, 25) - Me.pnlTop.Name = "pnlTop" - Me.pnlTop.Size = New System.Drawing.Size(1109, 74) - Me.pnlTop.TabIndex = 9 - Me.pnlTop.Visible = False - ' - 'lblTitle - ' - Me.lblTitle.AutoSize = True - Me.lblTitle.BackColor = System.Drawing.Color.Transparent - Me.lblTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblTitle.ForeColor = System.Drawing.Color.Black - Me.lblTitle.Location = New System.Drawing.Point(4, 2) - Me.lblTitle.Name = "lblTitle" - Me.lblTitle.Size = New System.Drawing.Size(0, 20) - Me.lblTitle.TabIndex = 25 - Me.lblTitle.UseMnemonic = False - ' - 'pnlInfoIcons - ' - Me.pnlInfoIcons.BackColor = System.Drawing.Color.Transparent - Me.pnlInfoIcons.Controls.Add(Me.lblOriginalTitle) - Me.pnlInfoIcons.Controls.Add(Me.lblStudio) - Me.pnlInfoIcons.Controls.Add(Me.pbVType) - Me.pnlInfoIcons.Controls.Add(Me.pbStudio) - Me.pnlInfoIcons.Controls.Add(Me.pbVideo) - Me.pnlInfoIcons.Controls.Add(Me.pbAudio) - Me.pnlInfoIcons.Controls.Add(Me.pbResolution) - Me.pnlInfoIcons.Controls.Add(Me.pbChannels) - Me.pnlInfoIcons.Dock = System.Windows.Forms.DockStyle.Right - Me.pnlInfoIcons.Location = New System.Drawing.Point(717, 0) - Me.pnlInfoIcons.Name = "pnlInfoIcons" - Me.pnlInfoIcons.Size = New System.Drawing.Size(390, 72) - Me.pnlInfoIcons.TabIndex = 31 - ' - 'lblOriginalTitle - ' - Me.lblOriginalTitle.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblOriginalTitle.BackColor = System.Drawing.Color.Transparent - Me.lblOriginalTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblOriginalTitle.ForeColor = System.Drawing.Color.Black - Me.lblOriginalTitle.Location = New System.Drawing.Point(-16, 2) - Me.lblOriginalTitle.Name = "lblOriginalTitle" - Me.lblOriginalTitle.Size = New System.Drawing.Size(406, 20) - Me.lblOriginalTitle.TabIndex = 26 - Me.lblOriginalTitle.TextAlign = System.Drawing.ContentAlignment.TopRight - Me.lblOriginalTitle.UseMnemonic = False - ' - 'lblStudio - ' - Me.lblStudio.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblStudio.Location = New System.Drawing.Point(223, 55) - Me.lblStudio.Name = "lblStudio" - Me.lblStudio.Size = New System.Drawing.Size(167, 18) - Me.lblStudio.TabIndex = 37 - Me.lblStudio.Text = " " - Me.lblStudio.TextAlign = System.Drawing.ContentAlignment.TopRight - ' - 'pbVType - ' - Me.pbVType.BackColor = System.Drawing.Color.Transparent - Me.pbVType.Location = New System.Drawing.Point(65, 15) - Me.pbVType.Name = "pbVType" - Me.pbVType.Size = New System.Drawing.Size(64, 44) - Me.pbVType.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbVType.TabIndex = 36 - Me.pbVType.TabStop = False - ' - 'pbStudio - ' - Me.pbStudio.BackColor = System.Drawing.Color.Transparent - Me.pbStudio.Location = New System.Drawing.Point(325, 15) - Me.pbStudio.Name = "pbStudio" - Me.pbStudio.Size = New System.Drawing.Size(64, 44) - Me.pbStudio.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbStudio.TabIndex = 31 - Me.pbStudio.TabStop = False - ' - 'pbVideo - ' - Me.pbVideo.BackColor = System.Drawing.Color.Transparent - Me.pbVideo.Location = New System.Drawing.Point(0, 15) - Me.pbVideo.Name = "pbVideo" - Me.pbVideo.Size = New System.Drawing.Size(64, 44) - Me.pbVideo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbVideo.TabIndex = 33 - Me.pbVideo.TabStop = False - ' - 'pbAudio - ' - Me.pbAudio.BackColor = System.Drawing.Color.Transparent - Me.pbAudio.Location = New System.Drawing.Point(195, 15) - Me.pbAudio.Name = "pbAudio" - Me.pbAudio.Size = New System.Drawing.Size(64, 44) - Me.pbAudio.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbAudio.TabIndex = 35 - Me.pbAudio.TabStop = False - ' - 'pbResolution - ' - Me.pbResolution.BackColor = System.Drawing.Color.Transparent - Me.pbResolution.Location = New System.Drawing.Point(130, 15) - Me.pbResolution.Name = "pbResolution" - Me.pbResolution.Size = New System.Drawing.Size(64, 44) - Me.pbResolution.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbResolution.TabIndex = 34 - Me.pbResolution.TabStop = False - ' - 'pbChannels - ' - Me.pbChannels.BackColor = System.Drawing.Color.Transparent - Me.pbChannels.Location = New System.Drawing.Point(260, 15) - Me.pbChannels.Name = "pbChannels" - Me.pbChannels.Size = New System.Drawing.Size(64, 44) - Me.pbChannels.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbChannels.TabIndex = 32 - Me.pbChannels.TabStop = False - ' - 'lblRuntime - ' - Me.lblRuntime.AutoSize = True - Me.lblRuntime.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblRuntime.ForeColor = System.Drawing.Color.Black - Me.lblRuntime.Location = New System.Drawing.Point(213, 32) - Me.lblRuntime.Name = "lblRuntime" - Me.lblRuntime.Size = New System.Drawing.Size(0, 13) - Me.lblRuntime.TabIndex = 32 - Me.lblRuntime.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'lblTagline - ' - Me.lblTagline.AutoSize = True - Me.lblTagline.BackColor = System.Drawing.Color.Transparent - Me.lblTagline.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblTagline.ForeColor = System.Drawing.Color.Black - Me.lblTagline.Location = New System.Drawing.Point(5, 55) - Me.lblTagline.Name = "lblTagline" - Me.lblTagline.Size = New System.Drawing.Size(0, 13) - Me.lblTagline.TabIndex = 26 - Me.lblTagline.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.lblTagline.UseMnemonic = False - ' - 'pnlRating - ' - Me.pnlRating.BackColor = System.Drawing.Color.Transparent - Me.pnlRating.Controls.Add(Me.pbStar5) - Me.pnlRating.Controls.Add(Me.pbStar4) - Me.pnlRating.Controls.Add(Me.pbStar3) - Me.pnlRating.Controls.Add(Me.pbStar2) - Me.pnlRating.Controls.Add(Me.pbStar1) - Me.pnlRating.Controls.Add(Me.lblVotes) - Me.pnlRating.Location = New System.Drawing.Point(6, 24) - Me.pnlRating.Name = "pnlRating" - Me.pnlRating.Size = New System.Drawing.Size(206, 27) - Me.pnlRating.TabIndex = 24 - ' - 'pbStar5 - ' - Me.pbStar5.Location = New System.Drawing.Point(97, 1) - Me.pbStar5.Name = "pbStar5" - Me.pbStar5.Size = New System.Drawing.Size(24, 24) - Me.pbStar5.TabIndex = 27 - Me.pbStar5.TabStop = False - ' - 'pbStar4 - ' - Me.pbStar4.Location = New System.Drawing.Point(73, 1) - Me.pbStar4.Name = "pbStar4" - Me.pbStar4.Size = New System.Drawing.Size(24, 24) - Me.pbStar4.TabIndex = 26 - Me.pbStar4.TabStop = False - ' - 'pbStar3 - ' - Me.pbStar3.Location = New System.Drawing.Point(49, 1) - Me.pbStar3.Name = "pbStar3" - Me.pbStar3.Size = New System.Drawing.Size(24, 24) - Me.pbStar3.TabIndex = 25 - Me.pbStar3.TabStop = False - ' - 'pbStar2 - ' - Me.pbStar2.Location = New System.Drawing.Point(25, 1) - Me.pbStar2.Name = "pbStar2" - Me.pbStar2.Size = New System.Drawing.Size(24, 24) - Me.pbStar2.TabIndex = 24 - Me.pbStar2.TabStop = False - ' - 'pbStar1 - ' - Me.pbStar1.Location = New System.Drawing.Point(1, 1) - Me.pbStar1.Name = "pbStar1" - Me.pbStar1.Size = New System.Drawing.Size(24, 24) - Me.pbStar1.TabIndex = 23 - Me.pbStar1.TabStop = False - ' - 'lblVotes - ' - Me.lblVotes.AutoSize = True - Me.lblVotes.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblVotes.ForeColor = System.Drawing.Color.Black - Me.lblVotes.Location = New System.Drawing.Point(123, 8) - Me.lblVotes.Name = "lblVotes" - Me.lblVotes.Size = New System.Drawing.Size(0, 13) - Me.lblVotes.TabIndex = 22 - Me.lblVotes.TextAlign = System.Drawing.ContentAlignment.MiddleRight - ' - 'pnlCancel - ' - Me.pnlCancel.BackColor = System.Drawing.Color.LightGray - Me.pnlCancel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlCancel.Controls.Add(Me.pbCanceling) - Me.pnlCancel.Controls.Add(Me.lblCanceling) - Me.pnlCancel.Controls.Add(Me.btnCancel) - Me.pnlCancel.Location = New System.Drawing.Point(273, 100) - Me.pnlCancel.Name = "pnlCancel" - Me.pnlCancel.Size = New System.Drawing.Size(214, 63) - Me.pnlCancel.TabIndex = 8 - Me.pnlCancel.Visible = False - ' - 'pbCanceling - ' - Me.pbCanceling.Location = New System.Drawing.Point(5, 32) - Me.pbCanceling.MarqueeAnimationSpeed = 25 - Me.pbCanceling.Name = "pbCanceling" - Me.pbCanceling.Size = New System.Drawing.Size(203, 20) - Me.pbCanceling.Style = System.Windows.Forms.ProgressBarStyle.Marquee - Me.pbCanceling.TabIndex = 2 - Me.pbCanceling.Visible = False - ' - 'lblCanceling - ' - Me.lblCanceling.AutoSize = True - Me.lblCanceling.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.lblCanceling.Location = New System.Drawing.Point(4, 12) - Me.lblCanceling.Name = "lblCanceling" - Me.lblCanceling.Size = New System.Drawing.Size(129, 17) - Me.lblCanceling.TabIndex = 1 - Me.lblCanceling.Text = "Canceling Scraper..." - Me.lblCanceling.Visible = False - ' - 'btnCancel - ' - Me.btnCancel.Font = New System.Drawing.Font("Segoe UI", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.btnCancel.Image = CType(resources.GetObject("btnCancel.Image"), System.Drawing.Image) - Me.btnCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.btnCancel.Location = New System.Drawing.Point(4, 4) - Me.btnCancel.Name = "btnCancel" - Me.btnCancel.Size = New System.Drawing.Size(205, 55) - Me.btnCancel.TabIndex = 0 - Me.btnCancel.TabStop = False - Me.btnCancel.Text = "Cancel Scraper" - Me.btnCancel.TextAlign = System.Drawing.ContentAlignment.MiddleRight - Me.btnCancel.UseVisualStyleBackColor = True - ' - 'pnlAllSeason - ' - Me.pnlAllSeason.BackColor = System.Drawing.Color.Gainsboro - Me.pnlAllSeason.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlAllSeason.Controls.Add(Me.pbAllSeason) - Me.pnlAllSeason.Location = New System.Drawing.Point(508, 112) - Me.pnlAllSeason.Name = "pnlAllSeason" - Me.pnlAllSeason.Size = New System.Drawing.Size(131, 169) - Me.pnlAllSeason.TabIndex = 3 - Me.pnlAllSeason.Visible = False - ' - 'pbAllSeason - ' - Me.pbAllSeason.BackColor = System.Drawing.SystemColors.Control - Me.pbAllSeason.Location = New System.Drawing.Point(4, 4) - Me.pbAllSeason.Name = "pbAllSeason" - Me.pbAllSeason.Size = New System.Drawing.Size(121, 159) - Me.pbAllSeason.TabIndex = 0 - Me.pbAllSeason.TabStop = False - ' - 'pbAllSeasonCache - ' - Me.pbAllSeasonCache.Location = New System.Drawing.Point(333, 107) - Me.pbAllSeasonCache.Name = "pbAllSeasonCache" - Me.pbAllSeasonCache.Size = New System.Drawing.Size(115, 111) - Me.pbAllSeasonCache.TabIndex = 13 - Me.pbAllSeasonCache.TabStop = False - Me.pbAllSeasonCache.Visible = False - ' - 'pnlNoInfo - ' - Me.pnlNoInfo.BackColor = System.Drawing.Color.LightGray - Me.pnlNoInfo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlNoInfo.Controls.Add(Me.Panel2) - Me.pnlNoInfo.Location = New System.Drawing.Point(241, 300) - Me.pnlNoInfo.Name = "pnlNoInfo" - Me.pnlNoInfo.Size = New System.Drawing.Size(259, 143) - Me.pnlNoInfo.TabIndex = 8 - Me.pnlNoInfo.Visible = False - ' - 'Panel2 - ' - Me.Panel2.BackColor = System.Drawing.Color.White - Me.Panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Panel2.Controls.Add(Me.PictureBox1) - Me.Panel2.Controls.Add(Me.Label1) - Me.Panel2.Location = New System.Drawing.Point(3, 4) - Me.Panel2.Name = "Panel2" - Me.Panel2.Size = New System.Drawing.Size(251, 133) - Me.Panel2.TabIndex = 0 - ' - 'PictureBox1 - ' - Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) - Me.PictureBox1.Location = New System.Drawing.Point(7, 38) - Me.PictureBox1.Name = "PictureBox1" - Me.PictureBox1.Size = New System.Drawing.Size(63, 63) - Me.PictureBox1.TabIndex = 1 - Me.PictureBox1.TabStop = False - ' - 'Label1 - ' - Me.Label1.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.Label1.Location = New System.Drawing.Point(71, 29) - Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(173, 78) - Me.Label1.TabIndex = 0 - Me.Label1.Text = "No Information is Available for This Movie" - Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'pnlInfoPanel - ' - Me.pnlInfoPanel.BackColor = System.Drawing.Color.Gainsboro - Me.pnlInfoPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlInfoPanel.Controls.Add(Me.txtCerts) - Me.pnlInfoPanel.Controls.Add(Me.lblCertsHeader) - Me.pnlInfoPanel.Controls.Add(Me.lblReleaseDate) - Me.pnlInfoPanel.Controls.Add(Me.lblReleaseDateHeader) - Me.pnlInfoPanel.Controls.Add(Me.btnMid) - Me.pnlInfoPanel.Controls.Add(Me.pbMILoading) - Me.pnlInfoPanel.Controls.Add(Me.btnMetaDataRefresh) - Me.pnlInfoPanel.Controls.Add(Me.lblMetaDataHeader) - Me.pnlInfoPanel.Controls.Add(Me.txtMetaData) - Me.pnlInfoPanel.Controls.Add(Me.btnPlay) - Me.pnlInfoPanel.Controls.Add(Me.txtFilePath) - Me.pnlInfoPanel.Controls.Add(Me.lblFilePathHeader) - Me.pnlInfoPanel.Controls.Add(Me.txtIMDBID) - Me.pnlInfoPanel.Controls.Add(Me.lblIMDBHeader) - Me.pnlInfoPanel.Controls.Add(Me.lblDirector) - Me.pnlInfoPanel.Controls.Add(Me.lblDirectorHeader) - Me.pnlInfoPanel.Controls.Add(Me.pnlActors) - Me.pnlInfoPanel.Controls.Add(Me.lblOutlineHeader) - Me.pnlInfoPanel.Controls.Add(Me.txtOutline) - Me.pnlInfoPanel.Controls.Add(Me.pnlTop250) - Me.pnlInfoPanel.Controls.Add(Me.lblPlotHeader) - Me.pnlInfoPanel.Controls.Add(Me.txtPlot) - Me.pnlInfoPanel.Controls.Add(Me.btnDown) - Me.pnlInfoPanel.Controls.Add(Me.btnUp) - Me.pnlInfoPanel.Controls.Add(Me.lblInfoPanelHeader) - Me.pnlInfoPanel.Dock = System.Windows.Forms.DockStyle.Bottom - Me.pnlInfoPanel.Location = New System.Drawing.Point(0, 500) - Me.pnlInfoPanel.Name = "pnlInfoPanel" - Me.pnlInfoPanel.Size = New System.Drawing.Size(1109, 342) - Me.pnlInfoPanel.TabIndex = 10 - ' - 'txtCerts - ' - Me.txtCerts.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.txtCerts.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.txtCerts.Location = New System.Drawing.Point(117, 208) - Me.txtCerts.Name = "txtCerts" - Me.txtCerts.ReadOnly = True - Me.txtCerts.Size = New System.Drawing.Size(673, 22) - Me.txtCerts.TabIndex = 3 - Me.txtCerts.TabStop = False - ' - 'lblCertsHeader - ' - Me.lblCertsHeader.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblCertsHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.lblCertsHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblCertsHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblCertsHeader.ForeColor = System.Drawing.SystemColors.HighlightText - Me.lblCertsHeader.Location = New System.Drawing.Point(117, 188) - Me.lblCertsHeader.Name = "lblCertsHeader" - Me.lblCertsHeader.Size = New System.Drawing.Size(673, 17) - Me.lblCertsHeader.TabIndex = 2 - Me.lblCertsHeader.Text = "Certifications" - Me.lblCertsHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'lblReleaseDate - ' - Me.lblReleaseDate.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblReleaseDate.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblReleaseDate.ForeColor = System.Drawing.Color.Black - Me.lblReleaseDate.Location = New System.Drawing.Point(624, 48) - Me.lblReleaseDate.Name = "lblReleaseDate" - Me.lblReleaseDate.Size = New System.Drawing.Size(105, 16) - Me.lblReleaseDate.TabIndex = 39 - Me.lblReleaseDate.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'lblReleaseDateHeader - ' - Me.lblReleaseDateHeader.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblReleaseDateHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.lblReleaseDateHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblReleaseDateHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblReleaseDateHeader.ForeColor = System.Drawing.SystemColors.HighlightText - Me.lblReleaseDateHeader.Location = New System.Drawing.Point(624, 27) - Me.lblReleaseDateHeader.Name = "lblReleaseDateHeader" - Me.lblReleaseDateHeader.Size = New System.Drawing.Size(105, 17) - Me.lblReleaseDateHeader.TabIndex = 38 - Me.lblReleaseDateHeader.Text = "Release Date" - Me.lblReleaseDateHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'btnMid - ' - Me.btnMid.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnMid.BackColor = System.Drawing.SystemColors.Control - Me.btnMid.Location = New System.Drawing.Point(1038, 1) - Me.btnMid.Name = "btnMid" - Me.btnMid.Size = New System.Drawing.Size(30, 22) - Me.btnMid.TabIndex = 37 - Me.btnMid.TabStop = False - Me.btnMid.Text = "-" - Me.btnMid.TextAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnMid.UseVisualStyleBackColor = False - ' - 'pbMILoading - ' - Me.pbMILoading.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.pbMILoading.Image = CType(resources.GetObject("pbMILoading.Image"), System.Drawing.Image) - Me.pbMILoading.Location = New System.Drawing.Point(940, 374) - Me.pbMILoading.Name = "pbMILoading" - Me.pbMILoading.Size = New System.Drawing.Size(41, 39) - Me.pbMILoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage - Me.pbMILoading.TabIndex = 36 - Me.pbMILoading.TabStop = False - Me.pbMILoading.Visible = False - ' - 'btnMetaDataRefresh - ' - Me.btnMetaDataRefresh.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnMetaDataRefresh.Location = New System.Drawing.Point(1027, 278) - Me.btnMetaDataRefresh.Name = "btnMetaDataRefresh" - Me.btnMetaDataRefresh.Size = New System.Drawing.Size(75, 23) - Me.btnMetaDataRefresh.TabIndex = 9 - Me.btnMetaDataRefresh.TabStop = False - Me.btnMetaDataRefresh.Text = "Refresh" - Me.btnMetaDataRefresh.UseVisualStyleBackColor = True - ' - 'lblMetaDataHeader - ' - Me.lblMetaDataHeader.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblMetaDataHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.lblMetaDataHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblMetaDataHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblMetaDataHeader.ForeColor = System.Drawing.SystemColors.HighlightText - Me.lblMetaDataHeader.Location = New System.Drawing.Point(803, 282) - Me.lblMetaDataHeader.Name = "lblMetaDataHeader" - Me.lblMetaDataHeader.Size = New System.Drawing.Size(294, 17) - Me.lblMetaDataHeader.TabIndex = 8 - Me.lblMetaDataHeader.Text = "Meta Data" - Me.lblMetaDataHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'txtMetaData - ' - Me.txtMetaData.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.txtMetaData.BackColor = System.Drawing.Color.Gainsboro - Me.txtMetaData.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.txtMetaData.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtMetaData.ForeColor = System.Drawing.Color.Black - Me.txtMetaData.Location = New System.Drawing.Point(803, 303) - Me.txtMetaData.Multiline = True - Me.txtMetaData.Name = "txtMetaData" - Me.txtMetaData.ReadOnly = True - Me.txtMetaData.ScrollBars = System.Windows.Forms.ScrollBars.Vertical - Me.txtMetaData.Size = New System.Drawing.Size(296, 184) - Me.txtMetaData.TabIndex = 10 - Me.txtMetaData.TabStop = False - ' - 'btnPlay - ' - Me.btnPlay.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnPlay.Image = Global.Ember_Media_Manager.My.Resources.Resources.Play_Icon - Me.btnPlay.Location = New System.Drawing.Point(771, 254) - Me.btnPlay.Name = "btnPlay" - Me.btnPlay.Size = New System.Drawing.Size(20, 20) - Me.btnPlay.TabIndex = 6 - Me.btnPlay.TabStop = False - Me.btnPlay.UseVisualStyleBackColor = True - ' - 'txtFilePath - ' - Me.txtFilePath.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.txtFilePath.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.txtFilePath.Location = New System.Drawing.Point(3, 254) - Me.txtFilePath.Name = "txtFilePath" - Me.txtFilePath.ReadOnly = True - Me.txtFilePath.Size = New System.Drawing.Size(765, 22) - Me.txtFilePath.TabIndex = 5 - Me.txtFilePath.TabStop = False - ' - 'lblFilePathHeader - ' - Me.lblFilePathHeader.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblFilePathHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.lblFilePathHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblFilePathHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblFilePathHeader.ForeColor = System.Drawing.SystemColors.HighlightText - Me.lblFilePathHeader.Location = New System.Drawing.Point(3, 234) - Me.lblFilePathHeader.Name = "lblFilePathHeader" - Me.lblFilePathHeader.Size = New System.Drawing.Size(787, 17) - Me.lblFilePathHeader.TabIndex = 4 - Me.lblFilePathHeader.Text = "File Path" - Me.lblFilePathHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'txtIMDBID - ' - Me.txtIMDBID.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.txtIMDBID.Location = New System.Drawing.Point(3, 208) - Me.txtIMDBID.Name = "txtIMDBID" - Me.txtIMDBID.ReadOnly = True - Me.txtIMDBID.Size = New System.Drawing.Size(108, 22) - Me.txtIMDBID.TabIndex = 1 - Me.txtIMDBID.TabStop = False - ' - 'lblIMDBHeader - ' - Me.lblIMDBHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.lblIMDBHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblIMDBHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblIMDBHeader.ForeColor = System.Drawing.SystemColors.HighlightText - Me.lblIMDBHeader.Location = New System.Drawing.Point(3, 188) - Me.lblIMDBHeader.Name = "lblIMDBHeader" - Me.lblIMDBHeader.Size = New System.Drawing.Size(108, 17) - Me.lblIMDBHeader.TabIndex = 0 - Me.lblIMDBHeader.Text = "IMDB ID" - Me.lblIMDBHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'lblDirector - ' - Me.lblDirector.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblDirector.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblDirector.ForeColor = System.Drawing.Color.Black - Me.lblDirector.Location = New System.Drawing.Point(3, 48) - Me.lblDirector.Name = "lblDirector" - Me.lblDirector.Size = New System.Drawing.Size(616, 16) - Me.lblDirector.TabIndex = 27 - Me.lblDirector.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'lblDirectorHeader - ' - Me.lblDirectorHeader.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblDirectorHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.lblDirectorHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblDirectorHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblDirectorHeader.ForeColor = System.Drawing.SystemColors.HighlightText - Me.lblDirectorHeader.Location = New System.Drawing.Point(3, 27) - Me.lblDirectorHeader.Name = "lblDirectorHeader" - Me.lblDirectorHeader.Size = New System.Drawing.Size(615, 17) - Me.lblDirectorHeader.TabIndex = 21 - Me.lblDirectorHeader.Text = "Director" - Me.lblDirectorHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'pnlActors - ' - Me.pnlActors.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.pnlActors.BackColor = System.Drawing.Color.Gainsboro - Me.pnlActors.Controls.Add(Me.pbActLoad) - Me.pnlActors.Controls.Add(Me.lstActors) - Me.pnlActors.Controls.Add(Me.pbActors) - Me.pnlActors.Controls.Add(Me.lblActorsHeader) - Me.pnlActors.Location = New System.Drawing.Point(802, 29) - Me.pnlActors.Name = "pnlActors" - Me.pnlActors.Size = New System.Drawing.Size(302, 244) - Me.pnlActors.TabIndex = 19 - ' - 'pbActLoad - ' - Me.pbActLoad.Image = CType(resources.GetObject("pbActLoad.Image"), System.Drawing.Image) - Me.pbActLoad.Location = New System.Drawing.Point(240, 111) - Me.pbActLoad.Name = "pbActLoad" - Me.pbActLoad.Size = New System.Drawing.Size(41, 39) - Me.pbActLoad.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage - Me.pbActLoad.TabIndex = 26 - Me.pbActLoad.TabStop = False - Me.pbActLoad.Visible = False - ' - 'lstActors - ' - Me.lstActors.BackColor = System.Drawing.Color.Gainsboro - Me.lstActors.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.lstActors.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lstActors.ForeColor = System.Drawing.Color.Black - Me.lstActors.FormattingEnabled = True - Me.lstActors.Location = New System.Drawing.Point(3, 21) - Me.lstActors.Name = "lstActors" - Me.lstActors.Size = New System.Drawing.Size(214, 221) - Me.lstActors.TabIndex = 28 - Me.lstActors.TabStop = False - ' - 'pbActors - ' - Me.pbActors.Image = Global.Ember_Media_Manager.My.Resources.Resources.actor_silhouette - Me.pbActors.Location = New System.Drawing.Point(220, 75) - Me.pbActors.Name = "pbActors" - Me.pbActors.Size = New System.Drawing.Size(81, 106) - Me.pbActors.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbActors.TabIndex = 27 - Me.pbActors.TabStop = False - ' - 'lblActorsHeader - ' - Me.lblActorsHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.lblActorsHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblActorsHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblActorsHeader.ForeColor = System.Drawing.SystemColors.HighlightText - Me.lblActorsHeader.Location = New System.Drawing.Point(0, 0) - Me.lblActorsHeader.Name = "lblActorsHeader" - Me.lblActorsHeader.Size = New System.Drawing.Size(301, 17) - Me.lblActorsHeader.TabIndex = 18 - Me.lblActorsHeader.Text = "Cast" - Me.lblActorsHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'lblOutlineHeader - ' - Me.lblOutlineHeader.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblOutlineHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.lblOutlineHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblOutlineHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblOutlineHeader.ForeColor = System.Drawing.SystemColors.HighlightText - Me.lblOutlineHeader.Location = New System.Drawing.Point(3, 81) - Me.lblOutlineHeader.Name = "lblOutlineHeader" - Me.lblOutlineHeader.Size = New System.Drawing.Size(787, 17) - Me.lblOutlineHeader.TabIndex = 17 - Me.lblOutlineHeader.Text = "Plot Outline" - Me.lblOutlineHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'txtOutline - ' - Me.txtOutline.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.txtOutline.BackColor = System.Drawing.Color.Gainsboro - Me.txtOutline.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.txtOutline.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtOutline.ForeColor = System.Drawing.Color.Black - Me.txtOutline.Location = New System.Drawing.Point(3, 103) - Me.txtOutline.Multiline = True - Me.txtOutline.Name = "txtOutline" - Me.txtOutline.ReadOnly = True - Me.txtOutline.ScrollBars = System.Windows.Forms.ScrollBars.Vertical - Me.txtOutline.Size = New System.Drawing.Size(787, 78) - Me.txtOutline.TabIndex = 16 - Me.txtOutline.TabStop = False - ' - 'pnlTop250 - ' - Me.pnlTop250.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.pnlTop250.Controls.Add(Me.lblTop250) - Me.pnlTop250.Controls.Add(Me.pbTop250) - Me.pnlTop250.Location = New System.Drawing.Point(733, 27) - Me.pnlTop250.Name = "pnlTop250" - Me.pnlTop250.Size = New System.Drawing.Size(56, 48) - Me.pnlTop250.TabIndex = 15 - ' - 'lblTop250 - ' - Me.lblTop250.BackColor = System.Drawing.Color.Gainsboro - Me.lblTop250.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblTop250.ForeColor = System.Drawing.Color.Black - Me.lblTop250.Location = New System.Drawing.Point(1, 30) - Me.lblTop250.Name = "lblTop250" - Me.lblTop250.Size = New System.Drawing.Size(52, 17) - Me.lblTop250.TabIndex = 15 - Me.lblTop250.Text = "# 250" - Me.lblTop250.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'pbTop250 - ' - Me.pbTop250.Image = CType(resources.GetObject("pbTop250.Image"), System.Drawing.Image) - Me.pbTop250.Location = New System.Drawing.Point(1, 1) - Me.pbTop250.Name = "pbTop250" - Me.pbTop250.Size = New System.Drawing.Size(54, 30) - Me.pbTop250.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.pbTop250.TabIndex = 14 - Me.pbTop250.TabStop = False - ' - 'lblPlotHeader - ' - Me.lblPlotHeader.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblPlotHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.lblPlotHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblPlotHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblPlotHeader.ForeColor = System.Drawing.SystemColors.HighlightText - Me.lblPlotHeader.Location = New System.Drawing.Point(3, 282) - Me.lblPlotHeader.Name = "lblPlotHeader" - Me.lblPlotHeader.Size = New System.Drawing.Size(787, 17) - Me.lblPlotHeader.TabIndex = 6 - Me.lblPlotHeader.Text = "Plot" - Me.lblPlotHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'txtPlot - ' - Me.txtPlot.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.txtPlot.BackColor = System.Drawing.Color.Gainsboro - Me.txtPlot.BorderStyle = System.Windows.Forms.BorderStyle.None - Me.txtPlot.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.txtPlot.ForeColor = System.Drawing.Color.Black - Me.txtPlot.Location = New System.Drawing.Point(3, 303) - Me.txtPlot.Multiline = True - Me.txtPlot.Name = "txtPlot" - Me.txtPlot.ReadOnly = True - Me.txtPlot.ScrollBars = System.Windows.Forms.ScrollBars.Vertical - Me.txtPlot.Size = New System.Drawing.Size(787, 184) - Me.txtPlot.TabIndex = 7 - Me.txtPlot.TabStop = False - ' - 'btnDown - ' - Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnDown.BackColor = System.Drawing.SystemColors.Control - Me.btnDown.Location = New System.Drawing.Point(1069, 1) - Me.btnDown.Name = "btnDown" - Me.btnDown.Size = New System.Drawing.Size(30, 22) - Me.btnDown.TabIndex = 6 - Me.btnDown.TabStop = False - Me.btnDown.Text = "v" - Me.btnDown.TextAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnDown.UseVisualStyleBackColor = False - ' - 'btnUp - ' - Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.btnUp.BackColor = System.Drawing.SystemColors.Control - Me.btnUp.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.btnUp.Location = New System.Drawing.Point(1006, 1) - Me.btnUp.Name = "btnUp" - Me.btnUp.Size = New System.Drawing.Size(30, 22) - Me.btnUp.TabIndex = 1 - Me.btnUp.TabStop = False - Me.btnUp.Text = "^" - Me.btnUp.TextAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnUp.UseVisualStyleBackColor = False - ' - 'lblInfoPanelHeader - ' - Me.lblInfoPanelHeader.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.lblInfoPanelHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark - Me.lblInfoPanelHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.lblInfoPanelHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblInfoPanelHeader.ForeColor = System.Drawing.SystemColors.HighlightText - Me.lblInfoPanelHeader.Location = New System.Drawing.Point(3, 3) - Me.lblInfoPanelHeader.Name = "lblInfoPanelHeader" - Me.lblInfoPanelHeader.Size = New System.Drawing.Size(1101, 17) - Me.lblInfoPanelHeader.TabIndex = 0 - Me.lblInfoPanelHeader.Text = "Info" - Me.lblInfoPanelHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'pnlPoster - ' - Me.pnlPoster.BackColor = System.Drawing.Color.Gainsboro - Me.pnlPoster.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlPoster.Controls.Add(Me.pbPoster) - Me.pnlPoster.Location = New System.Drawing.Point(9, 112) - Me.pnlPoster.Name = "pnlPoster" - Me.pnlPoster.Size = New System.Drawing.Size(131, 169) - Me.pnlPoster.TabIndex = 2 - Me.pnlPoster.Visible = False - ' - 'pbPoster - ' - Me.pbPoster.BackColor = System.Drawing.SystemColors.Control - Me.pbPoster.Location = New System.Drawing.Point(4, 4) - Me.pbPoster.Name = "pbPoster" - Me.pbPoster.Size = New System.Drawing.Size(121, 159) - Me.pbPoster.TabIndex = 0 - Me.pbPoster.TabStop = False - ' - 'pbPosterCache - ' - Me.pbPosterCache.Location = New System.Drawing.Point(454, 107) - Me.pbPosterCache.Name = "pbPosterCache" - Me.pbPosterCache.Size = New System.Drawing.Size(115, 111) - Me.pbPosterCache.TabIndex = 12 - Me.pbPosterCache.TabStop = False - Me.pbPosterCache.Visible = False - ' - 'pnlMPAA - ' - Me.pnlMPAA.BackColor = System.Drawing.Color.Gainsboro - Me.pnlMPAA.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlMPAA.Controls.Add(Me.pbMPAA) - Me.pnlMPAA.Location = New System.Drawing.Point(4, 609) - Me.pnlMPAA.Name = "pnlMPAA" - Me.pnlMPAA.Size = New System.Drawing.Size(202, 45) - Me.pnlMPAA.TabIndex = 11 - Me.pnlMPAA.Visible = False - ' - 'pbMPAA - ' - Me.pbMPAA.Location = New System.Drawing.Point(1, 1) - Me.pbMPAA.Name = "pbMPAA" - Me.pbMPAA.Size = New System.Drawing.Size(249, 57) - Me.pbMPAA.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize - Me.pbMPAA.TabIndex = 13 - Me.pbMPAA.TabStop = False - ' - 'pbFanartCache - ' - Me.pbFanartCache.Location = New System.Drawing.Point(576, 107) - Me.pbFanartCache.Name = "pbFanartCache" - Me.pbFanartCache.Size = New System.Drawing.Size(115, 111) - Me.pbFanartCache.TabIndex = 3 - Me.pbFanartCache.TabStop = False - Me.pbFanartCache.Visible = False - ' - 'pbFanart - ' - Me.pbFanart.Anchor = System.Windows.Forms.AnchorStyles.Top - Me.pbFanart.BackColor = System.Drawing.Color.DimGray - Me.pbFanart.Location = New System.Drawing.Point(206, 99) - Me.pbFanart.Name = "pbFanart" - Me.pbFanart.Size = New System.Drawing.Size(696, 250) - Me.pbFanart.TabIndex = 1 - Me.pbFanart.TabStop = False - ' - 'tsMain - ' - Me.tsMain.BackColor = System.Drawing.SystemColors.Control - Me.tsMain.CanOverflow = False - Me.tsMain.GripMargin = New System.Windows.Forms.Padding(0) - Me.tsMain.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden - Me.tsMain.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.tsbAutoPilot, Me.tsbRefreshMedia, Me.tsbMediaCenters}) - Me.tsMain.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow - Me.tsMain.Location = New System.Drawing.Point(0, 0) - Me.tsMain.Name = "tsMain" - Me.tsMain.Padding = New System.Windows.Forms.Padding(0) - Me.tsMain.Size = New System.Drawing.Size(1109, 25) - Me.tsMain.Stretch = True - Me.tsMain.TabIndex = 6 - ' - 'tsbAutoPilot - ' - Me.tsbAutoPilot.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FullToolStripMenuItem, Me.UpdateOnlyToolStripMenuItem, Me.NewMoviesToolStripMenuItem, Me.MarkedMoviesToolStripMenuItem, Me.CurrentFilterToolStripMenuItem, Me.CustomUpdaterToolStripMenuItem}) - Me.tsbAutoPilot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.tsbAutoPilot.Image = CType(resources.GetObject("tsbAutoPilot.Image"), System.Drawing.Image) - Me.tsbAutoPilot.ImageTransparentColor = System.Drawing.Color.Magenta - Me.tsbAutoPilot.Name = "tsbAutoPilot" - Me.tsbAutoPilot.Size = New System.Drawing.Size(105, 22) - Me.tsbAutoPilot.Text = "Scrape Media" - ' - 'FullToolStripMenuItem - ' - Me.FullToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FullAutoToolStripMenuItem, Me.FullAskToolStripMenuItem, Me.FullSkipToolStripMenuItem}) - Me.FullToolStripMenuItem.Name = "FullToolStripMenuItem" - Me.FullToolStripMenuItem.Size = New System.Drawing.Size(183, 22) - Me.FullToolStripMenuItem.Text = "All Movies" - ' - 'FullAutoToolStripMenuItem - ' - Me.FullAutoToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuAllAutoAll, Me.mnuAllAutoNfo, Me.mnuAllAutoPoster, Me.mnuAllAutoFanart, Me.mnuAllAutoExtra, Me.mnuAllAutoTrailer, Me.mnuAllAutoMI}) - Me.FullAutoToolStripMenuItem.Name = "FullAutoToolStripMenuItem" - Me.FullAutoToolStripMenuItem.Size = New System.Drawing.Size(264, 22) - Me.FullAutoToolStripMenuItem.Text = "Automatic (Force Best Match)" - ' - 'mnuAllAutoAll - ' - Me.mnuAllAutoAll.Name = "mnuAllAutoAll" - Me.mnuAllAutoAll.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAutoAll.Text = "All Items" - ' - 'mnuAllAutoNfo - ' - Me.mnuAllAutoNfo.Name = "mnuAllAutoNfo" - Me.mnuAllAutoNfo.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAutoNfo.Text = "NFO Only" - ' - 'mnuAllAutoPoster - ' - Me.mnuAllAutoPoster.Name = "mnuAllAutoPoster" - Me.mnuAllAutoPoster.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAutoPoster.Text = "Poster Only" - ' - 'mnuAllAutoFanart - ' - Me.mnuAllAutoFanart.Name = "mnuAllAutoFanart" - Me.mnuAllAutoFanart.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAutoFanart.Text = "Fanart Only" - ' - 'mnuAllAutoExtra - ' - Me.mnuAllAutoExtra.Name = "mnuAllAutoExtra" - Me.mnuAllAutoExtra.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAutoExtra.Text = "Extrathumbs Only" - ' - 'mnuAllAutoTrailer - ' - Me.mnuAllAutoTrailer.Name = "mnuAllAutoTrailer" - Me.mnuAllAutoTrailer.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAutoTrailer.Text = "Trailer Only" - ' - 'mnuAllAutoMI - ' - Me.mnuAllAutoMI.Name = "mnuAllAutoMI" - Me.mnuAllAutoMI.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAutoMI.Text = "Meta Data Only" - ' - 'FullAskToolStripMenuItem - ' - Me.FullAskToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuAllAskAll, Me.mnuAllAskNfo, Me.mnuAllAskPoster, Me.mnuAllAskFanart, Me.mnuAllAskExtra, Me.mnuAllAskTrailer, Me.mnuAllAskMI}) - Me.FullAskToolStripMenuItem.Name = "FullAskToolStripMenuItem" - Me.FullAskToolStripMenuItem.Size = New System.Drawing.Size(264, 22) - Me.FullAskToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" - ' - 'mnuAllAskAll - ' - Me.mnuAllAskAll.Name = "mnuAllAskAll" - Me.mnuAllAskAll.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAskAll.Text = "All Items" - ' - 'mnuAllAskNfo - ' - Me.mnuAllAskNfo.Name = "mnuAllAskNfo" - Me.mnuAllAskNfo.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAskNfo.Text = "NFO Only" - ' - 'mnuAllAskPoster - ' - Me.mnuAllAskPoster.Name = "mnuAllAskPoster" - Me.mnuAllAskPoster.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAskPoster.Text = "Poster Only" - ' - 'mnuAllAskFanart - ' - Me.mnuAllAskFanart.Name = "mnuAllAskFanart" - Me.mnuAllAskFanart.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAskFanart.Text = "Fanart Only" - ' - 'mnuAllAskExtra - ' - Me.mnuAllAskExtra.Name = "mnuAllAskExtra" - Me.mnuAllAskExtra.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAskExtra.Text = "Extrathumbs Only" - ' - 'mnuAllAskTrailer - ' - Me.mnuAllAskTrailer.Name = "mnuAllAskTrailer" - Me.mnuAllAskTrailer.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAskTrailer.Text = "Trailer Only" - ' - 'mnuAllAskMI - ' - Me.mnuAllAskMI.Name = "mnuAllAskMI" - Me.mnuAllAskMI.Size = New System.Drawing.Size(165, 22) - Me.mnuAllAskMI.Text = "Meta Data Only" - ' - 'FullSkipToolStripMenuItem - ' - Me.FullSkipToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuAllSkipAll}) - Me.FullSkipToolStripMenuItem.Name = "FullSkipToolStripMenuItem" - Me.FullSkipToolStripMenuItem.Size = New System.Drawing.Size(264, 22) - Me.FullSkipToolStripMenuItem.Text = "Skip (Do Nothing If No Exact Match)" - ' - 'mnuAllSkipAll - ' - Me.mnuAllSkipAll.Name = "mnuAllSkipAll" - Me.mnuAllSkipAll.Size = New System.Drawing.Size(117, 22) - Me.mnuAllSkipAll.Text = "All Items" - ' - 'UpdateOnlyToolStripMenuItem - ' - Me.UpdateOnlyToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.UpdateAutoToolStripMenuItem, Me.UpdateAskToolStripMenuItem}) - Me.UpdateOnlyToolStripMenuItem.Name = "UpdateOnlyToolStripMenuItem" - Me.UpdateOnlyToolStripMenuItem.Size = New System.Drawing.Size(183, 22) - Me.UpdateOnlyToolStripMenuItem.Text = "Movies Missing Items" - ' - 'UpdateAutoToolStripMenuItem - ' - Me.UpdateAutoToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuMissAutoAll, Me.mnuMissAutoNfo, Me.mnuMissAutoPoster, Me.mnuMissAutoFanart, Me.mnuMissAutoExtra, Me.mnuMissAutoTrailer}) - Me.UpdateAutoToolStripMenuItem.Name = "UpdateAutoToolStripMenuItem" - Me.UpdateAutoToolStripMenuItem.Size = New System.Drawing.Size(264, 22) - Me.UpdateAutoToolStripMenuItem.Text = "Automatic (Force Best Match)" - ' - 'mnuMissAutoAll - ' - Me.mnuMissAutoAll.Name = "mnuMissAutoAll" - Me.mnuMissAutoAll.Size = New System.Drawing.Size(165, 22) - Me.mnuMissAutoAll.Text = "All Items" - ' - 'mnuMissAutoNfo - ' - Me.mnuMissAutoNfo.Name = "mnuMissAutoNfo" - Me.mnuMissAutoNfo.Size = New System.Drawing.Size(165, 22) - Me.mnuMissAutoNfo.Text = "NFO Only" - ' - 'mnuMissAutoPoster - ' - Me.mnuMissAutoPoster.Name = "mnuMissAutoPoster" - Me.mnuMissAutoPoster.Size = New System.Drawing.Size(165, 22) - Me.mnuMissAutoPoster.Text = "Poster Only" - ' - 'mnuMissAutoFanart - ' - Me.mnuMissAutoFanart.Name = "mnuMissAutoFanart" - Me.mnuMissAutoFanart.Size = New System.Drawing.Size(165, 22) - Me.mnuMissAutoFanart.Text = "Fanart Only" - ' - 'mnuMissAutoExtra - ' - Me.mnuMissAutoExtra.Name = "mnuMissAutoExtra" - Me.mnuMissAutoExtra.Size = New System.Drawing.Size(165, 22) - Me.mnuMissAutoExtra.Text = "Extrathumbs Only" - ' - 'mnuMissAutoTrailer - ' - Me.mnuMissAutoTrailer.Name = "mnuMissAutoTrailer" - Me.mnuMissAutoTrailer.Size = New System.Drawing.Size(165, 22) - Me.mnuMissAutoTrailer.Text = "Trailer Only" - ' - 'UpdateAskToolStripMenuItem - ' - Me.UpdateAskToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuMissAskAll, Me.mnuMissAskNfo, Me.mnuMissAskPoster, Me.mnuMissAskFanart, Me.mnuMissAskExtra, Me.mnuMissAskTrailer}) - Me.UpdateAskToolStripMenuItem.Name = "UpdateAskToolStripMenuItem" - Me.UpdateAskToolStripMenuItem.Size = New System.Drawing.Size(264, 22) - Me.UpdateAskToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" - ' - 'mnuMissAskAll - ' - Me.mnuMissAskAll.Name = "mnuMissAskAll" - Me.mnuMissAskAll.Size = New System.Drawing.Size(165, 22) - Me.mnuMissAskAll.Text = "All Items" - ' - 'mnuMissAskNfo - ' - Me.mnuMissAskNfo.Name = "mnuMissAskNfo" - Me.mnuMissAskNfo.Size = New System.Drawing.Size(165, 22) - Me.mnuMissAskNfo.Text = "NFO Only" - ' - 'mnuMissAskPoster - ' - Me.mnuMissAskPoster.Name = "mnuMissAskPoster" - Me.mnuMissAskPoster.Size = New System.Drawing.Size(165, 22) - Me.mnuMissAskPoster.Text = "Poster Only" - ' - 'mnuMissAskFanart - ' - Me.mnuMissAskFanart.Name = "mnuMissAskFanart" - Me.mnuMissAskFanart.Size = New System.Drawing.Size(165, 22) - Me.mnuMissAskFanart.Text = "Fanart Only" - ' - 'mnuMissAskExtra - ' - Me.mnuMissAskExtra.Name = "mnuMissAskExtra" - Me.mnuMissAskExtra.Size = New System.Drawing.Size(165, 22) - Me.mnuMissAskExtra.Text = "Extrathumbs Only" - ' - 'mnuMissAskTrailer - ' - Me.mnuMissAskTrailer.Name = "mnuMissAskTrailer" - Me.mnuMissAskTrailer.Size = New System.Drawing.Size(165, 22) - Me.mnuMissAskTrailer.Text = "Trailer Only" - ' - 'NewMoviesToolStripMenuItem - ' - Me.NewMoviesToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.AutomaticForceBestMatchToolStripMenuItem, Me.AskRequireInputToolStripMenuItem}) - Me.NewMoviesToolStripMenuItem.Name = "NewMoviesToolStripMenuItem" - Me.NewMoviesToolStripMenuItem.Size = New System.Drawing.Size(183, 22) - Me.NewMoviesToolStripMenuItem.Text = "New Movies" - ' - 'AutomaticForceBestMatchToolStripMenuItem - ' - Me.AutomaticForceBestMatchToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuNewAutoAll, Me.mnuNewAutoNfo, Me.mnuNewAutoPoster, Me.mnuNewAutoFanart, Me.mnuNewAutoExtra, Me.mnuNewAutoTrailer, Me.mnuNewAutoMI}) - Me.AutomaticForceBestMatchToolStripMenuItem.Name = "AutomaticForceBestMatchToolStripMenuItem" - Me.AutomaticForceBestMatchToolStripMenuItem.Size = New System.Drawing.Size(264, 22) - Me.AutomaticForceBestMatchToolStripMenuItem.Text = "Automatic (Force Best Match)" - ' - 'mnuNewAutoAll - ' - Me.mnuNewAutoAll.Name = "mnuNewAutoAll" - Me.mnuNewAutoAll.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAutoAll.Text = "All Items" - ' - 'mnuNewAutoNfo - ' - Me.mnuNewAutoNfo.Name = "mnuNewAutoNfo" - Me.mnuNewAutoNfo.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAutoNfo.Text = "NFO Only" - ' - 'mnuNewAutoPoster - ' - Me.mnuNewAutoPoster.Name = "mnuNewAutoPoster" - Me.mnuNewAutoPoster.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAutoPoster.Text = "Poster Only" - ' - 'mnuNewAutoFanart - ' - Me.mnuNewAutoFanart.Name = "mnuNewAutoFanart" - Me.mnuNewAutoFanart.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAutoFanart.Text = "Fanart Only" - ' - 'mnuNewAutoExtra - ' - Me.mnuNewAutoExtra.Name = "mnuNewAutoExtra" - Me.mnuNewAutoExtra.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAutoExtra.Text = "Extrathumbs Only" - ' - 'mnuNewAutoTrailer - ' - Me.mnuNewAutoTrailer.Name = "mnuNewAutoTrailer" - Me.mnuNewAutoTrailer.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAutoTrailer.Text = "Trailer Only" - ' - 'mnuNewAutoMI - ' - Me.mnuNewAutoMI.Name = "mnuNewAutoMI" - Me.mnuNewAutoMI.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAutoMI.Text = "Meta Data Only" - ' - 'AskRequireInputToolStripMenuItem - ' - Me.AskRequireInputToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuNewAskAll, Me.mnuNewAskNfo, Me.mnuNewAskPoster, Me.mnuNewAskFanart, Me.mnuNewAskExtra, Me.mnuNewAskTrailer, Me.mnuNewAskMI}) - Me.AskRequireInputToolStripMenuItem.Name = "AskRequireInputToolStripMenuItem" - Me.AskRequireInputToolStripMenuItem.Size = New System.Drawing.Size(264, 22) - Me.AskRequireInputToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" - ' - 'mnuNewAskAll - ' - Me.mnuNewAskAll.Name = "mnuNewAskAll" - Me.mnuNewAskAll.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAskAll.Text = "All Items" - ' - 'mnuNewAskNfo - ' - Me.mnuNewAskNfo.Name = "mnuNewAskNfo" - Me.mnuNewAskNfo.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAskNfo.Text = "NFO Only" - ' - 'mnuNewAskPoster - ' - Me.mnuNewAskPoster.Name = "mnuNewAskPoster" - Me.mnuNewAskPoster.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAskPoster.Text = "Poster Only" - ' - 'mnuNewAskFanart - ' - Me.mnuNewAskFanart.Name = "mnuNewAskFanart" - Me.mnuNewAskFanart.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAskFanart.Text = "Fanart Only" - ' - 'mnuNewAskExtra - ' - Me.mnuNewAskExtra.Name = "mnuNewAskExtra" - Me.mnuNewAskExtra.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAskExtra.Text = "Extrathumbs Only" - ' - 'mnuNewAskTrailer - ' - Me.mnuNewAskTrailer.Name = "mnuNewAskTrailer" - Me.mnuNewAskTrailer.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAskTrailer.Text = "Trailer Only" - ' - 'mnuNewAskMI - ' - Me.mnuNewAskMI.Name = "mnuNewAskMI" - Me.mnuNewAskMI.Size = New System.Drawing.Size(165, 22) - Me.mnuNewAskMI.Text = "Meta Data Only" - ' - 'MarkedMoviesToolStripMenuItem - ' - Me.MarkedMoviesToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.AutomaticForceBestMatchToolStripMenuItem1, Me.AskRequireInputIfNoExactMatchToolStripMenuItem}) - Me.MarkedMoviesToolStripMenuItem.Name = "MarkedMoviesToolStripMenuItem" - Me.MarkedMoviesToolStripMenuItem.Size = New System.Drawing.Size(183, 22) - Me.MarkedMoviesToolStripMenuItem.Text = "Marked Movies" - ' - 'AutomaticForceBestMatchToolStripMenuItem1 - ' - Me.AutomaticForceBestMatchToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuMarkAutoAll, Me.mnuMarkAutoNfo, Me.mnuMarkAutoPoster, Me.mnuMarkAutoFanart, Me.mnuMarkAutoExtra, Me.mnuMarkAutoTrailer, Me.mnuMarkAutoMI}) - Me.AutomaticForceBestMatchToolStripMenuItem1.Name = "AutomaticForceBestMatchToolStripMenuItem1" - Me.AutomaticForceBestMatchToolStripMenuItem1.Size = New System.Drawing.Size(264, 22) - Me.AutomaticForceBestMatchToolStripMenuItem1.Text = "Automatic (Force Best Match)" - ' - 'mnuMarkAutoAll - ' - Me.mnuMarkAutoAll.Name = "mnuMarkAutoAll" - Me.mnuMarkAutoAll.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAutoAll.Text = "All Items" - ' - 'mnuMarkAutoNfo - ' - Me.mnuMarkAutoNfo.Name = "mnuMarkAutoNfo" - Me.mnuMarkAutoNfo.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAutoNfo.Text = "NFO Only" - ' - 'mnuMarkAutoPoster - ' - Me.mnuMarkAutoPoster.Name = "mnuMarkAutoPoster" - Me.mnuMarkAutoPoster.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAutoPoster.Text = "Poster Only" - ' - 'mnuMarkAutoFanart - ' - Me.mnuMarkAutoFanart.Name = "mnuMarkAutoFanart" - Me.mnuMarkAutoFanart.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAutoFanart.Text = "Fanart Only" - ' - 'mnuMarkAutoExtra - ' - Me.mnuMarkAutoExtra.Name = "mnuMarkAutoExtra" - Me.mnuMarkAutoExtra.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAutoExtra.Text = "Extrathumbs Only" - ' - 'mnuMarkAutoTrailer - ' - Me.mnuMarkAutoTrailer.Name = "mnuMarkAutoTrailer" - Me.mnuMarkAutoTrailer.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAutoTrailer.Text = "Trailer Only" - ' - 'mnuMarkAutoMI - ' - Me.mnuMarkAutoMI.Name = "mnuMarkAutoMI" - Me.mnuMarkAutoMI.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAutoMI.Text = "Meta Data Only" - ' - 'AskRequireInputIfNoExactMatchToolStripMenuItem - ' - Me.AskRequireInputIfNoExactMatchToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuMarkAskAll, Me.mnuMarkAskNfo, Me.mnuMarkAskPoster, Me.mnuMarkAskFanart, Me.mnuMarkAskExtra, Me.mnuMarkAskTrailer, Me.mnuMarkAskMI}) - Me.AskRequireInputIfNoExactMatchToolStripMenuItem.Name = "AskRequireInputIfNoExactMatchToolStripMenuItem" - Me.AskRequireInputIfNoExactMatchToolStripMenuItem.Size = New System.Drawing.Size(264, 22) - Me.AskRequireInputIfNoExactMatchToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" - ' - 'mnuMarkAskAll - ' - Me.mnuMarkAskAll.Name = "mnuMarkAskAll" - Me.mnuMarkAskAll.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAskAll.Text = "All Items" - ' - 'mnuMarkAskNfo - ' - Me.mnuMarkAskNfo.Name = "mnuMarkAskNfo" - Me.mnuMarkAskNfo.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAskNfo.Text = "NFO Only" - ' - 'mnuMarkAskPoster - ' - Me.mnuMarkAskPoster.Name = "mnuMarkAskPoster" - Me.mnuMarkAskPoster.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAskPoster.Text = "Poster Only" - ' - 'mnuMarkAskFanart - ' - Me.mnuMarkAskFanart.Name = "mnuMarkAskFanart" - Me.mnuMarkAskFanart.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAskFanart.Text = "Fanart Only" - ' - 'mnuMarkAskExtra - ' - Me.mnuMarkAskExtra.Name = "mnuMarkAskExtra" - Me.mnuMarkAskExtra.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAskExtra.Text = "Extrathumbs Only" - ' - 'mnuMarkAskTrailer - ' - Me.mnuMarkAskTrailer.Name = "mnuMarkAskTrailer" - Me.mnuMarkAskTrailer.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAskTrailer.Text = "Trailer Only" - ' - 'mnuMarkAskMI - ' - Me.mnuMarkAskMI.Name = "mnuMarkAskMI" - Me.mnuMarkAskMI.Size = New System.Drawing.Size(165, 22) - Me.mnuMarkAskMI.Text = "Meta Data Only" - ' - 'CurrentFilterToolStripMenuItem - ' - Me.CurrentFilterToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.AutomaticForceBestMatchToolStripMenuItem2, Me.AskRequireInputIfNoExactMatchToolStripMenuItem1}) - Me.CurrentFilterToolStripMenuItem.Name = "CurrentFilterToolStripMenuItem" - Me.CurrentFilterToolStripMenuItem.Size = New System.Drawing.Size(183, 22) - Me.CurrentFilterToolStripMenuItem.Text = "Current Filter" - ' - 'AutomaticForceBestMatchToolStripMenuItem2 - ' - Me.AutomaticForceBestMatchToolStripMenuItem2.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuFilterAutoAll, Me.mnuFilterAutoNfo, Me.mnuFilterAutoPoster, Me.mnuFilterAutoFanart, Me.mnuFilterAutoExtra, Me.mnuFilterAutoTrailer, Me.mnuFilterAutoMI}) - Me.AutomaticForceBestMatchToolStripMenuItem2.Name = "AutomaticForceBestMatchToolStripMenuItem2" - Me.AutomaticForceBestMatchToolStripMenuItem2.Size = New System.Drawing.Size(264, 22) - Me.AutomaticForceBestMatchToolStripMenuItem2.Text = "Automatic (Force Best Match)" - ' - 'mnuFilterAutoAll - ' - Me.mnuFilterAutoAll.Name = "mnuFilterAutoAll" - Me.mnuFilterAutoAll.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAutoAll.Text = "All Items" - ' - 'mnuFilterAutoNfo - ' - Me.mnuFilterAutoNfo.Name = "mnuFilterAutoNfo" - Me.mnuFilterAutoNfo.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAutoNfo.Text = "NFO Only" - ' - 'mnuFilterAutoPoster - ' - Me.mnuFilterAutoPoster.Name = "mnuFilterAutoPoster" - Me.mnuFilterAutoPoster.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAutoPoster.Text = "Poster Only" - ' - 'mnuFilterAutoFanart - ' - Me.mnuFilterAutoFanart.Name = "mnuFilterAutoFanart" - Me.mnuFilterAutoFanart.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAutoFanart.Text = "Fanart Only" - ' - 'mnuFilterAutoExtra - ' - Me.mnuFilterAutoExtra.Name = "mnuFilterAutoExtra" - Me.mnuFilterAutoExtra.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAutoExtra.Text = "Extrathumbs Only" - ' - 'mnuFilterAutoTrailer - ' - Me.mnuFilterAutoTrailer.Name = "mnuFilterAutoTrailer" - Me.mnuFilterAutoTrailer.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAutoTrailer.Text = "Trailer Only" - ' - 'mnuFilterAutoMI - ' - Me.mnuFilterAutoMI.Name = "mnuFilterAutoMI" - Me.mnuFilterAutoMI.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAutoMI.Text = "Meta Data Only" - ' - 'AskRequireInputIfNoExactMatchToolStripMenuItem1 - ' - Me.AskRequireInputIfNoExactMatchToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuFilterAskAll, Me.mnuFilterAskNfo, Me.mnuFilterAskPoster, Me.mnuFilterAskFanart, Me.mnuFilterAskExtra, Me.mnuFilterAskTrailer, Me.mnuFilterAskMI}) - Me.AskRequireInputIfNoExactMatchToolStripMenuItem1.Name = "AskRequireInputIfNoExactMatchToolStripMenuItem1" - Me.AskRequireInputIfNoExactMatchToolStripMenuItem1.Size = New System.Drawing.Size(264, 22) - Me.AskRequireInputIfNoExactMatchToolStripMenuItem1.Text = "Ask (Require Input If No Exact Match)" - ' - 'mnuFilterAskAll - ' - Me.mnuFilterAskAll.Name = "mnuFilterAskAll" - Me.mnuFilterAskAll.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAskAll.Text = "All Items" - ' - 'mnuFilterAskNfo - ' - Me.mnuFilterAskNfo.Name = "mnuFilterAskNfo" - Me.mnuFilterAskNfo.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAskNfo.Text = "NFO Only" - ' - 'mnuFilterAskPoster - ' - Me.mnuFilterAskPoster.Name = "mnuFilterAskPoster" - Me.mnuFilterAskPoster.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAskPoster.Text = "Poster Only" - ' - 'mnuFilterAskFanart - ' - Me.mnuFilterAskFanart.Name = "mnuFilterAskFanart" - Me.mnuFilterAskFanart.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAskFanart.Text = "Fanart Only" - ' - 'mnuFilterAskExtra - ' - Me.mnuFilterAskExtra.Name = "mnuFilterAskExtra" - Me.mnuFilterAskExtra.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAskExtra.Text = "Extrathumbs Only" - ' - 'mnuFilterAskTrailer - ' - Me.mnuFilterAskTrailer.Name = "mnuFilterAskTrailer" - Me.mnuFilterAskTrailer.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAskTrailer.Text = "Trailer Only" - ' - 'mnuFilterAskMI - ' - Me.mnuFilterAskMI.Name = "mnuFilterAskMI" - Me.mnuFilterAskMI.Size = New System.Drawing.Size(165, 22) - Me.mnuFilterAskMI.Text = "Meta Data Only" - ' - 'CustomUpdaterToolStripMenuItem - ' - Me.CustomUpdaterToolStripMenuItem.Name = "CustomUpdaterToolStripMenuItem" - Me.CustomUpdaterToolStripMenuItem.Size = New System.Drawing.Size(183, 22) - Me.CustomUpdaterToolStripMenuItem.Text = "Custom Scraper..." - ' - 'tsbRefreshMedia - ' - Me.tsbRefreshMedia.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuMoviesUpdate, Me.mnuTVShowUpdate}) - Me.tsbRefreshMedia.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.tsbRefreshMedia.Image = CType(resources.GetObject("tsbRefreshMedia.Image"), System.Drawing.Image) - Me.tsbRefreshMedia.ImageTransparentColor = System.Drawing.Color.Magenta - Me.tsbRefreshMedia.Name = "tsbRefreshMedia" - Me.tsbRefreshMedia.Size = New System.Drawing.Size(114, 22) - Me.tsbRefreshMedia.Text = "Update Library" - ' - 'mnuMoviesUpdate - ' - Me.mnuMoviesUpdate.Name = "mnuMoviesUpdate" - Me.mnuMoviesUpdate.Size = New System.Drawing.Size(123, 22) - Me.mnuMoviesUpdate.Text = "Movies" - ' - 'mnuTVShowUpdate - ' - Me.mnuTVShowUpdate.Name = "mnuTVShowUpdate" - Me.mnuTVShowUpdate.Size = New System.Drawing.Size(123, 22) - Me.mnuTVShowUpdate.Text = "TV Shows" - ' - 'tsbMediaCenters - ' - Me.tsbMediaCenters.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right - Me.tsbMediaCenters.Enabled = False - Me.tsbMediaCenters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) - Me.tsbMediaCenters.Image = CType(resources.GetObject("tsbMediaCenters.Image"), System.Drawing.Image) - Me.tsbMediaCenters.ImageTransparentColor = System.Drawing.Color.Magenta - Me.tsbMediaCenters.Name = "tsbMediaCenters" - Me.tsbMediaCenters.Size = New System.Drawing.Size(113, 22) - Me.tsbMediaCenters.Text = "Media Centers" - Me.tsbMediaCenters.Visible = False - ' - 'ilColumnIcons - ' - Me.ilColumnIcons.ImageStream = CType(resources.GetObject("ilColumnIcons.ImageStream"), System.Windows.Forms.ImageListStreamer) - Me.ilColumnIcons.TransparentColor = System.Drawing.Color.Transparent - Me.ilColumnIcons.Images.SetKeyName(0, "new_page.png") - Me.ilColumnIcons.Images.SetKeyName(1, "image.png") - Me.ilColumnIcons.Images.SetKeyName(2, "info.png") - Me.ilColumnIcons.Images.SetKeyName(3, "favorite_film.png") - Me.ilColumnIcons.Images.SetKeyName(4, "comment.png") - Me.ilColumnIcons.Images.SetKeyName(5, "folder_full.png") - Me.ilColumnIcons.Images.SetKeyName(6, "listcheck.png") - Me.ilColumnIcons.Images.SetKeyName(7, "listdotgrey.png") - ' - 'tmrWait - ' - Me.tmrWait.Interval = 250 - ' - 'tmrLoad - ' - ' - 'tmrSearchWait - ' - Me.tmrSearchWait.Interval = 250 - ' - 'tmrSearch - ' - Me.tmrSearch.Interval = 250 - ' - 'tmrFilterAni - ' - Me.tmrFilterAni.Interval = 1 - ' - 'ToolTips - ' - Me.ToolTips.AutoPopDelay = 15000 - Me.ToolTips.InitialDelay = 500 - Me.ToolTips.ReshowDelay = 100 - ' - 'tmrWaitShow - ' - Me.tmrWaitShow.Interval = 250 - ' - 'tmrLoadShow - ' - ' - 'tmrWaitSeason - ' - Me.tmrWaitSeason.Interval = 250 - ' - 'tmrLoadSeason - ' - ' - 'tmrWaitEp - ' - Me.tmrWaitEp.Interval = 250 - ' - 'tmrLoadEp - ' - ' - 'cmnuTrayIcon - ' - Me.cmnuTrayIcon.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuTrayIconTitle, Me.ToolStripSeparator21, Me.cmnuTrayIconUpdateMedia, Me.cmnuTrayIconScrapeMedia, Me.cmnuTrayIconMediaCenters, Me.ToolStripSeparator23, Me.cmnuTrayIconTools, Me.ToolStripSeparator22, Me.cmnuTrayIconSettings, Me.ToolStripSeparator13, Me.cmnuTrayIconExit}) - Me.cmnuTrayIcon.Name = "cmnuTrayIcon" - Me.cmnuTrayIcon.Size = New System.Drawing.Size(195, 182) - Me.cmnuTrayIcon.Text = "Ember Media Manager" - ' - 'cmnuTrayIconTitle - ' - Me.cmnuTrayIconTitle.Enabled = False - Me.cmnuTrayIconTitle.Image = CType(resources.GetObject("cmnuTrayIconTitle.Image"), System.Drawing.Image) - Me.cmnuTrayIconTitle.Name = "cmnuTrayIconTitle" - Me.cmnuTrayIconTitle.Size = New System.Drawing.Size(194, 22) - Me.cmnuTrayIconTitle.Text = "Ember Media Manager" - ' - 'ToolStripSeparator21 - ' - Me.ToolStripSeparator21.Name = "ToolStripSeparator21" - Me.ToolStripSeparator21.Size = New System.Drawing.Size(191, 6) - ' - 'cmnuTrayIconUpdateMedia - ' - Me.cmnuTrayIconUpdateMedia.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuTrayIconUpdateMovies, Me.cmnuTrayIconUpdateTV}) - Me.cmnuTrayIconUpdateMedia.Image = CType(resources.GetObject("cmnuTrayIconUpdateMedia.Image"), System.Drawing.Image) - Me.cmnuTrayIconUpdateMedia.Name = "cmnuTrayIconUpdateMedia" - Me.cmnuTrayIconUpdateMedia.Size = New System.Drawing.Size(194, 22) - Me.cmnuTrayIconUpdateMedia.Text = "Update Media" - ' - 'cmnuTrayIconUpdateMovies - ' - Me.cmnuTrayIconUpdateMovies.Name = "cmnuTrayIconUpdateMovies" - Me.cmnuTrayIconUpdateMovies.Size = New System.Drawing.Size(125, 22) - Me.cmnuTrayIconUpdateMovies.Text = "Movies" - ' - 'cmnuTrayIconUpdateTV - ' - Me.cmnuTrayIconUpdateTV.Name = "cmnuTrayIconUpdateTV" - Me.cmnuTrayIconUpdateTV.Size = New System.Drawing.Size(125, 22) - Me.cmnuTrayIconUpdateTV.Text = "TV Shows" - ' - 'cmnuTrayIconScrapeMedia - ' - Me.cmnuTrayIconScrapeMedia.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TrayFullToolStripMenuItem, Me.TrayUpdateOnlyToolStripMenuItem, Me.TrayNewMoviesToolStripMenuItem, Me.TrayMarkedMoviesToolStripMenuItem, Me.TrayCurrentFilterToolStripMenuItem, Me.TrayCustomUpdaterToolStripMenuItem}) - Me.cmnuTrayIconScrapeMedia.Image = CType(resources.GetObject("cmnuTrayIconScrapeMedia.Image"), System.Drawing.Image) - Me.cmnuTrayIconScrapeMedia.Name = "cmnuTrayIconScrapeMedia" - Me.cmnuTrayIconScrapeMedia.Size = New System.Drawing.Size(194, 22) - Me.cmnuTrayIconScrapeMedia.Text = "Scrape Media" - ' - 'TrayFullToolStripMenuItem - ' - Me.TrayFullToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TrayFullAutoToolStripMenuItem, Me.TrayFullAskToolStripMenuItem}) - Me.TrayFullToolStripMenuItem.Name = "TrayFullToolStripMenuItem" - Me.TrayFullToolStripMenuItem.Size = New System.Drawing.Size(188, 22) - Me.TrayFullToolStripMenuItem.Text = "All Movies" - ' - 'TrayFullAutoToolStripMenuItem - ' - Me.TrayFullAutoToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayAllAutoAll, Me.mnuTrayAllAutoNfo, Me.mnuTrayAllAutoPoster, Me.mnuTrayAllAutoFanart, Me.mnuTrayAllAutoExtra, Me.mnuTrayAllAutoTrailer, Me.mnuTrayAllAutoMI}) - Me.TrayFullAutoToolStripMenuItem.Name = "TrayFullAutoToolStripMenuItem" - Me.TrayFullAutoToolStripMenuItem.Size = New System.Drawing.Size(271, 22) - Me.TrayFullAutoToolStripMenuItem.Text = "Automatic (Force Best Match)" - ' - 'mnuTrayAllAutoAll - ' - Me.mnuTrayAllAutoAll.Name = "mnuTrayAllAutoAll" - Me.mnuTrayAllAutoAll.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAutoAll.Text = "All Items" - ' - 'mnuTrayAllAutoNfo - ' - Me.mnuTrayAllAutoNfo.Name = "mnuTrayAllAutoNfo" - Me.mnuTrayAllAutoNfo.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAutoNfo.Text = "NFO Only" - ' - 'mnuTrayAllAutoPoster - ' - Me.mnuTrayAllAutoPoster.Name = "mnuTrayAllAutoPoster" - Me.mnuTrayAllAutoPoster.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAutoPoster.Text = "Poster Only" - ' - 'mnuTrayAllAutoFanart - ' - Me.mnuTrayAllAutoFanart.Name = "mnuTrayAllAutoFanart" - Me.mnuTrayAllAutoFanart.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAutoFanart.Text = "Fanart Only" - ' - 'mnuTrayAllAutoExtra - ' - Me.mnuTrayAllAutoExtra.Name = "mnuTrayAllAutoExtra" - Me.mnuTrayAllAutoExtra.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAutoExtra.Text = "Extrathumbs Only" - ' - 'mnuTrayAllAutoTrailer - ' - Me.mnuTrayAllAutoTrailer.Name = "mnuTrayAllAutoTrailer" - Me.mnuTrayAllAutoTrailer.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAutoTrailer.Text = "Trailer Only" - ' - 'mnuTrayAllAutoMI - ' - Me.mnuTrayAllAutoMI.Name = "mnuTrayAllAutoMI" - Me.mnuTrayAllAutoMI.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAutoMI.Text = "Meta Data Only" - ' - 'TrayFullAskToolStripMenuItem - ' - Me.TrayFullAskToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayAllAskAll, Me.mnuTrayAllAskNfo, Me.mnuTrayAllAskPoster, Me.mnuTrayAllAskFanart, Me.mnuTrayAllAskExtra, Me.mnuTrayAllAskTrailer, Me.mnuTrayAllAskMI}) - Me.TrayFullAskToolStripMenuItem.Name = "TrayFullAskToolStripMenuItem" - Me.TrayFullAskToolStripMenuItem.Size = New System.Drawing.Size(271, 22) - Me.TrayFullAskToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" - ' - 'mnuTrayAllAskAll - ' - Me.mnuTrayAllAskAll.Name = "mnuTrayAllAskAll" - Me.mnuTrayAllAskAll.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAskAll.Text = "All Items" - ' - 'mnuTrayAllAskNfo - ' - Me.mnuTrayAllAskNfo.Name = "mnuTrayAllAskNfo" - Me.mnuTrayAllAskNfo.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAskNfo.Text = "NFO Only" - ' - 'mnuTrayAllAskPoster - ' - Me.mnuTrayAllAskPoster.Name = "mnuTrayAllAskPoster" - Me.mnuTrayAllAskPoster.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAskPoster.Text = "Poster Only" - ' - 'mnuTrayAllAskFanart - ' - Me.mnuTrayAllAskFanart.Name = "mnuTrayAllAskFanart" - Me.mnuTrayAllAskFanart.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAskFanart.Text = "Fanart Only" - ' - 'mnuTrayAllAskExtra - ' - Me.mnuTrayAllAskExtra.Name = "mnuTrayAllAskExtra" - Me.mnuTrayAllAskExtra.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAskExtra.Text = "Extrathumbs Only" - ' - 'mnuTrayAllAskTrailer - ' - Me.mnuTrayAllAskTrailer.Name = "mnuTrayAllAskTrailer" - Me.mnuTrayAllAskTrailer.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAskTrailer.Text = "Trailer Only" - ' - 'mnuTrayAllAskMI - ' - Me.mnuTrayAllAskMI.Name = "mnuTrayAllAskMI" - Me.mnuTrayAllAskMI.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayAllAskMI.Text = "Meta Data Only" - ' - 'TrayUpdateOnlyToolStripMenuItem - ' - Me.TrayUpdateOnlyToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TrayUpdateAutoToolStripMenuItem, Me.TrayUpdateAskToolStripMenuItem}) - Me.TrayUpdateOnlyToolStripMenuItem.Name = "TrayUpdateOnlyToolStripMenuItem" - Me.TrayUpdateOnlyToolStripMenuItem.Size = New System.Drawing.Size(188, 22) - Me.TrayUpdateOnlyToolStripMenuItem.Text = "Movies Missing Items" - ' - 'TrayUpdateAutoToolStripMenuItem - ' - Me.TrayUpdateAutoToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayMissAutoAll, Me.mnuTrayMissAutoNfo, Me.mnuTrayMissAutoPoster, Me.mnuTrayMissAutoFanart, Me.mnuTrayMissAutoExtra, Me.mnuTrayMissAutoTrailer}) - Me.TrayUpdateAutoToolStripMenuItem.Name = "TrayUpdateAutoToolStripMenuItem" - Me.TrayUpdateAutoToolStripMenuItem.Size = New System.Drawing.Size(271, 22) - Me.TrayUpdateAutoToolStripMenuItem.Text = "Automatic (Force Best Match)" - ' - 'mnuTrayMissAutoAll - ' - Me.mnuTrayMissAutoAll.Name = "mnuTrayMissAutoAll" - Me.mnuTrayMissAutoAll.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMissAutoAll.Text = "All Items" - ' - 'mnuTrayMissAutoNfo - ' - Me.mnuTrayMissAutoNfo.Name = "mnuTrayMissAutoNfo" - Me.mnuTrayMissAutoNfo.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMissAutoNfo.Text = "NFO Only" - ' - 'mnuTrayMissAutoPoster - ' - Me.mnuTrayMissAutoPoster.Name = "mnuTrayMissAutoPoster" - Me.mnuTrayMissAutoPoster.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMissAutoPoster.Text = "Poster Only" - ' - 'mnuTrayMissAutoFanart - ' - Me.mnuTrayMissAutoFanart.Name = "mnuTrayMissAutoFanart" - Me.mnuTrayMissAutoFanart.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMissAutoFanart.Text = "Fanart Only" - ' - 'mnuTrayMissAutoExtra - ' - Me.mnuTrayMissAutoExtra.Name = "mnuTrayMissAutoExtra" - Me.mnuTrayMissAutoExtra.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMissAutoExtra.Text = "Extrathumbs Only" - ' - 'mnuTrayMissAutoTrailer - ' - Me.mnuTrayMissAutoTrailer.Name = "mnuTrayMissAutoTrailer" - Me.mnuTrayMissAutoTrailer.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMissAutoTrailer.Text = "Trailer Only" - ' - 'TrayUpdateAskToolStripMenuItem - ' - Me.TrayUpdateAskToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayMissAskAll, Me.mnuTrayMissAskNfo, Me.mnuTrayMissAskPoster, Me.mnuTrayMissAskFanart, Me.mnuTrayMissAskExtra, Me.mnuTrayMissAskTrailer}) - Me.TrayUpdateAskToolStripMenuItem.Name = "TrayUpdateAskToolStripMenuItem" - Me.TrayUpdateAskToolStripMenuItem.Size = New System.Drawing.Size(271, 22) - Me.TrayUpdateAskToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" - ' - 'mnuTrayMissAskAll - ' - Me.mnuTrayMissAskAll.Name = "mnuTrayMissAskAll" - Me.mnuTrayMissAskAll.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMissAskAll.Text = "All Items" - ' - 'mnuTrayMissAskNfo - ' - Me.mnuTrayMissAskNfo.Name = "mnuTrayMissAskNfo" - Me.mnuTrayMissAskNfo.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMissAskNfo.Text = "NFO Only" - ' - 'mnuTrayMissAskPoster - ' - Me.mnuTrayMissAskPoster.Name = "mnuTrayMissAskPoster" - Me.mnuTrayMissAskPoster.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMissAskPoster.Text = "Poster Only" - ' - 'mnuTrayMissAskFanart - ' - Me.mnuTrayMissAskFanart.Name = "mnuTrayMissAskFanart" - Me.mnuTrayMissAskFanart.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMissAskFanart.Text = "Fanart Only" - ' - 'mnuTrayMissAskExtra - ' - Me.mnuTrayMissAskExtra.Name = "mnuTrayMissAskExtra" - Me.mnuTrayMissAskExtra.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMissAskExtra.Text = "Extrathumbs Only" - ' - 'mnuTrayMissAskTrailer - ' - Me.mnuTrayMissAskTrailer.Name = "mnuTrayMissAskTrailer" - Me.mnuTrayMissAskTrailer.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMissAskTrailer.Text = "Trailer Only" - ' - 'TrayNewMoviesToolStripMenuItem - ' - Me.TrayNewMoviesToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TrayAutomaticForceBestMatchToolStripMenuItem, Me.TrayAskRequireInputToolStripMenuItem}) - Me.TrayNewMoviesToolStripMenuItem.Name = "TrayNewMoviesToolStripMenuItem" - Me.TrayNewMoviesToolStripMenuItem.Size = New System.Drawing.Size(188, 22) - Me.TrayNewMoviesToolStripMenuItem.Text = "New Movies" - ' - 'TrayAutomaticForceBestMatchToolStripMenuItem - ' - Me.TrayAutomaticForceBestMatchToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayNewAutoAll, Me.mnuTrayNewAutoNfo, Me.mnuTrayNewAutoPoster, Me.mnuTrayNewAutoFanart, Me.mnuTrayNewAutoExtra, Me.mnuTrayNewAutoTrailer, Me.mnuTrayNewAutoMI}) - Me.TrayAutomaticForceBestMatchToolStripMenuItem.Name = "TrayAutomaticForceBestMatchToolStripMenuItem" - Me.TrayAutomaticForceBestMatchToolStripMenuItem.Size = New System.Drawing.Size(271, 22) - Me.TrayAutomaticForceBestMatchToolStripMenuItem.Text = "Automatic (Force Best Match)" - ' - 'mnuTrayNewAutoAll - ' - Me.mnuTrayNewAutoAll.Name = "mnuTrayNewAutoAll" - Me.mnuTrayNewAutoAll.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAutoAll.Text = "All Items" - ' - 'mnuTrayNewAutoNfo - ' - Me.mnuTrayNewAutoNfo.Name = "mnuTrayNewAutoNfo" - Me.mnuTrayNewAutoNfo.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAutoNfo.Text = "NFO Only" - ' - 'mnuTrayNewAutoPoster - ' - Me.mnuTrayNewAutoPoster.Name = "mnuTrayNewAutoPoster" - Me.mnuTrayNewAutoPoster.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAutoPoster.Text = "Poster Only" - ' - 'mnuTrayNewAutoFanart - ' - Me.mnuTrayNewAutoFanart.Name = "mnuTrayNewAutoFanart" - Me.mnuTrayNewAutoFanart.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAutoFanart.Text = "Fanart Only" - ' - 'mnuTrayNewAutoExtra - ' - Me.mnuTrayNewAutoExtra.Name = "mnuTrayNewAutoExtra" - Me.mnuTrayNewAutoExtra.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAutoExtra.Text = "Extrathumbs Only" - ' - 'mnuTrayNewAutoTrailer - ' - Me.mnuTrayNewAutoTrailer.Name = "mnuTrayNewAutoTrailer" - Me.mnuTrayNewAutoTrailer.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAutoTrailer.Text = "Trailer Only" - ' - 'mnuTrayNewAutoMI - ' - Me.mnuTrayNewAutoMI.Name = "mnuTrayNewAutoMI" - Me.mnuTrayNewAutoMI.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAutoMI.Text = "Meta Data Only" - ' - 'TrayAskRequireInputToolStripMenuItem - ' - Me.TrayAskRequireInputToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayNewAskAll, Me.mnuTrayNewAskNfo, Me.mnuTrayNewAskPoster, Me.mnuTrayNewAskFanart, Me.mnuTrayNewAskExtra, Me.mnuTrayNewAskTrailer, Me.mnuTrayNewAskMI}) - Me.TrayAskRequireInputToolStripMenuItem.Name = "TrayAskRequireInputToolStripMenuItem" - Me.TrayAskRequireInputToolStripMenuItem.Size = New System.Drawing.Size(271, 22) - Me.TrayAskRequireInputToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" - ' - 'mnuTrayNewAskAll - ' - Me.mnuTrayNewAskAll.Name = "mnuTrayNewAskAll" - Me.mnuTrayNewAskAll.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAskAll.Text = "All Items" - ' - 'mnuTrayNewAskNfo - ' - Me.mnuTrayNewAskNfo.Name = "mnuTrayNewAskNfo" - Me.mnuTrayNewAskNfo.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAskNfo.Text = "NFO Only" - ' - 'mnuTrayNewAskPoster - ' - Me.mnuTrayNewAskPoster.Name = "mnuTrayNewAskPoster" - Me.mnuTrayNewAskPoster.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAskPoster.Text = "Poster Only" - ' - 'mnuTrayNewAskFanart - ' - Me.mnuTrayNewAskFanart.Name = "mnuTrayNewAskFanart" - Me.mnuTrayNewAskFanart.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAskFanart.Text = "Fanart Only" - ' - 'mnuTrayNewAskExtra - ' - Me.mnuTrayNewAskExtra.Name = "mnuTrayNewAskExtra" - Me.mnuTrayNewAskExtra.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAskExtra.Text = "Extrathumbs Only" - ' - 'mnuTrayNewAskTrailer - ' - Me.mnuTrayNewAskTrailer.Name = "mnuTrayNewAskTrailer" - Me.mnuTrayNewAskTrailer.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAskTrailer.Text = "Trailer Only" - ' - 'mnuTrayNewAskMI - ' - Me.mnuTrayNewAskMI.Name = "mnuTrayNewAskMI" - Me.mnuTrayNewAskMI.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayNewAskMI.Text = "Meta Data Only" - ' - 'TrayMarkedMoviesToolStripMenuItem - ' - Me.TrayMarkedMoviesToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TrayAutomaticForceBestMatchToolStripMenuItem1, Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem}) - Me.TrayMarkedMoviesToolStripMenuItem.Name = "TrayMarkedMoviesToolStripMenuItem" - Me.TrayMarkedMoviesToolStripMenuItem.Size = New System.Drawing.Size(188, 22) - Me.TrayMarkedMoviesToolStripMenuItem.Text = "Marked Movies" - ' - 'TrayAutomaticForceBestMatchToolStripMenuItem1 - ' - Me.TrayAutomaticForceBestMatchToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayMarkAutoAll, Me.mnuTrayMarkAutoNfo, Me.mnuTrayMarkAutoPoster, Me.mnuTrayMarkAutoFanart, Me.mnuTrayMarkAutoExtra, Me.mnuTrayMarkAutoTrailer, Me.mnuTrayMarkAutoMI}) - Me.TrayAutomaticForceBestMatchToolStripMenuItem1.Name = "TrayAutomaticForceBestMatchToolStripMenuItem1" - Me.TrayAutomaticForceBestMatchToolStripMenuItem1.Size = New System.Drawing.Size(271, 22) - Me.TrayAutomaticForceBestMatchToolStripMenuItem1.Text = "Automatic (Force Best Match)" - ' - 'mnuTrayMarkAutoAll - ' - Me.mnuTrayMarkAutoAll.Name = "mnuTrayMarkAutoAll" - Me.mnuTrayMarkAutoAll.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAutoAll.Text = "All Items" - ' - 'mnuTrayMarkAutoNfo - ' - Me.mnuTrayMarkAutoNfo.Name = "mnuTrayMarkAutoNfo" - Me.mnuTrayMarkAutoNfo.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAutoNfo.Text = "NFO Only" - ' - 'mnuTrayMarkAutoPoster - ' - Me.mnuTrayMarkAutoPoster.Name = "mnuTrayMarkAutoPoster" - Me.mnuTrayMarkAutoPoster.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAutoPoster.Text = "Poster Only" - ' - 'mnuTrayMarkAutoFanart - ' - Me.mnuTrayMarkAutoFanart.Name = "mnuTrayMarkAutoFanart" - Me.mnuTrayMarkAutoFanart.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAutoFanart.Text = "Fanart Only" - ' - 'mnuTrayMarkAutoExtra - ' - Me.mnuTrayMarkAutoExtra.Name = "mnuTrayMarkAutoExtra" - Me.mnuTrayMarkAutoExtra.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAutoExtra.Text = "Extrathumbs Only" - ' - 'mnuTrayMarkAutoTrailer - ' - Me.mnuTrayMarkAutoTrailer.Name = "mnuTrayMarkAutoTrailer" - Me.mnuTrayMarkAutoTrailer.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAutoTrailer.Text = "Trailer Only" - ' - 'mnuTrayMarkAutoMI - ' - Me.mnuTrayMarkAutoMI.Name = "mnuTrayMarkAutoMI" - Me.mnuTrayMarkAutoMI.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAutoMI.Text = "Meta Data Only" - ' - 'TrayAskRequireInputIfNoExactMatchToolStripMenuItem - ' - Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayMarkAskAll, Me.mnuTrayMarkAskNfo, Me.mnuTrayMarkAskPoster, Me.mnuTrayMarkAskFanart, Me.mnuTrayMarkAskExtra, Me.mnuTrayMarkAskTrailer, Me.mnuTrayMarkAskMI}) - Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem.Name = "TrayAskRequireInputIfNoExactMatchToolStripMenuItem" - Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem.Size = New System.Drawing.Size(271, 22) - Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" - ' - 'mnuTrayMarkAskAll - ' - Me.mnuTrayMarkAskAll.Name = "mnuTrayMarkAskAll" - Me.mnuTrayMarkAskAll.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAskAll.Text = "All Items" - ' - 'mnuTrayMarkAskNfo - ' - Me.mnuTrayMarkAskNfo.Name = "mnuTrayMarkAskNfo" - Me.mnuTrayMarkAskNfo.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAskNfo.Text = "NFO Only" - ' - 'mnuTrayMarkAskPoster - ' - Me.mnuTrayMarkAskPoster.Name = "mnuTrayMarkAskPoster" - Me.mnuTrayMarkAskPoster.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAskPoster.Text = "Poster Only" - ' - 'mnuTrayMarkAskFanart - ' - Me.mnuTrayMarkAskFanart.Name = "mnuTrayMarkAskFanart" - Me.mnuTrayMarkAskFanart.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAskFanart.Text = "Fanart Only" - ' - 'mnuTrayMarkAskExtra - ' - Me.mnuTrayMarkAskExtra.Name = "mnuTrayMarkAskExtra" - Me.mnuTrayMarkAskExtra.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAskExtra.Text = "Extrathumbs Only" - ' - 'mnuTrayMarkAskTrailer - ' - Me.mnuTrayMarkAskTrailer.Name = "mnuTrayMarkAskTrailer" - Me.mnuTrayMarkAskTrailer.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAskTrailer.Text = "Trailer Only" - ' - 'mnuTrayMarkAskMI - ' - Me.mnuTrayMarkAskMI.Name = "mnuTrayMarkAskMI" - Me.mnuTrayMarkAskMI.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayMarkAskMI.Text = "Meta Data Only" - ' - 'TrayCurrentFilterToolStripMenuItem - ' - Me.TrayCurrentFilterToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TrayAutomaticForceBestMatchToolStripMenuItem2, Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem1}) - Me.TrayCurrentFilterToolStripMenuItem.Name = "TrayCurrentFilterToolStripMenuItem" - Me.TrayCurrentFilterToolStripMenuItem.Size = New System.Drawing.Size(188, 22) - Me.TrayCurrentFilterToolStripMenuItem.Text = "Current Filter" - ' - 'TrayAutomaticForceBestMatchToolStripMenuItem2 - ' - Me.TrayAutomaticForceBestMatchToolStripMenuItem2.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayFilterAutoAll, Me.mnuTrayFilterAutoNfo, Me.mnuTrayFilterAutoPoster, Me.mnuTrayFilterAutoFanart, Me.mnuTrayFilterAutoExtra, Me.mnuTrayFilterAutoTrailer, Me.mnuTrayFilterAutoMI}) - Me.TrayAutomaticForceBestMatchToolStripMenuItem2.Name = "TrayAutomaticForceBestMatchToolStripMenuItem2" - Me.TrayAutomaticForceBestMatchToolStripMenuItem2.Size = New System.Drawing.Size(271, 22) - Me.TrayAutomaticForceBestMatchToolStripMenuItem2.Text = "Automatic (Force Best Match)" - ' - 'mnuTrayFilterAutoAll - ' - Me.mnuTrayFilterAutoAll.Name = "mnuTrayFilterAutoAll" - Me.mnuTrayFilterAutoAll.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAutoAll.Text = "All Items" - ' - 'mnuTrayFilterAutoNfo - ' - Me.mnuTrayFilterAutoNfo.Name = "mnuTrayFilterAutoNfo" - Me.mnuTrayFilterAutoNfo.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAutoNfo.Text = "NFO Only" - ' - 'mnuTrayFilterAutoPoster - ' - Me.mnuTrayFilterAutoPoster.Name = "mnuTrayFilterAutoPoster" - Me.mnuTrayFilterAutoPoster.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAutoPoster.Text = "Poster Only" - ' - 'mnuTrayFilterAutoFanart - ' - Me.mnuTrayFilterAutoFanart.Name = "mnuTrayFilterAutoFanart" - Me.mnuTrayFilterAutoFanart.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAutoFanart.Text = "Fanart Only" - ' - 'mnuTrayFilterAutoExtra - ' - Me.mnuTrayFilterAutoExtra.Name = "mnuTrayFilterAutoExtra" - Me.mnuTrayFilterAutoExtra.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAutoExtra.Text = "Extrathumbs Only" - ' - 'mnuTrayFilterAutoTrailer - ' - Me.mnuTrayFilterAutoTrailer.Name = "mnuTrayFilterAutoTrailer" - Me.mnuTrayFilterAutoTrailer.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAutoTrailer.Text = "Trailer Only" - ' - 'mnuTrayFilterAutoMI - ' - Me.mnuTrayFilterAutoMI.Name = "mnuTrayFilterAutoMI" - Me.mnuTrayFilterAutoMI.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAutoMI.Text = "Meta Data Only" - ' - 'TrayAskRequireInputIfNoExactMatchToolStripMenuItem1 - ' - Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayFilterAskAll, Me.mnuTrayFilterAskNfo, Me.mnuTrayFilterAskPoster, Me.mnuTrayFilterAskFanart, Me.mnuTrayFilterAskExtra, Me.mnuTrayFilterAskTrailer, Me.mnuTrayFilterAskMI}) - Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem1.Name = "TrayAskRequireInputIfNoExactMatchToolStripMenuItem1" - Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem1.Size = New System.Drawing.Size(271, 22) - Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem1.Text = "Ask (Require Input If No Exact Match)" - ' - 'mnuTrayFilterAskAll - ' - Me.mnuTrayFilterAskAll.Name = "mnuTrayFilterAskAll" - Me.mnuTrayFilterAskAll.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAskAll.Text = "All Items" - ' - 'mnuTrayFilterAskNfo - ' - Me.mnuTrayFilterAskNfo.Name = "mnuTrayFilterAskNfo" - Me.mnuTrayFilterAskNfo.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAskNfo.Text = "NFO Only" - ' - 'mnuTrayFilterAskPoster - ' - Me.mnuTrayFilterAskPoster.Name = "mnuTrayFilterAskPoster" - Me.mnuTrayFilterAskPoster.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAskPoster.Text = "Poster Only" - ' - 'mnuTrayFilterAskFanart - ' - Me.mnuTrayFilterAskFanart.Name = "mnuTrayFilterAskFanart" - Me.mnuTrayFilterAskFanart.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAskFanart.Text = "Fanart Only" - ' - 'mnuTrayFilterAskExtra - ' - Me.mnuTrayFilterAskExtra.Name = "mnuTrayFilterAskExtra" - Me.mnuTrayFilterAskExtra.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAskExtra.Text = "Extrathumbs Only" - ' - 'mnuTrayFilterAskTrailer - ' - Me.mnuTrayFilterAskTrailer.Name = "mnuTrayFilterAskTrailer" - Me.mnuTrayFilterAskTrailer.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAskTrailer.Text = "Trailer Only" - ' - 'mnuTrayFilterAskMI - ' - Me.mnuTrayFilterAskMI.Name = "mnuTrayFilterAskMI" - Me.mnuTrayFilterAskMI.Size = New System.Drawing.Size(168, 22) - Me.mnuTrayFilterAskMI.Text = "Meta Data Only" - ' - 'TrayCustomUpdaterToolStripMenuItem - ' - Me.TrayCustomUpdaterToolStripMenuItem.Name = "TrayCustomUpdaterToolStripMenuItem" - Me.TrayCustomUpdaterToolStripMenuItem.Size = New System.Drawing.Size(188, 22) - Me.TrayCustomUpdaterToolStripMenuItem.Text = "Custom Scraper..." - ' - 'cmnuTrayIconMediaCenters - ' - Me.cmnuTrayIconMediaCenters.Image = CType(resources.GetObject("cmnuTrayIconMediaCenters.Image"), System.Drawing.Image) - Me.cmnuTrayIconMediaCenters.Name = "cmnuTrayIconMediaCenters" - Me.cmnuTrayIconMediaCenters.Size = New System.Drawing.Size(194, 22) - Me.cmnuTrayIconMediaCenters.Text = "Media Centers" - Me.cmnuTrayIconMediaCenters.Visible = False - ' - 'ToolStripSeparator23 - ' - Me.ToolStripSeparator23.Name = "ToolStripSeparator23" - Me.ToolStripSeparator23.Size = New System.Drawing.Size(191, 6) - ' - 'cmnuTrayIconTools - ' - Me.cmnuTrayIconTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.CleanFilesToolStripMenuItem, Me.SortFilesIntoFoldersToolStripMenuItem, Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem1, Me.ToolStripSeparator24, Me.SetsManagerToolStripMenuItem1, Me.ToolStripSeparator25, Me.ClearAllCachesToolStripMenuItem1, Me.ReloadAllMoviesToolStripMenuItem, Me.CleanDatabaseToolStripMenuItem1, Me.ToolStripSeparator26}) - Me.cmnuTrayIconTools.Image = CType(resources.GetObject("cmnuTrayIconTools.Image"), System.Drawing.Image) - Me.cmnuTrayIconTools.Name = "cmnuTrayIconTools" - Me.cmnuTrayIconTools.Size = New System.Drawing.Size(194, 22) - Me.cmnuTrayIconTools.Text = "Tools" - ' - 'CleanFilesToolStripMenuItem - ' - Me.CleanFilesToolStripMenuItem.Image = CType(resources.GetObject("CleanFilesToolStripMenuItem.Image"), System.Drawing.Image) - Me.CleanFilesToolStripMenuItem.Name = "CleanFilesToolStripMenuItem" - Me.CleanFilesToolStripMenuItem.Size = New System.Drawing.Size(289, 22) - Me.CleanFilesToolStripMenuItem.Text = "Clean Files" - ' - 'SortFilesIntoFoldersToolStripMenuItem - ' - Me.SortFilesIntoFoldersToolStripMenuItem.Image = CType(resources.GetObject("SortFilesIntoFoldersToolStripMenuItem.Image"), System.Drawing.Image) - Me.SortFilesIntoFoldersToolStripMenuItem.Name = "SortFilesIntoFoldersToolStripMenuItem" - Me.SortFilesIntoFoldersToolStripMenuItem.Size = New System.Drawing.Size(289, 22) - Me.SortFilesIntoFoldersToolStripMenuItem.Text = "Sort Files into Folders" - ' - 'CopyExistingFanartToBackdropsFolderToolStripMenuItem1 - ' - Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem1.Image = CType(resources.GetObject("CopyExistingFanartToBackdropsFolderToolStripMenuItem1.Image"), System.Drawing.Image) - Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem1.Name = "CopyExistingFanartToBackdropsFolderToolStripMenuItem1" - Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem1.Size = New System.Drawing.Size(289, 22) - Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem1.Text = "Copy Existing Fanart to Backdrops Folder" - ' - 'ToolStripSeparator24 - ' - Me.ToolStripSeparator24.Name = "ToolStripSeparator24" - Me.ToolStripSeparator24.Size = New System.Drawing.Size(286, 6) - ' - 'SetsManagerToolStripMenuItem1 - ' - Me.SetsManagerToolStripMenuItem1.Image = CType(resources.GetObject("SetsManagerToolStripMenuItem1.Image"), System.Drawing.Image) - Me.SetsManagerToolStripMenuItem1.Name = "SetsManagerToolStripMenuItem1" - Me.SetsManagerToolStripMenuItem1.Size = New System.Drawing.Size(289, 22) - Me.SetsManagerToolStripMenuItem1.Text = "Sets Manager" - ' - 'ToolStripSeparator25 - ' - Me.ToolStripSeparator25.Name = "ToolStripSeparator25" - Me.ToolStripSeparator25.Size = New System.Drawing.Size(286, 6) - ' - 'ClearAllCachesToolStripMenuItem1 - ' - Me.ClearAllCachesToolStripMenuItem1.Image = CType(resources.GetObject("ClearAllCachesToolStripMenuItem1.Image"), System.Drawing.Image) - Me.ClearAllCachesToolStripMenuItem1.Name = "ClearAllCachesToolStripMenuItem1" - Me.ClearAllCachesToolStripMenuItem1.Size = New System.Drawing.Size(289, 22) - Me.ClearAllCachesToolStripMenuItem1.Text = "Clear All Caches" - ' - 'ReloadAllMoviesToolStripMenuItem - ' - Me.ReloadAllMoviesToolStripMenuItem.Image = CType(resources.GetObject("ReloadAllMoviesToolStripMenuItem.Image"), System.Drawing.Image) - Me.ReloadAllMoviesToolStripMenuItem.Name = "ReloadAllMoviesToolStripMenuItem" - Me.ReloadAllMoviesToolStripMenuItem.Size = New System.Drawing.Size(289, 22) - Me.ReloadAllMoviesToolStripMenuItem.Text = "Reload All Movies" - ' - 'CleanDatabaseToolStripMenuItem1 - ' - Me.CleanDatabaseToolStripMenuItem1.Image = CType(resources.GetObject("CleanDatabaseToolStripMenuItem1.Image"), System.Drawing.Image) - Me.CleanDatabaseToolStripMenuItem1.Name = "CleanDatabaseToolStripMenuItem1" - Me.CleanDatabaseToolStripMenuItem1.Size = New System.Drawing.Size(289, 22) - Me.CleanDatabaseToolStripMenuItem1.Text = "Clean Database" - ' - 'ToolStripSeparator26 - ' - Me.ToolStripSeparator26.Name = "ToolStripSeparator26" - Me.ToolStripSeparator26.Size = New System.Drawing.Size(286, 6) - ' - 'ToolStripSeparator22 - ' - Me.ToolStripSeparator22.Name = "ToolStripSeparator22" - Me.ToolStripSeparator22.Size = New System.Drawing.Size(191, 6) - ' - 'cmnuTrayIconSettings - ' - Me.cmnuTrayIconSettings.Image = CType(resources.GetObject("cmnuTrayIconSettings.Image"), System.Drawing.Image) - Me.cmnuTrayIconSettings.Name = "cmnuTrayIconSettings" - Me.cmnuTrayIconSettings.Size = New System.Drawing.Size(194, 22) - Me.cmnuTrayIconSettings.Text = "Settings..." - ' - 'ToolStripSeparator13 - ' - Me.ToolStripSeparator13.Name = "ToolStripSeparator13" - Me.ToolStripSeparator13.Size = New System.Drawing.Size(191, 6) - ' - 'cmnuTrayIconExit - ' - Me.cmnuTrayIconExit.Image = CType(resources.GetObject("cmnuTrayIconExit.Image"), System.Drawing.Image) - Me.cmnuTrayIconExit.Name = "cmnuTrayIconExit" - Me.cmnuTrayIconExit.Size = New System.Drawing.Size(194, 22) - Me.cmnuTrayIconExit.Text = "Exit" - ' - 'Panel3 - ' - Me.Panel3.BackColor = System.Drawing.Color.White - Me.Panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.Panel3.Controls.Add(Me.PictureBox2) - Me.Panel3.Controls.Add(Me.Label7) - Me.Panel3.Controls.Add(Me.ProgressBar1) - Me.Panel3.Location = New System.Drawing.Point(3, 3) - Me.Panel3.Name = "Panel3" - Me.Panel3.Size = New System.Drawing.Size(249, 111) - Me.Panel3.TabIndex = 2 - ' - 'PictureBox2 - ' - Me.PictureBox2.Image = CType(resources.GetObject("PictureBox2.Image"), System.Drawing.Image) - Me.PictureBox2.Location = New System.Drawing.Point(12, 11) - Me.PictureBox2.Name = "PictureBox2" - Me.PictureBox2.Size = New System.Drawing.Size(48, 48) - Me.PictureBox2.TabIndex = 2 - Me.PictureBox2.TabStop = False - ' - 'Label7 - ' - Me.Label7.Font = New System.Drawing.Font("Segoe UI", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label7.Location = New System.Drawing.Point(63, 11) - Me.Label7.Name = "Label7" - Me.Label7.Size = New System.Drawing.Size(175, 48) - Me.Label7.TabIndex = 0 - Me.Label7.Text = "Loading Settings..." - Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'ProgressBar1 - ' - Me.ProgressBar1.Location = New System.Drawing.Point(8, 68) - Me.ProgressBar1.MarqueeAnimationSpeed = 25 - Me.ProgressBar1.Name = "ProgressBar1" - Me.ProgressBar1.Size = New System.Drawing.Size(231, 23) - Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee - Me.ProgressBar1.TabIndex = 1 - ' - 'pnlLoadingSettings - ' - Me.pnlLoadingSettings.BackColor = System.Drawing.Color.Gainsboro - Me.pnlLoadingSettings.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle - Me.pnlLoadingSettings.Controls.Add(Me.Panel3) - Me.pnlLoadingSettings.Location = New System.Drawing.Point(380, 287) - Me.pnlLoadingSettings.Name = "pnlLoadingSettings" - Me.pnlLoadingSettings.Size = New System.Drawing.Size(257, 119) - Me.pnlLoadingSettings.TabIndex = 13 - Me.pnlLoadingSettings.Visible = False - ' - 'tmrAppExit - ' - Me.tmrAppExit.Interval = 1000 - ' - 'tmrKeyBuffer - ' - Me.tmrKeyBuffer.Interval = 1000 - ' - 'frmMain - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi - Me.ClientSize = New System.Drawing.Size(1477, 888) - Me.Controls.Add(Me.pnlLoadingSettings) - Me.Controls.Add(Me.scMain) - Me.Controls.Add(Me.StatusStrip) - Me.Controls.Add(Me.MenuStrip) - Me.DoubleBuffered = True - Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.MainMenuStrip = Me.MenuStrip - Me.MinimumSize = New System.Drawing.Size(800, 600) - Me.Name = "frmMain" - Me.Text = "Ember Media Manager" - Me.StatusStrip.ResumeLayout(False) - Me.StatusStrip.PerformLayout() - Me.MenuStrip.ResumeLayout(False) - Me.MenuStrip.PerformLayout() - Me.scMain.Panel1.ResumeLayout(False) - Me.scMain.Panel2.ResumeLayout(False) - Me.scMain.Panel2.PerformLayout() - Me.scMain.ResumeLayout(False) - Me.pnlFilterGenre.ResumeLayout(False) - Me.pnlFilterGenre.PerformLayout() - Me.pnlFilterSource.ResumeLayout(False) - Me.pnlFilterSource.PerformLayout() - CType(Me.dgvMediaList, System.ComponentModel.ISupportInitialize).EndInit() - Me.mnuMediaList.ResumeLayout(False) - Me.scTV.Panel1.ResumeLayout(False) - Me.scTV.Panel2.ResumeLayout(False) - Me.scTV.ResumeLayout(False) - CType(Me.dgvTVShows, System.ComponentModel.ISupportInitialize).EndInit() - Me.mnuShows.ResumeLayout(False) - Me.SplitContainer2.Panel1.ResumeLayout(False) - Me.SplitContainer2.Panel2.ResumeLayout(False) - Me.SplitContainer2.ResumeLayout(False) - CType(Me.dgvTVSeasons, System.ComponentModel.ISupportInitialize).EndInit() - Me.mnuSeasons.ResumeLayout(False) - CType(Me.dgvTVEpisodes, System.ComponentModel.ISupportInitialize).EndInit() - Me.mnuEpisodes.ResumeLayout(False) - Me.pnlListTop.ResumeLayout(False) - Me.pnlSearch.ResumeLayout(False) - Me.pnlSearch.PerformLayout() - CType(Me.picSearch, System.ComponentModel.ISupportInitialize).EndInit() - Me.tabsMain.ResumeLayout(False) - Me.pnlFilter.ResumeLayout(False) - Me.GroupBox1.ResumeLayout(False) - Me.GroupBox3.ResumeLayout(False) - Me.GroupBox3.PerformLayout() - Me.gbSpecific.ResumeLayout(False) - Me.gbSpecific.PerformLayout() - Me.GroupBox2.ResumeLayout(False) - Me.GroupBox2.PerformLayout() - Me.pnlTop.ResumeLayout(False) - Me.pnlTop.PerformLayout() - Me.pnlInfoIcons.ResumeLayout(False) - CType(Me.pbVType, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStudio, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbVideo, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbAudio, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbResolution, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbChannels, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlRating.ResumeLayout(False) - Me.pnlRating.PerformLayout() - CType(Me.pbStar5, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStar4, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStar3, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlCancel.ResumeLayout(False) - Me.pnlCancel.PerformLayout() - Me.pnlAllSeason.ResumeLayout(False) - CType(Me.pbAllSeason, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbAllSeasonCache, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlNoInfo.ResumeLayout(False) - Me.Panel2.ResumeLayout(False) - CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlInfoPanel.ResumeLayout(False) - Me.pnlInfoPanel.PerformLayout() - CType(Me.pbMILoading, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlActors.ResumeLayout(False) - CType(Me.pbActLoad, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbActors, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlTop250.ResumeLayout(False) - CType(Me.pbTop250, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlPoster.ResumeLayout(False) - CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbPosterCache, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlMPAA.ResumeLayout(False) - Me.pnlMPAA.PerformLayout() - CType(Me.pbMPAA, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbFanartCache, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pbFanart, System.ComponentModel.ISupportInitialize).EndInit() - Me.tsMain.ResumeLayout(False) - Me.tsMain.PerformLayout() - Me.cmnuTrayIcon.ResumeLayout(False) - Me.Panel3.ResumeLayout(False) - CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit() - Me.pnlLoadingSettings.ResumeLayout(False) - Me.ResumeLayout(False) - Me.PerformLayout() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMain)) + Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() + Dim DataGridViewCellStyle2 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() + Dim DataGridViewCellStyle3 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() + Dim DataGridViewCellStyle4 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle() + Me.BottomToolStripPanel = New System.Windows.Forms.ToolStripPanel() + Me.TopToolStripPanel = New System.Windows.Forms.ToolStripPanel() + Me.RightToolStripPanel = New System.Windows.Forms.ToolStripPanel() + Me.LeftToolStripPanel = New System.Windows.Forms.ToolStripPanel() + Me.ContentPanel = New System.Windows.Forms.ToolStripContentPanel() + Me.FileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ExitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.EditToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SettingsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.HelpToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.WikiStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator18 = New System.Windows.Forms.ToolStripSeparator() + Me.VersionsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.CheckUpdatesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator19 = New System.Windows.Forms.ToolStripSeparator() + Me.AboutToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.StatusStrip = New System.Windows.Forms.StatusStrip() + Me.tslStatus = New System.Windows.Forms.ToolStripStatusLabel() + Me.tsSpring = New System.Windows.Forms.ToolStripStatusLabel() + Me.tslLoading = New System.Windows.Forms.ToolStripStatusLabel() + Me.tspbLoading = New System.Windows.Forms.ToolStripProgressBar() + Me.tmrAni = New System.Windows.Forms.Timer(Me.components) + Me.MenuStrip = New System.Windows.Forms.MenuStrip() + Me.ToolsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.CleanFoldersToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ConvertFileSourceToFolderSourceToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator4 = New System.Windows.Forms.ToolStripSeparator() + Me.SetsManagerToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripMenuItem3 = New System.Windows.Forms.ToolStripSeparator() + Me.ClearAllCachesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.RefreshAllMoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.CleanDatabaseToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator5 = New System.Windows.Forms.ToolStripSeparator() + Me.ExportToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.MoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.TVShowsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.DonateToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ErrorToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.scMain = New System.Windows.Forms.SplitContainer() + Me.pnlFilterGenre = New System.Windows.Forms.Panel() + Me.clbFilterGenres = New System.Windows.Forms.CheckedListBox() + Me.lblGFilClose = New System.Windows.Forms.Label() + Me.Label4 = New System.Windows.Forms.Label() + Me.pnlFilterSource = New System.Windows.Forms.Panel() + Me.lblSFilClose = New System.Windows.Forms.Label() + Me.Label8 = New System.Windows.Forms.Label() + Me.clbFilterSource = New System.Windows.Forms.CheckedListBox() + Me.dgvMediaList = New System.Windows.Forms.DataGridView() + Me.mnuMediaList = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.cmnuTitle = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator3 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuRefresh = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuMark = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuLock = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripMenuItem1 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuEditMovie = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuMetaData = New System.Windows.Forms.ToolStripMenuItem() + Me.GenresToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.LblGenreStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem() + Me.GenreListToolStripComboBox = New System.Windows.Forms.ToolStripComboBox() + Me.AddGenreToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SetGenreToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.RemoveGenreToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuSep = New System.Windows.Forms.ToolStripSeparator() + Me.ScrapingToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripMenuItem5 = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectAllAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectNfoAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectPosterAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectFanartAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectExtraAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectTrailerAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectMetaAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripMenuItem13 = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectAllAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectNfoAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectPosterÃskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectFanartAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectExtraAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripAskMenuItem19 = New System.Windows.Forms.ToolStripMenuItem() + Me.SelectMeEtaAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuRescrape = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuSearchNew = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuSep2 = New System.Windows.Forms.ToolStripSeparator() + Me.OpenContainingFolderToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator() + Me.RemoveToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.RemoveFromDatabaseToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.DeleteMovieToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.scTV = New System.Windows.Forms.SplitContainer() + Me.dgvTVShows = New System.Windows.Forms.DataGridView() + Me.mnuShows = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.cmnuShowTitle = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripMenuItem2 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuReloadShow = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuMarkShow = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuLockShow = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator8 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuEditShow = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator7 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuRescrapeShow = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuChangeShow = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator11 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuShowOpenFolder = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator20 = New System.Windows.Forms.ToolStripSeparator() + Me.RemoveShowToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuRemoveTVShow = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuDeleteTVShow = New System.Windows.Forms.ToolStripMenuItem() + Me.SplitContainer2 = New System.Windows.Forms.SplitContainer() + Me.dgvTVSeasons = New System.Windows.Forms.DataGridView() + Me.mnuSeasons = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.cmnuSeasonTitle = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator17 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuReloadSeason = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuMarkSeason = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuLockSeason = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator16 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuSeasonChangeImages = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator14 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuSeasonRescrape = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator15 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuSeasonOpenFolder = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator27 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuSeasonRemove = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuRemoveSeasonFromDB = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuDeleteSeason = New System.Windows.Forms.ToolStripMenuItem() + Me.dgvTVEpisodes = New System.Windows.Forms.DataGridView() + Me.mnuEpisodes = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.cmnuEpTitle = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator6 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuReloadEp = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuMarkEp = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuLockEp = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator9 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuEditEpisode = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator10 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuRescrapeEp = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuChangeEp = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator12 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuEpOpenFolder = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator28 = New System.Windows.Forms.ToolStripSeparator() + Me.RemoveEpToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuRemoveTVEp = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuDeleteTVEp = New System.Windows.Forms.ToolStripMenuItem() + Me.pnlListTop = New System.Windows.Forms.Panel() + Me.btnMarkAll = New System.Windows.Forms.Button() + Me.pnlSearch = New System.Windows.Forms.Panel() + Me.cbSearch = New System.Windows.Forms.ComboBox() + Me.picSearch = New System.Windows.Forms.PictureBox() + Me.txtSearch = New System.Windows.Forms.TextBox() + Me.tabsMain = New System.Windows.Forms.TabControl() + Me.tabMovies = New System.Windows.Forms.TabPage() + Me.tabTV = New System.Windows.Forms.TabPage() + Me.pnlFilter = New System.Windows.Forms.Panel() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.btnIMDBRating = New System.Windows.Forms.Button() + Me.btnSortTitle = New System.Windows.Forms.Button() + Me.btnSortDate = New System.Windows.Forms.Button() + Me.btnClearFilters = New System.Windows.Forms.Button() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.chkFilterTolerance = New System.Windows.Forms.CheckBox() + Me.chkFilterMissing = New System.Windows.Forms.CheckBox() + Me.chkFilterDupe = New System.Windows.Forms.CheckBox() + Me.gbSpecific = New System.Windows.Forms.GroupBox() + Me.txtFilterSource = New System.Windows.Forms.TextBox() + Me.Label6 = New System.Windows.Forms.Label() + Me.cbFilterFileSource = New System.Windows.Forms.ComboBox() + Me.chkFilterLock = New System.Windows.Forms.CheckBox() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.rbFilterAnd = New System.Windows.Forms.RadioButton() + Me.rbFilterOr = New System.Windows.Forms.RadioButton() + Me.chkFilterNew = New System.Windows.Forms.CheckBox() + Me.cbFilterYear = New System.Windows.Forms.ComboBox() + Me.chkFilterMark = New System.Windows.Forms.CheckBox() + Me.cbFilterYearMod = New System.Windows.Forms.ComboBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.txtFilterGenre = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label3 = New System.Windows.Forms.Label() + Me.btnFilterDown = New System.Windows.Forms.Button() + Me.btnFilterUp = New System.Windows.Forms.Button() + Me.lblFilter = New System.Windows.Forms.Label() + Me.pnlTop = New System.Windows.Forms.Panel() + Me.lblTitle = New System.Windows.Forms.Label() + Me.pnlInfoIcons = New System.Windows.Forms.Panel() + Me.lblOriginalTitle = New System.Windows.Forms.Label() + Me.lblStudio = New System.Windows.Forms.Label() + Me.pbVType = New System.Windows.Forms.PictureBox() + Me.pbStudio = New System.Windows.Forms.PictureBox() + Me.pbVideo = New System.Windows.Forms.PictureBox() + Me.pbAudio = New System.Windows.Forms.PictureBox() + Me.pbResolution = New System.Windows.Forms.PictureBox() + Me.pbChannels = New System.Windows.Forms.PictureBox() + Me.lblRuntime = New System.Windows.Forms.Label() + Me.lblTagline = New System.Windows.Forms.Label() + Me.pnlRating = New System.Windows.Forms.Panel() + Me.pbStar5 = New System.Windows.Forms.PictureBox() + Me.pbStar4 = New System.Windows.Forms.PictureBox() + Me.pbStar3 = New System.Windows.Forms.PictureBox() + Me.pbStar2 = New System.Windows.Forms.PictureBox() + Me.pbStar1 = New System.Windows.Forms.PictureBox() + Me.lblVotes = New System.Windows.Forms.Label() + Me.pnlCancel = New System.Windows.Forms.Panel() + Me.pbCanceling = New System.Windows.Forms.ProgressBar() + Me.lblCanceling = New System.Windows.Forms.Label() + Me.btnCancel = New System.Windows.Forms.Button() + Me.pnlAllSeason = New System.Windows.Forms.Panel() + Me.pbAllSeason = New System.Windows.Forms.PictureBox() + Me.pbAllSeasonCache = New System.Windows.Forms.PictureBox() + Me.pnlNoInfo = New System.Windows.Forms.Panel() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.pnlInfoPanel = New System.Windows.Forms.Panel() + Me.txtCerts = New System.Windows.Forms.TextBox() + Me.lblCertsHeader = New System.Windows.Forms.Label() + Me.lblReleaseDate = New System.Windows.Forms.Label() + Me.lblReleaseDateHeader = New System.Windows.Forms.Label() + Me.btnMid = New System.Windows.Forms.Button() + Me.pbMILoading = New System.Windows.Forms.PictureBox() + Me.btnMetaDataRefresh = New System.Windows.Forms.Button() + Me.lblMetaDataHeader = New System.Windows.Forms.Label() + Me.txtMetaData = New System.Windows.Forms.TextBox() + Me.btnPlay = New System.Windows.Forms.Button() + Me.txtFilePath = New System.Windows.Forms.TextBox() + Me.lblFilePathHeader = New System.Windows.Forms.Label() + Me.txtIMDBID = New System.Windows.Forms.TextBox() + Me.lblIMDBHeader = New System.Windows.Forms.Label() + Me.lblDirector = New System.Windows.Forms.Label() + Me.lblDirectorHeader = New System.Windows.Forms.Label() + Me.pnlActors = New System.Windows.Forms.Panel() + Me.pbActLoad = New System.Windows.Forms.PictureBox() + Me.lstActors = New System.Windows.Forms.ListBox() + Me.pbActors = New System.Windows.Forms.PictureBox() + Me.lblActorsHeader = New System.Windows.Forms.Label() + Me.lblOutlineHeader = New System.Windows.Forms.Label() + Me.txtOutline = New System.Windows.Forms.TextBox() + Me.pnlTop250 = New System.Windows.Forms.Panel() + Me.lblTop250 = New System.Windows.Forms.Label() + Me.pbTop250 = New System.Windows.Forms.PictureBox() + Me.lblPlotHeader = New System.Windows.Forms.Label() + Me.txtPlot = New System.Windows.Forms.TextBox() + Me.btnDown = New System.Windows.Forms.Button() + Me.btnUp = New System.Windows.Forms.Button() + Me.lblInfoPanelHeader = New System.Windows.Forms.Label() + Me.pnlPoster = New System.Windows.Forms.Panel() + Me.pbPoster = New System.Windows.Forms.PictureBox() + Me.pbPosterCache = New System.Windows.Forms.PictureBox() + Me.pnlMPAA = New System.Windows.Forms.Panel() + Me.pbMPAA = New System.Windows.Forms.PictureBox() + Me.pbFanartCache = New System.Windows.Forms.PictureBox() + Me.pbFanart = New System.Windows.Forms.PictureBox() + Me.tsMain = New System.Windows.Forms.ToolStrip() + Me.tsbAutoPilot = New System.Windows.Forms.ToolStripDropDownButton() + Me.FullToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.FullAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAutoAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAutoNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAutoPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAutoFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAutoExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAutoMI = New System.Windows.Forms.ToolStripMenuItem() + Me.FullAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAskAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAskNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAskPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAskFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAskExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAskTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllAskMI = New System.Windows.Forms.ToolStripMenuItem() + Me.FullSkipToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuAllSkipAll = New System.Windows.Forms.ToolStripMenuItem() + Me.UpdateOnlyToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.UpdateAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMissAutoAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMissAutoNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMissAutoPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMissAutoFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMissAutoExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMissAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.UpdateAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMissAskAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMissAskNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMissAskPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMissAskFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMissAskExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMissAskTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.NewMoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.AutomaticForceBestMatchToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAutoAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAutoNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAutoPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAutoFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAutoExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAutoMI = New System.Windows.Forms.ToolStripMenuItem() + Me.AskRequireInputToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAskAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAskNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAskPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAskFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAskExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAskTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuNewAskMI = New System.Windows.Forms.ToolStripMenuItem() + Me.MarkedMoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.AutomaticForceBestMatchToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAutoAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAutoNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAutoPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAutoFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAutoExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAutoMI = New System.Windows.Forms.ToolStripMenuItem() + Me.AskRequireInputIfNoExactMatchToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAskAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAskNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAskPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAskFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAskExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAskTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuMarkAskMI = New System.Windows.Forms.ToolStripMenuItem() + Me.CurrentFilterToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.AutomaticForceBestMatchToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAutoAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAutoNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAutoPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAutoFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAutoExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAutoMI = New System.Windows.Forms.ToolStripMenuItem() + Me.AskRequireInputIfNoExactMatchToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAskAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAskNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAskPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAskFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAskExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAskTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuFilterAskMI = New System.Windows.Forms.ToolStripMenuItem() + Me.CustomUpdaterToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.tsbRefreshMedia = New System.Windows.Forms.ToolStripSplitButton() + Me.mnuMoviesUpdate = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTVShowUpdate = New System.Windows.Forms.ToolStripMenuItem() + Me.tsbMediaCenters = New System.Windows.Forms.ToolStripSplitButton() + Me.ilColumnIcons = New System.Windows.Forms.ImageList(Me.components) + Me.tmrWait = New System.Windows.Forms.Timer(Me.components) + Me.tmrLoad = New System.Windows.Forms.Timer(Me.components) + Me.tmrSearchWait = New System.Windows.Forms.Timer(Me.components) + Me.tmrSearch = New System.Windows.Forms.Timer(Me.components) + Me.tmrFilterAni = New System.Windows.Forms.Timer(Me.components) + Me.ToolTips = New System.Windows.Forms.ToolTip(Me.components) + Me.tmrWaitShow = New System.Windows.Forms.Timer(Me.components) + Me.tmrLoadShow = New System.Windows.Forms.Timer(Me.components) + Me.tmrWaitSeason = New System.Windows.Forms.Timer(Me.components) + Me.tmrLoadSeason = New System.Windows.Forms.Timer(Me.components) + Me.tmrWaitEp = New System.Windows.Forms.Timer(Me.components) + Me.tmrLoadEp = New System.Windows.Forms.Timer(Me.components) + Me.cmnuTrayIcon = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.cmnuTrayIconTitle = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator21 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuTrayIconUpdateMedia = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuTrayIconUpdateMovies = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuTrayIconUpdateTV = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuTrayIconScrapeMedia = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayFullToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayFullAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAutoAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAutoNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAutoPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAutoFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAutoExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAutoMI = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayFullAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAskAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAskNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAskPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAskFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAskExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAskTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayAllAskMI = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayUpdateOnlyToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayUpdateAutoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMissAutoAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMissAutoNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMissAutoPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMissAutoFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMissAutoExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMissAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayUpdateAskToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMissAskAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMissAskNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMissAskPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMissAskFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMissAskExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMissAskTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayNewMoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayAutomaticForceBestMatchToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAutoAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAutoNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAutoPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAutoFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAutoExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAutoMI = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayAskRequireInputToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAskAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAskNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAskPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAskFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAskExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAskTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayNewAskMI = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayMarkedMoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayAutomaticForceBestMatchToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAutoAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAutoNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAutoPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAutoFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAutoExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAutoMI = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAskAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAskNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAskPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAskFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAskExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAskTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayMarkAskMI = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayCurrentFilterToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayAutomaticForceBestMatchToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAutoAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAutoNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAutoPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAutoFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAutoExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAutoTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAutoMI = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAskAll = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAskNfo = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAskPoster = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAskFanart = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAskExtra = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAskTrailer = New System.Windows.Forms.ToolStripMenuItem() + Me.mnuTrayFilterAskMI = New System.Windows.Forms.ToolStripMenuItem() + Me.TrayCustomUpdaterToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.cmnuTrayIconMediaCenters = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator23 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuTrayIconTools = New System.Windows.Forms.ToolStripMenuItem() + Me.CleanFilesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SortFilesIntoFoldersToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator24 = New System.Windows.Forms.ToolStripSeparator() + Me.SetsManagerToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator25 = New System.Windows.Forms.ToolStripSeparator() + Me.ClearAllCachesToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.ReloadAllMoviesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.CleanDatabaseToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator26 = New System.Windows.Forms.ToolStripSeparator() + Me.ToolStripSeparator22 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuTrayIconSettings = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator13 = New System.Windows.Forms.ToolStripSeparator() + Me.cmnuTrayIconExit = New System.Windows.Forms.ToolStripMenuItem() + Me.Panel3 = New System.Windows.Forms.Panel() + Me.PictureBox2 = New System.Windows.Forms.PictureBox() + Me.Label7 = New System.Windows.Forms.Label() + Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() + Me.pnlLoadingSettings = New System.Windows.Forms.Panel() + Me.tmrAppExit = New System.Windows.Forms.Timer(Me.components) + Me.tmrKeyBuffer = New System.Windows.Forms.Timer(Me.components) + Me.StatusStrip.SuspendLayout() + Me.MenuStrip.SuspendLayout() + Me.scMain.Panel1.SuspendLayout() + Me.scMain.Panel2.SuspendLayout() + Me.scMain.SuspendLayout() + Me.pnlFilterGenre.SuspendLayout() + Me.pnlFilterSource.SuspendLayout() + CType(Me.dgvMediaList, System.ComponentModel.ISupportInitialize).BeginInit() + Me.mnuMediaList.SuspendLayout() + Me.scTV.Panel1.SuspendLayout() + Me.scTV.Panel2.SuspendLayout() + Me.scTV.SuspendLayout() + CType(Me.dgvTVShows, System.ComponentModel.ISupportInitialize).BeginInit() + Me.mnuShows.SuspendLayout() + Me.SplitContainer2.Panel1.SuspendLayout() + Me.SplitContainer2.Panel2.SuspendLayout() + Me.SplitContainer2.SuspendLayout() + CType(Me.dgvTVSeasons, System.ComponentModel.ISupportInitialize).BeginInit() + Me.mnuSeasons.SuspendLayout() + CType(Me.dgvTVEpisodes, System.ComponentModel.ISupportInitialize).BeginInit() + Me.mnuEpisodes.SuspendLayout() + Me.pnlListTop.SuspendLayout() + Me.pnlSearch.SuspendLayout() + CType(Me.picSearch, System.ComponentModel.ISupportInitialize).BeginInit() + Me.tabsMain.SuspendLayout() + Me.pnlFilter.SuspendLayout() + Me.GroupBox1.SuspendLayout() + Me.GroupBox3.SuspendLayout() + Me.gbSpecific.SuspendLayout() + Me.GroupBox2.SuspendLayout() + Me.pnlTop.SuspendLayout() + Me.pnlInfoIcons.SuspendLayout() + CType(Me.pbVType, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStudio, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbVideo, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbAudio, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbResolution, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbChannels, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlRating.SuspendLayout() + CType(Me.pbStar5, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStar4, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStar3, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlCancel.SuspendLayout() + Me.pnlAllSeason.SuspendLayout() + CType(Me.pbAllSeason, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbAllSeasonCache, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlNoInfo.SuspendLayout() + Me.Panel2.SuspendLayout() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlInfoPanel.SuspendLayout() + CType(Me.pbMILoading, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlActors.SuspendLayout() + CType(Me.pbActLoad, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbActors, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlTop250.SuspendLayout() + CType(Me.pbTop250, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlPoster.SuspendLayout() + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbPosterCache, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlMPAA.SuspendLayout() + CType(Me.pbMPAA, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbFanartCache, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pbFanart, System.ComponentModel.ISupportInitialize).BeginInit() + Me.tsMain.SuspendLayout() + Me.cmnuTrayIcon.SuspendLayout() + Me.Panel3.SuspendLayout() + CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pnlLoadingSettings.SuspendLayout() + Me.SuspendLayout() + ' + 'BottomToolStripPanel + ' + Me.BottomToolStripPanel.Location = New System.Drawing.Point(0, 0) + Me.BottomToolStripPanel.Name = "BottomToolStripPanel" + Me.BottomToolStripPanel.Orientation = System.Windows.Forms.Orientation.Horizontal + Me.BottomToolStripPanel.RowMargin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.BottomToolStripPanel.Size = New System.Drawing.Size(0, 0) + ' + 'TopToolStripPanel + ' + Me.TopToolStripPanel.Location = New System.Drawing.Point(0, 0) + Me.TopToolStripPanel.Name = "TopToolStripPanel" + Me.TopToolStripPanel.Orientation = System.Windows.Forms.Orientation.Horizontal + Me.TopToolStripPanel.RowMargin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.TopToolStripPanel.Size = New System.Drawing.Size(0, 0) + ' + 'RightToolStripPanel + ' + Me.RightToolStripPanel.Location = New System.Drawing.Point(0, 0) + Me.RightToolStripPanel.Name = "RightToolStripPanel" + Me.RightToolStripPanel.Orientation = System.Windows.Forms.Orientation.Horizontal + Me.RightToolStripPanel.RowMargin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.RightToolStripPanel.Size = New System.Drawing.Size(0, 0) + ' + 'LeftToolStripPanel + ' + Me.LeftToolStripPanel.Location = New System.Drawing.Point(0, 0) + Me.LeftToolStripPanel.Name = "LeftToolStripPanel" + Me.LeftToolStripPanel.Orientation = System.Windows.Forms.Orientation.Horizontal + Me.LeftToolStripPanel.RowMargin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.LeftToolStripPanel.Size = New System.Drawing.Size(0, 0) + ' + 'ContentPanel + ' + Me.ContentPanel.Size = New System.Drawing.Size(150, 175) + ' + 'FileToolStripMenuItem + ' + Me.FileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ExitToolStripMenuItem}) + Me.FileToolStripMenuItem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.FileToolStripMenuItem.Name = "FileToolStripMenuItem" + Me.FileToolStripMenuItem.Size = New System.Drawing.Size(37, 20) + Me.FileToolStripMenuItem.Text = "&File" + ' + 'ExitToolStripMenuItem + ' + Me.ExitToolStripMenuItem.Image = CType(resources.GetObject("ExitToolStripMenuItem.Image"), System.Drawing.Image) + Me.ExitToolStripMenuItem.Name = "ExitToolStripMenuItem" + Me.ExitToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.ExitToolStripMenuItem.Text = "E&xit" + ' + 'EditToolStripMenuItem + ' + Me.EditToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.SettingsToolStripMenuItem}) + Me.EditToolStripMenuItem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.EditToolStripMenuItem.Name = "EditToolStripMenuItem" + Me.EditToolStripMenuItem.Size = New System.Drawing.Size(39, 20) + Me.EditToolStripMenuItem.Text = "&Edit" + ' + 'SettingsToolStripMenuItem + ' + Me.SettingsToolStripMenuItem.Image = CType(resources.GetObject("SettingsToolStripMenuItem.Image"), System.Drawing.Image) + Me.SettingsToolStripMenuItem.Name = "SettingsToolStripMenuItem" + Me.SettingsToolStripMenuItem.Size = New System.Drawing.Size(125, 22) + Me.SettingsToolStripMenuItem.Text = "&Settings..." + ' + 'HelpToolStripMenuItem + ' + Me.HelpToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.WikiStripMenuItem, Me.ToolStripSeparator18, Me.VersionsToolStripMenuItem, Me.CheckUpdatesToolStripMenuItem, Me.ToolStripSeparator19, Me.AboutToolStripMenuItem}) + Me.HelpToolStripMenuItem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.HelpToolStripMenuItem.Name = "HelpToolStripMenuItem" + Me.HelpToolStripMenuItem.Size = New System.Drawing.Size(43, 20) + Me.HelpToolStripMenuItem.Text = "&Help" + ' + 'WikiStripMenuItem + ' + Me.WikiStripMenuItem.Image = CType(resources.GetObject("WikiStripMenuItem.Image"), System.Drawing.Image) + Me.WikiStripMenuItem.Name = "WikiStripMenuItem" + Me.WikiStripMenuItem.Size = New System.Drawing.Size(185, 22) + Me.WikiStripMenuItem.Text = "EmberMM.com &Wiki..." + ' + 'ToolStripSeparator18 + ' + Me.ToolStripSeparator18.Name = "ToolStripSeparator18" + Me.ToolStripSeparator18.Size = New System.Drawing.Size(182, 6) + ' + 'VersionsToolStripMenuItem + ' + Me.VersionsToolStripMenuItem.Image = CType(resources.GetObject("VersionsToolStripMenuItem.Image"), System.Drawing.Image) + Me.VersionsToolStripMenuItem.Name = "VersionsToolStripMenuItem" + Me.VersionsToolStripMenuItem.Size = New System.Drawing.Size(185, 22) + Me.VersionsToolStripMenuItem.Text = "&Versions..." + ' + 'CheckUpdatesToolStripMenuItem + ' + Me.CheckUpdatesToolStripMenuItem.Enabled = False + Me.CheckUpdatesToolStripMenuItem.Image = CType(resources.GetObject("CheckUpdatesToolStripMenuItem.Image"), System.Drawing.Image) + Me.CheckUpdatesToolStripMenuItem.Name = "CheckUpdatesToolStripMenuItem" + Me.CheckUpdatesToolStripMenuItem.Size = New System.Drawing.Size(185, 22) + Me.CheckUpdatesToolStripMenuItem.Text = "Check For Updates" + Me.CheckUpdatesToolStripMenuItem.Visible = False + ' + 'ToolStripSeparator19 + ' + Me.ToolStripSeparator19.Name = "ToolStripSeparator19" + Me.ToolStripSeparator19.Size = New System.Drawing.Size(182, 6) + ' + 'AboutToolStripMenuItem + ' + Me.AboutToolStripMenuItem.Image = CType(resources.GetObject("AboutToolStripMenuItem.Image"), System.Drawing.Image) + Me.AboutToolStripMenuItem.Name = "AboutToolStripMenuItem" + Me.AboutToolStripMenuItem.Size = New System.Drawing.Size(185, 22) + Me.AboutToolStripMenuItem.Text = "&About..." + ' + 'StatusStrip + ' + Me.StatusStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Visible + Me.StatusStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.tslStatus, Me.tsSpring, Me.tslLoading, Me.tspbLoading}) + Me.StatusStrip.Location = New System.Drawing.Point(0, 806) + Me.StatusStrip.Name = "StatusStrip" + Me.StatusStrip.Size = New System.Drawing.Size(1465, 22) + Me.StatusStrip.TabIndex = 6 + Me.StatusStrip.Text = "StatusStrip" + ' + 'tslStatus + ' + Me.tslStatus.Name = "tslStatus" + Me.tslStatus.Size = New System.Drawing.Size(0, 17) + Me.tslStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'tsSpring + ' + Me.tsSpring.Name = "tsSpring" + Me.tsSpring.Size = New System.Drawing.Size(1450, 17) + Me.tsSpring.Spring = True + Me.tsSpring.Text = " " + ' + 'tslLoading + ' + Me.tslLoading.AutoSize = False + Me.tslLoading.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.tslLoading.Name = "tslLoading" + Me.tslLoading.Size = New System.Drawing.Size(424, 17) + Me.tslLoading.Text = "Loading Media:" + Me.tslLoading.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.tslLoading.Visible = False + ' + 'tspbLoading + ' + Me.tspbLoading.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right + Me.tspbLoading.AutoSize = False + Me.tspbLoading.MarqueeAnimationSpeed = 25 + Me.tspbLoading.Name = "tspbLoading" + Me.tspbLoading.Size = New System.Drawing.Size(150, 16) + Me.tspbLoading.Style = System.Windows.Forms.ProgressBarStyle.Continuous + Me.tspbLoading.Visible = False + ' + 'tmrAni + ' + Me.tmrAni.Interval = 1 + ' + 'MenuStrip + ' + Me.MenuStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FileToolStripMenuItem, Me.EditToolStripMenuItem, Me.ToolsToolStripMenuItem, Me.HelpToolStripMenuItem, Me.DonateToolStripMenuItem, Me.ErrorToolStripMenuItem}) + Me.MenuStrip.Location = New System.Drawing.Point(0, 0) + Me.MenuStrip.Name = "MenuStrip" + Me.MenuStrip.Size = New System.Drawing.Size(1465, 24) + Me.MenuStrip.TabIndex = 0 + Me.MenuStrip.Text = "MenuStrip" + ' + 'ToolsToolStripMenuItem + ' + Me.ToolsToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.CleanFoldersToolStripMenuItem, Me.ConvertFileSourceToFolderSourceToolStripMenuItem, Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem, Me.ToolStripSeparator4, Me.SetsManagerToolStripMenuItem, Me.ToolStripMenuItem3, Me.ClearAllCachesToolStripMenuItem, Me.RefreshAllMoviesToolStripMenuItem, Me.CleanDatabaseToolStripMenuItem, Me.ToolStripSeparator5, Me.ExportToolStripMenuItem}) + Me.ToolsToolStripMenuItem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.ToolsToolStripMenuItem.Name = "ToolsToolStripMenuItem" + Me.ToolsToolStripMenuItem.Size = New System.Drawing.Size(46, 20) + Me.ToolsToolStripMenuItem.Text = "&Tools" + ' + 'CleanFoldersToolStripMenuItem + ' + Me.CleanFoldersToolStripMenuItem.Image = CType(resources.GetObject("CleanFoldersToolStripMenuItem.Image"), System.Drawing.Image) + Me.CleanFoldersToolStripMenuItem.Name = "CleanFoldersToolStripMenuItem" + Me.CleanFoldersToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ + Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys) + Me.CleanFoldersToolStripMenuItem.Size = New System.Drawing.Size(352, 22) + Me.CleanFoldersToolStripMenuItem.Text = "&Clean Files" + ' + 'ConvertFileSourceToFolderSourceToolStripMenuItem + ' + Me.ConvertFileSourceToFolderSourceToolStripMenuItem.Image = CType(resources.GetObject("ConvertFileSourceToFolderSourceToolStripMenuItem.Image"), System.Drawing.Image) + Me.ConvertFileSourceToFolderSourceToolStripMenuItem.Name = "ConvertFileSourceToFolderSourceToolStripMenuItem" + Me.ConvertFileSourceToFolderSourceToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ + Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) + Me.ConvertFileSourceToFolderSourceToolStripMenuItem.Size = New System.Drawing.Size(352, 22) + Me.ConvertFileSourceToFolderSourceToolStripMenuItem.Text = "&Sort Files Into Folders" + ' + 'CopyExistingFanartToBackdropsFolderToolStripMenuItem + ' + Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem.Image = CType(resources.GetObject("CopyExistingFanartToBackdropsFolderToolStripMenuItem.Image"), System.Drawing.Image) + Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem.Name = "CopyExistingFanartToBackdropsFolderToolStripMenuItem" + Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ + Or System.Windows.Forms.Keys.B), System.Windows.Forms.Keys) + Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem.Size = New System.Drawing.Size(352, 22) + Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem.Text = "Copy Existing Fanart To &Backdrops Folder" + ' + 'ToolStripSeparator4 + ' + Me.ToolStripSeparator4.Name = "ToolStripSeparator4" + Me.ToolStripSeparator4.Size = New System.Drawing.Size(349, 6) + ' + 'SetsManagerToolStripMenuItem + ' + Me.SetsManagerToolStripMenuItem.Image = CType(resources.GetObject("SetsManagerToolStripMenuItem.Image"), System.Drawing.Image) + Me.SetsManagerToolStripMenuItem.Name = "SetsManagerToolStripMenuItem" + Me.SetsManagerToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ + Or System.Windows.Forms.Keys.M), System.Windows.Forms.Keys) + Me.SetsManagerToolStripMenuItem.Size = New System.Drawing.Size(352, 22) + Me.SetsManagerToolStripMenuItem.Text = "Sets &Manager" + ' + 'ToolStripMenuItem3 + ' + Me.ToolStripMenuItem3.Name = "ToolStripMenuItem3" + Me.ToolStripMenuItem3.Size = New System.Drawing.Size(349, 6) + ' + 'ClearAllCachesToolStripMenuItem + ' + Me.ClearAllCachesToolStripMenuItem.Image = CType(resources.GetObject("ClearAllCachesToolStripMenuItem.Image"), System.Drawing.Image) + Me.ClearAllCachesToolStripMenuItem.Name = "ClearAllCachesToolStripMenuItem" + Me.ClearAllCachesToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ + Or System.Windows.Forms.Keys.A), System.Windows.Forms.Keys) + Me.ClearAllCachesToolStripMenuItem.Size = New System.Drawing.Size(352, 22) + Me.ClearAllCachesToolStripMenuItem.Text = "Clear &All Caches" + ' + 'RefreshAllMoviesToolStripMenuItem + ' + Me.RefreshAllMoviesToolStripMenuItem.Image = CType(resources.GetObject("RefreshAllMoviesToolStripMenuItem.Image"), System.Drawing.Image) + Me.RefreshAllMoviesToolStripMenuItem.Name = "RefreshAllMoviesToolStripMenuItem" + Me.RefreshAllMoviesToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ + Or System.Windows.Forms.Keys.L), System.Windows.Forms.Keys) + Me.RefreshAllMoviesToolStripMenuItem.Size = New System.Drawing.Size(352, 22) + Me.RefreshAllMoviesToolStripMenuItem.Text = "Re&load All Movies" + ' + 'CleanDatabaseToolStripMenuItem + ' + Me.CleanDatabaseToolStripMenuItem.Image = CType(resources.GetObject("CleanDatabaseToolStripMenuItem.Image"), System.Drawing.Image) + Me.CleanDatabaseToolStripMenuItem.Name = "CleanDatabaseToolStripMenuItem" + Me.CleanDatabaseToolStripMenuItem.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Alt) _ + Or System.Windows.Forms.Keys.D), System.Windows.Forms.Keys) + Me.CleanDatabaseToolStripMenuItem.Size = New System.Drawing.Size(352, 22) + Me.CleanDatabaseToolStripMenuItem.Text = "Clean Database" + ' + 'ToolStripSeparator5 + ' + Me.ToolStripSeparator5.Name = "ToolStripSeparator5" + Me.ToolStripSeparator5.Size = New System.Drawing.Size(349, 6) + ' + 'ExportToolStripMenuItem + ' + Me.ExportToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MoviesToolStripMenuItem, Me.TVShowsToolStripMenuItem}) + Me.ExportToolStripMenuItem.Image = Global.Ember_Media_Manager.My.Resources.Resources.modules + Me.ExportToolStripMenuItem.Name = "ExportToolStripMenuItem" + Me.ExportToolStripMenuItem.Size = New System.Drawing.Size(352, 22) + Me.ExportToolStripMenuItem.Text = "Export" + ' + 'MoviesToolStripMenuItem + ' + Me.MoviesToolStripMenuItem.Name = "MoviesToolStripMenuItem" + Me.MoviesToolStripMenuItem.Size = New System.Drawing.Size(123, 22) + Me.MoviesToolStripMenuItem.Text = "Movies" + ' + 'TVShowsToolStripMenuItem + ' + Me.TVShowsToolStripMenuItem.Name = "TVShowsToolStripMenuItem" + Me.TVShowsToolStripMenuItem.Size = New System.Drawing.Size(123, 22) + Me.TVShowsToolStripMenuItem.Text = "TV Shows" + ' + 'DonateToolStripMenuItem + ' + Me.DonateToolStripMenuItem.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.DonateToolStripMenuItem.Image = CType(resources.GetObject("DonateToolStripMenuItem.Image"), System.Drawing.Image) + Me.DonateToolStripMenuItem.Name = "DonateToolStripMenuItem" + Me.DonateToolStripMenuItem.Size = New System.Drawing.Size(73, 20) + Me.DonateToolStripMenuItem.Text = "Donate" + ' + 'ErrorToolStripMenuItem + ' + Me.ErrorToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right + Me.ErrorToolStripMenuItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.ErrorToolStripMenuItem.Image = CType(resources.GetObject("ErrorToolStripMenuItem.Image"), System.Drawing.Image) + Me.ErrorToolStripMenuItem.Name = "ErrorToolStripMenuItem" + Me.ErrorToolStripMenuItem.Size = New System.Drawing.Size(28, 20) + Me.ErrorToolStripMenuItem.ToolTipText = "An Error Has Occurred" + Me.ErrorToolStripMenuItem.Visible = False + ' + 'scMain + ' + Me.scMain.Dock = System.Windows.Forms.DockStyle.Fill + Me.scMain.FixedPanel = System.Windows.Forms.FixedPanel.Panel1 + Me.scMain.Location = New System.Drawing.Point(0, 24) + Me.scMain.Name = "scMain" + ' + 'scMain.Panel1 + ' + Me.scMain.Panel1.BackColor = System.Drawing.Color.Gainsboro + Me.scMain.Panel1.Controls.Add(Me.pnlFilterGenre) + Me.scMain.Panel1.Controls.Add(Me.pnlFilterSource) + Me.scMain.Panel1.Controls.Add(Me.dgvMediaList) + Me.scMain.Panel1.Controls.Add(Me.scTV) + Me.scMain.Panel1.Controls.Add(Me.pnlListTop) + Me.scMain.Panel1.Controls.Add(Me.pnlFilter) + Me.scMain.Panel1.Margin = New System.Windows.Forms.Padding(3) + Me.scMain.Panel1MinSize = 165 + ' + 'scMain.Panel2 + ' + Me.scMain.Panel2.BackColor = System.Drawing.Color.DimGray + Me.scMain.Panel2.Controls.Add(Me.pnlTop) + Me.scMain.Panel2.Controls.Add(Me.pnlCancel) + Me.scMain.Panel2.Controls.Add(Me.pnlAllSeason) + Me.scMain.Panel2.Controls.Add(Me.pbAllSeasonCache) + Me.scMain.Panel2.Controls.Add(Me.pnlNoInfo) + Me.scMain.Panel2.Controls.Add(Me.pnlInfoPanel) + Me.scMain.Panel2.Controls.Add(Me.pnlPoster) + Me.scMain.Panel2.Controls.Add(Me.pbPosterCache) + Me.scMain.Panel2.Controls.Add(Me.pnlMPAA) + Me.scMain.Panel2.Controls.Add(Me.pbFanartCache) + Me.scMain.Panel2.Controls.Add(Me.pbFanart) + Me.scMain.Panel2.Controls.Add(Me.tsMain) + Me.scMain.Panel2.Margin = New System.Windows.Forms.Padding(3) + Me.scMain.Size = New System.Drawing.Size(1465, 782) + Me.scMain.SplitterDistance = 364 + Me.scMain.TabIndex = 7 + Me.scMain.TabStop = False + ' + 'pnlFilterGenre + ' + Me.pnlFilterGenre.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFilterGenre.Controls.Add(Me.clbFilterGenres) + Me.pnlFilterGenre.Controls.Add(Me.lblGFilClose) + Me.pnlFilterGenre.Controls.Add(Me.Label4) + Me.pnlFilterGenre.Location = New System.Drawing.Point(186, 444) + Me.pnlFilterGenre.Name = "pnlFilterGenre" + Me.pnlFilterGenre.Size = New System.Drawing.Size(166, 146) + Me.pnlFilterGenre.TabIndex = 15 + Me.pnlFilterGenre.Visible = False + ' + 'clbFilterGenres + ' + Me.clbFilterGenres.CheckOnClick = True + Me.clbFilterGenres.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.clbFilterGenres.FormattingEnabled = True + Me.clbFilterGenres.Location = New System.Drawing.Point(1, 20) + Me.clbFilterGenres.Name = "clbFilterGenres" + Me.clbFilterGenres.Size = New System.Drawing.Size(162, 123) + Me.clbFilterGenres.TabIndex = 8 + Me.clbFilterGenres.TabStop = False + ' + 'lblGFilClose + ' + Me.lblGFilClose.AutoSize = True + Me.lblGFilClose.BackColor = System.Drawing.Color.DimGray + Me.lblGFilClose.Cursor = System.Windows.Forms.Cursors.Hand + Me.lblGFilClose.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblGFilClose.ForeColor = System.Drawing.Color.White + Me.lblGFilClose.Location = New System.Drawing.Point(130, 2) + Me.lblGFilClose.Name = "lblGFilClose" + Me.lblGFilClose.Size = New System.Drawing.Size(35, 13) + Me.lblGFilClose.TabIndex = 24 + Me.lblGFilClose.Text = "Close" + ' + 'Label4 + ' + Me.Label4.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label4.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.Label4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Label4.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label4.ForeColor = System.Drawing.SystemColors.HighlightText + Me.Label4.Location = New System.Drawing.Point(1, 1) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(162, 17) + Me.Label4.TabIndex = 23 + Me.Label4.Text = "Genres" + Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pnlFilterSource + ' + Me.pnlFilterSource.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFilterSource.Controls.Add(Me.lblSFilClose) + Me.pnlFilterSource.Controls.Add(Me.Label8) + Me.pnlFilterSource.Controls.Add(Me.clbFilterSource) + Me.pnlFilterSource.Location = New System.Drawing.Point(186, 515) + Me.pnlFilterSource.Name = "pnlFilterSource" + Me.pnlFilterSource.Size = New System.Drawing.Size(166, 146) + Me.pnlFilterSource.TabIndex = 16 + Me.pnlFilterSource.Visible = False + ' + 'lblSFilClose + ' + Me.lblSFilClose.AutoSize = True + Me.lblSFilClose.BackColor = System.Drawing.Color.DimGray + Me.lblSFilClose.Cursor = System.Windows.Forms.Cursors.Hand + Me.lblSFilClose.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblSFilClose.ForeColor = System.Drawing.Color.White + Me.lblSFilClose.Location = New System.Drawing.Point(130, 2) + Me.lblSFilClose.Name = "lblSFilClose" + Me.lblSFilClose.Size = New System.Drawing.Size(33, 13) + Me.lblSFilClose.TabIndex = 24 + Me.lblSFilClose.Text = "Close" + ' + 'Label8 + ' + Me.Label8.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label8.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.Label8.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Label8.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label8.ForeColor = System.Drawing.SystemColors.HighlightText + Me.Label8.Location = New System.Drawing.Point(1, 1) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(162, 17) + Me.Label8.TabIndex = 23 + Me.Label8.Text = "Sources" + Me.Label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'clbFilterSource + ' + Me.clbFilterSource.CheckOnClick = True + Me.clbFilterSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.clbFilterSource.FormattingEnabled = True + Me.clbFilterSource.Location = New System.Drawing.Point(1, 20) + Me.clbFilterSource.Name = "clbFilterSource" + Me.clbFilterSource.Size = New System.Drawing.Size(162, 123) + Me.clbFilterSource.TabIndex = 8 + Me.clbFilterSource.TabStop = False + ' + 'dgvMediaList + ' + Me.dgvMediaList.AllowUserToAddRows = False + Me.dgvMediaList.AllowUserToDeleteRows = False + Me.dgvMediaList.AllowUserToResizeRows = False + DataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(CType(CType(230, Byte), Integer), CType(CType(230, Byte), Integer), CType(CType(230, Byte), Integer)) + Me.dgvMediaList.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle1 + Me.dgvMediaList.BackgroundColor = System.Drawing.Color.White + Me.dgvMediaList.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.dgvMediaList.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal + Me.dgvMediaList.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable + Me.dgvMediaList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.dgvMediaList.ContextMenuStrip = Me.mnuMediaList + Me.dgvMediaList.Dock = System.Windows.Forms.DockStyle.Fill + Me.dgvMediaList.GridColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer)) + Me.dgvMediaList.Location = New System.Drawing.Point(0, 56) + Me.dgvMediaList.Name = "dgvMediaList" + Me.dgvMediaList.ReadOnly = True + Me.dgvMediaList.RowHeadersVisible = False + Me.dgvMediaList.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect + Me.dgvMediaList.ShowCellErrors = False + Me.dgvMediaList.ShowRowErrors = False + Me.dgvMediaList.Size = New System.Drawing.Size(364, 546) + Me.dgvMediaList.StandardTab = True + Me.dgvMediaList.TabIndex = 0 + ' + 'mnuMediaList + ' + Me.mnuMediaList.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuTitle, Me.ToolStripSeparator3, Me.cmnuRefresh, Me.cmnuMark, Me.cmnuLock, Me.ToolStripMenuItem1, Me.cmnuEditMovie, Me.cmnuMetaData, Me.GenresToolStripMenuItem, Me.cmnuSep, Me.ScrapingToolStripMenuItem, Me.cmnuRescrape, Me.cmnuSearchNew, Me.cmnuSep2, Me.OpenContainingFolderToolStripMenuItem, Me.ToolStripSeparator1, Me.RemoveToolStripMenuItem}) + Me.mnuMediaList.Name = "mnuMediaList" + Me.mnuMediaList.Size = New System.Drawing.Size(253, 298) + ' + 'cmnuTitle + ' + Me.cmnuTitle.Enabled = False + Me.cmnuTitle.Image = CType(resources.GetObject("cmnuTitle.Image"), System.Drawing.Image) + Me.cmnuTitle.Name = "cmnuTitle" + Me.cmnuTitle.Size = New System.Drawing.Size(252, 22) + Me.cmnuTitle.Text = "Title" + ' + 'ToolStripSeparator3 + ' + Me.ToolStripSeparator3.Name = "ToolStripSeparator3" + Me.ToolStripSeparator3.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuRefresh + ' + Me.cmnuRefresh.Image = CType(resources.GetObject("cmnuRefresh.Image"), System.Drawing.Image) + Me.cmnuRefresh.Name = "cmnuRefresh" + Me.cmnuRefresh.ShortcutKeys = System.Windows.Forms.Keys.F5 + Me.cmnuRefresh.Size = New System.Drawing.Size(252, 22) + Me.cmnuRefresh.Text = "Reload" + ' + 'cmnuMark + ' + Me.cmnuMark.Image = CType(resources.GetObject("cmnuMark.Image"), System.Drawing.Image) + Me.cmnuMark.Name = "cmnuMark" + Me.cmnuMark.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.M), System.Windows.Forms.Keys) + Me.cmnuMark.Size = New System.Drawing.Size(252, 22) + Me.cmnuMark.Text = "Mark" + ' + 'cmnuLock + ' + Me.cmnuLock.Image = CType(resources.GetObject("cmnuLock.Image"), System.Drawing.Image) + Me.cmnuLock.Name = "cmnuLock" + Me.cmnuLock.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.L), System.Windows.Forms.Keys) + Me.cmnuLock.Size = New System.Drawing.Size(252, 22) + Me.cmnuLock.Text = "Lock" + ' + 'ToolStripMenuItem1 + ' + Me.ToolStripMenuItem1.Name = "ToolStripMenuItem1" + Me.ToolStripMenuItem1.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuEditMovie + ' + Me.cmnuEditMovie.Image = CType(resources.GetObject("cmnuEditMovie.Image"), System.Drawing.Image) + Me.cmnuEditMovie.Name = "cmnuEditMovie" + Me.cmnuEditMovie.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.E), System.Windows.Forms.Keys) + Me.cmnuEditMovie.Size = New System.Drawing.Size(252, 22) + Me.cmnuEditMovie.Text = "Edit Movie" + ' + 'cmnuMetaData + ' + Me.cmnuMetaData.Image = CType(resources.GetObject("cmnuMetaData.Image"), System.Drawing.Image) + Me.cmnuMetaData.Name = "cmnuMetaData" + Me.cmnuMetaData.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.D), System.Windows.Forms.Keys) + Me.cmnuMetaData.Size = New System.Drawing.Size(252, 22) + Me.cmnuMetaData.Text = "Edit Meta Data" + ' + 'GenresToolStripMenuItem + ' + Me.GenresToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.LblGenreStripMenuItem2, Me.GenreListToolStripComboBox, Me.AddGenreToolStripMenuItem, Me.SetGenreToolStripMenuItem, Me.RemoveGenreToolStripMenuItem}) + Me.GenresToolStripMenuItem.Image = CType(resources.GetObject("GenresToolStripMenuItem.Image"), System.Drawing.Image) + Me.GenresToolStripMenuItem.Name = "GenresToolStripMenuItem" + Me.GenresToolStripMenuItem.Size = New System.Drawing.Size(252, 22) + Me.GenresToolStripMenuItem.Text = "Genres" + ' + 'LblGenreStripMenuItem2 + ' + Me.LblGenreStripMenuItem2.Enabled = False + Me.LblGenreStripMenuItem2.Name = "LblGenreStripMenuItem2" + Me.LblGenreStripMenuItem2.Size = New System.Drawing.Size(195, 22) + Me.LblGenreStripMenuItem2.Text = ">> Select Genre <<" + ' + 'GenreListToolStripComboBox + ' + Me.GenreListToolStripComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.GenreListToolStripComboBox.FlatStyle = System.Windows.Forms.FlatStyle.Standard + Me.GenreListToolStripComboBox.Name = "GenreListToolStripComboBox" + Me.GenreListToolStripComboBox.Size = New System.Drawing.Size(135, 23) + Me.GenreListToolStripComboBox.Sorted = True + ' + 'AddGenreToolStripMenuItem + ' + Me.AddGenreToolStripMenuItem.Name = "AddGenreToolStripMenuItem" + Me.AddGenreToolStripMenuItem.Size = New System.Drawing.Size(195, 22) + Me.AddGenreToolStripMenuItem.Text = "Add" + ' + 'SetGenreToolStripMenuItem + ' + Me.SetGenreToolStripMenuItem.Name = "SetGenreToolStripMenuItem" + Me.SetGenreToolStripMenuItem.Size = New System.Drawing.Size(195, 22) + Me.SetGenreToolStripMenuItem.Text = "Set" + ' + 'RemoveGenreToolStripMenuItem + ' + Me.RemoveGenreToolStripMenuItem.Name = "RemoveGenreToolStripMenuItem" + Me.RemoveGenreToolStripMenuItem.Size = New System.Drawing.Size(195, 22) + Me.RemoveGenreToolStripMenuItem.Text = "Remove" + ' + 'cmnuSep + ' + Me.cmnuSep.Name = "cmnuSep" + Me.cmnuSep.Size = New System.Drawing.Size(249, 6) + ' + 'ScrapingToolStripMenuItem + ' + Me.ScrapingToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripMenuItem5, Me.ToolStripMenuItem13}) + Me.ScrapingToolStripMenuItem.Image = CType(resources.GetObject("ScrapingToolStripMenuItem.Image"), System.Drawing.Image) + Me.ScrapingToolStripMenuItem.Name = "ScrapingToolStripMenuItem" + Me.ScrapingToolStripMenuItem.Size = New System.Drawing.Size(252, 22) + Me.ScrapingToolStripMenuItem.Text = "(Re)Scrape Selected Movies" + ' + 'ToolStripMenuItem5 + ' + Me.ToolStripMenuItem5.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.SelectAllAutoToolStripMenuItem, Me.SelectNfoAutoToolStripMenuItem, Me.SelectPosterAutoToolStripMenuItem, Me.SelectFanartAutoToolStripMenuItem, Me.SelectExtraAutoToolStripMenuItem, Me.SelectTrailerAutoToolStripMenuItem, Me.SelectMetaAutoToolStripMenuItem}) + Me.ToolStripMenuItem5.Name = "ToolStripMenuItem5" + Me.ToolStripMenuItem5.Size = New System.Drawing.Size(284, 22) + Me.ToolStripMenuItem5.Text = "Automatic (Force Best Match)" + ' + 'SelectAllAutoToolStripMenuItem + ' + Me.SelectAllAutoToolStripMenuItem.Name = "SelectAllAutoToolStripMenuItem" + Me.SelectAllAutoToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectAllAutoToolStripMenuItem.Text = "All Items" + ' + 'SelectNfoAutoToolStripMenuItem + ' + Me.SelectNfoAutoToolStripMenuItem.Name = "SelectNfoAutoToolStripMenuItem" + Me.SelectNfoAutoToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectNfoAutoToolStripMenuItem.Text = "NFO Only" + ' + 'SelectPosterAutoToolStripMenuItem + ' + Me.SelectPosterAutoToolStripMenuItem.Name = "SelectPosterAutoToolStripMenuItem" + Me.SelectPosterAutoToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectPosterAutoToolStripMenuItem.Text = "Poster Only" + ' + 'SelectFanartAutoToolStripMenuItem + ' + Me.SelectFanartAutoToolStripMenuItem.Name = "SelectFanartAutoToolStripMenuItem" + Me.SelectFanartAutoToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectFanartAutoToolStripMenuItem.Text = "Fanart Only" + ' + 'SelectExtraAutoToolStripMenuItem + ' + Me.SelectExtraAutoToolStripMenuItem.Name = "SelectExtraAutoToolStripMenuItem" + Me.SelectExtraAutoToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectExtraAutoToolStripMenuItem.Text = "Extrathumbs Only" + ' + 'SelectTrailerAutoToolStripMenuItem + ' + Me.SelectTrailerAutoToolStripMenuItem.Name = "SelectTrailerAutoToolStripMenuItem" + Me.SelectTrailerAutoToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectTrailerAutoToolStripMenuItem.Text = "Trailer Only" + ' + 'SelectMetaAutoToolStripMenuItem + ' + Me.SelectMetaAutoToolStripMenuItem.Name = "SelectMetaAutoToolStripMenuItem" + Me.SelectMetaAutoToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectMetaAutoToolStripMenuItem.Text = "Meta Data Only" + ' + 'ToolStripMenuItem13 + ' + Me.ToolStripMenuItem13.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.SelectAllAskToolStripMenuItem, Me.SelectNfoAskToolStripMenuItem, Me.SelectPosterÃskToolStripMenuItem, Me.SelectFanartAskToolStripMenuItem, Me.SelectExtraAskToolStripMenuItem, Me.ToolStripAskMenuItem19, Me.SelectMeEtaAskToolStripMenuItem}) + Me.ToolStripMenuItem13.Name = "ToolStripMenuItem13" + Me.ToolStripMenuItem13.Size = New System.Drawing.Size(284, 22) + Me.ToolStripMenuItem13.Text = "Ask (Require Input If No Exact Match)" + ' + 'SelectAllAskToolStripMenuItem + ' + Me.SelectAllAskToolStripMenuItem.Name = "SelectAllAskToolStripMenuItem" + Me.SelectAllAskToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectAllAskToolStripMenuItem.Text = "All Items" + ' + 'SelectNfoAskToolStripMenuItem + ' + Me.SelectNfoAskToolStripMenuItem.Name = "SelectNfoAskToolStripMenuItem" + Me.SelectNfoAskToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectNfoAskToolStripMenuItem.Text = "NFO Only" + ' + 'SelectPosterÃskToolStripMenuItem + ' + Me.SelectPosterÃskToolStripMenuItem.Name = "SelectPosterÃskToolStripMenuItem" + Me.SelectPosterÃskToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectPosterÃskToolStripMenuItem.Text = "Poster Only" + ' + 'SelectFanartAskToolStripMenuItem + ' + Me.SelectFanartAskToolStripMenuItem.Name = "SelectFanartAskToolStripMenuItem" + Me.SelectFanartAskToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectFanartAskToolStripMenuItem.Text = "Fanart Only" + ' + 'SelectExtraAskToolStripMenuItem + ' + Me.SelectExtraAskToolStripMenuItem.Name = "SelectExtraAskToolStripMenuItem" + Me.SelectExtraAskToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectExtraAskToolStripMenuItem.Text = "Extrathumbs Only" + ' + 'ToolStripAskMenuItem19 + ' + Me.ToolStripAskMenuItem19.Name = "ToolStripAskMenuItem19" + Me.ToolStripAskMenuItem19.Size = New System.Drawing.Size(173, 22) + Me.ToolStripAskMenuItem19.Text = "Trailer Only" + ' + 'SelectMeEtaAskToolStripMenuItem + ' + Me.SelectMeEtaAskToolStripMenuItem.Name = "SelectMeEtaAskToolStripMenuItem" + Me.SelectMeEtaAskToolStripMenuItem.Size = New System.Drawing.Size(173, 22) + Me.SelectMeEtaAskToolStripMenuItem.Text = "Meta Data Only" + ' + 'cmnuRescrape + ' + Me.cmnuRescrape.Image = CType(resources.GetObject("cmnuRescrape.Image"), System.Drawing.Image) + Me.cmnuRescrape.Name = "cmnuRescrape" + Me.cmnuRescrape.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.I), System.Windows.Forms.Keys) + Me.cmnuRescrape.Size = New System.Drawing.Size(252, 22) + Me.cmnuRescrape.Text = "(Re)Scrape Movie" + ' + 'cmnuSearchNew + ' + Me.cmnuSearchNew.Image = CType(resources.GetObject("cmnuSearchNew.Image"), System.Drawing.Image) + Me.cmnuSearchNew.Name = "cmnuSearchNew" + Me.cmnuSearchNew.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys) + Me.cmnuSearchNew.Size = New System.Drawing.Size(252, 22) + Me.cmnuSearchNew.Text = "Change Movie" + ' + 'cmnuSep2 + ' + Me.cmnuSep2.Name = "cmnuSep2" + Me.cmnuSep2.Size = New System.Drawing.Size(249, 6) + ' + 'OpenContainingFolderToolStripMenuItem + ' + Me.OpenContainingFolderToolStripMenuItem.Image = CType(resources.GetObject("OpenContainingFolderToolStripMenuItem.Image"), System.Drawing.Image) + Me.OpenContainingFolderToolStripMenuItem.Name = "OpenContainingFolderToolStripMenuItem" + Me.OpenContainingFolderToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) + Me.OpenContainingFolderToolStripMenuItem.Size = New System.Drawing.Size(252, 22) + Me.OpenContainingFolderToolStripMenuItem.Text = "Open Containing Folder" + ' + 'ToolStripSeparator1 + ' + Me.ToolStripSeparator1.Name = "ToolStripSeparator1" + Me.ToolStripSeparator1.Size = New System.Drawing.Size(249, 6) + ' + 'RemoveToolStripMenuItem + ' + Me.RemoveToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.RemoveFromDatabaseToolStripMenuItem, Me.DeleteMovieToolStripMenuItem}) + Me.RemoveToolStripMenuItem.Image = CType(resources.GetObject("RemoveToolStripMenuItem.Image"), System.Drawing.Image) + Me.RemoveToolStripMenuItem.Name = "RemoveToolStripMenuItem" + Me.RemoveToolStripMenuItem.Size = New System.Drawing.Size(252, 22) + Me.RemoveToolStripMenuItem.Text = "Remove" + ' + 'RemoveFromDatabaseToolStripMenuItem + ' + Me.RemoveFromDatabaseToolStripMenuItem.Image = CType(resources.GetObject("RemoveFromDatabaseToolStripMenuItem.Image"), System.Drawing.Image) + Me.RemoveFromDatabaseToolStripMenuItem.Name = "RemoveFromDatabaseToolStripMenuItem" + Me.RemoveFromDatabaseToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Delete + Me.RemoveFromDatabaseToolStripMenuItem.Size = New System.Drawing.Size(236, 22) + Me.RemoveFromDatabaseToolStripMenuItem.Text = "Remove from Database" + ' + 'DeleteMovieToolStripMenuItem + ' + Me.DeleteMovieToolStripMenuItem.Image = CType(resources.GetObject("DeleteMovieToolStripMenuItem.Image"), System.Drawing.Image) + Me.DeleteMovieToolStripMenuItem.Name = "DeleteMovieToolStripMenuItem" + Me.DeleteMovieToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Delete), System.Windows.Forms.Keys) + Me.DeleteMovieToolStripMenuItem.Size = New System.Drawing.Size(236, 22) + Me.DeleteMovieToolStripMenuItem.Text = "Delete Movie" + ' + 'scTV + ' + Me.scTV.BackColor = System.Drawing.Color.Gainsboro + Me.scTV.Dock = System.Windows.Forms.DockStyle.Fill + Me.scTV.Location = New System.Drawing.Point(0, 56) + Me.scTV.Name = "scTV" + Me.scTV.Orientation = System.Windows.Forms.Orientation.Horizontal + ' + 'scTV.Panel1 + ' + Me.scTV.Panel1.BackColor = System.Drawing.Color.Gainsboro + Me.scTV.Panel1.Controls.Add(Me.dgvTVShows) + ' + 'scTV.Panel2 + ' + Me.scTV.Panel2.Controls.Add(Me.SplitContainer2) + Me.scTV.Size = New System.Drawing.Size(364, 546) + Me.scTV.SplitterDistance = 138 + Me.scTV.TabIndex = 3 + Me.scTV.TabStop = False + ' + 'dgvTVShows + ' + Me.dgvTVShows.AllowUserToAddRows = False + Me.dgvTVShows.AllowUserToDeleteRows = False + Me.dgvTVShows.AllowUserToResizeRows = False + DataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(CType(CType(249, Byte), Integer), CType(CType(249, Byte), Integer), CType(CType(249, Byte), Integer)) + Me.dgvTVShows.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle2 + Me.dgvTVShows.BackgroundColor = System.Drawing.Color.White + Me.dgvTVShows.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.dgvTVShows.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal + Me.dgvTVShows.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable + Me.dgvTVShows.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.dgvTVShows.ContextMenuStrip = Me.mnuShows + Me.dgvTVShows.Dock = System.Windows.Forms.DockStyle.Fill + Me.dgvTVShows.GridColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer)) + Me.dgvTVShows.Location = New System.Drawing.Point(0, 0) + Me.dgvTVShows.Name = "dgvTVShows" + Me.dgvTVShows.ReadOnly = True + Me.dgvTVShows.RowHeadersVisible = False + Me.dgvTVShows.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect + Me.dgvTVShows.ShowCellErrors = False + Me.dgvTVShows.ShowRowErrors = False + Me.dgvTVShows.Size = New System.Drawing.Size(364, 138) + Me.dgvTVShows.StandardTab = True + Me.dgvTVShows.TabIndex = 0 + ' + 'mnuShows + ' + Me.mnuShows.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuShowTitle, Me.ToolStripMenuItem2, Me.cmnuReloadShow, Me.cmnuMarkShow, Me.cmnuLockShow, Me.ToolStripSeparator8, Me.cmnuEditShow, Me.ToolStripSeparator7, Me.cmnuRescrapeShow, Me.cmnuChangeShow, Me.ToolStripSeparator11, Me.cmnuShowOpenFolder, Me.ToolStripSeparator20, Me.RemoveShowToolStripMenuItem}) + Me.mnuShows.Name = "mnuShows" + Me.mnuShows.Size = New System.Drawing.Size(253, 232) + ' + 'cmnuShowTitle + ' + Me.cmnuShowTitle.Enabled = False + Me.cmnuShowTitle.Image = CType(resources.GetObject("cmnuShowTitle.Image"), System.Drawing.Image) + Me.cmnuShowTitle.Name = "cmnuShowTitle" + Me.cmnuShowTitle.Size = New System.Drawing.Size(252, 22) + Me.cmnuShowTitle.Text = "Title" + ' + 'ToolStripMenuItem2 + ' + Me.ToolStripMenuItem2.Name = "ToolStripMenuItem2" + Me.ToolStripMenuItem2.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuReloadShow + ' + Me.cmnuReloadShow.Image = CType(resources.GetObject("cmnuReloadShow.Image"), System.Drawing.Image) + Me.cmnuReloadShow.Name = "cmnuReloadShow" + Me.cmnuReloadShow.ShortcutKeys = System.Windows.Forms.Keys.F5 + Me.cmnuReloadShow.Size = New System.Drawing.Size(252, 22) + Me.cmnuReloadShow.Text = "Reload" + ' + 'cmnuMarkShow + ' + Me.cmnuMarkShow.Image = CType(resources.GetObject("cmnuMarkShow.Image"), System.Drawing.Image) + Me.cmnuMarkShow.Name = "cmnuMarkShow" + Me.cmnuMarkShow.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.M), System.Windows.Forms.Keys) + Me.cmnuMarkShow.Size = New System.Drawing.Size(252, 22) + Me.cmnuMarkShow.Text = "Mark" + ' + 'cmnuLockShow + ' + Me.cmnuLockShow.Image = CType(resources.GetObject("cmnuLockShow.Image"), System.Drawing.Image) + Me.cmnuLockShow.Name = "cmnuLockShow" + Me.cmnuLockShow.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.L), System.Windows.Forms.Keys) + Me.cmnuLockShow.Size = New System.Drawing.Size(252, 22) + Me.cmnuLockShow.Text = "Lock" + ' + 'ToolStripSeparator8 + ' + Me.ToolStripSeparator8.Name = "ToolStripSeparator8" + Me.ToolStripSeparator8.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuEditShow + ' + Me.cmnuEditShow.Image = CType(resources.GetObject("cmnuEditShow.Image"), System.Drawing.Image) + Me.cmnuEditShow.Name = "cmnuEditShow" + Me.cmnuEditShow.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.E), System.Windows.Forms.Keys) + Me.cmnuEditShow.Size = New System.Drawing.Size(252, 22) + Me.cmnuEditShow.Text = "Edit Show" + ' + 'ToolStripSeparator7 + ' + Me.ToolStripSeparator7.Name = "ToolStripSeparator7" + Me.ToolStripSeparator7.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuRescrapeShow + ' + Me.cmnuRescrapeShow.Image = CType(resources.GetObject("cmnuRescrapeShow.Image"), System.Drawing.Image) + Me.cmnuRescrapeShow.Name = "cmnuRescrapeShow" + Me.cmnuRescrapeShow.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.I), System.Windows.Forms.Keys) + Me.cmnuRescrapeShow.Size = New System.Drawing.Size(252, 22) + Me.cmnuRescrapeShow.Text = "Re-scrape theTVDB" + ' + 'cmnuChangeShow + ' + Me.cmnuChangeShow.Image = CType(resources.GetObject("cmnuChangeShow.Image"), System.Drawing.Image) + Me.cmnuChangeShow.Name = "cmnuChangeShow" + Me.cmnuChangeShow.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys) + Me.cmnuChangeShow.Size = New System.Drawing.Size(252, 22) + Me.cmnuChangeShow.Text = "Change Show" + ' + 'ToolStripSeparator11 + ' + Me.ToolStripSeparator11.Name = "ToolStripSeparator11" + Me.ToolStripSeparator11.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuShowOpenFolder + ' + Me.cmnuShowOpenFolder.Image = CType(resources.GetObject("cmnuShowOpenFolder.Image"), System.Drawing.Image) + Me.cmnuShowOpenFolder.Name = "cmnuShowOpenFolder" + Me.cmnuShowOpenFolder.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) + Me.cmnuShowOpenFolder.Size = New System.Drawing.Size(252, 22) + Me.cmnuShowOpenFolder.Text = "Open Containing Folder" + ' + 'ToolStripSeparator20 + ' + Me.ToolStripSeparator20.Name = "ToolStripSeparator20" + Me.ToolStripSeparator20.Size = New System.Drawing.Size(249, 6) + ' + 'RemoveShowToolStripMenuItem + ' + Me.RemoveShowToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuRemoveTVShow, Me.cmnuDeleteTVShow}) + Me.RemoveShowToolStripMenuItem.Image = CType(resources.GetObject("RemoveShowToolStripMenuItem.Image"), System.Drawing.Image) + Me.RemoveShowToolStripMenuItem.Name = "RemoveShowToolStripMenuItem" + Me.RemoveShowToolStripMenuItem.Size = New System.Drawing.Size(252, 22) + Me.RemoveShowToolStripMenuItem.Text = "Remove" + ' + 'cmnuRemoveTVShow + ' + Me.cmnuRemoveTVShow.Image = CType(resources.GetObject("cmnuRemoveTVShow.Image"), System.Drawing.Image) + Me.cmnuRemoveTVShow.Name = "cmnuRemoveTVShow" + Me.cmnuRemoveTVShow.ShortcutKeys = System.Windows.Forms.Keys.Delete + Me.cmnuRemoveTVShow.Size = New System.Drawing.Size(236, 22) + Me.cmnuRemoveTVShow.Text = "Remove from Database" + ' + 'cmnuDeleteTVShow + ' + Me.cmnuDeleteTVShow.Image = CType(resources.GetObject("cmnuDeleteTVShow.Image"), System.Drawing.Image) + Me.cmnuDeleteTVShow.Name = "cmnuDeleteTVShow" + Me.cmnuDeleteTVShow.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Delete), System.Windows.Forms.Keys) + Me.cmnuDeleteTVShow.Size = New System.Drawing.Size(236, 22) + Me.cmnuDeleteTVShow.Text = "Delete TV Show" + ' + 'SplitContainer2 + ' + Me.SplitContainer2.Dock = System.Windows.Forms.DockStyle.Fill + Me.SplitContainer2.Location = New System.Drawing.Point(0, 0) + Me.SplitContainer2.Name = "SplitContainer2" + Me.SplitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal + ' + 'SplitContainer2.Panel1 + ' + Me.SplitContainer2.Panel1.BackColor = System.Drawing.Color.Gainsboro + Me.SplitContainer2.Panel1.Controls.Add(Me.dgvTVSeasons) + ' + 'SplitContainer2.Panel2 + ' + Me.SplitContainer2.Panel2.Controls.Add(Me.dgvTVEpisodes) + Me.SplitContainer2.Size = New System.Drawing.Size(364, 404) + Me.SplitContainer2.SplitterDistance = 138 + Me.SplitContainer2.TabIndex = 0 + Me.SplitContainer2.TabStop = False + ' + 'dgvTVSeasons + ' + Me.dgvTVSeasons.AllowUserToAddRows = False + Me.dgvTVSeasons.AllowUserToDeleteRows = False + Me.dgvTVSeasons.AllowUserToResizeRows = False + DataGridViewCellStyle3.BackColor = System.Drawing.Color.FromArgb(CType(CType(249, Byte), Integer), CType(CType(249, Byte), Integer), CType(CType(249, Byte), Integer)) + Me.dgvTVSeasons.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle3 + Me.dgvTVSeasons.BackgroundColor = System.Drawing.Color.White + Me.dgvTVSeasons.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.dgvTVSeasons.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal + Me.dgvTVSeasons.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable + Me.dgvTVSeasons.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.dgvTVSeasons.ContextMenuStrip = Me.mnuSeasons + Me.dgvTVSeasons.Dock = System.Windows.Forms.DockStyle.Fill + Me.dgvTVSeasons.GridColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer)) + Me.dgvTVSeasons.Location = New System.Drawing.Point(0, 0) + Me.dgvTVSeasons.Name = "dgvTVSeasons" + Me.dgvTVSeasons.ReadOnly = True + Me.dgvTVSeasons.RowHeadersVisible = False + Me.dgvTVSeasons.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect + Me.dgvTVSeasons.ShowCellErrors = False + Me.dgvTVSeasons.ShowRowErrors = False + Me.dgvTVSeasons.Size = New System.Drawing.Size(364, 138) + Me.dgvTVSeasons.StandardTab = True + Me.dgvTVSeasons.TabIndex = 0 + ' + 'mnuSeasons + ' + Me.mnuSeasons.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuSeasonTitle, Me.ToolStripSeparator17, Me.cmnuReloadSeason, Me.cmnuMarkSeason, Me.cmnuLockSeason, Me.ToolStripSeparator16, Me.cmnuSeasonChangeImages, Me.ToolStripSeparator14, Me.cmnuSeasonRescrape, Me.ToolStripSeparator15, Me.cmnuSeasonOpenFolder, Me.ToolStripSeparator27, Me.cmnuSeasonRemove}) + Me.mnuSeasons.Name = "mnuSeasons" + Me.mnuSeasons.Size = New System.Drawing.Size(253, 210) + ' + 'cmnuSeasonTitle + ' + Me.cmnuSeasonTitle.Enabled = False + Me.cmnuSeasonTitle.Image = CType(resources.GetObject("cmnuSeasonTitle.Image"), System.Drawing.Image) + Me.cmnuSeasonTitle.Name = "cmnuSeasonTitle" + Me.cmnuSeasonTitle.Size = New System.Drawing.Size(252, 22) + Me.cmnuSeasonTitle.Text = "Title" + ' + 'ToolStripSeparator17 + ' + Me.ToolStripSeparator17.Name = "ToolStripSeparator17" + Me.ToolStripSeparator17.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuReloadSeason + ' + Me.cmnuReloadSeason.Image = CType(resources.GetObject("cmnuReloadSeason.Image"), System.Drawing.Image) + Me.cmnuReloadSeason.Name = "cmnuReloadSeason" + Me.cmnuReloadSeason.ShortcutKeys = System.Windows.Forms.Keys.F5 + Me.cmnuReloadSeason.Size = New System.Drawing.Size(252, 22) + Me.cmnuReloadSeason.Text = "Reload" + ' + 'cmnuMarkSeason + ' + Me.cmnuMarkSeason.Image = CType(resources.GetObject("cmnuMarkSeason.Image"), System.Drawing.Image) + Me.cmnuMarkSeason.Name = "cmnuMarkSeason" + Me.cmnuMarkSeason.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.M), System.Windows.Forms.Keys) + Me.cmnuMarkSeason.Size = New System.Drawing.Size(252, 22) + Me.cmnuMarkSeason.Text = "Mark" + ' + 'cmnuLockSeason + ' + Me.cmnuLockSeason.Image = CType(resources.GetObject("cmnuLockSeason.Image"), System.Drawing.Image) + Me.cmnuLockSeason.Name = "cmnuLockSeason" + Me.cmnuLockSeason.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.L), System.Windows.Forms.Keys) + Me.cmnuLockSeason.Size = New System.Drawing.Size(252, 22) + Me.cmnuLockSeason.Text = "Lock" + ' + 'ToolStripSeparator16 + ' + Me.ToolStripSeparator16.Name = "ToolStripSeparator16" + Me.ToolStripSeparator16.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuSeasonChangeImages + ' + Me.cmnuSeasonChangeImages.Image = CType(resources.GetObject("cmnuSeasonChangeImages.Image"), System.Drawing.Image) + Me.cmnuSeasonChangeImages.Name = "cmnuSeasonChangeImages" + Me.cmnuSeasonChangeImages.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.E), System.Windows.Forms.Keys) + Me.cmnuSeasonChangeImages.Size = New System.Drawing.Size(252, 22) + Me.cmnuSeasonChangeImages.Text = "Change Images" + ' + 'ToolStripSeparator14 + ' + Me.ToolStripSeparator14.Name = "ToolStripSeparator14" + Me.ToolStripSeparator14.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuSeasonRescrape + ' + Me.cmnuSeasonRescrape.Image = CType(resources.GetObject("cmnuSeasonRescrape.Image"), System.Drawing.Image) + Me.cmnuSeasonRescrape.Name = "cmnuSeasonRescrape" + Me.cmnuSeasonRescrape.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.I), System.Windows.Forms.Keys) + Me.cmnuSeasonRescrape.Size = New System.Drawing.Size(252, 22) + Me.cmnuSeasonRescrape.Text = "Re-scrape theTVDB" + ' + 'ToolStripSeparator15 + ' + Me.ToolStripSeparator15.Name = "ToolStripSeparator15" + Me.ToolStripSeparator15.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuSeasonOpenFolder + ' + Me.cmnuSeasonOpenFolder.Image = CType(resources.GetObject("cmnuSeasonOpenFolder.Image"), System.Drawing.Image) + Me.cmnuSeasonOpenFolder.Name = "cmnuSeasonOpenFolder" + Me.cmnuSeasonOpenFolder.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) + Me.cmnuSeasonOpenFolder.Size = New System.Drawing.Size(252, 22) + Me.cmnuSeasonOpenFolder.Text = "Open Contianing Folder" + ' + 'ToolStripSeparator27 + ' + Me.ToolStripSeparator27.Name = "ToolStripSeparator27" + Me.ToolStripSeparator27.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuSeasonRemove + ' + Me.cmnuSeasonRemove.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuRemoveSeasonFromDB, Me.cmnuDeleteSeason}) + Me.cmnuSeasonRemove.Image = CType(resources.GetObject("cmnuSeasonRemove.Image"), System.Drawing.Image) + Me.cmnuSeasonRemove.Name = "cmnuSeasonRemove" + Me.cmnuSeasonRemove.Size = New System.Drawing.Size(252, 22) + Me.cmnuSeasonRemove.Text = "Remove" + ' + 'cmnuRemoveSeasonFromDB + ' + Me.cmnuRemoveSeasonFromDB.Image = CType(resources.GetObject("cmnuRemoveSeasonFromDB.Image"), System.Drawing.Image) + Me.cmnuRemoveSeasonFromDB.Name = "cmnuRemoveSeasonFromDB" + Me.cmnuRemoveSeasonFromDB.ShortcutKeys = System.Windows.Forms.Keys.Delete + Me.cmnuRemoveSeasonFromDB.Size = New System.Drawing.Size(236, 22) + Me.cmnuRemoveSeasonFromDB.Text = "Remove from Database" + ' + 'cmnuDeleteSeason + ' + Me.cmnuDeleteSeason.Image = CType(resources.GetObject("cmnuDeleteSeason.Image"), System.Drawing.Image) + Me.cmnuDeleteSeason.Name = "cmnuDeleteSeason" + Me.cmnuDeleteSeason.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Delete), System.Windows.Forms.Keys) + Me.cmnuDeleteSeason.Size = New System.Drawing.Size(236, 22) + Me.cmnuDeleteSeason.Text = "Delete Season" + ' + 'dgvTVEpisodes + ' + Me.dgvTVEpisodes.AllowUserToAddRows = False + Me.dgvTVEpisodes.AllowUserToDeleteRows = False + Me.dgvTVEpisodes.AllowUserToResizeRows = False + DataGridViewCellStyle4.BackColor = System.Drawing.Color.FromArgb(CType(CType(249, Byte), Integer), CType(CType(249, Byte), Integer), CType(CType(249, Byte), Integer)) + Me.dgvTVEpisodes.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle4 + Me.dgvTVEpisodes.BackgroundColor = System.Drawing.Color.White + Me.dgvTVEpisodes.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.dgvTVEpisodes.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal + Me.dgvTVEpisodes.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable + Me.dgvTVEpisodes.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.dgvTVEpisodes.ContextMenuStrip = Me.mnuEpisodes + Me.dgvTVEpisodes.Dock = System.Windows.Forms.DockStyle.Fill + Me.dgvTVEpisodes.GridColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer), CType(CType(240, Byte), Integer)) + Me.dgvTVEpisodes.Location = New System.Drawing.Point(0, 0) + Me.dgvTVEpisodes.Name = "dgvTVEpisodes" + Me.dgvTVEpisodes.ReadOnly = True + Me.dgvTVEpisodes.RowHeadersVisible = False + Me.dgvTVEpisodes.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect + Me.dgvTVEpisodes.ShowCellErrors = False + Me.dgvTVEpisodes.ShowRowErrors = False + Me.dgvTVEpisodes.Size = New System.Drawing.Size(364, 262) + Me.dgvTVEpisodes.StandardTab = True + Me.dgvTVEpisodes.TabIndex = 0 + ' + 'mnuEpisodes + ' + Me.mnuEpisodes.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuEpTitle, Me.ToolStripSeparator6, Me.cmnuReloadEp, Me.cmnuMarkEp, Me.cmnuLockEp, Me.ToolStripSeparator9, Me.cmnuEditEpisode, Me.ToolStripSeparator10, Me.cmnuRescrapeEp, Me.cmnuChangeEp, Me.ToolStripSeparator12, Me.cmnuEpOpenFolder, Me.ToolStripSeparator28, Me.RemoveEpToolStripMenuItem}) + Me.mnuEpisodes.Name = "mnuEpisodes" + Me.mnuEpisodes.Size = New System.Drawing.Size(253, 232) + ' + 'cmnuEpTitle + ' + Me.cmnuEpTitle.Enabled = False + Me.cmnuEpTitle.Image = CType(resources.GetObject("cmnuEpTitle.Image"), System.Drawing.Image) + Me.cmnuEpTitle.Name = "cmnuEpTitle" + Me.cmnuEpTitle.Size = New System.Drawing.Size(252, 22) + Me.cmnuEpTitle.Text = "Title" + ' + 'ToolStripSeparator6 + ' + Me.ToolStripSeparator6.Name = "ToolStripSeparator6" + Me.ToolStripSeparator6.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuReloadEp + ' + Me.cmnuReloadEp.Image = CType(resources.GetObject("cmnuReloadEp.Image"), System.Drawing.Image) + Me.cmnuReloadEp.Name = "cmnuReloadEp" + Me.cmnuReloadEp.ShortcutKeys = System.Windows.Forms.Keys.F5 + Me.cmnuReloadEp.Size = New System.Drawing.Size(252, 22) + Me.cmnuReloadEp.Text = "Reload" + ' + 'cmnuMarkEp + ' + Me.cmnuMarkEp.Image = CType(resources.GetObject("cmnuMarkEp.Image"), System.Drawing.Image) + Me.cmnuMarkEp.Name = "cmnuMarkEp" + Me.cmnuMarkEp.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.M), System.Windows.Forms.Keys) + Me.cmnuMarkEp.Size = New System.Drawing.Size(252, 22) + Me.cmnuMarkEp.Text = "Mark" + ' + 'cmnuLockEp + ' + Me.cmnuLockEp.Image = CType(resources.GetObject("cmnuLockEp.Image"), System.Drawing.Image) + Me.cmnuLockEp.Name = "cmnuLockEp" + Me.cmnuLockEp.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.L), System.Windows.Forms.Keys) + Me.cmnuLockEp.Size = New System.Drawing.Size(252, 22) + Me.cmnuLockEp.Text = "Lock" + ' + 'ToolStripSeparator9 + ' + Me.ToolStripSeparator9.Name = "ToolStripSeparator9" + Me.ToolStripSeparator9.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuEditEpisode + ' + Me.cmnuEditEpisode.Image = CType(resources.GetObject("cmnuEditEpisode.Image"), System.Drawing.Image) + Me.cmnuEditEpisode.Name = "cmnuEditEpisode" + Me.cmnuEditEpisode.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.E), System.Windows.Forms.Keys) + Me.cmnuEditEpisode.Size = New System.Drawing.Size(252, 22) + Me.cmnuEditEpisode.Text = "Edit Episode" + ' + 'ToolStripSeparator10 + ' + Me.ToolStripSeparator10.Name = "ToolStripSeparator10" + Me.ToolStripSeparator10.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuRescrapeEp + ' + Me.cmnuRescrapeEp.Image = CType(resources.GetObject("cmnuRescrapeEp.Image"), System.Drawing.Image) + Me.cmnuRescrapeEp.Name = "cmnuRescrapeEp" + Me.cmnuRescrapeEp.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.I), System.Windows.Forms.Keys) + Me.cmnuRescrapeEp.Size = New System.Drawing.Size(252, 22) + Me.cmnuRescrapeEp.Text = "Re-scrape theTVDB" + ' + 'cmnuChangeEp + ' + Me.cmnuChangeEp.Image = CType(resources.GetObject("cmnuChangeEp.Image"), System.Drawing.Image) + Me.cmnuChangeEp.Name = "cmnuChangeEp" + Me.cmnuChangeEp.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys) + Me.cmnuChangeEp.Size = New System.Drawing.Size(252, 22) + Me.cmnuChangeEp.Text = "Change Episode" + ' + 'ToolStripSeparator12 + ' + Me.ToolStripSeparator12.Name = "ToolStripSeparator12" + Me.ToolStripSeparator12.Size = New System.Drawing.Size(249, 6) + ' + 'cmnuEpOpenFolder + ' + Me.cmnuEpOpenFolder.Image = CType(resources.GetObject("cmnuEpOpenFolder.Image"), System.Drawing.Image) + Me.cmnuEpOpenFolder.Name = "cmnuEpOpenFolder" + Me.cmnuEpOpenFolder.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) + Me.cmnuEpOpenFolder.Size = New System.Drawing.Size(252, 22) + Me.cmnuEpOpenFolder.Text = "Open Contianing Folder" + ' + 'ToolStripSeparator28 + ' + Me.ToolStripSeparator28.Name = "ToolStripSeparator28" + Me.ToolStripSeparator28.Size = New System.Drawing.Size(249, 6) + ' + 'RemoveEpToolStripMenuItem + ' + Me.RemoveEpToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuRemoveTVEp, Me.cmnuDeleteTVEp}) + Me.RemoveEpToolStripMenuItem.Image = CType(resources.GetObject("RemoveEpToolStripMenuItem.Image"), System.Drawing.Image) + Me.RemoveEpToolStripMenuItem.Name = "RemoveEpToolStripMenuItem" + Me.RemoveEpToolStripMenuItem.Size = New System.Drawing.Size(252, 22) + Me.RemoveEpToolStripMenuItem.Text = "Remove" + ' + 'cmnuRemoveTVEp + ' + Me.cmnuRemoveTVEp.Image = CType(resources.GetObject("cmnuRemoveTVEp.Image"), System.Drawing.Image) + Me.cmnuRemoveTVEp.Name = "cmnuRemoveTVEp" + Me.cmnuRemoveTVEp.ShortcutKeys = System.Windows.Forms.Keys.Delete + Me.cmnuRemoveTVEp.Size = New System.Drawing.Size(236, 22) + Me.cmnuRemoveTVEp.Text = "Remove from Database" + ' + 'cmnuDeleteTVEp + ' + Me.cmnuDeleteTVEp.Image = CType(resources.GetObject("cmnuDeleteTVEp.Image"), System.Drawing.Image) + Me.cmnuDeleteTVEp.Name = "cmnuDeleteTVEp" + Me.cmnuDeleteTVEp.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Delete), System.Windows.Forms.Keys) + Me.cmnuDeleteTVEp.Size = New System.Drawing.Size(236, 22) + Me.cmnuDeleteTVEp.Text = "Delete Episode" + ' + 'pnlListTop + ' + Me.pnlListTop.Controls.Add(Me.btnMarkAll) + Me.pnlListTop.Controls.Add(Me.pnlSearch) + Me.pnlListTop.Controls.Add(Me.tabsMain) + Me.pnlListTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlListTop.Location = New System.Drawing.Point(0, 0) + Me.pnlListTop.Name = "pnlListTop" + Me.pnlListTop.Size = New System.Drawing.Size(364, 56) + Me.pnlListTop.TabIndex = 14 + ' + 'btnMarkAll + ' + Me.btnMarkAll.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnMarkAll.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnMarkAll.Image = CType(resources.GetObject("btnMarkAll.Image"), System.Drawing.Image) + Me.btnMarkAll.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnMarkAll.Location = New System.Drawing.Point(254, 1) + Me.btnMarkAll.Name = "btnMarkAll" + Me.btnMarkAll.Size = New System.Drawing.Size(109, 21) + Me.btnMarkAll.TabIndex = 1 + Me.btnMarkAll.Text = "Mark All" + Me.btnMarkAll.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnMarkAll.UseVisualStyleBackColor = True + ' + 'pnlSearch + ' + Me.pnlSearch.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.pnlSearch.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlSearch.Controls.Add(Me.cbSearch) + Me.pnlSearch.Controls.Add(Me.picSearch) + Me.pnlSearch.Controls.Add(Me.txtSearch) + Me.pnlSearch.Location = New System.Drawing.Point(0, 23) + Me.pnlSearch.Name = "pnlSearch" + Me.pnlSearch.Size = New System.Drawing.Size(364, 33) + Me.pnlSearch.TabIndex = 0 + ' + 'cbSearch + ' + Me.cbSearch.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.cbSearch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbSearch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.cbSearch.FormattingEnabled = True + Me.cbSearch.Location = New System.Drawing.Point(253, 6) + Me.cbSearch.Name = "cbSearch" + Me.cbSearch.Size = New System.Drawing.Size(83, 21) + Me.cbSearch.TabIndex = 1 + ' + 'picSearch + ' + Me.picSearch.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.picSearch.Image = CType(resources.GetObject("picSearch.Image"), System.Drawing.Image) + Me.picSearch.Location = New System.Drawing.Point(340, 8) + Me.picSearch.Name = "picSearch" + Me.picSearch.Size = New System.Drawing.Size(16, 16) + Me.picSearch.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.picSearch.TabIndex = 1 + Me.picSearch.TabStop = False + ' + 'txtSearch + ' + Me.txtSearch.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.txtSearch.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtSearch.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.txtSearch.Location = New System.Drawing.Point(7, 6) + Me.txtSearch.Name = "txtSearch" + Me.txtSearch.Size = New System.Drawing.Size(242, 22) + Me.txtSearch.TabIndex = 0 + ' + 'tabsMain + ' + Me.tabsMain.Controls.Add(Me.tabMovies) + Me.tabsMain.Controls.Add(Me.tabTV) + Me.tabsMain.Dock = System.Windows.Forms.DockStyle.Top + Me.tabsMain.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.tabsMain.Location = New System.Drawing.Point(0, 0) + Me.tabsMain.Name = "tabsMain" + Me.tabsMain.SelectedIndex = 0 + Me.tabsMain.Size = New System.Drawing.Size(364, 29) + Me.tabsMain.TabIndex = 0 + Me.tabsMain.TabStop = False + ' + 'tabMovies + ' + Me.tabMovies.Location = New System.Drawing.Point(4, 22) + Me.tabMovies.Name = "tabMovies" + Me.tabMovies.Padding = New System.Windows.Forms.Padding(3) + Me.tabMovies.Size = New System.Drawing.Size(356, 3) + Me.tabMovies.TabIndex = 0 + Me.tabMovies.Text = "Movies" + Me.tabMovies.UseVisualStyleBackColor = True + ' + 'tabTV + ' + Me.tabTV.Location = New System.Drawing.Point(4, 22) + Me.tabTV.Name = "tabTV" + Me.tabTV.Padding = New System.Windows.Forms.Padding(3) + Me.tabTV.Size = New System.Drawing.Size(356, 3) + Me.tabTV.TabIndex = 1 + Me.tabTV.Text = "TV Shows" + Me.tabTV.UseVisualStyleBackColor = True + ' + 'pnlFilter + ' + Me.pnlFilter.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlFilter.Controls.Add(Me.GroupBox1) + Me.pnlFilter.Controls.Add(Me.btnClearFilters) + Me.pnlFilter.Controls.Add(Me.GroupBox3) + Me.pnlFilter.Controls.Add(Me.gbSpecific) + Me.pnlFilter.Controls.Add(Me.btnFilterDown) + Me.pnlFilter.Controls.Add(Me.btnFilterUp) + Me.pnlFilter.Controls.Add(Me.lblFilter) + Me.pnlFilter.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlFilter.Location = New System.Drawing.Point(0, 602) + Me.pnlFilter.Name = "pnlFilter" + Me.pnlFilter.Size = New System.Drawing.Size(364, 180) + Me.pnlFilter.TabIndex = 12 + Me.pnlFilter.Visible = False + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.btnIMDBRating) + Me.GroupBox1.Controls.Add(Me.btnSortTitle) + Me.GroupBox1.Controls.Add(Me.btnSortDate) + Me.GroupBox1.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(3, 81) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(131, 77) + Me.GroupBox1.TabIndex = 4 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Extra Sorting" + ' + 'btnIMDBRating + ' + Me.btnIMDBRating.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnIMDBRating.Image = Global.Ember_Media_Manager.My.Resources.Resources.desc + Me.btnIMDBRating.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnIMDBRating.Location = New System.Drawing.Point(7, 53) + Me.btnIMDBRating.Name = "btnIMDBRating" + Me.btnIMDBRating.Size = New System.Drawing.Size(117, 21) + Me.btnIMDBRating.TabIndex = 2 + Me.btnIMDBRating.Text = "IMDB Rating" + Me.btnIMDBRating.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnIMDBRating.UseVisualStyleBackColor = True + ' + 'btnSortTitle + ' + Me.btnSortTitle.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnSortTitle.Image = Global.Ember_Media_Manager.My.Resources.Resources.desc + Me.btnSortTitle.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnSortTitle.Location = New System.Drawing.Point(7, 33) + Me.btnSortTitle.Name = "btnSortTitle" + Me.btnSortTitle.Size = New System.Drawing.Size(117, 21) + Me.btnSortTitle.TabIndex = 1 + Me.btnSortTitle.Text = "Sort Title" + Me.btnSortTitle.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnSortTitle.UseVisualStyleBackColor = True + ' + 'btnSortDate + ' + Me.btnSortDate.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnSortDate.Image = Global.Ember_Media_Manager.My.Resources.Resources.desc + Me.btnSortDate.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnSortDate.Location = New System.Drawing.Point(7, 13) + Me.btnSortDate.Name = "btnSortDate" + Me.btnSortDate.Size = New System.Drawing.Size(117, 21) + Me.btnSortDate.TabIndex = 0 + Me.btnSortDate.Text = "Date Added" + Me.btnSortDate.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnSortDate.UseVisualStyleBackColor = True + ' + 'btnClearFilters + ' + Me.btnClearFilters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnClearFilters.Image = CType(resources.GetObject("btnClearFilters.Image"), System.Drawing.Image) + Me.btnClearFilters.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnClearFilters.Location = New System.Drawing.Point(22, 160) + Me.btnClearFilters.Name = "btnClearFilters" + Me.btnClearFilters.Size = New System.Drawing.Size(92, 20) + Me.btnClearFilters.TabIndex = 5 + Me.btnClearFilters.Text = "Clear Filters" + Me.btnClearFilters.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnClearFilters.UseVisualStyleBackColor = True + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.chkFilterTolerance) + Me.GroupBox3.Controls.Add(Me.chkFilterMissing) + Me.GroupBox3.Controls.Add(Me.chkFilterDupe) + Me.GroupBox3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(3, 22) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(131, 59) + Me.GroupBox3.TabIndex = 3 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "General" + ' + 'chkFilterTolerance + ' + Me.chkFilterTolerance.AutoSize = True + Me.chkFilterTolerance.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkFilterTolerance.Location = New System.Drawing.Point(7, 41) + Me.chkFilterTolerance.Name = "chkFilterTolerance" + Me.chkFilterTolerance.Size = New System.Drawing.Size(112, 17) + Me.chkFilterTolerance.TabIndex = 2 + Me.chkFilterTolerance.Text = "Out of Tolerance" + Me.chkFilterTolerance.UseVisualStyleBackColor = True + ' + 'chkFilterMissing + ' + Me.chkFilterMissing.AutoSize = True + Me.chkFilterMissing.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkFilterMissing.Location = New System.Drawing.Point(7, 27) + Me.chkFilterMissing.Name = "chkFilterMissing" + Me.chkFilterMissing.Size = New System.Drawing.Size(96, 17) + Me.chkFilterMissing.TabIndex = 1 + Me.chkFilterMissing.Text = "Missing Items" + Me.chkFilterMissing.UseVisualStyleBackColor = True + ' + 'chkFilterDupe + ' + Me.chkFilterDupe.AutoSize = True + Me.chkFilterDupe.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkFilterDupe.Location = New System.Drawing.Point(7, 13) + Me.chkFilterDupe.Name = "chkFilterDupe" + Me.chkFilterDupe.Size = New System.Drawing.Size(80, 17) + Me.chkFilterDupe.TabIndex = 0 + Me.chkFilterDupe.Text = "Duplicates" + Me.chkFilterDupe.UseVisualStyleBackColor = True + ' + 'gbSpecific + ' + Me.gbSpecific.Controls.Add(Me.txtFilterSource) + Me.gbSpecific.Controls.Add(Me.Label6) + Me.gbSpecific.Controls.Add(Me.cbFilterFileSource) + Me.gbSpecific.Controls.Add(Me.chkFilterLock) + Me.gbSpecific.Controls.Add(Me.GroupBox2) + Me.gbSpecific.Controls.Add(Me.chkFilterNew) + Me.gbSpecific.Controls.Add(Me.cbFilterYear) + Me.gbSpecific.Controls.Add(Me.chkFilterMark) + Me.gbSpecific.Controls.Add(Me.cbFilterYearMod) + Me.gbSpecific.Controls.Add(Me.Label5) + Me.gbSpecific.Controls.Add(Me.txtFilterGenre) + Me.gbSpecific.Controls.Add(Me.Label2) + Me.gbSpecific.Controls.Add(Me.Label3) + Me.gbSpecific.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.gbSpecific.Location = New System.Drawing.Point(135, 22) + Me.gbSpecific.Name = "gbSpecific" + Me.gbSpecific.Size = New System.Drawing.Size(224, 155) + Me.gbSpecific.TabIndex = 6 + Me.gbSpecific.TabStop = False + Me.gbSpecific.Text = "Specific" + ' + 'txtFilterSource + ' + Me.txtFilterSource.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtFilterSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtFilterSource.Location = New System.Drawing.Point(50, 129) + Me.txtFilterSource.Name = "txtFilterSource" + Me.txtFilterSource.ReadOnly = True + Me.txtFilterSource.Size = New System.Drawing.Size(166, 22) + Me.txtFilterSource.TabIndex = 11 + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label6.Location = New System.Drawing.Point(6, 108) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(66, 13) + Me.Label6.TabIndex = 8 + Me.Label6.Text = "File Source:" + ' + 'cbFilterFileSource + ' + Me.cbFilterFileSource.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbFilterFileSource.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbFilterFileSource.FormattingEnabled = True + Me.cbFilterFileSource.Location = New System.Drawing.Point(77, 105) + Me.cbFilterFileSource.Name = "cbFilterFileSource" + Me.cbFilterFileSource.Size = New System.Drawing.Size(139, 21) + Me.cbFilterFileSource.TabIndex = 9 + ' + 'chkFilterLock + ' + Me.chkFilterLock.AutoSize = True + Me.chkFilterLock.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.chkFilterLock.Location = New System.Drawing.Point(73, 18) + Me.chkFilterLock.Name = "chkFilterLock" + Me.chkFilterLock.Size = New System.Drawing.Size(62, 17) + Me.chkFilterLock.TabIndex = 2 + Me.chkFilterLock.Text = "Locked" + Me.chkFilterLock.UseVisualStyleBackColor = True + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.rbFilterAnd) + Me.GroupBox2.Controls.Add(Me.rbFilterOr) + Me.GroupBox2.Location = New System.Drawing.Point(140, 10) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(76, 43) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Modifier" + ' + 'rbFilterAnd + ' + Me.rbFilterAnd.AutoSize = True + Me.rbFilterAnd.Checked = True + Me.rbFilterAnd.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.rbFilterAnd.Location = New System.Drawing.Point(6, 11) + Me.rbFilterAnd.Name = "rbFilterAnd" + Me.rbFilterAnd.Size = New System.Drawing.Size(46, 17) + Me.rbFilterAnd.TabIndex = 0 + Me.rbFilterAnd.TabStop = True + Me.rbFilterAnd.Text = "And" + Me.rbFilterAnd.UseVisualStyleBackColor = True + ' + 'rbFilterOr + ' + Me.rbFilterOr.AutoSize = True + Me.rbFilterOr.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.rbFilterOr.Location = New System.Drawing.Point(6, 25) + Me.rbFilterOr.Name = "rbFilterOr" + Me.rbFilterOr.Size = New System.Drawing.Size(38, 17) + Me.rbFilterOr.TabIndex = 1 + Me.rbFilterOr.Text = "Or" + Me.rbFilterOr.UseVisualStyleBackColor = True + ' + 'chkFilterNew + ' + Me.chkFilterNew.AutoSize = True + Me.chkFilterNew.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkFilterNew.Location = New System.Drawing.Point(9, 18) + Me.chkFilterNew.Name = "chkFilterNew" + Me.chkFilterNew.Size = New System.Drawing.Size(49, 17) + Me.chkFilterNew.TabIndex = 0 + Me.chkFilterNew.Text = "New" + Me.chkFilterNew.UseVisualStyleBackColor = True + ' + 'cbFilterYear + ' + Me.cbFilterYear.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbFilterYear.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbFilterYear.FormattingEnabled = True + Me.cbFilterYear.Items.AddRange(New Object() {"=", ">", "<", "!="}) + Me.cbFilterYear.Location = New System.Drawing.Point(141, 81) + Me.cbFilterYear.Name = "cbFilterYear" + Me.cbFilterYear.Size = New System.Drawing.Size(75, 21) + Me.cbFilterYear.TabIndex = 7 + ' + 'chkFilterMark + ' + Me.chkFilterMark.AutoSize = True + Me.chkFilterMark.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.chkFilterMark.Location = New System.Drawing.Point(9, 36) + Me.chkFilterMark.Name = "chkFilterMark" + Me.chkFilterMark.Size = New System.Drawing.Size(65, 17) + Me.chkFilterMark.TabIndex = 1 + Me.chkFilterMark.Text = "Marked" + Me.chkFilterMark.UseVisualStyleBackColor = True + ' + 'cbFilterYearMod + ' + Me.cbFilterYearMod.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbFilterYearMod.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbFilterYearMod.FormattingEnabled = True + Me.cbFilterYearMod.Items.AddRange(New Object() {"=", ">", "<", "<>"}) + Me.cbFilterYearMod.Location = New System.Drawing.Point(77, 81) + Me.cbFilterYearMod.Name = "cbFilterYearMod" + Me.cbFilterYearMod.Size = New System.Drawing.Size(59, 21) + Me.cbFilterYearMod.TabIndex = 6 + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label5.Location = New System.Drawing.Point(6, 83) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(31, 13) + Me.Label5.TabIndex = 5 + Me.Label5.Text = "Year:" + ' + 'txtFilterGenre + ' + Me.txtFilterGenre.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtFilterGenre.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtFilterGenre.Location = New System.Drawing.Point(50, 56) + Me.txtFilterGenre.Name = "txtFilterGenre" + Me.txtFilterGenre.ReadOnly = True + Me.txtFilterGenre.Size = New System.Drawing.Size(166, 22) + Me.txtFilterGenre.TabIndex = 4 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label2.Location = New System.Drawing.Point(6, 132) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(45, 13) + Me.Label2.TabIndex = 10 + Me.Label2.Text = "Source:" + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label3.Location = New System.Drawing.Point(6, 58) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(41, 13) + Me.Label3.TabIndex = 31 + Me.Label3.Text = "Genre:" + ' + 'btnFilterDown + ' + Me.btnFilterDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnFilterDown.BackColor = System.Drawing.SystemColors.Control + Me.btnFilterDown.Enabled = False + Me.btnFilterDown.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnFilterDown.Location = New System.Drawing.Point(324, 1) + Me.btnFilterDown.Name = "btnFilterDown" + Me.btnFilterDown.Size = New System.Drawing.Size(30, 22) + Me.btnFilterDown.TabIndex = 2 + Me.btnFilterDown.TabStop = False + Me.btnFilterDown.Text = "v" + Me.btnFilterDown.TextAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnFilterDown.UseVisualStyleBackColor = False + ' + 'btnFilterUp + ' + Me.btnFilterUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnFilterUp.BackColor = System.Drawing.SystemColors.Control + Me.btnFilterUp.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnFilterUp.Location = New System.Drawing.Point(292, 1) + Me.btnFilterUp.Name = "btnFilterUp" + Me.btnFilterUp.Size = New System.Drawing.Size(30, 22) + Me.btnFilterUp.TabIndex = 1 + Me.btnFilterUp.TabStop = False + Me.btnFilterUp.Text = "^" + Me.btnFilterUp.TextAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnFilterUp.UseVisualStyleBackColor = False + ' + 'lblFilter + ' + Me.lblFilter.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblFilter.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.lblFilter.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblFilter.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblFilter.ForeColor = System.Drawing.SystemColors.HighlightText + Me.lblFilter.Location = New System.Drawing.Point(4, 3) + Me.lblFilter.Name = "lblFilter" + Me.lblFilter.Size = New System.Drawing.Size(354, 17) + Me.lblFilter.TabIndex = 0 + Me.lblFilter.Text = "Filters" + Me.lblFilter.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.Gainsboro + Me.pnlTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlTop.Controls.Add(Me.lblTitle) + Me.pnlTop.Controls.Add(Me.pnlInfoIcons) + Me.pnlTop.Controls.Add(Me.lblRuntime) + Me.pnlTop.Controls.Add(Me.lblTagline) + Me.pnlTop.Controls.Add(Me.pnlRating) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 25) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(1097, 74) + Me.pnlTop.TabIndex = 9 + Me.pnlTop.Visible = False + ' + 'lblTitle + ' + Me.lblTitle.AutoSize = True + Me.lblTitle.BackColor = System.Drawing.Color.Transparent + Me.lblTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTitle.ForeColor = System.Drawing.Color.Black + Me.lblTitle.Location = New System.Drawing.Point(4, 2) + Me.lblTitle.Name = "lblTitle" + Me.lblTitle.Size = New System.Drawing.Size(0, 20) + Me.lblTitle.TabIndex = 25 + Me.lblTitle.UseMnemonic = False + ' + 'pnlInfoIcons + ' + Me.pnlInfoIcons.BackColor = System.Drawing.Color.Transparent + Me.pnlInfoIcons.Controls.Add(Me.lblOriginalTitle) + Me.pnlInfoIcons.Controls.Add(Me.lblStudio) + Me.pnlInfoIcons.Controls.Add(Me.pbVType) + Me.pnlInfoIcons.Controls.Add(Me.pbStudio) + Me.pnlInfoIcons.Controls.Add(Me.pbVideo) + Me.pnlInfoIcons.Controls.Add(Me.pbAudio) + Me.pnlInfoIcons.Controls.Add(Me.pbResolution) + Me.pnlInfoIcons.Controls.Add(Me.pbChannels) + Me.pnlInfoIcons.Dock = System.Windows.Forms.DockStyle.Right + Me.pnlInfoIcons.Location = New System.Drawing.Point(705, 0) + Me.pnlInfoIcons.Name = "pnlInfoIcons" + Me.pnlInfoIcons.Size = New System.Drawing.Size(390, 72) + Me.pnlInfoIcons.TabIndex = 31 + ' + 'lblOriginalTitle + ' + Me.lblOriginalTitle.AutoSize = True + Me.lblOriginalTitle.BackColor = System.Drawing.Color.Transparent + Me.lblOriginalTitle.Dock = System.Windows.Forms.DockStyle.Right + Me.lblOriginalTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblOriginalTitle.ForeColor = System.Drawing.Color.Black + Me.lblOriginalTitle.Location = New System.Drawing.Point(390, 0) + Me.lblOriginalTitle.Name = "lblOriginalTitle" + Me.lblOriginalTitle.Size = New System.Drawing.Size(0, 20) + Me.lblOriginalTitle.TabIndex = 38 + Me.lblOriginalTitle.TextAlign = System.Drawing.ContentAlignment.TopRight + Me.lblOriginalTitle.UseMnemonic = False + ' + 'lblStudio + ' + Me.lblStudio.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblStudio.Location = New System.Drawing.Point(223, 55) + Me.lblStudio.Name = "lblStudio" + Me.lblStudio.Size = New System.Drawing.Size(167, 18) + Me.lblStudio.TabIndex = 37 + Me.lblStudio.Text = " " + Me.lblStudio.TextAlign = System.Drawing.ContentAlignment.TopRight + ' + 'pbVType + ' + Me.pbVType.BackColor = System.Drawing.Color.Transparent + Me.pbVType.Location = New System.Drawing.Point(65, 15) + Me.pbVType.Name = "pbVType" + Me.pbVType.Size = New System.Drawing.Size(64, 44) + Me.pbVType.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbVType.TabIndex = 36 + Me.pbVType.TabStop = False + ' + 'pbStudio + ' + Me.pbStudio.BackColor = System.Drawing.Color.Transparent + Me.pbStudio.Location = New System.Drawing.Point(325, 15) + Me.pbStudio.Name = "pbStudio" + Me.pbStudio.Size = New System.Drawing.Size(64, 44) + Me.pbStudio.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbStudio.TabIndex = 31 + Me.pbStudio.TabStop = False + ' + 'pbVideo + ' + Me.pbVideo.BackColor = System.Drawing.Color.Transparent + Me.pbVideo.Location = New System.Drawing.Point(0, 15) + Me.pbVideo.Name = "pbVideo" + Me.pbVideo.Size = New System.Drawing.Size(64, 44) + Me.pbVideo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbVideo.TabIndex = 33 + Me.pbVideo.TabStop = False + ' + 'pbAudio + ' + Me.pbAudio.BackColor = System.Drawing.Color.Transparent + Me.pbAudio.Location = New System.Drawing.Point(195, 15) + Me.pbAudio.Name = "pbAudio" + Me.pbAudio.Size = New System.Drawing.Size(64, 44) + Me.pbAudio.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbAudio.TabIndex = 35 + Me.pbAudio.TabStop = False + ' + 'pbResolution + ' + Me.pbResolution.BackColor = System.Drawing.Color.Transparent + Me.pbResolution.Location = New System.Drawing.Point(130, 15) + Me.pbResolution.Name = "pbResolution" + Me.pbResolution.Size = New System.Drawing.Size(64, 44) + Me.pbResolution.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbResolution.TabIndex = 34 + Me.pbResolution.TabStop = False + ' + 'pbChannels + ' + Me.pbChannels.BackColor = System.Drawing.Color.Transparent + Me.pbChannels.Location = New System.Drawing.Point(260, 15) + Me.pbChannels.Name = "pbChannels" + Me.pbChannels.Size = New System.Drawing.Size(64, 44) + Me.pbChannels.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbChannels.TabIndex = 32 + Me.pbChannels.TabStop = False + ' + 'lblRuntime + ' + Me.lblRuntime.AutoSize = True + Me.lblRuntime.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblRuntime.ForeColor = System.Drawing.Color.Black + Me.lblRuntime.Location = New System.Drawing.Point(213, 32) + Me.lblRuntime.Name = "lblRuntime" + Me.lblRuntime.Size = New System.Drawing.Size(0, 13) + Me.lblRuntime.TabIndex = 32 + Me.lblRuntime.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'lblTagline + ' + Me.lblTagline.AutoSize = True + Me.lblTagline.BackColor = System.Drawing.Color.Transparent + Me.lblTagline.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTagline.ForeColor = System.Drawing.Color.Black + Me.lblTagline.Location = New System.Drawing.Point(5, 55) + Me.lblTagline.Name = "lblTagline" + Me.lblTagline.Size = New System.Drawing.Size(0, 13) + Me.lblTagline.TabIndex = 26 + Me.lblTagline.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.lblTagline.UseMnemonic = False + ' + 'pnlRating + ' + Me.pnlRating.BackColor = System.Drawing.Color.Transparent + Me.pnlRating.Controls.Add(Me.pbStar5) + Me.pnlRating.Controls.Add(Me.pbStar4) + Me.pnlRating.Controls.Add(Me.pbStar3) + Me.pnlRating.Controls.Add(Me.pbStar2) + Me.pnlRating.Controls.Add(Me.pbStar1) + Me.pnlRating.Controls.Add(Me.lblVotes) + Me.pnlRating.Location = New System.Drawing.Point(6, 24) + Me.pnlRating.Name = "pnlRating" + Me.pnlRating.Size = New System.Drawing.Size(206, 27) + Me.pnlRating.TabIndex = 24 + ' + 'pbStar5 + ' + Me.pbStar5.Location = New System.Drawing.Point(97, 1) + Me.pbStar5.Name = "pbStar5" + Me.pbStar5.Size = New System.Drawing.Size(24, 24) + Me.pbStar5.TabIndex = 27 + Me.pbStar5.TabStop = False + ' + 'pbStar4 + ' + Me.pbStar4.Location = New System.Drawing.Point(73, 1) + Me.pbStar4.Name = "pbStar4" + Me.pbStar4.Size = New System.Drawing.Size(24, 24) + Me.pbStar4.TabIndex = 26 + Me.pbStar4.TabStop = False + ' + 'pbStar3 + ' + Me.pbStar3.Location = New System.Drawing.Point(49, 1) + Me.pbStar3.Name = "pbStar3" + Me.pbStar3.Size = New System.Drawing.Size(24, 24) + Me.pbStar3.TabIndex = 25 + Me.pbStar3.TabStop = False + ' + 'pbStar2 + ' + Me.pbStar2.Location = New System.Drawing.Point(25, 1) + Me.pbStar2.Name = "pbStar2" + Me.pbStar2.Size = New System.Drawing.Size(24, 24) + Me.pbStar2.TabIndex = 24 + Me.pbStar2.TabStop = False + ' + 'pbStar1 + ' + Me.pbStar1.Location = New System.Drawing.Point(1, 1) + Me.pbStar1.Name = "pbStar1" + Me.pbStar1.Size = New System.Drawing.Size(24, 24) + Me.pbStar1.TabIndex = 23 + Me.pbStar1.TabStop = False + ' + 'lblVotes + ' + Me.lblVotes.AutoSize = True + Me.lblVotes.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblVotes.ForeColor = System.Drawing.Color.Black + Me.lblVotes.Location = New System.Drawing.Point(123, 8) + Me.lblVotes.Name = "lblVotes" + Me.lblVotes.Size = New System.Drawing.Size(0, 13) + Me.lblVotes.TabIndex = 22 + Me.lblVotes.TextAlign = System.Drawing.ContentAlignment.MiddleRight + ' + 'pnlCancel + ' + Me.pnlCancel.BackColor = System.Drawing.Color.LightGray + Me.pnlCancel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlCancel.Controls.Add(Me.pbCanceling) + Me.pnlCancel.Controls.Add(Me.lblCanceling) + Me.pnlCancel.Controls.Add(Me.btnCancel) + Me.pnlCancel.Location = New System.Drawing.Point(273, 100) + Me.pnlCancel.Name = "pnlCancel" + Me.pnlCancel.Size = New System.Drawing.Size(214, 63) + Me.pnlCancel.TabIndex = 8 + Me.pnlCancel.Visible = False + ' + 'pbCanceling + ' + Me.pbCanceling.Location = New System.Drawing.Point(5, 32) + Me.pbCanceling.MarqueeAnimationSpeed = 25 + Me.pbCanceling.Name = "pbCanceling" + Me.pbCanceling.Size = New System.Drawing.Size(203, 20) + Me.pbCanceling.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.pbCanceling.TabIndex = 2 + Me.pbCanceling.Visible = False + ' + 'lblCanceling + ' + Me.lblCanceling.AutoSize = True + Me.lblCanceling.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.lblCanceling.Location = New System.Drawing.Point(4, 12) + Me.lblCanceling.Name = "lblCanceling" + Me.lblCanceling.Size = New System.Drawing.Size(128, 17) + Me.lblCanceling.TabIndex = 1 + Me.lblCanceling.Text = "Canceling Scraper..." + Me.lblCanceling.Visible = False + ' + 'btnCancel + ' + Me.btnCancel.Font = New System.Drawing.Font("Segoe UI", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.btnCancel.Image = CType(resources.GetObject("btnCancel.Image"), System.Drawing.Image) + Me.btnCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.btnCancel.Location = New System.Drawing.Point(4, 4) + Me.btnCancel.Name = "btnCancel" + Me.btnCancel.Size = New System.Drawing.Size(205, 55) + Me.btnCancel.TabIndex = 0 + Me.btnCancel.TabStop = False + Me.btnCancel.Text = "Cancel Scraper" + Me.btnCancel.TextAlign = System.Drawing.ContentAlignment.MiddleRight + Me.btnCancel.UseVisualStyleBackColor = True + ' + 'pnlAllSeason + ' + Me.pnlAllSeason.BackColor = System.Drawing.Color.Gainsboro + Me.pnlAllSeason.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlAllSeason.Controls.Add(Me.pbAllSeason) + Me.pnlAllSeason.Location = New System.Drawing.Point(508, 112) + Me.pnlAllSeason.Name = "pnlAllSeason" + Me.pnlAllSeason.Size = New System.Drawing.Size(131, 169) + Me.pnlAllSeason.TabIndex = 3 + Me.pnlAllSeason.Visible = False + ' + 'pbAllSeason + ' + Me.pbAllSeason.BackColor = System.Drawing.SystemColors.Control + Me.pbAllSeason.Location = New System.Drawing.Point(4, 4) + Me.pbAllSeason.Name = "pbAllSeason" + Me.pbAllSeason.Size = New System.Drawing.Size(121, 159) + Me.pbAllSeason.TabIndex = 0 + Me.pbAllSeason.TabStop = False + ' + 'pbAllSeasonCache + ' + Me.pbAllSeasonCache.Location = New System.Drawing.Point(333, 107) + Me.pbAllSeasonCache.Name = "pbAllSeasonCache" + Me.pbAllSeasonCache.Size = New System.Drawing.Size(115, 111) + Me.pbAllSeasonCache.TabIndex = 13 + Me.pbAllSeasonCache.TabStop = False + Me.pbAllSeasonCache.Visible = False + ' + 'pnlNoInfo + ' + Me.pnlNoInfo.BackColor = System.Drawing.Color.LightGray + Me.pnlNoInfo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlNoInfo.Controls.Add(Me.Panel2) + Me.pnlNoInfo.Location = New System.Drawing.Point(241, 300) + Me.pnlNoInfo.Name = "pnlNoInfo" + Me.pnlNoInfo.Size = New System.Drawing.Size(259, 143) + Me.pnlNoInfo.TabIndex = 8 + Me.pnlNoInfo.Visible = False + ' + 'Panel2 + ' + Me.Panel2.BackColor = System.Drawing.Color.White + Me.Panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Panel2.Controls.Add(Me.PictureBox1) + Me.Panel2.Controls.Add(Me.Label1) + Me.Panel2.Location = New System.Drawing.Point(3, 4) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(251, 133) + Me.Panel2.TabIndex = 0 + ' + 'PictureBox1 + ' + Me.PictureBox1.Image = CType(resources.GetObject("PictureBox1.Image"), System.Drawing.Image) + Me.PictureBox1.Location = New System.Drawing.Point(7, 38) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(63, 63) + Me.PictureBox1.TabIndex = 1 + Me.PictureBox1.TabStop = False + ' + 'Label1 + ' + Me.Label1.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.Label1.Location = New System.Drawing.Point(71, 29) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(173, 78) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "No Information is Available for This Movie" + Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'pnlInfoPanel + ' + Me.pnlInfoPanel.BackColor = System.Drawing.Color.Gainsboro + Me.pnlInfoPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlInfoPanel.Controls.Add(Me.txtCerts) + Me.pnlInfoPanel.Controls.Add(Me.lblCertsHeader) + Me.pnlInfoPanel.Controls.Add(Me.lblReleaseDate) + Me.pnlInfoPanel.Controls.Add(Me.lblReleaseDateHeader) + Me.pnlInfoPanel.Controls.Add(Me.btnMid) + Me.pnlInfoPanel.Controls.Add(Me.pbMILoading) + Me.pnlInfoPanel.Controls.Add(Me.btnMetaDataRefresh) + Me.pnlInfoPanel.Controls.Add(Me.lblMetaDataHeader) + Me.pnlInfoPanel.Controls.Add(Me.txtMetaData) + Me.pnlInfoPanel.Controls.Add(Me.btnPlay) + Me.pnlInfoPanel.Controls.Add(Me.txtFilePath) + Me.pnlInfoPanel.Controls.Add(Me.lblFilePathHeader) + Me.pnlInfoPanel.Controls.Add(Me.txtIMDBID) + Me.pnlInfoPanel.Controls.Add(Me.lblIMDBHeader) + Me.pnlInfoPanel.Controls.Add(Me.lblDirector) + Me.pnlInfoPanel.Controls.Add(Me.lblDirectorHeader) + Me.pnlInfoPanel.Controls.Add(Me.pnlActors) + Me.pnlInfoPanel.Controls.Add(Me.lblOutlineHeader) + Me.pnlInfoPanel.Controls.Add(Me.txtOutline) + Me.pnlInfoPanel.Controls.Add(Me.pnlTop250) + Me.pnlInfoPanel.Controls.Add(Me.lblPlotHeader) + Me.pnlInfoPanel.Controls.Add(Me.txtPlot) + Me.pnlInfoPanel.Controls.Add(Me.btnDown) + Me.pnlInfoPanel.Controls.Add(Me.btnUp) + Me.pnlInfoPanel.Controls.Add(Me.lblInfoPanelHeader) + Me.pnlInfoPanel.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnlInfoPanel.Location = New System.Drawing.Point(0, 440) + Me.pnlInfoPanel.Name = "pnlInfoPanel" + Me.pnlInfoPanel.Size = New System.Drawing.Size(1097, 342) + Me.pnlInfoPanel.TabIndex = 10 + ' + 'txtCerts + ' + Me.txtCerts.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.txtCerts.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtCerts.Location = New System.Drawing.Point(117, 208) + Me.txtCerts.Name = "txtCerts" + Me.txtCerts.ReadOnly = True + Me.txtCerts.Size = New System.Drawing.Size(661, 22) + Me.txtCerts.TabIndex = 3 + Me.txtCerts.TabStop = False + ' + 'lblCertsHeader + ' + Me.lblCertsHeader.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblCertsHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.lblCertsHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblCertsHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblCertsHeader.ForeColor = System.Drawing.SystemColors.HighlightText + Me.lblCertsHeader.Location = New System.Drawing.Point(117, 188) + Me.lblCertsHeader.Name = "lblCertsHeader" + Me.lblCertsHeader.Size = New System.Drawing.Size(661, 17) + Me.lblCertsHeader.TabIndex = 2 + Me.lblCertsHeader.Text = "Certifications" + Me.lblCertsHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'lblReleaseDate + ' + Me.lblReleaseDate.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblReleaseDate.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblReleaseDate.ForeColor = System.Drawing.Color.Black + Me.lblReleaseDate.Location = New System.Drawing.Point(612, 48) + Me.lblReleaseDate.Name = "lblReleaseDate" + Me.lblReleaseDate.Size = New System.Drawing.Size(105, 16) + Me.lblReleaseDate.TabIndex = 39 + Me.lblReleaseDate.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'lblReleaseDateHeader + ' + Me.lblReleaseDateHeader.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblReleaseDateHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.lblReleaseDateHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblReleaseDateHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblReleaseDateHeader.ForeColor = System.Drawing.SystemColors.HighlightText + Me.lblReleaseDateHeader.Location = New System.Drawing.Point(612, 27) + Me.lblReleaseDateHeader.Name = "lblReleaseDateHeader" + Me.lblReleaseDateHeader.Size = New System.Drawing.Size(105, 17) + Me.lblReleaseDateHeader.TabIndex = 38 + Me.lblReleaseDateHeader.Text = "Release Date" + Me.lblReleaseDateHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'btnMid + ' + Me.btnMid.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnMid.BackColor = System.Drawing.SystemColors.Control + Me.btnMid.Location = New System.Drawing.Point(1026, 1) + Me.btnMid.Name = "btnMid" + Me.btnMid.Size = New System.Drawing.Size(30, 22) + Me.btnMid.TabIndex = 37 + Me.btnMid.TabStop = False + Me.btnMid.Text = "-" + Me.btnMid.TextAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnMid.UseVisualStyleBackColor = False + ' + 'pbMILoading + ' + Me.pbMILoading.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.pbMILoading.Image = CType(resources.GetObject("pbMILoading.Image"), System.Drawing.Image) + Me.pbMILoading.Location = New System.Drawing.Point(928, 374) + Me.pbMILoading.Name = "pbMILoading" + Me.pbMILoading.Size = New System.Drawing.Size(41, 39) + Me.pbMILoading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.pbMILoading.TabIndex = 36 + Me.pbMILoading.TabStop = False + Me.pbMILoading.Visible = False + ' + 'btnMetaDataRefresh + ' + Me.btnMetaDataRefresh.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnMetaDataRefresh.Location = New System.Drawing.Point(1015, 278) + Me.btnMetaDataRefresh.Name = "btnMetaDataRefresh" + Me.btnMetaDataRefresh.Size = New System.Drawing.Size(75, 23) + Me.btnMetaDataRefresh.TabIndex = 9 + Me.btnMetaDataRefresh.TabStop = False + Me.btnMetaDataRefresh.Text = "Refresh" + Me.btnMetaDataRefresh.UseVisualStyleBackColor = True + ' + 'lblMetaDataHeader + ' + Me.lblMetaDataHeader.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblMetaDataHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.lblMetaDataHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblMetaDataHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblMetaDataHeader.ForeColor = System.Drawing.SystemColors.HighlightText + Me.lblMetaDataHeader.Location = New System.Drawing.Point(791, 282) + Me.lblMetaDataHeader.Name = "lblMetaDataHeader" + Me.lblMetaDataHeader.Size = New System.Drawing.Size(294, 17) + Me.lblMetaDataHeader.TabIndex = 8 + Me.lblMetaDataHeader.Text = "Meta Data" + Me.lblMetaDataHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'txtMetaData + ' + Me.txtMetaData.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.txtMetaData.BackColor = System.Drawing.Color.Gainsboro + Me.txtMetaData.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.txtMetaData.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtMetaData.ForeColor = System.Drawing.Color.Black + Me.txtMetaData.Location = New System.Drawing.Point(791, 303) + Me.txtMetaData.Multiline = True + Me.txtMetaData.Name = "txtMetaData" + Me.txtMetaData.ReadOnly = True + Me.txtMetaData.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtMetaData.Size = New System.Drawing.Size(296, 184) + Me.txtMetaData.TabIndex = 10 + Me.txtMetaData.TabStop = False + ' + 'btnPlay + ' + Me.btnPlay.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnPlay.Image = Global.Ember_Media_Manager.My.Resources.Resources.Play_Icon + Me.btnPlay.Location = New System.Drawing.Point(759, 254) + Me.btnPlay.Name = "btnPlay" + Me.btnPlay.Size = New System.Drawing.Size(20, 20) + Me.btnPlay.TabIndex = 6 + Me.btnPlay.TabStop = False + Me.btnPlay.UseVisualStyleBackColor = True + ' + 'txtFilePath + ' + Me.txtFilePath.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.txtFilePath.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtFilePath.Location = New System.Drawing.Point(3, 254) + Me.txtFilePath.Name = "txtFilePath" + Me.txtFilePath.ReadOnly = True + Me.txtFilePath.Size = New System.Drawing.Size(753, 22) + Me.txtFilePath.TabIndex = 5 + Me.txtFilePath.TabStop = False + ' + 'lblFilePathHeader + ' + Me.lblFilePathHeader.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblFilePathHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.lblFilePathHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblFilePathHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblFilePathHeader.ForeColor = System.Drawing.SystemColors.HighlightText + Me.lblFilePathHeader.Location = New System.Drawing.Point(3, 234) + Me.lblFilePathHeader.Name = "lblFilePathHeader" + Me.lblFilePathHeader.Size = New System.Drawing.Size(775, 17) + Me.lblFilePathHeader.TabIndex = 4 + Me.lblFilePathHeader.Text = "File Path" + Me.lblFilePathHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'txtIMDBID + ' + Me.txtIMDBID.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.txtIMDBID.Location = New System.Drawing.Point(3, 208) + Me.txtIMDBID.Name = "txtIMDBID" + Me.txtIMDBID.ReadOnly = True + Me.txtIMDBID.Size = New System.Drawing.Size(108, 22) + Me.txtIMDBID.TabIndex = 1 + Me.txtIMDBID.TabStop = False + ' + 'lblIMDBHeader + ' + Me.lblIMDBHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.lblIMDBHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblIMDBHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblIMDBHeader.ForeColor = System.Drawing.SystemColors.HighlightText + Me.lblIMDBHeader.Location = New System.Drawing.Point(3, 188) + Me.lblIMDBHeader.Name = "lblIMDBHeader" + Me.lblIMDBHeader.Size = New System.Drawing.Size(108, 17) + Me.lblIMDBHeader.TabIndex = 0 + Me.lblIMDBHeader.Text = "IMDB ID" + Me.lblIMDBHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'lblDirector + ' + Me.lblDirector.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblDirector.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirector.ForeColor = System.Drawing.Color.Black + Me.lblDirector.Location = New System.Drawing.Point(3, 48) + Me.lblDirector.Name = "lblDirector" + Me.lblDirector.Size = New System.Drawing.Size(604, 16) + Me.lblDirector.TabIndex = 27 + Me.lblDirector.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'lblDirectorHeader + ' + Me.lblDirectorHeader.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblDirectorHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.lblDirectorHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblDirectorHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblDirectorHeader.ForeColor = System.Drawing.SystemColors.HighlightText + Me.lblDirectorHeader.Location = New System.Drawing.Point(3, 27) + Me.lblDirectorHeader.Name = "lblDirectorHeader" + Me.lblDirectorHeader.Size = New System.Drawing.Size(603, 17) + Me.lblDirectorHeader.TabIndex = 21 + Me.lblDirectorHeader.Text = "Director" + Me.lblDirectorHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pnlActors + ' + Me.pnlActors.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.pnlActors.BackColor = System.Drawing.Color.Gainsboro + Me.pnlActors.Controls.Add(Me.pbActLoad) + Me.pnlActors.Controls.Add(Me.lstActors) + Me.pnlActors.Controls.Add(Me.pbActors) + Me.pnlActors.Controls.Add(Me.lblActorsHeader) + Me.pnlActors.Location = New System.Drawing.Point(790, 29) + Me.pnlActors.Name = "pnlActors" + Me.pnlActors.Size = New System.Drawing.Size(302, 244) + Me.pnlActors.TabIndex = 19 + ' + 'pbActLoad + ' + Me.pbActLoad.Image = CType(resources.GetObject("pbActLoad.Image"), System.Drawing.Image) + Me.pbActLoad.Location = New System.Drawing.Point(240, 111) + Me.pbActLoad.Name = "pbActLoad" + Me.pbActLoad.Size = New System.Drawing.Size(41, 39) + Me.pbActLoad.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.pbActLoad.TabIndex = 26 + Me.pbActLoad.TabStop = False + Me.pbActLoad.Visible = False + ' + 'lstActors + ' + Me.lstActors.BackColor = System.Drawing.Color.Gainsboro + Me.lstActors.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.lstActors.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lstActors.ForeColor = System.Drawing.Color.Black + Me.lstActors.FormattingEnabled = True + Me.lstActors.Location = New System.Drawing.Point(3, 21) + Me.lstActors.Name = "lstActors" + Me.lstActors.Size = New System.Drawing.Size(214, 221) + Me.lstActors.TabIndex = 28 + Me.lstActors.TabStop = False + ' + 'pbActors + ' + Me.pbActors.Image = Global.Ember_Media_Manager.My.Resources.Resources.actor_silhouette + Me.pbActors.Location = New System.Drawing.Point(220, 75) + Me.pbActors.Name = "pbActors" + Me.pbActors.Size = New System.Drawing.Size(81, 106) + Me.pbActors.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbActors.TabIndex = 27 + Me.pbActors.TabStop = False + ' + 'lblActorsHeader + ' + Me.lblActorsHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.lblActorsHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblActorsHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblActorsHeader.ForeColor = System.Drawing.SystemColors.HighlightText + Me.lblActorsHeader.Location = New System.Drawing.Point(0, 0) + Me.lblActorsHeader.Name = "lblActorsHeader" + Me.lblActorsHeader.Size = New System.Drawing.Size(301, 17) + Me.lblActorsHeader.TabIndex = 18 + Me.lblActorsHeader.Text = "Cast" + Me.lblActorsHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'lblOutlineHeader + ' + Me.lblOutlineHeader.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblOutlineHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.lblOutlineHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblOutlineHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblOutlineHeader.ForeColor = System.Drawing.SystemColors.HighlightText + Me.lblOutlineHeader.Location = New System.Drawing.Point(3, 81) + Me.lblOutlineHeader.Name = "lblOutlineHeader" + Me.lblOutlineHeader.Size = New System.Drawing.Size(775, 17) + Me.lblOutlineHeader.TabIndex = 17 + Me.lblOutlineHeader.Text = "Plot Outline" + Me.lblOutlineHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'txtOutline + ' + Me.txtOutline.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.txtOutline.BackColor = System.Drawing.Color.Gainsboro + Me.txtOutline.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.txtOutline.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtOutline.ForeColor = System.Drawing.Color.Black + Me.txtOutline.Location = New System.Drawing.Point(3, 103) + Me.txtOutline.Multiline = True + Me.txtOutline.Name = "txtOutline" + Me.txtOutline.ReadOnly = True + Me.txtOutline.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtOutline.Size = New System.Drawing.Size(775, 78) + Me.txtOutline.TabIndex = 16 + Me.txtOutline.TabStop = False + ' + 'pnlTop250 + ' + Me.pnlTop250.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.pnlTop250.Controls.Add(Me.lblTop250) + Me.pnlTop250.Controls.Add(Me.pbTop250) + Me.pnlTop250.Location = New System.Drawing.Point(721, 27) + Me.pnlTop250.Name = "pnlTop250" + Me.pnlTop250.Size = New System.Drawing.Size(56, 48) + Me.pnlTop250.TabIndex = 15 + ' + 'lblTop250 + ' + Me.lblTop250.BackColor = System.Drawing.Color.Gainsboro + Me.lblTop250.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblTop250.ForeColor = System.Drawing.Color.Black + Me.lblTop250.Location = New System.Drawing.Point(1, 30) + Me.lblTop250.Name = "lblTop250" + Me.lblTop250.Size = New System.Drawing.Size(52, 17) + Me.lblTop250.TabIndex = 15 + Me.lblTop250.Text = "# 250" + Me.lblTop250.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'pbTop250 + ' + Me.pbTop250.Image = CType(resources.GetObject("pbTop250.Image"), System.Drawing.Image) + Me.pbTop250.Location = New System.Drawing.Point(1, 1) + Me.pbTop250.Name = "pbTop250" + Me.pbTop250.Size = New System.Drawing.Size(54, 30) + Me.pbTop250.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pbTop250.TabIndex = 14 + Me.pbTop250.TabStop = False + ' + 'lblPlotHeader + ' + Me.lblPlotHeader.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblPlotHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.lblPlotHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblPlotHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblPlotHeader.ForeColor = System.Drawing.SystemColors.HighlightText + Me.lblPlotHeader.Location = New System.Drawing.Point(3, 282) + Me.lblPlotHeader.Name = "lblPlotHeader" + Me.lblPlotHeader.Size = New System.Drawing.Size(775, 17) + Me.lblPlotHeader.TabIndex = 6 + Me.lblPlotHeader.Text = "Plot" + Me.lblPlotHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'txtPlot + ' + Me.txtPlot.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.txtPlot.BackColor = System.Drawing.Color.Gainsboro + Me.txtPlot.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.txtPlot.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.txtPlot.ForeColor = System.Drawing.Color.Black + Me.txtPlot.Location = New System.Drawing.Point(3, 303) + Me.txtPlot.Multiline = True + Me.txtPlot.Name = "txtPlot" + Me.txtPlot.ReadOnly = True + Me.txtPlot.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtPlot.Size = New System.Drawing.Size(775, 184) + Me.txtPlot.TabIndex = 7 + Me.txtPlot.TabStop = False + ' + 'btnDown + ' + Me.btnDown.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnDown.BackColor = System.Drawing.SystemColors.Control + Me.btnDown.Location = New System.Drawing.Point(1057, 1) + Me.btnDown.Name = "btnDown" + Me.btnDown.Size = New System.Drawing.Size(30, 22) + Me.btnDown.TabIndex = 6 + Me.btnDown.TabStop = False + Me.btnDown.Text = "v" + Me.btnDown.TextAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnDown.UseVisualStyleBackColor = False + ' + 'btnUp + ' + Me.btnUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.btnUp.BackColor = System.Drawing.SystemColors.Control + Me.btnUp.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.btnUp.Location = New System.Drawing.Point(994, 1) + Me.btnUp.Name = "btnUp" + Me.btnUp.Size = New System.Drawing.Size(30, 22) + Me.btnUp.TabIndex = 1 + Me.btnUp.TabStop = False + Me.btnUp.Text = "^" + Me.btnUp.TextAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnUp.UseVisualStyleBackColor = False + ' + 'lblInfoPanelHeader + ' + Me.lblInfoPanelHeader.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.lblInfoPanelHeader.BackColor = System.Drawing.SystemColors.ControlDarkDark + Me.lblInfoPanelHeader.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblInfoPanelHeader.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblInfoPanelHeader.ForeColor = System.Drawing.SystemColors.HighlightText + Me.lblInfoPanelHeader.Location = New System.Drawing.Point(3, 3) + Me.lblInfoPanelHeader.Name = "lblInfoPanelHeader" + Me.lblInfoPanelHeader.Size = New System.Drawing.Size(1089, 17) + Me.lblInfoPanelHeader.TabIndex = 0 + Me.lblInfoPanelHeader.Text = "Info" + Me.lblInfoPanelHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'pnlPoster + ' + Me.pnlPoster.BackColor = System.Drawing.Color.Gainsboro + Me.pnlPoster.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlPoster.Controls.Add(Me.pbPoster) + Me.pnlPoster.Location = New System.Drawing.Point(9, 112) + Me.pnlPoster.Name = "pnlPoster" + Me.pnlPoster.Size = New System.Drawing.Size(131, 169) + Me.pnlPoster.TabIndex = 2 + Me.pnlPoster.Visible = False + ' + 'pbPoster + ' + Me.pbPoster.BackColor = System.Drawing.SystemColors.Control + Me.pbPoster.Location = New System.Drawing.Point(4, 4) + Me.pbPoster.Name = "pbPoster" + Me.pbPoster.Size = New System.Drawing.Size(121, 159) + Me.pbPoster.TabIndex = 0 + Me.pbPoster.TabStop = False + ' + 'pbPosterCache + ' + Me.pbPosterCache.Location = New System.Drawing.Point(454, 107) + Me.pbPosterCache.Name = "pbPosterCache" + Me.pbPosterCache.Size = New System.Drawing.Size(115, 111) + Me.pbPosterCache.TabIndex = 12 + Me.pbPosterCache.TabStop = False + Me.pbPosterCache.Visible = False + ' + 'pnlMPAA + ' + Me.pnlMPAA.BackColor = System.Drawing.Color.Gainsboro + Me.pnlMPAA.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlMPAA.Controls.Add(Me.pbMPAA) + Me.pnlMPAA.Location = New System.Drawing.Point(4, 609) + Me.pnlMPAA.Name = "pnlMPAA" + Me.pnlMPAA.Size = New System.Drawing.Size(202, 45) + Me.pnlMPAA.TabIndex = 11 + Me.pnlMPAA.Visible = False + ' + 'pbMPAA + ' + Me.pbMPAA.Location = New System.Drawing.Point(1, 1) + Me.pbMPAA.Name = "pbMPAA" + Me.pbMPAA.Size = New System.Drawing.Size(249, 57) + Me.pbMPAA.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.pbMPAA.TabIndex = 13 + Me.pbMPAA.TabStop = False + ' + 'pbFanartCache + ' + Me.pbFanartCache.Location = New System.Drawing.Point(576, 107) + Me.pbFanartCache.Name = "pbFanartCache" + Me.pbFanartCache.Size = New System.Drawing.Size(115, 111) + Me.pbFanartCache.TabIndex = 3 + Me.pbFanartCache.TabStop = False + Me.pbFanartCache.Visible = False + ' + 'pbFanart + ' + Me.pbFanart.Anchor = System.Windows.Forms.AnchorStyles.Top + Me.pbFanart.BackColor = System.Drawing.Color.DimGray + Me.pbFanart.Location = New System.Drawing.Point(200, 99) + Me.pbFanart.Name = "pbFanart" + Me.pbFanart.Size = New System.Drawing.Size(696, 250) + Me.pbFanart.TabIndex = 1 + Me.pbFanart.TabStop = False + ' + 'tsMain + ' + Me.tsMain.BackColor = System.Drawing.SystemColors.Control + Me.tsMain.CanOverflow = False + Me.tsMain.GripMargin = New System.Windows.Forms.Padding(0) + Me.tsMain.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden + Me.tsMain.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.tsbAutoPilot, Me.tsbRefreshMedia, Me.tsbMediaCenters}) + Me.tsMain.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow + Me.tsMain.Location = New System.Drawing.Point(0, 0) + Me.tsMain.Name = "tsMain" + Me.tsMain.Padding = New System.Windows.Forms.Padding(0) + Me.tsMain.Size = New System.Drawing.Size(1097, 25) + Me.tsMain.Stretch = True + Me.tsMain.TabIndex = 6 + ' + 'tsbAutoPilot + ' + Me.tsbAutoPilot.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FullToolStripMenuItem, Me.UpdateOnlyToolStripMenuItem, Me.NewMoviesToolStripMenuItem, Me.MarkedMoviesToolStripMenuItem, Me.CurrentFilterToolStripMenuItem, Me.CustomUpdaterToolStripMenuItem}) + Me.tsbAutoPilot.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.tsbAutoPilot.Image = CType(resources.GetObject("tsbAutoPilot.Image"), System.Drawing.Image) + Me.tsbAutoPilot.ImageTransparentColor = System.Drawing.Color.Magenta + Me.tsbAutoPilot.Name = "tsbAutoPilot" + Me.tsbAutoPilot.Size = New System.Drawing.Size(105, 22) + Me.tsbAutoPilot.Text = "Scrape Media" + ' + 'FullToolStripMenuItem + ' + Me.FullToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FullAutoToolStripMenuItem, Me.FullAskToolStripMenuItem, Me.FullSkipToolStripMenuItem}) + Me.FullToolStripMenuItem.Name = "FullToolStripMenuItem" + Me.FullToolStripMenuItem.Size = New System.Drawing.Size(183, 22) + Me.FullToolStripMenuItem.Text = "All Movies" + ' + 'FullAutoToolStripMenuItem + ' + Me.FullAutoToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuAllAutoAll, Me.mnuAllAutoNfo, Me.mnuAllAutoPoster, Me.mnuAllAutoFanart, Me.mnuAllAutoExtra, Me.mnuAllAutoTrailer, Me.mnuAllAutoMI}) + Me.FullAutoToolStripMenuItem.Name = "FullAutoToolStripMenuItem" + Me.FullAutoToolStripMenuItem.Size = New System.Drawing.Size(264, 22) + Me.FullAutoToolStripMenuItem.Text = "Automatic (Force Best Match)" + ' + 'mnuAllAutoAll + ' + Me.mnuAllAutoAll.Name = "mnuAllAutoAll" + Me.mnuAllAutoAll.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAutoAll.Text = "All Items" + ' + 'mnuAllAutoNfo + ' + Me.mnuAllAutoNfo.Name = "mnuAllAutoNfo" + Me.mnuAllAutoNfo.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAutoNfo.Text = "NFO Only" + ' + 'mnuAllAutoPoster + ' + Me.mnuAllAutoPoster.Name = "mnuAllAutoPoster" + Me.mnuAllAutoPoster.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAutoPoster.Text = "Poster Only" + ' + 'mnuAllAutoFanart + ' + Me.mnuAllAutoFanart.Name = "mnuAllAutoFanart" + Me.mnuAllAutoFanart.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAutoFanart.Text = "Fanart Only" + ' + 'mnuAllAutoExtra + ' + Me.mnuAllAutoExtra.Name = "mnuAllAutoExtra" + Me.mnuAllAutoExtra.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAutoExtra.Text = "Extrathumbs Only" + ' + 'mnuAllAutoTrailer + ' + Me.mnuAllAutoTrailer.Name = "mnuAllAutoTrailer" + Me.mnuAllAutoTrailer.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAutoTrailer.Text = "Trailer Only" + ' + 'mnuAllAutoMI + ' + Me.mnuAllAutoMI.Name = "mnuAllAutoMI" + Me.mnuAllAutoMI.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAutoMI.Text = "Meta Data Only" + ' + 'FullAskToolStripMenuItem + ' + Me.FullAskToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuAllAskAll, Me.mnuAllAskNfo, Me.mnuAllAskPoster, Me.mnuAllAskFanart, Me.mnuAllAskExtra, Me.mnuAllAskTrailer, Me.mnuAllAskMI}) + Me.FullAskToolStripMenuItem.Name = "FullAskToolStripMenuItem" + Me.FullAskToolStripMenuItem.Size = New System.Drawing.Size(264, 22) + Me.FullAskToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" + ' + 'mnuAllAskAll + ' + Me.mnuAllAskAll.Name = "mnuAllAskAll" + Me.mnuAllAskAll.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAskAll.Text = "All Items" + ' + 'mnuAllAskNfo + ' + Me.mnuAllAskNfo.Name = "mnuAllAskNfo" + Me.mnuAllAskNfo.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAskNfo.Text = "NFO Only" + ' + 'mnuAllAskPoster + ' + Me.mnuAllAskPoster.Name = "mnuAllAskPoster" + Me.mnuAllAskPoster.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAskPoster.Text = "Poster Only" + ' + 'mnuAllAskFanart + ' + Me.mnuAllAskFanart.Name = "mnuAllAskFanart" + Me.mnuAllAskFanart.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAskFanart.Text = "Fanart Only" + ' + 'mnuAllAskExtra + ' + Me.mnuAllAskExtra.Name = "mnuAllAskExtra" + Me.mnuAllAskExtra.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAskExtra.Text = "Extrathumbs Only" + ' + 'mnuAllAskTrailer + ' + Me.mnuAllAskTrailer.Name = "mnuAllAskTrailer" + Me.mnuAllAskTrailer.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAskTrailer.Text = "Trailer Only" + ' + 'mnuAllAskMI + ' + Me.mnuAllAskMI.Name = "mnuAllAskMI" + Me.mnuAllAskMI.Size = New System.Drawing.Size(165, 22) + Me.mnuAllAskMI.Text = "Meta Data Only" + ' + 'FullSkipToolStripMenuItem + ' + Me.FullSkipToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuAllSkipAll}) + Me.FullSkipToolStripMenuItem.Name = "FullSkipToolStripMenuItem" + Me.FullSkipToolStripMenuItem.Size = New System.Drawing.Size(264, 22) + Me.FullSkipToolStripMenuItem.Text = "Skip (Do Nothing If No Exact Match)" + Me.FullSkipToolStripMenuItem.Visible = False + ' + 'mnuAllSkipAll + ' + Me.mnuAllSkipAll.Name = "mnuAllSkipAll" + Me.mnuAllSkipAll.Size = New System.Drawing.Size(117, 22) + Me.mnuAllSkipAll.Text = "All Items" + ' + 'UpdateOnlyToolStripMenuItem + ' + Me.UpdateOnlyToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.UpdateAutoToolStripMenuItem, Me.UpdateAskToolStripMenuItem}) + Me.UpdateOnlyToolStripMenuItem.Name = "UpdateOnlyToolStripMenuItem" + Me.UpdateOnlyToolStripMenuItem.Size = New System.Drawing.Size(183, 22) + Me.UpdateOnlyToolStripMenuItem.Text = "Movies Missing Items" + ' + 'UpdateAutoToolStripMenuItem + ' + Me.UpdateAutoToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuMissAutoAll, Me.mnuMissAutoNfo, Me.mnuMissAutoPoster, Me.mnuMissAutoFanart, Me.mnuMissAutoExtra, Me.mnuMissAutoTrailer}) + Me.UpdateAutoToolStripMenuItem.Name = "UpdateAutoToolStripMenuItem" + Me.UpdateAutoToolStripMenuItem.Size = New System.Drawing.Size(264, 22) + Me.UpdateAutoToolStripMenuItem.Text = "Automatic (Force Best Match)" + ' + 'mnuMissAutoAll + ' + Me.mnuMissAutoAll.Name = "mnuMissAutoAll" + Me.mnuMissAutoAll.Size = New System.Drawing.Size(165, 22) + Me.mnuMissAutoAll.Text = "All Items" + ' + 'mnuMissAutoNfo + ' + Me.mnuMissAutoNfo.Name = "mnuMissAutoNfo" + Me.mnuMissAutoNfo.Size = New System.Drawing.Size(165, 22) + Me.mnuMissAutoNfo.Text = "NFO Only" + ' + 'mnuMissAutoPoster + ' + Me.mnuMissAutoPoster.Name = "mnuMissAutoPoster" + Me.mnuMissAutoPoster.Size = New System.Drawing.Size(165, 22) + Me.mnuMissAutoPoster.Text = "Poster Only" + ' + 'mnuMissAutoFanart + ' + Me.mnuMissAutoFanart.Name = "mnuMissAutoFanart" + Me.mnuMissAutoFanart.Size = New System.Drawing.Size(165, 22) + Me.mnuMissAutoFanart.Text = "Fanart Only" + ' + 'mnuMissAutoExtra + ' + Me.mnuMissAutoExtra.Name = "mnuMissAutoExtra" + Me.mnuMissAutoExtra.Size = New System.Drawing.Size(165, 22) + Me.mnuMissAutoExtra.Text = "Extrathumbs Only" + ' + 'mnuMissAutoTrailer + ' + Me.mnuMissAutoTrailer.Name = "mnuMissAutoTrailer" + Me.mnuMissAutoTrailer.Size = New System.Drawing.Size(165, 22) + Me.mnuMissAutoTrailer.Text = "Trailer Only" + ' + 'UpdateAskToolStripMenuItem + ' + Me.UpdateAskToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuMissAskAll, Me.mnuMissAskNfo, Me.mnuMissAskPoster, Me.mnuMissAskFanart, Me.mnuMissAskExtra, Me.mnuMissAskTrailer}) + Me.UpdateAskToolStripMenuItem.Name = "UpdateAskToolStripMenuItem" + Me.UpdateAskToolStripMenuItem.Size = New System.Drawing.Size(264, 22) + Me.UpdateAskToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" + ' + 'mnuMissAskAll + ' + Me.mnuMissAskAll.Name = "mnuMissAskAll" + Me.mnuMissAskAll.Size = New System.Drawing.Size(165, 22) + Me.mnuMissAskAll.Text = "All Items" + ' + 'mnuMissAskNfo + ' + Me.mnuMissAskNfo.Name = "mnuMissAskNfo" + Me.mnuMissAskNfo.Size = New System.Drawing.Size(165, 22) + Me.mnuMissAskNfo.Text = "NFO Only" + ' + 'mnuMissAskPoster + ' + Me.mnuMissAskPoster.Name = "mnuMissAskPoster" + Me.mnuMissAskPoster.Size = New System.Drawing.Size(165, 22) + Me.mnuMissAskPoster.Text = "Poster Only" + ' + 'mnuMissAskFanart + ' + Me.mnuMissAskFanart.Name = "mnuMissAskFanart" + Me.mnuMissAskFanart.Size = New System.Drawing.Size(165, 22) + Me.mnuMissAskFanart.Text = "Fanart Only" + ' + 'mnuMissAskExtra + ' + Me.mnuMissAskExtra.Name = "mnuMissAskExtra" + Me.mnuMissAskExtra.Size = New System.Drawing.Size(165, 22) + Me.mnuMissAskExtra.Text = "Extrathumbs Only" + ' + 'mnuMissAskTrailer + ' + Me.mnuMissAskTrailer.Name = "mnuMissAskTrailer" + Me.mnuMissAskTrailer.Size = New System.Drawing.Size(165, 22) + Me.mnuMissAskTrailer.Text = "Trailer Only" + ' + 'NewMoviesToolStripMenuItem + ' + Me.NewMoviesToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.AutomaticForceBestMatchToolStripMenuItem, Me.AskRequireInputToolStripMenuItem}) + Me.NewMoviesToolStripMenuItem.Name = "NewMoviesToolStripMenuItem" + Me.NewMoviesToolStripMenuItem.Size = New System.Drawing.Size(183, 22) + Me.NewMoviesToolStripMenuItem.Text = "New Movies" + ' + 'AutomaticForceBestMatchToolStripMenuItem + ' + Me.AutomaticForceBestMatchToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuNewAutoAll, Me.mnuNewAutoNfo, Me.mnuNewAutoPoster, Me.mnuNewAutoFanart, Me.mnuNewAutoExtra, Me.mnuNewAutoTrailer, Me.mnuNewAutoMI}) + Me.AutomaticForceBestMatchToolStripMenuItem.Name = "AutomaticForceBestMatchToolStripMenuItem" + Me.AutomaticForceBestMatchToolStripMenuItem.Size = New System.Drawing.Size(264, 22) + Me.AutomaticForceBestMatchToolStripMenuItem.Text = "Automatic (Force Best Match)" + ' + 'mnuNewAutoAll + ' + Me.mnuNewAutoAll.Name = "mnuNewAutoAll" + Me.mnuNewAutoAll.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAutoAll.Text = "All Items" + ' + 'mnuNewAutoNfo + ' + Me.mnuNewAutoNfo.Name = "mnuNewAutoNfo" + Me.mnuNewAutoNfo.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAutoNfo.Text = "NFO Only" + ' + 'mnuNewAutoPoster + ' + Me.mnuNewAutoPoster.Name = "mnuNewAutoPoster" + Me.mnuNewAutoPoster.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAutoPoster.Text = "Poster Only" + ' + 'mnuNewAutoFanart + ' + Me.mnuNewAutoFanart.Name = "mnuNewAutoFanart" + Me.mnuNewAutoFanart.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAutoFanart.Text = "Fanart Only" + ' + 'mnuNewAutoExtra + ' + Me.mnuNewAutoExtra.Name = "mnuNewAutoExtra" + Me.mnuNewAutoExtra.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAutoExtra.Text = "Extrathumbs Only" + ' + 'mnuNewAutoTrailer + ' + Me.mnuNewAutoTrailer.Name = "mnuNewAutoTrailer" + Me.mnuNewAutoTrailer.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAutoTrailer.Text = "Trailer Only" + ' + 'mnuNewAutoMI + ' + Me.mnuNewAutoMI.Name = "mnuNewAutoMI" + Me.mnuNewAutoMI.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAutoMI.Text = "Meta Data Only" + ' + 'AskRequireInputToolStripMenuItem + ' + Me.AskRequireInputToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuNewAskAll, Me.mnuNewAskNfo, Me.mnuNewAskPoster, Me.mnuNewAskFanart, Me.mnuNewAskExtra, Me.mnuNewAskTrailer, Me.mnuNewAskMI}) + Me.AskRequireInputToolStripMenuItem.Name = "AskRequireInputToolStripMenuItem" + Me.AskRequireInputToolStripMenuItem.Size = New System.Drawing.Size(264, 22) + Me.AskRequireInputToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" + ' + 'mnuNewAskAll + ' + Me.mnuNewAskAll.Name = "mnuNewAskAll" + Me.mnuNewAskAll.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAskAll.Text = "All Items" + ' + 'mnuNewAskNfo + ' + Me.mnuNewAskNfo.Name = "mnuNewAskNfo" + Me.mnuNewAskNfo.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAskNfo.Text = "NFO Only" + ' + 'mnuNewAskPoster + ' + Me.mnuNewAskPoster.Name = "mnuNewAskPoster" + Me.mnuNewAskPoster.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAskPoster.Text = "Poster Only" + ' + 'mnuNewAskFanart + ' + Me.mnuNewAskFanart.Name = "mnuNewAskFanart" + Me.mnuNewAskFanart.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAskFanart.Text = "Fanart Only" + ' + 'mnuNewAskExtra + ' + Me.mnuNewAskExtra.Name = "mnuNewAskExtra" + Me.mnuNewAskExtra.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAskExtra.Text = "Extrathumbs Only" + ' + 'mnuNewAskTrailer + ' + Me.mnuNewAskTrailer.Name = "mnuNewAskTrailer" + Me.mnuNewAskTrailer.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAskTrailer.Text = "Trailer Only" + ' + 'mnuNewAskMI + ' + Me.mnuNewAskMI.Name = "mnuNewAskMI" + Me.mnuNewAskMI.Size = New System.Drawing.Size(165, 22) + Me.mnuNewAskMI.Text = "Meta Data Only" + ' + 'MarkedMoviesToolStripMenuItem + ' + Me.MarkedMoviesToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.AutomaticForceBestMatchToolStripMenuItem1, Me.AskRequireInputIfNoExactMatchToolStripMenuItem}) + Me.MarkedMoviesToolStripMenuItem.Name = "MarkedMoviesToolStripMenuItem" + Me.MarkedMoviesToolStripMenuItem.Size = New System.Drawing.Size(183, 22) + Me.MarkedMoviesToolStripMenuItem.Text = "Marked Movies" + ' + 'AutomaticForceBestMatchToolStripMenuItem1 + ' + Me.AutomaticForceBestMatchToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuMarkAutoAll, Me.mnuMarkAutoNfo, Me.mnuMarkAutoPoster, Me.mnuMarkAutoFanart, Me.mnuMarkAutoExtra, Me.mnuMarkAutoTrailer, Me.mnuMarkAutoMI}) + Me.AutomaticForceBestMatchToolStripMenuItem1.Name = "AutomaticForceBestMatchToolStripMenuItem1" + Me.AutomaticForceBestMatchToolStripMenuItem1.Size = New System.Drawing.Size(264, 22) + Me.AutomaticForceBestMatchToolStripMenuItem1.Text = "Automatic (Force Best Match)" + ' + 'mnuMarkAutoAll + ' + Me.mnuMarkAutoAll.Name = "mnuMarkAutoAll" + Me.mnuMarkAutoAll.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAutoAll.Text = "All Items" + ' + 'mnuMarkAutoNfo + ' + Me.mnuMarkAutoNfo.Name = "mnuMarkAutoNfo" + Me.mnuMarkAutoNfo.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAutoNfo.Text = "NFO Only" + ' + 'mnuMarkAutoPoster + ' + Me.mnuMarkAutoPoster.Name = "mnuMarkAutoPoster" + Me.mnuMarkAutoPoster.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAutoPoster.Text = "Poster Only" + ' + 'mnuMarkAutoFanart + ' + Me.mnuMarkAutoFanart.Name = "mnuMarkAutoFanart" + Me.mnuMarkAutoFanart.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAutoFanart.Text = "Fanart Only" + ' + 'mnuMarkAutoExtra + ' + Me.mnuMarkAutoExtra.Name = "mnuMarkAutoExtra" + Me.mnuMarkAutoExtra.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAutoExtra.Text = "Extrathumbs Only" + ' + 'mnuMarkAutoTrailer + ' + Me.mnuMarkAutoTrailer.Name = "mnuMarkAutoTrailer" + Me.mnuMarkAutoTrailer.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAutoTrailer.Text = "Trailer Only" + ' + 'mnuMarkAutoMI + ' + Me.mnuMarkAutoMI.Name = "mnuMarkAutoMI" + Me.mnuMarkAutoMI.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAutoMI.Text = "Meta Data Only" + ' + 'AskRequireInputIfNoExactMatchToolStripMenuItem + ' + Me.AskRequireInputIfNoExactMatchToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuMarkAskAll, Me.mnuMarkAskNfo, Me.mnuMarkAskPoster, Me.mnuMarkAskFanart, Me.mnuMarkAskExtra, Me.mnuMarkAskTrailer, Me.mnuMarkAskMI}) + Me.AskRequireInputIfNoExactMatchToolStripMenuItem.Name = "AskRequireInputIfNoExactMatchToolStripMenuItem" + Me.AskRequireInputIfNoExactMatchToolStripMenuItem.Size = New System.Drawing.Size(264, 22) + Me.AskRequireInputIfNoExactMatchToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" + ' + 'mnuMarkAskAll + ' + Me.mnuMarkAskAll.Name = "mnuMarkAskAll" + Me.mnuMarkAskAll.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAskAll.Text = "All Items" + ' + 'mnuMarkAskNfo + ' + Me.mnuMarkAskNfo.Name = "mnuMarkAskNfo" + Me.mnuMarkAskNfo.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAskNfo.Text = "NFO Only" + ' + 'mnuMarkAskPoster + ' + Me.mnuMarkAskPoster.Name = "mnuMarkAskPoster" + Me.mnuMarkAskPoster.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAskPoster.Text = "Poster Only" + ' + 'mnuMarkAskFanart + ' + Me.mnuMarkAskFanart.Name = "mnuMarkAskFanart" + Me.mnuMarkAskFanart.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAskFanart.Text = "Fanart Only" + ' + 'mnuMarkAskExtra + ' + Me.mnuMarkAskExtra.Name = "mnuMarkAskExtra" + Me.mnuMarkAskExtra.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAskExtra.Text = "Extrathumbs Only" + ' + 'mnuMarkAskTrailer + ' + Me.mnuMarkAskTrailer.Name = "mnuMarkAskTrailer" + Me.mnuMarkAskTrailer.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAskTrailer.Text = "Trailer Only" + ' + 'mnuMarkAskMI + ' + Me.mnuMarkAskMI.Name = "mnuMarkAskMI" + Me.mnuMarkAskMI.Size = New System.Drawing.Size(165, 22) + Me.mnuMarkAskMI.Text = "Meta Data Only" + ' + 'CurrentFilterToolStripMenuItem + ' + Me.CurrentFilterToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.AutomaticForceBestMatchToolStripMenuItem2, Me.AskRequireInputIfNoExactMatchToolStripMenuItem1}) + Me.CurrentFilterToolStripMenuItem.Name = "CurrentFilterToolStripMenuItem" + Me.CurrentFilterToolStripMenuItem.Size = New System.Drawing.Size(183, 22) + Me.CurrentFilterToolStripMenuItem.Text = "Current Filter" + ' + 'AutomaticForceBestMatchToolStripMenuItem2 + ' + Me.AutomaticForceBestMatchToolStripMenuItem2.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuFilterAutoAll, Me.mnuFilterAutoNfo, Me.mnuFilterAutoPoster, Me.mnuFilterAutoFanart, Me.mnuFilterAutoExtra, Me.mnuFilterAutoTrailer, Me.mnuFilterAutoMI}) + Me.AutomaticForceBestMatchToolStripMenuItem2.Name = "AutomaticForceBestMatchToolStripMenuItem2" + Me.AutomaticForceBestMatchToolStripMenuItem2.Size = New System.Drawing.Size(264, 22) + Me.AutomaticForceBestMatchToolStripMenuItem2.Text = "Automatic (Force Best Match)" + ' + 'mnuFilterAutoAll + ' + Me.mnuFilterAutoAll.Name = "mnuFilterAutoAll" + Me.mnuFilterAutoAll.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAutoAll.Text = "All Items" + ' + 'mnuFilterAutoNfo + ' + Me.mnuFilterAutoNfo.Name = "mnuFilterAutoNfo" + Me.mnuFilterAutoNfo.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAutoNfo.Text = "NFO Only" + ' + 'mnuFilterAutoPoster + ' + Me.mnuFilterAutoPoster.Name = "mnuFilterAutoPoster" + Me.mnuFilterAutoPoster.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAutoPoster.Text = "Poster Only" + ' + 'mnuFilterAutoFanart + ' + Me.mnuFilterAutoFanart.Name = "mnuFilterAutoFanart" + Me.mnuFilterAutoFanart.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAutoFanart.Text = "Fanart Only" + ' + 'mnuFilterAutoExtra + ' + Me.mnuFilterAutoExtra.Name = "mnuFilterAutoExtra" + Me.mnuFilterAutoExtra.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAutoExtra.Text = "Extrathumbs Only" + ' + 'mnuFilterAutoTrailer + ' + Me.mnuFilterAutoTrailer.Name = "mnuFilterAutoTrailer" + Me.mnuFilterAutoTrailer.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAutoTrailer.Text = "Trailer Only" + ' + 'mnuFilterAutoMI + ' + Me.mnuFilterAutoMI.Name = "mnuFilterAutoMI" + Me.mnuFilterAutoMI.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAutoMI.Text = "Meta Data Only" + ' + 'AskRequireInputIfNoExactMatchToolStripMenuItem1 + ' + Me.AskRequireInputIfNoExactMatchToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuFilterAskAll, Me.mnuFilterAskNfo, Me.mnuFilterAskPoster, Me.mnuFilterAskFanart, Me.mnuFilterAskExtra, Me.mnuFilterAskTrailer, Me.mnuFilterAskMI}) + Me.AskRequireInputIfNoExactMatchToolStripMenuItem1.Name = "AskRequireInputIfNoExactMatchToolStripMenuItem1" + Me.AskRequireInputIfNoExactMatchToolStripMenuItem1.Size = New System.Drawing.Size(264, 22) + Me.AskRequireInputIfNoExactMatchToolStripMenuItem1.Text = "Ask (Require Input If No Exact Match)" + ' + 'mnuFilterAskAll + ' + Me.mnuFilterAskAll.Name = "mnuFilterAskAll" + Me.mnuFilterAskAll.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAskAll.Text = "All Items" + ' + 'mnuFilterAskNfo + ' + Me.mnuFilterAskNfo.Name = "mnuFilterAskNfo" + Me.mnuFilterAskNfo.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAskNfo.Text = "NFO Only" + ' + 'mnuFilterAskPoster + ' + Me.mnuFilterAskPoster.Name = "mnuFilterAskPoster" + Me.mnuFilterAskPoster.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAskPoster.Text = "Poster Only" + ' + 'mnuFilterAskFanart + ' + Me.mnuFilterAskFanart.Name = "mnuFilterAskFanart" + Me.mnuFilterAskFanart.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAskFanart.Text = "Fanart Only" + ' + 'mnuFilterAskExtra + ' + Me.mnuFilterAskExtra.Name = "mnuFilterAskExtra" + Me.mnuFilterAskExtra.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAskExtra.Text = "Extrathumbs Only" + ' + 'mnuFilterAskTrailer + ' + Me.mnuFilterAskTrailer.Name = "mnuFilterAskTrailer" + Me.mnuFilterAskTrailer.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAskTrailer.Text = "Trailer Only" + ' + 'mnuFilterAskMI + ' + Me.mnuFilterAskMI.Name = "mnuFilterAskMI" + Me.mnuFilterAskMI.Size = New System.Drawing.Size(165, 22) + Me.mnuFilterAskMI.Text = "Meta Data Only" + ' + 'CustomUpdaterToolStripMenuItem + ' + Me.CustomUpdaterToolStripMenuItem.Name = "CustomUpdaterToolStripMenuItem" + Me.CustomUpdaterToolStripMenuItem.Size = New System.Drawing.Size(183, 22) + Me.CustomUpdaterToolStripMenuItem.Text = "Custom Scraper..." + ' + 'tsbRefreshMedia + ' + Me.tsbRefreshMedia.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuMoviesUpdate, Me.mnuTVShowUpdate}) + Me.tsbRefreshMedia.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.tsbRefreshMedia.Image = CType(resources.GetObject("tsbRefreshMedia.Image"), System.Drawing.Image) + Me.tsbRefreshMedia.ImageTransparentColor = System.Drawing.Color.Magenta + Me.tsbRefreshMedia.Name = "tsbRefreshMedia" + Me.tsbRefreshMedia.Size = New System.Drawing.Size(114, 22) + Me.tsbRefreshMedia.Text = "Update Library" + ' + 'mnuMoviesUpdate + ' + Me.mnuMoviesUpdate.Name = "mnuMoviesUpdate" + Me.mnuMoviesUpdate.Size = New System.Drawing.Size(123, 22) + Me.mnuMoviesUpdate.Text = "Movies" + ' + 'mnuTVShowUpdate + ' + Me.mnuTVShowUpdate.Name = "mnuTVShowUpdate" + Me.mnuTVShowUpdate.Size = New System.Drawing.Size(123, 22) + Me.mnuTVShowUpdate.Text = "TV Shows" + ' + 'tsbMediaCenters + ' + Me.tsbMediaCenters.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right + Me.tsbMediaCenters.Enabled = False + Me.tsbMediaCenters.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(238, Byte)) + Me.tsbMediaCenters.Image = CType(resources.GetObject("tsbMediaCenters.Image"), System.Drawing.Image) + Me.tsbMediaCenters.ImageTransparentColor = System.Drawing.Color.Magenta + Me.tsbMediaCenters.Name = "tsbMediaCenters" + Me.tsbMediaCenters.Size = New System.Drawing.Size(113, 22) + Me.tsbMediaCenters.Text = "Media Centers" + Me.tsbMediaCenters.Visible = False + ' + 'ilColumnIcons + ' + Me.ilColumnIcons.ImageStream = CType(resources.GetObject("ilColumnIcons.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.ilColumnIcons.TransparentColor = System.Drawing.Color.Transparent + Me.ilColumnIcons.Images.SetKeyName(0, "new_page.png") + Me.ilColumnIcons.Images.SetKeyName(1, "image.png") + Me.ilColumnIcons.Images.SetKeyName(2, "info.png") + Me.ilColumnIcons.Images.SetKeyName(3, "favorite_film.png") + Me.ilColumnIcons.Images.SetKeyName(4, "comment.png") + Me.ilColumnIcons.Images.SetKeyName(5, "folder_full.png") + Me.ilColumnIcons.Images.SetKeyName(6, "listcheck.png") + Me.ilColumnIcons.Images.SetKeyName(7, "listdotgrey.png") + Me.ilColumnIcons.Images.SetKeyName(8, "haswatched.png") + ' + 'tmrWait + ' + Me.tmrWait.Interval = 250 + ' + 'tmrLoad + ' + ' + 'tmrSearchWait + ' + Me.tmrSearchWait.Interval = 250 + ' + 'tmrSearch + ' + Me.tmrSearch.Interval = 250 + ' + 'tmrFilterAni + ' + Me.tmrFilterAni.Interval = 1 + ' + 'ToolTips + ' + Me.ToolTips.AutoPopDelay = 15000 + Me.ToolTips.InitialDelay = 500 + Me.ToolTips.ReshowDelay = 100 + ' + 'tmrWaitShow + ' + Me.tmrWaitShow.Interval = 250 + ' + 'tmrLoadShow + ' + ' + 'tmrWaitSeason + ' + Me.tmrWaitSeason.Interval = 250 + ' + 'tmrLoadSeason + ' + ' + 'tmrWaitEp + ' + Me.tmrWaitEp.Interval = 250 + ' + 'tmrLoadEp + ' + ' + 'cmnuTrayIcon + ' + Me.cmnuTrayIcon.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuTrayIconTitle, Me.ToolStripSeparator21, Me.cmnuTrayIconUpdateMedia, Me.cmnuTrayIconScrapeMedia, Me.cmnuTrayIconMediaCenters, Me.ToolStripSeparator23, Me.cmnuTrayIconTools, Me.ToolStripSeparator22, Me.cmnuTrayIconSettings, Me.ToolStripSeparator13, Me.cmnuTrayIconExit}) + Me.cmnuTrayIcon.Name = "cmnuTrayIcon" + Me.cmnuTrayIcon.Size = New System.Drawing.Size(200, 182) + Me.cmnuTrayIcon.Text = "Ember Media Manager" + ' + 'cmnuTrayIconTitle + ' + Me.cmnuTrayIconTitle.Enabled = False + Me.cmnuTrayIconTitle.Image = CType(resources.GetObject("cmnuTrayIconTitle.Image"), System.Drawing.Image) + Me.cmnuTrayIconTitle.Name = "cmnuTrayIconTitle" + Me.cmnuTrayIconTitle.Size = New System.Drawing.Size(199, 22) + Me.cmnuTrayIconTitle.Text = "Ember Media Manager" + ' + 'ToolStripSeparator21 + ' + Me.ToolStripSeparator21.Name = "ToolStripSeparator21" + Me.ToolStripSeparator21.Size = New System.Drawing.Size(196, 6) + ' + 'cmnuTrayIconUpdateMedia + ' + Me.cmnuTrayIconUpdateMedia.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cmnuTrayIconUpdateMovies, Me.cmnuTrayIconUpdateTV}) + Me.cmnuTrayIconUpdateMedia.Image = CType(resources.GetObject("cmnuTrayIconUpdateMedia.Image"), System.Drawing.Image) + Me.cmnuTrayIconUpdateMedia.Name = "cmnuTrayIconUpdateMedia" + Me.cmnuTrayIconUpdateMedia.Size = New System.Drawing.Size(199, 22) + Me.cmnuTrayIconUpdateMedia.Text = "Update Media" + ' + 'cmnuTrayIconUpdateMovies + ' + Me.cmnuTrayIconUpdateMovies.Name = "cmnuTrayIconUpdateMovies" + Me.cmnuTrayIconUpdateMovies.Size = New System.Drawing.Size(128, 22) + Me.cmnuTrayIconUpdateMovies.Text = "Movies" + ' + 'cmnuTrayIconUpdateTV + ' + Me.cmnuTrayIconUpdateTV.Name = "cmnuTrayIconUpdateTV" + Me.cmnuTrayIconUpdateTV.Size = New System.Drawing.Size(128, 22) + Me.cmnuTrayIconUpdateTV.Text = "TV Shows" + ' + 'cmnuTrayIconScrapeMedia + ' + Me.cmnuTrayIconScrapeMedia.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TrayFullToolStripMenuItem, Me.TrayUpdateOnlyToolStripMenuItem, Me.TrayNewMoviesToolStripMenuItem, Me.TrayMarkedMoviesToolStripMenuItem, Me.TrayCurrentFilterToolStripMenuItem, Me.TrayCustomUpdaterToolStripMenuItem}) + Me.cmnuTrayIconScrapeMedia.Image = CType(resources.GetObject("cmnuTrayIconScrapeMedia.Image"), System.Drawing.Image) + Me.cmnuTrayIconScrapeMedia.Name = "cmnuTrayIconScrapeMedia" + Me.cmnuTrayIconScrapeMedia.Size = New System.Drawing.Size(199, 22) + Me.cmnuTrayIconScrapeMedia.Text = "Scrape Media" + ' + 'TrayFullToolStripMenuItem + ' + Me.TrayFullToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TrayFullAutoToolStripMenuItem, Me.TrayFullAskToolStripMenuItem}) + Me.TrayFullToolStripMenuItem.Name = "TrayFullToolStripMenuItem" + Me.TrayFullToolStripMenuItem.Size = New System.Drawing.Size(193, 22) + Me.TrayFullToolStripMenuItem.Text = "All Movies" + ' + 'TrayFullAutoToolStripMenuItem + ' + Me.TrayFullAutoToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayAllAutoAll, Me.mnuTrayAllAutoNfo, Me.mnuTrayAllAutoPoster, Me.mnuTrayAllAutoFanart, Me.mnuTrayAllAutoExtra, Me.mnuTrayAllAutoTrailer, Me.mnuTrayAllAutoMI}) + Me.TrayFullAutoToolStripMenuItem.Name = "TrayFullAutoToolStripMenuItem" + Me.TrayFullAutoToolStripMenuItem.Size = New System.Drawing.Size(284, 22) + Me.TrayFullAutoToolStripMenuItem.Text = "Automatic (Force Best Match)" + ' + 'mnuTrayAllAutoAll + ' + Me.mnuTrayAllAutoAll.Name = "mnuTrayAllAutoAll" + Me.mnuTrayAllAutoAll.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAutoAll.Text = "All Items" + ' + 'mnuTrayAllAutoNfo + ' + Me.mnuTrayAllAutoNfo.Name = "mnuTrayAllAutoNfo" + Me.mnuTrayAllAutoNfo.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAutoNfo.Text = "NFO Only" + ' + 'mnuTrayAllAutoPoster + ' + Me.mnuTrayAllAutoPoster.Name = "mnuTrayAllAutoPoster" + Me.mnuTrayAllAutoPoster.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAutoPoster.Text = "Poster Only" + ' + 'mnuTrayAllAutoFanart + ' + Me.mnuTrayAllAutoFanart.Name = "mnuTrayAllAutoFanart" + Me.mnuTrayAllAutoFanart.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAutoFanart.Text = "Fanart Only" + ' + 'mnuTrayAllAutoExtra + ' + Me.mnuTrayAllAutoExtra.Name = "mnuTrayAllAutoExtra" + Me.mnuTrayAllAutoExtra.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAutoExtra.Text = "Extrathumbs Only" + ' + 'mnuTrayAllAutoTrailer + ' + Me.mnuTrayAllAutoTrailer.Name = "mnuTrayAllAutoTrailer" + Me.mnuTrayAllAutoTrailer.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAutoTrailer.Text = "Trailer Only" + ' + 'mnuTrayAllAutoMI + ' + Me.mnuTrayAllAutoMI.Name = "mnuTrayAllAutoMI" + Me.mnuTrayAllAutoMI.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAutoMI.Text = "Meta Data Only" + ' + 'TrayFullAskToolStripMenuItem + ' + Me.TrayFullAskToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayAllAskAll, Me.mnuTrayAllAskNfo, Me.mnuTrayAllAskPoster, Me.mnuTrayAllAskFanart, Me.mnuTrayAllAskExtra, Me.mnuTrayAllAskTrailer, Me.mnuTrayAllAskMI}) + Me.TrayFullAskToolStripMenuItem.Name = "TrayFullAskToolStripMenuItem" + Me.TrayFullAskToolStripMenuItem.Size = New System.Drawing.Size(284, 22) + Me.TrayFullAskToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" + ' + 'mnuTrayAllAskAll + ' + Me.mnuTrayAllAskAll.Name = "mnuTrayAllAskAll" + Me.mnuTrayAllAskAll.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAskAll.Text = "All Items" + ' + 'mnuTrayAllAskNfo + ' + Me.mnuTrayAllAskNfo.Name = "mnuTrayAllAskNfo" + Me.mnuTrayAllAskNfo.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAskNfo.Text = "NFO Only" + ' + 'mnuTrayAllAskPoster + ' + Me.mnuTrayAllAskPoster.Name = "mnuTrayAllAskPoster" + Me.mnuTrayAllAskPoster.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAskPoster.Text = "Poster Only" + ' + 'mnuTrayAllAskFanart + ' + Me.mnuTrayAllAskFanart.Name = "mnuTrayAllAskFanart" + Me.mnuTrayAllAskFanart.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAskFanart.Text = "Fanart Only" + ' + 'mnuTrayAllAskExtra + ' + Me.mnuTrayAllAskExtra.Name = "mnuTrayAllAskExtra" + Me.mnuTrayAllAskExtra.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAskExtra.Text = "Extrathumbs Only" + ' + 'mnuTrayAllAskTrailer + ' + Me.mnuTrayAllAskTrailer.Name = "mnuTrayAllAskTrailer" + Me.mnuTrayAllAskTrailer.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAskTrailer.Text = "Trailer Only" + ' + 'mnuTrayAllAskMI + ' + Me.mnuTrayAllAskMI.Name = "mnuTrayAllAskMI" + Me.mnuTrayAllAskMI.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayAllAskMI.Text = "Meta Data Only" + ' + 'TrayUpdateOnlyToolStripMenuItem + ' + Me.TrayUpdateOnlyToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TrayUpdateAutoToolStripMenuItem, Me.TrayUpdateAskToolStripMenuItem}) + Me.TrayUpdateOnlyToolStripMenuItem.Name = "TrayUpdateOnlyToolStripMenuItem" + Me.TrayUpdateOnlyToolStripMenuItem.Size = New System.Drawing.Size(193, 22) + Me.TrayUpdateOnlyToolStripMenuItem.Text = "Movies Missing Items" + ' + 'TrayUpdateAutoToolStripMenuItem + ' + Me.TrayUpdateAutoToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayMissAutoAll, Me.mnuTrayMissAutoNfo, Me.mnuTrayMissAutoPoster, Me.mnuTrayMissAutoFanart, Me.mnuTrayMissAutoExtra, Me.mnuTrayMissAutoTrailer}) + Me.TrayUpdateAutoToolStripMenuItem.Name = "TrayUpdateAutoToolStripMenuItem" + Me.TrayUpdateAutoToolStripMenuItem.Size = New System.Drawing.Size(284, 22) + Me.TrayUpdateAutoToolStripMenuItem.Text = "Automatic (Force Best Match)" + ' + 'mnuTrayMissAutoAll + ' + Me.mnuTrayMissAutoAll.Name = "mnuTrayMissAutoAll" + Me.mnuTrayMissAutoAll.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMissAutoAll.Text = "All Items" + ' + 'mnuTrayMissAutoNfo + ' + Me.mnuTrayMissAutoNfo.Name = "mnuTrayMissAutoNfo" + Me.mnuTrayMissAutoNfo.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMissAutoNfo.Text = "NFO Only" + ' + 'mnuTrayMissAutoPoster + ' + Me.mnuTrayMissAutoPoster.Name = "mnuTrayMissAutoPoster" + Me.mnuTrayMissAutoPoster.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMissAutoPoster.Text = "Poster Only" + ' + 'mnuTrayMissAutoFanart + ' + Me.mnuTrayMissAutoFanart.Name = "mnuTrayMissAutoFanart" + Me.mnuTrayMissAutoFanart.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMissAutoFanart.Text = "Fanart Only" + ' + 'mnuTrayMissAutoExtra + ' + Me.mnuTrayMissAutoExtra.Name = "mnuTrayMissAutoExtra" + Me.mnuTrayMissAutoExtra.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMissAutoExtra.Text = "Extrathumbs Only" + ' + 'mnuTrayMissAutoTrailer + ' + Me.mnuTrayMissAutoTrailer.Name = "mnuTrayMissAutoTrailer" + Me.mnuTrayMissAutoTrailer.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMissAutoTrailer.Text = "Trailer Only" + ' + 'TrayUpdateAskToolStripMenuItem + ' + Me.TrayUpdateAskToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayMissAskAll, Me.mnuTrayMissAskNfo, Me.mnuTrayMissAskPoster, Me.mnuTrayMissAskFanart, Me.mnuTrayMissAskExtra, Me.mnuTrayMissAskTrailer}) + Me.TrayUpdateAskToolStripMenuItem.Name = "TrayUpdateAskToolStripMenuItem" + Me.TrayUpdateAskToolStripMenuItem.Size = New System.Drawing.Size(284, 22) + Me.TrayUpdateAskToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" + ' + 'mnuTrayMissAskAll + ' + Me.mnuTrayMissAskAll.Name = "mnuTrayMissAskAll" + Me.mnuTrayMissAskAll.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMissAskAll.Text = "All Items" + ' + 'mnuTrayMissAskNfo + ' + Me.mnuTrayMissAskNfo.Name = "mnuTrayMissAskNfo" + Me.mnuTrayMissAskNfo.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMissAskNfo.Text = "NFO Only" + ' + 'mnuTrayMissAskPoster + ' + Me.mnuTrayMissAskPoster.Name = "mnuTrayMissAskPoster" + Me.mnuTrayMissAskPoster.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMissAskPoster.Text = "Poster Only" + ' + 'mnuTrayMissAskFanart + ' + Me.mnuTrayMissAskFanart.Name = "mnuTrayMissAskFanart" + Me.mnuTrayMissAskFanart.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMissAskFanart.Text = "Fanart Only" + ' + 'mnuTrayMissAskExtra + ' + Me.mnuTrayMissAskExtra.Name = "mnuTrayMissAskExtra" + Me.mnuTrayMissAskExtra.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMissAskExtra.Text = "Extrathumbs Only" + ' + 'mnuTrayMissAskTrailer + ' + Me.mnuTrayMissAskTrailer.Name = "mnuTrayMissAskTrailer" + Me.mnuTrayMissAskTrailer.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMissAskTrailer.Text = "Trailer Only" + ' + 'TrayNewMoviesToolStripMenuItem + ' + Me.TrayNewMoviesToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TrayAutomaticForceBestMatchToolStripMenuItem, Me.TrayAskRequireInputToolStripMenuItem}) + Me.TrayNewMoviesToolStripMenuItem.Name = "TrayNewMoviesToolStripMenuItem" + Me.TrayNewMoviesToolStripMenuItem.Size = New System.Drawing.Size(193, 22) + Me.TrayNewMoviesToolStripMenuItem.Text = "New Movies" + ' + 'TrayAutomaticForceBestMatchToolStripMenuItem + ' + Me.TrayAutomaticForceBestMatchToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayNewAutoAll, Me.mnuTrayNewAutoNfo, Me.mnuTrayNewAutoPoster, Me.mnuTrayNewAutoFanart, Me.mnuTrayNewAutoExtra, Me.mnuTrayNewAutoTrailer, Me.mnuTrayNewAutoMI}) + Me.TrayAutomaticForceBestMatchToolStripMenuItem.Name = "TrayAutomaticForceBestMatchToolStripMenuItem" + Me.TrayAutomaticForceBestMatchToolStripMenuItem.Size = New System.Drawing.Size(284, 22) + Me.TrayAutomaticForceBestMatchToolStripMenuItem.Text = "Automatic (Force Best Match)" + ' + 'mnuTrayNewAutoAll + ' + Me.mnuTrayNewAutoAll.Name = "mnuTrayNewAutoAll" + Me.mnuTrayNewAutoAll.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAutoAll.Text = "All Items" + ' + 'mnuTrayNewAutoNfo + ' + Me.mnuTrayNewAutoNfo.Name = "mnuTrayNewAutoNfo" + Me.mnuTrayNewAutoNfo.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAutoNfo.Text = "NFO Only" + ' + 'mnuTrayNewAutoPoster + ' + Me.mnuTrayNewAutoPoster.Name = "mnuTrayNewAutoPoster" + Me.mnuTrayNewAutoPoster.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAutoPoster.Text = "Poster Only" + ' + 'mnuTrayNewAutoFanart + ' + Me.mnuTrayNewAutoFanart.Name = "mnuTrayNewAutoFanart" + Me.mnuTrayNewAutoFanart.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAutoFanart.Text = "Fanart Only" + ' + 'mnuTrayNewAutoExtra + ' + Me.mnuTrayNewAutoExtra.Name = "mnuTrayNewAutoExtra" + Me.mnuTrayNewAutoExtra.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAutoExtra.Text = "Extrathumbs Only" + ' + 'mnuTrayNewAutoTrailer + ' + Me.mnuTrayNewAutoTrailer.Name = "mnuTrayNewAutoTrailer" + Me.mnuTrayNewAutoTrailer.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAutoTrailer.Text = "Trailer Only" + ' + 'mnuTrayNewAutoMI + ' + Me.mnuTrayNewAutoMI.Name = "mnuTrayNewAutoMI" + Me.mnuTrayNewAutoMI.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAutoMI.Text = "Meta Data Only" + ' + 'TrayAskRequireInputToolStripMenuItem + ' + Me.TrayAskRequireInputToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayNewAskAll, Me.mnuTrayNewAskNfo, Me.mnuTrayNewAskPoster, Me.mnuTrayNewAskFanart, Me.mnuTrayNewAskExtra, Me.mnuTrayNewAskTrailer, Me.mnuTrayNewAskMI}) + Me.TrayAskRequireInputToolStripMenuItem.Name = "TrayAskRequireInputToolStripMenuItem" + Me.TrayAskRequireInputToolStripMenuItem.Size = New System.Drawing.Size(284, 22) + Me.TrayAskRequireInputToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" + ' + 'mnuTrayNewAskAll + ' + Me.mnuTrayNewAskAll.Name = "mnuTrayNewAskAll" + Me.mnuTrayNewAskAll.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAskAll.Text = "All Items" + ' + 'mnuTrayNewAskNfo + ' + Me.mnuTrayNewAskNfo.Name = "mnuTrayNewAskNfo" + Me.mnuTrayNewAskNfo.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAskNfo.Text = "NFO Only" + ' + 'mnuTrayNewAskPoster + ' + Me.mnuTrayNewAskPoster.Name = "mnuTrayNewAskPoster" + Me.mnuTrayNewAskPoster.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAskPoster.Text = "Poster Only" + ' + 'mnuTrayNewAskFanart + ' + Me.mnuTrayNewAskFanart.Name = "mnuTrayNewAskFanart" + Me.mnuTrayNewAskFanart.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAskFanart.Text = "Fanart Only" + ' + 'mnuTrayNewAskExtra + ' + Me.mnuTrayNewAskExtra.Name = "mnuTrayNewAskExtra" + Me.mnuTrayNewAskExtra.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAskExtra.Text = "Extrathumbs Only" + ' + 'mnuTrayNewAskTrailer + ' + Me.mnuTrayNewAskTrailer.Name = "mnuTrayNewAskTrailer" + Me.mnuTrayNewAskTrailer.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAskTrailer.Text = "Trailer Only" + ' + 'mnuTrayNewAskMI + ' + Me.mnuTrayNewAskMI.Name = "mnuTrayNewAskMI" + Me.mnuTrayNewAskMI.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayNewAskMI.Text = "Meta Data Only" + ' + 'TrayMarkedMoviesToolStripMenuItem + ' + Me.TrayMarkedMoviesToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TrayAutomaticForceBestMatchToolStripMenuItem1, Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem}) + Me.TrayMarkedMoviesToolStripMenuItem.Name = "TrayMarkedMoviesToolStripMenuItem" + Me.TrayMarkedMoviesToolStripMenuItem.Size = New System.Drawing.Size(193, 22) + Me.TrayMarkedMoviesToolStripMenuItem.Text = "Marked Movies" + ' + 'TrayAutomaticForceBestMatchToolStripMenuItem1 + ' + Me.TrayAutomaticForceBestMatchToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayMarkAutoAll, Me.mnuTrayMarkAutoNfo, Me.mnuTrayMarkAutoPoster, Me.mnuTrayMarkAutoFanart, Me.mnuTrayMarkAutoExtra, Me.mnuTrayMarkAutoTrailer, Me.mnuTrayMarkAutoMI}) + Me.TrayAutomaticForceBestMatchToolStripMenuItem1.Name = "TrayAutomaticForceBestMatchToolStripMenuItem1" + Me.TrayAutomaticForceBestMatchToolStripMenuItem1.Size = New System.Drawing.Size(284, 22) + Me.TrayAutomaticForceBestMatchToolStripMenuItem1.Text = "Automatic (Force Best Match)" + ' + 'mnuTrayMarkAutoAll + ' + Me.mnuTrayMarkAutoAll.Name = "mnuTrayMarkAutoAll" + Me.mnuTrayMarkAutoAll.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAutoAll.Text = "All Items" + ' + 'mnuTrayMarkAutoNfo + ' + Me.mnuTrayMarkAutoNfo.Name = "mnuTrayMarkAutoNfo" + Me.mnuTrayMarkAutoNfo.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAutoNfo.Text = "NFO Only" + ' + 'mnuTrayMarkAutoPoster + ' + Me.mnuTrayMarkAutoPoster.Name = "mnuTrayMarkAutoPoster" + Me.mnuTrayMarkAutoPoster.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAutoPoster.Text = "Poster Only" + ' + 'mnuTrayMarkAutoFanart + ' + Me.mnuTrayMarkAutoFanart.Name = "mnuTrayMarkAutoFanart" + Me.mnuTrayMarkAutoFanart.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAutoFanart.Text = "Fanart Only" + ' + 'mnuTrayMarkAutoExtra + ' + Me.mnuTrayMarkAutoExtra.Name = "mnuTrayMarkAutoExtra" + Me.mnuTrayMarkAutoExtra.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAutoExtra.Text = "Extrathumbs Only" + ' + 'mnuTrayMarkAutoTrailer + ' + Me.mnuTrayMarkAutoTrailer.Name = "mnuTrayMarkAutoTrailer" + Me.mnuTrayMarkAutoTrailer.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAutoTrailer.Text = "Trailer Only" + ' + 'mnuTrayMarkAutoMI + ' + Me.mnuTrayMarkAutoMI.Name = "mnuTrayMarkAutoMI" + Me.mnuTrayMarkAutoMI.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAutoMI.Text = "Meta Data Only" + ' + 'TrayAskRequireInputIfNoExactMatchToolStripMenuItem + ' + Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayMarkAskAll, Me.mnuTrayMarkAskNfo, Me.mnuTrayMarkAskPoster, Me.mnuTrayMarkAskFanart, Me.mnuTrayMarkAskExtra, Me.mnuTrayMarkAskTrailer, Me.mnuTrayMarkAskMI}) + Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem.Name = "TrayAskRequireInputIfNoExactMatchToolStripMenuItem" + Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem.Size = New System.Drawing.Size(284, 22) + Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem.Text = "Ask (Require Input If No Exact Match)" + ' + 'mnuTrayMarkAskAll + ' + Me.mnuTrayMarkAskAll.Name = "mnuTrayMarkAskAll" + Me.mnuTrayMarkAskAll.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAskAll.Text = "All Items" + ' + 'mnuTrayMarkAskNfo + ' + Me.mnuTrayMarkAskNfo.Name = "mnuTrayMarkAskNfo" + Me.mnuTrayMarkAskNfo.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAskNfo.Text = "NFO Only" + ' + 'mnuTrayMarkAskPoster + ' + Me.mnuTrayMarkAskPoster.Name = "mnuTrayMarkAskPoster" + Me.mnuTrayMarkAskPoster.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAskPoster.Text = "Poster Only" + ' + 'mnuTrayMarkAskFanart + ' + Me.mnuTrayMarkAskFanart.Name = "mnuTrayMarkAskFanart" + Me.mnuTrayMarkAskFanart.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAskFanart.Text = "Fanart Only" + ' + 'mnuTrayMarkAskExtra + ' + Me.mnuTrayMarkAskExtra.Name = "mnuTrayMarkAskExtra" + Me.mnuTrayMarkAskExtra.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAskExtra.Text = "Extrathumbs Only" + ' + 'mnuTrayMarkAskTrailer + ' + Me.mnuTrayMarkAskTrailer.Name = "mnuTrayMarkAskTrailer" + Me.mnuTrayMarkAskTrailer.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAskTrailer.Text = "Trailer Only" + ' + 'mnuTrayMarkAskMI + ' + Me.mnuTrayMarkAskMI.Name = "mnuTrayMarkAskMI" + Me.mnuTrayMarkAskMI.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayMarkAskMI.Text = "Meta Data Only" + ' + 'TrayCurrentFilterToolStripMenuItem + ' + Me.TrayCurrentFilterToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.TrayAutomaticForceBestMatchToolStripMenuItem2, Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem1}) + Me.TrayCurrentFilterToolStripMenuItem.Name = "TrayCurrentFilterToolStripMenuItem" + Me.TrayCurrentFilterToolStripMenuItem.Size = New System.Drawing.Size(193, 22) + Me.TrayCurrentFilterToolStripMenuItem.Text = "Current Filter" + ' + 'TrayAutomaticForceBestMatchToolStripMenuItem2 + ' + Me.TrayAutomaticForceBestMatchToolStripMenuItem2.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayFilterAutoAll, Me.mnuTrayFilterAutoNfo, Me.mnuTrayFilterAutoPoster, Me.mnuTrayFilterAutoFanart, Me.mnuTrayFilterAutoExtra, Me.mnuTrayFilterAutoTrailer, Me.mnuTrayFilterAutoMI}) + Me.TrayAutomaticForceBestMatchToolStripMenuItem2.Name = "TrayAutomaticForceBestMatchToolStripMenuItem2" + Me.TrayAutomaticForceBestMatchToolStripMenuItem2.Size = New System.Drawing.Size(284, 22) + Me.TrayAutomaticForceBestMatchToolStripMenuItem2.Text = "Automatic (Force Best Match)" + ' + 'mnuTrayFilterAutoAll + ' + Me.mnuTrayFilterAutoAll.Name = "mnuTrayFilterAutoAll" + Me.mnuTrayFilterAutoAll.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAutoAll.Text = "All Items" + ' + 'mnuTrayFilterAutoNfo + ' + Me.mnuTrayFilterAutoNfo.Name = "mnuTrayFilterAutoNfo" + Me.mnuTrayFilterAutoNfo.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAutoNfo.Text = "NFO Only" + ' + 'mnuTrayFilterAutoPoster + ' + Me.mnuTrayFilterAutoPoster.Name = "mnuTrayFilterAutoPoster" + Me.mnuTrayFilterAutoPoster.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAutoPoster.Text = "Poster Only" + ' + 'mnuTrayFilterAutoFanart + ' + Me.mnuTrayFilterAutoFanart.Name = "mnuTrayFilterAutoFanart" + Me.mnuTrayFilterAutoFanart.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAutoFanart.Text = "Fanart Only" + ' + 'mnuTrayFilterAutoExtra + ' + Me.mnuTrayFilterAutoExtra.Name = "mnuTrayFilterAutoExtra" + Me.mnuTrayFilterAutoExtra.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAutoExtra.Text = "Extrathumbs Only" + ' + 'mnuTrayFilterAutoTrailer + ' + Me.mnuTrayFilterAutoTrailer.Name = "mnuTrayFilterAutoTrailer" + Me.mnuTrayFilterAutoTrailer.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAutoTrailer.Text = "Trailer Only" + ' + 'mnuTrayFilterAutoMI + ' + Me.mnuTrayFilterAutoMI.Name = "mnuTrayFilterAutoMI" + Me.mnuTrayFilterAutoMI.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAutoMI.Text = "Meta Data Only" + ' + 'TrayAskRequireInputIfNoExactMatchToolStripMenuItem1 + ' + Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.mnuTrayFilterAskAll, Me.mnuTrayFilterAskNfo, Me.mnuTrayFilterAskPoster, Me.mnuTrayFilterAskFanart, Me.mnuTrayFilterAskExtra, Me.mnuTrayFilterAskTrailer, Me.mnuTrayFilterAskMI}) + Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem1.Name = "TrayAskRequireInputIfNoExactMatchToolStripMenuItem1" + Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem1.Size = New System.Drawing.Size(284, 22) + Me.TrayAskRequireInputIfNoExactMatchToolStripMenuItem1.Text = "Ask (Require Input If No Exact Match)" + ' + 'mnuTrayFilterAskAll + ' + Me.mnuTrayFilterAskAll.Name = "mnuTrayFilterAskAll" + Me.mnuTrayFilterAskAll.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAskAll.Text = "All Items" + ' + 'mnuTrayFilterAskNfo + ' + Me.mnuTrayFilterAskNfo.Name = "mnuTrayFilterAskNfo" + Me.mnuTrayFilterAskNfo.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAskNfo.Text = "NFO Only" + ' + 'mnuTrayFilterAskPoster + ' + Me.mnuTrayFilterAskPoster.Name = "mnuTrayFilterAskPoster" + Me.mnuTrayFilterAskPoster.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAskPoster.Text = "Poster Only" + ' + 'mnuTrayFilterAskFanart + ' + Me.mnuTrayFilterAskFanart.Name = "mnuTrayFilterAskFanart" + Me.mnuTrayFilterAskFanart.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAskFanart.Text = "Fanart Only" + ' + 'mnuTrayFilterAskExtra + ' + Me.mnuTrayFilterAskExtra.Name = "mnuTrayFilterAskExtra" + Me.mnuTrayFilterAskExtra.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAskExtra.Text = "Extrathumbs Only" + ' + 'mnuTrayFilterAskTrailer + ' + Me.mnuTrayFilterAskTrailer.Name = "mnuTrayFilterAskTrailer" + Me.mnuTrayFilterAskTrailer.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAskTrailer.Text = "Trailer Only" + ' + 'mnuTrayFilterAskMI + ' + Me.mnuTrayFilterAskMI.Name = "mnuTrayFilterAskMI" + Me.mnuTrayFilterAskMI.Size = New System.Drawing.Size(173, 22) + Me.mnuTrayFilterAskMI.Text = "Meta Data Only" + ' + 'TrayCustomUpdaterToolStripMenuItem + ' + Me.TrayCustomUpdaterToolStripMenuItem.Name = "TrayCustomUpdaterToolStripMenuItem" + Me.TrayCustomUpdaterToolStripMenuItem.Size = New System.Drawing.Size(193, 22) + Me.TrayCustomUpdaterToolStripMenuItem.Text = "Custom Scraper..." + ' + 'cmnuTrayIconMediaCenters + ' + Me.cmnuTrayIconMediaCenters.Image = CType(resources.GetObject("cmnuTrayIconMediaCenters.Image"), System.Drawing.Image) + Me.cmnuTrayIconMediaCenters.Name = "cmnuTrayIconMediaCenters" + Me.cmnuTrayIconMediaCenters.Size = New System.Drawing.Size(199, 22) + Me.cmnuTrayIconMediaCenters.Text = "Media Centers" + Me.cmnuTrayIconMediaCenters.Visible = False + ' + 'ToolStripSeparator23 + ' + Me.ToolStripSeparator23.Name = "ToolStripSeparator23" + Me.ToolStripSeparator23.Size = New System.Drawing.Size(196, 6) + ' + 'cmnuTrayIconTools + ' + Me.cmnuTrayIconTools.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.CleanFilesToolStripMenuItem, Me.SortFilesIntoFoldersToolStripMenuItem, Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem1, Me.ToolStripSeparator24, Me.SetsManagerToolStripMenuItem1, Me.ToolStripSeparator25, Me.ClearAllCachesToolStripMenuItem1, Me.ReloadAllMoviesToolStripMenuItem, Me.CleanDatabaseToolStripMenuItem1, Me.ToolStripSeparator26}) + Me.cmnuTrayIconTools.Image = CType(resources.GetObject("cmnuTrayIconTools.Image"), System.Drawing.Image) + Me.cmnuTrayIconTools.Name = "cmnuTrayIconTools" + Me.cmnuTrayIconTools.Size = New System.Drawing.Size(199, 22) + Me.cmnuTrayIconTools.Text = "Tools" + ' + 'CleanFilesToolStripMenuItem + ' + Me.CleanFilesToolStripMenuItem.Image = CType(resources.GetObject("CleanFilesToolStripMenuItem.Image"), System.Drawing.Image) + Me.CleanFilesToolStripMenuItem.Name = "CleanFilesToolStripMenuItem" + Me.CleanFilesToolStripMenuItem.Size = New System.Drawing.Size(299, 22) + Me.CleanFilesToolStripMenuItem.Text = "Clean Files" + ' + 'SortFilesIntoFoldersToolStripMenuItem + ' + Me.SortFilesIntoFoldersToolStripMenuItem.Image = CType(resources.GetObject("SortFilesIntoFoldersToolStripMenuItem.Image"), System.Drawing.Image) + Me.SortFilesIntoFoldersToolStripMenuItem.Name = "SortFilesIntoFoldersToolStripMenuItem" + Me.SortFilesIntoFoldersToolStripMenuItem.Size = New System.Drawing.Size(299, 22) + Me.SortFilesIntoFoldersToolStripMenuItem.Text = "Sort Files into Folders" + ' + 'CopyExistingFanartToBackdropsFolderToolStripMenuItem1 + ' + Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem1.Image = CType(resources.GetObject("CopyExistingFanartToBackdropsFolderToolStripMenuItem1.Image"), System.Drawing.Image) + Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem1.Name = "CopyExistingFanartToBackdropsFolderToolStripMenuItem1" + Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem1.Size = New System.Drawing.Size(299, 22) + Me.CopyExistingFanartToBackdropsFolderToolStripMenuItem1.Text = "Copy Existing Fanart to Backdrops Folder" + ' + 'ToolStripSeparator24 + ' + Me.ToolStripSeparator24.Name = "ToolStripSeparator24" + Me.ToolStripSeparator24.Size = New System.Drawing.Size(296, 6) + ' + 'SetsManagerToolStripMenuItem1 + ' + Me.SetsManagerToolStripMenuItem1.Image = CType(resources.GetObject("SetsManagerToolStripMenuItem1.Image"), System.Drawing.Image) + Me.SetsManagerToolStripMenuItem1.Name = "SetsManagerToolStripMenuItem1" + Me.SetsManagerToolStripMenuItem1.Size = New System.Drawing.Size(299, 22) + Me.SetsManagerToolStripMenuItem1.Text = "Sets Manager" + ' + 'ToolStripSeparator25 + ' + Me.ToolStripSeparator25.Name = "ToolStripSeparator25" + Me.ToolStripSeparator25.Size = New System.Drawing.Size(296, 6) + ' + 'ClearAllCachesToolStripMenuItem1 + ' + Me.ClearAllCachesToolStripMenuItem1.Image = CType(resources.GetObject("ClearAllCachesToolStripMenuItem1.Image"), System.Drawing.Image) + Me.ClearAllCachesToolStripMenuItem1.Name = "ClearAllCachesToolStripMenuItem1" + Me.ClearAllCachesToolStripMenuItem1.Size = New System.Drawing.Size(299, 22) + Me.ClearAllCachesToolStripMenuItem1.Text = "Clear All Caches" + ' + 'ReloadAllMoviesToolStripMenuItem + ' + Me.ReloadAllMoviesToolStripMenuItem.Image = CType(resources.GetObject("ReloadAllMoviesToolStripMenuItem.Image"), System.Drawing.Image) + Me.ReloadAllMoviesToolStripMenuItem.Name = "ReloadAllMoviesToolStripMenuItem" + Me.ReloadAllMoviesToolStripMenuItem.Size = New System.Drawing.Size(299, 22) + Me.ReloadAllMoviesToolStripMenuItem.Text = "Reload All Movies" + ' + 'CleanDatabaseToolStripMenuItem1 + ' + Me.CleanDatabaseToolStripMenuItem1.Image = CType(resources.GetObject("CleanDatabaseToolStripMenuItem1.Image"), System.Drawing.Image) + Me.CleanDatabaseToolStripMenuItem1.Name = "CleanDatabaseToolStripMenuItem1" + Me.CleanDatabaseToolStripMenuItem1.Size = New System.Drawing.Size(299, 22) + Me.CleanDatabaseToolStripMenuItem1.Text = "Clean Database" + ' + 'ToolStripSeparator26 + ' + Me.ToolStripSeparator26.Name = "ToolStripSeparator26" + Me.ToolStripSeparator26.Size = New System.Drawing.Size(296, 6) + ' + 'ToolStripSeparator22 + ' + Me.ToolStripSeparator22.Name = "ToolStripSeparator22" + Me.ToolStripSeparator22.Size = New System.Drawing.Size(196, 6) + ' + 'cmnuTrayIconSettings + ' + Me.cmnuTrayIconSettings.Image = CType(resources.GetObject("cmnuTrayIconSettings.Image"), System.Drawing.Image) + Me.cmnuTrayIconSettings.Name = "cmnuTrayIconSettings" + Me.cmnuTrayIconSettings.Size = New System.Drawing.Size(199, 22) + Me.cmnuTrayIconSettings.Text = "Settings..." + ' + 'ToolStripSeparator13 + ' + Me.ToolStripSeparator13.Name = "ToolStripSeparator13" + Me.ToolStripSeparator13.Size = New System.Drawing.Size(196, 6) + ' + 'cmnuTrayIconExit + ' + Me.cmnuTrayIconExit.Image = CType(resources.GetObject("cmnuTrayIconExit.Image"), System.Drawing.Image) + Me.cmnuTrayIconExit.Name = "cmnuTrayIconExit" + Me.cmnuTrayIconExit.Size = New System.Drawing.Size(199, 22) + Me.cmnuTrayIconExit.Text = "Exit" + ' + 'Panel3 + ' + Me.Panel3.BackColor = System.Drawing.Color.White + Me.Panel3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.Panel3.Controls.Add(Me.PictureBox2) + Me.Panel3.Controls.Add(Me.Label7) + Me.Panel3.Controls.Add(Me.ProgressBar1) + Me.Panel3.Location = New System.Drawing.Point(3, 3) + Me.Panel3.Name = "Panel3" + Me.Panel3.Size = New System.Drawing.Size(249, 111) + Me.Panel3.TabIndex = 2 + ' + 'PictureBox2 + ' + Me.PictureBox2.Image = CType(resources.GetObject("PictureBox2.Image"), System.Drawing.Image) + Me.PictureBox2.Location = New System.Drawing.Point(12, 11) + Me.PictureBox2.Name = "PictureBox2" + Me.PictureBox2.Size = New System.Drawing.Size(48, 48) + Me.PictureBox2.TabIndex = 2 + Me.PictureBox2.TabStop = False + ' + 'Label7 + ' + Me.Label7.Font = New System.Drawing.Font("Segoe UI", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label7.Location = New System.Drawing.Point(63, 11) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(175, 48) + Me.Label7.TabIndex = 0 + Me.Label7.Text = "Loading Settings..." + Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'ProgressBar1 + ' + Me.ProgressBar1.Location = New System.Drawing.Point(8, 68) + Me.ProgressBar1.MarqueeAnimationSpeed = 25 + Me.ProgressBar1.Name = "ProgressBar1" + Me.ProgressBar1.Size = New System.Drawing.Size(231, 23) + Me.ProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee + Me.ProgressBar1.TabIndex = 1 + ' + 'pnlLoadingSettings + ' + Me.pnlLoadingSettings.BackColor = System.Drawing.Color.Gainsboro + Me.pnlLoadingSettings.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.pnlLoadingSettings.Controls.Add(Me.Panel3) + Me.pnlLoadingSettings.Location = New System.Drawing.Point(380, 287) + Me.pnlLoadingSettings.Name = "pnlLoadingSettings" + Me.pnlLoadingSettings.Size = New System.Drawing.Size(257, 119) + Me.pnlLoadingSettings.TabIndex = 13 + Me.pnlLoadingSettings.Visible = False + ' + 'tmrAppExit + ' + Me.tmrAppExit.Interval = 1000 + ' + 'tmrKeyBuffer + ' + Me.tmrKeyBuffer.Interval = 1000 + ' + 'frmMain + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.ClientSize = New System.Drawing.Size(1465, 828) + Me.Controls.Add(Me.pnlLoadingSettings) + Me.Controls.Add(Me.scMain) + Me.Controls.Add(Me.StatusStrip) + Me.Controls.Add(Me.MenuStrip) + Me.DoubleBuffered = True + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MainMenuStrip = Me.MenuStrip + Me.MinimumSize = New System.Drawing.Size(800, 600) + Me.Name = "frmMain" + Me.Text = "Ember Media Manager" + Me.StatusStrip.ResumeLayout(False) + Me.StatusStrip.PerformLayout() + Me.MenuStrip.ResumeLayout(False) + Me.MenuStrip.PerformLayout() + Me.scMain.Panel1.ResumeLayout(False) + Me.scMain.Panel2.ResumeLayout(False) + Me.scMain.Panel2.PerformLayout() + Me.scMain.ResumeLayout(False) + Me.pnlFilterGenre.ResumeLayout(False) + Me.pnlFilterGenre.PerformLayout() + Me.pnlFilterSource.ResumeLayout(False) + Me.pnlFilterSource.PerformLayout() + CType(Me.dgvMediaList, System.ComponentModel.ISupportInitialize).EndInit() + Me.mnuMediaList.ResumeLayout(False) + Me.scTV.Panel1.ResumeLayout(False) + Me.scTV.Panel2.ResumeLayout(False) + Me.scTV.ResumeLayout(False) + CType(Me.dgvTVShows, System.ComponentModel.ISupportInitialize).EndInit() + Me.mnuShows.ResumeLayout(False) + Me.SplitContainer2.Panel1.ResumeLayout(False) + Me.SplitContainer2.Panel2.ResumeLayout(False) + Me.SplitContainer2.ResumeLayout(False) + CType(Me.dgvTVSeasons, System.ComponentModel.ISupportInitialize).EndInit() + Me.mnuSeasons.ResumeLayout(False) + CType(Me.dgvTVEpisodes, System.ComponentModel.ISupportInitialize).EndInit() + Me.mnuEpisodes.ResumeLayout(False) + Me.pnlListTop.ResumeLayout(False) + Me.pnlSearch.ResumeLayout(False) + Me.pnlSearch.PerformLayout() + CType(Me.picSearch, System.ComponentModel.ISupportInitialize).EndInit() + Me.tabsMain.ResumeLayout(False) + Me.pnlFilter.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox3.PerformLayout() + Me.gbSpecific.ResumeLayout(False) + Me.gbSpecific.PerformLayout() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + Me.pnlInfoIcons.ResumeLayout(False) + Me.pnlInfoIcons.PerformLayout() + CType(Me.pbVType, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStudio, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbVideo, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbAudio, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbResolution, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbChannels, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlRating.ResumeLayout(False) + Me.pnlRating.PerformLayout() + CType(Me.pbStar5, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStar4, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStar3, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStar2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbStar1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlCancel.ResumeLayout(False) + Me.pnlCancel.PerformLayout() + Me.pnlAllSeason.ResumeLayout(False) + CType(Me.pbAllSeason, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbAllSeasonCache, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlNoInfo.ResumeLayout(False) + Me.Panel2.ResumeLayout(False) + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlInfoPanel.ResumeLayout(False) + Me.pnlInfoPanel.PerformLayout() + CType(Me.pbMILoading, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlActors.ResumeLayout(False) + CType(Me.pbActLoad, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbActors, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlTop250.ResumeLayout(False) + CType(Me.pbTop250, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlPoster.ResumeLayout(False) + CType(Me.pbPoster, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbPosterCache, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlMPAA.ResumeLayout(False) + Me.pnlMPAA.PerformLayout() + CType(Me.pbMPAA, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbFanartCache, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pbFanart, System.ComponentModel.ISupportInitialize).EndInit() + Me.tsMain.ResumeLayout(False) + Me.tsMain.PerformLayout() + Me.cmnuTrayIcon.ResumeLayout(False) + Me.Panel3.ResumeLayout(False) + CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit() + Me.pnlLoadingSettings.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() - End Sub + End Sub Friend WithEvents BottomToolStripPanel As System.Windows.Forms.ToolStripPanel Friend WithEvents TopToolStripPanel As System.Windows.Forms.ToolStripPanel Friend WithEvents RightToolStripPanel As System.Windows.Forms.ToolStripPanel @@ -4593,22 +4620,6 @@ Partial Class frmMain Friend WithEvents btnDown As System.Windows.Forms.Button Friend WithEvents btnUp As System.Windows.Forms.Button Friend WithEvents lblInfoPanelHeader As System.Windows.Forms.Label - Friend WithEvents pnlTop As System.Windows.Forms.Panel - Friend WithEvents pnlInfoIcons As System.Windows.Forms.Panel - Friend WithEvents pbVideo As System.Windows.Forms.PictureBox - Friend WithEvents pbAudio As System.Windows.Forms.PictureBox - Friend WithEvents pbResolution As System.Windows.Forms.PictureBox - Friend WithEvents pbChannels As System.Windows.Forms.PictureBox - Friend WithEvents pbStudio As System.Windows.Forms.PictureBox - Friend WithEvents lblTagline As System.Windows.Forms.Label - Friend WithEvents lblTitle As System.Windows.Forms.Label - Friend WithEvents pnlRating As System.Windows.Forms.Panel - Friend WithEvents pbStar5 As System.Windows.Forms.PictureBox - Friend WithEvents pbStar4 As System.Windows.Forms.PictureBox - Friend WithEvents pbStar3 As System.Windows.Forms.PictureBox - Friend WithEvents pbStar2 As System.Windows.Forms.PictureBox - Friend WithEvents pbStar1 As System.Windows.Forms.PictureBox - Friend WithEvents lblVotes As System.Windows.Forms.Label Friend WithEvents tsMain As System.Windows.Forms.ToolStrip Friend WithEvents btnMetaDataRefresh As System.Windows.Forms.Button Friend WithEvents lblMetaDataHeader As System.Windows.Forms.Label @@ -4616,7 +4627,6 @@ Partial Class frmMain Friend WithEvents pbMILoading As System.Windows.Forms.PictureBox Friend WithEvents tsbAutoPilot As System.Windows.Forms.ToolStripDropDownButton Friend WithEvents btnMid As System.Windows.Forms.Button - Friend WithEvents lblRuntime As System.Windows.Forms.Label Friend WithEvents pbPosterCache As System.Windows.Forms.PictureBox Friend WithEvents txtCerts As System.Windows.Forms.TextBox Friend WithEvents lblCertsHeader As System.Windows.Forms.Label @@ -4738,7 +4748,6 @@ Partial Class frmMain Friend WithEvents mnuNewAskMI As System.Windows.Forms.ToolStripMenuItem Friend WithEvents mnuMarkAutoMI As System.Windows.Forms.ToolStripMenuItem Friend WithEvents mnuMarkAskMI As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents pbVType As System.Windows.Forms.PictureBox Friend WithEvents ToolStripSeparator5 As System.Windows.Forms.ToolStripSeparator Friend WithEvents cmnuRefresh As System.Windows.Forms.ToolStripMenuItem Friend WithEvents RefreshAllMoviesToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem @@ -5011,9 +5020,30 @@ Partial Class frmMain Friend WithEvents pbAllSeasonCache As System.Windows.Forms.PictureBox Friend WithEvents tmrAppExit As System.Windows.Forms.Timer Friend WithEvents CheckUpdatesToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem - Friend WithEvents lblStudio As System.Windows.Forms.Label Friend WithEvents tmrKeyBuffer As System.Windows.Forms.Timer - Friend WithEvents lblOriginalTitle As System.Windows.Forms.Label Friend WithEvents FullSkipToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem Friend WithEvents mnuAllSkipAll As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents pnlTop As System.Windows.Forms.Panel + Friend WithEvents lblTitle As System.Windows.Forms.Label + Friend WithEvents pnlInfoIcons As System.Windows.Forms.Panel + Friend WithEvents lblStudio As System.Windows.Forms.Label + Friend WithEvents pbVType As System.Windows.Forms.PictureBox + Friend WithEvents pbStudio As System.Windows.Forms.PictureBox + Friend WithEvents pbVideo As System.Windows.Forms.PictureBox + Friend WithEvents pbAudio As System.Windows.Forms.PictureBox + Friend WithEvents pbResolution As System.Windows.Forms.PictureBox + Friend WithEvents pbChannels As System.Windows.Forms.PictureBox + Friend WithEvents lblRuntime As System.Windows.Forms.Label + Friend WithEvents lblTagline As System.Windows.Forms.Label + Friend WithEvents pnlRating As System.Windows.Forms.Panel + Friend WithEvents pbStar5 As System.Windows.Forms.PictureBox + Friend WithEvents pbStar4 As System.Windows.Forms.PictureBox + Friend WithEvents pbStar3 As System.Windows.Forms.PictureBox + Friend WithEvents pbStar2 As System.Windows.Forms.PictureBox + Friend WithEvents pbStar1 As System.Windows.Forms.PictureBox + Friend WithEvents lblVotes As System.Windows.Forms.Label + Friend WithEvents lblOriginalTitle As System.Windows.Forms.Label + Friend WithEvents ExportToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents MoviesToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TVShowsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem End Class diff --git a/Ember Media Manager/frmMain.resx b/Ember Media Manager/frmMain.resx index f822122..5a4c104 100644 --- a/Ember Media Manager/frmMain.resx +++ b/Ember Media Manager/frmMain.resx @@ -120,104 +120,103 @@ - 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 + d4FGU18o1wAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAoVJREFUOE+lk21IU1EYx88WvkAaC/dyvW53zm3m1tw03TSTSAsiil5oldnIpGUNMkSE - qA9RRoliUTk1db5ha5UDM+kNyRRZ4jK0JDUREsPCD9G3vv47d647+tIXL/wuz3POfX7nPId7CACyFtZU - zC8cEvyoqRYt7Mxzz9sMK/M5xu+U5f+wMp+bPrJUXqYUBDN7CgumNmvwQZskMKFJxEQKu5rrlKH4bz6Z - xmF6a0atIAjaLEcCKUkI6DkEdKoQwS0mjGca8U6vBj83ZtRh3GKgsZKO0e80bLsgGLVa7CMZaZi5WImp - 0hOYvVSFpY42fHSWYKaqAoNsAhbvu7HY1ICFmusI7t+NQaXUIwgGrWb7a3Mavj32YbGnC3O1N/C104PA - oX34XH0FzxQSLPf34cvtOkxWnMfwru0YUMkigoFsi72fCsZcTgwd3Itg5QXMNd7F6MnjmG24g/FyF6br - bsJPW3mZb8OLvGz0ckxE4Kct9KgZPNCwq6gT4TNq4TNo8ZD2+8ikhzc87tVx8NIz6uGYyBk8Lzps9dCi - VqVcoCVJhhalLJS3cQz4eU8yG4pbWSmeFGy7LJzBbJOb+PJzznVYDMPdtsy33daMoTBvurLMw43J7O8G - Wuimkma9+mebKfXWq1JHnCC4VlxEamxZxHvMTvyuMtJbdjqE/6yT+EocpGtH3oHmTZpf9XQ390ypn/oc - ReKnpxyhn3D1RZ9okYhIYmKIJDb2H+Kjo0k6oyBOiynlqlY1Va9m0V58NNfMqSKCdYSIxYTEUc9GipQi - pygoTBg+Xi+NjdGcYeXvC+VSF7+osANeQImnJFBkFAWFoSSG4WNeJokSizZEiUQSvkYQrOU6/wFfUQMk - N8MXYQAAAABJRU5ErkJggg== + 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 + WgAAAABJRU5ErkJggg== - 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 - AeMOrQmoaLy0AAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAACR0lE + QVQ4T6WQXWhSYRjHzxrSB7HaVTAiYkF0t4pYNHAqFBSDoOgDZkTQYguqjd1sFASV2V3RyosIKncRktU0 + t6aWm3r82nTuuJXTaVNxudlVMUcFi3/P6/Sg5VVd/M7znuf/Ae/LAfgvKi5fRlObLYnsKWsye4u4Y0lm + zxpi83WVvH8t9LPzVwbima80oYumoQ2n8JymIZ75+Sr2Wf2nv+znWTil1s6koAnF0SfE8tjSWejCc7gb + jIJ0VqgrzYiHe0JM/iD0CSp/GOrADG6Mh6GZipMELOVy6LH7oZqIUGkc94X4+WJOLFAFIrarvg/o8Uyv + 4p3GbQpYUgt4FIqimxfyu15C5Y8kulzBKrGg3RHc0OUK5TocQVwk2kYn8PjjHBaWv2NxaRndI2O44JjM + a+RFpyuEy7xQLxacGwlsVdrG0fp+FSVxZMgNYyJDMnCTD+CY1Vemn7H5D4gFx63empZh9w8CRRRvnJj9 + lsOvlRWcNNlxeNgjai1v3Thq9uwSCxgKkzNAgCE12nHinY/WwER6AQ06MxSDfF4r8OXgIC9hudKC03IS + GfsNo+jgJ1keU5kslBYP5FRa1Ml7vZgTCxgyk1PfTAYpweaTaBKW9CKueQQ0USnbkWfs0JCnumIBQ2b2 + PWymO0qJ3QY7Goh9Jh7N9AYys1evBNaV+vOfao6rIbZxHFdPbNnRdql1T9/TF43a18HG/gFhr6bfuLOz + t520OmI787JMaYGE2EhsquK4WjKtJ9YQkgLsvJaoZZ6Ct/wR/w1wvwHjDq0JzqxPmgAAAABJRU5ErkJg + gg== @@ -231,154 +230,153 @@ - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAkpJREFUOE+lkstrE1EUxm8TLe7ci60bF4Hixm0pFExVAm78C1woVFwYcelaqMtSpcLE - 4M5NXWixgmhDK3bRNC8zeb8fM8m8M0mlDcEez7mYTFLoqgMf986d+X7nfPdeBgDsPOLmwWDA+v0+M3Sd - /Tk8ZMdHR5fKpdKLbCYTLBYKAs6FfC4XKBaLN3u9HpOaTaaqKvdOAgydWZbFlHZ7IZNOnxTyeUAz1KpV - QABsfv70zbbtC7Isnwm4ouvaDBqek4HMzUYDZFni45vXa/BxY2Mbv1/WsdtRB/3+McPWHmqa+hcBJxgF - Oh0L0ikRdnd2wDB0wHWIRg7g69YXiEWjH+q1mgMwTZPhD+/pJzKToWvbIIpJeLWyAnt7v6DVknkX/+Ps - YkQH0MHcpmEI4wDLNEHXNNj+8R2rbgHtR6Vc5iOaQ+lUygFYlsmw6gQAgUDqdm0uSWpCLpslM6REMSQm - k+MRDIrAAeNdUJRhJMxMRkAj/E4kQol43AHQjiqKIihKmwNOi0DlcgnisRhXNBIJoRyAhpcCN0mg4yII - nsaEVFXh2Q/CYQjv7wNW/4mjA2jhxWjU6wK1ibeMnzvtOonmsiTx/FiVx3i7vv7u2uzsWAeaxvB4glSl - WqlAvV4DBHIRtN1qwdrq6qbH47l3Y27u/rTbfZ0xNj26SD6fjwUDgZd0xiTeBVYl0ZwAj5eXn6CJPy6U - GzUC0NpFl2vm1uLio9te71OU/47X+wzlv7u05F+Yn3+ApqsoNxmHGgFwYQrXScNn+D6+Ruap04B/nRvT - MkyJpVUAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACSElE + QVQ4T6WSy2sTURTGbxMt7tyLrRsXgeLGbSkUTFUCbvwLXChUXBhx6Vqoy1KlwsTgzk1daLEF0YZW7KJp + XmbyTibPmWQemckklTYEezzn0mQS0ZUDX+4j8/3u+e4ZBgD/Jf4zGAxYv99nbcNgP4+O2Mnx8QWpVHqW + zWSCxUJBwLmQz+UCxWLxeq/XY3KjwTRN+wugbTDLspjaai1k0unTQj4PaIZqpQIIgM2PHz7btn1OUZR/ + Ai4Zhj6DhqdkIHOjXgdFkfn46uUavN/Y2MH/LxpY7QjQ758wLO2+rmu/EHCKUaDTsSCdEmFvdxcQDLgP + 0cghbG99glg0+q5WrToA0zQZvvCWXiIzGbq2DaKYhBcrK7C//x2aTYVXcRZnDyM6gA7mNtttYRxgmSYY + ug47X7/gqVtA91GWJD6iOZROpRyAZZmUfwKAQK5u1+aS5QbkslkyQ0oUQ2Iy6QBMs00ROGAcwnU2x8xk + BDTCj0QilIjHHQDdqKqqgqq2OOBPEUCSShCPxbiikUgI5QB07ClekkDtIgh2Y0KapvLsh+EwhA8OAE// + hqMDaOKHUa/VBCoTvzLed7p1Es0VWeb58VQe4/X6+psrs7NjFeg6w/YE6ZRKuQy1WhUQyEXQVrMJa6ur + mx6P5861ubm70273VcbY9Ajg8/lYMBB4Tj0m8SrwVBLNCfBwefkRmvjjQrlRIwDtnXe5Zm4sLj646fU+ + Rvlveb1PUP7bS0v+hfn5e2i6jHKTcagRABdTuCYNn+F6fI/MU5MAYL8BnRvTMpRYdPwAAAAASUVORK5C + YII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAArRJREFUOE+l01tIU3EAx/GBlAQVCkVvTZMI1B6SijCkhx566MIqJbEVFZqplTmVSZa2 - zOsslWLdzMjMJCjDaWoPywdzrfA+15zOy9zV7cw5zXbO2fj13wFHom8e+HI48P9/zv+c/zk8ALz1FJjs - maqKpI1PEhiTLJ42Pye9iKcttfG0tc5fgsf86thaN+IA92BeKGuWsV7bS3hna+G1v4bX8QY+qgE+ZyN8 - riauP+ZPpTNObPwf4oD5vuxwxvAI7MxDsMYqsKYasObH8Fpk8FqfwQ/7Zp9iwdIFB7VotNtnJU4nFeyf - ywFOVQafniwBM/mAVARmqphUCma6HKxBysFeYxncpk643B5QlAME2RcA7N3JfHq8EMx4Ppix2+R8F4y+ - AMzEPZKEQ9mJO5g3yDE3/xcOh32aIBsCgK1LyPeMikFrRaB/Z5FzNujRXECXD4wRiKCs7iZck82gXEt+ - IG/5PXCPYPp6jr80IoJnOJ2UBlqdDnbkBgaHBPg1dIKgGXBrSkDZraCccx6y/G0rgMnWeP5CfyYWeq9i - sTcFbN81MAPpkKnCUKHcjsVBIZZ0TXC6fbDZrI2rdmH042n+3M/rcCmTQfVcgk6ZCK0qCTXfI1HeHQG1 - SgDtcBEsZAWm/nfFqwD1+1N8e3caXF1XoP52BpmKMOQoIlCg2INCUo5iNzI6t0Cp/wCPpqViFfCj7ni4 - QZEKU8dFaNoTUNl2kEvUGo1MeRSkbTGo7IxDx4Acmp666lXAwFtBiPZLCjPy+Ty0zUkwtFzAlFyI1IYY - JNZHQ992FvoOCbTynHpr+8ldK4AgHndsFl/eL6jOjSuUZh2WVN6KLaoUxd4/WrLXeKQs2i3JPiQVC6PE - ZFwEKYzMCSeFBL4DchG05o+yI3RryIGdoYEt4/E2kbH+gpfnrOtX9sP/AIt1021BwrQaAAAAAElFTkSu - QmCC + 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 - qLnKOhNqAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACwUlE + QVQ4T6WSXUhTYRjH37kUxciKbgq66CIYrUK7KZIgaVYQBRVBBGUgGBKYFUUX0YWQlN4VKrpYBsYojZoX + fiQTvbEPNre5D93Zps61re187EvTIfnvOZN5hOiqF/7n8L6c/+88z/95GYD/Uu6xurrKstksEwSeLS0u + spXl5aKA3/94Znra4Pf59LOBgJ7zel/5/b6KTCbDwuEwi8VifwNEUWCJRILFY7Fj0x7PGplAZgTn58Fx + XvSbTEPpdKowEon8E7CHqthLhvvczLr5RyiESCSce7e9fIG+3t7xYDBYJgiCAshmV1gmk67j+fhvAqyJ + goBkMgm3y4XxsTEQGHSOSasFgwMDsE1OviWIApAkiZGpR/5INsuGdCoFt8eNltZWfJmYQDQayVWRa8fr + HaMWFUCS+pZE0ZAHEBDJpSXw3AxG3xsxNDICzu/H3OwsfBwHMps9brcCSCSoAlFYB0gipISEwIMGOI9o + 4Dl6GHN1NxDycfByPtBk5NbMLqdTAUiSyHieN/BCHNLyL7ifPMJQMUOgpRm+d0YMl6jw9dpleHx+kBFT + DofZYbcrADlRGoshFo9BpL8PnjwO4/YSOJub4Oo2wLijFJ+0+2GjLOwOB4VpNVstFgXAx+OMQjLI4xIo + /b5z1WgrK8bn2hqMPryH9p2l6C4/AOv3b7BYLLDbbONOh0MBROlihBYWDAvBIH5SiDbTRzzdtQ09ly7g + w61aNG0txGDrc0x5PLkWOjs69Ae1WgVAN4/ReN7ICc9T0lEK0zYyjNc3r0N/9Qqs/Sa0d3WZNBrN+UNa + 7cUitXofY2zLBqCivJzpOzufyRXICtO8YzwPIZUGTy0JiQRu19c3kCm3Ckhq0gZAPpOpp6qq6k7rdHdI + jWd0urukxrPV1Y0nKitr1CrVbjKqZGNeGwDaqGgvK7/y+81nBZvN6wCwP2pNqLkfzIVuAAAAAElFTkSu + QmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAclJREFUOE9j+P//PwMlGKdm9WXPhcVn3XcmZDhWA6zWvBDhm3jtLmfv1a0ma14K4TME - wwDt2bfU+DrPP2BoOPGfpenUX662M9/4Os+dkui7GIXNIAwDuGoPX2co3/8fjsv2gdnstYf/i7ad7EI3 - BMMAxrytdkD8mSFv638QBrJ/M+Zv/cqQu+U/a/GO/0LV+3yRDcEaBpwZa7UZ09Z8ZElfs4tB9zsfg/B/ - TtbM9epM6WtzuQu27BSt2MECMwRuwNyzaoyLL1hKwySYopdrMkaujdr7UEJ/7wMlOZg4b+pKHa60VVxY - DFBnnHZKZ8HsMw7hu26VcsMUTD2p2DrtpNbbhec9lQkGYsdhWeeuI5r/+44Zf+g/bnZjwnHz291HNb+2 - H5YDihm8nXnGy5hgINbuVe2v2qP6vwaE94Kw2v/avRpgumGf4ff2Q3YcBAMxf7NOfs5GncfZ63X+Z2/Q - +Q9k/wex8zZpJpTvUEMJeHz5gDFzu5lOxCL92WHz9f4mrjVyxxsGzAwMvEAsD8RqQKzFAMHSmlEKBZoR - cgVAtgRUDqSGFyMWgIKsQMwDxAJALATEwkAsCtTIA8ScUD5IDqSGFcMAQrkOlzwA9XxjpDYQVs4AAAAA - SUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB2UlE + QVQ4T2P4//8/RRirIAirL3suLD7rvjM2OWSMVdBqzQsRvonX7nL2Xt1qsualEDY1MIwhoD37lhpf5/kH + DA0n/rM0nfrL1XbmG1/nuVMSfRej0NWCMIYAV+3h6wzl+//Dcdk+MM1ee/i/aNvJLnT1KBwQZszbagfE + nxnytv4HYSD7N2P+1q8MuVv+sxbv+C9Uvc8XWT2KZhjmzFirzZi25iNL+ppdDLrf+RiE/3OyZq5XZ0pf + m8tdsGWnaMUOFphauKa5Z9UYF1+wlIbxmaKXazJGro3a+1BCf+8DJTmYOG/qSh2utFVcMD6SAeqM007p + LJh9xiF8161Sbpj41JOKrdNOar1deN5TGSaGjFE4HYdlnbuOaP7vO2b8of+42Y0Jx81vdx/V/Np+WA4o + ZvB25hkvY2T1IIzCAeHavar9VXtU/9eA8F4QVvtfu1cDTDfsM/zefsiOA1k9imYYzt+sk5+zUedx9nqd + /9kbdP4D2f9B7LxNmgnlO9RQ1KJw0DBj5nYznYhF+rPD5uv9TVxr5I5FDcIAZgYGXiCWB2I1INZigGBp + zSiFAs0IuQIgWwIqB1LDi80AViDmAWIBIBYCYmEgFgVq5AFiTigfJAdSw4phAHn4PwMA9XxjpB7NS6oA + AAAASUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAiNJREFUOE+l0s1rE0EUAPCXtKKSiwgFSZNsWymKV3tS0oJgPRW9+q8oeFGLUDT9G0Sw - x3xpdtuDzSYmWQPdmKYktdlsvhqSNCkJSYibj52+WZtSlrIXB37L7sx7j9k3A4QQ+B+gqmMNISqcnjaZ - fF5+nctJ6+idzvtCIf/m5KR+V1EUGAwGGqAfVL/fv3Z09CdycJAiRg4PM2Kv17MoykDLg3Q6DZlMBpLJ - 38s8HyThcMhYiCfRaPSpIAhAQavVgna7DY1G4zbHccd+n4988/uvRNcCge/NcqlkrddqUKtWAUajkYY2 - UpZlW4jn13Enm+iTjgu/P+CO52n8cDjUXBSgk5XK8StZzpVQERV06FwZY95Omk4bD6ViEXBLkJOkpVgs - SoRYzJgQI6lUykl7R0EJk8vlMkjZ7AOOY8nOzrYhjmXJ/n7yIZ4GNh8LdDodTbfbhXg8/sLn9YY8bncE - /dSJeD2esCiKL2m/xuOx5uJFVVXAS7KE//lZkrJb6KvOFq59qVarjyeN1wooyl/tRjWbDUciIfbEvT1i - JCGKw0qlco8ef71eA7i/uAjP19bglyA8ikYiZHf3hyEawweDT1acTrgzMwOTMWWzWi0fNzbcbCBAL8uV - WDZANl2ubcZuv4WJ08gEU/hAN00ANrPJZHfMzjoX5uZW5xnm2WULDLPK2GwrGOPAWDvmWJCZFqDM6Pp5 - 1cmuMA4D/qHvkzGNsTfOc+AMHmWVxXCkGWAAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACH0lE + QVQ4T6XSzWsTQRQA8Je0opKLCAVJN9m2UhSv9qSkBcF6Knr1X1HwohahaPo3iGCP+dLstgebTUyyBrox + TUlqs9l8NSRpUhKSEDcfO32zNaWEshcHfsvsznuP2TcDhJD/Apo20hGiwelpg83llNfZrLyO3k14n8/n + 3pyc1O6qqgr9fl8H9IXq9XrXjo7+hA8OksTI4WFa6na7FlXt63mQSqUgnU5DIvF7WRACJBQKGgsKJBKJ + PBVFEShoNpvQarWgXq/f5nn+2Of1km8+35Xomt//vVEqFq21ahWqlQrAcDjU0YYoisIEBWEdd7KJPk1w + og+443kaPxgMdBcFqHL5+JWiZIuogPIT6LcSxrwdN52CYqEAuCXIyvJSNBohYjRqTIySZDLpoL2joIjJ + pVIJ5EzmAc9zZGdn2xDPcWR/P/EQTwObjwXa7bau0+lALBZ74fV4gm6XK4x+Tgh73O6QJEkvab9Go5Hu + YqJpGuAlWcL//CzLmS30dcIWrn2pVCqPxz3TC6jqX/1GNRp1ezwudaW9PWIkLkmDcrl8jx5/rVYFuL+4 + CM/X1uCXKD6KhMNkd/eHIRojBAJPVhwOuDMzA+MxxVitlo8bGy7O76eX5Uoc5yebTuc2a7PdwpxpZIIp + fKCbJgDGbDLZ7LOzjoW5udV5ln122QLLrrIMs4Ixdoy1YY4FmWkByoyu/6s6HhiHAefofDymMfbGeQ7A + GR5llcXmiNwEAAAAAElFTkSuQmCC - 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 @@ -386,286 +384,283 @@ - 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 + BwDdJejr8BUpAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAclJREFUOE9j+P//PwMlGKdm9WXPhcVn3XcmZDhWA6zWvBDhm3jtLmfv1a0ma14K4TME - wwDt2bfU+DrPP2BoOPGfpenUX662M9/4Os+dkui7GIXNIAwDuGoPX2co3/8fjsv2gdnstYf/i7ad7EI3 - BMMAxrytdkD8mSFv638QBrJ/M+Zv/cqQu+U/a/GO/0LV+3yRDcEaBpwZa7UZ09Z8ZElfs4tB9zsfg/B/ - TtbM9epM6WtzuQu27BSt2MECMwRuwNyzaoyLL1hKwySYopdrMkaujdr7UEJ/7wMlOZg4b+pKHa60VVxY - DFBnnHZKZ8HsMw7hu26VcsMUTD2p2DrtpNbbhec9lQkGYsdhWeeuI5r/+44Zf+g/bnZjwnHz291HNb+2 - H5YDihm8nXnGy5hgINbuVe2v2qP6vwaE94Kw2v/avRpgumGf4ff2Q3YcBAMxf7NOfs5GncfZ63X+Z2/Q - +Q9k/wex8zZpJpTvUEMJeHz5gDFzu5lOxCL92WHz9f4mrjVyxxsGzAwMvEAsD8RqQKzFAMHSmlEKBZoR - cgVAtgRUDqSGFyMWgIKsQMwDxAJALATEwkAsCtTIA8ScUD5IDqSGFcMAQrkOlzwA9XxjpDYQVs4AAAAA - SUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB2UlE + QVQ4T2P4//8/RRirIAirL3suLD7rvjM2OWSMVdBqzQsRvonX7nL2Xt1qsualEDY1MIwhoD37lhpf5/kH + DA0n/rM0nfrL1XbmG1/nuVMSfRej0NWCMIYAV+3h6wzl+//Dcdk+MM1ee/i/aNvJLnT1KBwQZszbagfE + nxnytv4HYSD7N2P+1q8MuVv+sxbv+C9Uvc8XWT2KZhjmzFirzZi25iNL+ppdDLrf+RiE/3OyZq5XZ0pf + m8tdsGWnaMUOFphauKa5Z9UYF1+wlIbxmaKXazJGro3a+1BCf+8DJTmYOG/qSh2utFVcMD6SAeqM007p + LJh9xiF8161Sbpj41JOKrdNOar1deN5TGSaGjFE4HYdlnbuOaP7vO2b8of+42Y0Jx81vdx/V/Np+WA4o + ZvB25hkvY2T1IIzCAeHavar9VXtU/9eA8F4QVvtfu1cDTDfsM/zefsiOA1k9imYYzt+sk5+zUedx9nqd + /9kbdP4D2f9B7LxNmgnlO9RQ1KJw0DBj5nYznYhF+rPD5uv9TVxr5I5FDcIAZgYGXiCWB2I1INZigGBp + zSiFAs0IuQIgWwIqB1LDi80AViDmAWIBIBYCYmEgFgVq5AFiTigfJAdSw4phAHn4PwMA9XxjpB7NS6oA + AAAASUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAaFJREFUOE9j+P//PwMlmCLNIItJMmDBeesNC85bHVp6KUgL5mqiDZhz1nrJ1JOy/6ec - kPw/47Tu/+mntDWIdsGsMy75E46r/O89KgXEMkAseWHicWkhDANmn/XXAmI15ECdey5Et/eY3v/2Q7L/ - Ow4rgvC99sMafBhemH0uwrbnmPWf3mPWP2adCzeGKmDsOWZ1temA8v+mg6r/mw6o/mw+qAF2OooBU0/F - cDQfMP9btVv1Pwi3HbL5MvtcgnbPUbeK2r3a/6v3qAOxxv/avVop6FEONqlshxpj4Rb1yYVbtP8XbtH6 - X7BF43/dHrvflTtNwWyQeNFW7d3Y0gtKLGSs1Z2Uvkb3P5D+n75WC4i1oWzdHxlrDWUIGgBSELNYd1Lk - Qt3/UYugGMiOWaxfhCu1Yk0H/jP1+nym6f33nqr733e63gV8SR1sADMDAy8QywCxEiMDgyoDA4O4SZHa - KutmnbcqvtIRQL4yUE4TiNVAaqBqeeHpACjADsT8QCwMxGIgA4CYm4GBRRRICwLFJIFYAiQHVQNSy050 - SiToBUqyMwC0DXVd1JsDMAAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABqUlE + QVQ4T2P4//8/RRirICkYqyAuvOC89YYF560OLb0UpAUTw1CEC885a71k6knZ/1NOSP6fcVr3//RT2hog + cayK0fGsMy75E46r/O89KgXEMkAseWHicWkhkByKwtln/bWAWA1ZbO65EN3eY3r/2w/J/u84rAjC99oP + a/DB5BGaz0XY9hyz/tN7zPrHrHPhxlBxxp5jVlebDij/bzqo+r/pgOrP5oMaYKfDMJiYeiqGo/mA+d+q + 3ar/QbjtkM2X2ecStHuOulXU7tX+X71HHYg1/tfu1UpB1gw3oGyHGmPhFvXJhVu0/xdu0fpfsEXjf90e + u9+VO03BbJB40Vbt3eiaQRiFk7FWd1L6Gt3/QPp/+lotINaGsnV/ZKw1lEFWC8MYAjGLdSdFLtT9H7UI + ioHsmMX6RejqYBiroP9MvT6faXr/vafq/vedrncBmxoYBhPMDAy8QCwDxEqMDAyqDAwM4iZFaqusm3Xe + qvhKRwD5ykA5TSBWA6mBquVFNoAdiPmBWBiIxUAGADE3AwOLKJAWBIpJArEESA6qBqSWHW4AJRirIPH4 + PwMAtA11XUiD1KEAAAAASUVORK5CYII= - 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 - YII= + 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 - AAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABmUlE + QVQ4T6WMSSiEcRjGn28+Y8xizTKWQbZxUIqLksOUy0SREyllK2YsGZlMRkNj3xORaZKDsiUU2bJHkpCQ + RkYObnKXen3JSM138OXw+/f+fz3PAyL6F7xSCLxSCLxSCLzSRfzSa2ig/akgxO7Upu5+ePNl3ET49EtK + gM1pko86DiRDd+9s7zWxXVckaT97Vph3LDLLYcDv/NejtDs9vMcehqXD90/i/hsScQVYzwktp4TmY0LT + EckNy5dx+okZpn47y21AOnAnQ8cFofWMYDkhmI8Ipn2CcYdQv0WoWydR1QpFVdocJUarzG3g6zDtb6Bx + j9CwTTBsEGrXCFwJFYuE8nlCyfxxZplFZdUVqmr0Oj/3gbpNPWpWCXpXaYFQOveI4tlJFM/luXI9fYPy + lmazb2ebVfwzwAISUUZlMoqm3pA/fsvkdI8wGdW5LCuNlgIyCaDgMkqWYULS09KSMjUadbZWG/Z7QOEB + BLEir0gxEOwJ+HP/CM4ncCRyqL/vWACq+JiYWGVwkM/PwH/glULglULglX+H8AnyWXl33beE7gAAAABJ + RU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAA7JJREFUOE+lkmtM02cUh08FdzMBKXMC2zKTQQWqQAsbRha3aXEgAYayTLpwmahsuAEV - YWUUxzYBC5SKOhTcaJXCWkoLNr1Z7P2yBquFUsiarjeYQeQWLovBzf33L8tun3fyPsnz/nLO+fK+gCAI - /B9gQSb5D4sKOcaRmVo3jotgeU7kU6aqK4rHoyJYDlIKY14ifnbFMgJL6w74cZ4LrkUJwLxB/w9Gg98D - 5YTdy8JtwYg0PsYjf51gGdyORYZeDkMkxISXZhQiWHniAcdfC3xWI/ybqVEjZqj2+KXvS3Nl0i/LG4bp - 1Cq/8ykfcKyyjpCFx/YXZ9fMEa5FQcD0shLAt2qGqQ3ugHfFhGIM6JpIszPHEte6Jg7puydzRExb0toV - +wGnwHmq7bweh7QY8chF8xsZl837AVbXH8DSIzfYZvgwveSE+8tuTM3No31Hv0swnxUXXG1SfNSU100w - UwTZwhsjzUVkVuIPhTf2mK7oaxN77zIAfnk8C8vrXlD8RIaJh2yYXZvcxLa+o24zRnmvW9OGOGPZbKYJ - 571m2WeWOc9QmaadnovmXe5eW84+np0M8OuTVXj020PQeE7CsCsPHHMKOC08LMzuxFkqB7NYZyXkC+92 - 7rR8zCNJOo200pxrMXfe704YYWhK91w1VQNovU2g9NTvYFtTlF134zXDrspPeqx5FxrVsQr2vSNtXFth - fZMar+gaSe9RuRvy6Zrdtxi6JLncWU3QeM8BMHVF0Kwm44u58XP5nOhFuqqA8bkkQ1PYF71QJTqgqpVm - CIv6YhYqht6c7DCWn/Pnx7lx8zRZGumr4WxA31MEYw844ZdNe2WtWrxK5Woo4I0VMVq0eHXfaB5dYC+h - turwapYl67rG3ZjD0MUp2w2v3Tb4WndZZ9gAX2tSgXbrLULJAB4p5kUhDcrD3TXS/ePHUK8Sp9hqpG9r - i/txCOVm8twl44lvjvEikZP8WKRCRMislCQCcMTnQedjbG/XZfU2K1P5Cmfje733TtXTb5MGuKNlNKGd - +ildSRr41lzYbvB1HmpRHexnqNN5+umOaLObDxu1NxebXId+DqoWh1T2JAtqxEn3qZoo5PQg/mdKf5yN - qsEhNCXx9y8G0jifqSOROlMskl6OzX1uKzq8CQCzOSBwR3hCaFkYEVsdHLblSGhkUEkYIYT2/KvBJdhX - gj4MI4bQXojZWha0bUsmmp8JJ4aWP/3MU5HoOAYC/lyCnr9rM2r+GIMSiOK/+93f4/eN8gf+pj8AnTMG - yNrrrucAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAADsUlE + QVQ4T6WSa0zTVxjG31rczQSkzFnYlpkMKlAFWtgwsrhNYQMJMJRl0oXLRGXDDagIK6M4tglYoFTUoeBG + qxTWUlqw6c1i75c1WC2UQtZ0vQAziNzCZTG4uf/+Zbf4eU/OL+c5T877fDkHEAT5X8CCXPoEi0oFxpmR + UjtGCGN7j+dRp6rKi8YiwtjO5CTmvFTy7Ip1GJbWnfDTPA/ci1KAeaPhP0xG/x6gIO1eFm0LQmSxUV7F + 6yTrwHYcMvgyHpGS416aUYph5bEXnP8UTNpMTzA1YsIM1hy7+ENJjlz2VVn9EINW6fcC6odcm7w9eOGR + 48XZNUuYe1GInV5WoQWrFpja4Db4VswoJmzneKqDNRq/1jl+0NA1kS1m2RPWLjsOuISuk63nDASk2URE + LljeSL9k2Q+wun4flh56wD4jgOklF9xb9mCqbxzpPfJ9nOWMJP9Ko/LjxtwukoUqzBJdH24qpLDjfyy4 + vsd82VAT33OHCfDro1lYXveB8mcKjD/gwOzaxCaO7V1NqynCd82WOsgdzeKwzATfVes+i9x1msYy7/Re + sOzy9Niz9/EdFIDfHq/Cw98fgNZ7AobcueCcU8Ip0SFRVgfBWjGQyT4jpZx/r2On9RN+srTDRC/Jvhp1 + +4OuuGGmtmTPFXMVgM7XCCpv3Q6OLUnVeSdWO+Su+LTblnu+QROt5Nw93MqzF9Q1aojKzuG0brWnPo+h + 3X2TqU9QKFxVJK3vLABLXwhNGgqxiBc7l8eNXGSo85lfSNO1Bb2RC5XiA+oaWbqosDdqoXzwzYl2U9lZ + f36MFzNPl6cmfz2UBeh7imH0Pjf0knmvvEVHVKvd9fn80UJms46o6R3JZQgdxbQWPVHDtmZe03oaspn6 + GFWb8bVbxsmWXbYZDsA32hSg33yLVNxPRIr4EUi96lBXtWz/2FHUV0qS7NWyt3VFfQSEeiNx7qLp+LdH + +eHICUE0Ui4mZVRI4wG4knOgn2Rub9Nn9jSpUgRKV8P7PXdP1jFuJffzRkrpIgftM4Yquf87S0GbcbLj + YLP6nT6mJo1vmG6PtHgEsKG9ObjEWvRz0HQEpKI7UVgtSbhH00YgpwaIv1D7Yuw0LQGhq8h/fNmfyv1c + E47UmqORtDJcznNb0eFNAJjN2IAdoXEhpXgyrioIv+VwSHhgMZ4UTH/+1aBi3CuBH+HJwfQXoraWBm7b + koHmp0PJIWVPP/NUODqOAexfJej6V5tR/DEGJeDvs9/77/j9hvwBFgD+BJ0zBshFdH6uAAAAAElFTkSu + QmCC - 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 - AABJRU5ErkJggg== + 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 + 0Ps1AAAAAElFTkSuQmCC - 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 + 2VGpi7MAAAAASUVORK5CYII= - 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 + 2VGpi7MAAAAASUVORK5CYII= - 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 + SUVORK5CYII= - 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 + boOggwAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAr9JREFUOE+l0llPE1EYBuCvZVEWjSIxssS2KF57AU1qAxjAVBK84W/4A0yMiTcK0UTq - rTF64QoKQqFQoC2WTotAsQuRCi1doNBSSrF2o2Xp5zeDNAYNN57JMzmZmfOemTcDiAj/gxZnOFtbYaHX - 67nndrsekgdHPKR79+mZKzvpNKRTqSzY2d2FVCrFczodhvn5b3gcx+KiNR6PFSSTCTgECwsLMDdnk+r1 - E2gwMMeamNCh0+FoXQ8GIRAIcCAWi0E4HD49Njq6ohwcxCGl8p+UykEcHh7aDAaDZdFkEn5GoxzY39/n - SvR43BcZRt9ObyInnUfIGb3+sd1uv7xNG0Ydi5AMbUByM3QQsLe3B37/2l0KWSUrZDnL6132ECp1NbAe - aN8NhyHysQtSHjekvB6AVZ8P3C7X1empKfyLyYQz1I1J9xmnZk345ess+gz6lmj3uxNpvx9Y4F9bYwOq - qYOMWj2GWRo1aoaVaKmrQUu9GLUjKtTSfUuzdHu+rsa22dudF1b0AiQSCYjH4zBrMrUNKBSMor9/khgV - CoVxoKeH0Uprv4+fK0Zd0zXU3WxATUkhTjfXGyNGhh+ZNABkMhlOKBQS03e/drmWush7jtfz1r3kVGvb - WrGvrAT7yktwXNaoSfpW8jJUPNsfRCI/aPFGuc1qjVnMZvyT1WZDM/XwQdaILy+cxRekp0EyuWE1F2fY - PzhDAbQr0G5iA8OgjsrKop9mfHQEn0lq8cmZQnzeWI+vbrWgvPQUvrkunVkaU+VbR1QAgspKkIjF8FQu - 7xmholSq4QM0H+r7hJ2SGpRLxagaGsRHHR3q2+XnmTuCCruwqLCYDweDR07yebxSCpNcEgiaqgSCGyKB - QFYlEsmEFRUckVDYyOfzqwpyc6qL8nJF3BqAHDrYM7Bhh4G/c7ngw+vsnB35JJfdlNbkEN4vq9aD+Ljn - 2EYAAAAASUVORK5CYII= + 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 - DACGQgAAAABJRU5ErkJggg== + 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 @@ -673,183 +668,181 @@ - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAyZJREFUOE+l0HtI01EUB/BjRqX52iYUTKm00lJ/PpZublqWmY80dZYhVNrazMdyZQ9L - 0yw0TcIEh7lhYg9aoKa21XyllY8ypQeIBZWVj0xN3LR35unOEKT92YHP/V3u/X0PnAuICP8DPva9nzE6 - 9AE+fRyC/tevTM7Gx5xtr1U6jwwOwNC7t9DRoLY6LYjKfdH1eMns/4O9b2Cw9zXAo1rVjAbFFai/fgXK - C/PdnyklqCxKzX5QUw2PG+pAJc/d/VwlRmVJYWRnUwO0Kqugo/4OuVMDaEZHQDMyDOoyOShlUnjS1EhT - 54Rcba4qa9RqtZYTExMLWupqKtS5W8ufNqpt71cooKIgD/pe9MDQ216ASc04fNFooJlcSCViplScyJQd - PGJeVVQc0tbc0tnR8rC9Wl4SW3Y8xVyenLhUmiSyqi4qMNCFRwf6AcbI7GSWxTkxO+/l76J+y4Qu03KR - 63SJgPp+SeiCpSJXJPuvmYGe06mbudPHfDm/08MDurvbWph9L3sATkWFQ0pokFtG8CqcaqXjVBsDf81q - JXsCu2hYedgGkzzcUMJzxni2IyZt4kQkB6wHSPLlQrw3h5UVboffbxvi55r5eqbqDFCVYo1i93Uo4VCY - 4OmMsWxHvojtACDZ4g0JPjzWmVA7/Fq+CCduGOn5eXMhVoqXYU7oOvxUtx0P+zigkE3xYzkUwAE/L4jb - wGVlBtvh5OXFOF5qoufbNWOsTFiOB71csES4EuO4FAo5TnwCIJE0iPXhsjKC7FBbZIZjUnM9X2SmqBCs - wMxgVxy+FYIHvNdijIcTfy+bNIgjb7BvPYeV5m+P4+dpOJpH1zN5wQIV0TYoIrOfi1yDArYT7vFw5BMA - h7b5QWKgr3uKLxkh2xK1WX9p5viRy8DSSFtMC3FGzd2tuJ9njwIea8deniuArbUVhPn70QU+Hm8KyENe - jPirOMIeZXMc2kDhfi8K08NWYjTPbSx888bVTEsG6MqAMDUzNqKs6YxkpgXthJUFPdWaRj851woGLc2G - YXFiOZ1xlGFq4kkyZjNZQ7IS88lHZ7Z0Tef9Q3c2W4a6jC77B2Jw79o79I6kAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAADIklE + QVQ4T6XQeUjTURwA8K8pXZ7bhIIpeVRa6c9j6uamZpnlmTrLCDpsbZ7LpVaWdlhUWkQJDXPDxCxaoKY2 + a15lpVYedIBokHZY5pW4zQ4r89ubIkj7sy983nu8975f+H4BEf8LDPZ9mDYy8Bm+DA7Ax543JmcTY88+ + qVG6DPd/goH376C1XmV1UrA9t7ujbcns//63vUQPwLOa6mn1ihKou1kCpZcver5USlCZn3nmcVUltNXX + QrU8d+erajEqCy/HtD+oh2ZlBbTW3SNvKgD1yDCoh4dAVSwHpUwKzx800FQ54dcbK4obNBqNpVarnd9U + W1Wmyg0tfdGgsn9UpoCyvPPQ190FA+/eAoyrx+CbWg2N5EEqETOl4mSmbP8B84r8gvCWxqb21qanTyrl + hXHFhzPM5WnJS6UpIqvK/DwDXfLIp48Ao6R30otxTuy2hxd3UH9kQtcpuchtqlBATVwVumKRyA3J+Xt2 + sPdU5gbu1KEAzp9jUUGdnS1NzL7XXQAntkdBRkSI+/GwFTjZTMfJFgb+ntU8AztoWJ5uhyle7ijhuWAi + 2wlT1nOi04L8AFICuJDoy2GdjnLAibuG+LXKSM9krQFWZ1ij2NMDJRwKk7xdMI7txBex1wBINvpCkj+P + dSrCAb+XLkTtrUV6ft1egOXiZZgT4YFfardguv8aFLIpfhyHAtgX6AMJa7ms7DAHHL9mjGNFJnp+3FiM + 5Uk2uN/HFQuFyzGBS6GQ48wnAJJJgTh/Lut4iANq8s1wVGqu55vMFBUCW8wOc8OhO+G4z3c1xno58/ew + SYEEMoO9fhxW1iZHHLtAw5HzdD3jlyxQsdsORaT3czGrUMB2xl1eTnwCIHVzICQHB3hmBJAWzlii5vQM + 9Rw/cxlYFGOPWeEuqL4fivE8RxTwWFv38NwA7K2tIHJTIF3g79WbRwZ5JXpGQbQjyuZIXUthvA+FxyKX + 426e+2jUhnUrmZYM0IUBYWq2eBFlTWekMS1oR6ws6JnWNPrRuWwZtCw7hsURGzrjIMPUxJvkmE3nGpKV + MCKbzmzois77h+5uNgx1OYYA8BdicO/aoDAyhAAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAclJREFUOE9j+P//PwMlGKdm9WXPhcVn3XcmZDhWA6zWvBDhm3jtLmfv1a0ma14K4TME - wwDt2bfU+DrPP2BoOPGfpenUX662M9/4Os+dkui7GIXNIAwDuGoPX2co3/8fjsv2gdnstYf/i7ad7EI3 - BMMAxrytdkD8mSFv638QBrJ/M+Zv/cqQu+U/a/GO/0LV+3yRDcEaBpwZa7UZ09Z8ZElfs4tB9zsfg/B/ - TtbM9epM6WtzuQu27BSt2MECMwRuwNyzaoyLL1hKwySYopdrMkaujdr7UEJ/7wMlOZg4b+pKHa60VVxY - DFBnnHZKZ8HsMw7hu26VcsMUTD2p2DrtpNbbhec9lQkGYsdhWeeuI5r/+44Zf+g/bnZjwnHz291HNb+2 - H5YDihm8nXnGy5hgINbuVe2v2qP6vwaE94Kw2v/avRpgumGf4ff2Q3YcBAMxf7NOfs5GncfZ63X+Z2/Q - +Q9k/wex8zZpJpTvUEMJeHz5gDFzu5lOxCL92WHz9f4mrjVyxxsGzAwMvEAsD8RqQKzFAMHSmlEKBZoR - cgVAtgRUDqSGFyMWgIKsQMwDxAJALATEwkAsCtTIA8ScUD5IDqSGFcMAQrkOlzwA9XxjpDYQVs4AAAAA - SUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB2UlE + QVQ4T2P4//8/RRirIAirL3suLD7rvjM2OWSMVdBqzQsRvonX7nL2Xt1qsualEDY1MIwhoD37lhpf5/kH + DA0n/rM0nfrL1XbmG1/nuVMSfRej0NWCMIYAV+3h6wzl+//Dcdk+MM1ee/i/aNvJLnT1KBwQZszbagfE + nxnytv4HYSD7N2P+1q8MuVv+sxbv+C9Uvc8XWT2KZhjmzFirzZi25iNL+ppdDLrf+RiE/3OyZq5XZ0pf + m8tdsGWnaMUOFphauKa5Z9UYF1+wlIbxmaKXazJGro3a+1BCf+8DJTmYOG/qSh2utFVcMD6SAeqM007p + LJh9xiF8161Sbpj41JOKrdNOar1deN5TGSaGjFE4HYdlnbuOaP7vO2b8of+42Y0Jx81vdx/V/Np+WA4o + ZvB25hkvY2T1IIzCAeHavar9VXtU/9eA8F4QVvtfu1cDTDfsM/zefsiOA1k9imYYzt+sk5+zUedx9nqd + /9kbdP4D2f9B7LxNmgnlO9RQ1KJw0DBj5nYznYhF+rPD5uv9TVxr5I5FDcIAZgYGXiCWB2I1INZigGBp + zSiFAs0IuQIgWwIqB1LDi80AViDmAWIBIBYCYmEgFgVq5AFiTigfJAdSw4phAHn4PwMA9XxjpB7NS6oA + AAAASUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAaFJREFUOE9j+P//PwMlmCLNIItJMmDBeesNC85bHVp6KUgL5mqiDZhz1nrJ1JOy/6ec - kPw/47Tu/+mntDWIdsGsMy75E46r/O89KgXEMkAseWHicWkhDANmn/XXAmI15ECdey5Et/eY3v/2Q7L/ - Ow4rgvC99sMafBhemH0uwrbnmPWf3mPWP2adCzeGKmDsOWZ1temA8v+mg6r/mw6o/mw+qAF2OooBU0/F - cDQfMP9btVv1Pwi3HbL5MvtcgnbPUbeK2r3a/6v3qAOxxv/avVop6FEONqlshxpj4Rb1yYVbtP8XbtH6 - X7BF43/dHrvflTtNwWyQeNFW7d3Y0gtKLGSs1Z2Uvkb3P5D+n75WC4i1oWzdHxlrDWUIGgBSELNYd1Lk - Qt3/UYugGMiOWaxfhCu1Yk0H/jP1+nym6f33nqr733e63gV8SR1sADMDAy8QywCxEiMDgyoDA4O4SZHa - KutmnbcqvtIRQL4yUE4TiNVAaqBqeeHpACjADsT8QCwMxGIgA4CYm4GBRRRICwLFJIFYAiQHVQNSy050 - SiToBUqyMwC0DXVd1JsDMAAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABqUlE + QVQ4T2P4//8/RRirICkYqyAuvOC89YYF560OLb0UpAUTw1CEC885a71k6knZ/1NOSP6fcVr3//RT2hog + cayK0fGsMy75E46r/O89KgXEMkAseWHicWkhkByKwtln/bWAWA1ZbO65EN3eY3r/2w/J/u84rAjC99oP + a/DB5BGaz0XY9hyz/tN7zPrHrHPhxlBxxp5jVlebDij/bzqo+r/pgOrP5oMaYKfDMJiYeiqGo/mA+d+q + 3ar/QbjtkM2X2ecStHuOulXU7tX+X71HHYg1/tfu1UpB1gw3oGyHGmPhFvXJhVu0/xdu0fpfsEXjf90e + u9+VO03BbJB40Vbt3eiaQRiFk7FWd1L6Gt3/QPp/+lotINaGsnV/ZKw1lEFWC8MYAjGLdSdFLtT9H7UI + ioHsmMX6RejqYBiroP9MvT6faXr/vafq/vedrncBmxoYBhPMDAy8QCwDxEqMDAyqDAwM4iZFaqusm3Xe + qvhKRwD5ykA5TSBWA6mBquVFNoAdiPmBWBiIxUAGADE3AwOLKJAWBIpJArEESA6qBqSWHW4AJRirIPH4 + PwMAtA11XUiD1KEAAAAASUVORK5CYII= - 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 + 2VGpi7MAAAAASUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAlhJREFUOE+lk19IU3EUx882c25i9mAQSQ/S23DZIEqiIikIVtGfB1+iEPEtSQypx2rs - QSNTiYKgl5IiCsyWZTqbbtPpNvdHo2xzf9zN69zWcG1uadpO5170DiTswQsfzvmd3/l+z+93LxcQEbbC - lsTcYN5g5U8WPAspCKUyEE0vgXE2BpHMEjgjC+cNTOT9MBtrDSUzu9jFX9DPRCDwcxFWs1leKxh4Eynw - 04Y/sXj6QzDcaZuPtz3/xuCzqRB2Er0zYd+XeFI+8C+DbBYhmExLugOskgTODrcPH076sN09jR0EHyem - 8YWH8b/xs800qHj9vfEnoKPt7Q7MvW11eVFrn8Lb9q94x0ZwcQPa8Sl8Of3dGkqlVcIVml2eu02WSWwY - nsDGkQm8vgmN1HPD8hlbnJ77gkFXgK2uN7ujlz/ZsXbQ8V9qDON41ex6JBgkf69AV5BV1Q45TBf7xnAz - zvZasGbQwXTPhE8JBj+WV8ESW4BXgdltZ3pHoid6THiyx8zD5evr4+9MeKFvdPKpl9nH0mcWDIJzYZiZ - j/CFBx6mrVJnxKM6Ex6jqNZbk2q9LX2Y1up+a8aZXi6zxBLgjSdyBoUFBSCXSuFI5SHQPn4ibjCMVV8x - 2DvVRvfqPb2xqvG1bn/dwOjNWx+HyjUaDZQrFLCntDRnIAIAjrVHJJNI4FxLe33Vtaa6HTIZiGljZ0kJ - 5OflcS1Cq3AFCVUJMVFKKEhQsVtZcYk6lcRBqh2gqKJ6OeVlhJTTbDTgTPIJOVEkFolkJNhOeTHBxSKi - kChYG5Yz2Mrv/BfqU2fp5reweQAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACTklE + QVQ4T6WRW0iTYRiA323mDmJ2YRBJF9LdmJkQJVGRFASr6HDhTRQi3iXJROqyGrvQyFSiIOimRhEFZmYt + nU236TxM5zRq7bz9+TvnGls7pWl7e/9Rv1RiVB8833v4vvf5fvgBEf+LNZt/Q25b/poFZywJwWQGFtKL + YJyNQDizCLZw7KSBCb8YYiOtwURmC5v6DH1MGHyfUrCSzf4scMWT4KUDbzx19KU/pB2fj7Y9eM/gfUcQ + tYQuEPK8jSZk/WsJslkEfyIt6vKxZTRg67B78NaMB9vtbuwgcnHajQ+djPepl22mh4q4OV5An7a9yzf3 + rHXKhRqrA69Y3+HVcYKLv6CZcOAj94exYDJdwQuap5zXmiwz2DA0jarhaWxcBxXduWh5gy025w1e0Olj + q+vN9oWzr61YOzD5R2oME3jePHWbFyS+LEOnn62oHZw0ne4dxfU4rrNgzcAk0xUIHeEFH5dWwBKJwWPf + 7IZjuuGFQz0mPNxjzsHlP+qDz014qndk5p6L2cHSb+YF/rkQBObDufymk2mr7Dbi/m4THqCo1I8llPrx + 9F6qlX1jGVt6qdQSiYMrGl8VFEgkIBOLYV/lHtDcuStsMIxWnzNYtUqjfeW63liletK9s65/5NLlV4MK + tVoNCrkctpWUrAoEADm+L4FUJIITLe31VRea6jZJpSCk5ubiYsjPy8udcxu3eIGICkJIlBByGijfWlZ+ + hm6WEbupt4tiBfUVlJcSYuI3AUc+ISMKhQKBlAY2Ul5EcLGQKCAkBPfYquDfQfgG6lNn6VgwF30AAAAA + SUVORK5CYII= - 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 + boOggwAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAr9JREFUOE+l0llPE1EYBuCvZVEWjSIxssS2KF57AU1qAxjAVBK84W/4A0yMiTcK0UTq - rTF64QoKQqFQoC2WTotAsQuRCi1doNBSSrF2o2Xp5zeDNAYNN57JMzmZmfOemTcDiAj/gxZnOFtbYaHX - 67nndrsekgdHPKR79+mZKzvpNKRTqSzY2d2FVCrFczodhvn5b3gcx+KiNR6PFSSTCTgECwsLMDdnk+r1 - E2gwMMeamNCh0+FoXQ8GIRAIcCAWi0E4HD49Njq6ohwcxCGl8p+UykEcHh7aDAaDZdFkEn5GoxzY39/n - SvR43BcZRt9ObyInnUfIGb3+sd1uv7xNG0Ydi5AMbUByM3QQsLe3B37/2l0KWSUrZDnL6132ECp1NbAe - aN8NhyHysQtSHjekvB6AVZ8P3C7X1empKfyLyYQz1I1J9xmnZk345ess+gz6lmj3uxNpvx9Y4F9bYwOq - qYOMWj2GWRo1aoaVaKmrQUu9GLUjKtTSfUuzdHu+rsa22dudF1b0AiQSCYjH4zBrMrUNKBSMor9/khgV - CoVxoKeH0Uprv4+fK0Zd0zXU3WxATUkhTjfXGyNGhh+ZNABkMhlOKBQS03e/drmWush7jtfz1r3kVGvb - WrGvrAT7yktwXNaoSfpW8jJUPNsfRCI/aPFGuc1qjVnMZvyT1WZDM/XwQdaILy+cxRekp0EyuWE1F2fY - PzhDAbQr0G5iA8OgjsrKop9mfHQEn0lq8cmZQnzeWI+vbrWgvPQUvrkunVkaU+VbR1QAgspKkIjF8FQu - 7xmholSq4QM0H+r7hJ2SGpRLxagaGsRHHR3q2+XnmTuCCruwqLCYDweDR07yebxSCpNcEgiaqgSCGyKB - QFYlEsmEFRUckVDYyOfzqwpyc6qL8nJF3BqAHDrYM7Bhh4G/c7ngw+vsnB35JJfdlNbkEN4vq9aD+Ljn - 2EYAAAAASUVORK5CYII= + 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 - DACGQgAAAABJRU5ErkJggg== + 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 @@ -857,169 +850,167 @@ - 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 - SUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB2UlE + QVQ4T2P4//8/RRirIAirL3suLD7rvjM2OWSMVdBqzQsRvonX7nL2Xt1qsualEDY1MIwhoD37lhpf5/kH + DA0n/rM0nfrL1XbmG1/nuVMSfRej0NWCMIYAV+3h6wzl+//Dcdk+MM1ee/i/aNvJLnT1KBwQZszbagfE + nxnytv4HYSD7N2P+1q8MuVv+sxbv+C9Uvc8XWT2KZhjmzFirzZi25iNL+ppdDLrf+RiE/3OyZq5XZ0pf + m8tdsGWnaMUOFphauKa5Z9UYF1+wlIbxmaKXazJGro3a+1BCf+8DJTmYOG/qSh2utFVcMD6SAeqM007p + LJh9xiF8161Sbpj41JOKrdNOar1deN5TGSaGjFE4HYdlnbuOaP7vO2b8of+42Y0Jx81vdx/V/Np+WA4o + ZvB25hkvY2T1IIzCAeHavar9VXtU/9eA8F4QVvtfu1cDTDfsM/zefsiOA1k9imYYzt+sk5+zUedx9nqd + /9kbdP4D2f9B7LxNmgnlO9RQ1KJw0DBj5nYznYhF+rPD5uv9TVxr5I5FDcIAZgYGXiCWB2I1INZigGBp + zSiFAs0IuQIgWwIqB1LDi80AViDmAWIBIBYCYmEgFgVq5AFiTigfJAdSw4phAHn4PwMA9XxjpB7NS6oA + AAAASUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAaFJREFUOE9j+P//PwMlmCLNIItJMmDBeesNC85bHVp6KUgL5mqiDZhz1nrJ1JOy/6ec - kPw/47Tu/+mntDWIdsGsMy75E46r/O89KgXEMkAseWHicWkhDANmn/XXAmI15ECdey5Et/eY3v/2Q7L/ - Ow4rgvC99sMafBhemH0uwrbnmPWf3mPWP2adCzeGKmDsOWZ1temA8v+mg6r/mw6o/mw+qAF2OooBU0/F - cDQfMP9btVv1Pwi3HbL5MvtcgnbPUbeK2r3a/6v3qAOxxv/avVop6FEONqlshxpj4Rb1yYVbtP8XbtH6 - X7BF43/dHrvflTtNwWyQeNFW7d3Y0gtKLGSs1Z2Uvkb3P5D+n75WC4i1oWzdHxlrDWUIGgBSELNYd1Lk - Qt3/UYugGMiOWaxfhCu1Yk0H/jP1+nym6f33nqr733e63gV8SR1sADMDAy8QywCxEiMDgyoDA4O4SZHa - KutmnbcqvtIRQL4yUE4TiNVAaqBqeeHpACjADsT8QCwMxGIgA4CYm4GBRRRICwLFJIFYAiQHVQNSy050 - SiToBUqyMwC0DXVd1JsDMAAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABqUlE + QVQ4T2P4//8/RRirICkYqyAuvOC89YYF560OLb0UpAUTw1CEC885a71k6knZ/1NOSP6fcVr3//RT2hog + cayK0fGsMy75E46r/O89KgXEMkAseWHicWkhkByKwtln/bWAWA1ZbO65EN3eY3r/2w/J/u84rAjC99oP + a/DB5BGaz0XY9hyz/tN7zPrHrHPhxlBxxp5jVlebDij/bzqo+r/pgOrP5oMaYKfDMJiYeiqGo/mA+d+q + 3ar/QbjtkM2X2ecStHuOulXU7tX+X71HHYg1/tfu1UpB1gw3oGyHGmPhFvXJhVu0/xdu0fpfsEXjf90e + u9+VO03BbJB40Vbt3eiaQRiFk7FWd1L6Gt3/QPp/+lotINaGsnV/ZKw1lEFWC8MYAjGLdSdFLtT9H7UI + ioHsmMX6RejqYBiroP9MvT6faXr/vafq/vedrncBmxoYBhPMDAy8QCwDxEqMDAyqDAwM4iZFaqusm3Xe + qvhKRwD5ykA5TSBWA6mBquVFNoAdiPmBWBiIxUAGADE3AwOLKJAWBIpJArEESA6qBqSWHW4AJRirIPH4 + PwMAtA11XUiD1KEAAAAASUVORK5CYII= - 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 - SUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB2UlE + QVQ4T2P4//8/RRirIAirL3suLD7rvjM2OWSMVdBqzQsRvonX7nL2Xt1qsualEDY1MIwhoD37lhpf5/kH + DA0n/rM0nfrL1XbmG1/nuVMSfRej0NWCMIYAV+3h6wzl+//Dcdk+MM1ee/i/aNvJLnT1KBwQZszbagfE + nxnytv4HYSD7N2P+1q8MuVv+sxbv+C9Uvc8XWT2KZhjmzFirzZi25iNL+ppdDLrf+RiE/3OyZq5XZ0pf + m8tdsGWnaMUOFphauKa5Z9UYF1+wlIbxmaKXazJGro3a+1BCf+8DJTmYOG/qSh2utFVcMD6SAeqM007p + LJh9xiF8161Sbpj41JOKrdNOar1deN5TGSaGjFE4HYdlnbuOaP7vO2b8of+42Y0Jx81vdx/V/Np+WA4o + ZvB25hkvY2T1IIzCAeHavar9VXtU/9eA8F4QVvtfu1cDTDfsM/zefsiOA1k9imYYzt+sk5+zUedx9nqd + /9kbdP4D2f9B7LxNmgnlO9RQ1KJw0DBj5nYznYhF+rPD5uv9TVxr5I5FDcIAZgYGXiCWB2I1INZigGBp + zSiFAs0IuQIgWwIqB1LDi80AViDmAWIBIBYCYmEgFgVq5AFiTigfJAdSw4phAHn4PwMA9XxjpB7NS6oA + AAAASUVORK5CYII= - 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 + boOggwAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAr9JREFUOE+l0llPE1EYBuCvZVEWjSIxssS2KF57AU1qAxjAVBK84W/4A0yMiTcK0UTq - rTF64QoKQqFQoC2WTotAsQuRCi1doNBSSrF2o2Xp5zeDNAYNN57JMzmZmfOemTcDiAj/gxZnOFtbYaHX - 67nndrsekgdHPKR79+mZKzvpNKRTqSzY2d2FVCrFczodhvn5b3gcx+KiNR6PFSSTCTgECwsLMDdnk+r1 - E2gwMMeamNCh0+FoXQ8GIRAIcCAWi0E4HD49Njq6ohwcxCGl8p+UykEcHh7aDAaDZdFkEn5GoxzY39/n - SvR43BcZRt9ObyInnUfIGb3+sd1uv7xNG0Ydi5AMbUByM3QQsLe3B37/2l0KWSUrZDnL6132ECp1NbAe - aN8NhyHysQtSHjekvB6AVZ8P3C7X1empKfyLyYQz1I1J9xmnZk345ess+gz6lmj3uxNpvx9Y4F9bYwOq - qYOMWj2GWRo1aoaVaKmrQUu9GLUjKtTSfUuzdHu+rsa22dudF1b0AiQSCYjH4zBrMrUNKBSMor9/khgV - CoVxoKeH0Uprv4+fK0Zd0zXU3WxATUkhTjfXGyNGhh+ZNABkMhlOKBQS03e/drmWush7jtfz1r3kVGvb - WrGvrAT7yktwXNaoSfpW8jJUPNsfRCI/aPFGuc1qjVnMZvyT1WZDM/XwQdaILy+cxRekp0EyuWE1F2fY - PzhDAbQr0G5iA8OgjsrKop9mfHQEn0lq8cmZQnzeWI+vbrWgvPQUvrkunVkaU+VbR1QAgspKkIjF8FQu - 7xmholSq4QM0H+r7hJ2SGpRLxagaGsRHHR3q2+XnmTuCCruwqLCYDweDR07yebxSCpNcEgiaqgSCGyKB - QFYlEsmEFRUckVDYyOfzqwpyc6qL8nJF3BqAHDrYM7Bhh4G/c7ngw+vsnB35JJfdlNbkEN4vq9aD+Ljn - 2EYAAAAASUVORK5CYII= + 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 - DACGQgAAAABJRU5ErkJggg== + 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 @@ -1027,376 +1018,372 @@ - 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 - SUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB2UlE + QVQ4T2P4//8/RRirIAirL3suLD7rvjM2OWSMVdBqzQsRvonX7nL2Xt1qsualEDY1MIwhoD37lhpf5/kH + DA0n/rM0nfrL1XbmG1/nuVMSfRej0NWCMIYAV+3h6wzl+//Dcdk+MM1ee/i/aNvJLnT1KBwQZszbagfE + nxnytv4HYSD7N2P+1q8MuVv+sxbv+C9Uvc8XWT2KZhjmzFirzZi25iNL+ppdDLrf+RiE/3OyZq5XZ0pf + m8tdsGWnaMUOFphauKa5Z9UYF1+wlIbxmaKXazJGro3a+1BCf+8DJTmYOG/qSh2utFVcMD6SAeqM007p + LJh9xiF8161Sbpj41JOKrdNOar1deN5TGSaGjFE4HYdlnbuOaP7vO2b8of+42Y0Jx81vdx/V/Np+WA4o + ZvB25hkvY2T1IIzCAeHavar9VXtU/9eA8F4QVvtfu1cDTDfsM/zefsiOA1k9imYYzt+sk5+zUedx9nqd + /9kbdP4D2f9B7LxNmgnlO9RQ1KJw0DBj5nYznYhF+rPD5uv9TVxr5I5FDcIAZgYGXiCWB2I1INZigGBp + zSiFAs0IuQIgWwIqB1LDi80AViDmAWIBIBYCYmEgFgVq5AFiTigfJAdSw4phAHn4PwMA9XxjpB7NS6oA + AAAASUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAaFJREFUOE9j+P//PwMlmCLNIItJMmDBeesNC85bHVp6KUgL5mqiDZhz1nrJ1JOy/6ec - kPw/47Tu/+mntDWIdsGsMy75E46r/O89KgXEMkAseWHicWkhDANmn/XXAmI15ECdey5Et/eY3v/2Q7L/ - Ow4rgvC99sMafBhemH0uwrbnmPWf3mPWP2adCzeGKmDsOWZ1temA8v+mg6r/mw6o/mw+qAF2OooBU0/F - cDQfMP9btVv1Pwi3HbL5MvtcgnbPUbeK2r3a/6v3qAOxxv/avVop6FEONqlshxpj4Rb1yYVbtP8XbtH6 - X7BF43/dHrvflTtNwWyQeNFW7d3Y0gtKLGSs1Z2Uvkb3P5D+n75WC4i1oWzdHxlrDWUIGgBSELNYd1Lk - Qt3/UYugGMiOWaxfhCu1Yk0H/jP1+nym6f33nqr733e63gV8SR1sADMDAy8QywCxEiMDgyoDA4O4SZHa - KutmnbcqvtIRQL4yUE4TiNVAaqBqeeHpACjADsT8QCwMxGIgA4CYm4GBRRRICwLFJIFYAiQHVQNSy050 - SiToBUqyMwC0DXVd1JsDMAAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAABqUlE + QVQ4T2P4//8/RRirICkYqyAuvOC89YYF560OLb0UpAUTw1CEC885a71k6knZ/1NOSP6fcVr3//RT2hog + cayK0fGsMy75E46r/O89KgXEMkAseWHicWkhkByKwtln/bWAWA1ZbO65EN3eY3r/2w/J/u84rAjC99oP + a/DB5BGaz0XY9hyz/tN7zPrHrHPhxlBxxp5jVlebDij/bzqo+r/pgOrP5oMaYKfDMJiYeiqGo/mA+d+q + 3ar/QbjtkM2X2ecStHuOulXU7tX+X71HHYg1/tfu1UpB1gw3oGyHGmPhFvXJhVu0/xdu0fpfsEXjf90e + u9+VO03BbJB40Vbt3eiaQRiFk7FWd1L6Gt3/QPp/+lotINaGsnV/ZKw1lEFWC8MYAjGLdSdFLtT9H7UI + ioHsmMX6RejqYBiroP9MvT6faXr/vafq/vedrncBmxoYBhPMDAy8QCwDxEqMDAyqDAwM4iZFaqusm3Xe + qvhKRwD5ykA5TSBWA6mBquVFNoAdiPmBWBiIxUAGADE3AwOLKJAWBIpJArEESA6qBqSWHW4AJRirIPH4 + PwMAtA11XUiD1KEAAAAASUVORK5CYII= - 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 + 2VGpi7MAAAAASUVORK5CYII= - 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 + SUVORK5CYII= - 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 + boOggwAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAr9JREFUOE+l0llPE1EYBuCvZVEWjSIxssS2KF57AU1qAxjAVBK84W/4A0yMiTcK0UTq - rTF64QoKQqFQoC2WTotAsQuRCi1doNBSSrF2o2Xp5zeDNAYNN57JMzmZmfOemTcDiAj/gxZnOFtbYaHX - 67nndrsekgdHPKR79+mZKzvpNKRTqSzY2d2FVCrFczodhvn5b3gcx+KiNR6PFSSTCTgECwsLMDdnk+r1 - E2gwMMeamNCh0+FoXQ8GIRAIcCAWi0E4HD49Njq6ohwcxCGl8p+UykEcHh7aDAaDZdFkEn5GoxzY39/n - SvR43BcZRt9ObyInnUfIGb3+sd1uv7xNG0Ydi5AMbUByM3QQsLe3B37/2l0KWSUrZDnL6132ECp1NbAe - aN8NhyHysQtSHjekvB6AVZ8P3C7X1empKfyLyYQz1I1J9xmnZk345ess+gz6lmj3uxNpvx9Y4F9bYwOq - qYOMWj2GWRo1aoaVaKmrQUu9GLUjKtTSfUuzdHu+rsa22dudF1b0AiQSCYjH4zBrMrUNKBSMor9/khgV - CoVxoKeH0Uprv4+fK0Zd0zXU3WxATUkhTjfXGyNGhh+ZNABkMhlOKBQS03e/drmWush7jtfz1r3kVGvb - WrGvrAT7yktwXNaoSfpW8jJUPNsfRCI/aPFGuc1qjVnMZvyT1WZDM/XwQdaILy+cxRekp0EyuWE1F2fY - PzhDAbQr0G5iA8OgjsrKop9mfHQEn0lq8cmZQnzeWI+vbrWgvPQUvrkunVkaU+VbR1QAgspKkIjF8FQu - 7xmholSq4QM0H+r7hJ2SGpRLxagaGsRHHR3q2+XnmTuCCruwqLCYDweDR07yebxSCpNcEgiaqgSCGyKB - QFYlEsmEFRUckVDYyOfzqwpyc6qL8nJF3BqAHDrYM7Bhh4G/c7ngw+vsnB35JJfdlNbkEN4vq9aD+Ljn - 2EYAAAAASUVORK5CYII= + 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 - DACGQgAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAACQ0lE + QVQ4T6WSb0gTYRzHHzcaSmltU5zQKFMSiuhNb/RdWHQNkUqo972UoFZve+dLk4iYe7EclM0NaxFYK0Ho + RdmkLFyzF7HFbju3eX+22+1WIxS+Pbd/nTh6UQcf7vf87vl++N1zRwD8FzsWgsCPiaJwi+KURNGZz+Wc + bCJx3evxtOv36WkUm5vZQUkSUSjIDVS1iHg8Bve0KxLwz3Xog3UahcDzDkmSauECFIpaLCKVTGLqziSm + Xa7ItfFxsz6s8Ucg8IwmkOU8CnJVUoHWK+EwXoVe4v3yu3CppLb8RSBCzuephApqKIqCcvknpaxNJ7Js + wthUQM+gIqi/gnZXSiUUt7YqIk2aK8icPqzRKDKZNEOnqIUpRQVyKgn+9QsUt7eh/ChB4pL574PHh5sK + NjiOoVNUz4AKtMDXy6NYaSNIzz2qTLR+8TxWe234fOoYs0uQZFkmk05DO8hcLgdZVRHzehCy7sNSbw+W + h4ew2NWBpX77p7dHD/fsEsRjMYZLpSAIAkRRBP2RoNIH3x4/hN+yF/M2C56fGMjTVvOvEFlbc1AJeJ6H + SCXaJFmOQ/DCCNx0CndnO2aOHPz1oP/Q1aaCL5HI0Ho0CpZlwdFglkoCV8YwYSKYvTSKN677uNtnx5Td + hnt99rM7BEZC9nRZrd0zHs+k3+d7GvD7g88WFoITI47FG50Hoj6v90now8f522dOz97sNq+es+w/aSDE + pBe0EELa6tYBuqB3rWckrebWysbqRXsGmiUmmjFU+vXQvwHyG1/U3xx5lIfAAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAetJREFUOE9j+P//PwMlGEXzfQdj37t2Bs24DLxnZ5B5z96oEFkebsAtV7OIKwaq/y9p - Kfy/bqW7Bd2QG3YGjZd1lf9f1lH6f8PesPf/wZmMIDVgA656WHGd1lH+f1xRGoxPqcv9v2iJMOSyrUHj - aW0loJwUGJ/SVPx/3kzbFG7ATk4uxgOK0j0HlGX+gzFQ0SE1uf9nLHVXnLM3rDmqrfh/P1AMLq8kvf+A - rAQ33ACYc3cqy/TuUJL+vxOIdyhI/d8DdMk+LcX/2xUkIWIQuf1LNBVZYHowYmAj0JANQIVgDLR1PdAg - GH+jkvTe+doqrFgDEVlwhZL08RXAsEDD7zaZGsBtxumCBYrSDQsVpP4A8X90vEBRaiN67KB4YYaidONM - oEYYngFkgzCqmPSW/0+/w/WBGRNU5RkmKkg1TJSX+g/DE0BsBenNkxSku8BsZKwgtWWSihwHPBZ61RS4 - OuUl/6Ph/bX6qkwgRV0KUr0daPJditJmKNHYoSSb2AS0pUlO8j+Q3vctwBusGYab5aW6wXJA3KIoM/2x - sxVYnoGZAYwFgBRvnKRofba02BZuFmYDIF8HKG4MwkA2iK+QIik6N1NafCGQLQLEfHAXABUxAzHYT2BB - BgZOIJ8XGQPFeJDk2UB6MFIiOdkaALyqHwCXXFYvAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB7UlE + QVQ4T6WQQUgbQRSG18YWjbV4UNudicnMxiiahK4VAwaaFEqhUAoeeyoIXsSTd0WjHmzagHpRD1KFHnKr + 0UANWJMWiqBFaWOpFNSDePWol8Lzzeisu3vUw7fz3v+/98/uagBwKxzN0bPO1wcJc9yu2TlMmP2HySeD + ds0q/r2IvdkzQ/C7ncHfeDRvHxLsJ8xUORqEcsSA/WRHBr7NVwhdmn9exr3bkSBscirZavXDr+7rkPJT + M7UdNtAjkq02DruxcJcVUKj2VpQ4/VAK+kCCQ99b/PCzO5rdSXYM/QhzKKJm+QYtlpoe1VgBikLQl1kz + KBSQNUZgHd9ko53DF6Zfapde8VMbr1Q7jgBBDkOWcVCCt37GINXnDPr1Y7j5rn3esazIGnQzi//CxelK + l2ndrHA0gkVOR5cY+Y+Am0VOcu55RzPHaWoeBxVzVzg1moeTc2fAVCigTTMyOh0goJgSJ6OrM4ymZW2H + kfxMs7/KCsi0MO+7gA4uisOPQ3eEn2YkM+ny05zGrADBpNHUO4bpY34d8Nw463kllxXjAfJeesgE980e + P49LX/Nokjo8at/qDSMDtDFfU+kxsY+g3inAWvSsT29Y6KcPl7CuRx7IAPHAIQ8iv0mKmlaNfa0d1O7b + /HuoeWStxJsB2gW8qh8AcaOVUQAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAArpJREFUOE+l0ltIU3EYAPBvmnSjIKmGpm55e+gh6mWgPSwTkcAgesmHnop6qF6CIIku - D6WBoIuM6CW67CGFom3nbNNNazdlNpvTvOziNnNzc27zds7mpnNf/7NwiIQ99MHvf+B//t/3nfOdA4gI - /4MkpzMWFqLC6WnvA4/H3Uw83aaZ3HtMzlSuJZOQTCSyYG19HRKJBM/lcprGx8dwJ06Hw8ayzN54PAab - wG63w+joyBmDQY8mk3FHer0OXU5nw1woBMFgMAMYhoFoNHpQ09MzQ1MUKmn6r2iaQpVKGZkPhQtYJgHL - yysZsLGxkRmi1+spMRoNLeRJJET7NhKjwdA6OTFZvsKGwLcwAMvxIDDx8J8CqVQKAoHZ+6SIn5ghfm1H - huoPzUVawqwVhoNtsLg6BUzSB+D3+cDjdp8aNJvxXyzmUTQ52pssgWfF7FoQVtejAIHZWa5ABZlBWqvV - 4Fa92l7kcHt9Gj1Sulf4wszHl4PCRaXjar7aeR0gFosBy7IwZLFcUsjlRrlMNkD0U3LaIKM7/TKqM0LL - 1MMKZZe/vf8kPtEdQoX9ZpMrqgJHRAGQTqczwuGwiLy31O2e6vS4vR9/Or9/aDVVe9v6awIO19iX90M3 - 7Pd6j+A72xXp5s+XSicBlpYWSfJ84YjNxgxbrcixWW04+MOAD9VivEUJ8ZFWjHeUJ/AudRr94anq1UQc - LjSch0L+UeA+H5CuIpPRiDrdtyyj3oSar0q83XUWG6UVeFlahm+1rTgx4qirEYshG4KiIqgSieC5RPKp - u1uNarUqS9OtRRn9GRtf1+K1NxexQ9LRV8Dn55PkA7kAeQSPK8Qte3J4vMOkWFWZQFBbKhDUHRcI6jnl - wtL64pKi+sJj/HN5ubvKyOFKkigg9hM5QBZODrlwtgZXeHM/04kE13UfsZvL4XJ/A8c7gSZJaQpPAAAA - AElFTkSuQmCC + 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 - SUVORK5CYII= + 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 - MT43FSuDAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAKeklE + QVRoQ9WYeVCU9xnHMerUatIabVFg2fs+YXdZLrkEFaPG+0Crxmqnmdipja1pUm9jjUdQ44UkKgoaFZVD + VPAARS4BDxRFFEGNnfEYM6bpNJlJo79+n63bvvvub0Fj84fOfNR93t/zfb7P7/e877sQwBh7qeEGXya4 + wZcJbvBFuDkoNajF5YxrlgSNbOr52hiiWSl/szU+3vW3tF+9zst5EbjB56TrtWjX4Ksm7YZrVt2FFpfp + H21JDtY2IEKAi7UmhLMWp/Fhs1lTddWoXdKSGB/J0XpuuMFn4cH69d2v2Eyzm0yqqy3xYezWiHh2e9JA + dnt8Mrs5MoG1DY9jrW/EsNahMe7/3xyVwG5PSGFfTBzAbg6LZddjLOyKXlFx2WJI4+k/K9xgR1x2ho9v + NCpvtCQ72W0yNCaJNfezskajgl2UB7EGaR92kcMlZQi7bFGx6/0d7BYapWavx9mQp6poSoiL5tXqCG7Q + H/dXrXr1gkG1synSxG7B+A3s5CWTgp0PDWTnZX3ZBRhsUEva5YIymJ2X9gV9WGO4lrWhedqAy2HaJw1W + 40Je3fbgBnlcmzJZdk6vbLiGeW7DzjVY1axeEsjOwtA5GPshnFUEsfpQNBJlYjcxfk2xVnbWqN2Del3E + 9f3BDYppnvaWrN6gam3BjjcPjma12MFajEodTNSpXhzSq4fWjdFJrAnjVW/UFj++86Arz4sYblBI6+JF + P681aa5cw83YmGhnVdj1M0oJO4PCXDBGNYpgEPLfmPszxYHXWgG0pjq0L2seEsuuJNnZGZNuN8+PGG5Q + SI1ZX3AlxckuJdhZBcxXo5hf1KHf1+jkd85YdUfqnNZl9VH2WfUu2+w6p2XNGbOmHNe+qsK6KowdNx8N + VmCkruLp1YCnVI3dNo/nSQg36KHa5fjN+SgLa0xxsVOSPqwCRfxxmnbQZrj6sKiwF0+LaJw4Jqguyj6z + yqS+XkFmCbEOYuWyINaEk6gN1z+uHYBHHUfLAzdIXJozp3d1uO7LxtQodhLzfkoV0jHY2SqHmY6+k1hP + yBc7s3tUu2wrTmlC3TlinZO4uSv0MtY4yMUqbfpq2OTqENwgUe6wrjiXEMYq8dwuRQNlEO4Q7F4ZFXeY + D0Cjs1hTTHVidFqZWvKvMjQh1jqOUarF06kOo1QRFzOCl09wg/Vvv9Or0mF4VIeXUwmETsDY8ecBDZc7 + LXnQavckiOrk+PEnMDrHMYJinWPQOYu3fHmYoZqXS3CDpdERM2rQeRnerCXyYHYUYs9LCZ2aw7IPeh2e + xKkYZzqtF2sU4/F62q5jlZGmJ+VDh4bxcn0CxMlI26GKCAM7jJvpCIS8wE65Ecd5wNQJu5lO4hVxDSHf + PnrU7ZhJfesw1os1inE6VdEmVhppX8TL9QlUvjun18kI05fHLUp2EA0cgogXasl3R4yqfxbJ+/pe41AE + U8cirPuh3W4TpfFRfyjCxojzyUOZTc3KXNZyXp5P4GhyoqPUaWRFeEIcJAEBhTBz2KypqZ0+xVGkV9wr + RBPiNTxoXcl/bmy/TVyc/35wkVb2zUE0IcwtQM1ijHKpy/ygeu6CnuI8rw/EsaTYySVWDctHcj7epkLy + qAG7eSOtq5g0zlyoV947gC9x4nVccC8dtlvoJPx+zzlk1VfmYcfFuQUYo2KblpWk9LeJc7w+EMWxEfML + tFK2Tx7C9iNZzJF+kdM9a09PnWTJN6ju7kMTvLU+wFyRw+r36XTQZsygNbzcQxY1Q60ocY7XB+JQZNiq + PJ2M7cWO5SLRC3wHOjZkYKpw/ckJo0379aq7e9GEz3oOe2GwINxMJ+HzdMq3GVbkcuruxWbm6xVsv0oS + I87x+kAURFg+3osXyW7Mog8Yq6PDBg0U55RNGG3J1Svu70YTe1CQmysE6/Ls7nvC6yQO2AzLd2NMxev3 + gFyM0R5lSMcN5EWGL9qJBB67QGF81BRxDlE2Nc28x6C8myPr417Hy/eCxs5h8Xpj59r0G3aiAd560tyt + V3Q8QvmJMb/Ohkg2EnxAPNduThfneDg+ebxll155dwd+2uLmi0ETe8NNdE+48/fY9KXcXNTNUYeywgEJ + 4cJ6hNcHojA1OXqHKpRtx6xuxzwKycLXil1mbY04R0jx2FGWHL3yfha+24vzeWThbft5mPHz67uyg7M1 + sodZnLrkJVsrf3RuxbJfiut5fSBqFs8PzNLIvt6CpK1I9gKxbarQxyVT0iziPCFHJo61btcp721Bwz4a + HLagiRyLvm2bIuR7f9ezTfyN8wkQ26360kwU/xTJYjKpmMOSzcsTUjx1knmrTnnXn44Y0uXF3eDaTlfY + Kl4dnwCxKy5q9mbs9mYk+4B4plLyJH/UsH68XCH5o4ebP8PLLgMGuFrPCOqxwnGjYnk1fAJEyczfBm/W + SL/ZCLObICBmI+2WXnn79Nz3gnj5QgonjrVkYpw2IIen1RHuWkZ1I7S4X0N8Ah62Omxb1uFGXA+R9TIR + iK2DcIZedeHo796R8PKFFE5Os2zC08mvXgfkJMVN4+kS3CBxdPYs+Xq17Nu1KPoJRHjQtQ06xc3slMQB + PA0huaNHmjZoFHfa0xOzBj+HbzRqriLf769YuEEPn8U456fjJlyNUfIHXV+Dt+8mm3FHVlI/F0/HQ8m7 + v3d8gidcOk6PpyXEvQanlZOaMpin5YEbFNBlnVlbs1ISyFZB1C8othKNpCskbK1OcXa9zbAuI9I+/dNY + 15jMaOfYDFf4TOhkrdbILnwsD/6OqyFiZWggy3Da3N9824MbFLJvxlRpulZx/yM0sQLC7bGcQCPL0ZDP + NcTc10RxHlRrrVl7GvU7/O0cNygmZ/TwiJUa2aO/wsBHVOBHhGqkGzUNh/78p948L2K4QR7bR70ZuVwj + v7sEN9ZSadCPwofQXmnUVB2e+/4veB54cIP+2Dlxgny5UXNqMZ4kblD0/8EiGF+Mp84qm3Hbw9bWbrza + /uAGO6DTalf4B0tU0q8XoPACNLIQJn4I7lywVKto25AQM4FTq0Pcf3UOCPDwCugCuoKfgG6gO+gBXgU/ + w7IelPPesDfCFlqNWxcqpX9fgBt0Hoy4gTG/eNZQ49jxBWrZnYV267JZ48a6X4b48xrVeFqLalJt8kBe + yBN5I49uv8IGOgNKCgQyoAZ6YAY2EA4cIAK4OgUERCHfBi19P61m2Nsm/do5WmX9X1TSr+bix795uBnn + waCQufQvHrMfqKQP/qhTlU0z6hZr5fIk6GiB4xVokvbTGlSLalJt8kBeyBN5I4/k1f2DkKcB6qwnkAJa + bAUkQoLRoB+IBwkgEfQHyWgkGcXjgDPgp91jDZKQEakK2cypOvWKt+SSTdNkIZnTZJLMaQrpxslG7dL+ + cukMRVDQkIBOnWkDXID0UkjrqSZpU4xqUU2qTR7IC3kib+SRvLp/uyEcIToFOi46OjrG10FvQB33AUEg + BEgAidBuyIECKCGhAFIQAgI59AESIEPjSsp5mksapEWapE01qBbVpNrkgbyQJ/JGHsnr/0aoPWjhUzoJ + oDkkSEgInaQQmlvP7AoR53n0hDXcdXmehHCDLxPc4MsEN/jywAL+DQnlMT7aSrviAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAcBQAA - HAUBcp3f/AAAEsJJREFUeF7tWglYVEe2zrzM8t7Mm2SMUdl6b5Zu9q3ZQRBoUJBVQUBU3JeYxHVAY3Q0 - Ku77kqhJxAVlUUDcSDPuijEaxX03mRhNMsmL8fkyL5oz/ym6sRtwa/T7Zr54P/7vcm9VnTrnr1PnVN3q - F4johV8yftHG88A/J+CX7P7PPeD5FHgeA54HwedZ4HkWeLKV4IvjC/7s0TMrMyYzPU2fldEtNjszQ5+T - lanPzeqh75Wdpe/dM1ufl5ujz+udq+/bp7e+f14f/YC8PP3Afn31g/r30w8Z2F8/dNBA/bBBg/TDBhuB - //kdl3EdrsttuC3LYFksk2VzH7nZPUSf3DfrwLr07JERO3bUSG8M6G+fZFAfewr0zs3p30UfczwuOur/ - 42I6UXxMNOGZEuL0lNg5jpK6xFNyYhdK7ZpAaUmJlJ6cRN1SkykjLZUyu6VTj+7dKDsjg3J6ZBLIol7Z - 2dQrxwj8z++4jOtwXW7DbVkGy2KZLJv74L64T+6bdWBd4qETdLvbOTb6DAh6/QVcj0PE41T6Tfe0lLWh - gQEU4OtNQTpfigwLIX2nKIqPjqLOsTEU3TGcosJDKToygrpCsZTEBCibSClAQjwUjddD8QRhWFZGdxja - YGT31BQYmCKM5Xdcxu+TYSi3YaTgfyEL7Vl2TFSE6KsT+jQZzrqwTkE6P6FjSKCOCas8fuzT3z+KhEcS - kJ3RfV4IBLMhQwcPFODRiO4YIViPRed5vXJp1Juv0+uvDRXKJiV0EQqnpyTTqBFv0rj8sfT6sKFiRLMz - 2ch0GtCvL02c8BZNAgb37ydIQF8EsglTQ7QZM3KEeGZZyZDJGD50CI1EX/3zepMeA8A6sC7sGZhGAtx/ - MHTOSEv5sFUEjHrzDS9mNsDHiw4e2A9ZDdfHh+soIiSIOoYGE+Yi/fDDD41ly5cuoaiIMIqN6kiLFsxv - fP+Pf/xIb7w2TBCUntyV6g4dbCw7WV9PGempILYrIQbQ7dv35X2wapWQxSM+s3A6/fzzz6Ldj5A3oG8f - oUNIgD/tqq29L+/ECeJBYx2HDxsS8TASHuoBUKqQmQwLCqCrVy43dnD50iXqFBFOoXC1IQMGNL7nf8pK - S6gjSOPy4nXrLMrGF+Rj7sYLt7944UJj2Y0bN4RnJHXpTCNfH27RZktllRhhlrlqxXsWZaPhISEBOgoL - DqCTMNp03bx5gzphmgT6+VBactcVVhMQHxu9lY0M8velc2fPNHZw4fx5wXx4cCD1693LQql1a4qgbDBG - LIx49MwvdumuCGDsBWdOn24s+tvnn8PVU4XrsvubX2UlGwWZ7IlLFy2yKBs+dLAYHPaAY8eONpZ98cXf - hG5chnZ7rSYAblfLQtgLBvXvS+8uW0rvLV8u5mFkKAfCSDEHp70zhT58f5UoR5pCZI4VUZqj/Ip3l9Ha - oiJaMG8u3DxNGMqunj92DDFZ69euoQnjxmGkkkQZR/3ZM2eINjziTLAIiIj4SHm0dMki0desGYUiA8RC - h47QZfCA/vTuUtZvmdCPdeYpgAHc1xoCDA0sBgt38tC6kKuzI/l5eQgPiAwLFRFZ5+NN/t6epEME5vnP - maFLXKzIFOFBgRiNIFGPXVxkCBAQjzpRGFlGHNIYZwz2jG4InCKwIaM0BFqkW8gS2Sayo9DDHzFJ9AWZ - UeFhwjt0eOfm4iR0DPD1avTQsCDdHusJiAgTBLCxwUh/3GGPbmlAOmUhkmdjRHIyM6inKbfnZBEWK9Qn - N4fycntS39651L9PH0TsPghYeTSQgejP4GBnDh7BPsgmPNpMEOd+Np6zQG94Uk/TOgH9mdIlFkAc6RvS - KYjrDu/phAHgKWuaovCAVkwBEMAxgFnPhOH1x4/T37/5hr7+6qunjm++/pq+Boo+/EC4e1x0J/rLxAl0 - 7dpVuokgeePLL5vj+nW8A/gOfHXzJp1CRslFZuL1AAfH1hEQHioI8HZ3pdKNG0SQuXfvnkhFTx2Qffen - n+jW99+LNQICcEPg5bTHf036NL3nMr5ENWOK3L61mnw93UUQDA3wt94D4PIGCBDCtlRW0N27d8XIXwfb - Xz4D3Lp1SxDw2pDBYrnL6fbOnTuir+tffPFI3IQH/AQSd/+1Fl6LFSF0B1pHAAthAjaVldJ3335LVy5f - pmtXrz51XL1yhT67dk24+9CBA0UW4VTJhnPZ4/TJuvFU+mjnDhEIGwjws54ARFcDpxNfDzdMgY1COR6V - Z4bLV+jzzz6jyd2701K477kEPZ3zcKazWiWd83GlC5lpdGHGdLqwfQddunixRbC3bN+6VWQFJgD6W08A - IqkgwMfdjTYWrxejcf7cuWeCc/v309npU+lCz3Q6HR9MlxND6GpqBF1LjwIi6Vq3SLqaEkFXu4bS5dQY - Ote7B52dP5fOf3LUQh9eVFVvqSId0jJnLmQE6wmICAk2BPn7gABXWr9ujRgddsunCmSWk+ML6HxMEF1J - DqMrMPpCtB+d9nWhkxoZ1TtJqF7tQPXOUjzL6YxOSxf0OrqS1pEuJ4TQWX0YnZo1s1EnniqVFRViXcLp - EPq3hoAgQxBSIGeBNauL6DLmWD3W3E8LJzZtovrEGLqEUb0I1Hs50lGpDR2VdKBjCls6prSnYyp7+hTg - u3iW29JRh/bifkqnocsp4XQxPpBOZKVT/Z69YlpsLi8DAR5sPKfw1hAQaOBo6u2mwfLzfeI9wKfHjj0V - HFu1kk5G+NIljPgJfy0dlrSnj2HUJxjtx8XHMhv6WNqBToV50iUQcTw6jM7s2EG8f/BD4A70BQG+XtYT - EB4cYOCtsCcIeH/lCjp75jR9cuRIq3EEa/kToV50HqN+GAYfxIjX4V6nagKMeJ0FWqiDNgft29MRVyVd - SA6nTyODaPOixSJzBWIxhGxgPQFhgTqDzseTPLUabGreJd631x061CocgtsfDdfR2c5BdEBmRwfkdnSQ - jTAHjD4Alz+EDFDXKYzq4qLoUMdgOqhV4b0DHVA0aQPy9ktt6ZCjlM4mBNMBeEII702gO2KB9QRgFWjg - YOKJDcZy7LTY/ffv22c9MEfrkuLppD6A9sLIvQp72geDLID3e1yUNCoynAxYexyuqxP9HWBsKqeDs2fS - gYS4hjaoa952j8yWDmgUdDI2gOZ7aEUmaBUBWEQY/LzcyUPjJPbiR+D+e3bvth6TJ8FFfWm/q4Jqoewu - jHJL2A3jFvl70fZt2+gA0mNLfe6bPYN2e7rQLnjDfRkOZODphAxyNNyLeoAA6G+9B+CzkoGDiTsI4M9b - h+D+tQaDdaiupoOxoVQXoKUaBLxaGP9QwDADFj779uyhv+JzV0vYjbVJbYA3GVDXXFYNSDgS6kFF/h5Y - xLWCAORRA68CeZ89f94c4Yo1O3daBcM7k6ku2J1qMLo1ULgG7vso7ERWqM3JpI9qah7Yp2HNaqrRqmmn - mcydiCu1LnI6FOROWV4ex63+HoAUaOA1gKuTmubMmkW7d+2ibVhmWoNdPVJpj48TVSPPb4fxJmyD4ubP - zf5nw3IyxHR4EGomjKemcrain71+LjTb3+O61QQghRi83LSkdVLRrMJCMsD9t1RVPTnWr6ddYT60Hau6 - LTCoGgQwxP9OMtpifDa9b3ZHvW09Mx/YbzV02hbiD3m2jbKr4D07EWtK/d3/90hVzYsPIuGhX4UDfDwN - Xq4aEKCkwmlTaQc2IZuRxp4UVQvmUY2XE1XAkEoYa46tUyZRVbdkqoDCTcvMn7ntFpBQsXlzi9jy2mCq - NJPP9auUDrTdT3Nve2SEyioCdN4eBk6BGrWSpk6ZTFu3VOOzd+kTo2p8PlUjPZUj729C6hPAPN2sUdIm - fDovLymhis6xKLe9X26qZ3YvR5uKnj2ovKysGSrnz6PNKolFe65f7aqi7cH+kVYRgI+fBs4ALioFTfkL - RqqykjZu2PDE2Dx0EJWrJbQRCpXAIAb/XxYSQCXFxUJeKSJ6eXw0bQQJpjot3tGuHCQ01aN05UoqdZJT - SZM+KlwUVKFVdraKACwnDW74CuyslBsJqHpi41nRTQPyqATRf4PcnjbAeEYxXL40OsJCXhnIKIvrRMUg - wVSv6b0Yrl0MI0tzLUkowfJ6I7LBBpTd7wOEg/hStUMXqwjw8XA1uDqryUkhE1OgCqc01nhA6eB+tBaK - m2MNCCgO01GJmUeV4KNLJabYUh83WoONTtM2959taS3al/TOadSHPWAdAiq/N2+3Dv2uUztY5wHe7lqD - KzKASmpPbxUUUE3NR1RqRQwoyx9DRVCsCMo0As9rNCraVLRaxBSWy8G1YnMFJeMcYK6rE32InZ5FG7P2 - qzHSRezueb1E+/JFC6kIXtasPoJuaaB3lFUe4OWmMWgRAJ2VMnEOuASdbMTX4fUIXE+CYhxqfgC3fx8K - m4PfbcDymGVtQKrcgCnAJ8yeyDzB2M8v9nGnVcjnTds1PmOqfACZ6xBj1g8bTKvwbFEXzytUknuViXGO - VhHg6epi4ADIXsDTgKcD9gcN0PnzJ2dBTBh+OxCOb3h8HmcCH0uZTpATI0LpXUcZrWCFoHAjYNwULzdx - zBaFUybsPsWym1efvAQPBmZrneg91LNoZy4DMlfys1raTD63m+esvPP5vl2/tooAD62zgQMgL4Rkdh2o - 3Z/+SG1f+gPZd3hVpEaGi1pBdu1eoQ5tXybbtm1AlJTcsXR21ziTs0pO9u3borwtTXRW0DIotBzKmmMZ - vKCTi1rsOEG4+PqkxJTj/mR2NhTgrqFCjbrFthayQEQz2ehvrJvzl1avBN1dHGudlFJSONjhZCiV5s6e - RXPx/Y2PwtQyifAMzhJjR4+khTj8nFU4TfxaROOoFMtnPrObOX0aNlLzaHZuNi2BkktBgDmWQMn53q7k - C+PZ9Rn5o0c1tJlZKA5gg0DKdMSLxajbtP0Dn7kvkNvV1eWk1QTgY2g1j4Yco8FHTqbr9KlTYpSktu1x - aBltcWS9eOECMeoSm3Y0BwaYrh9vfU/zMZIL8eFiIRZEFsC78fACLWJNU3kr3ltOkg7tyAOEL/L3pgUS - m+btm8rjZ5A1Ed8VtI5K6w9HcTI0jY1nD7iI74Gm69y5s+QolwhDkxM5w9y/VkJhu1dfIXu4/RKzX4hw - jXx9NM2DAfOgYDNA4QlqGeV1ibOQV7T6Q/TzKtm2a0Nzpk6h0u5pNA+EtSijUS7K4WkxjgrEJh3/quKB - S/6H7gX69enlgQzws+2rbbAd3dGoGP8chUdfCnI46H2LEyO++Nxw0tvjRUxwQJwoGDNaHKfxdfv2bUrA - ef7bTgqahf36bLhoU4j3cNvqkW/QF0cO053/+U789oBlMdmj8YOI4+vX0hwYNxuEtSSD37Gc17AqVMsc - +JcnYVYTwA3xU5NZ7M4eCGxJGB0+s8MCSawNOMhxJxzt+YdTifGxImBqEBg1YJ9jRCKOu7unJInY4IL6 - UfjAWqhwoEIoOQPKNkUhDGPMgJFTsVfIx0ZsLEgrgEHvYK0/g8taaGd6Nx1yJyPgaqBfeEjgyocZz2Ut - esCL+I0dA9evUOlFfBlazSS0b/MSdXjlZRGheQo4yqUiPcrgDaZ5z1mAUydnB84gXFeCcp5GHBwxJykJ - kX06RnoqlJ0GYx4IGDutKR5Sn+VNxg7QX+7AX4TLcd78uyciwGj4i7j/J/AS8ApI+JM+rksb5Ps3tY6q - ehj1f7wwYkP5zka6qOXGUUdqxMizkbyFZm9g8PrBDeB7AxwpBV40BZ4w2aEDTcGcbi1YzkSVlKJdna+F - BvoXJCWltoXuL7MNRlvYpmbfBSw8ABV+ZTT+VdzlgDPgAUGegJODnZ3O39s7y1mlHKGSSkar5NLRarlk - DO5j1XLZn9VyqRGyfLUCkEsBWb6jQlZgCXmBWiEfl+quXfm2WvbdRATGSRjpSSDiiYG23H68s+pat+DA - MXKJNJB1BTxYd6MNMtzZpt+xjeZe8SACmDUHQA1oAXfAB0IZ7oCb8c7EeBnBZb5G+OHuD+iM9wDcGfxs - +j8I/we6dGgfO1whKSqQ2Pz9LRjyFkiY8BjgeqK+wv7bEc6qxfY2NqwH6+YNXRmsM+vONrAtbFOzKdEs - BqDSfwC/BX4P/BFoA7QF2gE2gJ1RoAR3ZpY9haEEVMYOHXF3MgN7kgZwMd75f1bOzXjX+rVpEzrEwWbu - WJndpQKkswIYyBgHI00ASTQO7/Kltj+NktjsGSq1eztGrfCFDNbFHrA16si6ss6sO09ltuU3gMXoPzII - cgMjmBTGr83AApkodiueXyb8l7HDP+BuDibzvwG+PxBqpaLNQDdN3HCV/I03pbYTxiglq4FNYxSS1SOk - tuNGOiv7DdY6+Rj7475ZB9bFXDeTvkL/VqXBR0VRLkcnzfA47f4V6jzyx9L/Cko+Sx2eE/As2f13kP3c - A/4dRulZ6viL94B/Ats5qpO8uFdBAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABwFAAAcBQFynd/8AAAS90lE + QVR4XuWaB3RVZbbHneeU92be6CBS0m7aTbvp7aYnJCS5CRBSKAktQOhFLLQhIMKAdAQUQRRQCTWEEiC0 + eDOAtCiC9N50LKiDz/J8zhP9v//+7j1wkxwLAdd6a+Ws9Vsnd5+v7L2//e39ndz7AIAmja6wKaErbEro + CpsSusKmhK6wKaErbEroCpsSusKmhK6wKaEr/AkenFD615Be3Ysyijp3snQv7JLZo6jQ0rN7kaW4ezdL + 7x7dLX169bCUFPe0lPQptvTr28cyoKSvZWBJiWVQ/36WwQP6W4YOGmAZNniQZfjgwZbhQ+zwb5HJM2kj + baWP9JUxZCwZU8aWOYp7dFNzytyig+jSq1th5thRI8Op4+/r6fyT6Ar16FPcc0B7S8bxrPS0/83KaIvs + jHTwMzpkWZDTLgu57bORl9MeBR07oFNuDjrn5aJLQR4KOxWgqEtndOvaBT0KC9GzWxHoLPTu0QO9e9rh + 3yKTZ9JG2kof6StjyFgypowtc8hcMqfMLTqILtnUibrdapeZfpYOevwBXnp21EdXWI/fde2UvyoxNgYx + keGIM0ciNSkBlrZpyE5PQ7vMDKS3SUZaciLSU1PQkYrl53SgsjnIJx2yqWi2hYp3UIZ1L+xKQ21Gdi3I + p4H5yliRyTOR59FQ6SPk8281FvvL2BlpKWqutpxTM1x0EZ3izFFKx4RYszhsy/Fj7/5Rx5466Aod6VHY + dX4CBxZDhg0ZpJDVSG+ToibP5OQlvYsx6snH8fhjw5SyuR3aK4U75+dh1FNPYvy4sXh8+DC1oj2KxMjO + GNi/HyZNfBqTyZAB/ZUTOBfobHBbqD5jRj6lPstYeRxTGDFsKEZyrgElfWDhAogOootEBreRQuaPp86F + nfJf17PJEV2hxqgnnwgTz8ZEhOHQwQMU2a6336pFSkIc2iTGg3sRX331lf0JsGTxIqSlJCEzrQ0WPr/A + LgX+9a9v8cRjw5WDOud1RO3hQ/YnwKmTJ1HYuYCO7QjmAHz99Z3xXlu+XI0lKz575gz88MMPSv4txxvY + r6/SISEmGntqapRcrlMnTkAWTXQcMXxoCkW69gm6Qg0qNVM8mRQXg2tXr1Bku65cvoy2KclIZKgNHTjQ + LrVdGyrWow2dJs/Xrl5tl9quCaXjuHezVdhfunjRLgU+/vhjFRm57dth5OMj7FLbtW3LVrXCMubypa/Y + pbZrNCMkIcaMpPgYZbR23bjxMdpym8RGRaBTXselFOnaJ+gKNbIz07eLkXHRkTh/7ixFtuvihQvK88nx + sejfp7ddartWryyjsvFcsSS1eo6XhHRHJjCJgrNnztilwD/ef5+hXqBCV8Lf8dqwvlw5UyJx8cKFdqnt + GjFsiFociYBjx47apcAHH/xD6SbP2O9NinTtE3SFGgy7GhlEomDwgH54+aXFeGXJErUPUxMlEaaqPTj9 + 2al4/dXl6jnLFDNzpsrSkuGXvvwSVpWV4fn58xjmnZShEurjxo5RzlqzaiUmjh/PlcpVzyTrz509S/WR + FRcHq4TIjM+Sh8WLFqq55syaqSpAJnVoQ12GDByAlxeLfi8p/URn2QJcwP16tmnoCjXoAKvNi/EqnEJM + /gj080FUWIiKgNSkRJWRzRHhiA4PhZkZWPa/VIb2WZkqOyfHxXI14lQ7CXFVIeiAbLZJ48oKWczmUjEk + MrowcarExopiS7QstxxLVZvUNkqPaOYkNRfHTEtOUtFhpizI31fpGBMZdjtCk+LM+/Rs09AVarRNSVIO + kMHiWf5kwm5dOpHO6M5M3oMr0rOoEL202t6zO3hYQd/inigp7oV+fYoxoG9fZuy+TFglGCQw+wuS7ByR + FezLaiKrLQ6S2i/GSxXow0jqpZ0TOJ9WLnkAkkxvK6d0XFdGD3VWW1ZzACPgHrYAHSA5QLxeRMNPHj+O + f372GT795JP7zmeffopPSdnrr6lwz0pvi79Nmojr16/hBpPkxx991JAPP+SdyJ18cuMGTrOiFLMyyXlA + kuO9OSA5UTkgPDgQFeXrKAK+//57VYruOxz71nff4csvvlBnBCZgW+LlM3lYv70mV8jN3kaundurEBka + rJJgYkx04x3AkLdyADXYti2VuHXrllqtD+ntj34FvvzyS+WAx4YOUcddKbfffPONevbhBx/8LDcYAd/R + iXv/XsOo5YmQupN7c4AMIg7YtKECn9+8iatXruD6tWv3nWtXr+K969dVuA8bNEhVESmVYpg80+tTH9FN + ttIbu3epRGhzQFTjHcDsapVyEhkSxC1QrpSTVfnVuHIV77/3HqZ07YrFDN/zHSw4H+KHcyYvnI8IxMWi + Trg4awYu7tyFy5cu6SLRsnP7dlUVxAHUv/EOYCZVDogIDkL52jVqNS6cP/+rcP7AAZybMQ0Xe3XGmex4 + XMlJwLWCFFzvnEZScb1LKq7lp+Bax0RcKcjA+T7dcG7BPFx452idceRQVbVtK8wsy1K5WBEa74CUhHhr + XHQEHRCINatXqtWRsLyvsLKcmlCKCxlxuJqXhKs0+mJ6FM5E+uNUgDtO+rrhpNEVJ/0M/OyBs2YTLlrM + uNqpDa50SMA5SxJOz5l9ezzZClsqK9W5RMoh9b8XB8RZ41gCpQqsXFHGEL2Ckzxz3y9ObNqEkzkZuMxV + vUROhvngqKE1jrq1wjFPJxzzcsExbxe8S+SuPns44ahrS3U/bQ7AlfxkXMqOxYnunXFy35tqG2zeuIEO + CBHjpYTfiwNirZJNw4MCePx8Vb0DvHvs2H3h2PJlOJUSictc8RPRJrzl1hJv06h3uNq/lLfdW+NtQyuc + TgrFZTrieHoSzu7apd4fopi4YyPpgMiwxjsgOT7GKq/CoXTAq8uW4tzZM3jnyJF75gjP8icSw3CBq/4W + DTnEFa/lvda7Hlzxuui0IYdcWuJIoBcu5iXj3dQ4bF74oqpcsTwMsRo03gFJsWarOSIUoaYAvtS8rN7b + aw8fvicOM+yPJptxrl0cDro746CHMw6JEY7Q2IMM+cOsALVtk1CblYbDbeJxyORNuSsOetbrQ+cdMDjh + sI8B5zrE4yAjIUHeTSJCJRc03gE8BVolmYTyBWMJ37QkdA/s3994uEdrc7NxyhKDN2nkm54u2E8D6kD5 + Pn8vjEpNhpVnj7dqa1Xfg8KmjTg0dzYOdsi63dax7z53JxwM8MSpzBgsCDGpSnBPDuAhwhoVFoyQAF/1 + Ln6E4btv797GM2UyQzQSBwI9UUNl93CV9dhLYxZGh2Hnjh04yPKoN9b+ubOwN9QfexgNd/q6wirbiRXk + aHIYutEB1P8eHGCmA7iXgukA+ffWYYZwjdXaOKqqcCgzEbUxJlQz4dVQ4Z+Ehll58Nm/bx/+XlOjy16e + TWpiwmFlW8e+1XTCkcQQlEWH8BB3Dw5gHbXKKVDesxfMf06FYvXu3Y3C+uwU1MYHo5qrVE2Fqxm+P8du + VoWankV4o7pad0zBunIFqk1G7HYYczfzSo2/Bw7HBaN7WMhxPds0dIUaLIFWOQME+hrx3Jw52LtnD3bw + mNkY9nQrwL4IX1Sxzu+kkho7qLjj5waIYT0L1Xb4MaonTmgwznbO82aUP+ZGh3yoZ5uGrlCDJcQaFmSC + ydcbc2bOhJWhvG3r1rtnzRrsSYrATp7qtlHRKiooqL993bHN/vlHYbsdvYr0xyZVZEdCNMdzut1nK6Nn + N3NNRXTwfx/ZWv2gnn2CrlAjJiLUGhYYQAd4Yeb0adjFl5DNLGN3y9bn56M6zBeVNGQLlXNk+9TJ2Nol + D5VUuP4zR6TvNjqhcvNmXbY9NgRbHMaX9lt5btgZFfD9ztQUbz37BF2hhjk8xColMMDohWlTp2D7tips + qKi4a7ZOGIcqlqeNrPubWPoU3KebA7ywafVqbFy/HpXtMvnc6c5zHTayT2Wvbti4YUMDtiyYj83ebg3a + VwV6Y2d8dKqefYKuUCMqLMQqFcDf2xNT/8aV2rIF5evW3TWbhw3GRqMbyqnQeiomyN8bEmKwfu1a1aaC + GX1jdjrK6QStjS7st5FOqD9HxbJlqPD1UM+1tjJHpb8nKk1e7fTsE3SFGjxOWoP8fODn5WF3wNYGE/8S + Ng0swXpm/3UeLlhHxYS1DPmK9JQ67TbQGRuy2mItnaC1q89ahvZaGlZRXNcJ63m8Lmc1WMdnt9uKM+j4 + CqNrez37BF2hRkRIoDXQzwhfT3e1BRrrgIoh/bGKijuykg5Ym2TGeod268vLsYVbZnFEEFbyRad+nzs4 + YRX7r+/T884cjIDVTKgid2y7WjC6Ni4CwoNN1kBWAG+DC54uLUV19RuoqLe/fxHjxqCMipVRmdvw88oA + b2wqW6HayLiSMCs3VyIvKxPzAn3xOt/06vRxYAVXt0xWuKS36r9x4QsoY5Q1aMuEWBEbnqZnn6Ar1AgL + CrCamAD9vNzV94CLOEl5+TqsYeK6G9bOnIHXGJKvUmFHRLaOx2Nps46lch23gHzDHMrKE8/3+RcjgrGc + 9bx+v9twq7zG+2rmmDXDh2A5P9d/vtTb7fstOVk+evYJukKN0EB/qyRAiQLZBrId+H5gwxwt/3JWjkmK + jUFyHImXb4FsyNdS2jfIOSmJeNnHHUtFISp2Gxo3NSxIfc2WlpTIcczq2C2nTzmCx5O5Jl+8wnZ1+jnC + MZfJ3WhoML70m+/n9c37+/f8Vs8+QVeoEWLys0oClIOQu3MrtPjLn9H8oT/BpdWjqjQK/kZPOLd4BK2a + Pwyn5s3oKAOCeXQODvCDn7cHXFo25/PmmOTniZeo0BIq5shLjIK2/kb1xkmHq/8+eXHLyXzuzq0RExyA + mQFG3b51oPH1ZdJnbJDfR3q2aegKNYL9fWp8vQzwdHVGUZcCzJs7B/PmzFZfhRnd3VRkSJUYO3okXpg/ + j6fF6erXIgE+Xur4LN/ZzZ4xnS9S8zG3uAcWUcnFVMyRRVRyQXggImm8hL4wbvQoW5/ZM9UXsHF0ygzm + ixfZtn7/H0XmonM7Bvqf0rNNQ1eoEREcWCWr4cHVkK+ctOvM6dNqlQxOLdEuM90utV0vvvC8WnW31i3w + HA3Qrm+//AILuJIvGJzwAg9EdaBsAqPAxFxTf7ylryyBW6sWCKHDF0aH43m31g3760FnTfL3gsnHq/Ff + jqYlJ04X4yUCLl24QJHtOn/+HHw83JSheTlSYe5cy6iw86OPwIVhv8jhFyJyjbOkYz4NmE8FG0CFJxrd + UdI+y97adpWteJ3zPAqnFs3w3LSpqOjaiW2d9Me4DZ8zCjJ8PJmbzPKrCl37BF2hRv++vUNYAX5werQZ + Xz13UWS75OcosvoGOkcS3s2bN5Vcvjec/MwElRNcmSdKx4xWX6fJ9fXXX6ODJQPP+HpiDt/X51LJ+ig5 + w7Zq5BP44Mhb+Oa/Ple/PZCxxNmjhw3B8TWr8ByNm0uH6Y0hyDiP8VRodHeVX54kcXpd+wRdoSNtkxPn + SDiHMLHlcnXkOzsekNTZQJKcTCLZXn44lZOdqRJmABNjAL0vOSIn24Ku+bkqN/izfVoQk5qnK2ZSyVlU + tj4zaZgwi0ZO47vCOL6IjaXTSmnQszzrz5JnOv00ZnDcKUy4AdQvOSF2mZ5NjugKH3zgAQWv3/Dzgwnm + qBXihJbNHkKrRx5WGVq2gI+HQZVHd0aDtu+lCkjplOogFUTauvG5bCNJjtyTyGVmn8GVnkZlp1PpH4XG + NkCvnR0ZbwrfAKM9XOU/whuBW3+ob1t96nywG/4g+XfyEHmEor9Ysto3Y71/0uTjfZJG/Y8cjMRQuYuR + /kYP+6qzNHLlxUh5hZZoEOT8EETkbsMH+YyiqYyEKa6tMJV7+l6RcSZ5G5Ae6Hc9MTa6NDe3oDl1f1hs + sNsiNjX4v0CdD2zwG3vDR4kH8SMhHCiU+Lo6O5ujw8O7+3l7PeVtcBvt7WEYbfRwG8P7WKOH+1+NHgY7 + 7uOMnsTDQNzH+Xi6l9bFo9To6TG+INi07Bmj++eTmBgnc3Un05C7hn2l/wQ/7+td4mPHeLgZYkVXEiK6 + 221wJ2LTH4hE9c86QLzmSozERIJJBAcVgkmQ/S6OCbMjzyLtRJFoYrbfY+zIZ+3vOBLr36pl5ghPt7JS + t9b/fJqGPE2jJv4CpJ1q7+ly8yk/7xddWrcWHUSncOoqiM6iu9ggtohNDbZEnQ8CG/0b+T35I/kzaUaa + kxakNXEmMqAbEc9KpAhexJvIhD7E1wFZhQDib78LolyQ/W6KatYscahr63lj3Z0vl7KUldJAYTyN1KCT + MJ6ycQan70a5td43zOD8TIbRM5L9RRcX4kRER9FVdBbdJfzFlt+ROqsv1PmgwYYaEhGCOEX4rQMyoDhK + wkqiRuM/iEz4p3qIM//Tfv9RjF6ezQYFBWSN8PZ44kmD08QxXm4ryKYxnm4rnjI4jR/p59V/iMk3gm1l + LplbdBBdHHXT9FX669mooSu8WzhJA/Ta/X9EV9iU0BU2JXSFTQldYVNCV9iU0BU2HfDA/wHbOaqTUdas + yAAAAABJRU5ErkJggg== @@ -3373,890 +3360,848 @@ - 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 - QuKMJV+qAAAAAElFTkSuQmCC + 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 + wZgAAAAASUVORK5CYII= @@ -4265,42 +4210,43 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJFSURBVDhPtZPLaxNRFMaDaUoe42RmkoxVQg1SWylq0IoI - LlxIwF2xGxW6VfEfKHRVhYaGJqVtDJLEpjaPtiQtiQkEtRrjMwTMQnFX3YnWzDuTpy5yvVdCcJGEbjzw - Y+D7vnvmzJkZheJ/Vj1vvdXIW6dAYUy17/vUc6NDKPzr/emT9VcmUMtSoPr2xATS6rkzf72uVXt+dLqW - sYBaZiTRzJ/Hv6eUvytpJWik+4er2VMO5FV3LCtdG8hJMliO94Fyoh+Uk5StFFe/FBOqvUrKeLb8GGrx - A6Cc0ud7TiFva2e4sLohb2i/yFvYUimmjZaimhdyVA1K21oPKCg670OMYFNiGNuUgvg1OUKMlyKaHWmD - fF3aJDNiWJeT1vHrQpAYl0LYmhTBFkD2Ul97knLoEC0GMCAGdBB0xQC/SsT54MCu9Ij+JqwSUS6ANf7N - SCv4uXYDEFMoeR++xnoPfuJ9ejvvJ28IXmKL95s+iP6BnODVPxUeEpOCD5/mvVhBeKB/UvSYsI674Bap - CW6Z2C26CZ5zkx5umVpn3PhnqP1kFw23ey6QcRkdrIsErBOyQE8W58kk66K+sktHLrNOCiCPcRniXZsw - c/R9xm4EP2apj3shm46Z0VUYuwFwjiEzYzfFkMfMGp/1nKIyb74CUmPapnNwlLtHA/YuDeQ581V0CHnN - 6AVNpwY4FAchxyCHIccthMr65qYpnb9Dv7MNqy9CbaTlWVpZdKZd6ONAW9VDSIgBQkGQjt430dKQhzIo - u/8frNcz/wGPcQwnClZvyQAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJJSURBVDhPtZNLaxNRGIYH05RcxsnMJBmrhBqktlLUoBUR + XLiQgLtiNyp0q+IfKHRVhYaWJqVtDJLEpjaXtiQtiQkEtVrrNQTsQnFX3YnWzn0mV13keE4dRW2Kbnzg + 4cD3vt/mnBnsv1Iruq7Ui64BsNaj10Z/p1bo7kDnl5dHD9ee2EF1lQaV54f6vmfHtrIdqT7cP1hdcYLq + SlemUTxJfMzpvpbzOlDPt3ZWVo+Moqyy7JzW6ttRs1S0lG4BpUwrKGVpt5I2PJYy+o1yzna8dBfO0rtA + KWcpavXmqEumIT5uqKvzpnfqIj6ppExJJWl8pCYNQFkyBcAa1vw+pAQ+IMXxBTlKXFATZK+SMC7L89RT + ZYFakeLmgjxHXBSjZK8cw2flBD4OVs+0aKsYVortYaQIDqSIGYpOHAgzZFqItq3Ld5gP4gyZ5CN4/deO + PE2c0NYxDKQwnRAiZrng7jdCyOIRwtQlMUguCmH7KyncVhCDlvvibbJfDBGDQhBfE29Z7m0G7Li2/jv8 + BN3HT5Hrm35S4P1UgJ+i51g/8RbOPnMT1qtarTmszzbK+SjAeaHjTP/mGJXlfPR7bnLfWc5LA5SxPmta + q2+HHWFush4b+DRMv96Iuc3skLnMeqyAH+1wsB57CmXssO2BVm9OecxxDuR6TA1vezd/gwHcdQaoI47z + P7JG8pRxq/gHBLQdegC6F3rQSepdzy7b88VrzAt3p+E0nHVpmROKumjnJ+jjQLdqgVJQK5SGojl6b1Kb + oQx1UPfff7CdwbBvj3EMJ0N7aAcAAAAASUVORK5CYII= iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGqSURBVDhPY2CgFdBY+ERYbMYDZ7LMt1/6VIR74tW7HN2X - t1qsfCREkiEas66p8bSff8DQcOI/S9P+v1z1Z77xdJ45JdZ7MYoogzhrDl1nKN//H47L9oHZ7LWH/4u0 - newibEj+FjvGvC2fGfK2/gdhxvj5vxnzt35lyN3yn7V4x3+Bqj2+BA3hzlqtzZiy5iNL6updDCr/+Bhk - /nGyZWxQZ0pbm8udv2UnQ/1+FgxD/v9nYFxw3kIaLhG7XJMhfE3U3nui+rvvKsnBxLmTVugwpG3iwmrA - lFM6C2afdQjfeaGYG6Zg6kmF1iknld8uOO2hTNDpnYfknLuOaP7vO2z8oee42Y0Jx01vd+9X+9p+WO5/ - 336Dt7PPehsTNKRmr2p/1R7V/zUgvBeE1f7X7tUA0w3r9b/X77fnIGhI3mbt/IyNGo+z1+v8z96g8z9n - I5AGsnM2qicQ1AxT8P//f8aMnSY64Qv1Z9vP1/ubsMbInZBmXqACeSBWA2ItKJbWiJYv0IiQLQDyJaBy - IDUgtRiAFSjCA8QCQAxK/8JALAoV44TyQXIgNSC11AEAu52qhBHAg7EAAAAASUVORK5CYII= + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG9SURBVDhPY6AZ0Fj4RFhsxgNnKJc0YL/0qQj3xKt3Obov + b7VY+UgIKkwc0Jh1TY2n/fwDhoYT/1ma9v/lqj/zjafzzCmx3otRUCX4AWfNoesM5fv/w3HZPjDNXnv4 + v0jbyS6oMjwgf4sdY96Wzwx5W/+DMGP8/N+M+Vu/MuRu+c9avOO/QNUeX6hK3IA7a7U2Y8qajyypq3cx + qPzjY5D5x8mWsUGdKW1tLnf+lp0M9ftZoEoR4P9/BsYF5y2koVwGhtjlmgzha6L23hPV331XSQ4qysCd + tEKHIW0TF5SLACADppzSWTD7rEP4zgvF3FBhhqknFVqnnFR+u+C0hzJUCDfoPCTn3HVE83/fYeMPPcfN + bkw4bnq7e7/a1/bDcv/79hu8nX3W2xiqFDeo2avaX7VH9X8NCO8FYbX/tXs1wHTDev3v9fvtOaBKcYO8 + zdr5GRs1Hmev1/mfvUHnf85GIA1k52xUT4AqIQz+///PmLHTRCd8of5s+/l6fxPWGLlDpXACXiCWB2I1 + INaCYmmNaPkCjQjZAiBbAioHUgNSiwFYgZgHiAWAGJT+hYFYFCrGCeWD5EB8kFpqAAYGALudqoTLkKtq + AAAAAElFTkSuQmCC iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFnSURBVDhPY2AYBeAQ2Lbr+P/otOb/nqGl/50Ci+A4MK76 - f0JO+/+Kxhn/+6at+r9286H/l67e/f/jx6//8KD79OXr/6Lqqf+NHZPB2NA2C4xtAxLBNEwcRlu7Z4Et - AhkKspgBZEBF00ywwugGj/8R1V5gumiJ6f+4Vof/QZlZ/+v61/4v61gEpFf8z6yaCmZHZLT+BxkGdsns - xZvBBoBsLV9rAKZBhtiFB/xffKrrv5Vbyf+eeVvBajYeufE/FOhdEBvkcrABJ85e/e8RH/8/vsXzf2SV - PxyD+EklXUDFmf/j87vBmgoaZ/9vmrLmPyh8wF4AAVCggAMxuAKOHb1L/oOwvXf2f99I1MAFBXRmUQ8i - IGExYe+e8B8bdnaP+e/pFfM/JCDmf0p45P8ZNTn/X9y/jmoAyJDWviXwKPSOqgC7Krt4yn+Q+PINB/+f - vnj3/+sP3zA1ImcHUHiAFD59/hq/wuGThwDLuRGK1I9MHgAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFhSURBVDhPYxgFELBt1/H/0WnN/z1DS/87BRbBcWBc9f+E + nPb/FY0z/vdNW/V/7eZD/y9dvfv/x49f/6FaGRg+ffn6v6h66n9jx2QwNrTNAmPbgEQwDROHYWv3LLBF + IENBFoMNqGiaCZaMbvD4H1HtBaaLlpj+j2t1+B+UmfW/rn/t/7KORUB6xf/MqqlgdkRGK9gwsCtmL94M + NgBka/laAzANMsQuPOD/4lNd/63cSv73zNsKVrPxyI3/oUDvgtggl4MNOHH26n+P+Pj/8S2e/yOr/OEY + xE8q6QIqzvwfn98N1lTQOPt/05Q14PABewEEQIECDsTgCjh29C4BY3vv7P++kaiBC8KZRT2IgAQBkGn2 + 7glYsbN7zH9Pr5j/IQEx/1PCI//PqMn5/+L+dVQDQKC1bwncBu+oCrCrsoun/AeJL99w8P/pi3f/v/7w + DVMjMgCFB0jh0+ev8SscLoCBAQDLuRGKGcDaxAAAAABJRU5ErkJggg== @@ -4310,130 +4256,137 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADE - HAAAAk1TRnQBSQFMAgEBCAEAAewBCAHsAQgBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABMAMAAQEBAAEgBgABMP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wBnAAMCAQMkAAME - AQYDBwEKAwUBBwMCAQOIAAMMARADGAEiAx0BKQMfAS0DIgExAyIBMgMjATMDIwEzAyIBMgMfASwDGAEi - AzcBWwMaASUDCwEPCAADBwEKA0kBhwNYAbsDWAG7A1oBvQNaAb0DWQG+A1kBvgNZAb8DVQGyAyYBOQMU - ARsDGAEhAwwBEBwAAw0BEQMYASJkAAMCAQMDBQQHAQkDCAELAwkBDAMKAQ0DCgEOAwoBDgMFBAcBCgNU - Aa8CfwFZAf4DCgEOAwEBAggAAxIBGAEAAbkB2wH/AQABsgHZAf8BAAGyAdsB/wEAAbQB3QH/AQABtgHg - Af8BAAG4AeMB/wEAAbkB5gH/AQABugHqAf8BhgHAAdwB/wNeAdgDLQFGJAADUwGqAQABhQEAAf8DPAFm - gAADDgETA1sBxAHDAbQBAAH/A0wBkhAAAxcBIAEAAcAB5QH/AQABuwHmAf8BAAG6AecB/wEAAbwB6AH/ - AQABvQHpAf8BAAG+AeoB/wEAAb8B6wH/AQABvgHtAf8BkgHLAecB/wHxAeQB0QH/A0wBkyAAA04BmQEA - AZ0BAAH/AQABnQEAAf8DXgHdAw0BESwAAw0BEQMNAREDIwEzAyMBMwMNAREgAAMHAQoDMwFSAzcBWgM3 - AVoDNwFaAzcBWgM7AWMDZQHlAcIBswEAAf8BwgGzAQAB/wNJAYcDBwEKDAADFgEfAQABxgHsAf8BAAHC - AewB/wEAAcEB7AH/AQABwgHtAf8BAAHDAe4B/wEAAcUB7gH/AQABxgHvAf8BAAHFAfEB/wGXAdAB5wH/ - AfEB7QHuAf8DSgGJHAADTgGZAQABqAEGAf8BAAGqAQcB/wEAAaoBBwH/AQABqgEHAf8DTgGZMAADSQGI - A2EB7gNhAe4DUwGqAw0BERgAAwUBBwNdAdIBwgGzAQAB/wHCAbMBAAH/AcIBswEAAf8BwgGzAQAB/wHC - AbMBAAH/AcIBswEAAf8BwgGzAQAB/wHCAbMBAAH/AcIBswEAAf8BwgGzAQAB/wNdAdIDBQEHCAADFgEf - AQABywHwAf8BAAHIAfAB/wEAAcgB8AH/AQAByQHxAf8BAAHKAfIB/wEAAcsB8wH/AQABzQH0Af8BAAHM - AfYB/wGbAdYB7QH/AfQB7gHrAf8DSAGFFAADDQERA04BmQEAAbMBFAH/AQABsgESAf8BAAG3ARoB/wEA - AbcBGgH/AQABswEUAf8BAAGzARQB/wMsAUQoAANDAXcDzAH/A8UB/wO+Af8DsgH/A0kBiBgAAxoBJAHG - AbcBAAH/AcYBtwEAAf8BxgG3AQAB/wHGAbcBAAH/AcYBtwEAAf8BxgG3AQAB/wHGAbcBAAH/AcYBtwEA - Af8BxgG3AQAB/wHGAbcBAAH/AcYBtwEAAf8BxgG3AQAB/wMaASQIAAMWAR8BAAHRAfQB/wEAAc8B9QH/ - AQABzwH1Af8BAAHQAfYB/wEAAdEB9wH/AQAB0gH4Af8BAAHTAfgB/wEAAdMB+gH/AaAB2gHvAf8B/QHy - Ae4B/wNaAb0UAAMjATMBAAG9ASMB/wEAAbkBHAH/AQABvgGBAf8DPAFmA0MBdwEAAbwBHwH/AQABvAEf - Af8DXAHMAw0BESAAAxgBIgNeAd0D1gH/A9YB/wPMAf8DvgH/A2EB7gMYASIUAAMZASMBywG9AQAB/wHL - Ab0BAAH/AcsBvQEAAf8BywG9AQAB/wHLAb0BAAH/AcsBvQEAAf8BywG9AQAB/wHLAb0BAAH/AcsBvQEA - Af8BywG9AQAB/wHLAb0BAAH/AcsBvQEAAf8DGQEjCAADFgEfAQAB1gH3Af8BAAHVAfkB/wEAAdQB+QH/ - AQAB1QH5Af8BAAHWAfkB/wEAAdcB+QH/AQAB1wH5Af8BAAHYAfoB/wEAAdUB9AH/AdgB5wHtAf8B8QHv - Ae0B/wMcASgUAANDAXcDXgHdA0MBdwgAA1wBzAEAAcABggH/AQABwAGCAf8DTgGZIAADGAEiA14B3QPW - Af8D1gH/A9YB/wPFAf8DYQHuAxgBIhQAAxkBIwHQAcMBAAH/AdABwwEAAf8B0AHDAQAB/wHQAcMBAAH/ - AdABwwEAAf8B0AHDAQAB/wHQAcMBAAH/AdABwwEAAf8B0AHDAQAB/wHQAcMBAAH/AdABwwEAAf8B0AHD - AQAB/wMZASMIAAMWAR8BAAHaAfgB/wEAAdkB+QH/AQAB2AH5Af8BAAHZAfkB/wEAAdoB+QH/AQAB2wH5 - Af8BAAHbAfoB/wEAAdwB+gH/AQAB2wH8Af8BrAHfAfAB/wH3AfAB7gH/A04BlRgAAw0BEQwAAyMBMwFa - AmEB7gEAAcMBiAH/AQABwwGJAf8DQwF3Aw0BERwAA0kBiAPfAf8D1gH/A9YB/wPMAf8DUwGqGAADGQEj - AdUByQEAAf8B1QHJAQAB/wHVAckBAAH/AdUByQEAAf8B1QHJAQAB/wHVAckBAAH/AdUByQEAAf8B1QHJ - AQAB/wHVAckBAAH/AdUByQEAAf8B1QHJAQAB/wHVAckBAAH/AxkBIwgAAxYBHwGBAd0B+QH/AQAB3AH6 - Af8BAAHcAfoB/wEAAd0B+gH/AYEB3gH6Af8BggHeAfoB/wGDAd8B+gH/AYUB4AH6Af8BAAHfAfsB/wG0 - AeIB8QH/AfcB8QHvAf8BZwJZAfIDDQERKAADPAFmAQAByAGTAf8BAAHFAY8B/wEAAcgBkwH/AywBRCAA - A04BmQNhAe4DYQHuA1MBqgMNAREYAAMaASUB2gHPAY0B/wHaAc4BjQH/AdoBzwGNAf8B2gHPAY0B/wHa - Ac8BjQH/AdoBzwGNAf8B2gHPAY0B/wHaAc8BjQH/AdoBzwGNAf8B2gHPAY0B/wHaAc4BjQH/AdoBzwGN - Af8DGgElCAADFgEfAYcB4AH5Af8BhgHgAfoB/wGGAeAB+gH/AYgB4QH6Af8BigHiAfoB/wGMAeIB+wH/ - AY4B5AH7Af8BkAHkAfsB/wGLAeUB/AH/AboB5gHzAf8B9wHxAfAB/wHsAu0B/wMfAS0sAANJAYgBAAHL - AZkB/wNTAaoDGAEiJAADGAEiAyMBMyAAAxEBFwHiAdkBpwH/AeAB1gGgAf8B3wHVAZ8B/wHfAdUBnwH/ - Ad8B1QGfAf8B3wHVAZ8B/wHfAdUBnwH/Ad8B1QGfAf8B3wHVAZ8B/wHfAdUBnwH/AeAB1gGgAf8B4gHZ - AacB/wMRARcIAAMXASABkQHkAfoB/wGRAeUB+wH/AZIB5QH7Af8BlQHmAfsB/wGXAegB/AH/AZkB6QH8 - Af8BnAHqAfwB/wGeAesB/AH/AZwB7AH+Af8BvgHnAfMB/wNWAbEDLQFFNAADLAFEWAADOAFeA1oBxQNc - AckDXAHJA1wByQNcAckDXAHJA1wByQNcAckDXAHJA1oBxQM4AV4MAAMHAQoBYQJeAdoBmwHpAfsB/wGd - AeoB/AH/AZ8B6wH8Af8BogHsAfwB/wGkAe0B/AH/AaYB7gH8Af8BqAHvAfwB/wNfAfsDNAFU2AADBAEG - AxgBIQMXASADFwEgAxcBIAMXASADFwEgAxgBIQMRARf/ANkAAwIBAwMAAQEPAAEBAwABAQMAAQEDAAEB - AwABAQwAAwQBBYwAAwYECAELAxABFgMTARoDFAEcAxUBHQMVAR0DFAEcAxQBGwMQARYDCgENAwgBCwsA - AQEDBwEJAyIBMQNAAXEDQwF3A0QBeQNEAXoDRAF6A0QBegNEAXoDRAF5A0MBdwNCAXQDKQE/AwwBEAMA - AQEEAAMEAQUDCQEMAwsBDwMNAREDBwEJAwEBAgMEAQUDBAEFAwEBAgMFAQcDDQERAwsBDwMJAQwDBAEF - CAADBAEGAwoBDQMKAQ4DDAEQAw4BEwMOARMDDwEUAwoBDQMLBA8BFAMHAQoDBwEJAwoBDQMFAQcMAAME - AQYDRwGCA1wB6gNkAewDZAHsA2QB7ANkAewDZAHsA2QB7ANiAekDQAFwAwYBCAwAAw0BEQNhAeED3gH/ - A+AB/wLkAeUB/wLnAegB/wPpAf8C6QHqAf8C6QHqAf8C5wHoAf8C5QHmAf8C4wHkAf8DXQHwAxwBKAgA - AwoBDgMWAR4DGAEiAxEBFwM3AVoDUwGqA14BzgNeAdADVgGxAz0BZwMTARoDFwEgAxYBHgMKAQ4HAAEB - AwkBDAMOARMDHwEsAyIBMgMkATUDIwEzAzEBTwNcAckDNQFVAx8BLAM9AWgDWwHEAxMBGgMJAQwDAAEB - DAADXgHYAtQB1QH/AtkB2gH/AtwB3QH/At4B3wH/At4B3wH/At4B3wH/AdwB2wHcAf8C2AHZAf8DWgG9 - EAADIwEzAtQB1gH/AtkB3wH/Ad8B4QHmAf8B4wHlAeoB/wHkAecB6wH/AeUB5wHsAf8B5QHoAewB/wHl - AecB7AH/AeUB6AHrAf8B4wHlAeoB/wHfAeAB5QH/AtsB3QH/AzYBWBQAA04BlAHFAbYBAAH/AcUBtgEA - Af8BwAGwAQAB/wHAAbABAAH/AcMBswEAAf8BxgG3AQAB/wFWAlQBqwMGAQgUAANMAY8DXwHjA1wB3wNc - Ad8DYAHeA10B4gIAAZQB/wNkAfEDYQHcA1wB+AIAAYIB/wNSAacDBwEJEAADXAHRAt0B3gH/AuAB4QH/ - AuIB4wH/AuMB5AH/AuMB5AH/AeIC4wH/AuIB4wH/AuAB4QH/A1cBtxAAAyIBMgHZAdgB1wH/AdgB1QG2 - Af8B1AHHAasB/wHQAb0BpQH/AdIBvwGnAf8B0wHAAagB/wHTAcABqAH/AdMBwAGoAf8B0gG/AacB/wHU - AcYBqgH/AdoB1wG2Af8B3wHeAdkB/wM1AVUQAAFWAlQBqwHCAbMBAAH/AcIBswEAAf8BwgGzAQAB/wHg - AdkBngH/AegB4wG5Af8B0AHGAQAB/wG/AbABAAH/AcIBswEAAf8DXAHJAwIBAwwAAx8BLAMAAf8DAAH/ - AYIBhAGGAf8DAAH/AY0BjgGRAf8DAAH/AgABqwH/AgABlwH/AgABnQH/AgABmQH/AgABigH/AwAB/wMw - AUwQAANcAdEC4gHjAf8C5AHlAf8B5QLmAf8B5gLnAf8B5gLnAf8B5gLnAf8B5QLmAf8B4wLkAf8DVwG3 - EAADIgEyAdQBzgGgAf8BwQGzAQAB/wG0AY4BAAH/AaECAAH/AaMCAAH/AaMCAAH/AaMCAAH/AaMCAAH/ - AaECAAH/AbEBggEAAf8BwAGzAQAB/wHTAcsBjwH/AzUBVQwAAzUBVwHCAbMBAAH/AcIBswEAAf8BvwGw - AQAB/wHPAcMBAAX/AekB5gHSAf8BxgG5AQAB/wHAAbEBAAH/AcIBswEAAf8BwgGzAQAB/wNGAX4MAAMj - ATMDAAH/AQABgQGCAf8DAAH/AQABgQGCAf8CgQEAAf8CAAGBAf8CAAGYAf8CAAGlAf8CAAGkAf8CAAGl - Af8CAAGWAf8DAAH/AzMBUxAAA1wB0QHlAuYB/wHnAugB/wHpAuoB/wHqAusB/wHqAusB/wHqAusB/wHp - AuoB/wHmAucB/wNXAbcQAAMiATIB1AHNAZoB/wHAAbEBAAH/AcIBsgEAAf8BsgIAAf8BrwIAAf8BsAIA - Af8BsAIAAf8BrwIAAf8BsQIAAf8BwQGuAQAB/wHAAbEBAAH/AdIBygGMAf8DNQFVDAADXAHMAcIBswEA - Af8BwgGzAQAB/wHAAbEBAAH/AcgBuwEABf8B5wHjAc0B/wG4AagBAAH/AcMBtAEAAf8BwgGzAQAB/wHC - AbMBAAH/A1wB6gMEAQUIAAMjATMDAAH/ArgBuQH/ArABsQH/ArYBsAH/AYIBhAG0Af8CAAG5Af8CAAG1 - Af8CAAG1Af8CAAGwAf8CAAG0Af8CAAG5Af8CAAGvAf8DMwFSEAADXAHRAugB6QH/AeoC6wH/AesC7AH/ - AesC7AH/AesC7AH/AesC7AH/AesC7AH/AeoC6wH/A1cBtxAAAyIBMgHVAc8BnQH/AcABsAEAAf8BwgG1 - AQAB/wHCAbEBAAH/AboBhQEAAf8BtwIAAf8BtwIAAf8BuQIAAf8BwQGvAQAB/wHCAbUBAAH/AcABsAEA - Af8B0wHMAY8B/wM1AVUIAAMKAQ4DXAH4AcUBtwEAAf8BxQG3AQAB/wHFAbcBAAH/AcIBsgEAAf8B9AHx - AdoB/wL8Af0B/wHAAbMBAAH/AcYBtwEAAf8BxQG3AQAB/wHFAbcBAAH/AcUBtgEAAf8DHAEoCAADIwEz - AwAB/wK9Ab4B/wK1AbYB/wO2Af8CrgG3Af8BpgGoAboB/wGxAbIBuQH/AgABuQH/AgABwQH/AQABgQHA - Af8BtwG4AcEB/wIAAYMB/wMzAVIQAANcAdEB6gLrAf8B6wLsAf8B6wLsAf8C7AHtAf8C7AHtAf8C7AHt - Af8B6wLsAf8B6wLsAf8DVwG3EAADIgEyAdcB0QGjAf8BxAG0AQAB/wHGAbgBAAH/AcUBuAEAAf8BwQGG - AQAB/wHAAgAB/wHAAgAB/wHBAYEBAAH/AcUBtAEAAf8BxgG4AQAB/wHEAbQBAAH/AdYBzwGVAf8DNQFV - CAADFAEcAcoBvQEAAf8BygG8AQAB/wHKAbwBAAH/AcoBvAEAAf8BxQG1AQAB/wHmAd8BsQX/AcwBwwGC - Af8ByAG6AQAB/wHKAbwBAAH/AcoBvAEAAf8BygG8AQAB/wMmATkIAAMjATMDAAH/Ac0BzAHNAf8CxAHF - Af8CxAHFAf8DxQH/AscBxQH/AdABzwHHAf8CAAGbAf8CAAHOAf8BuAG5AccB/wLSAc0B/wMAAf8DMwFS - EAADXAHRAesC7AH/AesC7AH/AuwB7QH/AewC7QH/AewC7QH/AewC7QH/AuwB7QH/AesC7AH/A1cBtxAA - AyIBMgHbAdUBrAH/AcoBvAEAAf8BzAHBAQAB/wHMAa8BAAH/AcgCAAH/AcgBgQEAAf8ByAGBAQAB/wHI - AgAB/wHLAasBAAH/AcwBwgEAAf8BygG8AQAB/wHaAdQBogH/AzUBVQgAAwcBCgFlAlIB9AHOAcEBAAH/ - Ac4BwQEAAf8BzQG/AQAB/wHeAdUBmwH/AfcB9QHnAf8B9QHzAegB/wHJAb4BAAH/Ac8BwQEAAf8BzgHB - AQAB/wHOAcEBAAH/AdEBxAEAAf8DGAEiCAADIwEzAwAB/wLbAdwB/wLSAdMB/wLSAdMB/wLSAdMB/wLS - AdMB/wPXAf8BjwGQAZgB/wGLAZAB0gH/AdUB1AHTAf8C2wHcAf8BhQGGAYkB/wMzAVIQAANcAdEB6wLs - Af8C7AHtAf8B7ALtAf8C7QHuAf8C7QHuAf8C7wHwAf8B8wL0Af8B8ALxAf8DWQG/EAADIgEyAd4B2QG2 - Af8B0QHEAQAB/wHSAccBAAH/AdMBwAEAAf8B0wGLAQAB/wHQAYUBAAH/AdABhQEAAf8B0gGIAQAB/wHT - AbsBAAH/AdIByAEAAf8B0QHEAQAB/wHeAdgBrQH/AzUBVQwAA1oBvQHUAcgBAAH/AdMBxgEAAf8B0wHG - AQAB/wHTAccBAAH/AdgBzQGFAf8B5wHhAbkB/wHZAdEBmQH/AdABwwEAAf8B0wHHAQAB/wHTAccBAAH/ - A1wB3wMAAQEIAAMjATMDAAH/A/cB/wPsAf8C7AHtAf8C6wHsAf8C6wHsAf8C8AHxAf8BpQGmAacB/wLu - AecB/wLrAewB/wL2AfcB/wGRAZIBlQH/AzMBUhAAA1wB0QHrAuwB/wLsAe0B/wHsAu0B/wLtAe4B/wLv - AfAB/wLmAecB/wGyAbMBtAH/ArMBtAH/A0kBhxAAAyIBMgHgAdwBvgH/AdcBywGDAf8B2AHNAYgB/wHY - Ac8BjQH/AdsBugEAAf8B3AGYAQAB/wHcAZgBAAH/AdsBtQEAAf8B2AHOAYwB/wHYAc0BiQH/AdcBywGD - Af8B4QHcAbcB/wM1AVUMAAMqAUAB3QHRAZMB/wHWAcsBhAH/AdcBzAGGAf8B1gHKAYEB/wHcAdIBlQX/ - AvQB8wH/AcsBwAEAAf8B2AHNAYQB/wHcAdABkgH/AzsBYwwAAyMBNAMAAf8BmgGbAZ0B/wGbAZwBnwH/ - ApsBngH/AqEBowH/AqABogH/AaIBowGlAf8DAAH/AZUBlgGYAf8BnAGdAZ8B/wGaAZsBnQH/AwAB/wMz - AVMQAANgAdQB6wLsAf8C7AHtAf8B7ALtAf8C7QHuAf8C9AH1Af8CwQHCAf8BiAGJAYoB/wNPAZcUAAMi - ATIB4wHfAcgB/wHiAdgBoQH/AeIB2AGkAf8B4gHYAaQB/wHhAdoBqAH/AeIB1QGcAf8B4gHUAZsB/wHh - AdoBqQH/AeIB2AGkAf8B4gHYAaQB/wHhAdcBoQH/AeUB4AHEAf8DNQFXEAADSAGGAeEB1wGhAf8B3AHR - AZUB/wHbAdABkgH/AdsB0AGSAf8B6QHjAb0B/wHeAdYBqAH/AdkBzgGOAf8B4QHWAaAB/wNTAagQAAMa - ASUDAAH/AwAB/wGXAZgBmgH/AwAB/wGlAaYBqAH/AgABgQH/AowBjgH/AqMBpQH/AwAB/wGfAaABogH/ - AwAB/wGHAYkBiwH/AywBQxAAA10BygHrAuwB/wHrAuwB/wLsAe0B/wHsAu0B/wLzAfQB/wHAAcEBwgH/ - A04BlhgAAwkBDANcAcwB6AHkAc8B/wHrAecB0wH/AeoB5wHTAf8B6wHnAdMB/wHrAecB1AH/AesB5wHV - Af8B6wHnAdMB/wHrAecB0wH/AeoB5wHTAf8B6QHlAdAB/wNeAd0DFgEfFAADQAFuA10B8AHkAdoBqwH/ - AeMB2QGoAf8B4QHWAaEB/wHjAdkBpgH/A2oB+QNIAYYYAAM6AWIDXQHKA10BygNcAckDXAHJA1wByQNc - AckDXAHJA1wByQNcAckDXAHMA0MBeBQAAxgBIgNAAXEDQgFzA0IBcwNCAXMDQgF0AzkBXyAAAyYBOANO - AZYDUQGcA1ABmwNQAZsDUAGbA1ABmwNQAZsDUAGbA1ABmwNQAZsDLwFJHAADDAEQAzUBVgNIAYMDSQGH - AzgBXgMTARr/AFUAAUIBTQE+BwABPgMAASgDAAFAAwABMAMAAQEBAAEBBQABgAEBFgAD/4EACv8BvwHh - BP8BgAEBAYABAQH8A/8BgAEBAYABBwH8AX8D/wGHAYABBwH4AT8B+AE/AcABAwGAAQcB8AE/AfwBHwGA - AQEBgAEHAcABHwH4AR8BgAEBAYABBwHAAQ8B8AEPAYABAQGAAQMB4wEPAfABDwGAAQEBgAEDAfcBAwH4 - AR8BgAEBAYABAQH/AYMB/AEfAYABAQGAAQEB/wHDAf4BfwGAAQEBgAEDAf8B7wL/AcABAwGAAQ8G/wHA - AR8O/wGcAR0E/wHAAQMCAAGAAQEBgAEBAcABAwGAAQEBgAEBAgAB4AEHAYABAQHwAQcBwAEBAeABBwGA - AQEB4AEDAYABAQHgAQcBgAEBAcABAwGAAQEB4AEHAYABAQHAAQEBgAEBAeABBwGAAQEBgAEBAYABAQHg - AQcBgAEBAYABAQGAAQEB4AEHAYABAQGAAQEBgAEBAeABBwGAAQEBwAEBAYABAQHgAQcBgAEBAcABAwGA - AQEB4AEPAYABAQHgAQcBgAEBAeABHwGAAQEB8AEPAcABAwHgAT8BwAEDAfgBHwr/Cw== + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABO + HgAAAk1TRnQBSQFMAgEBCQEAATwBCQE8AQkBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABMAMAAQEBAAEgBgABMP8A/wD/AP8AKgADSAGAA7IB/wOeAf8DmwH/A6MB/wNIAYADKgFA3AADSQGA + A6AB/wNmAf8DbAH/A7wB/wPYAf8DlwH/A2EB/wN2Af8D3QH/1AADSQGAA40B/wNoAf8DcQH/A+IB/wPt + Af8D2AH/A+8B/wObAf8DZwH/A2gB/wNpAcDMAANIAYADiQH/A2MB/wNaAf8DlwX/A5wB/wNeAf8D0QH/ + A+UB/wNnAf8DbAH/A20B/wPNAf/IAAMqAUADjwH/A2UB/wNuAf8DhwX/A8AB/wOPAf8D5QH/A80B/wNp + Af8DYAH/A3MB/wNIAYDQAAOJAf8DXwH/A2sB/wPCCf8D5wH/A3UB/wNnAf8DZQH/A0gBgNQAAyoBQAO6 + Af8DigH/A28B/wONAf8DmAH/A4EB/wNzAf8DqQH/A0kBgOQAA+4B/wPYAf8D1AH/A+UB//8A/wD/AP8A + /wD/ACIAAwIBAyQAAwQBBgMHAQoDBQEHAwIBA4gAAwwBEAMYASIDHQEpAx8BLQMiATEDIgEyAyMBMwMj + ATMDIgEyAx8BLAMYASIDNwFbAxoBJQMLAQ8IAAMHAQoDSQGHA1gBuwNYAbsDWgG9A1oBvQNZAb4DWQG+ + A1kBvwNVAbIDJgE5AxQBGwMYASEDDAEQHAADDQERAxgBImQAAwIBAwMFBAcBCQMIAQsDCQEMAwoBDQMK + AQ4DCgEOAwUEBwEKA1QBrwJ/AVkB/gMKAQ4DAQECCAADEgEYAQABuQHbAf8BAAGyAdkB/wEAAbIB2wH/ + AQABtAHdAf8BAAG2AeAB/wEAAbgB4wH/AQABuQHmAf8BAAG6AeoB/wGGAcAB3AH/A14B2AMtAUYkAANT + AaoBAAGFAQAB/wM8AWaAAAMOARMDWwHEAcMBtAEAAf8DTAGSEAADFwEgAQABwAHlAf8BAAG7AeYB/wEA + AboB5wH/AQABvAHoAf8BAAG9AekB/wEAAb4B6gH/AQABvwHrAf8BAAG+Ae0B/wGSAcsB5wH/AfEB5AHR + Af8DTAGTIAADTgGZAQABnQEAAf8BAAGdAQAB/wNeAd0DDQERLAADDQERAw0BEQMjATMDIwEzAw0BESAA + AwcBCgMzAVIDNwFaAzcBWgM3AVoDNwFaAzsBYwNlAeUBwgGzAQAB/wHCAbMBAAH/A0kBhwMHAQoMAAMW + AR8BAAHGAewB/wEAAcIB7AH/AQABwQHsAf8BAAHCAe0B/wEAAcMB7gH/AQABxQHuAf8BAAHGAe8B/wEA + AcUB8QH/AZcB0AHnAf8B8QHtAe4B/wNKAYkcAANOAZkBAAGoAQAB/wEAAaoBAAH/AQABqgEAAf8BAAGq + AQAB/wNOAZkwAANJAYgDYQHuA2EB7gNTAaoDDQERGAADBQEHA10B0gHCAbMBAAH/AcIBswEAAf8BwgGz + AQAB/wHCAbMBAAH/AcIBswEAAf8BwgGzAQAB/wHCAbMBAAH/AcIBswEAAf8BwgGzAQAB/wHCAbMBAAH/ + A10B0gMFAQcIAAMWAR8BAAHLAfAB/wEAAcgB8AH/AQAByAHwAf8BAAHJAfEB/wEAAcoB8gH/AQABywHz + Af8BAAHNAfQB/wEAAcwB9gH/AZsB1gHtAf8B9AHuAesB/wNIAYUUAAMNAREDTgGZAQABswEKAf8BAAGy + AQgB/wEAAbcBEAH/AQABtwEQAf8BAAGzAQoB/wEAAbMBCgH/AywBRCgAA0MBdwPMAf8DxQH/A74B/wOy + Af8DSQGIGAADGgEkAcYBtwEAAf8BxgG3AQAB/wHGAbcBAAH/AcYBtwEAAf8BxgG3AQAB/wHGAbcBAAH/ + AcYBtwEAAf8BxgG3AQAB/wHGAbcBAAH/AcYBtwEAAf8BxgG3AQAB/wHGAbcBAAH/AxoBJAgAAxYBHwEA + AdEB9AH/AQABzwH1Af8BAAHPAfUB/wEAAdAB9gH/AQAB0QH3Af8BAAHSAfgB/wEAAdMB+AH/AQAB0wH6 + Af8BoAHaAe8B/wH9AfIB7gH/A1oBvRQAAyMBMwEAAb0BGQH/AQABuQESAf8BAAG+AYEB/wM8AWYDQwF3 + AQABvAEVAf8BAAG8ARUB/wNcAcwDDQERIAADGAEiA14B3QPWAf8D1gH/A8wB/wO+Af8DYQHuAxgBIhQA + AxkBIwHLAb0BAAH/AcsBvQEAAf8BywG9AQAB/wHLAb0BAAH/AcsBvQEAAf8BywG9AQAB/wHLAb0BAAH/ + AcsBvQEAAf8BywG9AQAB/wHLAb0BAAH/AcsBvQEAAf8BywG9AQAB/wMZASMIAAMWAR8BAAHWAfcB/wEA + AdUB+QH/AQAB1AH5Af8BAAHVAfkB/wEAAdYB+QH/AQAB1wH5Af8BAAHXAfkB/wEAAdgB+gH/AQAB1QH0 + Af8B2AHnAe0B/wHxAe8B7QH/AxwBKBQAA0MBdwNeAd0DQwF3CAADXAHMAQABwAGCAf8BAAHAAYIB/wNO + AZkgAAMYASIDXgHdA9YB/wPWAf8D1gH/A8UB/wNhAe4DGAEiFAADGQEjAdABwwEAAf8B0AHDAQAB/wHQ + AcMBAAH/AdABwwEAAf8B0AHDAQAB/wHQAcMBAAH/AdABwwEAAf8B0AHDAQAB/wHQAcMBAAH/AdABwwEA + Af8B0AHDAQAB/wHQAcMBAAH/AxkBIwgAAxYBHwEAAdoB+AH/AQAB2QH5Af8BAAHYAfkB/wEAAdkB+QH/ + AQAB2gH5Af8BAAHbAfkB/wEAAdsB+gH/AQAB3AH6Af8BAAHbAfwB/wGsAd8B8AH/AfcB8AHuAf8DTgGV + GAADDQERDAADIwEzAVoCYQHuAQABwwGIAf8BAAHDAYkB/wNDAXcDDQERHAADSQGIA98B/wPWAf8D1gH/ + A8wB/wNTAaoYAAMZASMB1QHJAQAB/wHVAckBAAH/AdUByQEAAf8B1QHJAQAB/wHVAckBAAH/AdUByQEA + Af8B1QHJAQAB/wHVAckBAAH/AdUByQEAAf8B1QHJAQAB/wHVAckBAAH/AdUByQEAAf8DGQEjCAADFgEf + AYEB3QH5Af8BAAHcAfoB/wEAAdwB+gH/AQAB3QH6Af8BgQHeAfoB/wGCAd4B+gH/AYMB3wH6Af8BhQHg + AfoB/wEAAd8B+wH/AbQB4gHxAf8B9wHxAe8B/wFnAlkB8gMNAREoAAM8AWYBAAHIAZMB/wEAAcUBjwH/ + AQAByAGTAf8DLAFEIAADTgGZA2EB7gNhAe4DUwGqAw0BERgAAxoBJQHaAc8BjQH/AdoBzgGNAf8B2gHP + AY0B/wHaAc8BjQH/AdoBzwGNAf8B2gHPAY0B/wHaAc8BjQH/AdoBzwGNAf8B2gHPAY0B/wHaAc8BjQH/ + AdoBzgGNAf8B2gHPAY0B/wMaASUIAAMWAR8BhwHgAfkB/wGGAeAB+gH/AYYB4AH6Af8BiAHhAfoB/wGK + AeIB+gH/AYwB4gH7Af8BjgHkAfsB/wGQAeQB+wH/AYsB5QH8Af8BugHmAfMB/wH3AfEB8AH/AewC7QH/ + Ax8BLSwAA0kBiAEAAcsBmQH/A1MBqgMYASIkAAMYASIDIwEzIAADEQEXAeIB2QGnAf8B4AHWAaAB/wHf + AdUBnwH/Ad8B1QGfAf8B3wHVAZ8B/wHfAdUBnwH/Ad8B1QGfAf8B3wHVAZ8B/wHfAdUBnwH/Ad8B1QGf + Af8B4AHWAaAB/wHiAdkBpwH/AxEBFwgAAxcBIAGRAeQB+gH/AZEB5QH7Af8BkgHlAfsB/wGVAeYB+wH/ + AZcB6AH8Af8BmQHpAfwB/wGcAeoB/AH/AZ4B6wH8Af8BnAHsAf4B/wG+AecB8wH/A1YBsQMtAUU0AAMs + AURYAAM4AV4DWgHFA1wByQNcAckDXAHJA1wByQNcAckDXAHJA1wByQNcAckDWgHFAzgBXgwAAwcBCgFh + Al4B2gGbAekB+wH/AZ0B6gH8Af8BnwHrAfwB/wGiAewB/AH/AaQB7QH8Af8BpgHuAfwB/wGoAe8B/AH/ + A18B+wM0AVTYAAMEAQYDGAEhAxcBIAMXASADFwEgAxcBIAMXASADGAEhAxEBF/8A2QADAgEDAwABAQ8A + AQEDAAEBAwABAQMAAQEDAAEBDAADBAEFjAADBgQIAQsDEAEWAxMBGgMUARwDFQEdAxUBHQMUARwDFAEb + AxABFgMKAQ0DCAELCwABAQMHAQkDIgExA0ABcQNDAXcDRAF5A0QBegNEAXoDRAF6A0QBegNEAXkDQwF3 + A0IBdAMpAT8DDAEQAwABAQQAAwQBBQMJAQwDCwEPAw0BEQMHAQkDAQECAwQBBQMEAQUDAQECAwUBBwMN + AREDCwEPAwkBDAMEAQUIAAMEAQYDCgENAwoBDgMMARADDgETAw4BEwMPARQDCgENAwsEDwEUAwcBCgMH + AQkDCgENAwUBBwwAAwQBBgNHAYIDXAHqA2QB7ANkAewDZAHsA2QB7ANkAewDZAHsA2IB6QNAAXADBgEI + DAADDQERA2EB4QPeAf8D4AH/AuQB5QH/AucB6AH/A+kB/wLpAeoB/wLpAeoB/wLnAegB/wLlAeYB/wLj + AeQB/wNdAfADHAEoCAADCgEOAxYBHgMYASIDEQEXAzcBWgNTAaoDXgHOA14B0ANWAbEDPQFnAxMBGgMX + ASADFgEeAwoBDgcAAQEDCQEMAw4BEwMfASwDIgEyAyQBNQMjATMDMQFPA1wByQM1AVUDHwEsAz0BaANb + AcQDEwEaAwkBDAMAAQEMAANeAdgC1AHVAf8C2QHaAf8C3AHdAf8C3gHfAf8C3gHfAf8C3gHfAf8B3AHb + AdwB/wLYAdkB/wNaAb0QAAMjATMC1AHWAf8C2QHfAf8B3wHhAeYB/wHjAeUB6gH/AeQB5wHrAf8B5QHn + AewB/wHlAegB7AH/AeUB5wHsAf8B5QHoAesB/wHjAeUB6gH/Ad8B4AHlAf8C2wHdAf8DNgFYFAADTgGU + AcUBtgEAAf8BxQG2AQAB/wHAAbABAAH/AcABsAEAAf8BwwGzAQAB/wHGAbcBAAH/AVYCVAGrAwYBCBQA + A0wBjwNfAeMDXAHfA1wB3wNgAd4DXQHiAgABlAH/A2QB8QNhAdwDXAH4AgABggH/A1IBpwMHAQkQAANc + AdEC3QHeAf8C4AHhAf8C4gHjAf8C4wHkAf8C4wHkAf8B4gLjAf8C4gHjAf8C4AHhAf8DVwG3EAADIgEy + AdkB2AHXAf8B2AHVAbYB/wHUAccBqwH/AdABvQGlAf8B0gG/AacB/wHTAcABqAH/AdMBwAGoAf8B0wHA + AagB/wHSAb8BpwH/AdQBxgGqAf8B2gHXAbYB/wHfAd4B2QH/AzUBVRAAAVYCVAGrAcIBswEAAf8BwgGz + AQAB/wHCAbMBAAH/AeAB2QGeAf8B6AHjAbkB/wHQAcYBAAH/Ab8BsAEAAf8BwgGzAQAB/wNcAckDAgED + DAADHwEsAwAB/wMAAf8BggGEAYYB/wMAAf8BjQGOAZEB/wMAAf8CAAGrAf8CAAGXAf8CAAGdAf8CAAGZ + Af8CAAGKAf8DAAH/AzABTBAAA1wB0QLiAeMB/wLkAeUB/wHlAuYB/wHmAucB/wHmAucB/wHmAucB/wHl + AuYB/wHjAuQB/wNXAbcQAAMiATIB1AHOAaAB/wHBAbMBAAH/AbQBjgEAAf8BoQIAAf8BowIAAf8BowIA + Af8BowIAAf8BowIAAf8BoQIAAf8BsQGCAQAB/wHAAbMBAAH/AdMBywGPAf8DNQFVDAADNQFXAcIBswEA + Af8BwgGzAQAB/wG/AbABAAH/Ac8BwwEABf8B6QHmAdIB/wHGAbkBAAH/AcABsQEAAf8BwgGzAQAB/wHC + AbMBAAH/A0YBfgwAAyMBMwMAAf8BAAGBAYIB/wMAAf8BAAGBAYIB/wKBAQAB/wIAAYEB/wIAAZgB/wIA + AaUB/wIAAaQB/wIAAaUB/wIAAZYB/wMAAf8DMwFTEAADXAHRAeUC5gH/AecC6AH/AekC6gH/AeoC6wH/ + AeoC6wH/AeoC6wH/AekC6gH/AeYC5wH/A1cBtxAAAyIBMgHUAc0BmgH/AcABsQEAAf8BwgGyAQAB/wGy + AgAB/wGvAgAB/wGwAgAB/wGwAgAB/wGvAgAB/wGxAgAB/wHBAa4BAAH/AcABsQEAAf8B0gHKAYwB/wM1 + AVUMAANcAcwBwgGzAQAB/wHCAbMBAAH/AcABsQEAAf8ByAG7AQAF/wHnAeMBzQH/AbgBqAEAAf8BwwG0 + AQAB/wHCAbMBAAH/AcIBswEAAf8DXAHqAwQBBQgAAyMBMwMAAf8CuAG5Af8CsAGxAf8CtgGwAf8BggGE + AbQB/wIAAbkB/wIAAbUB/wIAAbUB/wIAAbAB/wIAAbQB/wIAAbkB/wIAAa8B/wMzAVIQAANcAdEC6AHp + Af8B6gLrAf8B6wLsAf8B6wLsAf8B6wLsAf8B6wLsAf8B6wLsAf8B6gLrAf8DVwG3EAADIgEyAdUBzwGd + Af8BwAGwAQAB/wHCAbUBAAH/AcIBsQEAAf8BugGFAQAB/wG3AgAB/wG3AgAB/wG5AgAB/wHBAa8BAAH/ + AcIBtQEAAf8BwAGwAQAB/wHTAcwBjwH/AzUBVQgAAwoBDgNcAfgBxQG3AQAB/wHFAbcBAAH/AcUBtwEA + Af8BwgGyAQAB/wH0AfEB2gH/AvwB/QH/AcABswEAAf8BxgG3AQAB/wHFAbcBAAH/AcUBtwEAAf8BxQG2 + AQAB/wMcASgIAAMjATMDAAH/Ar0BvgH/ArUBtgH/A7YB/wKuAbcB/wGmAagBugH/AbEBsgG5Af8CAAG5 + Af8CAAHBAf8BAAGBAcAB/wG3AbgBwQH/AgABgwH/AzMBUhAAA1wB0QHqAusB/wHrAuwB/wHrAuwB/wLs + Ae0B/wLsAe0B/wLsAe0B/wHrAuwB/wHrAuwB/wNXAbcQAAMiATIB1wHRAaMB/wHEAbQBAAH/AcYBuAEA + Af8BxQG4AQAB/wHBAYYBAAH/AcACAAH/AcACAAH/AcEBgQEAAf8BxQG0AQAB/wHGAbgBAAH/AcQBtAEA + Af8B1gHPAZUB/wM1AVUIAAMUARwBygG9AQAB/wHKAbwBAAH/AcoBvAEAAf8BygG8AQAB/wHFAbUBAAH/ + AeYB3wGxBf8BzAHDAYIB/wHIAboBAAH/AcoBvAEAAf8BygG8AQAB/wHKAbwBAAH/AyYBOQgAAyMBMwMA + Af8BzQHMAc0B/wLEAcUB/wLEAcUB/wPFAf8CxwHFAf8B0AHPAccB/wIAAZsB/wIAAc4B/wG4AbkBxwH/ + AtIBzQH/AwAB/wMzAVIQAANcAdEB6wLsAf8B6wLsAf8C7AHtAf8B7ALtAf8B7ALtAf8B7ALtAf8C7AHt + Af8B6wLsAf8DVwG3EAADIgEyAdsB1QGsAf8BygG8AQAB/wHMAcEBAAH/AcwBrwEAAf8ByAIAAf8ByAGB + AQAB/wHIAYEBAAH/AcgCAAH/AcsBqwEAAf8BzAHCAQAB/wHKAbwBAAH/AdoB1AGiAf8DNQFVCAADBwEK + AWUCUgH0Ac4BwQEAAf8BzgHBAQAB/wHNAb8BAAH/Ad4B1QGbAf8B9wH1AecB/wH1AfMB6AH/AckBvgEA + Af8BzwHBAQAB/wHOAcEBAAH/Ac4BwQEAAf8B0QHEAQAB/wMYASIIAAMjATMDAAH/AtsB3AH/AtIB0wH/ + AtIB0wH/AtIB0wH/AtIB0wH/A9cB/wGPAZABmAH/AYsBkAHSAf8B1QHUAdMB/wLbAdwB/wGFAYYBiQH/ + AzMBUhAAA1wB0QHrAuwB/wLsAe0B/wHsAu0B/wLtAe4B/wLtAe4B/wLvAfAB/wHzAvQB/wHwAvEB/wNZ + Ab8QAAMiATIB3gHZAbYB/wHRAcQBAAH/AdIBxwEAAf8B0wHAAQAB/wHTAYsBAAH/AdABhQEAAf8B0AGF + AQAB/wHSAYgBAAH/AdMBuwEAAf8B0gHIAQAB/wHRAcQBAAH/Ad4B2AGtAf8DNQFVDAADWgG9AdQByAEA + Af8B0wHGAQAB/wHTAcYBAAH/AdMBxwEAAf8B2AHNAYUB/wHnAeEBuQH/AdkB0QGZAf8B0AHDAQAB/wHT + AccBAAH/AdMBxwEAAf8DXAHfAwABAQgAAyMBMwMAAf8D9wH/A+wB/wLsAe0B/wLrAewB/wLrAewB/wLw + AfEB/wGlAaYBpwH/Au4B5wH/AusB7AH/AvYB9wH/AZEBkgGVAf8DMwFSEAADXAHRAesC7AH/AuwB7QH/ + AewC7QH/Au0B7gH/Au8B8AH/AuYB5wH/AbIBswG0Af8CswG0Af8DSQGHEAADIgEyAeAB3AG+Af8B1wHL + AYMB/wHYAc0BiAH/AdgBzwGNAf8B2wG6AQAB/wHcAZgBAAH/AdwBmAEAAf8B2wG1AQAB/wHYAc4BjAH/ + AdgBzQGJAf8B1wHLAYMB/wHhAdwBtwH/AzUBVQwAAyoBQAHdAdEBkwH/AdYBywGEAf8B1wHMAYYB/wHW + AcoBgQH/AdwB0gGVBf8C9AHzAf8BywHAAQAB/wHYAc0BhAH/AdwB0AGSAf8DOwFjDAADIwE0AwAB/wGa + AZsBnQH/AZsBnAGfAf8CmwGeAf8CoQGjAf8CoAGiAf8BogGjAaUB/wMAAf8BlQGWAZgB/wGcAZ0BnwH/ + AZoBmwGdAf8DAAH/AzMBUxAAA2AB1AHrAuwB/wLsAe0B/wHsAu0B/wLtAe4B/wL0AfUB/wLBAcIB/wGI + AYkBigH/A08BlxQAAyIBMgHjAd8ByAH/AeIB2AGhAf8B4gHYAaQB/wHiAdgBpAH/AeEB2gGoAf8B4gHV + AZwB/wHiAdQBmwH/AeEB2gGpAf8B4gHYAaQB/wHiAdgBpAH/AeEB1wGhAf8B5QHgAcQB/wM1AVcQAANI + AYYB4QHXAaEB/wHcAdEBlQH/AdsB0AGSAf8B2wHQAZIB/wHpAeMBvQH/Ad4B1gGoAf8B2QHOAY4B/wHh + AdYBoAH/A1MBqBAAAxoBJQMAAf8DAAH/AZcBmAGaAf8DAAH/AaUBpgGoAf8CAAGBAf8CjAGOAf8CowGl + Af8DAAH/AZ8BoAGiAf8DAAH/AYcBiQGLAf8DLAFDEAADXQHKAesC7AH/AesC7AH/AuwB7QH/AewC7QH/ + AvMB9AH/AcABwQHCAf8DTgGWGAADCQEMA1wBzAHoAeQBzwH/AesB5wHTAf8B6gHnAdMB/wHrAecB0wH/ + AesB5wHUAf8B6wHnAdUB/wHrAecB0wH/AesB5wHTAf8B6gHnAdMB/wHpAeUB0AH/A14B3QMWAR8UAANA + AW4DXQHwAeQB2gGrAf8B4wHZAagB/wHhAdYBoQH/AeMB2QGmAf8DagH5A0gBhhgAAzoBYgNdAcoDXQHK + A1wByQNcAckDXAHJA1wByQNcAckDXAHJA1wByQNcAcwDQwF4FAADGAEiA0ABcQNCAXMDQgFzA0IBcwNC + AXQDOQFfIAADJgE4A04BlgNRAZwDUAGbA1ABmwNQAZsDUAGbA1ABmwNQAZsDUAGbA1ABmwMvAUkcAAMM + ARADNQFWA0gBgwNJAYcDOAFeAxMBGv8AVQABQgFNAT4HAAE+AwABKAMAAUADAAEwAwABAQEAAQEFAAGA + AQEWAAP/AQAC/wYAAv8GAAL/BgAC/wYAAfgBDwYAAeABBwYAAcABAwYAAYABAQYAAYABAQYAAeABAwYA + AeABBwYAAfwBPwYAAv8GAAL/BgAC/wYAAv8GAAr/Ab8B4QT/AYABAQGAAQEB/AP/AYABAQGAAQcB/AF/ + A/8BhwGAAQcB+AE/AfgBPwHAAQMBgAEHAfABPwH8AR8BgAEBAYABBwHAAR8B+AEfAYABAQGAAQcBwAEP + AfABDwGAAQEBgAEDAeMBDwHwAQ8BgAEBAYABAwH3AQMB+AEfAYABAQGAAQEB/wGDAfwBHwGAAQEBgAEB + Af8BwwH+AX8BgAEBAYABAwH/Ae8C/wHAAQMBgAEPBv8BwAEfDv8BnAEdBP8BwAEDAgABgAEBAYABAQHA + AQMBgAEBAYABAQIAAeABBwGAAQEB8AEHAcABAQHgAQcBgAEBAeABAwGAAQEB4AEHAYABAQHAAQMBgAEB + AeABBwGAAQEBwAEBAYABAQHgAQcBgAEBAYABAQGAAQEB4AEHAYABAQGAAQEBgAEBAeABBwGAAQEBgAEB + AYABAQHgAQcBgAEBAcABAQGAAQEB4AEHAYABAQHAAQMBgAEBAeABDwGAAQEB4AEHAYABAQHgAR8BgAEB + AfABDwHAAQMB4AE/AcABAwH4AR8K/ws= @@ -4477,282 +4430,280 @@ - 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 - XPhiBi2dAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAACTElE + QVQ4T6WST0zTYBjGG7fh2OrWP1uHimSi+BddNNxMTIwh8UbkoibcTOTgnYSTehgQmTg3EiewbE4Z2dAx + UQKaTVHm4r+Dhht486Cupe3WsS0c/Hy/hiytctLDr+/3Pc/zPmmaEgih/2JLEbORDRK1954rQF8tf8a0 + VQbzl1B9e3S/OnMn2quLTlR5xaDq0qFuVct7VE+L7lLJuPsrWTcsHZ6pvumwlecMGwBan7ccqCweG1K9 + jHtCu6MrKD9l7ispI1JmGhCcO5W0+aWS3v69/Iw7qaQbkJLahsqz9nfaHV0BpvTIcq2UNNdKSctqaZr0 + w0wAmVLCjMAbreasuu+hPmqrlwn54Y4++QE5JcdsF4pxqqs4aX1RjNOvi1NsFs75Ytx2UY7ZuyAThewt + 5fFeY71AjjVxUphEUtgK4AlEqBToK3LM9U2K0AnQarpMhO6oF0jRPQbxHhUVQ/Yv4pjdK44zl8QQNS2O + Oz9KE0150BfEMboHvH4xZPsE3rwUdpH1Ai2C39Et3KFWhAC1JgSZUSHATK4FqGXQfgh+tvfPvO7C+xxD + vI9G/DAw4urhfewT3sd8FW7vOssPM0j1fGxKu6MrKAxywYLXgX4OOD5Ld09b4VwueFko3NdcGHAmsQfz + uXZHV4DQMrF+c/c5tNBu+TXSckS4wSH+OoeUwebz2Fe92eON2h31YSAIG9BCEEQrsBNoa2VMnqVe59yH + q1yus63xFGgHNz03zuIdbYEJIAE7QAMsBBnABBgBCmubHs7grPpD1V/l30DEb4BMXPjv548hAAAAAElF + TkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAclJREFUOE9j+P//PwMlGKdm9WXPhcVn3XcmZDhWA6zWvBDhm3jtLmfv1a0ma14K4TME - wwDt2bfU+DrPP2BoOPGfpenUX662M9/4Os+dkui7GIXNIAwDuGoPX2co3/8fjsv2gdnstYf/i7ad7EI3 - BMMAxrytdkD8mSFv638QBrJ/M+Zv/cqQu+U/a/GO/0LV+3yRDcEaBpwZa7UZ09Z8ZElfs4tB9zsfg/B/ - TtbM9epM6WtzuQu27BSt2MECMwRuwNyzaoyLL1hKwySYopdrMkaujdr7UEJ/7wMlOZg4b+pKHa60VVxY - DFBnnHZKZ8HsMw7hu26VcsMUTD2p2DrtpNbbhec9lQkGYsdhWeeuI5r/+44Zf+g/bnZjwnHz291HNb+2 - H5YDihm8nXnGy5hgINbuVe2v2qP6vwaE94Kw2v/avRpgumGf4ff2Q3YcBAMxf7NOfs5GncfZ63X+Z2/Q - +Q9k/wex8zZpJpTvUEMJeHz5gDFzu5lOxCL92WHz9f4mrjVyxxsGzAwMvEAsD8RqQKzFAMHSmlEKBZoR - cgVAtgRUDqSGFyMWgIKsQMwDxAJALATEwkAsCtTIA8ScUD5IDqSGFcMAQrkOlzwA9XxjpDYQVs4AAAAA - SUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB2UlE + QVQ4T2P4//8/RRirIAirL3suLD7rvjM2OWSMVdBqzQsRvonX7nL2Xt1qsualEDY1MIwhoD37lhpf5/kH + DA0n/rM0nfrL1XbmG1/nuVMSfRej0NWCMIYAV+3h6wzl+//Dcdk+MM1ee/i/aNvJLnT1KBwQZszbagfE + nxnytv4HYSD7N2P+1q8MuVv+sxbv+C9Uvc8XWT2KZhjmzFirzZi25iNL+ppdDLrf+RiE/3OyZq5XZ0pf + m8tdsGWnaMUOFphauKa5Z9UYF1+wlIbxmaKXazJGro3a+1BCf+8DJTmYOG/qSh2utFVcMD6SAeqM007p + LJh9xiF8161Sbpj41JOKrdNOar1deN5TGSaGjFE4HYdlnbuOaP7vO2b8of+42Y0Jx81vdx/V/Np+WA4o + ZvB25hkvY2T1IIzCAeHavar9VXtU/9eA8F4QVvtfu1cDTDfsM/zefsiOA1k9imYYzt+sk5+zUedx9nqd + /9kbdP4D2f9B7LxNmgnlO9RQ1KJw0DBj5nYznYhF+rPD5uv9TVxr5I5FDcIAZgYGXiCWB2I1INZigGBp + zSiFAs0IuQIgWwIqB1LDi80AViDmAWIBIBYCYmEgFgVq5AFiTigfJAdSw4phAHn4PwMA9XxjpB7NS6oA + AAAASUVORK5CYII= - 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 - MkyJpVUAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACSElE + QVQ4T6WSy2sTURTGbxMt7tyLrRsXgeLGbSkUTFUCbvwLXChUXBhx6Vqoy1KlwsTgzk1daLEF0YZW7KJp + XmbyTibPmWQemckklTYEezzn0mQS0ZUDX+4j8/3u+e4ZBgD/Jf4zGAxYv99nbcNgP4+O2Mnx8QWpVHqW + zWSCxUJBwLmQz+UCxWLxeq/XY3KjwTRN+wugbTDLspjaai1k0unTQj4PaIZqpQIIgM2PHz7btn1OUZR/ + Ai4Zhj6DhqdkIHOjXgdFkfn46uUavN/Y2MH/LxpY7QjQ758wLO2+rmu/EHCKUaDTsSCdEmFvdxcQDLgP + 0cghbG99glg0+q5WrToA0zQZvvCWXiIzGbq2DaKYhBcrK7C//x2aTYVXcRZnDyM6gA7mNtttYRxgmSYY + ug47X7/gqVtA91GWJD6iOZROpRyAZZmUfwKAQK5u1+aS5QbkslkyQ0oUQ2Iy6QBMs00ROGAcwnU2x8xk + BDTCj0QilIjHHQDdqKqqgqq2OOBPEUCSShCPxbiikUgI5QB07ClekkDtIgh2Y0KapvLsh+EwhA8OAE// + hqMDaOKHUa/VBCoTvzLed7p1Es0VWeb58VQe4/X6+psrs7NjFeg6w/YE6ZRKuQy1WhUQyEXQVrMJa6ur + mx6P5861ubm70273VcbY9Ajg8/lYMBB4Tj0m8SrwVBLNCfBwefkRmvjjQrlRIwDtnXe5Zm4sLj646fU+ + Rvlveb1PUP7bS0v+hfn5e2i6jHKTcagRABdTuCYNn+F6fI/MU5MAYL8BnRvTMpRYdPwAAAAASUVORK5C + YII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAArRJREFUOE+l01tIU3EAx/GBlAQVCkVvTZMI1B6SijCkhx566MIqJbEVFZqplTmVSZa2 - zOsslWLdzMjMJCjDaWoPywdzrfA+15zOy9zV7cw5zXbO2fj13wFHom8e+HI48P9/zv+c/zk8ALz1FJjs - maqKpI1PEhiTLJ42Pye9iKcttfG0tc5fgsf86thaN+IA92BeKGuWsV7bS3hna+G1v4bX8QY+qgE+ZyN8 - riauP+ZPpTNObPwf4oD5vuxwxvAI7MxDsMYqsKYasObH8Fpk8FqfwQ/7Zp9iwdIFB7VotNtnJU4nFeyf - ywFOVQafniwBM/mAVARmqphUCma6HKxBysFeYxncpk643B5QlAME2RcA7N3JfHq8EMx4Ppix2+R8F4y+ - AMzEPZKEQ9mJO5g3yDE3/xcOh32aIBsCgK1LyPeMikFrRaB/Z5FzNujRXECXD4wRiKCs7iZck82gXEt+ - IG/5PXCPYPp6jr80IoJnOJ2UBlqdDnbkBgaHBPg1dIKgGXBrSkDZraCccx6y/G0rgMnWeP5CfyYWeq9i - sTcFbN81MAPpkKnCUKHcjsVBIZZ0TXC6fbDZrI2rdmH042n+3M/rcCmTQfVcgk6ZCK0qCTXfI1HeHQG1 - SgDtcBEsZAWm/nfFqwD1+1N8e3caXF1XoP52BpmKMOQoIlCg2INCUo5iNzI6t0Cp/wCPpqViFfCj7ni4 - QZEKU8dFaNoTUNl2kEvUGo1MeRSkbTGo7IxDx4Acmp666lXAwFtBiPZLCjPy+Ty0zUkwtFzAlFyI1IYY - JNZHQ992FvoOCbTynHpr+8ldK4AgHndsFl/eL6jOjSuUZh2WVN6KLaoUxd4/WrLXeKQs2i3JPiQVC6PE - ZFwEKYzMCSeFBL4DchG05o+yI3RryIGdoYEt4/E2kbH+gpfnrOtX9sP/AIt1021BwrQaAAAAAElFTkSu - QmCC + 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 + 0fhxRPQT31CSrH0I1CIAAAAASUVORK5CYII= - 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 - qLnKOhNqAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACwUlE + QVQ4T6WSXUhTYRjH37kUxciKbgq66CIYrUK7KZIgaVYQBRVBBGUgGBKYFUUX0YWQlN4VKrpYBsYojZoX + fiQTvbEPNre5D93Zps61re187EvTIfnvOZN5hOiqF/7n8L6c/+88z/95GYD/Uu6xurrKstksEwSeLS0u + spXl5aKA3/94Znra4Pf59LOBgJ7zel/5/b6KTCbDwuEwi8VifwNEUWCJRILFY7Fj0x7PGplAZgTn58Fx + XvSbTEPpdKowEon8E7CHqthLhvvczLr5RyiESCSce7e9fIG+3t7xYDBYJgiCAshmV1gmk67j+fhvAqyJ + goBkMgm3y4XxsTEQGHSOSasFgwMDsE1OviWIApAkiZGpR/5INsuGdCoFt8eNltZWfJmYQDQayVWRa8fr + HaMWFUCS+pZE0ZAHEBDJpSXw3AxG3xsxNDICzu/H3OwsfBwHMps9brcCSCSoAlFYB0gipISEwIMGOI9o + 4Dl6GHN1NxDycfByPtBk5NbMLqdTAUiSyHieN/BCHNLyL7ifPMJQMUOgpRm+d0YMl6jw9dpleHx+kBFT + DofZYbcrADlRGoshFo9BpL8PnjwO4/YSOJub4Oo2wLijFJ+0+2GjLOwOB4VpNVstFgXAx+OMQjLI4xIo + /b5z1WgrK8bn2hqMPryH9p2l6C4/AOv3b7BYLLDbbONOh0MBROlihBYWDAvBIH5SiDbTRzzdtQ09ly7g + w61aNG0txGDrc0x5PLkWOjs69Ae1WgVAN4/ReN7ICc9T0lEK0zYyjNc3r0N/9Qqs/Sa0d3WZNBrN+UNa + 7cUitXofY2zLBqCivJzpOzufyRXICtO8YzwPIZUGTy0JiQRu19c3kCm3Ckhq0gZAPpOpp6qq6k7rdHdI + jWd0urukxrPV1Y0nKitr1CrVbjKqZGNeGwDaqGgvK7/y+81nBZvN6wCwP2pNqLkfzIVuAAAAAElFTkSu + QmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK6QAA - CukB/XXO0wAAAclJREFUOE9j+P//PwMlGKdm9WXPhcVn3XcmZDhWA6zWvBDhm3jtLmfv1a0ma14K4TME - wwDt2bfU+DrPP2BoOPGfpenUX662M9/4Os+dkui7GIXNIAwDuGoPX2co3/8fjsv2gdnstYf/i7ad7EI3 - BMMAxrytdkD8mSFv638QBrJ/M+Zv/cqQu+U/a/GO/0LV+3yRDcEaBpwZa7UZ09Z8ZElfs4tB9zsfg/B/ - TtbM9epM6WtzuQu27BSt2MECMwRuwNyzaoyLL1hKwySYopdrMkaujdr7UEJ/7wMlOZg4b+pKHa60VVxY - DFBnnHZKZ8HsMw7hu26VcsMUTD2p2DrtpNbbhec9lQkGYsdhWeeuI5r/+44Zf+g/bnZjwnHz291HNb+2 - H5YDihm8nXnGy5hgINbuVe2v2qP6vwaE94Kw2v/avRpgumGf4ff2Q3YcBAMxf7NOfs5GncfZ63X+Z2/Q - +Q9k/wex8zZpJpTvUEMJeHz5gDFzu5lOxCL92WHz9f4mrjVyxxsGzAwMvEAsD8RqQKzFAMHSmlEKBZoR - cgVAtgRUDqSGFyMWgIKsQMwDxAJALATEwkAsCtTIA8ScUD5IDqSGFcMAQrkOlzwA9XxjpDYQVs4AAAAA - SUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAB2UlE + QVQ4T2P4//8/RRirIAirL3suLD7rvjM2OWSMVdBqzQsRvonX7nL2Xt1qsualEDY1MIwhoD37lhpf5/kH + DA0n/rM0nfrL1XbmG1/nuVMSfRej0NWCMIYAV+3h6wzl+//Dcdk+MM1ee/i/aNvJLnT1KBwQZszbagfE + nxnytv4HYSD7N2P+1q8MuVv+sxbv+C9Uvc8XWT2KZhjmzFirzZi25iNL+ppdDLrf+RiE/3OyZq5XZ0pf + m8tdsGWnaMUOFphauKa5Z9UYF1+wlIbxmaKXazJGro3a+1BCf+8DJTmYOG/qSh2utFVcMD6SAeqM007p + LJh9xiF8161Sbpj41JOKrdNOar1deN5TGSaGjFE4HYdlnbuOaP7vO2b8of+42Y0Jx81vdx/V/Np+WA4o + ZvB25hkvY2T1IIzCAeHavar9VXtU/9eA8F4QVvtfu1cDTDfsM/zefsiOA1k9imYYzt+sk5+zUedx9nqd + /9kbdP4D2f9B7LxNmgnlO9RQ1KJw0DBj5nYznYhF+rPD5uv9TVxr5I5FDcIAZgYGXiCWB2I1INZigGBp + zSiFAs0IuQIgWwIqB1LDi80AViDmAWIBIBYCYmEgFgVq5AFiTigfJAdSw4phAHn4PwMA9XxjpB7NS6oA + AAAASUVORK5CYII= - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAAiNJREFUOE+l0s1rE0EUAPCXtKKSiwgFSZNsWymKV3tS0oJgPRW9+q8oeFGLUDT9G0Sw - x3xpdtuDzSYmWQPdmKYktdlsvhqSNCkJSYibj52+WZtSlrIXB37L7sx7j9k3A4QQ+B+gqmMNISqcnjaZ - fF5+nctJ6+idzvtCIf/m5KR+V1EUGAwGGqAfVL/fv3Z09CdycJAiRg4PM2Kv17MoykDLg3Q6DZlMBpLJ - 38s8HyThcMhYiCfRaPSpIAhAQavVgna7DY1G4zbHccd+n4988/uvRNcCge/NcqlkrddqUKtWAUajkYY2 - UpZlW4jn13Enm+iTjgu/P+CO52n8cDjUXBSgk5XK8StZzpVQERV06FwZY95Omk4bD6ViEXBLkJOkpVgs - SoRYzJgQI6lUykl7R0EJk8vlMkjZ7AOOY8nOzrYhjmXJ/n7yIZ4GNh8LdDodTbfbhXg8/sLn9YY8bncE - /dSJeD2esCiKL2m/xuOx5uJFVVXAS7KE//lZkrJb6KvOFq59qVarjyeN1wooyl/tRjWbDUciIfbEvT1i - JCGKw0qlco8ef71eA7i/uAjP19bglyA8ikYiZHf3hyEawweDT1acTrgzMwOTMWWzWi0fNzbcbCBAL8uV - WDZANl2ubcZuv4WJ08gEU/hAN00ANrPJZHfMzjoX5uZW5xnm2WULDLPK2GwrGOPAWDvmWJCZFqDM6Pp5 - 1cmuMA4D/qHvkzGNsTfOc+AMHmWVxXCkGWAAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAryAAAK8gE9UvcRAAACH0lE + QVQ4T6XSzWsTQRQA8Je0opKLCAVJN9m2UhSv9qSkBcF6Knr1X1HwohahaPo3iGCP+dLstgebTUyyBrox + TUlqs9l8NSRpUhKSEDcfO32zNaWEshcHfsvsznuP2TcDhJD/Apo20hGiwelpg83llNfZrLyO3k14n8/n + 3pyc1O6qqgr9fl8H9IXq9XrXjo7+hA8OksTI4WFa6na7FlXt63mQSqUgnU5DIvF7WRACJBQKGgsKJBKJ + PBVFEShoNpvQarWgXq/f5nn+2Of1km8+35Xomt//vVEqFq21ahWqlQrAcDjU0YYoisIEBWEdd7KJPk1w + og+443kaPxgMdBcFqHL5+JWiZIuogPIT6LcSxrwdN52CYqEAuCXIyvJSNBohYjRqTIySZDLpoL2joIjJ + pVIJ5EzmAc9zZGdn2xDPcWR/P/EQTwObjwXa7bau0+lALBZ74fV4gm6XK4x+Tgh73O6QJEkvab9Go5Hu + YqJpGuAlWcL//CzLmS30dcIWrn2pVCqPxz3TC6jqX/1GNRp1ezwudaW9PWIkLkmDcrl8jx5/rVYFuL+4 + CM/X1uCXKD6KhMNkd/eHIRojBAJPVhwOuDMzA+MxxVitlo8bGy7O76eX5Uoc5yebTuc2a7PdwpxpZIIp + fKCbJgDGbDLZ7LOzjoW5udV5ln122QLLrrIMs4Ixdoy1YY4FmWkByoyu/6s6HhiHAefofDymMfbGeQ7A + GR5llcXmiNwEAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK8gAA - CvIBPVL3EQAAArdJREFUOE+lkV9IU2EUwI+u0spMESorqSzswVKz0FxChNJDWVJkUS8N6XGKkZWlDwUW - lRCERfViROKW4QZO3TTnZmNuzqbTbWxz/2AuZeqWW3rnFu7r3GnTkW998Lvnu9895/edwwVCCPwP4WKK - oiAYDIb3CwsL+ywWS5PD4aibnnYddrvdsLS0tC50frhofn4efD4fBAIBWrDXYjG7TEYjsdtsAyjJCYVC - KAgBHdcSJaBv8nm94PdTgPs92rEx0/CwmhgNhmk/Re0IBgPhC9YSEbhcrmNOp5PpRQGNe3YWJicnDyoV - Cr9SMUDM5vE3c3M/wePxRBERyGTfPkglkt9TU1MFdBLGGI1G86lPLA5JJH1kaEg1qNfrQa/XRdDpdOHx - ww+VavCBUNhFRCJhwGqxFMnlcl5Hh4DQZ11dnUShUHy12+2A35axWsFms60KcIT0fqlU8qW1lfDa2sLw - ebxl+Hxi0GpZsuamFLWAB8PdHWBQKcDn9qwK6C5mZmYyUODmtLSQz1wu4XI4hINRPaJ51v3u1b3nF4ud - 8paPu9UiAegHZP8KAouLoNNqd4p7e2sE7e0ioVDY3N/Tc+01+1bD3ZNHSF1hNmm4cs6h4LemGoeU0QKZ - TEYXg3NiAsZNJtCMjIDBYAClgB9Xe/6Mtio/k9ScziXVBUfJ07IS06hUnEb5fq2OALg2xMZCIZMJ5SwW - VFZULMdyFnBf1Kc8Ki3+zs7LJFWncgibmeWtv3F5/IfVnBz5CwwUxNKWdVZa6i548vB+wuPrpaO3iwqo - zqb30HiH/ba2rORqlAAlDGQzshXZhmynQWcSkpCZcejAzcLjusbqipfVZRd6Lp0tTl8riMHkJCQDyUJy - kTwkf4U8lGRvYjBy9icnVibGx53A95j1OojHgi1IwkoXiRgjYNHGv1PieVjwB93nOGCzreD+AAAAAElF - TkSuQmCC + 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 + d4FGU18o1wAAAABJRU5ErkJggg== - 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 - 7uD50DWEQQAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAJHElE + QVRoQ9WXe3BU5RnGA+GiFOQiFKgVemEsto4jY23BIjqgjB2ntZex7cjYgaE3p+rYcgmBkIBkExJCrktC + ruRKrpvdzW6S3WxISDb3hCTAtFNrqUwLbS1Wx5FRUezX5znsSU/OvtkNyD+Z4cc55/ne93nf7/vOnnMS + oZSa0ojiVEIUpxKieDsYGR7+5rmzZ61nR0fjcL5EirkdiOJnBU1vHB0ZuY7GFcH1+fPnzi2UYj8rojgZ + +vv67kdzzw0NDnzFPDZ85kzpYH+/QozG0MCAGh0dfTo4bmgD+ElHZ+ci89hkEcVwDPT3/wZNXgcKfICJ + /Mw43tfTU9bX26N0ent6OJEfG2OQUxjIV2eGhi4j5gHj+GQRxVAMDQ0tHhwY+LCnu1t1+f2qu6tL4frd + keGRr3Ecja7C2FvUjfT19ra4XY2zGDM8PLydO8N8gjF6OI11JosohmJocHAli3Z2dIzh7+zUJoGV9AwO + DL7n7xw/TjhhjP8JK36aDZvH4dkl1QuHKIbi7MjItNPt7TVA6bS3tamO06e1JtkMr43jeoy+Y+ax021t + nyJ/u1QvHKIYjrZTp77f1tqqzJzy+dSpVl+QrsMxxgSP+d71eZojpVrhEEUjDQ7nSp/Xu7by5MnZutbq + 873o87UoX8vtodXXctXr9dyj+6PeihaPZ21VefldujYRoqgD85ex5Vd7cWvgR/fH7u7uKGx1nL+z4z1v + c7PyejwT0uLxqhZvAGFcxwMfTqLb7z+HW2l3f29vOp5iWs2uzs4LTW73Q1JvOqJIvF7vctzP/6V5U2Oj + Vszf0YlCXVpTjW63phtpbmrSjq6GBuWw25W9vl7D6XAot8ulmhljiNehF25L7ffB34ruQw0L1uN2u6ZL + PRJRJP6OjjXNTY2qwcniDWjKqZ0TnlMbj0tr1lZbq+pqa0fqbbZ8TCIa2gFcV4I3bXV1NybjdgXlG/3H + NKeTC/c2fvxzpB6JKJL6uro7nQ77X4FywpSFtaN+HoAFudpoUKFBLybymOT3xp9fv7PB6dyCuDf0iZi9 + gv3tyuGwH5P8dERRp8Hh+Lq93tZtt9mUA6srwbHamhoUdsZKHmbwHlmIXWmsQ47kp0Nf1M7CTk64+kQU + jfjaWyJtdbWDvDUkamuqsd2ueCk3BDMwie7a6mrRk9TX1SYLeUGIohkYJtdUVykz1VVVqr6+vk/KCQde + el/GLlyVfAlu4e9JeWZE0Uh1ddV9eAdcrKo8qczUYAXxtHpGypsM+E3kVFVWBvmiHo6VDS6Hc76UZ0QU + KysqNlaUlbkrysvawFWgKsrLx3ES4Af5t4+vXRt7wd0seERv4CJI/jcouwxa0Us5JrZC8ggSyktLV5eW + FF8rKy1RoSgvK+PTp8mcfzOcP39+cV1tzTuSv8AZl9s1w+wx7oJgAjuKTxSpkhMnJqS4qEghDo9QZ5E5 + /yaZhQm8WVpcLNYxU1ZS8qDZY9wFQXPPFubnq6KCggnhOIvi0Vltzr8Z/n3lylw8gi+fKCwU62gUjp1f + xW272Owx7oIUFudFFuTlFeTn5qr8PJKncD0OjrFofb1txJx/M+DviNX4DXwi1dDqsD77yM19vyA/7wXJ + I0jQycs7vvpEUeEjebnHLbnHcz4FaoycHJWHI4p/hI+8+6T8yeDxNL/E39LxnOz/ewf8cfw7mn4eu30/ + JrJcyieiaAYFKnKOWVVO9rExjlmzVAluI3yIZUk5k2AaHgJ/4Cpnm7yzARbuV0JOEKJoJttqzbdmZSoz + x6xW7sLH+NhaJ+WFAh9psVz9rMyMIF9yPDt7q5RnRhSNZGVk/DIzPf0aUGYy0lK17cZnwT/9fv83pHwJ + /EG0lW9xNp+Znhbke8M77SJqr5fyjYiiDhq0pqceVempqTKYQGrKEe2+tdls//H5fM9LPjqXLl2ai2/9 + BL59rWg+7WiK5iF6gzTURkxIT1EkWenpXzp6JFkdRYPhOJKcpLBaCm9Mvtz6PM2eV9vb29eNjo6uGBoY + WIU37ib8gZKIL8uLfMekonHmSF5mUlNSLmRmZMyUeiSiSLIy0lcnJx1WRyZJcmKiSj6ciJXNxLO7UPsU + wDfNh/gswVu9VHsscrWTEhO0OMlDJDnpXwX5+XdIPRJRJFnpGZGJFkvb4QSLOpyQAHBMTPgLuMhrNpLE + ow6uqSda4lVC/CGViPgkTIqMaZYbXnKu5v86jv+4UY9eFvjE/07qT0cUdQ7Exc6FyX4UL4b5T6mlpqbO + TIiPL2FDOIaBMeHjLIcOfYIJ/5z+KUlJ81BzpwU1EywWrWYoRDEcWNGN8a8dVLeLQwcPvCPVmQyiGI6D + B+J2HoyLVbeRj7ALD0u1wiGKocDqL4jbH/MWUEZiteN+FRszXh8bh66PSTHQHFK9cIhiKNDoyph9e9V+ + AzF7o1XMvuhDuN83xOIE/64bx7WYfXvfRqM/fO1A3EM4tzPHOL4ves8t/WkqiqF4/9oHEdFRu+1790Qp + Eh2lHcd9VqMZtz6ug4lF6ePWtKMzoV3Qx+DHCbxo9JgsomgkMiLCyDQcIvbs3jVv984dyWi+DUfL9m3b + 5kCezhDmQCtBjNLYtVNFAZw/F/DTYmKio1dBL9oTtbtx147f/zowNi3AWE3qodD+CwTPAHeAz4H5YCFY + DD4PloHl4B5wL8KXg3lgKZgP7oX+VTI9MvLuX2zbephNYyJa8zx+d/PmZ5inx+F8GVgAlgB60eOLgDUY + x5qszR7YC3tib+yRvY6bAIUFYAVYDR4ED4Nvg3VgPdgAHgdPgI1Y7o3w4PFJXJOnwGZez54164kXtmyx + v/rKy1deeem3l370g2dTELseY1pMIPZJXG+iB843AR7pzRqsxZqszR7YC3tib+yRvWp/H+sTiARzwVKw + EqwCDH4AMHENoMkj4FtgLaA5eRR8JwCLPoamHgVrvrBs6VPz5sx5nOdolmM6ejxzdR960ps1WIs1WZs9 + sBf2xN7YI3vVbkVtAoFJkOkcADPBbMDtmgO4dfPAXYBbyRXgti4KcHcAbvcSgoZ5aywC1HkraDpgjB6v + 59OLnvRmDdZiTdZmD+yFPbE39jjW99jJrUIzo6F+PRET5d0qojiVEMWphChOHVTE/wD17uD5qgI4NAAA + AABJRU5ErkJggg== diff --git a/Ember Media Manager/frmMain.vb b/Ember Media Manager/frmMain.vb index 8ed520d..a82546a 100644 --- a/Ember Media Manager/frmMain.vb +++ b/Ember Media Manager/frmMain.vb @@ -25,12 +25,15 @@ Imports System.Linq Imports System.Reflection Imports System.Text.RegularExpressions Imports EmberAPI +Imports RestSharp +Imports WatTmdb + Public Class frmMain #Region "Fields" Private fLoading As New frmSplash - + 'Private aaa As New V3.Tmdb("aa") Friend WithEvents bwCleanDB As New System.ComponentModel.BackgroundWorker Friend WithEvents bwDownloadPic As New System.ComponentModel.BackgroundWorker Friend WithEvents bwLoadEpInfo As New System.ComponentModel.BackgroundWorker @@ -73,7 +76,7 @@ Public Class frmMain Private ReportDownloadPercent As Boolean = False Private ScrapeList As New List(Of DataRow) Private ScraperDone As Boolean = False - Private sHTTP As New HTTP + Private sHTTP As New EmberAPI.HTTP Private tmpLang As String = String.Empty Private tmpTitle As String = String.Empty Private tmpTVDB As String = String.Empty @@ -668,11 +671,13 @@ Public Class frmMain If Me.btnSortDate.Tag.ToString = "DESC" Then Me.btnSortDate.Tag = "ASC" Me.btnSortDate.Image = My.Resources.desc - Me.dgvMediaList.Sort(Me.dgvMediaList.Columns(0), ComponentModel.ListSortDirection.Descending) + 'cotocus 201303 Wrong Column! DateAdd column is 48 instead of 0 (ID)! + Me.dgvMediaList.Sort(Me.dgvMediaList.Columns(48), ComponentModel.ListSortDirection.Descending) Else Me.btnSortDate.Tag = "DESC" Me.btnSortDate.Image = My.Resources.asc - Me.dgvMediaList.Sort(Me.dgvMediaList.Columns(0), ComponentModel.ListSortDirection.Ascending) + 'cotocus 201303 Wrong Column! DateAdd column is 48 instead of 0 (ID)! + Me.dgvMediaList.Sort(Me.dgvMediaList.Columns(48), ComponentModel.ListSortDirection.Ascending) End If End If End Sub @@ -867,9 +872,9 @@ Public Class frmMain If Not IsNothing(Me.MainFanart.Image) Then If String.IsNullOrEmpty(Master.currShow.Filename) Then - Me.MainFanart.Image = ImageUtils.AddMissingStamp(Me.MainFanart.Image) + Me.MainFanart = ImageUtils.AddMissingStamp(Me.MainFanart) ElseIf NeedsGS Then - Me.MainFanart.Image = ImageUtils.GrayScale(Me.MainFanart.Image) + Me.MainFanart = ImageUtils.GrayScale(Me.MainFanart) End If End If End If @@ -995,7 +1000,7 @@ Public Class frmMain Me.MainFanart.FromFile(Master.currShow.SeasonFanartPath) Else Me.MainFanart.FromFile(Master.currShow.ShowFanartPath) - If Not IsNothing(Me.MainFanart.Image) Then Me.MainFanart.Image = ImageUtils.GrayScale(Me.MainFanart.Image) + If Not IsNothing(Me.MainFanart.Image) Then Me.MainFanart = ImageUtils.GrayScale(Me.MainFanart) End If End If @@ -1227,6 +1232,11 @@ Public Class frmMain ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.MovieScraperRDYtoSave, Nothing, DBScrapeMovie) + Dim currentDB As Structures.DBMovie = Master.DB.LoadMovieFromDB(Convert.ToInt64(dRow.Item(0))) + If Not DBScrapeMovie.Filename = currentDB.Filename Then + DBScrapeMovie = Master.DB.LoadMovieFromDB(Convert.ToInt64(dRow.Item(0))) ' reload the DB if a module has changed the entries (renamer e.g.) + End If + If Master.GlobalScrapeMod.Extra Then If Master.eSettings.AutoThumbs > 0 AndAlso DBScrapeMovie.isSingle Then Dim params As New List(Of Object)(New Object() {DBScrapeMovie, Master.eSettings.AutoThumbs, False, ""}) @@ -3044,7 +3054,7 @@ doCancel: End If 'icons - If e.ColumnIndex >= 4 AndAlso e.ColumnIndex <= 9 AndAlso e.RowIndex = -1 Then + If e.ColumnIndex >= 4 AndAlso e.ColumnIndex <= 34 AndAlso e.RowIndex = -1 Then e.PaintBackground(e.ClipBounds, False) Dim pt As Point = e.CellBounds.Location @@ -3052,54 +3062,59 @@ doCancel: pt.X += offset pt.Y = 3 - Me.ilColumnIcons.Draw(e.Graphics, pt, e.ColumnIndex - 4) + If e.ColumnIndex = 34 Then + Me.ilColumnIcons.Draw(e.Graphics, pt, e.ColumnIndex - 26) + Else + Me.ilColumnIcons.Draw(e.Graphics, pt, e.ColumnIndex - 4) + End If e.Handled = True End If - If e.ColumnIndex = 3 AndAlso e.RowIndex >= 0 Then - If Convert.ToBoolean(Me.dgvMediaList.Item(11, e.RowIndex).Value) Then - e.CellStyle.ForeColor = Color.Crimson - e.CellStyle.Font = New Font("Segoe UI", 9, FontStyle.Bold) - e.CellStyle.SelectionForeColor = Color.Crimson - ElseIf Convert.ToBoolean(Me.dgvMediaList.Item(10, e.RowIndex).Value) Then - e.CellStyle.ForeColor = Color.Green - e.CellStyle.Font = New Font("Segoe UI", 9, FontStyle.Bold) - e.CellStyle.SelectionForeColor = Color.Green - Else - e.CellStyle.ForeColor = Color.Black - e.CellStyle.Font = New Font("Segoe UI", 8.25, FontStyle.Regular) - e.CellStyle.SelectionForeColor = Color.FromKnownColor(KnownColor.HighlightText) + 'text + If e.ColumnIndex = 3 AndAlso e.RowIndex >= 0 Then + If Convert.ToBoolean(Me.dgvMediaList.Item(11, e.RowIndex).Value) Then 'is marked + e.CellStyle.ForeColor = Color.Crimson + e.CellStyle.Font = New Font("Segoe UI", 9, FontStyle.Bold) + e.CellStyle.SelectionForeColor = Color.Crimson + ElseIf Convert.ToBoolean(Me.dgvMediaList.Item(10, e.RowIndex).Value) Then 'is new + e.CellStyle.ForeColor = Color.Green + e.CellStyle.Font = New Font("Segoe UI", 9, FontStyle.Bold) + e.CellStyle.SelectionForeColor = Color.Green + Else + e.CellStyle.ForeColor = Color.Black + e.CellStyle.Font = New Font("Segoe UI", 8.25, FontStyle.Regular) + e.CellStyle.SelectionForeColor = Color.FromKnownColor(KnownColor.HighlightText) + End If End If - End If - If e.ColumnIndex >= 3 AndAlso e.ColumnIndex <= 9 AndAlso e.RowIndex >= 0 Then - If Convert.ToBoolean(Me.dgvMediaList.Item(14, e.RowIndex).Value) Then - e.CellStyle.BackColor = Color.LightSteelBlue - e.CellStyle.SelectionBackColor = Color.DarkTurquoise - ElseIf Convert.ToBoolean(Me.dgvMediaList.Item(43, e.RowIndex).Value) Then - e.CellStyle.BackColor = Color.MistyRose - e.CellStyle.SelectionBackColor = Color.DarkMagenta - Else - e.CellStyle.BackColor = Color.White - e.CellStyle.SelectionBackColor = Color.FromKnownColor(KnownColor.Highlight) - End If + If e.ColumnIndex >= 3 AndAlso e.ColumnIndex <= 34 AndAlso e.RowIndex >= 0 Then + If Convert.ToBoolean(Me.dgvMediaList.Item(14, e.RowIndex).Value) Then 'is locked + e.CellStyle.BackColor = Color.LightSteelBlue + e.CellStyle.SelectionBackColor = Color.DarkTurquoise + ElseIf Convert.ToBoolean(Me.dgvMediaList.Item(43, e.RowIndex).Value) Then 'use folder + e.CellStyle.BackColor = Color.MistyRose + e.CellStyle.SelectionBackColor = Color.DarkMagenta + Else + e.CellStyle.BackColor = Color.White + e.CellStyle.SelectionBackColor = Color.FromKnownColor(KnownColor.Highlight) + End If - If e.ColumnIndex >= 4 AndAlso e.ColumnIndex <= 9 Then - e.PaintBackground(e.ClipBounds, True) + If e.ColumnIndex >= 4 AndAlso e.ColumnIndex <= 34 Then + e.PaintBackground(e.ClipBounds, True) - Dim pt As Point = e.CellBounds.Location - Dim offset As Integer = Convert.ToInt32((e.CellBounds.Width - Me.ilColumnIcons.ImageSize.Width) / 2) + Dim pt As Point = e.CellBounds.Location + Dim offset As Integer = Convert.ToInt32((e.CellBounds.Width - Me.ilColumnIcons.ImageSize.Width) / 2) - pt.X += offset - pt.Y = e.CellBounds.Top + 3 - Me.ilColumnIcons.Draw(e.Graphics, pt, If(Convert.ToBoolean(e.Value), 6, 7)) - e.Handled = True + pt.X += offset + pt.Y = e.CellBounds.Top + 3 + Me.ilColumnIcons.Draw(e.Graphics, pt, If(Convert.ToBoolean(e.Value), 6, 7)) + e.Handled = True + End If End If - End If - Me.tabMovies.Text = String.Format("{0} ({1})", Master.eLang.GetString(36, "Movies"), Me.dgvMediaList.RowCount) + Me.tabMovies.Text = String.Format("{0} ({1})", Master.eLang.GetString(36, "Movies"), Me.dgvMediaList.RowCount) Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") @@ -3344,7 +3359,7 @@ doCancel: End If 'icons - If e.ColumnIndex >= 4 AndAlso e.ColumnIndex <= 6 AndAlso e.RowIndex = -1 Then + If e.ColumnIndex >= 4 AndAlso e.ColumnIndex <= 24 AndAlso e.RowIndex = -1 Then e.PaintBackground(e.ClipBounds, False) Dim pt As Point = e.CellBounds.Location @@ -3353,7 +3368,11 @@ doCancel: pt.X += offset pt.Y = 1 - Me.ilColumnIcons.Draw(e.Graphics, pt, e.ColumnIndex - 4) + If e.ColumnIndex = 24 Then + Me.ilColumnIcons.Draw(e.Graphics, pt, e.ColumnIndex - 16) + Else + Me.ilColumnIcons.Draw(e.Graphics, pt, e.ColumnIndex - 4) + End If e.Handled = True End If @@ -3378,7 +3397,7 @@ doCancel: End If End If - If e.ColumnIndex >= 2 AndAlso e.ColumnIndex <= 6 AndAlso e.RowIndex >= 0 Then + If e.ColumnIndex >= 2 AndAlso e.ColumnIndex <= 24 AndAlso e.RowIndex >= 0 Then If Convert.ToBoolean(Me.dgvTVEpisodes.Item(22, e.RowIndex).Value) Then e.CellStyle.BackColor = Color.White @@ -3391,7 +3410,7 @@ doCancel: e.CellStyle.SelectionBackColor = Color.FromKnownColor(KnownColor.Highlight) End If - If e.ColumnIndex >= 4 AndAlso e.ColumnIndex <= 6 Then + If e.ColumnIndex >= 4 AndAlso e.ColumnIndex <= 24 Then e.PaintBackground(e.ClipBounds, True) Dim pt As Point = e.CellBounds.Location @@ -4134,11 +4153,11 @@ doCancel: Private Sub DonateToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DonateToolStripMenuItem.Click If Master.isWindows Then - Process.Start("https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=G4WN5KRET4K48") + Process.Start("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=VWVJCUV3KAUX2&lc=CH&item_name=Ember%2dTeam%3a%20DanCooper%2c%20m%2esavazzi%20%26%20Cocotus¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted") Else Using Explorer As New Process Explorer.StartInfo.FileName = "xdg-open" - Explorer.StartInfo.Arguments = "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=G4WN5KRET4K48" + Explorer.StartInfo.Arguments = "https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=VWVJCUV3KAUX2&lc=CH&item_name=Ember%2dTeam%3a%20DanCooper%2c%20m%2esavazzi%20%26%20Cocotus¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted" Explorer.Start() End Using End If @@ -4288,7 +4307,30 @@ doCancel: .dgvTVEpisodes.Columns(6).SortMode = DataGridViewColumnSortMode.Automatic .dgvTVEpisodes.Columns(6).Visible = Not Master.eSettings.EpisodeNfoCol .dgvTVEpisodes.Columns(6).ToolTipText = Master.eLang.GetString(150, "Nfo") - For i As Integer = 7 To .dgvTVEpisodes.Columns.Count - 1 + .dgvTVEpisodes.Columns(7).Visible = False + .dgvTVEpisodes.Columns(8).Visible = False + .dgvTVEpisodes.Columns(9).Visible = False + .dgvTVEpisodes.Columns(10).Visible = False + .dgvTVEpisodes.Columns(11).Visible = False + .dgvTVEpisodes.Columns(12).Visible = False + .dgvTVEpisodes.Columns(13).Visible = False + .dgvTVEpisodes.Columns(14).Visible = False + .dgvTVEpisodes.Columns(15).Visible = False + .dgvTVEpisodes.Columns(16).Visible = False + .dgvTVEpisodes.Columns(17).Visible = False + .dgvTVEpisodes.Columns(18).Visible = False + .dgvTVEpisodes.Columns(19).Visible = False + .dgvTVEpisodes.Columns(20).Visible = False + .dgvTVEpisodes.Columns(21).Visible = False + .dgvTVEpisodes.Columns(22).Visible = False + .dgvTVEpisodes.Columns(23).Visible = False + .dgvTVEpisodes.Columns(24).Width = 20 + .dgvTVEpisodes.Columns(24).Resizable = DataGridViewTriState.False + .dgvTVEpisodes.Columns(24).ReadOnly = True + .dgvTVEpisodes.Columns(24).SortMode = DataGridViewColumnSortMode.Automatic + .dgvTVEpisodes.Columns(24).Visible = Not Master.eSettings.EpisodeWatchedCol + .dgvTVEpisodes.Columns(24).ToolTipText = Master.eLang.GetString(883, "Watched") + For i As Integer = 25 To .dgvTVEpisodes.Columns.Count - 1 .dgvTVEpisodes.Columns(i).Visible = False Next @@ -4388,7 +4430,37 @@ doCancel: .dgvMediaList.Columns(9).SortMode = DataGridViewColumnSortMode.Automatic .dgvMediaList.Columns(9).Visible = Not Master.eSettings.MovieExtraCol .dgvMediaList.Columns(9).ToolTipText = Master.eLang.GetString(153, "Extrathumbs") - For i As Integer = 10 To .dgvMediaList.Columns.Count - 1 + .dgvMediaList.Columns(10).Visible = False + .dgvMediaList.Columns(11).Visible = False + .dgvMediaList.Columns(12).Visible = False + .dgvMediaList.Columns(13).Visible = False + .dgvMediaList.Columns(14).Visible = False + .dgvMediaList.Columns(15).Visible = False + .dgvMediaList.Columns(16).Visible = False + .dgvMediaList.Columns(17).Visible = False + .dgvMediaList.Columns(18).Visible = False + .dgvMediaList.Columns(19).Visible = False + .dgvMediaList.Columns(20).Visible = False + .dgvMediaList.Columns(21).Visible = False + .dgvMediaList.Columns(22).Visible = False + .dgvMediaList.Columns(23).Visible = False + .dgvMediaList.Columns(24).Visible = False + .dgvMediaList.Columns(25).Visible = False + .dgvMediaList.Columns(26).Visible = False + .dgvMediaList.Columns(27).Visible = False + .dgvMediaList.Columns(28).Visible = False + .dgvMediaList.Columns(29).Visible = False + .dgvMediaList.Columns(30).Visible = False + .dgvMediaList.Columns(31).Visible = False + .dgvMediaList.Columns(32).Visible = False + .dgvMediaList.Columns(33).Visible = False + .dgvMediaList.Columns(34).Width = 20 + .dgvMediaList.Columns(34).Resizable = DataGridViewTriState.False + .dgvMediaList.Columns(34).ReadOnly = True + .dgvMediaList.Columns(34).SortMode = DataGridViewColumnSortMode.Automatic + .dgvMediaList.Columns(34).Visible = Not Master.eSettings.MovieWatchedCol + .dgvMediaList.Columns(34).ToolTipText = Master.eLang.GetString(883, "Watched") + For i As Integer = 35 To .dgvMediaList.Columns.Count - 1 .dgvMediaList.Columns(i).Visible = False Next @@ -4992,6 +5064,7 @@ doCancel: Me.lblTitle.Text = Master.currShow.TVShow.Title End If + Me.lblOriginalTitle.Text = String.Empty Me.txtPlot.Text = Master.currShow.TVShow.Plot Me.lblRuntime.Text = String.Format(Master.eLang.GetString(645, "Premiered: {0}"), If(String.IsNullOrEmpty(Master.currShow.TVShow.Premiered), "?", Master.currShow.TVShow.Premiered)) @@ -5509,7 +5582,7 @@ doCancel: APIXML.CacheXMLs() 'fLoading.SetLoadingMesg("Loading database...") fLoading.SetLoadingMesg(Master.eLang.GetString(858, "Loading database...")) - If Master.DB.CheckEssentials() Then + If Master.DB.ConnectMediaDB() Then Me.LoadMedia(New Structures.Scans With {.Movies = True, .TV = True}) End If Master.DB.LoadMovieSourcesFromDB() @@ -5709,13 +5782,13 @@ doCancel: 'fLoading.SetLoadingMesg("Loading database...") fLoading.SetLoadingMesg(Master.eLang.GetString(858, "Loading database...")) If Master.eSettings.Version = String.Format("r{0}", My.Application.Info.Version.Revision) Then - If Master.DB.CheckEssentials() Then + If Master.DB.ConnectMediaDB() Then Me.LoadMedia(New Structures.Scans With {.Movies = True, .TV = True}) End If Me.FillList(0) Me.Visible = True Else - If Master.DB.CheckEssentials() Then + If Master.DB.ConnectMediaDB() Then Me.LoadMedia(New Structures.Scans With {.Movies = True, .TV = True}) End If If dlgWizard.ShowDialog = Windows.Forms.DialogResult.OK Then @@ -6423,11 +6496,13 @@ doCancel: End If End If Me.tslLoading.Text = Master.eLang.GetString(568, "Generating Actors Cache:") - If Master.GlobalScrapeMod.Actors AndAlso AdvancedSettings.GetBooleanSetting("ScrapeActorsThumbs", False) Then + If Master.GlobalScrapeMod.Actors AndAlso Master.eSettings.ScraperActorThumbs Then For Each act As MediaContainers.Person In Master.currMovie.Movie.Actors Dim img As New Images img.FromWeb(act.Thumb) - img.SaveAsActorThumb(act, Directory.GetParent(Master.currMovie.Filename).FullName) + If Not IsNothing(img.Image) Then + img.SaveAsActorThumb(act, Directory.GetParent(Master.currMovie.Filename).FullName, Master.currMovie) + End If Next End If @@ -6883,12 +6958,14 @@ doCancel: Me.Invoke(myDelegate, New Object() {dRow(0), 5, If(String.IsNullOrEmpty(eContainer.Fanart), False, True)}) Me.Invoke(myDelegate, New Object() {dRow(0), 6, If(String.IsNullOrEmpty(tmpShowDb.EpNfoPath), False, True)}) Me.Invoke(myDelegate, New Object() {dRow(0), 7, False}) + Me.Invoke(myDelegate, New Object() {dRow(0), 24, If(String.IsNullOrEmpty(tmpShowDb.TVEp.Playcount), False, True)}) Else DirectCast(dRow(0), DataRow).Item(3) = tmpShowDb.TVEp.Title DirectCast(dRow(0), DataRow).Item(4) = If(String.IsNullOrEmpty(eContainer.Poster), False, True) DirectCast(dRow(0), DataRow).Item(5) = If(String.IsNullOrEmpty(eContainer.Fanart), False, True) DirectCast(dRow(0), DataRow).Item(6) = If(String.IsNullOrEmpty(tmpShowDb.EpNfoPath), False, True) DirectCast(dRow(0), DataRow).Item(7) = False + DirectCast(dRow(0), DataRow).Item(24) = If(String.IsNullOrEmpty(tmpShowDb.TVEp.Playcount), False, True) End If End If @@ -6927,6 +7004,7 @@ doCancel: Dim hasTrailer As Boolean = False Dim hasSub As Boolean = False Dim hasExtra As Boolean = False + Dim hasWatched As Boolean = False Dim myDelegate As New MydtListUpdate(AddressOf dtListUpdate) @@ -7005,6 +7083,7 @@ doCancel: hasTrailer = Not String.IsNullOrEmpty(mContainer.Trailer) hasSub = Not String.IsNullOrEmpty(mContainer.Subs) hasExtra = Not String.IsNullOrEmpty(mContainer.Extra) + hasWatched = Not String.IsNullOrEmpty(tmpMovieDb.Movie.PlayCount) Dim dRow = From drvRow In dtMedia.Rows Where Convert.ToInt64(DirectCast(drvRow, DataRow).Item(0)) = ID Select drvRow @@ -7026,6 +7105,7 @@ doCancel: Me.Invoke(myDelegate, New Object() {dRow(0), 15, tmpMovieDb.Movie.Title}) Me.Invoke(myDelegate, New Object() {dRow(0), 47, tmpMovieDb.Movie.SortTitle}) Me.Invoke(myDelegate, New Object() {dRow(0), 27, tmpMovieDb.Movie.Genre}) + Me.Invoke(myDelegate, New Object() {dRow(0), 34, hasWatched}) Else selRow.Item(1) = tmpMovieDb.Filename selRow.Item(3) = tmpMovieDb.ListTitle @@ -7039,6 +7119,7 @@ doCancel: selRow.Item(15) = tmpMovieDb.Movie.Title selRow.Item(47) = tmpMovieDb.Movie.SortTitle selRow.Item(27) = tmpMovieDb.Movie.Genre + selRow.Item(34) = hasWatched End If End If 'Why on earth resave the movie if we just refreshed its data (causes issues with saving rescrapes_ @@ -7177,7 +7258,7 @@ doCancel: End If Dim sContainer As New Scanner.TVShowContainer With {.ShowPath = tmpShowDb.ShowPath} - fScanner.GetShowFolderContents(sContainer) + fScanner.GetShowFolderContents(sContainer, ID) tmpShowDb.ShowPosterPath = sContainer.Poster tmpShowDb.ShowFanartPath = sContainer.Fanart 'assume invalid nfo if no title @@ -7363,6 +7444,7 @@ doCancel: If(Master.eSettings.EpisodePosterCol, 0, 20) - _ If(Master.eSettings.EpisodeFanartCol, 0, 20) - _ If(Master.eSettings.EpisodeNfoCol, 0, 20) - _ + If(Master.eSettings.EpisodeWatchedCol, 0, 20) - _ If(Me.dgvTVEpisodes.DisplayRectangle.Height > Me.dgvTVEpisodes.ClientRectangle.Height, 0, SystemInformation.VerticalScrollBarWidth) End If @@ -8350,6 +8432,8 @@ doCancel: .cmnuRescrape.Text = Master.eLang.GetString(163, "(Re)Scrape Movie") .ScrapingToolStripMenuItem.Text = Master.eLang.GetString(164, "(Re)Scrape Selected Movies") .WikiStripMenuItem.Text = Master.eLang.GetString(869, "EmberMM.com &Wiki...") + .MoviesToolStripMenuItem.Text = Master.eLang.GetString(36, "Movies") + .TVShowsToolStripMenuItem.Text = Master.eLang.GetString(698, "TV Shows") Dim TT As ToolTip = New System.Windows.Forms.ToolTip(.components) .tsbAutoPilot.ToolTipText = Master.eLang.GetString(84, "Scrape/download data from the internet for multiple movies.") @@ -9019,4 +9103,53 @@ doCancel: tmrKeyBuffer.Enabled = False KeyBuffer = String.Empty End Sub + Private Sub MoviesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MoviesToolStripMenuItem.Click + Try + Dim table As New DataTable + Using SQLcommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + SQLcommand.CommandText = "Select * from Movies;" + Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() + 'Load the SqlDataReader object to the DataTable object as follows. + table.Load(SQLreader) + End Using + End Using + + Dim saveFileDialog1 As New SaveFileDialog() + saveFileDialog1.FileName = "export_movies" + ".xml" + saveFileDialog1.Filter = "xml files (*.xml)|*.xml" + saveFileDialog1.FilterIndex = 2 + saveFileDialog1.RestoreDirectory = True + + If saveFileDialog1.ShowDialog() = DialogResult.OK Then + table.WriteXml(saveFileDialog1.FileName) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Private Sub TVShowsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles TVShowsToolStripMenuItem.Click + Try + Dim table As New DataTable + Using SQLcommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + SQLcommand.CommandText = "Select * from TVShows;" + Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() + 'Load the SqlDataReader object to the DataTable object as follows. + table.Load(SQLreader) + End Using + End Using + + Dim saveFileDialog1 As New SaveFileDialog() + saveFileDialog1.FileName = "export_tvshows" + ".xml" + saveFileDialog1.Filter = "xml files (*.xml)|*.xml" + saveFileDialog1.FilterIndex = 2 + saveFileDialog1.RestoreDirectory = True + + If saveFileDialog1.ShowDialog() = DialogResult.OK Then + table.WriteXml(saveFileDialog1.FileName) + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub End Class \ No newline at end of file diff --git a/Ember Media Manager/frmSplash.Designer.vb b/Ember Media Manager/frmSplash.Designer.vb index 81eb34b..d9de873 100644 --- a/Ember Media Manager/frmSplash.Designer.vb +++ b/Ember Media Manager/frmSplash.Designer.vb @@ -22,6 +22,7 @@ Partial Class frmSplash 'Do not modify it using the code editor. _ Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmSplash)) Me.LoadingBar = New System.Windows.Forms.ProgressBar() Me.VersionNumber = New System.Windows.Forms.Label() Me.LoadingMesg = New System.Windows.Forms.Label() @@ -68,6 +69,7 @@ Partial Class frmSplash Me.Controls.Add(Me.VersionNumber) Me.Controls.Add(Me.LoadingBar) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.MaximizeBox = False Me.MinimizeBox = False Me.Name = "frmSplash" diff --git a/Ember Media Manager/frmSplash.resx b/Ember Media Manager/frmSplash.resx index 7080a7d..8852370 100644 --- a/Ember Media Manager/frmSplash.resx +++ b/Ember Media Manager/frmSplash.resx @@ -117,4 +117,1087 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAABAAUAgIAAAAEAGAAoyAAAVgAAADAwAAABABgAqBwAAH7IAAAgIAAAAQAYAKgMAAAm5QAAGBgAAAEA + GABIBwAAzvEAABAQAAABABgAaAMAABb5AAAoAAAAgAAAAAABAAABABgAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfX19X19fREREMjIyKioq + LCwsNzc3TExMbGxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmZm + KSkpCAgIBQUFBwcHCQkJDQ0NDw8PEBAQERERExMTERERDQ0NCgoKCQkJERERPj4+AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAdHR0JiYmBgYGBQUFCQkJDg4OFBQUGhoaICAgJiYmKSkpLCwsMDAwNTU1NTU1MDAw + KioqIyMjGhoaEhISCwsLDw8PQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAampqFBQUAwMDBwcHDQ0NFBQUGxsbIiIiKSoqMjIz + Ozs8Pj9AQUJDRUZISEpMTE1OUFFTU1NVT1BQS0tMREREOzs7Li4uICAgFBQUDQ0NMDAwAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBwcAgICBwcH + Dg4OFRUVHBwcKioqOzs8TlBSWFpeX2FmZ2pvZmpwZ2txZ2xzaG50aG11am93bXF5aGxzbG91Z2ptYWJj + WVpaT09PQEBALS0tFxcXDAwMPT09AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAQkJCBAQEBAQECgoKERERGxsbMDEySktNWVtfYGNnYGNoYWVqYmdsZGhuZWpwZ2xyaG11 + aW93a3F5bHJ6bHN8bHJ8anB6aG94a3F5bXJ4bG9zZmdoWlpaRUVFKysrFhYWFBQUdnZ2AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHR0dAQEBBQUFCwsLExMUKywtTE5RWl1gXF9jXF9j + XF9jW19jW15kWl5kW15kW19mXWFoXmNqYGVtY2lxZmx0aW94bHJ8bnV/bnWAbXR/aXF7Zm54Z253cXR6 + bW5vXV1dQkJCIiIiDAwMPT09AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMAQEBAwMD + CQkJHBwcREVHV1pdWVtfWFtfVlldVFdbUlVZUFNYT1JXT1JXTlFWSUxRREhNREhNRUpPSExTUVZdW2Bp + YGZwZmx3anJ9bnaCb3iEbXaCaXJ+ZW14aG53b3J3amtrUVFRLi4uERERJSUlAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAc3NzCAgIAAAAAQEBBwcHKissUVNWV1pdVlhcU1VZUFJWTU9TSk1RSUtQPD9DLC4xHB0f + Dg8QCgoLBwcIBgcHBgcHBwcICwsMEhMVIiQnOT1DUlhhZGx3a3OAb3iFcHmHbXaDZm98X2h0cHV9d3h6 + Xl9fNjY2EhISGxsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXV1BgYGAAAAAAAABwcHNjc5VFdZVVdaUlRYTlBU + Sk1QSEpOQ0VJLS4xEhMUBQUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAkKHB8i + QkdPY2x5bneGcXuKb3mIaHKBYGl3ZGx2eHt+YmJiNTU1ERERGRkZAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQkJAAAA + AAAACAkJPT5AVFdZU1VYT1FVSk1QRklMREZJLC4wDAwNAQEBAAAAAAAAAAAAAAAAAwMDBgYGCQkJCgoK + CgoKCQkJBwcHBAQEAAAAAAAAAAAAAAAAAgICFBYYRkxWanSDcXyMcHuLanSEYGl4YWl1en2AXV1dMjIy + EBAQISEhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAExMTAQEBAAAABwgIPj9CVFZZUlRXTU9SR0pNREZKOz1AExMUAQEBAAAAAAAA + AAAABQUFDg4OGBgYISEhJycnLCwsMDAwMTExMTExLi4uKSkpICAgExMTBwcHAAAAAAAAAAAAAgMDIiYr + Xmh2cXyOcX2OanWGX2l5XmdzdXh8VldXLS0tDQ0NMjIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKioqBAQEAAAABQUFOTs9VFZZUlRXTE5R + RklMREZJMDEzBQYGAAAAAAAAAAAABgYGEhISHh4eKCgoMDAwP0BBW15ibHF3d3yEdHmAbnN5XmFlS0xN + QkJCOzs7MDAwHx8fCwsLAQEBAAAAAAAADQ4QT1hkcn6Qcn6QanaIXWh4W2Rxam1wT09PJSUlCgoKXV5e + AAAA2uv3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYGBg + BwcHAQEBAQEBMDEzVVhbU1VYTE9SRkhMQ0ZJKSotAAAAAAAAAAAAAwMDDg4OGxsbJCQkP0BCfoSMtL7M + z9zu0+D00+D10d/0zt3yytjuw9LnucjdnKe4eH+IVFZYQ0NDNDQ0HR0dBgYGAAAAAAAABAUGSE9ccoCT + coCUaXaIW2d3Vl9sYGFkQkJCGRkZCgoKAAAA2+z32er2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + 0OP/z+L+zuH+zOH/y+D/yt/+yd7+yN7/xt3/xdz+xNz/w9v/wtr/wdr/wdn+vtX5tcvrprrXkqS9eISW + QEFBKioqCgoKAAAAQ0pUl6W7e4eYW2NwQkdPKSkqERERBAQEcHBwAAAAmMbljLjXhK/Kf6XAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAIyMjDQ0NAgICNzk8Z2tyZ2txXGBmUFNZHyAhDAwMAwMDAAAAMjU50N3w2Ob71+b71uX7 + 1eX71OT70+P70eP70OL7z+H7zuD7zeD7zN/7yt77yd77yN37x9z7xtv7xdv7xNr7w9n7wtn7wNj7v9f7 + vtf7v9f7wNj7v9b4utDxssblprnVm6zFVllePT09JCQkCAgIHB8jnKvBgo6gYWl3R0xVLS4vFBQUBAQE + TU1NAAAAmsnpibnaga7MeqTBgqW+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHh4eCgoKAwMDRklNaG1zZ2xzW19lSk1SGxwc + DAwMAQEBAAAAYWhxyNXoytjsydfsyNbsx9bsxtXsxdXsxNTsw9PswtPswNLsv9HsvtHsvdDsvM/su8/s + us7suc3suM3st8zstsvstcvstMrss8rss8rstMvstsvstsvrtMnoscXiq77aprjTe4WSWFtgT1JWOz5D + MDQ5laO3iJSmZm57SE1WLS4xFhYWBgYGKSkpAAAAotDuhrrdfq7Pd6TCcZu3orvMAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHR0d + CQkJBQYGTlJXaW92aG10W19mRUlNGhobCwsLAAAAAAAAe4OOsb3Osr7Qsb3QsL3Rr7zRrrzRrbvRrLrR + q7rRqrrQqbnQqLnRp7jRprfRpbfRpLbRpLbRorXRobTQoLTRn7PRnrPRnrLRn7PRoLPRoLTQobTQorXQ + orTPobPNoLHLn7DIna3Enq3EpbTLq7vTqrrQpLPIi5epaXF+SE5WLjAzFhYWBwcHExMTAAAAstnzgrrg + e67Rc6PEbZq4bpaxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fCgoKCAkJVlpganB3aG11Wl9mQkVKGhoaCgoKAAAAAAAAeYGO + jpinjpiojZiojZeojJeoi5aoipaoiZWoiZWoiJWoh5SohpSohZOohZOohJKog5KogpKogpGogZCogJCo + f5Cof4+ogI+ogZCogZGogpGogpKog5KohJKohJOnhZOnhpOniJWpkJ6ym6rAqbjPr7/VprTJjZiqaXJ/ + SU5XMTM3FRUVBwcHCAgIAAAAvd/2f7vjd6/UcaPGapq6ZZKwg6S6AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKioqDg4OAwMESE1UbnWA + dXyIbXWAWF5nMzQ1IiIiEBAQBAQEDg8PJygqOTo8REZISUtNSktOSUtOSUtOSUtOSUtOSUtOSUtOSUtO + SUtOSUtOSUtOSUtOSUtOSUtOSUtOSUtOSUtOSUtOSUtOSUtOSktOSktOSUtNSEpMR0hKRUZIQUFCODk6 + KCgpFBQUAgICAAAACAkKf4iVeoKOVVpjNztAGx0eCwsLAwMDIiIiAAAAn9f8ZrnwYrDkXabXWJzKU5K9 + T4qxSoKnR3uekK3CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAALy8vEhISAgICOz5EbXR/dX2JcnqHYml0PT5BKCgoERERAQEBLjI4nq3Cr7/Xtcbftsfi + tcfitMbis8bissXiscXisMTisMTirsPircPircLirsPir8PisMTisMTiscTissXis8bitMbitMfitsfi + tsjitsfgssPbp7bMk5+yeIKRXmVwTlRdMTM2FhYWAgICAAAAExQWjpelcHeDTFFZMjY6FxgZCQkJAgIC + Q0NDAAAAhsz7YbjyXa/mWabaVJzMUJPAS4q0SIKpRXugXIqoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAueL+tuH+ + teH/teH/tOD+tOD+s+D+s9/+st/+sNz7r9v5rdj2q9b0qdTxptHvo87sn8vpnMjmmMXjlcLhkr/ej7zb + jLrZibfWhrTUhLPSgrHQga/Pf63OfazMe6rKeajJdqfHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAJJXxJJbyJJbyJJbyI5byIpbzIpbzSKj1AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA1u7+t+H/tuH+tuH+teH/teH/tOD+tOD/s9//st/+sN79rdv6qdj4ptX1 + o9Lzn8/wnMztmMnqlcbnksPkjsDii73fiLrdhbjagrXYf7PVfbDTe67ReKzPdarNc6jMcabKb6XJlrzX + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdrv1J5XxJpXxJZTwJJXxI5Tx + IpTxN57yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuuL/t+H+tuH/tuH/teD/ + s+D/sd//r97/rd7/q9z/qNv+pdn8otb5ntP3m9D0mM3xlMrvkcfrjsToi8Hmh77jhLvggbjefrbbfLPZ + ebHWdq7UdKzScarQb6fObabMaqTLdKnNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAW63yKZTwKJTwJpPwJJPvIpLwJpTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA2O//teH+tOD+st//sN/+rt3+q93+qdz+p9v+pdr+otn/oNj+ndb9m9T7l9H4lM71kcvy + jcjwisTsh8Hpg77ngLzkfbjhe7bfeLPcdbHacq7XcKzVbarTa6jRaKXPZqPNaKPMAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARKHwKpTuKZPvJpLvJJHvIZDuZrLzAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvOP/rt7/rN3/qtz/qNv+ptv/pNr/otn+ + n9j/ndf/m9b/mNX+ltT+k9L8kM/5jMv2icjzhsXwgsLtf7/qfLznebnldrbic7TfcbHdbq7aa6zYaarW + ZqfTZKXRYqPPYKHNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOpnvLJLu + KZLtJpDtI4/uL5XuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAArN3/ptv/pNr/otn+oNj/ntf/nNf+mtb/l9X/ldT/k9P/kNL+jtH/i8/9iMz6hMn3gcb0fsPxe8Du + eL3rdbrocrflb7TjbLHgaq/eZ6zbZKrYYqfWX6XUXaPSW6HQirvcAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAALpLsLZHtKpDtJY7sIozsbrTyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAotj/n9j/ndf/m9b/mdb/ltT/lNT/ktP/kNL/jdH/ + i9D/ic//hs7+g8z+gMn7fMb4ecP1dsDyc73vcLrsbbfpa7TmaLHjZa/hY6zeYKrbXafZW6TWWKLUVqDS + ZKfUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANpTrLZDrKY/rJYzrKY7rAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxOf/mtb/ + l9X/ltT/k9P/kdL/j9L/jdD/itD+iM/+hc7+g8z+gMz+fsr/e8n+eMf8dcT5csD2br3ya7rwabjtZrXq + Y7LnYK/kXqzhW6rfWafcVqTZVKLXUqDVU6DUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAASJ3tLY/qKY3qJIrqSZ7tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAwOX/k9P/kNL/jtH/jND/itD/iM7/hc7/g83+gMv/fsv/e8r/eMn/ + dsf/c8b+b8P8bMH5ar72Z7vzZLfwYbXtXrLqXK/nWazkVqriVKffUaTcT6LZTZ/XSp3VlsXlAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVqPtLY3pKIvpIojohb3yAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxef/kNL/ic//h87/ + hc3/gsz/gMv/fsv+e8r/eMn/dsf/c8f/cMX/bcT/asL+Z8D9ZL76Yrr3X7j0XLXxWbLuV6/rVKzoUanl + T6fiTKTfSqHcSJ/aRp3YXqnbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcrHvLIvo + J4joJofnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAltT+gsz/f8v/fcr+e8r+ecn/dsj/dMf+ccb+bsT/a8P/aML+ZcH/Yr/+ + X739XLv6Wbj3V7X0VLLxUa/uT6zrTKroSqflR6TiRaHfQ5/dQZzaRZ7ZAAAAAAAAAAAAmcjoTp/VU6LW + AAAAAAAAAAAAAAAAAAAAAAAAAAAAK4nnJobmLovnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArN3/fsr/eMn/dsj/dMf+ + ccb/b8X/bMT+acL/ZsH+Y8D+YL/+Xb3/Wrz+V7v+VLj7UbX4T7L1TK/ySq3vR6rsRafpQqTmQKLjPp/g + PJ3dOprberrlAAAAAAAAPJjWMZHSL5DRL5DQaa7cAAAAAAAAAAAAAAAAAAAAKYblJITlN4/nAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAf8r/ccb/b8X/bcT/asP/Z8L/ZMD/Yb//Xr7/W73/WLv/Vbv/Urn/Trf+TLX8 + SbL5R7D2RK3zQqrwQKftPaTqO6HmOZ/kNp3hNJrePp3dAAAAgb7nLZPXK5HVKY/TKI7SJo3RWqfbAAAA + AAAAAAAAAAAALofkI4HjT5rpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh8//asP+aML/ZcH/YsD+YL// + Xb7/Wrz+Vrv/U7r+ULj+Tbf/Srb/RrT+Q7L9QbD6P633PKr0OqjxOKXtNaLqM5/nMZ3kL5riLZjgNZve + LpbbKJLaJpDYJY/WI43UIYzTIIrSebnjAAAAAAAAAAAAXKDqIX/jZ6frAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAjNH/Y8D+YL//Xr7/W73+WLv/Vbv/Urr+Trj/S7f+SLX+RbT+QrP/PrH+O6/9Oa37N6r3 + NKf0MqXxMKLuLp/rLJ3oKprmKJjjJpbhJJTfIpLdIJDbH47ZHYzXHIvVGonUG4nTAAAAAAAAAAAAAAAA + H3zhbKnrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh87/XL3/Wbz/Vrv/U7r/ULn+Tbf/Srb/ + RrX/RLT/QLL/PbH/ObD/Nq7+M63+Mar8Lqf4LKX1KqLyKJ/vJp3sJJrqIpjnIZbkHpTiHJLgG5DeGo7c + GIzaForYFYnXE4fVOZrbAAAAAAAAAAAAKH/ga6jqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAccX+Vbr+Urn+Trj/TLf/Sbb+RbT+QrP+P7L+PLD/OK/+Na7+Mqz/Lqv/K6n+Kaf8JqX5JKL2Ip/z + IJ3wHpvuHJjrG5boGZTmF5HjFY/hE43fEozdEYrbD4jZDYfYDIXWAAAAAAAAAAAAbqjqaqbpAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVrr+Tbf/Srb+R7X+RLT/QbP/PrH+OrD/N6//NK3+ + MKz/Lar/Kqn+Jqj+I6b/IKX9HqL6HJ/3Gp30GJrxFpjvFZbsE5TpEZHnD4/kDo3iDIvfC4neCYfcCIba + BoXZJZPdAAAAAAAAAAAAX57nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASLb/ + RrT+QrP/QLL/PLD/Oq//Nq7/M63/MKz/LKr/Kan/Jaj/Iqb+H6X/G6P/GKL+Fp/7FJ34Epr1EJjyDpbw + DZPtC5HqCo/oCIzlBovjBYnhA4ffAoXdAYPbAILZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAWbz/QbL+PrH+O7D/OK/+Na7+Ma3+L6v+LKr+KKn+Jqf/Iab+HqX+ + GqT+F6H+E6D+EJ7+Dp38DJr5Cpj2CJXzBpPwBZDuA47rAozoAYrmAIjjAIbhAITeAILbAIDZRqLiAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAntf/PLH/OrD/Nq7/NK3/ + MKz+Lqv/Kqr/J6j+JKf/Iab/HaT/GqP+FqL/E6D/D5//C53/CJz+BZr9BJf6ApX3AZL0AJDwAI7tAIvq + AInnAIfkAIThAILfAIDcAH/aCYHZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAOa//Na7/Mq3/MKz/LKr+Kan/Jqj/I6f+IKX/HaT/GaP/FqH/E6D+D5//C53+CJz+ + BZr+Apj+AJb8AJT5AJH1AI/yAIzuAIrrAIfoAIXlAIPiAIHgAH/cAH3aAXvYAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASLX/Maz/Lqv/K6r/KKn/Jaj/Iqf/H6X/ + HKT/GaP/FqH/E6D+EJ7+DZ3+C5v9CZr9B5j8BJb7ApT7AJL5AJD3AI3zAIrvAIjsAIboAIPmAIHjAH/g + AH3dAHvaAHnYWKbkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + W73+LKr+Kqn/J6j/JKf/Iab/HqX+HqT+Mqz+ULj+ccX9d8f9V7n8Lqf7Dpn7C5f6CZX5B5T5BZL4ApD3 + AY72AIz0AInwAIftAIXqAILnAIDkAH3gAHvdAHnaAHfYHIXbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV7z/KKn/Jaf+I6b+IaX+Jqf+Wrv9AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAH5z4DJP3CpH2CI/1BY31A4v0AYnzAIfxAITtAILqAIDnAH7kAHvhAHneAHfbAHXYCnnX + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7H+Jab9JKX9JaX8 + WLn8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5f1DI/0Co3zB4vyBYjxA4fxAYXwAILu + AIDqAH7nAHvkAHngAHfdAHXaAHPYBHPWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAKKX8JaP7OKr7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAEY3xDIrxCojwB4bvBYTuAoLtAIDtAH7qAHznAHnkAHfhAHXdAHLaAHHYAG/VAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ6L6Xrj6AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV6zzDojuC4buCYTtB4LsBH/rAn3qAHzpAHrnAHfjAHXg + AHLdAHDaAG7XAG3Vd7DnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATrH5 + hcn6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4bsDYPr + C4HqCX/qBn3pBHvoAnnnAHfmAHXjAHLgAHDdAG7ZAGzXAGrUXZ/iAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAQJvtD4DpDX7oCnznCHrmBnjmBHblAnTjAHLiAHDfAG3cAGzZAGnWAGfU + VZnhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdrXxEH7nDnzmDHrkCnfkCHXj + BXPiA3HhAW/gAG3fAGvbAGjYAGfVAGXTVZfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAEnvkEHnjDXfjC3XiCXPhB3HgBW7fA2zeAGrdAGjaAGbYAGTVAGLSVZXgAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3jiEXbhD3TgDXLfC3DeCW7dB2zcBGrcAmfa + AGbZAGPXAGHUAF/SYJrhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXbg + EnPfEHHdDm/dDG7cCmvbCGnaBmfZBGXYAWPXAGDWAF7TAF3RdKXkAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAFnPdE3HcEW/cEG3aDmvZDGnZCmbYCGTXBWLWA2DVAV3UAFzSAFrQ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFnDbFW7aEmzZEWrYD2jX + DWbWC2TWCWLVB1/TBF3TAlvRAFnQA1jOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAF23ZFWvYE2nXEmfWEGXVDmPUDGHTCl/SCF3RBlrQA1nQAVfPCVvPAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGGrWFmjVFGbVEmTUEWLTD2HSE2PSDF7RCVzR + B1rQBVnQA1jPE2PSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbZ/jGGfV + F2XTFWTTE2PTEmLSF2XTAAAAPH7aCl3QCFvQBlrQBFnQSYbcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAARYPcGWbTF2XTFmTTFGPTE2LSbZ7jAAAAZJjhC17RCVzQB1vQBVnQAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI23UGWfTGGbTFmXTFWTSLHTX + AAAAAAAAcKDkDF7RCl3RCFvRCVzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAG2jTGWfUGGbTF2XTFmXSAAAAAAAAAAAAZZniDV/RC13RCVzRKnLWAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaJrhG2jTGWfUGGbTF2XTUIreAAAAAAAAAAAAYpfgDl/R + DF7RCl3Qe6jmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALHPXG2jTGWfU + GGbTJ2/WAAAAAAAAAAAAAAAAS4jdD2DRDV/RDF7RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAG2jTG2jTGWbUGmfTh6/oAAAAAAAAAAAAAAAANXnYEGDSDV/RRYPbAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWZHfG2jTGmfUGWfUUYvdAAAAAAAAAAAA + AAAAAAAAKnLWEGHSDl/SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + HmrUGmfUGWfUKHHWAAAAAAAAAAAAAAAAAAAAAAAAI23VEGHRMXfYAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAeqbmGmfUGWbUG2fUAAAAAAAAAAAAAAAAAAAAAAAAAAAAG2jTEGHR + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIWvUGWbTGWbUXZPgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAEmLSNHnYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAha7nGGbUGGbUM3jZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWHSAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKnHWF2XTH2rUAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAZpriVY7eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhK7nFmXTFmXT + fqnmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT4rdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAJW7WFWTTTordAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeKblE2PSLXTXAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + H2rUGWbTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAX5XgEmLRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFmTSZ5riAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAOXzZRYTbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgaznNXnXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOHvYAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAWZHfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////////////gD// + ////////////////+AAD/////////////////8AAAH////////////////8AAAAf///////////////+ + AAAAB///////////////+AAAAAH///////////////AAAAAA///////////////gAAAAAH////////// + ////gAAAAAA//////////////wAAAAAAH/////////////8AAAAAAA/////////////+AAAAAAAH//// + /////////AAAAAAAAv////////////gAAAAAAAJ////////////4AAAAAAABf///////////8AAAAAAA + AL////////////AAAAAAAACf///////////gAAAAAAAAT///////////4AAAAAAAAEf//////////8AA + AAAAAABj///////////AAAAAAAAAI///////////wAAAAAAAACH//////////4AAAAAAAAAw//////// + //+AAAAAAAAAEP//////////gAAAAAAAABB//////////4AAAAAAAAAQP/////////+AAAAAAAAAED// + ////////gAAAAAAAABAf/////////wAAAAAAAAAQH/////////8AAAAAAAAAGA//////////AAAAAAAA + ABgP/////////4AAAAAAAAAYB/////////+AAAAAAAAAEAf/////////gAAAAAAAABAD/////////4AA + AAAAAAAQA/////////+AAAAAAAAAEAP/////////gAAAAAAAADAB/////////cAAAAAAAAAwAf////// + //zAAAAAAAAAIAH////////8wAAAAAAAAGAB/////////GAAAAAAAABgAf////////xgAAAAAAAAQAH/ + ///////8IAAAAAAAAMAB/////////DAAAAAAAACAAf////////wYAAAAAAABgAH////////8GAAAAAAA + A4AB/////////AwAAAAAAAMAAf////////wOAAAAAAAGAAH////////8BgAAAAAADgAD/////////AMA + AAAAABwAA/////////wBgAAAAAA4AAf////////8AMAAAAAAeAAH/////////ABgAAAAAPAAD/////// + //wAOAAAAAHwAB/////////8ABwAAAAH4AA//////////AAPAAAAD8AAf/////////wAA8AAAD/AAf// + ///////+AAD4AAH/wAP//////////gAAPwAf/4AP//////////4AAA////+AH///////////AAAA//// + gD///////////wAAAAB//4B///////////8AAAAAP/8A////////////gAAAAD//Af///////////4AA + AAA//wH////////////AAAAAP/8D////////////4AAAAB//A/////////////AAAAAf/wf///////// + ///wAAAAH/8H////////////+AAAAA//B/////////////wAAAAP/w//////////////AAAADj+P//// + /////////4AAAAYPj//////////////gAAAEB4//////////////8AAAAAOP//////////////gAAAAD + z//////////////8AAAAAc///////////////gAAAAHP//////////////8AAAAA7/////////////// + gAAAAP///////////////4AAAAB///////////////+AAAAAf///////////////wAAAAH////////// + /////8AAAAA////////////////AAAAAP///////////////wH+AAD///////////////8H/wAA///// + ///////////H/+AAP///////////////z//gAB///////////////5//8AAf//////////////////AA + H//////////////////wAB//////////////////+AAf//////////////////gAH/////////////// + ///4AB//////////////////+AA///////////////////gAP//////////////////4AD////////// + ////////+AA///////////////////AQP//////////////////wEH//////////////////8DB///// + //////////////Bwf//////////////////gcH//////////////////4PD//////////////////+Dw + ///////////////////B8f//////////////////w/H//////////////////4fz//////////////// + //+H8///////////////////D/f//////////////////x/n//////////////////4f7/////////// + ///////+P////////////////////H////////////////////z////////////////////5//////// + ////////////+f////////////////////P////////////////////n////////////////////7/// + /////////////////9////////////////////////////////////////////////////////////// + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANq7+Lqv+Jaf+HaT+FKD+Cpz+BJf7AZHzAIrqAITjAH/c + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL6v+JKf+K6n+ + PrH+NKv8DZj6BpL3AY31AIbtAIDlAHrcEoDZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAMKj7AAAAAAAAAAAAAAAAAAAAFI/xBobvAIDsAHrlAHTcCnXXAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZHs + C3/pBXnmAHTjAG7bF3bYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD3jiCXLgBGzeAGfZFm/WAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEnDcDWvZCGXXAl/U + DWPSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAFWnWEGTUDmHSBlrQC13QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM3fXF2XTIGvUQYHaCFzQAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKnHV + GWbTAAAAPn/aC13QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAHmrUNnnYAAAAJG7VGWbTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMnbXJG3VAAAAAAAAGmfTAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMHXXAAAAAAAAAAAARYTbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO33ZMXbXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMnbXAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAASYbbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/////////////+Af////////gAf///////8AA////////gAB///////8 + AAD///////wAAH//////+AAAH//////4AAAf//////AAAA//////8AAAB//////wAAAn//////AAACP/ + ////8AAAA//////4AAAB/////+gAAAH/////4AAAQf/////kAAAB/////+AAAIH/////4gABA//////h + AAMH/////+DABg//////8DA+H//////wB/w///////AAfH//////+AB8///////8AHz///////4ALf// + /////wAF////////gAP////////AA////////+AD////////4AH////////vgf////////+B//////// + /8H/////////wf/////////B/////////4P/////////k/////////+T/////////zf/////////d/// + //////5//////////v/////////9////////////////////////////KAAAACAAAABAAAAAAQAYAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAACAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHysrLEVHSlFUWFRXW0JERjExMQAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAACAgIBwcHUtNUEVISzAxNSotMDk8QltibGlwe0xNUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwcHUlLThwdHw0NDUNGSl5jakRH + TBYWFi4zOmdygUVHSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAABISE01PUxcYGS0vMrrF1dro/tXl/s3f+aCvxTY4PCkuNWVwgCwtLQAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADU3OTg6PRITFMjU + 5dno/tXl/tDi/svg/sXb/JKjvB8gIVljcjxARV1sdqXE2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABgYGFRXXCEiJGlwetTj+c/g+cvd+cbb+cLY+b7V+bTK62dwfUFH + T1JYYh0dHYu31AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQk + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBr1AAAACFs1AAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAACpy1gAAAAAAABxp0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADF2 + 2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZ52AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/+////8B///8AP///AB///gAP//4AA//8A + AP//AAB//wAAf/8AAD/+AAA//gAAP/5ABD/+AAh//wAY//8A8f//AHP//4B3///AV///4Af///AP///w + D///94f///+H////h////4////+v////b////3////7/////////////KAAAABgAAAAwAAAAAQAYAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKy0t + LQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABER + ETQ1N0tOUU9SWFxhaFhdYkBBQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + rEH/v6xB/3+sQf//rEH//6xB + + \ No newline at end of file diff --git a/Ember Media Manager/packages.config b/Ember Media Manager/packages.config index 13c25e1..dfce825 100644 --- a/Ember Media Manager/packages.config +++ b/Ember Media Manager/packages.config @@ -1,5 +1,6 @@  + \ No newline at end of file diff --git a/EmberAPI/EmberAPI.vbproj b/EmberAPI/EmberAPI.vbproj index 0f46d98..78ea2f4 100644 --- a/EmberAPI/EmberAPI.vbproj +++ b/EmberAPI/EmberAPI.vbproj @@ -118,6 +118,12 @@ + + dlgCompatibility.vb + + + Form + dlgVersions.vb @@ -141,12 +147,14 @@ + + dlgCompatibility.vb + dlgVersions.vb VbMyResourcesResXFileCodeGenerator - Resources.Designer.vb My.Resources Designer diff --git a/EmberAPI/My Project/AssemblyInfo.vb b/EmberAPI/My Project/AssemblyInfo.vb index e7cecdd..29bae8d 100644 --- a/EmberAPI/My Project/AssemblyInfo.vb +++ b/EmberAPI/My Project/AssemblyInfo.vb @@ -9,10 +9,10 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - + - + @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/EmberAPI/Resources/MediaDatabaseSQL_v1.txt b/EmberAPI/Resources/MediaDatabaseSQL_v1.txt deleted file mode 100644 index 1b32d37..0000000 --- a/EmberAPI/Resources/MediaDatabaseSQL_v1.txt +++ /dev/null @@ -1,294 +0,0 @@ -CREATE TABLE Sets( - SetName TEXT NOT NULL PRIMARY KEY - ); - -CREATE TABLE Movies ( - ID INTEGER PRIMARY KEY, - MoviePath TEXT, - Type BOOL, - ListTitle TEXT, - HasPoster BOOL, - HasFanart BOOL, - HasNfo BOOL, - HasTrailer BOOL, - HasSub BOOL, - HasExtra BOOL, - New BOOL, - Mark BOOL, - Source TEXT, - Imdb TEXT, - Lock BOOL, - Title TEXT, - OriginalTitle TEXT, - Year TEXT, - Rating TEXT, - Votes TEXT, - MPAA TEXT, - Top250 TEXT, - Country TEXT, - Outline TEXT, - Plot TEXT, - Tagline TEXT, - Certification TEXT, - Genre TEXT, - Studio TEXT, - Runtime TEXT, - ReleaseDate TEXT, - Director TEXT, - Credits TEXT, - Playcount TEXT, - Watched TEXT, - Trailer TEXT, - PosterPath TEXT, - FanartPath TEXT, - ExtraPath TEXT, - NfoPath TEXT, - TrailerPath TEXT, - SubPath TEXT, - FanartURL TEXT, - UseFolder BOOL, - OutOfTolerance BOOL, - FileSource TEXT, - NeedsSave BOOL, - SortTitle TEXT, - DateAdd INTEGER - ); - -CREATE TABLE MoviesSets( - MovieID INTEGER NOT NULL, - SetName TEXT NOT NULL, - SetOrder TEXT NOT NULL, - PRIMARY KEY (MovieID,SetName) - ); - -CREATE TABLE MoviesVStreams( - MovieID INTEGER NOT NULL, - StreamID INTEGER NOT NULL, - Video_Width TEXT, - Video_Height TEXT, - Video_Codec TEXT, - Video_Duration TEXT, - Video_ScanType TEXT, - Video_AspectDisplayRatio TEXT, - Video_Language TEXT, - Video_LongLanguage TEXT, - PRIMARY KEY (MovieID,StreamID) - ); - -CREATE TABLE MoviesAStreams( - MovieID INTEGER NOT NULL, - StreamID INTEGER NOT NULL, - Audio_Language TEXT, - Audio_LongLanguage TEXT, - Audio_Codec TEXT, - Audio_Channel TEXT, - PRIMARY KEY (MovieID,StreamID) - ); - -CREATE TABLE MoviesSubs( - MovieID INTEGER NOT NULL, - StreamID INTEGER NOT NULL, - Subs_Language TEXT, - Subs_LongLanguage TEXT, - Subs_Type TEXT, - Subs_Path TEXT, - PRIMARY KEY (MovieID,StreamID) - ); - -CREATE TABLE MoviesPosters( - ID INTEGER PRIMARY KEY AUTOINCREMENT, - MovieID INTEGER NOT NULL, - thumbs TEXT - ); - -CREATE TABLE MoviesFanart( - ID INTEGER PRIMARY KEY AUTOINCREMENT, - MovieID INTEGER NOT NULL, - preview TEXT, - thumbs TEXT - ); - -CREATE TABLE MoviesActors( - MovieID INTEGER NOT NULL, - ActorName TEXT NOT NULL, - Role TEXT, - PRIMARY KEY (MovieID,ActorName) - ); - -CREATE TABLE Sources( - ID INTEGER PRIMARY KEY AUTOINCREMENT, - Name TEXT NOT NULL, - path TEXT NOT NULL, - Recursive BOOL NOT NULL DEFAULT False, - Foldername BOOL NOT NULL DEFAULT False, - Single BOOL NOT NULL DEFAULT False, - LastScan TEXT NOT NULL DEFAULT '1900/01/01' - ); -CREATE UNIQUE INDEX UniqueSource ON Sources (Path); - -CREATE TABLE TVShows( - ID INTEGER PRIMARY KEY AUTOINCREMENT, - Title TEXT, - HasPoster BOOL NOT NULL DEFAULT False, - HasFanart BOOL NOT NULL DEFAULT False, - HasNfo BOOL NOT NULL DEFAULT False, - New BOOL DEFAULT False, - Mark BOOL NOT NULL DEFAULT False, - TVShowPath TEXT NOT NULL, - Source TEXT NOT NULL, - TVDB TEXT, - Lock BOOL NOT NULL DEFAULT False, - EpisodeGuide TEXT, - Plot TEXT, - Genre TEXT, - Premiered TEXT, - Studio TEXT, - MPAA TEXT, - Rating TEXT, - PosterPath TEXT, - FanartPath TEXT, - NfoPath TEXT, - NeedsSave BOOL NOT NULL DEFAULT False, - Language TEXT, - Ordering INTEGER NOT NULL DEFAULT 0 - ); -CREATE UNIQUE INDEX UniqueTVShowPath ON TVShows (TVShowPath); - -CREATE TABLE TVEpPaths( - ID INTEGER PRIMARY KEY AUTOINCREMENT, - TVEpPath TEXT NOT NULL - ); -CREATE UNIQUE INDEX UniqueTVEpPath ON TVEpPaths (TVEpPath); - -CREATE TABLE TVEps( - ID INTEGER PRIMARY KEY AUTOINCREMENT, - TVShowID INTEGER NOT NULL, - Episode INTEGER, - Title TEXT, - HasPoster BOOL NOT NULL DEFAULT False, - HasFanart BOOL NOT NULL DEFAULT False, - HasNfo BOOL NOT NULL DEFAULT False, - New BOOL DEFAULT False, - Mark BOOL NOT NULL DEFAULT False, - TVEpPathID INTEGER NOT NULL, - Source TEXT NOT NULL, - Lock BOOL NOT NULL DEFAULT False, - Season INTEGER, - Rating TEXT, - Plot TEXT, - Aired TEXT, - Director TEXT, - Credits TEXT, - PosterPath TEXT, - FanartPath TEXT, - NfoPath TEXT, - NeedsSave BOOL NOT NULL DEFAULT False, - Missing BOOL NOT NULL DEFAULT False - ); - -CREATE TABLE TVShowActors( - TVShowID INTEGER NOT NULL, - ActorName TEXT NOT NULL, - Role TEXT, - PRIMARY KEY (TVShowID,ActorName) - ); - -CREATE TABLE TVEpActors( - TVEpID INTEGER NOT NULL, - ActorName TEXT NOT NULL, - Role TEXT, - PRIMARY KEY (TVEpID,ActorName) - ); - -CREATE TABLE TVSeason( - TVShowID INTEGER NOT NULL, - SeasonText TEXT, - Season INTEGER NOT NULL, - HasPoster BOOL NOT NULL DEFAULT False, - HasFanart BOOL NOT NULL DEFAULT False, - PosterPath TEXT, - FanartPath TEXT, - Lock BOOL NOT NULL DEFAULT False, - Mark BOOL NOT NULL DEFAULT False, - New BOOL NOT NULL DEFAULT False, - PRIMARY KEY (TVShowID,Season) - ); - -CREATE TABLE TVVStreams( - TVEpID INTEGER NOT NULL, - StreamID INTEGER NOT NULL, - Video_Width TEXT, - Video_Height TEXT, - Video_Codec TEXT, - Video_Duration TEXT, - Video_ScanType TEXT, - Video_AspectDisplayRatio TEXT, - Video_Language TEXT, - Video_LongLanguage TEXT, - PRIMARY KEY (TVEpID,StreamID) - ); - -CREATE TABLE TVAStreams( - TVEpID INTEGER NOT NULL, - StreamID INTEGER NOT NULL, - Audio_Language TEXT, - Audio_LongLanguage TEXT, - Audio_Codec TEXT, - Audio_Channel TEXT, - PRIMARY KEY (TVEpID,StreamID) - ); - -CREATE TABLE TVSubs( - TVEpID INTEGER NOT NULL, - StreamID INTEGER NOT NULL, - Subs_Language TEXT, - Subs_LongLanguage TEXT, - PRIMARY KEY (TVEpID,StreamID) - ); - -CREATE TABLE TVSources( - ID INTEGER PRIMARY KEY AUTOINCREMENT, - Name TEXT NOT NULL, - path TEXT NOT NULL, - LastScan TEXT NOT NULL DEFAULT '1900/01/01' - ); -CREATE UNIQUE INDEX UniqueTVSource ON TVSources (Path); - -CREATE TABLE Actors( - Name TEXT PRIMARY KEY, - thumb TEXT - ); - -CREATE TABLE OrigPaths( - OrigPath TEXT NOT NULL, - EmberPath TEXT NOT NULL, - Platform TEXT NOT NULL, - Recursive BOOL NOT NULL DEFAULT False, - PRIMARY KEY (OrigPath,Platform) - ); - -CREATE TABLE EmberFiles( - OrigPath TEXT NOT NULL, - EmberPath TEXT NOT NULL, - Filename TEXT NOT NULL, - Hash TEXT NOT NULL, - Platform TEXT NOT NULL, - UseFile BOOL NOT NULL DEFAULT False, - PRIMARY KEY (OrigPath,Filename) - ); - -CREATE TABLE ExcludeFiles( - Filename TEXT NOT NULL, - PRIMARY KEY (Filename) - ); - -CREATE TABLE ExcludeDir( - Dirname TEXT NOT NULL, - PRIMARY KEY (Dirname) - ); - -CREATE TABLE ExcludeFilesInFolders( - Filename TEXT NOT NULL, - EmberPath TEXT NOT NULL, - PRIMARY KEY (Filename,EmberPath) - ); diff --git a/EmberAPI/clsAPICommon.vb b/EmberAPI/clsAPICommon.vb index 86a9d54..8e074a3 100644 --- a/EmberAPI/clsAPICommon.vb +++ b/EmberAPI/clsAPICommon.vb @@ -469,14 +469,14 @@ Public Class Enums #Region "Enumerations" - Public Enum DefaultType As Integer - All = 0 - MovieFilters = 1 - ShowFilters = 2 - EpFilters = 3 - ValidExts = 4 - ShowRegex = 5 - End Enum + Public Enum DefaultType As Integer + All = 0 + MovieFilters = 1 + ShowFilters = 2 + EpFilters = 3 + ValidExts = 4 + ShowRegex = 5 + End Enum Public Enum DelType As Integer Movies = 0 @@ -681,42 +681,42 @@ Public Class Functions Public Shared Function CheckNeedUpdate() As Boolean Dim sHTTP As New HTTP Dim needUpdate As Boolean = False - Dim platform As String = "x86" - Dim updateXML As String = sHTTP.DownloadData(String.Format("http://pcjco.dommel.be/emm-r/{0}/versions.xml", If(IsBetaEnabled(), "updatesbeta", "updates"))) - sHTTP = Nothing - If updateXML.Length > 0 Then - For Each v As ModulesManager.VersionItem In ModulesManager.VersionList - Dim vl As ModulesManager.VersionItem = v - Dim n As String = String.Empty - Dim xmlUpdate As XDocument - Try - xmlUpdate = XDocument.Parse(updateXML) - Catch - Return False - End Try - Dim xUdpate = From xUp In xmlUpdate......... Where (xUp..Value <> "" AndAlso xUp..Value = vl.AssemblyFileName AndAlso xUp..Value = platform) Select xUp..Value - Try - If Convert.ToInt16(xUdpate(0)) > Convert.ToInt16(v.Version) Then - v.NeedUpdate = True - needUpdate = True - End If - Catch ex As Exception - End Try - Next - End If + 'Dim platform As String = "x86" + 'Dim updateXML As String = sHTTP.DownloadData(String.Format("http://pcjco.dommel.be/emm-r/{0}/versions.xml", If(IsBetaEnabled(), "updatesbeta", "updates"))) + 'sHTTP = Nothing + 'If updateXML.Length > 0 Then + ' For Each v As ModulesManager.VersionItem In ModulesManager.VersionList + ' Dim vl As ModulesManager.VersionItem = v + ' Dim n As String = String.Empty + ' Dim xmlUpdate As XDocument + ' Try + ' xmlUpdate = XDocument.Parse(updateXML) + ' Catch + ' Return False + ' End Try + ' Dim xUdpate = From xUp In xmlUpdate......... Where (xUp..Value <> "" AndAlso xUp..Value = vl.AssemblyFileName AndAlso xUp..Value = platform) Select xUp..Value + ' Try + ' If Convert.ToInt16(xUdpate(0)) > Convert.ToInt16(v.Version) Then + ' v.NeedUpdate = True + ' needUpdate = True + ' End If + ' Catch ex As Exception + ' End Try + ' Next + 'End If Return needUpdate End Function - Public Shared Function ConvertFromUnixTimestamp(ByVal timestamp As Double) As DateTime - Dim origin As DateTime = New DateTime(1970, 1, 1, 0, 0, 0, 0) - Return origin.AddSeconds(timestamp) - End Function + Public Shared Function ConvertFromUnixTimestamp(ByVal timestamp As Double) As DateTime + Dim origin As DateTime = New DateTime(1970, 1, 1, 0, 0, 0, 0) + Return origin.AddSeconds(timestamp) + End Function - Public Shared Function ConvertToUnixTimestamp(ByVal data As DateTime) As Double - Dim origin As DateTime = New DateTime(1970, 1, 1, 0, 0, 0, 0) - Dim diff As System.TimeSpan = data - origin - Return Math.Floor(diff.TotalSeconds) - End Function + Public Shared Function ConvertToUnixTimestamp(ByVal data As DateTime) As Double + Dim origin As DateTime = New DateTime(1970, 1, 1, 0, 0, 0, 0) + Dim diff As System.TimeSpan = data - origin + Return Math.Floor(diff.TotalSeconds) + End Function Public Shared Function LocksToOptions() As Structures.ScrapeOptions Dim options As New Structures.ScrapeOptions @@ -732,6 +732,11 @@ Public Class Functions .bPlot = Not Master.eSettings.LockPlot .bProducers = True .bRating = Not Master.eSettings.LockRating + .bLanguageV = Not Master.eSettings.LockLanguageV + .bLanguageA = Not Master.eSettings.LockLanguageA + .buseMPAAForFSK = Not Master.eSettings.UseMPAAForFSK + .bSubtitle = Not Master.eSettings.LockSubtitle + .bRelease = True .bRuntime = True .bStudio = Not Master.eSettings.LockStudio @@ -834,56 +839,56 @@ Public Class Functions ''' ''' Full path to extrathumbs directory ''' Last detected number of the discovered extrathumbs. - Public Shared Function GetExtraModifier(ByVal sPath As String) As Integer - Dim iMod As Integer = 0 - Dim lThumbs As New List(Of String) - - Try - If Directory.Exists(sPath) Then - - Try - lThumbs.AddRange(Directory.GetFiles(sPath, "thumb*.jpg")) - Catch - End Try - - If lThumbs.Count > 0 Then - Dim cur As Integer = 0 - For Each t As String In lThumbs - cur = Convert.ToInt32(Regex.Match(t, "(\d+).jpg").Groups(1).ToString) - iMod = Math.Max(iMod, cur) - Next - End If - End If - - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - - Return iMod - End Function - - Public Shared Function GetFFMpeg() As String - If Master.isWindows Then - Return String.Concat(Functions.AppPath, "Bin", Path.DirectorySeparatorChar, "ffmpeg.exe") - Else - Return "ffmpeg" - End If - End Function + Public Shared Function GetExtraModifier(ByVal sPath As String) As Integer + Dim iMod As Integer = 0 + Dim lThumbs As New List(Of String) + + Try + If Directory.Exists(sPath) Then + + Try + lThumbs.AddRange(Directory.GetFiles(sPath, "thumb*.jpg")) + Catch + End Try + + If lThumbs.Count > 0 Then + Dim cur As Integer = 0 + For Each t As String In lThumbs + cur = Convert.ToInt32(Regex.Match(t, "(\d+).jpg").Groups(1).ToString) + iMod = Math.Max(iMod, cur) + Next + End If + End If + + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + Return iMod + End Function + + Public Shared Function GetFFMpeg() As String + If Master.isWindows Then + Return String.Concat(Functions.AppPath, "Bin", Path.DirectorySeparatorChar, "ffmpeg.exe") + Else + Return "ffmpeg" + End If + End Function ''' ''' Get a list of paths to all sources stored in the database ''' - Public Shared Sub GetListOfSources() - Master.SourcesList.Clear() - Using SQLcommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() - SQLcommand.CommandText = "SELECT sources.Path FROM sources;" - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLreader.Read - Master.SourcesList.Add(SQLreader("Path").ToString) - End While - End Using - End Using - End Sub + Public Shared Sub GetListOfSources() + Master.SourcesList.Clear() + Using SQLcommand As SQLite.SQLiteCommand = Master.DB.MediaDBConn.CreateCommand() + SQLcommand.CommandText = "SELECT sources.Path FROM sources;" + Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() + While SQLreader.Read + Master.SourcesList.Add(SQLreader("Path").ToString) + End While + End Using + End Using + End Sub Public Shared Function GetSeasonDirectoryFromShowPath(ByVal ShowPath As String, ByVal iSeason As Integer) As String If Directory.Exists(ShowPath) Then @@ -907,13 +912,13 @@ Public Class Functions Return String.Empty End Function - Public Shared Function HasModifier() As Boolean - With Master.GlobalScrapeMod - If .Extra OrElse .Fanart OrElse .Meta OrElse .NFO OrElse .Poster OrElse .Trailer Then Return True - End With + Public Shared Function HasModifier() As Boolean + With Master.GlobalScrapeMod + If .Extra OrElse .Fanart OrElse .Meta OrElse .NFO OrElse .Poster OrElse .Trailer Then Return True + End With - Return False - End Function + Return False + End Function Public Shared Function IsSeasonDirectory(ByVal sPath As String) As Boolean For Each rShow As Settings.TVShowRegEx In Master.eSettings.TVShowRegexes.Where(Function(s) s.SeasonFromDirectory = True) @@ -929,14 +934,14 @@ Public Class Functions ''' List(of T) ''' Character or string to use as a value separator ''' String of separated values - Public Shared Function ListToStringWithSeparator(Of T)(ByVal source As IList(Of T), ByVal separator As String) As String - If source Is Nothing Then Throw New ArgumentNullException("Source parameter cannot be nothing") - If String.IsNullOrEmpty(separator) Then Throw New ArgumentException("Separator parameter cannot be nothing or empty") + Public Shared Function ListToStringWithSeparator(Of T)(ByVal source As IList(Of T), ByVal separator As String) As String + If source Is Nothing Then Throw New ArgumentNullException("Source parameter cannot be nothing") + If String.IsNullOrEmpty(separator) Then Throw New ArgumentException("Separator parameter cannot be nothing or empty") - Dim values As String() = source.Cast(Of Object)().Where(Function(n) n IsNot Nothing).Select(Function(s) s.ToString).ToArray + Dim values As String() = source.Cast(Of Object)().Where(Function(n) n IsNot Nothing).Select(Function(s) s.ToString).ToArray - Return String.Join(separator, values) - End Function + Return String.Join(separator, values) + End Function Public Shared Sub PNLDoubleBuffer(ByRef cPNL As Panel) Dim conType As Type = cPNL.GetType @@ -949,9 +954,9 @@ Public Class Functions ''' ''' Number to quantize ''' Multiple of constraint. - Public Shared Function Quantize(ByVal iNumber As Integer, ByVal iMultiple As Integer) As Integer - Return Convert.ToInt32(System.Math.Round(iNumber / iMultiple, 0) * iMultiple) - End Function + Public Shared Function Quantize(ByVal iNumber As Integer, ByVal iMultiple As Integer) As Integer + Return Convert.ToInt32(System.Math.Round(iNumber / iMultiple, 0) * iMultiple) + End Function Public Shared Function ReadStreamToEnd(ByVal rStream As Stream) As Byte() Dim StreamBuffer(4096) As Byte @@ -1181,7 +1186,7 @@ Public Class Structures #Region "Fields" - Dim CurrentImage As Image + Dim CurrentImage As Images Dim Ordering As Enums.Ordering Dim iEpisode As Integer Dim ImageType As Enums.TVImageType @@ -1233,6 +1238,10 @@ Public Class Structures Dim bPlot As Boolean Dim bProducers As Boolean Dim bRating As Boolean + Dim bLanguageV As Boolean + Dim bLanguageA As Boolean + Dim bSubtitle As Boolean + Dim buseMPAAForFSK As Boolean Dim bRelease As Boolean Dim bRuntime As Boolean Dim bStudio As Boolean diff --git a/EmberAPI/clsAPIDatabase.vb b/EmberAPI/clsAPIDatabase.vb deleted file mode 100644 index 45c5745..0000000 --- a/EmberAPI/clsAPIDatabase.vb +++ /dev/null @@ -1,2070 +0,0 @@ -' ################################################################################ -' # EMBER MEDIA MANAGER # -' ################################################################################ -' ################################################################################ -' # This file is part of Ember Media Manager. # -' # # -' # Ember Media Manager is free software: you can redistribute it and/or modify # -' # it under the terms of the GNU General Public License as published by # -' # the Free Software Foundation, either version 3 of the License, or # -' # (at your option) any later version. # -' # # -' # Ember Media Manager is distributed in the hope that it will be useful, # -' # but WITHOUT ANY WARRANTY; without even the implied warranty of # -' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # -' # GNU General Public License for more details. # -' # # -' # You should have received a copy of the GNU General Public License # -' # along with Ember Media Manager. If not, see . # -' ################################################################################ - -Imports System -Imports System.IO -Imports System.Xml.Serialization -Imports System.Data.SQLite - -Public Class Database - -#Region "Fields" - - ReadOnly _connStringTemplate As String = "Data Source=""{0}"";Version=3;Compress=True" - Protected _mediaDBConn As SQLiteConnection - ' NOTE: This will use another DB because: can grow alot, Don't want to stress Media DB with this stuff - Protected _jobsDBConn As SQLiteConnection - -#End Region 'Fields - -#Region "Properties" - - Public ReadOnly Property MediaDBConn() As SQLiteConnection - Get - Return _mediaDBConn - End Get - End Property - - 'Public ReadOnly Property JobsDBConn() As SQLiteConnection - ' Get - ' Return _jobsDBConn - ' End Get - 'End Property - -#End Region - -#Region "Methods" - - ''' - ''' Iterates db entries to check if the paths to the movie files are valid. If not, remove all entries pertaining to the movie. - ''' - Public Sub Clean(ByVal CleanMovies As Boolean, ByVal CleanTV As Boolean, Optional ByVal source As String = "") - Dim fInfo As FileInfo - Dim tPath As String = String.Empty - Dim sPath As String = String.Empty - Try - Using SQLtransaction As SQLite.SQLiteTransaction = _mediaDBConn.BeginTransaction() - If CleanMovies Then - - Dim MoviePaths As List(Of String) = GetMoviePaths() - MoviePaths.Sort() - - 'get a listing of sources and their recursive properties - Dim SourceList As New List(Of SourceHolder) - Dim tSource As SourceHolder - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - If source = String.Empty Then - SQLcommand.CommandText = "SELECT Path, Name, Recursive, Single FROM sources;" - Else - SQLcommand.CommandText = String.Format("SELECT Path, Name, Recursive, Single FROM sources WHERE Name=""{0}""", source) - End If - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLreader.Read - SourceList.Add(New SourceHolder With {.Name = SQLreader("Name").ToString, .Path = SQLreader("Path").ToString, .Recursive = Convert.ToBoolean(SQLreader("Recursive")), .isSingle = Convert.ToBoolean(SQLreader("Single"))}) - End While - End Using - End Using - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - If source = String.Empty Then - SQLcommand.CommandText = "SELECT MoviePath, Id, Source, Type FROM movies ORDER BY MoviePath DESC;" - Else - SQLcommand.CommandText = String.Format("SELECT MoviePath, Id, Source, Type FROM movies WHERE Source = ""{0}"" ORDER BY MoviePath DESC;", source) - End If - Using SQLReader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLReader.Read - If Not File.Exists(SQLReader("MoviePath").ToString) OrElse Not Master.eSettings.ValidExts.Contains(Path.GetExtension(SQLReader("MoviePath").ToString).ToLower) Then - MoviePaths.Remove(SQLReader("MoviePath").ToString) - Master.DB.DeleteFromDB(Convert.ToInt64(SQLReader("ID")), True) - ElseIf Master.eSettings.SkipLessThan > 0 Then - fInfo = New FileInfo(SQLReader("MoviePath").ToString) - If ((Not Master.eSettings.SkipStackSizeCheck OrElse Not StringUtils.IsStacked(fInfo.Name)) AndAlso fInfo.Length < Master.eSettings.SkipLessThan * 1048576) Then - MoviePaths.Remove(SQLReader("MoviePath").ToString) - Master.DB.DeleteFromDB(Convert.ToInt64(SQLReader("ID")), True) - End If - Else - tSource = SourceList.OrderByDescending(Function(s) s.Path).FirstOrDefault(Function(s) s.Name = SQLReader("Source").ToString) - If Not IsNothing(tSource) Then - If Directory.GetParent(Directory.GetParent(SQLReader("MoviePath").ToString).FullName).Name.ToLower = "bdmv" Then - tPath = Directory.GetParent(Directory.GetParent(SQLReader("MoviePath").ToString).FullName).FullName - Else - tPath = Directory.GetParent(SQLReader("MoviePath").ToString).FullName - End If - sPath = FileUtils.Common.GetDirectory(tPath).ToLower - If tSource.Recursive = False AndAlso tPath.Length > tSource.Path.Length AndAlso If(sPath = "video_ts" OrElse sPath = "bdmv", tPath.Substring(tSource.Path.Length).Trim(Path.DirectorySeparatorChar).Split(Path.DirectorySeparatorChar).Count > 2, tPath.Substring(tSource.Path.Length).Trim(Path.DirectorySeparatorChar).Split(Path.DirectorySeparatorChar).Count > 1) Then - MoviePaths.Remove(SQLReader("MoviePath").ToString) - Master.DB.DeleteFromDB(Convert.ToInt64(SQLReader("ID")), True) - ElseIf Not Convert.ToBoolean(SQLReader("Type")) AndAlso tSource.isSingle AndAlso Not MoviePaths.Where(Function(s) SQLReader("MoviePath").ToString.ToLower.StartsWith(tSource.Path.ToLower)).Count = 1 Then - MoviePaths.Remove(SQLReader("MoviePath").ToString) - Master.DB.DeleteFromDB(Convert.ToInt64(SQLReader("ID")), True) - End If - Else - 'orphaned - MoviePaths.Remove(SQLReader("MoviePath").ToString) - Master.DB.DeleteFromDB(Convert.ToInt64(SQLReader("ID")), True) - End If - End If - End While - End Using - End Using - End If - - If CleanTV Then - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - If String.IsNullOrEmpty(source) Then - SQLcommand.CommandText = "SELECT TVEpPath FROM TVEpPaths;" - Else - SQLcommand.CommandText = String.Format("SELECT TVEpPath FROM TVEpPaths INNER JOIN TVEps ON TVEpPaths.ID = TVEps.TVEpPathID WHERE TVEps.Source =""{0}"";", source) - End If - - Using SQLReader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLReader.Read - If Not File.Exists(SQLReader("TVEpPath").ToString) OrElse Not Master.eSettings.ValidExts.Contains(Path.GetExtension(SQLReader("TVEpPath").ToString).ToLower) Then - Master.DB.DeleteTVEpFromDBByPath(SQLReader("TVEpPath").ToString, False, True) - End If - End While - End Using - 'tvshows with no more real episodes - SQLcommand.CommandText = "DELETE FROM TVShows WHERE NOT EXISTS (SELECT TVEps.TVShowID FROM TVEps WHERE TVEps.TVShowID = TVShows.ID AND TVEps.Missing = 0)" - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = String.Concat("DELETE FROM TVShows WHERE ID NOT IN (SELECT TVShowID FROM TVEps);") - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = String.Concat("DELETE FROM TVShowActors WHERE TVShowID NOT IN (SELECT ID FROM TVShows);") - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = "DELETE FROM TVEps WHERE TVShowID NOT IN (SELECT ID FROM TVShows);" - SQLcommand.ExecuteNonQuery() - 'orphaned paths - SQLcommand.CommandText = "DELETE FROM TVEpPaths WHERE NOT EXISTS (SELECT TVEps.TVEpPathID FROM TVEps WHERE TVEps.TVEpPathID = TVEpPaths.ID AND TVEps.Missing = 0)" - SQLcommand.ExecuteNonQuery() - End Using - End If - - CleanSeasons(True) - - SQLtransaction.Commit() - End Using - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = "VACUUM;" - SQLcommand.ExecuteNonQuery() - End Using - - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error", False) - End Try - End Sub - - Public Sub CleanSeasons(Optional ByVal BatchMode As Boolean = False) - Dim SQLTrans As SQLite.SQLiteTransaction = Nothing - If Not BatchMode Then SQLTrans = Master.DB.MediaDBConn.BeginTransaction() - Using SQLCommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLCommand.CommandText = "DELETE FROM TVSeason WHERE NOT EXISTS (SELECT TVEps.Season FROM TVEps WHERE TVEps.Season = TVSeason.Season AND TVEps.TVShowID = TVSeason.TVShowID) AND TVSeason.Season <> 999" - SQLCommand.ExecuteNonQuery() - End Using - If Not BatchMode Then SQLTrans.Commit() - SQLTrans = Nothing - End Sub - - Public Sub ClearNew() - Try - Using SQLtransaction As SQLite.SQLiteTransaction = Master.DB.MediaDBConn.BeginTransaction() - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = "UPDATE movies SET new = (?);" - Dim parNew As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parNew", DbType.Boolean, 0, "new") - parNew.Value = False - SQLcommand.ExecuteNonQuery() - End Using - Using SQLShowcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLShowcommand.CommandText = "UPDATE TVShows SET new = (?);" - Dim parShowNew As SQLite.SQLiteParameter = SQLShowcommand.Parameters.Add("parShowNew", DbType.Boolean, 0, "new") - parShowNew.Value = False - SQLShowcommand.ExecuteNonQuery() - End Using - Using SQLSeasoncommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLSeasoncommand.CommandText = "UPDATE TVSeason SET new = (?);" - Dim parSeasonNew As SQLite.SQLiteParameter = SQLSeasoncommand.Parameters.Add("parSeasonNew", DbType.Boolean, 0, "new") - parSeasonNew.Value = False - SQLSeasoncommand.ExecuteNonQuery() - End Using - Using SQLEpcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLEpcommand.CommandText = "UPDATE TVEps SET new = (?);" - Dim parEpNew As SQLite.SQLiteParameter = SQLEpcommand.Parameters.Add("parEpNew", DbType.Boolean, 0, "new") - parEpNew.Value = False - SQLEpcommand.ExecuteNonQuery() - End Using - SQLtransaction.Commit() - End Using - - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Public Sub Close() - CloseDatabase(_mediaDBConn) - 'CloseDatabase(_jobsDBConn) - - If Not IsNothing(_mediaDBConn) Then - _mediaDBConn = Nothing - End If - 'If Not IsNothing(_jobsDBConn) Then - ' _jobsDBConn = Nothing - 'End If - End Sub - - Protected Sub CloseDatabase(ByRef connection As SQLiteConnection) - If IsNothing(connection) Then - Return - End If - - Using command As SQLiteCommand = connection.CreateCommand() - command.CommandText = "VACUUM;" - command.ExecuteNonQuery() - End Using - - Try - connection.Close() - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.ToString, _ - ex.StackTrace, _ - "There was a problem closing the media database.") - Finally - connection.Dispose() - End Try - End Sub - - Public Function Connect() As Boolean - Dim newDatabase = ConnectMediaDB() - 'ConnectJobsDB() - Return newDatabase - End Function - - Protected Function ConnectMediaDB() As Boolean - If Not IsNothing(_mediaDBConn) Then - Return False - 'Throw New InvalidOperationException("A database connection is already open, can't open another.") - End If - - Dim mediaDBFile As String = Path.Combine(Functions.AppPath, "Media.emm") - Dim isNew As Boolean = (Not File.Exists(mediaDBFile)) - - Try - _mediaDBConn = New SQLiteConnection(String.Format(_connStringTemplate, mediaDBFile)) - _mediaDBConn.Open() - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.ToString, _ - ex.StackTrace, _ - "Unable to open media database connection.") - End Try - - If isNew Then - Dim sqlCommand As String = My.Resources.MediaDatabaseSQL_v1 - Using transaction As SQLite.SQLiteTransaction = _mediaDBConn.BeginTransaction() - Using command As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - command.CommandText = sqlCommand - command.ExecuteNonQuery() - End Using - transaction.Commit() - End Using - End If - - Return isNew - End Function - - ''' - ''' Remove all information related to a movie from the database. - ''' - ''' ID of the movie to remove, as stored in the database. - ''' Is this function already part of a transaction? - ''' True if successful, false if deletion failed. - Public Function DeleteFromDB(ByVal ID As Long, Optional ByVal BatchMode As Boolean = False) As Boolean - Try - Dim SQLtransaction As SQLite.SQLiteTransaction = Nothing - If Not BatchMode Then SQLtransaction = _mediaDBConn.BeginTransaction() - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("DELETE FROM movies WHERE id = ", ID, ";") - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = String.Concat("DELETE FROM MoviesAStreams WHERE MovieID = ", ID, ";") - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = String.Concat("DELETE FROM MoviesVStreams WHERE MovieID = ", ID, ";") - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = String.Concat("DELETE FROM MoviesActors WHERE MovieID = ", ID, ";") - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = String.Concat("DELETE FROM MoviesSubs WHERE MovieID = ", ID, ";") - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = String.Concat("DELETE FROM MoviesPosters WHERE MovieID = ", ID, ";") - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = String.Concat("DELETE FROM MoviesFanart WHERE MovieID = ", ID, ";") - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = String.Concat("DELETE FROM MoviesSets WHERE MovieID = ", ID, ";") - SQLcommand.ExecuteNonQuery() - End Using - If Not BatchMode Then SQLtransaction.Commit() - Catch ex As Exception - Return False - End Try - Return True - End Function - - ''' - ''' Remove all information related to a TV episode from the database. - ''' - ''' ID of the episode to remove, as stored in the database. - ''' Is this function already part of a transaction? - ''' True if successful, false if deletion failed. - Public Function DeleteTVEpFromDB(ByVal ID As Long, ByVal Force As Boolean, ByVal DoCleanSeasons As Boolean, Optional ByVal BatchMode As Boolean = False) As Boolean - Try - Dim SQLtransaction As SQLite.SQLiteTransaction = Nothing - If Not BatchMode Then SQLtransaction = _mediaDBConn.BeginTransaction() - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT TVEpPathID, Missing FROM TVEps WHERE ID = ", ID, ";") - Using SQLReader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader - While SQLReader.Read - Using SQLECommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - If Not Master.eSettings.DisplayMissingEpisodes OrElse Force Then - SQLECommand.CommandText = String.Concat("DELETE FROM TVEpPaths WHERE ID = ", Convert.ToInt32(SQLReader("TVEpPathID")), ";") - SQLECommand.ExecuteNonQuery() - SQLECommand.CommandText = String.Concat("DELETE FROM TVEps WHERE ID = ", ID, ";") - SQLECommand.ExecuteNonQuery() - SQLECommand.CommandText = String.Concat("DELETE FROM TVEpActors WHERE TVEpID = ", ID, ";") - SQLECommand.ExecuteNonQuery() - SQLECommand.CommandText = String.Concat("DELETE FROM TVVStreams WHERE TVEpID = ", ID, ";") - SQLECommand.ExecuteNonQuery() - SQLECommand.CommandText = String.Concat("DELETE FROM TVAStreams WHERE TVEpID = ", ID, ";") - SQLECommand.ExecuteNonQuery() - SQLECommand.CommandText = String.Concat("DELETE FROM TVSubs WHERE TVEpID = ", ID, ";") - SQLECommand.ExecuteNonQuery() - - If DoCleanSeasons Then Master.DB.CleanSeasons(True) - ElseIf Not Convert.ToBoolean(SQLReader("Missing")) Then 'already marked as missing, no need for another query - SQLECommand.CommandText = String.Concat("DELETE FROM TVEpPaths WHERE ID = ", Convert.ToInt32(SQLReader("TVEpPathID")), ";") - SQLECommand.ExecuteNonQuery() - SQLECommand.CommandText = String.Concat("UPDATE TVEps SET Missing = 1 WHERE ID = ", ID, ";") - SQLECommand.ExecuteNonQuery() - End If - End Using - End While - End Using - End Using - If Not BatchMode Then - SQLtransaction.Commit() - Master.DB.CleanSeasons() - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - Return False - End Try - Return True - End Function - - Public Function DeleteTVEpFromDBByPath(ByVal sPath As String, ByVal Force As Boolean, Optional ByVal BatchMode As Boolean = False) As Boolean - Try - Dim SQLtransaction As SQLite.SQLiteTransaction = Nothing - If Not BatchMode Then SQLtransaction = _mediaDBConn.BeginTransaction() - Using SQLPCommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLPCommand.CommandText = String.Concat("SELECT ID FROM TVEpPaths WHERE TVEpPath = """, sPath, """;") - Using SQLPReader As SQLite.SQLiteDataReader = SQLPCommand.ExecuteReader - While SQLPReader.Read - Using SQLCommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLCommand.CommandText = String.Concat("SELECT ID, TVShowID, Season, Missing FROM TVEps WHERE TVEpPathID = ", SQLPReader("ID"), ";") - Using SQLReader As SQLite.SQLiteDataReader = SQLCommand.ExecuteReader - While SQLReader.Read - Using SQLECommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - If Not Master.eSettings.DisplayMissingEpisodes OrElse Force Then - SQLECommand.CommandText = String.Concat("DELETE FROM TVEps WHERE ID = ", SQLReader("ID"), ";") - SQLECommand.ExecuteNonQuery() - SQLECommand.CommandText = String.Concat("DELETE FROM TVEpActors WHERE TVEpID = ", SQLReader("ID"), ";") - SQLECommand.ExecuteNonQuery() - SQLECommand.CommandText = String.Concat("DELETE FROM TVVStreams WHERE TVEpID = ", SQLReader("ID"), ";") - SQLECommand.ExecuteNonQuery() - SQLECommand.CommandText = String.Concat("DELETE FROM TVAStreams WHERE TVEpID = ", SQLReader("ID"), ";") - SQLECommand.ExecuteNonQuery() - SQLECommand.CommandText = String.Concat("DELETE FROM TVSubs WHERE TVEpID = ", SQLReader("ID"), ";") - SQLECommand.ExecuteNonQuery() - - SQLECommand.CommandText = String.Concat("SELECT ID FROM TVEps WHERE TVShowID = ", SQLReader("TVShowID"), " AND Season = ", SQLReader("Season"), ";") - Using SQLSeasonReader As SQLite.SQLiteDataReader = SQLECommand.ExecuteReader - If Not SQLSeasonReader.HasRows Then - 'no more episodes for this season, delete the season - Using SQLSeasonCommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLSeasonCommand.CommandText = String.Concat("DELETE FROM TVSeason WHERE TVShowID = ", SQLReader("TVShowID"), " AND Season = ", SQLReader("Season"), ";") - SQLSeasonCommand.ExecuteNonQuery() - End Using - End If - End Using - ElseIf Not Convert.ToBoolean(SQLReader("Missing")) Then - SQLECommand.CommandText = String.Concat("UPDATE TVEps SET Missing = 1, TVEpPathID = -1 WHERE ID = ", SQLReader("ID"), ";") - SQLECommand.ExecuteNonQuery() - End If - - SQLECommand.CommandText = String.Concat("DELETE FROM TVEpPaths WHERE ID = ", SQLPReader("ID"), ";") - SQLECommand.ExecuteNonQuery() - End Using - End While - End Using - End Using - End While - End Using - End Using - If Not BatchMode Then SQLtransaction.Commit() - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - Return False - End Try - Return True - End Function - - ''' - ''' Remove all information related to a TV season from the database. - ''' - ''' ID of the tvshow to remove, as stored in the database. - ''' Is this function already part of a transaction? - ''' True if successful, false if deletion failed. - Public Function DeleteTVSeasonFromDB(ByVal ShowID As Long, ByVal iSeason As Integer, Optional ByVal BatchMode As Boolean = False) As Boolean - Try - Dim SQLtransaction As SQLite.SQLiteTransaction = Nothing - If Not BatchMode Then SQLtransaction = _mediaDBConn.BeginTransaction() - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT ID FROM TVEps WHERE TVShowID = ", ShowID, " AND Season = ", iSeason, ";") - Using SQLReader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLReader.Read - DeleteTVEpFromDB(Convert.ToInt64(SQLReader("ID")), False, False, True) - End While - End Using - SQLcommand.CommandText = String.Concat("DELETE FROM TVSeason WHERE TVShowID = ", ShowID, " AND Season = ", iSeason, ";") - SQLcommand.ExecuteNonQuery() - End Using - - CleanSeasons(True) - - If Not BatchMode Then SQLtransaction.Commit() - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - Return False - End Try - Return True - End Function - - ''' - ''' Remove all information related to a TV show from the database. - ''' - ''' ID of the tvshow to remove, as stored in the database. - ''' Is this function already part of a transaction? - ''' True if successful, false if deletion failed. - Public Function DeleteTVShowFromDB(ByVal ID As Long, Optional ByVal BatchMode As Boolean = False) As Boolean - Try - Dim SQLtransaction As SQLite.SQLiteTransaction = Nothing - If Not BatchMode Then SQLtransaction = _mediaDBConn.BeginTransaction() - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT ID FROM TVEps WHERE TVShowID = ", ID, ";") - Using SQLReader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLReader.Read - DeleteTVEpFromDB(Convert.ToInt64(SQLReader("ID")), True, False, True) - End While - End Using - SQLcommand.CommandText = String.Concat("DELETE FROM TVShows WHERE ID = ", ID, ";") - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = String.Concat("DELETE FROM TVShowActors WHERE TVShowID = ", ID, ";") - SQLcommand.ExecuteNonQuery() - SQLcommand.CommandText = String.Concat("DELETE FROM TVSeason WHERE TVShowID = ", ID, ";") - SQLcommand.ExecuteNonQuery() - End Using - - CleanSeasons(True) - - If Not BatchMode Then SQLtransaction.Commit() - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - Return False - End Try - Return True - End Function - - ''' - ''' Fill DataTable with data returned from the provided command - ''' - ''' DataTable to fill - ''' SQL Command to process - Public Sub FillDataTable(ByRef dTable As DataTable, ByVal Command As String) - Try - dTable.Clear() - Dim sqlDA As New SQLite.SQLiteDataAdapter(Command, _mediaDBConn) - Dim sqlCB As New SQLite.SQLiteCommandBuilder(sqlDA) - sqlDA.Fill(dTable) - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Public Sub FillTVSeasonFromDB(ByRef _TVDB As Structures.DBTV, ByVal iSeason As Integer) - Dim _tmpTVDB As New Structures.DBTV - _tmpTVDB = LoadTVSeasonFromDB(_TVDB.ShowID, iSeason, False) - - _TVDB.IsLockSeason = _tmpTVDB.IsLockSeason - _TVDB.IsMarkSeason = _tmpTVDB.IsMarkSeason - _TVDB.SeasonPosterPath = _tmpTVDB.SeasonPosterPath - _TVDB.SeasonFanartPath = _tmpTVDB.SeasonFanartPath - End Sub - - ''' - ''' Load all the information for a TV Show. - ''' - ''' Structures.DBTV container to fill - Public Sub FillTVShowFromDB(ByRef _TVDB As Structures.DBTV) - Dim _tmpTVDB As New Structures.DBTV - _tmpTVDB = LoadTVShowFromDB(_TVDB.ShowID) - - _TVDB.IsLockShow = _tmpTVDB.IsLockShow - _TVDB.IsMarkShow = _tmpTVDB.IsMarkShow - _TVDB.ShowFanartPath = _tmpTVDB.ShowFanartPath - _TVDB.ShowPosterPath = _tmpTVDB.ShowPosterPath - _TVDB.ShowNeedsSave = _tmpTVDB.ShowNeedsSave - _TVDB.ShowNfoPath = _tmpTVDB.ShowNfoPath - _TVDB.ShowPath = _tmpTVDB.ShowPath - _TVDB.Source = _tmpTVDB.Source - _TVDB.ShowLanguage = _tmpTVDB.ShowLanguage - _TVDB.Ordering = _tmpTVDB.Ordering - _TVDB.TVShow = _tmpTVDB.TVShow - End Sub - - Public Function GetMoviePaths() As List(Of String) - Dim tList As New List(Of String) - Dim mPath As String = String.Empty - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = "SELECT Movies.MoviePath FROM Movies;" - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLreader.Read - mPath = SQLreader("MoviePath").ToString.ToLower - If Master.eSettings.NoStackExts.Contains(Path.GetExtension(mPath)) Then - tList.Add(mPath) - Else - tList.Add(StringUtils.CleanStackingMarkers(mPath)) - End If - End While - End Using - End Using - - Return tList - End Function - - ''' - ''' Load all the information for a movie. - ''' - ''' ID of the movie to load, as stored in the database - ''' Structures.DBMovie object - Public Function LoadMovieFromDB(ByVal MovieID As Long) As Structures.DBMovie - Dim _movieDB As New Structures.DBMovie - ' Clean some variables that in previous versions are nothing - _movieDB.FileSource = String.Empty - - Try - _movieDB.ID = MovieID - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT * FROM movies WHERE id = ", MovieID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - If Not DBNull.Value.Equals(SQLreader("DateAdd")) Then _movieDB.DateAdd = Convert.ToInt64(SQLreader("DateAdd")) - If Not DBNull.Value.Equals(SQLreader("ListTitle")) Then _movieDB.ListTitle = SQLreader("ListTitle").ToString - If Not DBNull.Value.Equals(SQLreader("MoviePath")) Then _movieDB.Filename = SQLreader("MoviePath").ToString - _movieDB.isSingle = Convert.ToBoolean(SQLreader("type")) - If Not DBNull.Value.Equals(SQLreader("FanartPath")) Then _movieDB.FanartPath = SQLreader("FanartPath").ToString - If Not DBNull.Value.Equals(SQLreader("PosterPath")) Then _movieDB.PosterPath = SQLreader("PosterPath").ToString - If Not DBNull.Value.Equals(SQLreader("TrailerPath")) Then _movieDB.TrailerPath = SQLreader("TrailerPath").ToString - If Not DBNull.Value.Equals(SQLreader("NfoPath")) Then _movieDB.NfoPath = SQLreader("NfoPath").ToString - If Not DBNull.Value.Equals(SQLreader("SubPath")) Then _movieDB.SubPath = SQLreader("SubPath").ToString - If Not DBNull.Value.Equals(SQLreader("ExtraPath")) Then _movieDB.ExtraPath = SQLreader("ExtraPath").ToString - If Not DBNull.Value.Equals(SQLreader("source")) Then _movieDB.Source = SQLreader("source").ToString - _movieDB.IsMark = Convert.ToBoolean(SQLreader("mark")) - _movieDB.IsLock = Convert.ToBoolean(SQLreader("lock")) - _movieDB.UseFolder = Convert.ToBoolean(SQLreader("UseFolder")) - _movieDB.OutOfTolerance = Convert.ToBoolean(SQLreader("OutOfTolerance")) - _movieDB.NeedsSave = Convert.ToBoolean(SQLreader("NeedsSave")) - If Not DBNull.Value.Equals(SQLreader("FileSource")) Then _movieDB.FileSource = SQLreader("FileSource").ToString - _movieDB.Movie = New MediaContainers.Movie - With _movieDB.Movie - If Not DBNull.Value.Equals(SQLreader("IMDB")) Then .ID = SQLreader("IMDB").ToString - If Not DBNull.Value.Equals(SQLreader("Title")) Then .Title = SQLreader("Title").ToString - If Not DBNull.Value.Equals(SQLreader("OriginalTitle")) Then .OriginalTitle = SQLreader("OriginalTitle").ToString - If Not DBNull.Value.Equals(SQLreader("SortTitle")) Then .SortTitle = SQLreader("SortTitle").ToString - If Not DBNull.Value.Equals(SQLreader("Year")) Then .Year = SQLreader("Year").ToString - If Not DBNull.Value.Equals(SQLreader("Rating")) Then .Rating = SQLreader("Rating").ToString - If Not DBNull.Value.Equals(SQLreader("Votes")) Then .Votes = SQLreader("Votes").ToString - If Not DBNull.Value.Equals(SQLreader("MPAA")) Then .MPAA = SQLreader("MPAA").ToString - If Not DBNull.Value.Equals(SQLreader("Top250")) Then .Top250 = SQLreader("Top250").ToString - If Not DBNull.Value.Equals(SQLreader("Country")) Then .Country = SQLreader("Country").ToString - If Not DBNull.Value.Equals(SQLreader("Outline")) Then .Outline = SQLreader("Outline").ToString - If Not DBNull.Value.Equals(SQLreader("Plot")) Then .Plot = SQLreader("Plot").ToString - If Not DBNull.Value.Equals(SQLreader("Tagline")) Then .Tagline = SQLreader("Tagline").ToString - If Not DBNull.Value.Equals(SQLreader("Trailer")) Then .Trailer = SQLreader("Trailer").ToString - If Not DBNull.Value.Equals(SQLreader("Certification")) Then .Certification = SQLreader("Certification").ToString - If Not DBNull.Value.Equals(SQLreader("Genre")) Then .Genre = SQLreader("Genre").ToString - If Not DBNull.Value.Equals(SQLreader("Runtime")) Then .Runtime = SQLreader("Runtime").ToString - If Not DBNull.Value.Equals(SQLreader("ReleaseDate")) Then .ReleaseDate = SQLreader("ReleaseDate").ToString - If Not DBNull.Value.Equals(SQLreader("Studio")) Then .Studio = SQLreader("Studio").ToString - If Not DBNull.Value.Equals(SQLreader("Director")) Then .Director = SQLreader("Director").ToString - If Not DBNull.Value.Equals(SQLreader("Credits")) Then .OldCredits = SQLreader("Credits").ToString - If Not DBNull.Value.Equals(SQLreader("PlayCount")) Then .PlayCount = SQLreader("PlayCount").ToString - If Not DBNull.Value.Equals(SQLreader("Watched")) Then .Watched = SQLreader("Watched").ToString - If Not DBNull.Value.Equals(SQLreader("FanartURL")) AndAlso Not Master.eSettings.NoSaveImagesToNfo Then .Fanart.URL = SQLreader("FanartURL").ToString - End With - - End Using - End Using - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT MA.MovieID, MA.ActorName , MA.Role ,Act.Name,Act.thumb FROM MoviesActors AS MA ", _ - "INNER JOIN Actors AS Act ON (MA.ActorName = Act.Name) WHERE MA.MovieID = ", _movieDB.ID, " ORDER BY MA.ROWID;") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - Dim person As MediaContainers.Person - While SQLreader.Read - person = New MediaContainers.Person - person.Name = SQLreader("ActorName").ToString - person.Role = SQLreader("Role").ToString - person.Thumb = SQLreader("thumb").ToString - _movieDB.Movie.Actors.Add(person) - End While - End Using - End Using - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT * FROM MoviesVStreams WHERE MovieID = ", MovieID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - Dim video As MediaInfo.Video - While SQLreader.Read - video = New MediaInfo.Video - If Not DBNull.Value.Equals(SQLreader("Video_Width")) Then video.Width = SQLreader("Video_Width").ToString - If Not DBNull.Value.Equals(SQLreader("Video_Height")) Then video.Height = SQLreader("Video_Height").ToString - If Not DBNull.Value.Equals(SQLreader("Video_Codec")) Then video.Codec = SQLreader("Video_Codec").ToString - If Not DBNull.Value.Equals(SQLreader("Video_Duration")) Then video.Duration = SQLreader("Video_Duration").ToString - If Not DBNull.Value.Equals(SQLreader("Video_ScanType")) Then video.Scantype = SQLreader("Video_ScanType").ToString - If Not DBNull.Value.Equals(SQLreader("Video_AspectDisplayRatio")) Then video.Aspect = SQLreader("Video_AspectDisplayRatio").ToString - If Not DBNull.Value.Equals(SQLreader("Video_Language")) Then video.Language = SQLreader("Video_Language").ToString - If Not DBNull.Value.Equals(SQLreader("Video_LongLanguage")) Then video.LongLanguage = SQLreader("Video_LongLanguage").ToString - _movieDB.Movie.FileInfo.StreamDetails.Video.Add(video) - End While - End Using - End Using - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT * FROM MoviesAStreams WHERE MovieID = ", MovieID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - Dim audio As MediaInfo.Audio - While SQLreader.Read - audio = New MediaInfo.Audio - If Not DBNull.Value.Equals(SQLreader("Audio_Language")) Then audio.Language = SQLreader("Audio_Language").ToString - If Not DBNull.Value.Equals(SQLreader("Audio_LongLanguage")) Then audio.LongLanguage = SQLreader("Audio_LongLanguage").ToString - If Not DBNull.Value.Equals(SQLreader("Audio_Codec")) Then audio.Codec = SQLreader("Audio_Codec").ToString - If Not DBNull.Value.Equals(SQLreader("Audio_Channel")) Then audio.Channels = SQLreader("Audio_Channel").ToString - _movieDB.Movie.FileInfo.StreamDetails.Audio.Add(audio) - End While - End Using - End Using - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT * FROM MoviesSubs WHERE MovieID = ", MovieID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - Dim subtitle As MediaInfo.Subtitle - While SQLreader.Read - subtitle = New MediaInfo.Subtitle - If Not DBNull.Value.Equals(SQLreader("Subs_Language")) Then subtitle.Language = SQLreader("Subs_Language").ToString - If Not DBNull.Value.Equals(SQLreader("Subs_LongLanguage")) Then subtitle.LongLanguage = SQLreader("Subs_LongLanguage").ToString - If Not DBNull.Value.Equals(SQLreader("Subs_Type")) Then subtitle.SubsType = SQLreader("Subs_Type").ToString - If Not DBNull.Value.Equals(SQLreader("Subs_Path")) Then subtitle.SubsPath = SQLreader("Subs_Path").ToString - _movieDB.Movie.FileInfo.StreamDetails.Subtitle.Add(subtitle) - End While - End Using - End Using - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT * FROM MoviesSets WHERE MovieID = ", MovieID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - Dim sets As MediaContainers.Set - While SQLreader.Read - sets = New MediaContainers.Set - If Not DBNull.Value.Equals(SQLreader("SetName")) Then sets.Set = SQLreader("SetName").ToString - If Not DBNull.Value.Equals(SQLreader("SetOrder")) Then sets.Order = SQLreader("SetOrder").ToString - _movieDB.Movie.Sets.Add(sets) - End While - End Using - End Using - If Not Master.eSettings.NoSaveImagesToNfo Then - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT * FROM MoviesFanart WHERE MovieID = ", MovieID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - Dim thumb As MediaContainers.Thumb - While SQLreader.Read - thumb = New MediaContainers.Thumb - If Not DBNull.Value.Equals(SQLreader("preview")) Then thumb.Preview = SQLreader("preview").ToString - If Not DBNull.Value.Equals(SQLreader("thumbs")) Then thumb.Text = SQLreader("thumbs").ToString - _movieDB.Movie.Fanart.Thumb.Add(thumb) - End While - End Using - End Using - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT * FROM MoviesPosters WHERE MovieID = ", MovieID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLreader.Read - If Not DBNull.Value.Equals(SQLreader("thumbs")) Then _movieDB.Movie.Thumb.Add(SQLreader("thumbs").ToString) - End While - End Using - End Using - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - _movieDB.ID = -1 - End Try - Return _movieDB - End Function - - ''' - ''' Load all the information for a movie (by movie path) - ''' - ''' Full path to the movie file - ''' Structures.DBMovie object - Public Function LoadMovieFromDB(ByVal sPath As String) As Structures.DBMovie - Try - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - ' One more Query Better then re-write all function again - SQLcommand.CommandText = String.Concat("SELECT ID FROM movies WHERE MoviePath = ", sPath, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - If SQLreader.Read Then - Return LoadMovieFromDB(Convert.ToInt64(SQLreader("ID"))) - Else - Return New Structures.DBMovie With {.Id = -1} ' No Movie Found - End If - End Using - End Using - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - Return New Structures.DBMovie With {.Id = -1} - End Function - - ''' - ''' Get the posterpath for the all seasons entry. - ''' - ''' ID of the show to load, as stored in the database - ''' Structures.DBTV object - Public Function LoadTVAllSeasonFromDB(ByVal ShowID As Long, Optional ByVal WithShow As Boolean = False) As Structures.DBTV - Dim _TVDB As New Structures.DBTV - Try - _TVDB.ShowID = ShowID - _TVDB.TVEp = New MediaContainers.EpisodeDetails With {.Season = 999} - - Using SQLcommandTVSeason As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandTVSeason.CommandText = String.Concat("SELECT * FROM TVSeason WHERE TVShowID = ", ShowID, " AND Season = 999;") - Using SQLReader As SQLite.SQLiteDataReader = SQLcommandTVSeason.ExecuteReader - If SQLReader.HasRows Then - If Not DBNull.Value.Equals(SQLReader("PosterPath")) Then _TVDB.SeasonPosterPath = SQLReader("PosterPath").ToString - End If - End Using - End Using - - If WithShow Then Master.DB.FillTVShowFromDB(_TVDB) - - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - Return _TVDB - End Function - - ''' - ''' Load all the information for a TV Episode. - ''' - ''' ID of the episode to load, as stored in the database - ''' Structures.DBTV object - Public Function LoadTVEpFromDB(ByVal EpID As Long, ByVal WithShow As Boolean) As Structures.DBTV - Dim _TVDB As New Structures.DBTV - Dim PathID As Long = -1 - Try - _TVDB.EpID = EpID - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT * FROM TVEps WHERE id = ", EpID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - If SQLreader.HasRows Then - If Not DBNull.Value.Equals(SQLreader("PosterPath")) Then _TVDB.EpPosterPath = SQLreader("PosterPath").ToString - If Not DBNull.Value.Equals(SQLreader("FanartPath")) Then _TVDB.EpFanartPath = SQLreader("FanartPath").ToString - If Not DBNull.Value.Equals(SQLreader("NfoPath")) Then _TVDB.EpNfoPath = SQLreader("NfoPath").ToString - If Not DBNull.Value.Equals(SQLreader("Source")) Then _TVDB.Source = SQLreader("Source").ToString - If Not DBNull.Value.Equals(SQLreader("TVShowID")) Then _TVDB.ShowID = Convert.ToInt64(SQLreader("TVShowID")) - PathID = Convert.ToInt64(SQLreader("TVEpPathid")) - _TVDB.IsMarkEp = Convert.ToBoolean(SQLreader("Mark")) - _TVDB.IsLockEp = Convert.ToBoolean(SQLreader("Lock")) - _TVDB.EpNeedsSave = Convert.ToBoolean(SQLreader("NeedsSave")) - _TVDB.TVEp = New MediaContainers.EpisodeDetails - With _TVDB.TVEp - If Not DBNull.Value.Equals(SQLreader("Title")) Then .Title = SQLreader("Title").ToString - If Not DBNull.Value.Equals(SQLreader("Season")) Then .Season = Convert.ToInt32(SQLreader("Season")) - If Not DBNull.Value.Equals(SQLreader("Episode")) Then .Episode = Convert.ToInt32(SQLreader("Episode")) - If Not DBNull.Value.Equals(SQLreader("Aired")) Then .Aired = SQLreader("Aired").ToString - If Not DBNull.Value.Equals(SQLreader("Rating")) Then .Rating = SQLreader("Rating").ToString - If Not DBNull.Value.Equals(SQLreader("Plot")) Then .Plot = SQLreader("Plot").ToString - If Not DBNull.Value.Equals(SQLreader("Director")) Then .Director = SQLreader("Director").ToString - If Not DBNull.Value.Equals(SQLreader("Credits")) Then .Credits = SQLreader("Credits").ToString - End With - End If - End Using - End Using - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT TVEpPath FROM TVEpPaths WHERE ID = ", PathID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader - If SQLreader.HasRows Then - If Not DBNull.Value.Equals(SQLreader("TVEpPath")) Then _TVDB.Filename = SQLreader("TVEpPath").ToString - End If - End Using - End Using - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT TA.TVEpID, TA.ActorName, TA.Role, Act.Name, Act.thumb FROM TVEpActors AS TA ", _ - "INNER JOIN Actors AS Act ON (TA.ActorName = Act.Name) WHERE TA.TVEpID = ", EpID, " ORDER BY TA.ROWID;") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - Dim person As MediaContainers.Person - While SQLreader.Read - person = New MediaContainers.Person - person.Name = SQLreader("ActorName").ToString - person.Role = SQLreader("Role").ToString - person.Thumb = SQLreader("thumb").ToString - _TVDB.TVEp.Actors.Add(person) - End While - End Using - End Using - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT * FROM TVVStreams WHERE TVEpID = ", EpID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - Dim video As MediaInfo.Video - While SQLreader.Read - video = New MediaInfo.Video - If Not DBNull.Value.Equals(SQLreader("Video_Width")) Then video.Width = SQLreader("Video_Width").ToString - If Not DBNull.Value.Equals(SQLreader("Video_Height")) Then video.Height = SQLreader("Video_Height").ToString - If Not DBNull.Value.Equals(SQLreader("Video_Codec")) Then video.Codec = SQLreader("Video_Codec").ToString - If Not DBNull.Value.Equals(SQLreader("Video_Duration")) Then video.Duration = SQLreader("Video_Duration").ToString - If Not DBNull.Value.Equals(SQLreader("Video_ScanType")) Then video.Scantype = SQLreader("Video_ScanType").ToString - If Not DBNull.Value.Equals(SQLreader("Video_AspectDisplayRatio")) Then video.Aspect = SQLreader("Video_AspectDisplayRatio").ToString - If Not DBNull.Value.Equals(SQLreader("Video_Language")) Then video.Language = SQLreader("Video_Language").ToString - If Not DBNull.Value.Equals(SQLreader("Video_LongLanguage")) Then video.LongLanguage = SQLreader("Video_LongLanguage").ToString - _TVDB.TVEp.FileInfo.StreamDetails.Video.Add(video) - End While - End Using - End Using - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT * FROM TVAStreams WHERE TVEpID = ", EpID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - Dim audio As MediaInfo.Audio - While SQLreader.Read - audio = New MediaInfo.Audio - If Not DBNull.Value.Equals(SQLreader("Audio_Language")) Then audio.Language = SQLreader("Audio_Language").ToString - If Not DBNull.Value.Equals(SQLreader("Audio_LongLanguage")) Then audio.LongLanguage = SQLreader("Audio_LongLanguage").ToString - If Not DBNull.Value.Equals(SQLreader("Audio_Codec")) Then audio.Codec = SQLreader("Audio_Codec").ToString - If Not DBNull.Value.Equals(SQLreader("Audio_Channel")) Then audio.Channels = SQLreader("Audio_Channel").ToString - _TVDB.TVEp.FileInfo.StreamDetails.Audio.Add(audio) - End While - End Using - End Using - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT * FROM TVSubs WHERE TVEpID = ", EpID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - Dim subtitle As MediaInfo.Subtitle - While SQLreader.Read - subtitle = New MediaInfo.Subtitle - If Not DBNull.Value.Equals(SQLreader("Subs_Language")) Then subtitle.Language = SQLreader("Subs_Language").ToString - If Not DBNull.Value.Equals(SQLreader("Subs_LongLanguage")) Then subtitle.LongLanguage = SQLreader("Subs_LongLanguage").ToString - _TVDB.TVEp.FileInfo.StreamDetails.Subtitle.Add(subtitle) - End While - End Using - End Using - - If _TVDB.ShowID > -1 AndAlso WithShow Then - FillTVShowFromDB(_TVDB) - FillTVSeasonFromDB(_TVDB, _TVDB.TVEp.Season) - End If - - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - _TVDB.EpID = -1 - End Try - Return _TVDB - End Function - - ''' - ''' Load all the information for a TV Episode (by episode path) - ''' - ''' Full path to the episode file - ''' Structures.DBTV object - Public Function LoadTVEpFromDB(ByVal sPath As String, ByVal WithShow As Boolean) As Structures.DBTV - Try - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - ' One more Query Better then re-write all function again - SQLcommand.CommandText = String.Concat("SELECT ID FROM TVEpPaths WHERE TVEpPath = ", sPath, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - If SQLreader.Read Then - Return LoadTVEpFromDB(Convert.ToInt64(SQLreader("ID")), WithShow) - Else - Return New Structures.DBTV With {.EpID = -1} ' No Movie Found - End If - End Using - End Using - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - Return New Structures.DBTV With {.EpID = -1} - End Function - - Public Function LoadTVFullShowFromDB(ByVal ShowID As Long) As Structures.DBTV - If Master.eSettings.AllSeasonPosterEnabled Then - Return Master.DB.LoadTVAllSeasonFromDB(ShowID, True) - Else - Return Master.DB.LoadTVShowFromDB(ShowID) - End If - End Function - - ''' - ''' Load all the information for a TV Season. - ''' - ''' ID of the show to load, as stored in the database - ''' Number of the season to load, as stored in the database - ''' Structures.DBTV object - Public Function LoadTVSeasonFromDB(ByVal ShowID As Long, ByVal iSeason As Integer, ByVal WithShow As Boolean) As Structures.DBTV - Dim _TVDB As New Structures.DBTV - Try - _TVDB.ShowID = ShowID - If WithShow Then FillTVShowFromDB(_TVDB) - _TVDB.TVEp = New MediaContainers.EpisodeDetails - _TVDB.TVEp.Season = iSeason - - Using SQLcommandTVSeason As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandTVSeason.CommandText = String.Concat("SELECT * FROM TVSeason WHERE TVShowID = ", ShowID, " AND Season = ", iSeason, ";") - Using SQLReader As SQLite.SQLiteDataReader = SQLcommandTVSeason.ExecuteReader - If SQLReader.HasRows Then - If Not DBNull.Value.Equals(SQLReader("PosterPath")) Then _TVDB.SeasonPosterPath = SQLReader("PosterPath").ToString - If Not DBNull.Value.Equals(SQLReader("FanartPath")) Then _TVDB.SeasonFanartPath = SQLReader("FanartPath").ToString - _TVDB.IsLockSeason = Convert.ToBoolean(SQLReader("Lock")) - _TVDB.IsMarkSeason = Convert.ToBoolean(SQLReader("Mark")) - End If - End Using - End Using - - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - Return _TVDB - End Function - - ''' - ''' Load all the information for a TV Show. - ''' - ''' ID of the show to load, as stored in the database - ''' Structures.DBTV object - Public Function LoadTVShowFromDB(ByVal ShowID As Long) As Structures.DBTV - Dim _TVDB As New Structures.DBTV - Try - _TVDB.ShowID = ShowID - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT * FROM TVShows WHERE id = ", ShowID, ";") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - If SQLreader.HasRows Then - If Not DBNull.Value.Equals(SQLreader("TVShowPath")) Then _TVDB.ShowPath = SQLreader("TVShowPath").ToString - If Not DBNull.Value.Equals(SQLreader("PosterPath")) Then _TVDB.ShowPosterPath = SQLreader("PosterPath").ToString - If Not DBNull.Value.Equals(SQLreader("FanartPath")) Then _TVDB.ShowFanartPath = SQLreader("FanartPath").ToString - If Not DBNull.Value.Equals(SQLreader("NfoPath")) Then _TVDB.ShowNfoPath = SQLreader("NfoPath").ToString - If Not DBNull.Value.Equals(SQLreader("Source")) Then _TVDB.Source = SQLreader("Source").ToString - If Not DBNull.Value.Equals(SQLreader("Language")) Then _TVDB.ShowLanguage = SQLreader("Language").ToString - _TVDB.IsMarkShow = Convert.ToBoolean(SQLreader("Mark")) - _TVDB.IsLockShow = Convert.ToBoolean(SQLreader("Lock")) - _TVDB.ShowNeedsSave = Convert.ToBoolean(SQLreader("NeedsSave")) - _TVDB.Ordering = DirectCast(Convert.ToInt32(SQLreader("Ordering")), Enums.Ordering) - _TVDB.TVShow = New MediaContainers.TVShow - With _TVDB.TVShow - If Not DBNull.Value.Equals(SQLreader("Title")) Then .Title = SQLreader("Title").ToString - If Not DBNull.Value.Equals(SQLreader("TVDB")) Then .ID = SQLreader("TVDB").ToString - If Not DBNull.Value.Equals(SQLreader("EpisodeGuide")) Then .EpisodeGuideURL = SQLreader("EpisodeGuide").ToString - If Not DBNull.Value.Equals(SQLreader("Plot")) Then .Plot = SQLreader("Plot").ToString - If Not DBNull.Value.Equals(SQLreader("Genre")) Then .Genre = SQLreader("Genre").ToString - If Not DBNull.Value.Equals(SQLreader("Premiered")) Then .Premiered = SQLreader("Premiered").ToString - If Not DBNull.Value.Equals(SQLreader("Studio")) Then .Studio = SQLreader("Studio").ToString - If Not DBNull.Value.Equals(SQLreader("MPAA")) Then .MPAA = SQLreader("MPAA").ToString - If Not DBNull.Value.Equals(SQLreader("Rating")) Then .Rating = SQLreader("Rating").ToString - End With - End If - End Using - End Using - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Concat("SELECT TA.TVShowID, TA.ActorName, TA.Role, Act.Name, Act.thumb FROM TVShowActors AS TA ", _ - "INNER JOIN Actors AS Act ON (TA.ActorName = Act.Name) WHERE TA.TVShowID = ", ShowID, " ORDER BY TA.ROWID;") - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - Dim person As MediaContainers.Person - While SQLreader.Read - person = New MediaContainers.Person - person.Name = SQLreader("ActorName").ToString - person.Role = SQLreader("Role").ToString - person.Thumb = SQLreader("thumb").ToString - _TVDB.TVShow.Actors.Add(person) - End While - End Using - End Using - - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - _TVDB.ShowID = -1 - End Try - Return _TVDB - End Function - - Public Sub PatchDatabase(ByVal fname As String) - Dim xmlSer As XmlSerializer - Dim _cmds As New Containers.InstallCommands - xmlSer = New XmlSerializer(GetType(Containers.InstallCommands)) - Using xmlSW As New StreamReader(Path.Combine(Functions.AppPath, fname)) - _cmds = DirectCast(xmlSer.Deserialize(xmlSW), Containers.InstallCommands) - Using SQLtransaction As SQLite.SQLiteTransaction = _mediaDBConn.BeginTransaction() - For Each _cmd As Containers.InstallCommand In _cmds.Command - If _cmd.CommandType = "DB" Then - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = _cmd.CommandExecute - Try - SQLcommand.ExecuteNonQuery() - Catch ex As Exception - Dim log As New StreamWriter(Path.Combine(Functions.AppPath, "install.log"), True) - log.WriteLine(String.Format("--- Error: {0}", ex.Message)) - log.WriteLine(ex.StackTrace) - log.Close() - End Try - End Using - End If - Next - SQLtransaction.Commit() - End Using - End Using - End Sub - - Public Function CheckEssentials() As Boolean - 'Dim needUpdate As Boolean = False - 'Dim lhttp As New HTTP - 'If Not File.Exists(Path.Combine(Functions.AppPath, "Media.emm")) Then - 'lhttp.DownloadFile(String.Format("http://pcjco.dommel.be/emm-r/{0}/commands_base.xml", If(Functions.IsBetaEnabled(), "updatesbeta", "updates")), Path.Combine(Functions.AppPath, "InstallTasks.xml"), False, "other") - 'End If - Return Master.DB.Connect() - 'If File.Exists(Path.Combine(Functions.AppPath, "InstallTasks.xml")) Then - 'Master.DB.PatchDatabase("InstallTasks.xml") - 'File.Delete(Path.Combine(Functions.AppPath, "InstallTasks.xml")) - 'needUpdate = True - 'End If - 'If File.Exists(Path.Combine(Functions.AppPath, "UpdateTasks.xml")) Then - 'Master.DB.PatchDatabase("UpdateTasks.xml") - 'File.Delete(Path.Combine(Functions.AppPath, "UpdateTasks.xml")) - 'needUpdate = True - 'End If - 'Return needUpdate - End Function - - ''' - ''' Saves all information from a Structures.DBMovie object to the database - ''' - ''' Media.Movie object to save to the database - ''' Is this a new movie (not already present in database)? - ''' Is the function already part of a transaction? - ''' Save the information to an nfo file? - ''' Structures.DBMovie object - Public Function SaveMovieToDB(ByVal _movieDB As Structures.DBMovie, ByVal IsNew As Boolean, Optional ByVal BatchMode As Boolean = False, Optional ByVal ToNfo As Boolean = False) As Structures.DBMovie - Try - Dim SQLtransaction As SQLite.SQLiteTransaction = Nothing - If Not BatchMode Then SQLtransaction = _mediaDBConn.BeginTransaction() - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - If IsNew Then - SQLcommand.CommandText = String.Concat("INSERT OR REPLACE INTO movies (", _ - "MoviePath, type, ListTitle, HasPoster, HasFanart, HasNfo, HasTrailer, HasSub, HasExtra, new, mark, source, imdb, lock, ", _ - "Title, OriginalTitle, SortTitle, Year, Rating, Votes, MPAA, Top250, Country, Outline, Plot, Tagline, Certification, Genre, ", _ - "Studio, Runtime, ReleaseDate, Director, Credits, Playcount, Watched, Trailer, ", _ - "PosterPath, FanartPath, NfoPath, TrailerPath, SubPath, ExtraPath, FanartURL, UseFolder, OutOfTolerance, FileSource, NeedsSave, DateAdd", _ - ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); SELECT LAST_INSERT_ROWID() FROM movies;") - Else - SQLcommand.CommandText = String.Concat("INSERT OR REPLACE INTO movies (", _ - "ID, MoviePath, type, ListTitle, HasPoster, HasFanart, HasNfo, HasTrailer, HasSub, HasExtra, new, mark, source, imdb, lock, ", _ - "Title, OriginalTitle, SortTitle, Year, Rating, Votes, MPAA, Top250, Country, Outline, Plot, Tagline, Certification, Genre, ", _ - "Studio, Runtime, ReleaseDate, Director, Credits, Playcount, Watched, Trailer, ", _ - "PosterPath, FanartPath, NfoPath, TrailerPath, SubPath, ExtraPath, FanartURL, UseFolder, OutOfTolerance, FileSource, NeedsSave, DateAdd", _ - ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); SELECT LAST_INSERT_ROWID() FROM movies;") - Dim parMovieID As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parMovieID", DbType.Int32, 0, "ID") - parMovieID.Value = _movieDB.ID - End If - Dim parMoviePath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parMoviePath", DbType.String, 0, "MoviePath") - Dim parType As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parType", DbType.Boolean, 0, "type") - Dim parListTitle As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parListTitle", DbType.String, 0, "ListTitle") - Dim parHasPoster As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parHasPoster", DbType.Boolean, 0, "HasPoster") - Dim parHasFanart As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parHasFanart", DbType.Boolean, 0, "HasFanart") - Dim parHasNfo As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parHasInfo", DbType.Boolean, 0, "HasNfo") - Dim parHasTrailer As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parHasTrailer", DbType.Boolean, 0, "HasTrailer") - Dim parHasSub As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parHasSub", DbType.Boolean, 0, "HasSub") - Dim parHasExtra As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parHasExtra", DbType.Boolean, 0, "HasExtra") - Dim parNew As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parNew", DbType.Boolean, 0, "new") - Dim parMark As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parMark", DbType.Boolean, 0, "mark") - Dim parSource As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parSource", DbType.String, 0, "source") - Dim parIMDB As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parIMDB", DbType.String, 0, "imdb") - Dim parLock As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parLock", DbType.Boolean, 0, "lock") - - Dim parTitle As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTitle", DbType.String, 0, "Title") - Dim parOriginalTitle As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parOriginalTitle", DbType.String, 0, "OriginalTitle") - Dim parSortTitle As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parSortTitle", DbType.String, 0, "SortTitle") - Dim parYear As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parYear", DbType.String, 0, "Year") - Dim parRating As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parRating", DbType.String, 0, "Rating") - Dim parVotes As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parVotes", DbType.String, 0, "Votes") - Dim parMPAA As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parMPAA", DbType.String, 0, "MPAA") - Dim parTop250 As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTop250", DbType.String, 0, "Top250") - Dim parCountry As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parCountry", DbType.String, 0, "Country") - Dim parOutline As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parOutline", DbType.String, 0, "Outline") - Dim parPlot As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parPlot", DbType.String, 0, "Plot") - Dim parTagline As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTagline", DbType.String, 0, "Tagline") - Dim parCertification As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parCertification", DbType.String, 0, "Certification") - Dim parGenre As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parGenre", DbType.String, 0, "Genre") - Dim parStudio As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parStudio", DbType.String, 0, "Studio") - Dim parRuntime As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parRuntime", DbType.String, 0, "Runtime") - Dim parReleaseDate As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parReleaseDate", DbType.String, 0, "ReleaseDate") - Dim parDirector As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parDirector", DbType.String, 0, "Director") - Dim parCredits As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parCredits", DbType.String, 0, "Credits") - Dim parPlaycount As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parPlaycount", DbType.String, 0, "Playcount") - Dim parWatched As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parWatched", DbType.String, 0, "Watched") - Dim parTrailer As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTrailer", DbType.String, 0, "Trailer") - - Dim parPosterPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parPosterPath", DbType.String, 0, "PosterPath") - Dim parFanartPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parFanartPath", DbType.String, 0, "FanartPath") - Dim parNfoPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parNfoPath", DbType.String, 0, "NfoPath") - Dim parTrailerPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTrailerPath", DbType.String, 0, "TrailerPath") - Dim parSubPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parSubPath", DbType.String, 0, "SubPath") - Dim parExtraPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parExtraPath", DbType.String, 0, "ExtraPath") - Dim parFanartURL As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parFanartURL", DbType.String, 0, "FanartURL") - Dim parUseFolder As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parUseFolder", DbType.Boolean, 0, "UseFolder") - Dim parOutOfTolerance As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parOutOfTolerance", DbType.Boolean, 0, "OutOfTolerance") - Dim parFileSource As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parFileSource", DbType.String, 0, "FileSource") - Dim parNeedsSave As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parNeedsSave", DbType.Boolean, 0, "NeedsSave") - Dim parMovieDateAdd As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parMovieDateAdd", DbType.Int32, 0, "DateAdd") - - ' First let's save it to NFO, even because we will need the NFO path - 'If ToNfo AndAlso Not String.IsNullOrEmpty(_movieDB.Movie.IMDBID) Then NFO.SaveMovieToNFO(_movieDB) - 'Why do we need IMDB to save to NFO? - If ToNfo Then NFO.SaveMovieToNFO(_movieDB) - parMovieDateAdd.Value = If(IsNew, Functions.ConvertToUnixTimestamp(Now), _movieDB.DateAdd) - - parMoviePath.Value = _movieDB.Filename - parType.Value = _movieDB.isSingle - parListTitle.Value = _movieDB.ListTitle - - parPosterPath.Value = _movieDB.PosterPath - parFanartPath.Value = _movieDB.FanartPath - parNfoPath.Value = _movieDB.NfoPath - parTrailerPath.Value = _movieDB.TrailerPath - parSubPath.Value = _movieDB.SubPath - parExtraPath.Value = _movieDB.ExtraPath - - If Not Master.eSettings.NoSaveImagesToNfo Then - parFanartURL.Value = _movieDB.Movie.Fanart.URL - Else - parFanartURL.Value = String.Empty - End If - - parHasPoster.Value = Not String.IsNullOrEmpty(_movieDB.PosterPath) - parHasFanart.Value = Not String.IsNullOrEmpty(_movieDB.FanartPath) - parHasNfo.Value = Not String.IsNullOrEmpty(_movieDB.NfoPath) - parHasTrailer.Value = Not String.IsNullOrEmpty(_movieDB.TrailerPath) - parHasSub.Value = Not String.IsNullOrEmpty(_movieDB.SubPath) - parHasExtra.Value = Not String.IsNullOrEmpty(_movieDB.ExtraPath) - - parNew.Value = IsNew - parMark.Value = _movieDB.IsMark - parLock.Value = _movieDB.IsLock - - parIMDB.Value = _movieDB.Movie.IMDBID - parTitle.Value = _movieDB.Movie.Title - parOriginalTitle.Value = _movieDB.Movie.OriginalTitle - parSortTitle.Value = _movieDB.Movie.SortTitle - parYear.Value = _movieDB.Movie.Year - parRating.Value = _movieDB.Movie.Rating - parVotes.Value = _movieDB.Movie.Votes - parMPAA.Value = _movieDB.Movie.MPAA - parTop250.Value = _movieDB.Movie.Top250 - parCountry.Value = _movieDB.Movie.Country - parOutline.Value = _movieDB.Movie.Outline - parPlot.Value = _movieDB.Movie.Plot - parTagline.Value = _movieDB.Movie.Tagline - parCertification.Value = _movieDB.Movie.Certification - parGenre.Value = _movieDB.Movie.Genre - parStudio.Value = _movieDB.Movie.Studio - parRuntime.Value = _movieDB.Movie.Runtime - parReleaseDate.Value = _movieDB.Movie.ReleaseDate - parDirector.Value = _movieDB.Movie.Director - parCredits.Value = _movieDB.Movie.OldCredits - parPlaycount.Value = _movieDB.Movie.PlayCount - parWatched.Value = _movieDB.Movie.Watched - parTrailer.Value = _movieDB.Movie.Trailer - - parUseFolder.Value = _movieDB.UseFolder - parOutOfTolerance.Value = _movieDB.OutOfTolerance - parFileSource.Value = _movieDB.FileSource - parNeedsSave.Value = _movieDB.NeedsSave - - parSource.Value = _movieDB.Source - If IsNew Then - If Master.eSettings.MarkNew Then - parMark.Value = True - Else - parMark.Value = False - End If - Using rdrMovie As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - If rdrMovie.Read Then - _movieDB.ID = Convert.ToInt64(rdrMovie(0)) - Else - Master.eLog.WriteToErrorLog("Something very wrong here: SaveMovieToDB", _movieDB.ToString, "Error") - _movieDB.ID = -1 - Return _movieDB - End If - End Using - Else - SQLcommand.ExecuteNonQuery() - End If - - If Not _movieDB.ID = -1 Then - Using SQLcommandActor As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandActor.CommandText = String.Concat("DELETE FROM MoviesActors WHERE MovieID = ", _movieDB.ID, ";") - SQLcommandActor.ExecuteNonQuery() - - SQLcommandActor.CommandText = String.Concat("INSERT OR REPLACE INTO Actors (Name,thumb) VALUES (?,?)") - Dim parActorName As SQLite.SQLiteParameter = SQLcommandActor.Parameters.Add("parActorName", DbType.String, 0, "Name") - Dim parActorThumb As SQLite.SQLiteParameter = SQLcommandActor.Parameters.Add("parActorThumb", DbType.String, 0, "thumb") - For Each actor As MediaContainers.Person In _movieDB.Movie.Actors - parActorName.Value = actor.Name - parActorThumb.Value = actor.Thumb - SQLcommandActor.ExecuteNonQuery() - Using SQLcommandMoviesActors As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandMoviesActors.CommandText = String.Concat("INSERT OR REPLACE INTO MoviesActors (MovieID,ActorName,Role) VALUES (?,?,?);") - Dim parMoviesActorsMovieID As SQLite.SQLiteParameter = SQLcommandMoviesActors.Parameters.Add("parMoviesActorsMovieID", DbType.UInt64, 0, "MovieID") - Dim parMoviesActorsActorName As SQLite.SQLiteParameter = SQLcommandMoviesActors.Parameters.Add("parMoviesActorsActorName", DbType.String, 0, "ActorNAme") - Dim parMoviesActorsActorRole As SQLite.SQLiteParameter = SQLcommandMoviesActors.Parameters.Add("parMoviesActorsActorRole", DbType.String, 0, "Role") - parMoviesActorsMovieID.Value = _movieDB.ID - parMoviesActorsActorName.Value = actor.Name - parMoviesActorsActorRole.Value = actor.Role - SQLcommandMoviesActors.ExecuteNonQuery() - End Using - Next - End Using - Using SQLcommandMoviesVStreams As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandMoviesVStreams.CommandText = String.Concat("DELETE FROM MoviesVStreams WHERE MovieID = ", _movieDB.ID, ";") - SQLcommandMoviesVStreams.ExecuteNonQuery() - - SQLcommandMoviesVStreams.CommandText = String.Concat("INSERT OR REPLACE INTO MoviesVStreams (", _ - "MovieID, StreamID, Video_Width,Video_Height,Video_Codec,Video_Duration,", _ - "Video_ScanType, Video_AspectDisplayRatio, Video_Language, Video_LongLanguage", _ - ") VALUES (?,?,?,?,?,?,?,?,?,?);") - Dim parVideo_MovieID As SQLite.SQLiteParameter = SQLcommandMoviesVStreams.Parameters.Add("parVideo_MovieID", DbType.UInt64, 0, "MovieID") - Dim parVideo_StreamID As SQLite.SQLiteParameter = SQLcommandMoviesVStreams.Parameters.Add("parVideo_StreamID", DbType.UInt64, 0, "StreamID") - Dim parVideo_Width As SQLite.SQLiteParameter = SQLcommandMoviesVStreams.Parameters.Add("parVideo_Width", DbType.String, 0, "Video_Width") - Dim parVideo_Height As SQLite.SQLiteParameter = SQLcommandMoviesVStreams.Parameters.Add("parVideo_Height", DbType.String, 0, "Video_Height") - Dim parVideo_Codec As SQLite.SQLiteParameter = SQLcommandMoviesVStreams.Parameters.Add("parVideo_Codec", DbType.String, 0, "Video_Codec") - Dim parVideo_Duration As SQLite.SQLiteParameter = SQLcommandMoviesVStreams.Parameters.Add("parVideo_Duration", DbType.String, 0, "Video_Duration") - Dim parVideo_ScanType As SQLite.SQLiteParameter = SQLcommandMoviesVStreams.Parameters.Add("parVideo_ScanType", DbType.String, 0, "Video_ScanType") - Dim parVideo_AspectDisplayRatio As SQLite.SQLiteParameter = SQLcommandMoviesVStreams.Parameters.Add("parVideo_AspectDisplayRatio", DbType.String, 0, "Video_AspectDisplayRatio") - Dim parVideo_Language As SQLite.SQLiteParameter = SQLcommandMoviesVStreams.Parameters.Add("parVideo_Language", DbType.String, 0, "Video_Language") - Dim parVideo_LongLanguage As SQLite.SQLiteParameter = SQLcommandMoviesVStreams.Parameters.Add("parVideo_LongLanguage", DbType.String, 0, "Video_LongLanguage") - For i As Integer = 0 To _movieDB.Movie.FileInfo.StreamDetails.Video.Count - 1 - parVideo_MovieID.Value = _movieDB.ID - parVideo_StreamID.Value = i - parVideo_Width.Value = _movieDB.Movie.FileInfo.StreamDetails.Video(i).Width - parVideo_Height.Value = _movieDB.Movie.FileInfo.StreamDetails.Video(i).Height - parVideo_Codec.Value = _movieDB.Movie.FileInfo.StreamDetails.Video(i).Codec - parVideo_Duration.Value = _movieDB.Movie.FileInfo.StreamDetails.Video(i).Duration - parVideo_ScanType.Value = _movieDB.Movie.FileInfo.StreamDetails.Video(i).Scantype - parVideo_AspectDisplayRatio.Value = _movieDB.Movie.FileInfo.StreamDetails.Video(i).Aspect - parVideo_Language.Value = _movieDB.Movie.FileInfo.StreamDetails.Video(i).Language - parVideo_LongLanguage.Value = _movieDB.Movie.FileInfo.StreamDetails.Video(i).LongLanguage - SQLcommandMoviesVStreams.ExecuteNonQuery() - Next - End Using - Using SQLcommandMoviesAStreams As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandMoviesAStreams.CommandText = String.Concat("DELETE FROM MoviesAStreams WHERE MovieID = ", _movieDB.ID, ";") - SQLcommandMoviesAStreams.ExecuteNonQuery() - - SQLcommandMoviesAStreams.CommandText = String.Concat("INSERT OR REPLACE INTO MoviesAStreams (", _ - "MovieID, StreamID, Audio_Language, Audio_LongLanguage, Audio_Codec, Audio_Channel", _ - ") VALUES (?,?,?,?,?,?);") - Dim parAudio_MovieID As SQLite.SQLiteParameter = SQLcommandMoviesAStreams.Parameters.Add("parAudio_MovieID", DbType.UInt64, 0, "MovieID") - Dim parAudio_StreamID As SQLite.SQLiteParameter = SQLcommandMoviesAStreams.Parameters.Add("parAudio_StreamID", DbType.UInt64, 0, "StreamID") - Dim parAudio_Language As SQLite.SQLiteParameter = SQLcommandMoviesAStreams.Parameters.Add("parAudio_Language", DbType.String, 0, "Audio_Language") - Dim parAudio_LongLanguage As SQLite.SQLiteParameter = SQLcommandMoviesAStreams.Parameters.Add("parAudio_LongLanguage", DbType.String, 0, "Audio_LongLanguage") - Dim parAudio_Codec As SQLite.SQLiteParameter = SQLcommandMoviesAStreams.Parameters.Add("parAudio_Codec", DbType.String, 0, "Audio_Codec") - Dim parAudio_Channel As SQLite.SQLiteParameter = SQLcommandMoviesAStreams.Parameters.Add("parAudio_Channel", DbType.String, 0, "Audio_Channel") - For i As Integer = 0 To _movieDB.Movie.FileInfo.StreamDetails.Audio.Count - 1 - parAudio_MovieID.Value = _movieDB.ID - parAudio_StreamID.Value = i - parAudio_Language.Value = _movieDB.Movie.FileInfo.StreamDetails.Audio(i).Language - parAudio_LongLanguage.Value = _movieDB.Movie.FileInfo.StreamDetails.Audio(i).LongLanguage - parAudio_Codec.Value = _movieDB.Movie.FileInfo.StreamDetails.Audio(i).Codec - parAudio_Channel.Value = _movieDB.Movie.FileInfo.StreamDetails.Audio(i).Channels - SQLcommandMoviesAStreams.ExecuteNonQuery() - Next - End Using - Using SQLcommandMoviesSubs As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandMoviesSubs.CommandText = String.Concat("DELETE FROM MoviesSubs WHERE MovieID = ", _movieDB.ID, ";") - SQLcommandMoviesSubs.ExecuteNonQuery() - - SQLcommandMoviesSubs.CommandText = String.Concat("INSERT OR REPLACE INTO MoviesSubs (", _ - "MovieID, StreamID, Subs_Language, Subs_LongLanguage,Subs_Type, Subs_Path", _ - ") VALUES (?,?,?,?,?,?);") - Dim parSubs_MovieID As SQLite.SQLiteParameter = SQLcommandMoviesSubs.Parameters.Add("parSubs_MovieID", DbType.UInt64, 0, "MovieID") - Dim parSubs_StreamID As SQLite.SQLiteParameter = SQLcommandMoviesSubs.Parameters.Add("parSubs_StreamID", DbType.UInt64, 0, "StreamID") - Dim parSubs_Language As SQLite.SQLiteParameter = SQLcommandMoviesSubs.Parameters.Add("parSubs_Language", DbType.String, 0, "Subs_Language") - Dim parSubs_LongLanguage As SQLite.SQLiteParameter = SQLcommandMoviesSubs.Parameters.Add("parSubs_LongLanguage", DbType.String, 0, "Subs_LongLanguage") - Dim parSubs_Type As SQLite.SQLiteParameter = SQLcommandMoviesSubs.Parameters.Add("parSubs_Type", DbType.String, 0, "Subs_Type") - Dim parSubs_Path As SQLite.SQLiteParameter = SQLcommandMoviesSubs.Parameters.Add("parSubs_Path", DbType.String, 0, "Subs_Path") - For i As Integer = 0 To _movieDB.Movie.FileInfo.StreamDetails.Subtitle.Count - 1 - parSubs_MovieID.Value = _movieDB.ID - parSubs_StreamID.Value = i - parSubs_Language.Value = _movieDB.Movie.FileInfo.StreamDetails.Subtitle(i).Language - parSubs_LongLanguage.Value = _movieDB.Movie.FileInfo.StreamDetails.Subtitle(i).LongLanguage - parSubs_Type.Value = _movieDB.Movie.FileInfo.StreamDetails.Subtitle(i).SubsType - parSubs_Path.Value = _movieDB.Movie.FileInfo.StreamDetails.Subtitle(i).SubsPath - SQLcommandMoviesSubs.ExecuteNonQuery() - Next - End Using - ' For what i understand this is used from Poster/Fanart Modules... will not be read/wrtire directly when load/save Movie - Using SQLcommandMoviesPosters As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandMoviesPosters.CommandText = String.Concat("DELETE FROM MoviesPosters WHERE MovieID = ", _movieDB.ID, ";") - SQLcommandMoviesPosters.ExecuteNonQuery() - - If Not Master.eSettings.NoSaveImagesToNfo Then - SQLcommandMoviesPosters.CommandText = String.Concat("INSERT OR REPLACE INTO MoviesPosters (", _ - "MovieID, thumbs", _ - ") VALUES (?,?);") - Dim parPosters_MovieID As SQLite.SQLiteParameter = SQLcommandMoviesPosters.Parameters.Add("parPosters_MovieID", DbType.UInt64, 0, "MovieID") - Dim parPosters_thumb As SQLite.SQLiteParameter = SQLcommandMoviesPosters.Parameters.Add("parPosters_thumb", DbType.String, 0, "thumbs") - For Each p As String In _movieDB.Movie.Thumb - parPosters_MovieID.Value = _movieDB.ID - parPosters_thumb.Value = p - SQLcommandMoviesPosters.ExecuteNonQuery() - Next - End If - End Using - Using SQLcommandMoviesFanart As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandMoviesFanart.CommandText = String.Concat("DELETE FROM MoviesFanart WHERE MovieID = ", _movieDB.ID, ";") - SQLcommandMoviesFanart.ExecuteNonQuery() - - If Not Master.eSettings.NoSaveImagesToNfo Then - SQLcommandMoviesFanart.CommandText = String.Concat("INSERT OR REPLACE INTO MoviesFanart (", _ - "MovieID, preview, thumbs", _ - ") VALUES (?,?,?);") - Dim parFanart_MovieID As SQLite.SQLiteParameter = SQLcommandMoviesFanart.Parameters.Add("parFanart_MovieID", DbType.UInt64, 0, "MovieID") - Dim parFanart_Preview As SQLite.SQLiteParameter = SQLcommandMoviesFanart.Parameters.Add("parFanart_Preview", DbType.String, 0, "Preview") - Dim parFanart_thumb As SQLite.SQLiteParameter = SQLcommandMoviesFanart.Parameters.Add("parFanart_thumb", DbType.String, 0, "thumb") - For Each p As MediaContainers.Thumb In _movieDB.Movie.Fanart.Thumb - parFanart_MovieID.Value = _movieDB.ID - parFanart_Preview.Value = p.Preview - parFanart_thumb.Value = p.Text - SQLcommandMoviesFanart.ExecuteNonQuery() - Next - End If - End Using - Using SQLcommandSets As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandSets.CommandText = String.Concat("INSERT OR REPLACE INTO Sets (", _ - "SetName", _ - ") VALUES (?);") - Dim parSets_SetName As SQLite.SQLiteParameter = SQLcommandSets.Parameters.Add("parSets_SetName", DbType.String, 0, "SetName") - For Each s As MediaContainers.Set In _movieDB.Movie.Sets - parSets_SetName.Value = s.Set - SQLcommandSets.ExecuteNonQuery() - Next - End Using - Using SQLcommandMoviesSets As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandMoviesSets.CommandText = String.Concat("DELETE FROM MoviesSets WHERE MovieID = ", _movieDB.ID, ";") - SQLcommandMoviesSets.ExecuteNonQuery() - - SQLcommandMoviesSets.CommandText = String.Concat("INSERT OR REPLACE INTO MoviesSets (", _ - "MovieID,SetName,SetOrder", _ - ") VALUES (?,?,?);") - Dim parMovieSets_MovieID As SQLite.SQLiteParameter = SQLcommandMoviesSets.Parameters.Add("parMovieSets_MovieID", DbType.UInt64, 0, "MovieID") - Dim parMovieSets_SetName As SQLite.SQLiteParameter = SQLcommandMoviesSets.Parameters.Add("parMovieSets_SetName", DbType.String, 0, "SetName") - Dim parMovieSets_SetOrder As SQLite.SQLiteParameter = SQLcommandMoviesSets.Parameters.Add("parMovieSets_SetOrder", DbType.String, 0, "SetOrder") - For Each s As MediaContainers.Set In _movieDB.Movie.Sets - parMovieSets_MovieID.Value = _movieDB.ID - parMovieSets_SetName.Value = s.Set - parMovieSets_SetOrder.Value = s.Order - SQLcommandMoviesSets.ExecuteNonQuery() - Next - End Using - End If - End Using - If Not BatchMode Then SQLtransaction.Commit() - - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - Return _movieDB - End Function - - ''' - ''' Saves all episode information from a Structures.DBTV object to the database - ''' - ''' Structures.DBTV object to save to the database - ''' Is this a new episode (not already present in database)? - ''' Is the function already part of a transaction? - ''' Save the information to an nfo file? - Public Sub SaveTVEpToDB(ByVal _TVEpDB As Structures.DBTV, ByVal IsNew As Boolean, ByVal WithSeason As Boolean, Optional ByVal BatchMode As Boolean = False, Optional ByVal ToNfo As Boolean = False) - Try - Dim SQLtransaction As SQLite.SQLiteTransaction = Nothing - Dim PathID As Long = -1 - If Not BatchMode Then SQLtransaction = _mediaDBConn.BeginTransaction() - - 'Copy fileinfo duration over to runtime var for xbmc to pick up episode runtime. - NFO.LoadTVEpDuration(_TVEpDB) - - 'delete so it will remove if there is a "missing" episode entry already - If Master.eSettings.DisplayMissingEpisodes Then - Using SQLCommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLCommand.CommandText = String.Concat("DELETE FROM TVEps WHERE TVShowID = ", _TVEpDB.ShowID, " AND Episode = ", _TVEpDB.TVEp.Episode, " AND Season = ", _TVEpDB.TVEp.Season, ";") - SQLCommand.ExecuteNonQuery() - End Using - End If - - If Not String.IsNullOrEmpty(_TVEpDB.Filename) Then - Using SQLpathcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLpathcommand.CommandText = "SELECT ID FROM TVEpPaths WHERE TVEpPath = (?);" - - Dim parPath As SQLite.SQLiteParameter = SQLpathcommand.Parameters.Add("parPath", DbType.String, 0, "TVEpPath") - parPath.Value = _TVEpDB.Filename - - Using SQLreader As SQLite.SQLiteDataReader = SQLpathcommand.ExecuteReader - If SQLreader.HasRows Then - PathID = Convert.ToInt64(SQLreader("ID")) - Else - Using SQLpcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLpcommand.CommandText = String.Concat("INSERT INTO TVEpPaths (", _ - "TVEpPath) VALUES (?); SELECT LAST_INSERT_ROWID() FROM TVEpPaths;") - Dim parEpPath As SQLite.SQLiteParameter = SQLpcommand.Parameters.Add("parEpPath", DbType.String, 0, "TVEpPath") - parEpPath.Value = _TVEpDB.Filename - - PathID = Convert.ToInt64(SQLpcommand.ExecuteScalar) - End Using - End If - End Using - End Using - End If - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - If IsNew Then - SQLcommand.CommandText = String.Concat("INSERT OR REPLACE INTO TVEps (", _ - "TVShowID, HasPoster, HasFanart, HasNfo, New, Mark, TVEpPathID, Source, Lock, Title, Season, Episode,", _ - "Rating, Plot, Aired, Director, Credits, PosterPath, FanartPath, NfoPath, NeedsSave, Missing", _ - ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); SELECT LAST_INSERT_ROWID() FROM TVEps;") - Else - SQLcommand.CommandText = String.Concat("INSERT OR REPLACE INTO TVEps (", _ - "ID, TVShowID, HasPoster, HasFanart, HasNfo, New, Mark, TVEpPathID, Source, Lock, Title, Season, Episode,", _ - "Rating, Plot, Aired, Director, Credits, PosterPath, FanartPath, NfoPath, NeedsSave, Missing", _ - ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); SELECT LAST_INSERT_ROWID() FROM TVEps;") - Dim parTVEpID As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTVEpID", DbType.UInt64, 0, "ID") - parTVEpID.Value = _TVEpDB.EpID - End If - - Dim parTVShowID As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTVShowID", DbType.UInt64, 0, "TVShowID") - Dim parHasPoster As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parHasPoster", DbType.Boolean, 0, "HasPoster") - Dim parHasFanart As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parHasFanart", DbType.Boolean, 0, "HasFanart") - Dim parHasNfo As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parHasInfo", DbType.Boolean, 0, "HasNfo") - Dim parNew As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parNew", DbType.Boolean, 0, "new") - Dim parMark As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parMark", DbType.Boolean, 0, "mark") - Dim parTVEpPathID As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTVEpPathID", DbType.Int64, 0, "TVEpPathID") - Dim parSource As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parSource", DbType.String, 0, "source") - Dim parLock As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parLock", DbType.Boolean, 0, "lock") - - Dim parTitle As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTitle", DbType.String, 0, "Title") - Dim parSeason As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parSeason", DbType.String, 0, "Season") - Dim parEpisode As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parEpisode", DbType.String, 0, "Episode") - Dim parRating As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parRating", DbType.String, 0, "Rating") - Dim parPlot As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parPlot", DbType.String, 0, "Plot") - Dim parAired As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parAired", DbType.String, 0, "Aired") - Dim parDirector As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parDirector", DbType.String, 0, "Director") - Dim parCredits As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parCredits", DbType.String, 0, "Credits") - Dim parPosterPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parPosterPath", DbType.String, 0, "PosterPath") - Dim parFanartPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parFanartPath", DbType.String, 0, "FanartPath") - Dim parNfoPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parNfoPath", DbType.String, 0, "NfoPath") - Dim parNeedsSave As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parNeedsSave", DbType.Boolean, 0, "NeedsSave") - Dim parTVEpMissing As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTVEpMissing", DbType.Boolean, 0, "Missing") - - ' First let's save it to NFO, even because we will need the NFO path - If ToNfo Then NFO.SaveTVEpToNFO(_TVEpDB) - - parTVShowID.Value = _TVEpDB.ShowID - parPosterPath.Value = _TVEpDB.EpPosterPath - parFanartPath.Value = _TVEpDB.EpFanartPath - parNfoPath.Value = _TVEpDB.EpNfoPath - parHasPoster.Value = Not String.IsNullOrEmpty(_TVEpDB.EpPosterPath) - parHasFanart.Value = Not String.IsNullOrEmpty(_TVEpDB.EpFanartPath) - parHasNfo.Value = Not String.IsNullOrEmpty(_TVEpDB.EpNfoPath) - parNew.Value = IsNew - parMark.Value = _TVEpDB.IsMarkEp - parTVEpPathID.Value = PathID - parLock.Value = _TVEpDB.IsLockEp - parSource.Value = _TVEpDB.Source - parNeedsSave.Value = _TVEpDB.EpNeedsSave - parTVEpMissing.Value = PathID < 0 - - With _TVEpDB.TVEp - parTitle.Value = .Title - parSeason.Value = .Season - parEpisode.Value = .Episode - parRating.Value = .Rating - parPlot.Value = .Plot - parAired.Value = .Aired - parDirector.Value = .Director - parCredits.Value = .Credits - End With - - If IsNew Then - If Master.eSettings.MarkNewEpisodes Then - parMark.Value = True - Else - parMark.Value = False - End If - Using rdrTVEp As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - If rdrTVEp.Read Then - _TVEpDB.EpID = Convert.ToInt64(rdrTVEp(0)) - Else - Master.eLog.WriteToErrorLog("Something very wrong here: SaveTVEpToDB", _TVEpDB.ToString, "Error") - _TVEpDB.EpID = -1 - Exit Sub - End If - End Using - Else - SQLcommand.ExecuteNonQuery() - End If - - If Not _TVEpDB.EpID = -1 Then - Using SQLcommandActor As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandActor.CommandText = String.Concat("DELETE FROM TVEpActors WHERE TVEpID = ", _TVEpDB.EpID, ";") - SQLcommandActor.ExecuteNonQuery() - - SQLcommandActor.CommandText = "INSERT OR REPLACE INTO Actors (Name,thumb) VALUES (?,?)" - Dim parActorName As SQLite.SQLiteParameter = SQLcommandActor.Parameters.Add("parActorName", DbType.String, 0, "Name") - Dim parActorThumb As SQLite.SQLiteParameter = SQLcommandActor.Parameters.Add("parActorThumb", DbType.String, 0, "thumb") - For Each actor As MediaContainers.Person In _TVEpDB.TVEp.Actors - parActorName.Value = actor.Name - parActorThumb.Value = actor.Thumb - SQLcommandActor.ExecuteNonQuery() - Using SQLcommandTVEpActors As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandTVEpActors.CommandText = String.Concat("INSERT OR REPLACE INTO TVEpActors (TVEpID,ActorName,Role) VALUES (?,?,?);") - Dim parTVEpActorsEpID As SQLite.SQLiteParameter = SQLcommandTVEpActors.Parameters.Add("parTVEpActorsEpID", DbType.UInt64, 0, "TVEpID") - Dim parTVEpActorsActorName As SQLite.SQLiteParameter = SQLcommandTVEpActors.Parameters.Add("parTVEpActorsActorName", DbType.String, 0, "ActorName") - Dim parTVEpActorsActorRole As SQLite.SQLiteParameter = SQLcommandTVEpActors.Parameters.Add("parTVEpActorsActorRole", DbType.String, 0, "Role") - parTVEpActorsEpID.Value = _TVEpDB.EpID - parTVEpActorsActorName.Value = actor.Name - parTVEpActorsActorRole.Value = actor.Role - SQLcommandTVEpActors.ExecuteNonQuery() - End Using - Next - End Using - Using SQLcommandTVVStreams As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandTVVStreams.CommandText = String.Concat("DELETE FROM TVVStreams WHERE TVEpID = ", _TVEpDB.EpID, ";") - SQLcommandTVVStreams.ExecuteNonQuery() - - SQLcommandTVVStreams.CommandText = String.Concat("INSERT OR REPLACE INTO TVVStreams (", _ - "TVEpID, StreamID, Video_Width,Video_Height,Video_Codec,Video_Duration,", _ - "Video_ScanType, Video_AspectDisplayRatio, Video_Language, Video_LongLanguage", _ - ") VALUES (?,?,?,?,?,?,?,?,?,?);") - Dim parVideo_EpID As SQLite.SQLiteParameter = SQLcommandTVVStreams.Parameters.Add("parVideo_EpID", DbType.UInt64, 0, "TVEpID") - Dim parVideo_StreamID As SQLite.SQLiteParameter = SQLcommandTVVStreams.Parameters.Add("parVideo_StreamID", DbType.UInt64, 0, "StreamID") - Dim parVideo_Width As SQLite.SQLiteParameter = SQLcommandTVVStreams.Parameters.Add("parVideo_Width", DbType.String, 0, "Video_Width") - Dim parVideo_Height As SQLite.SQLiteParameter = SQLcommandTVVStreams.Parameters.Add("parVideo_Height", DbType.String, 0, "Video_Height") - Dim parVideo_Codec As SQLite.SQLiteParameter = SQLcommandTVVStreams.Parameters.Add("parVideo_Codec", DbType.String, 0, "Video_Codec") - Dim parVideo_Duration As SQLite.SQLiteParameter = SQLcommandTVVStreams.Parameters.Add("parVideo_Duration", DbType.String, 0, "Video_Duration") - Dim parVideo_ScanType As SQLite.SQLiteParameter = SQLcommandTVVStreams.Parameters.Add("parVideo_ScanType", DbType.String, 0, "Video_ScanType") - Dim parVideo_AspectDisplayRatio As SQLite.SQLiteParameter = SQLcommandTVVStreams.Parameters.Add("parVideo_AspectDisplayRatio", DbType.String, 0, "Video_AspectDisplayRatio") - Dim parVideo_Language As SQLite.SQLiteParameter = SQLcommandTVVStreams.Parameters.Add("parVideo_Language", DbType.String, 0, "Video_Language") - Dim parVideo_LongLanguage As SQLite.SQLiteParameter = SQLcommandTVVStreams.Parameters.Add("parVideo_LongLanguage", DbType.String, 0, "Video_LongLanguage") - For i As Integer = 0 To _TVEpDB.TVEp.FileInfo.StreamDetails.Video.Count - 1 - parVideo_EpID.Value = _TVEpDB.EpID - parVideo_StreamID.Value = i - parVideo_Width.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Video(i).Width - parVideo_Height.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Video(i).Height - parVideo_Codec.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Video(i).Codec - parVideo_Duration.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Video(i).Duration - parVideo_ScanType.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Video(i).Scantype - parVideo_AspectDisplayRatio.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Video(i).Aspect - parVideo_Language.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Video(i).Language - parVideo_LongLanguage.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Video(i).LongLanguage - SQLcommandTVVStreams.ExecuteNonQuery() - Next - End Using - Using SQLcommandTVAStreams As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandTVAStreams.CommandText = String.Concat("DELETE FROM TVAStreams WHERE TVEpID = ", _TVEpDB.EpID, ";") - SQLcommandTVAStreams.ExecuteNonQuery() - - SQLcommandTVAStreams.CommandText = String.Concat("INSERT OR REPLACE INTO TVAStreams (", _ - "TVEpID, StreamID, Audio_Language, Audio_LongLanguage, Audio_Codec, Audio_Channel", _ - ") VALUES (?,?,?,?,?,?);") - Dim parAudio_EpID As SQLite.SQLiteParameter = SQLcommandTVAStreams.Parameters.Add("parAudio_EpID", DbType.UInt64, 0, "TVEpID") - Dim parAudio_StreamID As SQLite.SQLiteParameter = SQLcommandTVAStreams.Parameters.Add("parAudio_StreamID", DbType.UInt64, 0, "StreamID") - Dim parAudio_Language As SQLite.SQLiteParameter = SQLcommandTVAStreams.Parameters.Add("parAudio_Language", DbType.String, 0, "Audio_Language") - Dim parAudio_LongLanguage As SQLite.SQLiteParameter = SQLcommandTVAStreams.Parameters.Add("parAudio_LongLanguage", DbType.String, 0, "Audio_LongLanguage") - Dim parAudio_Codec As SQLite.SQLiteParameter = SQLcommandTVAStreams.Parameters.Add("parAudio_Codec", DbType.String, 0, "Audio_Codec") - Dim parAudio_Channel As SQLite.SQLiteParameter = SQLcommandTVAStreams.Parameters.Add("parAudio_Channel", DbType.String, 0, "Audio_Channel") - For i As Integer = 0 To _TVEpDB.TVEp.FileInfo.StreamDetails.Audio.Count - 1 - parAudio_EpID.Value = _TVEpDB.EpID - parAudio_StreamID.Value = i - parAudio_Language.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Audio(i).Language - parAudio_LongLanguage.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Audio(i).LongLanguage - parAudio_Codec.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Audio(i).Codec - parAudio_Channel.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Audio(i).Channels - SQLcommandTVAStreams.ExecuteNonQuery() - Next - End Using - Using SQLcommandTVSubs As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandTVSubs.CommandText = String.Concat("DELETE FROM TVSubs WHERE TVEpID = ", _TVEpDB.EpID, ";") - SQLcommandTVSubs.ExecuteNonQuery() - - SQLcommandTVSubs.CommandText = String.Concat("INSERT OR REPLACE INTO TVSubs (", _ - "TVEpID, StreamID, Subs_Language, Subs_LongLanguage", _ - ") VALUES (?,?,?,?);") - Dim parSubs_EpID As SQLite.SQLiteParameter = SQLcommandTVSubs.Parameters.Add("parSubs_EpID", DbType.UInt64, 0, "TVEpID") - Dim parSubs_StreamID As SQLite.SQLiteParameter = SQLcommandTVSubs.Parameters.Add("parSubs_StreamID", DbType.UInt64, 0, "StreamID") - Dim parSubs_Language As SQLite.SQLiteParameter = SQLcommandTVSubs.Parameters.Add("parSubs_Language", DbType.String, 0, "Subs_Language") - Dim parSubs_LongLanguage As SQLite.SQLiteParameter = SQLcommandTVSubs.Parameters.Add("parSubs_LongLanguage", DbType.String, 0, "Subs_LongLanguage") - For i As Integer = 0 To _TVEpDB.TVEp.FileInfo.StreamDetails.Subtitle.Count - 1 - parSubs_EpID.Value = _TVEpDB.EpID - parSubs_StreamID.Value = i - parSubs_Language.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Subtitle(i).Language - parSubs_LongLanguage.Value = _TVEpDB.TVEp.FileInfo.StreamDetails.Subtitle(i).LongLanguage - SQLcommandTVSubs.ExecuteNonQuery() - Next - End Using - - If WithSeason Then SaveTVSeasonToDB(_TVEpDB, IsNew, True) - End If - End Using - If Not BatchMode Then SQLtransaction.Commit() - - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - - Public Sub SaveTVSeasonToDB(ByRef _TVSeasonDB As Structures.DBTV, ByVal IsNew As Boolean, Optional ByVal BatchMode As Boolean = False) - Dim SQLtransaction As SQLite.SQLiteTransaction = Nothing - If Not BatchMode Then SQLtransaction = _mediaDBConn.BeginTransaction() - - Using SQLcommandTVSeason As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandTVSeason.CommandText = String.Concat("INSERT OR ", If(IsNew, "IGNORE", "REPLACE"), " INTO TVSeason (", _ - "TVShowID, SeasonText, Season, HasPoster, HasFanart, PosterPath, FanartPath, Lock, Mark, New", _ - ") VALUES (?,?,?,?,?,?,?,?,?,?);") - Dim parSeasonShowID As SQLite.SQLiteParameter = SQLcommandTVSeason.Parameters.Add("parSeasonShowID", DbType.UInt64, 0, "TVShowID") - Dim parSeasonSeasonText As SQLite.SQLiteParameter = SQLcommandTVSeason.Parameters.Add("parSeasonSeasonText", DbType.String, 0, "SeasonText") - Dim parSeasonSeason As SQLite.SQLiteParameter = SQLcommandTVSeason.Parameters.Add("parSeasonSeason", DbType.Int32, 0, "Season") - Dim parSeasonHasPoster As SQLite.SQLiteParameter = SQLcommandTVSeason.Parameters.Add("parSeasonHasPoster", DbType.Boolean, 0, "HasPoster") - Dim parSeasonHasFanart As SQLite.SQLiteParameter = SQLcommandTVSeason.Parameters.Add("parSeasonHasFanart", DbType.Boolean, 0, "HasFanart") - Dim parSeasonPosterPath As SQLite.SQLiteParameter = SQLcommandTVSeason.Parameters.Add("parSeasonPosterPath", DbType.String, 0, "PosterPath") - Dim parSeasonFanartPath As SQLite.SQLiteParameter = SQLcommandTVSeason.Parameters.Add("parSeasonFanartPath", DbType.String, 0, "FanartPath") - Dim parSeasonLock As SQLite.SQLiteParameter = SQLcommandTVSeason.Parameters.Add("parSeasonLock", DbType.Boolean, 0, "Lock") - Dim parSeasonMark As SQLite.SQLiteParameter = SQLcommandTVSeason.Parameters.Add("parSeasonMark", DbType.Boolean, 0, "Mark") - Dim parSeasonNew As SQLite.SQLiteParameter = SQLcommandTVSeason.Parameters.Add("parSeasonNew", DbType.Boolean, 0, "New") - parSeasonShowID.Value = _TVSeasonDB.ShowID - parSeasonSeasonText.Value = StringUtils.FormatSeasonText(_TVSeasonDB.TVEp.Season) - parSeasonSeason.Value = _TVSeasonDB.TVEp.Season - parSeasonHasPoster.Value = Not String.IsNullOrEmpty(_TVSeasonDB.SeasonPosterPath) - parSeasonHasFanart.Value = Not String.IsNullOrEmpty(_TVSeasonDB.SeasonFanartPath) - parSeasonPosterPath.Value = _TVSeasonDB.SeasonPosterPath - parSeasonFanartPath.Value = _TVSeasonDB.SeasonFanartPath - parSeasonLock.Value = _TVSeasonDB.IsLockSeason - parSeasonMark.Value = _TVSeasonDB.IsMarkSeason - parSeasonNew.Value = IsNew - SQLcommandTVSeason.ExecuteNonQuery() - End Using - - If Not BatchMode Then SQLtransaction.Commit() - End Sub - - ''' - ''' Saves all show information from a Structures.DBTV object to the database - ''' - ''' Structures.DBTV object to save to the database - ''' Is this a new show (not already present in database)? - ''' Is the function already part of a transaction? - ''' Save the information to an nfo file? - Public Sub SaveTVShowToDB(ByRef _TVShowDB As Structures.DBTV, ByVal IsNew As Boolean, Optional ByVal BatchMode As Boolean = False, Optional ByVal ToNfo As Boolean = False) - Try - Dim SQLtransaction As SQLite.SQLiteTransaction = Nothing - - If Not BatchMode Then SQLtransaction = _mediaDBConn.BeginTransaction() - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - If IsNew Then - SQLcommand.CommandText = String.Concat("INSERT OR REPLACE INTO TVShows (", _ - "TVShowPath, HasPoster, HasFanart, HasNfo, New, Mark, Source, TVDB, Lock, Title,", _ - "EpisodeGuide, Plot, Genre, Premiered, Studio, MPAA, Rating, PosterPath, FanartPath, NfoPath, NeedsSave, Language, Ordering", _ - ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); SELECT LAST_INSERT_ROWID() FROM TVShows;") - Else - SQLcommand.CommandText = String.Concat("INSERT OR REPLACE INTO TVShows (", _ - "ID, TVShowPath, HasPoster, HasFanart, HasNfo, New, Mark, Source, TVDB, Lock, Title,", _ - "EpisodeGuide, Plot, Genre, Premiered, Studio, MPAA, Rating, PosterPath, FanartPath, NfoPath, NeedsSave, Language, Ordering", _ - ") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); SELECT LAST_INSERT_ROWID() FROM TVShows;") - Dim parTVShowID As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTVShowID", DbType.UInt64, 0, "ID") - parTVShowID.Value = _TVShowDB.ShowID - End If - - Dim parTVShowPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTVShowPath", DbType.String, 0, "TVShowPath") - Dim parHasPoster As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parHasPoster", DbType.Boolean, 0, "HasPoster") - Dim parHasFanart As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parHasFanart", DbType.Boolean, 0, "HasFanart") - Dim parHasNfo As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parHasNfo", DbType.Boolean, 0, "HasNfo") - Dim parNew As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parNew", DbType.Boolean, 0, "new") - Dim parMark As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parMark", DbType.Boolean, 0, "mark") - Dim parSource As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parSource", DbType.String, 0, "source") - Dim parTVDB As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTVDB", DbType.String, 0, "TVDB") - Dim parLock As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parLock", DbType.Boolean, 0, "lock") - Dim parTitle As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parTitle", DbType.String, 0, "Title") - Dim parEpisodeGuide As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parEpisodeGuide", DbType.String, 0, "EpisodeGuide") - Dim parPlot As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parPlot", DbType.String, 0, "Plot") - Dim parGenre As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parGenre", DbType.String, 0, "Genre") - Dim parPremiered As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parPremiered", DbType.String, 0, "Premiered") - Dim parStudio As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parStudio", DbType.String, 0, "Studio") - Dim parMPAA As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parMPAA", DbType.String, 0, "MPAA") - Dim parRating As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parRating", DbType.String, 0, "Rating") - Dim parPosterPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parPosterPath", DbType.String, 0, "PosterPath") - Dim parFanartPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parFanartPath", DbType.String, 0, "FanartPath") - Dim parNfoPath As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parNfoPath", DbType.String, 0, "NfoPath") - Dim parNeedsSave As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parNeedsSave", DbType.Boolean, 0, "NeedsSave") - Dim parLanguage As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parLanguage", DbType.String, 0, "Language") - Dim parOrdering As SQLite.SQLiteParameter = SQLcommand.Parameters.Add("parOrdering", DbType.Int16, 0, "Ordering") - - With _TVShowDB.TVShow - parTVDB.Value = .ID - parTitle.Value = .Title - parEpisodeGuide.Value = .EpisodeGuideURL - parPlot.Value = .Plot - parGenre.Value = .Genre - parPremiered.Value = .Premiered - parStudio.Value = .Studio - parMPAA.Value = .MPAA - parRating.Value = .Rating - End With - - ' First let's save it to NFO, even because we will need the NFO path - If ToNfo Then NFO.SaveTVShowToNFO(_TVShowDB) - - parTVShowPath.Value = _TVShowDB.ShowPath - parPosterPath.Value = _TVShowDB.ShowPosterPath - parFanartPath.Value = _TVShowDB.ShowFanartPath - parNfoPath.Value = _TVShowDB.ShowNfoPath - parHasPoster.Value = Not String.IsNullOrEmpty(_TVShowDB.ShowPosterPath) - parHasFanart.Value = Not String.IsNullOrEmpty(_TVShowDB.ShowFanartPath) - parHasNfo.Value = Not String.IsNullOrEmpty(_TVShowDB.ShowNfoPath) - - parNew.Value = IsNew - parMark.Value = _TVShowDB.IsMarkShow - parLock.Value = _TVShowDB.IsLockShow - parSource.Value = _TVShowDB.Source - parNeedsSave.Value = _TVShowDB.ShowNeedsSave - parLanguage.Value = If(String.IsNullOrEmpty(_TVShowDB.ShowLanguage), "en", _TVShowDB.ShowLanguage) - parOrdering.Value = _TVShowDB.Ordering - - - - If IsNew Then - If Master.eSettings.MarkNewShows Then - parMark.Value = True - Else - parMark.Value = False - End If - Using rdrTVShow As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - If rdrTVShow.Read Then - _TVShowDB.ShowID = Convert.ToInt64(rdrTVShow(0)) - Else - Master.eLog.WriteToErrorLog("Something very wrong here: SaveTVShowToDB", _TVShowDB.ToString, "Error") - _TVShowDB.ShowID = -1 - Exit Sub - End If - End Using - Else - SQLcommand.ExecuteNonQuery() - End If - - If Not _TVShowDB.ShowID = -1 Then - Using SQLcommandActor As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandActor.CommandText = String.Concat("DELETE FROM TVShowActors WHERE TVShowID = ", _TVShowDB.EpID, ";") - SQLcommandActor.ExecuteNonQuery() - - SQLcommandActor.CommandText = String.Concat("INSERT OR REPLACE INTO Actors (Name,thumb) VALUES (?,?)") - Dim parActorName As SQLite.SQLiteParameter = SQLcommandActor.Parameters.Add("parActorName", DbType.String, 0, "Name") - Dim parActorThumb As SQLite.SQLiteParameter = SQLcommandActor.Parameters.Add("parActorThumb", DbType.String, 0, "thumb") - For Each actor As MediaContainers.Person In _TVShowDB.TVShow.Actors - parActorName.Value = actor.Name - parActorThumb.Value = actor.Thumb - SQLcommandActor.ExecuteNonQuery() - Using SQLcommandTVShowActors As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommandTVShowActors.CommandText = String.Concat("INSERT OR REPLACE INTO TVShowActors (TVShowID,ActorName,Role) VALUES (?,?,?);") - Dim parTVShowActorsShowID As SQLite.SQLiteParameter = SQLcommandTVShowActors.Parameters.Add("parTVShowActorsEpID", DbType.UInt64, 0, "TVShowID") - Dim parTVShowActorsActorName As SQLite.SQLiteParameter = SQLcommandTVShowActors.Parameters.Add("parTVShowActorsActorName", DbType.String, 0, "ActorName") - Dim parTVShowActorsActorRole As SQLite.SQLiteParameter = SQLcommandTVShowActors.Parameters.Add("parTVShowActorsActorRole", DbType.String, 0, "Role") - parTVShowActorsShowID.Value = _TVShowDB.ShowID - parTVShowActorsActorName.Value = actor.Name - parTVShowActorsActorRole.Value = actor.Role - SQLcommandTVShowActors.ExecuteNonQuery() - End Using - Next - End Using - End If - End Using - If Not BatchMode Then SQLtransaction.Commit() - - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - Public Sub LoadTVSourcesFromDB() - Master.TVSources.Clear() - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = "SELECT * FROM TVSources;" - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLreader.Read - Dim tvsource As New Structures.TVSource - tvsource.id = SQLreader("ID").ToString - tvsource.Name = SQLreader("Name").ToString - tvsource.Path = SQLreader("Path").ToString - Master.TVSources.Add(tvsource) - End While - End Using - End Using - End Sub - - Public Sub LoadMovieSourcesFromDB() - Master.MovieSources.Clear() - - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = "SELECT * FROM sources;" - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLreader.Read - Dim msource As New Structures.MovieSource - msource.id = SQLreader("ID").ToString - msource.Name = SQLreader("Name").ToString - msource.Path = SQLreader("Path").ToString - msource.Recursive = Convert.ToBoolean(SQLreader("Recursive")) - msource.UseFolderName = Convert.ToBoolean(SQLreader("Foldername")) - msource.IsSingle = Convert.ToBoolean(SQLreader("Single")) - Master.MovieSources.Add(msource) - End While - End Using - End Using - End Sub - - Public Function GetMoviePathsBySource(Optional ByVal source As String = "") As List(Of String) - Dim Paths As New List(Of String) - Using SQLcommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLcommand.CommandText = String.Format("SELECT MoviePath, Source FROM Movies {0};", If(source = String.Empty, String.Empty, String.Format("INNER JOIN Sources ON Movies.Source=Sources.Name Where Sources.Path=""{0}""", source))) - Using SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader() - While SQLreader.Read - Paths.Add(SQLreader("MoviePath").ToString) - End While - End Using - End Using - Return Paths - End Function - - - ''''''''''''''''''''''''''''''''''''''''''' - Protected Sub ConnectJobsDB() - If Not IsNothing(_mediaDBConn) Then - Return - 'Throw New InvalidOperationException("A database connection is already open, can't open another.") - End If - - Dim jobsDBFile As String = Path.Combine(Functions.AppPath, "JobLogs.emm") - Dim isNew As Boolean = (Not File.Exists(jobsDBFile)) - - Try - _jobsDBConn = New SQLiteConnection(String.Format(_connStringTemplate, jobsDBFile)) - _jobsDBConn.Open() - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.ToString, _ - ex.StackTrace, _ - "Unable to open media database connection.") - End Try - - If isNew Then - Dim sqlCommand As String = My.Resources.JobsDatabaseSQL_v1 - Using transaction As SQLite.SQLiteTransaction = _jobsDBConn.BeginTransaction() - Using command As SQLite.SQLiteCommand = _jobsDBConn.CreateCommand() - command.CommandText = sqlCommand - command.ExecuteNonQuery() - End Using - transaction.Commit() - End Using - End If - End Sub - - Public Function IsAddonInstalled(ByVal AddonID As Integer) As Single - Try - Using SQLCommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLCommand.CommandText = String.Concat("SELECT Version FROM Addons WHERE AddonID = ", AddonID, ";") - Dim tES As Object = SQLCommand.ExecuteScalar - If Not IsNothing(tES) Then - Dim tSing As Single = 0 - If Single.TryParse(tES.ToString, tSing) Then - Return tSing - End If - End If - End Using - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - Return 0 - End Function - - Public Function UninstallAddon(ByVal AddonID As Integer) As Boolean - Dim needRestart As Boolean = False - Try - Dim _cmds As Containers.InstallCommands = Containers.InstallCommands.Load(Path.Combine(Functions.AppPath, "InstallTasks.xml")) - Using SQLCommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLCommand.CommandText = String.Concat("SELECT FilePath FROM AddonFiles WHERE AddonID = ", AddonID, ";") - Using SQLReader As SQLite.SQLiteDataReader = SQLCommand.ExecuteReader - While SQLReader.Read - Try - File.Delete(SQLReader("FilePath").ToString) - Catch - _cmds.Command.Add(New Containers.InstallCommand With {.CommandType = "FILE.Delete", .CommandExecute = SQLReader("FilePath").ToString}) - needRestart = True - End Try - End While - If needRestart Then _cmds.Save(Path.Combine(Functions.AppPath, "InstallTasks.xml")) - End Using - SQLCommand.CommandText = String.Concat("DELETE FROM Addons WHERE AddonID = ", AddonID, ";") - SQLCommand.ExecuteNonQuery() - SQLCommand.CommandText = String.Concat("DELETE FROM AddonFiles WHERE AddonID = ", AddonID, ";") - SQLCommand.ExecuteNonQuery() - End Using - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - Return Not needRestart - End Function - - Public Sub SaveAddonToDB(ByVal Addon As Containers.Addon) - Try - Using SQLCommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLCommand.CommandText = String.Concat("INSERT OR REPLACE INTO Addons (", _ - "AddonID, Version) VALUES (?,?);") - Dim parAddonID As SQLite.SQLiteParameter = SQLCommand.Parameters.Add("parAddonID", DbType.Int32, 0, "AddonID") - Dim parVersion As SQLite.SQLiteParameter = SQLCommand.Parameters.Add("parVersion", DbType.String, 0, "Version") - - parAddonID.Value = Addon.ID - parVersion.Value = Addon.Version.ToString - - SQLCommand.ExecuteNonQuery() - - SQLCommand.CommandText = String.Concat("DELETE FROM AddonFiles WHERE AddonID = ", Addon.ID, ";") - SQLCommand.ExecuteNonQuery() - - Using SQLFileCommand As SQLite.SQLiteCommand = _mediaDBConn.CreateCommand() - SQLFileCommand.CommandText = String.Concat("INSERT INTO AddonFiles (AddonID, FilePath) VALUES (?,?);") - Dim parFileAddonID As SQLite.SQLiteParameter = SQLFileCommand.Parameters.Add("parFileAddonID", DbType.Int32, 0, "AddonID") - Dim parFilePath As SQLite.SQLiteParameter = SQLFileCommand.Parameters.Add("parFilePath", DbType.String, 0, "FilePath") - parFileAddonID.Value = Addon.ID - For Each fFile As KeyValuePair(Of String, String) In Addon.Files - parFilePath.Value = Path.Combine(Functions.AppPath, fFile.Key.Replace("/", Path.DirectorySeparatorChar)) - SQLFileCommand.ExecuteNonQuery() - Next - End Using - End Using - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - -#End Region 'Methods - -#Region "Nested Types" - - Private Class SourceHolder - -#Region "Fields" - - Private _name As String - Private _path As String - Private _recursive As Boolean - Private _single As Boolean - -#End Region 'Fields - -#Region "Constructors" - - Public Sub New() - Me.Clear() - End Sub - -#End Region 'Constructors - -#Region "Properties" - - Public Property isSingle() As Boolean - Get - Return Me._single - End Get - Set(ByVal value As Boolean) - Me._single = value - End Set - End Property - - Public Property Name() As String - Get - Return Me._name - End Get - Set(ByVal value As String) - Me._name = value - End Set - End Property - - Public Property Path() As String - Get - Return Me._path - End Get - Set(ByVal value As String) - Me._path = value - End Set - End Property - - Public Property Recursive() As Boolean - Get - Return Me._recursive - End Get - Set(ByVal value As Boolean) - Me._recursive = value - End Set - End Property - -#End Region 'Properties - -#Region "Methods" - - Public Sub Clear() - Me._name = String.Empty - Me._path = String.Empty - Me._recursive = False - Me._single = False - End Sub - -#End Region 'Methods - - End Class - -#End Region 'Nested Types - -End Class \ No newline at end of file diff --git a/EmberAPI/clsAPIErrorLog.vb b/EmberAPI/clsAPIErrorLog.vb index 8ea3030..7d41795 100644 --- a/EmberAPI/clsAPIErrorLog.vb +++ b/EmberAPI/clsAPIErrorLog.vb @@ -22,54 +22,63 @@ Imports System.IO Public Class ErrorLogger - #Region "Events" - - Public Event ErrorOccurred() - - #End Region 'Events - - #Region "Methods" - - ''' - ''' Write the error to our log file, if enabled in settings. - ''' - ''' Error summary - ''' Full stack trace - ''' Error title - Public Sub WriteToErrorLog(ByVal msg As String, ByVal stkTrace As String, ByVal title As String, Optional ByVal Notify As Boolean = True) - Try - If Master.eSettings.LogErrors Then - Dim sPath As String = Path.Combine(Functions.AppPath, "Log") - - If Not System.IO.Directory.Exists(sPath) Then - System.IO.Directory.CreateDirectory(sPath) - End If - - 'check the file - Using fs As FileStream = New FileStream(Path.Combine(sPath, "errlog.txt"), FileMode.OpenOrCreate, FileAccess.ReadWrite) - Using s As StreamWriter = New StreamWriter(fs) - End Using - End Using - - 'log it - Using fs1 As FileStream = New FileStream(Path.Combine(sPath, "errlog.txt"), FileMode.Append, FileAccess.Write) - Using s1 As StreamWriter = New StreamWriter(fs1) - s1.Write(String.Concat("Title: ", title, vbNewLine)) - s1.Write(String.Concat("Message: ", msg, vbNewLine)) - s1.Write(String.Concat("StackTrace: ", stkTrace, vbNewLine)) - s1.Write(String.Concat("Date/Time: ", DateTime.Now.ToString(), vbNewLine)) - s1.Write(String.Concat("===========================================================================================", vbNewLine, vbNewLine)) - End Using - End Using - - If Notify Then ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.Notification, New List(Of Object)(New Object() {"error", 1, Master.eLang.GetString(816, "An Error Has Occurred"), msg, Nothing})) - - RaiseEvent ErrorOccurred() - End If - Catch - End Try - End Sub - - #End Region 'Methods +#Region "Fields" + Private Shared _LogFile As String +#End Region 'Fields + +#Region "Constructors" + + Public Sub New() + Dim _sPath As String + _sPath = Path.Combine(Functions.AppPath, "Log") + If Not System.IO.Directory.Exists(_sPath) Then + System.IO.Directory.CreateDirectory(_sPath) + End If + + _LogFile = Path.Combine(_sPath, Format(Now, "yyyyMMdd-HHmmss") & ".log") + End Sub + +#End Region 'Constructors + +#Region "Properties" +#End Region 'Properties + +#Region "Events" + + Public Event ErrorOccurred() + +#End Region 'Events + +#Region "Methods" + + ''' + ''' Write the error to our log file, if enabled in settings. + ''' + ''' Error summary + ''' Full stack trace + ''' Error title + Public Sub WriteToErrorLog(ByVal msg As String, ByVal stkTrace As String, ByVal title As String, Optional ByVal Notify As Boolean = True) + Try + If Master.eSettings.LogErrors Then + Using fs1 As FileStream = New FileStream(_LogFile, FileMode.Append, FileAccess.Write) + Using s1 As StreamWriter = New StreamWriter(fs1) + s1.Write(String.Concat("Title: ", title, vbNewLine)) + s1.Write(String.Concat("Message: ", msg, vbNewLine)) + s1.Write(String.Concat("StackTrace: ", stkTrace, vbNewLine)) + s1.Write(String.Concat("Date/Time: ", DateTime.Now.ToString(), vbNewLine)) + s1.Write(String.Concat("===========================================================================================", vbNewLine, vbNewLine)) + s1.Flush() + End Using + End Using + + If Notify Then ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.Notification, New List(Of Object)(New Object() {"error", 1, Master.eLang.GetString(816, "An Error Has Occurred"), msg, Nothing})) + + RaiseEvent ErrorOccurred() + End If + Catch + End Try + End Sub + +#End Region 'Methods End Class diff --git a/EmberAPI/clsAPIFileUtils.vb b/EmberAPI/clsAPIFileUtils.vb index c451cf3..4f094c8 100644 --- a/EmberAPI/clsAPIFileUtils.vb +++ b/EmberAPI/clsAPIFileUtils.vb @@ -107,19 +107,20 @@ Namespace FileUtils End Try End Function - #End Region 'Methods - Public Shared Function MakeValidFilename(ByVal filename As String) As String - filename = filename.Replace(":", " -") - filename = filename.Replace("/", String.Empty) - 'pattern = pattern.Replace("\", String.Empty) - filename = filename.Replace("|", String.Empty) - filename = filename.Replace("<", String.Empty) - filename = filename.Replace(">", String.Empty) - filename = filename.Replace("?", String.Empty) - filename = filename.Replace("*", String.Empty) - filename = filename.Replace(" ", " ") - Return filename - End Function + Public Shared Function MakeValidFilename(ByVal filename As String) As String + filename = filename.Replace(":", " -") + filename = filename.Replace("/", String.Empty) + 'pattern = pattern.Replace("\", String.Empty) + filename = filename.Replace("|", String.Empty) + filename = filename.Replace("<", String.Empty) + filename = filename.Replace(">", String.Empty) + filename = filename.Replace("?", String.Empty) + filename = filename.Replace("*", String.Empty) + filename = filename.Replace(" ", " ") + Return filename + End Function +#End Region 'Methods + End Class Public Class Delete @@ -175,221 +176,221 @@ Namespace FileUtils ''' DBMovie object to get paths from ''' True if files were found that are to be deleted, false if not. ''' Not used for cleaner, needs to be modified to reflect. - Public Function GetItemsToDelete(ByVal isCleaner As Boolean, ByVal mMovie As Structures.DBMovie) As List(Of IO.FileSystemInfo) - Dim dPath As String = String.Empty - Dim ItemsToDelete As New List(Of FileSystemInfo) - Dim fScanner As New Scanner - - Try - Dim MovieFile As New FileInfo(mMovie.Filename) - Dim MovieDir As DirectoryInfo = MovieFile.Directory - - If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(MovieDir.FullName) Then - dPath = String.Concat(Path.Combine(MovieDir.Parent.FullName, MovieDir.Parent.Name), ".ext") - ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(MovieDir.FullName) Then - dPath = String.Concat(Path.Combine(MovieDir.Parent.Parent.FullName, MovieDir.Parent.Parent.Name), ".ext") - Else - dPath = mMovie.Filename - End If - - Dim sOrName As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(dPath)) - Dim sPathShort As String = Directory.GetParent(dPath).FullName - Dim sPathNoExt As String = Common.RemoveExtFromPath(dPath) - - Dim dirInfo As New DirectoryInfo(sPathShort) - Dim ioFi As New List(Of FileSystemInfo) - - Try - ioFi.AddRange(dirInfo.GetFiles()) - Catch - End Try - - If isCleaner AndAlso Master.eSettings.ExpertCleaner Then - - For Each sFile As FileInfo In ioFi - If Not Master.eSettings.CleanWhitelistExts.Contains(sFile.Extension.ToLower) AndAlso ((Master.eSettings.CleanWhitelistVideo AndAlso Not Master.eSettings.ValidExts.Contains(sFile.Extension.ToLower)) OrElse Not Master.eSettings.CleanWhitelistVideo) Then - sFile.Delete() - End If - Next - - Else - - If Not isCleaner Then - Dim fPath As String = mMovie.FanartPath - Dim tPath As String = String.Empty - If Not String.IsNullOrEmpty(fPath) AndAlso File.Exists(fPath) Then - If Common.isVideoTS(fPath) Then - If Path.GetFileName(fPath).ToLower = "fanart.jpg" Then - tPath = Path.Combine(Master.eSettings.BDPath, String.Concat(Directory.GetParent(Directory.GetParent(fPath).FullName).Name, "-fanart.jpg")) - Else - tPath = Path.Combine(Master.eSettings.BDPath, Path.GetFileName(fPath)) - End If - ElseIf Common.isBDRip(fPath) Then - If Path.GetFileName(fPath).ToLower = "fanart.jpg" Then - tPath = Path.Combine(Master.eSettings.BDPath, String.Concat(Directory.GetParent(Directory.GetParent(Directory.GetParent(fPath).FullName).FullName).Name, "-fanart.jpg")) - Else - tPath = Path.Combine(Master.eSettings.BDPath, Path.GetFileName(fPath)) - End If - Else - If Path.GetFileName(fPath).ToLower = "fanart.jpg" Then - tPath = Path.Combine(Master.eSettings.BDPath, String.Concat(Path.GetFileNameWithoutExtension(mMovie.Filename), "-fanart.jpg")) - Else - tPath = Path.Combine(Master.eSettings.BDPath, Path.GetFileName(fPath)) - End If - End If - End If - If Not String.IsNullOrEmpty(tPath) Then - If IO.File.Exists(tPath) Then - ItemsToDelete.Add(New IO.FileInfo(tPath)) - End If - End If - End If - - If Not isCleaner AndAlso mMovie.isSingle AndAlso Not Master.SourcesList.Contains(MovieDir.Parent.ToString) Then - If Common.isVideoTS(MovieDir.FullName) Then - ItemsToDelete.Add(MovieDir.Parent) - ElseIf Common.isBDRip(MovieDir.FullName) Then - ItemsToDelete.Add(MovieDir.Parent.Parent) - Else - 'check if there are other folders with movies in them - If Not fScanner.SubDirsHaveMovies(MovieDir) Then - 'no movies in sub dirs... delete the whole thing - ItemsToDelete.Add(MovieDir) - Else - 'just delete the movie file itself - ItemsToDelete.Add(New IO.FileInfo(mMovie.Filename)) - End If - End If - Else - For Each lFI As FileInfo In ioFi - If isCleaner Then - If (Master.eSettings.CleanFolderJPG AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "folder.jpg")) _ - OrElse (Master.eSettings.CleanFanartJPG AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "fanart.jpg")) _ - OrElse (Master.eSettings.CleanMovieTBN AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "movie.tbn")) _ - OrElse (Master.eSettings.CleanMovieNFO AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "movie.nfo")) _ - OrElse (Master.eSettings.CleanPosterTBN AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "poster.tbn")) _ - OrElse (Master.eSettings.CleanPosterJPG AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "poster.jpg")) _ - OrElse (Master.eSettings.CleanMovieJPG AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "movie.jpg")) Then - File.Delete(lFI.FullName) - Continue For - End If - End If - - If (Master.eSettings.CleanMovieTBNB AndAlso isCleaner) OrElse (Not isCleaner) Then - If lFI.FullName.ToLower = String.Concat(sPathNoExt.ToLower, ".tbn") _ - OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "video_ts.tbn") _ - OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "index.tbn") _ - OrElse lFI.FullName.ToLower = String.Concat(Path.Combine(sPathShort.ToLower, sOrName.ToLower), ".tbn") Then - If isCleaner Then - File.Delete(lFI.FullName) - Else - ItemsToDelete.Add(lFI) - End If - Continue For - End If - End If - - If (Master.eSettings.CleanMovieFanartJPG AndAlso isCleaner) OrElse (Not isCleaner) Then - If lFI.FullName.ToLower = String.Concat(sPathNoExt.ToLower, "-fanart.jpg") _ - OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "video_ts-fanart.jpg") _ - OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "index-fanart.jpg") _ - OrElse lFI.FullName.ToLower = String.Concat(Path.Combine(sPathShort.ToLower, sOrName.ToLower), "-fanart.jpg") Then - If isCleaner Then - File.Delete(lFI.FullName) - Else - ItemsToDelete.Add(lFI) - End If - Continue For - End If - End If - - If (Master.eSettings.CleanMovieNFOB AndAlso isCleaner) OrElse (Not isCleaner) Then - If lFI.FullName.ToLower = String.Concat(sPathNoExt.ToLower, ".nfo") _ - OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "video_ts.nfo") _ - OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "index.nfo") _ - OrElse lFI.FullName.ToLower = String.Concat(Path.Combine(sPathShort.ToLower, sOrName.ToLower), ".nfo") Then - If isCleaner Then - File.Delete(lFI.FullName) - Else - ItemsToDelete.Add(lFI) - End If - Continue For - End If - End If - - If (Master.eSettings.CleanDotFanartJPG AndAlso isCleaner) OrElse (Not isCleaner) Then - If lFI.FullName.ToLower = String.Concat(sPathNoExt.ToLower, ".fanart.jpg") _ - OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "video_ts.fanart.jpg") _ - OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "index.fanart.jpg") _ - OrElse lFI.FullName.ToLower = String.Concat(Path.Combine(sPathShort.ToLower, sOrName.ToLower), ".fanart.jpg") Then - If isCleaner Then - File.Delete(lFI.FullName) - Else - ItemsToDelete.Add(lFI) - End If - Continue For - End If - End If - - If (Master.eSettings.CleanMovieNameJPG AndAlso isCleaner) OrElse (Not isCleaner) Then - If lFI.FullName.ToLower = String.Concat(sPathNoExt.ToLower, ".jpg") _ - OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "video_ts.jpg") _ - OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "index.jpg") _ - OrElse lFI.FullName.ToLower = String.Concat(Path.Combine(sPathShort.ToLower, sOrName.ToLower), ".jpg") Then - If isCleaner Then - File.Delete(lFI.FullName) - Else - ItemsToDelete.Add(lFI) - End If - Continue For - End If - End If - Next - - If Not isCleaner Then - - ioFi.Clear() - Try - If mMovie.isSingle Then ioFi.AddRange(dirInfo.GetFiles(String.Concat(sOrName, "*.*"))) - Catch - End Try - - Try - ioFi.AddRange(dirInfo.GetFiles(String.Concat(Path.GetFileNameWithoutExtension(mMovie.Filename), ".*"))) - Catch - End Try - - ItemsToDelete.AddRange(ioFi) - - End If - - If Master.eSettings.CleanExtraThumbs Then - If Directory.Exists(Path.Combine(sPathShort, "extrathumbs")) Then - If isCleaner Then - DeleteDirectory(Path.Combine(sPathShort, "extrathumbs")) - Else - Dim dir As New DirectoryInfo(Path.Combine(sPathShort, "extrathumbs")) - If dir.Exists Then - ItemsToDelete.Add(dir) - End If - End If - End If - End If - - End If - End If - - ioFi = Nothing - dirInfo = Nothing - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - Return ItemsToDelete - End Function - -#End Region 'Methods - - End Class + Public Function GetItemsToDelete(ByVal isCleaner As Boolean, ByVal mMovie As Structures.DBMovie) As List(Of IO.FileSystemInfo) + Dim dPath As String = String.Empty + Dim ItemsToDelete As New List(Of FileSystemInfo) + Dim fScanner As New Scanner + + Try + Dim MovieFile As New FileInfo(mMovie.Filename) + Dim MovieDir As DirectoryInfo = MovieFile.Directory + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(MovieDir.FullName) Then + dPath = String.Concat(Path.Combine(MovieDir.Parent.FullName, MovieDir.Parent.Name), ".ext") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(MovieDir.FullName) Then + dPath = String.Concat(Path.Combine(MovieDir.Parent.Parent.FullName, MovieDir.Parent.Parent.Name), ".ext") + Else + dPath = mMovie.Filename + End If + + Dim sOrName As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(dPath)) + Dim sPathShort As String = Directory.GetParent(dPath).FullName + Dim sPathNoExt As String = Common.RemoveExtFromPath(dPath) + + Dim dirInfo As New DirectoryInfo(sPathShort) + Dim ioFi As New List(Of FileSystemInfo) + + Try + ioFi.AddRange(dirInfo.GetFiles()) + Catch + End Try + + If isCleaner AndAlso Master.eSettings.ExpertCleaner Then + + For Each sFile As FileInfo In ioFi + If Not Master.eSettings.CleanWhitelistExts.Contains(sFile.Extension.ToLower) AndAlso ((Master.eSettings.CleanWhitelistVideo AndAlso Not Master.eSettings.ValidExts.Contains(sFile.Extension.ToLower)) OrElse Not Master.eSettings.CleanWhitelistVideo) Then + sFile.Delete() + End If + Next + + Else + + If Not isCleaner Then + Dim fPath As String = mMovie.FanartPath + Dim tPath As String = String.Empty + If Not String.IsNullOrEmpty(fPath) AndAlso File.Exists(fPath) Then + If Common.isVideoTS(fPath) Then + If Path.GetFileName(fPath).ToLower = "fanart.jpg" Then + tPath = Path.Combine(Master.eSettings.BDPath, String.Concat(Directory.GetParent(Directory.GetParent(fPath).FullName).Name, "-fanart.jpg")) + Else + tPath = Path.Combine(Master.eSettings.BDPath, Path.GetFileName(fPath)) + End If + ElseIf Common.isBDRip(fPath) Then + If Path.GetFileName(fPath).ToLower = "fanart.jpg" Then + tPath = Path.Combine(Master.eSettings.BDPath, String.Concat(Directory.GetParent(Directory.GetParent(Directory.GetParent(fPath).FullName).FullName).Name, "-fanart.jpg")) + Else + tPath = Path.Combine(Master.eSettings.BDPath, Path.GetFileName(fPath)) + End If + Else + If Path.GetFileName(fPath).ToLower = "fanart.jpg" Then + tPath = Path.Combine(Master.eSettings.BDPath, String.Concat(Path.GetFileNameWithoutExtension(mMovie.Filename), "-fanart.jpg")) + Else + tPath = Path.Combine(Master.eSettings.BDPath, Path.GetFileName(fPath)) + End If + End If + End If + If Not String.IsNullOrEmpty(tPath) Then + If IO.File.Exists(tPath) Then + ItemsToDelete.Add(New IO.FileInfo(tPath)) + End If + End If + End If + + If Not isCleaner AndAlso mMovie.isSingle AndAlso Not Master.SourcesList.Contains(MovieDir.Parent.ToString) Then + If Common.isVideoTS(MovieDir.FullName) Then + ItemsToDelete.Add(MovieDir.Parent) + ElseIf Common.isBDRip(MovieDir.FullName) Then + ItemsToDelete.Add(MovieDir.Parent.Parent) + Else + 'check if there are other folders with movies in them + If Not fScanner.SubDirsHaveMovies(MovieDir) Then + 'no movies in sub dirs... delete the whole thing + ItemsToDelete.Add(MovieDir) + Else + 'just delete the movie file itself + ItemsToDelete.Add(New IO.FileInfo(mMovie.Filename)) + End If + End If + Else + For Each lFI As FileInfo In ioFi + If isCleaner Then + If (Master.eSettings.CleanFolderJPG AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "folder.jpg")) _ + OrElse (Master.eSettings.CleanFanartJPG AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "fanart.jpg")) _ + OrElse (Master.eSettings.CleanMovieTBN AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "movie.tbn")) _ + OrElse (Master.eSettings.CleanMovieNFO AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "movie.nfo")) _ + OrElse (Master.eSettings.CleanPosterTBN AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "poster.tbn")) _ + OrElse (Master.eSettings.CleanPosterJPG AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "poster.jpg")) _ + OrElse (Master.eSettings.CleanMovieJPG AndAlso lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "movie.jpg")) Then + File.Delete(lFI.FullName) + Continue For + End If + End If + + If (Master.eSettings.CleanMovieTBNB AndAlso isCleaner) OrElse (Not isCleaner) Then + If lFI.FullName.ToLower = String.Concat(sPathNoExt.ToLower, ".tbn") _ + OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "video_ts.tbn") _ + OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "index.tbn") _ + OrElse lFI.FullName.ToLower = String.Concat(Path.Combine(sPathShort.ToLower, sOrName.ToLower), ".tbn") Then + If isCleaner Then + File.Delete(lFI.FullName) + Else + ItemsToDelete.Add(lFI) + End If + Continue For + End If + End If + + If (Master.eSettings.CleanMovieFanartJPG AndAlso isCleaner) OrElse (Not isCleaner) Then + If lFI.FullName.ToLower = String.Concat(sPathNoExt.ToLower, "-fanart.jpg") _ + OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "video_ts-fanart.jpg") _ + OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "index-fanart.jpg") _ + OrElse lFI.FullName.ToLower = String.Concat(Path.Combine(sPathShort.ToLower, sOrName.ToLower), "-fanart.jpg") Then + If isCleaner Then + File.Delete(lFI.FullName) + Else + ItemsToDelete.Add(lFI) + End If + Continue For + End If + End If + + If (Master.eSettings.CleanMovieNFOB AndAlso isCleaner) OrElse (Not isCleaner) Then + If lFI.FullName.ToLower = String.Concat(sPathNoExt.ToLower, ".nfo") _ + OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "video_ts.nfo") _ + OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "index.nfo") _ + OrElse lFI.FullName.ToLower = String.Concat(Path.Combine(sPathShort.ToLower, sOrName.ToLower), ".nfo") Then + If isCleaner Then + File.Delete(lFI.FullName) + Else + ItemsToDelete.Add(lFI) + End If + Continue For + End If + End If + + If (Master.eSettings.CleanDotFanartJPG AndAlso isCleaner) OrElse (Not isCleaner) Then + If lFI.FullName.ToLower = String.Concat(sPathNoExt.ToLower, ".fanart.jpg") _ + OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "video_ts.fanart.jpg") _ + OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "index.fanart.jpg") _ + OrElse lFI.FullName.ToLower = String.Concat(Path.Combine(sPathShort.ToLower, sOrName.ToLower), ".fanart.jpg") Then + If isCleaner Then + File.Delete(lFI.FullName) + Else + ItemsToDelete.Add(lFI) + End If + Continue For + End If + End If + + If (Master.eSettings.CleanMovieNameJPG AndAlso isCleaner) OrElse (Not isCleaner) Then + If lFI.FullName.ToLower = String.Concat(sPathNoExt.ToLower, ".jpg") _ + OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "video_ts.jpg") _ + OrElse lFI.FullName.ToLower = Path.Combine(sPathShort.ToLower, "index.jpg") _ + OrElse lFI.FullName.ToLower = String.Concat(Path.Combine(sPathShort.ToLower, sOrName.ToLower), ".jpg") Then + If isCleaner Then + File.Delete(lFI.FullName) + Else + ItemsToDelete.Add(lFI) + End If + Continue For + End If + End If + Next + + If Not isCleaner Then + + ioFi.Clear() + Try + If mMovie.isSingle Then ioFi.AddRange(dirInfo.GetFiles(String.Concat(sOrName, "*.*"))) + Catch + End Try + + Try + ioFi.AddRange(dirInfo.GetFiles(String.Concat(Path.GetFileNameWithoutExtension(mMovie.Filename), ".*"))) + Catch + End Try + + ItemsToDelete.AddRange(ioFi) + + End If + + If Master.eSettings.CleanExtraThumbs Then + If Directory.Exists(Path.Combine(sPathShort, "extrathumbs")) Then + If isCleaner Then + DeleteDirectory(Path.Combine(sPathShort, "extrathumbs")) + Else + Dim dir As New DirectoryInfo(Path.Combine(sPathShort, "extrathumbs")) + If dir.Exists Then + ItemsToDelete.Add(dir) + End If + End If + End If + End If + + End If + End If + + ioFi = Nothing + dirInfo = Nothing + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return ItemsToDelete + End Function + +#End Region 'Methods + + End Class Public Class FileSorter @@ -401,51 +402,51 @@ Namespace FileUtils #Region "Methods" - Public Sub SortFiles(ByVal sPath As String) - Dim tmpAL As New List(Of String) - Dim tmpPath As String = String.Empty - Dim tmpName As String = String.Empty - Dim iCount As Integer = 0 - Try - If Directory.Exists(sPath) Then - Dim di As New DirectoryInfo(sPath) - Dim lFi As New List(Of FileInfo) - - Try - lFi.AddRange(di.GetFiles()) - Catch - End Try - - RaiseEvent ProgressUpdated(lFi.Count, String.Empty) - - For Each sFile As FileInfo In lFi - RaiseEvent ProgressUpdated(iCount, String.Concat(Master.eLang.GetString(219, "Moving "), sFile.Name)) - tmpName = Path.GetFileNameWithoutExtension(sFile.Name) - tmpName = tmpName.Replace(".fanart", String.Empty) - tmpName = tmpName.Replace("-fanart", String.Empty) - tmpName = tmpName.Replace("-trailer", String.Empty) - tmpName = Regex.Replace(tmpName, "\[trailer(\d+)\]", String.Empty) - tmpName = StringUtils.CleanStackingMarkers(tmpName) - tmpPath = Path.Combine(sPath, tmpName) - If Not Directory.Exists(tmpPath) Then - Directory.CreateDirectory(tmpPath) - End If - - File.Move(sFile.FullName, Path.Combine(tmpPath, sFile.Name)) - iCount += 1 - Next - - lFi = Nothing - di = Nothing - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - End Sub - -#End Region 'Methods - - End Class + Public Sub SortFiles(ByVal sPath As String) + Dim tmpAL As New List(Of String) + Dim tmpPath As String = String.Empty + Dim tmpName As String = String.Empty + Dim iCount As Integer = 0 + Try + If Directory.Exists(sPath) Then + Dim di As New DirectoryInfo(sPath) + Dim lFi As New List(Of FileInfo) + + Try + lFi.AddRange(di.GetFiles()) + Catch + End Try + + RaiseEvent ProgressUpdated(lFi.Count, String.Empty) + + For Each sFile As FileInfo In lFi + RaiseEvent ProgressUpdated(iCount, String.Concat(Master.eLang.GetString(219, "Moving "), sFile.Name)) + tmpName = Path.GetFileNameWithoutExtension(sFile.Name) + tmpName = tmpName.Replace(".fanart", String.Empty) + tmpName = tmpName.Replace("-fanart", String.Empty) + tmpName = tmpName.Replace("-trailer", String.Empty) + tmpName = Regex.Replace(tmpName, "\[trailer(\d+)\]", String.Empty) + tmpName = StringUtils.CleanStackingMarkers(tmpName) + tmpPath = Path.Combine(sPath, tmpName) + If Not Directory.Exists(tmpPath) Then + Directory.CreateDirectory(tmpPath) + End If + + File.Move(sFile.FullName, Path.Combine(tmpPath, sFile.Name)) + iCount += 1 + Next + + lFi = Nothing + di = Nothing + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + +#End Region 'Methods + + End Class End Namespace diff --git a/EmberAPI/clsAPIHTTP.vb b/EmberAPI/clsAPIHTTP.vb index 9d6daf8..d1c3fe1 100644 --- a/EmberAPI/clsAPIHTTP.vb +++ b/EmberAPI/clsAPIHTTP.vb @@ -28,363 +28,438 @@ Public Class HTTP #Region "Fields" - Private dThread As New Threading.Thread(AddressOf DownloadImage) - Private wrRequest As HttpWebRequest - Private _cancel As Boolean - Private _image As Image - Private _responseuri As String - Private _URL As String = String.Empty -#End Region 'Fields + Private dThread As New Threading.Thread(AddressOf DownloadImage) + Private wrRequest As HttpWebRequest + Private _cancel As Boolean + Private _image As Image + Private _ms As MemoryStream = New MemoryStream() + Private _responseuri As String + Private _URL As String = String.Empty + Private _isJPG As Boolean = False +#End Region 'Fields #Region "Constructors" - Public Sub New() - Me.Clear() - End Sub + Public Sub New() + Me.Clear() + End Sub - Protected Overrides Sub Finalize() - Me.wrRequest = Nothing - MyBase.Finalize() - End Sub + Protected Overrides Sub Finalize() + Me.wrRequest = Nothing + MyBase.Finalize() + End Sub -#End Region 'Constructors +#End Region 'Constructors #Region "Events" - Public Event ProgressUpdated(ByVal iPercent As Integer) + Public Event ProgressUpdated(ByVal iPercent As Integer) -#End Region 'Events +#End Region 'Events #Region "Properties" - Public ReadOnly Property Image() As Image - Get - Return Me._image - End Get - End Property - - Public Property ResponseUri() As String - Get - Return Me._responseuri - End Get - Set(ByVal value As String) - Me._responseuri = value - End Set - End Property - -#End Region 'Properties + Public ReadOnly Property Image() As Image + Get + Return Me._image + End Get + End Property + + Public ReadOnly Property isJPG() As Boolean + Get + Return Me._isJPG + End Get + End Property + + Public ReadOnly Property ms() As MemoryStream + Get + Return Me._ms + End Get + End Property + + Public Property ResponseUri() As String + Get + Return Me._responseuri + End Get + Set(ByVal value As String) + Me._responseuri = value + End Set + End Property + +#End Region 'Properties #Region "Methods" - Public Sub Cancel() - Me._cancel = True - If Not IsNothing(Me.wrRequest) Then Me.wrRequest.Abort() - End Sub - - Public Sub Clear() - Me._responseuri = String.Empty - Me._image = Nothing - Me._cancel = False - End Sub - Public Function DownloadData(ByVal URL As String) As String - Dim sResponse As String = String.Empty - Dim cEncoding As System.Text.Encoding - - Me.Clear() - - Try - Me.wrRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest) - Me.wrRequest.Timeout = 20000 - Me.wrRequest.Headers.Add("Accept-Encoding", "gzip,deflate") - Me.wrRequest.KeepAlive = False - - If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then - Dim wProxy As New WebProxy(Master.eSettings.ProxyURI, Master.eSettings.ProxyPort) - wProxy.BypassProxyOnLocal = True - If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) Then - wProxy.Credentials = Master.eSettings.ProxyCreds - Else - wProxy.Credentials = CredentialCache.DefaultCredentials - End If - Me.wrRequest.Proxy = wProxy - End If - Using wrResponse As HttpWebResponse = DirectCast(Me.wrRequest.GetResponse(), HttpWebResponse) - Select Case True - 'for our purposes I think it's safe to assume that all xmls we will be dealing with will be UTF-8 encoded - Case wrResponse.ContentType.ToLower.Contains("/xml") OrElse wrResponse.ContentType.ToLower.Contains("charset=utf-8") - cEncoding = System.Text.Encoding.UTF8 - Case Else - cEncoding = System.Text.Encoding.GetEncoding(28591) - End Select - Using Ms As Stream = wrResponse.GetResponseStream - If wrResponse.ContentEncoding.ToLower = "gzip" Then - sResponse = New StreamReader(New GZipStream(Ms, CompressionMode.Decompress), cEncoding, True).ReadToEnd - ElseIf wrResponse.ContentEncoding.ToLower = "deflate" Then - sResponse = New StreamReader(New DeflateStream(Ms, CompressionMode.Decompress), cEncoding, True).ReadToEnd - Else - sResponse = New StreamReader(Ms, cEncoding, True).ReadToEnd - End If - End Using - Me._responseuri = wrResponse.ResponseUri.ToString - End Using - Catch ex As Exception - End Try - - Return sResponse - End Function - Private Function MakePostFieldText(ByVal Boundary As String, ByVal name As String, ByVal value As String) As String - Return String.Concat(Boundary, vbCrLf, String.Format("Content-Disposition:form-data;name=""{0}""", name), vbCrLf, vbCrLf, value, vbCrLf) - End Function - Private Function MakePostFieldFile(ByVal Boundary As String, ByVal name As String) As String - Return String.Concat(Boundary, vbCrLf, String.Format("Content-Disposition:form-data;name=""file"";filename=""{0}""", name), vbCrLf, "Content-Type: application/octet-stream", vbCrLf, vbCrLf) - End Function - - Public Function PostDownloadData(ByVal URL As String, ByVal postDataList As List(Of String())) As String - Dim sResponse As String = String.Empty - Dim cEncoding As System.Text.Encoding - Dim Idboundary As String = Convert.ToInt64(Functions.ConvertToUnixTimestamp(Now)).ToString - Dim Boundary As String = String.Format("--{0}", Idboundary) - Dim postDataBytes As New List(Of Byte()) - Me.Clear() - System.Net.ServicePointManager.Expect100Continue = False - Try - For Each s() As String In postDataList - If s.Count = 2 Then postDataBytes.Add(System.Text.Encoding.UTF8.GetBytes(String.Concat(MakePostFieldText(Boundary, s(0), s(1))))) - If s.Count = 3 Then - Select Case s(2) - Case "file" 'array in list is {filename,filepath,"file"} - postDataBytes.Add(System.Text.Encoding.UTF8.GetBytes(String.Concat(MakePostFieldFile(Boundary, s(0))))) - postDataBytes.Add(File.ReadAllBytes(s(1))) - postDataBytes.Add(System.Text.Encoding.UTF8.GetBytes(String.Concat(vbCrLf, Boundary, vbCrLf))) - End Select - End If - Next - postDataBytes.Add(System.Text.Encoding.UTF8.GetBytes(String.Concat(Boundary, vbCrLf))) - - Me.wrRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest) - Me.wrRequest.Timeout = 20000 - Me.wrRequest.Headers.Add("Accept-Encoding", "gzip,deflate") - If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then - Dim wProxy As New WebProxy(Master.eSettings.ProxyURI, Master.eSettings.ProxyPort) - wProxy.BypassProxyOnLocal = True - If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) Then - wProxy.Credentials = Master.eSettings.ProxyCreds - Else - wProxy.Credentials = CredentialCache.DefaultCredentials - End If - Me.wrRequest.Proxy = wProxy - End If - Me.wrRequest.Method = "POST" - Me.wrRequest.ContentType = String.Concat("multipart/form-data;boundary=", Idboundary) - Dim size As Integer = 0 - For i As Integer = 0 To postDataBytes.Count - 1 - size += postDataBytes(i).Length - Next - Me.wrRequest.ContentLength = size - Dim newStream As Stream = Me.wrRequest.GetRequestStream() - For i As Integer = 0 To postDataBytes.Count - 1 - newStream.Write(postDataBytes(i), 0, postDataBytes(i).Length) - Next - newStream.Close() - - Using wrResponse As HttpWebResponse = DirectCast(Me.wrRequest.GetResponse(), HttpWebResponse) - Select Case True - Case wrResponse.ContentType.ToLower.Contains("/xml") OrElse wrResponse.ContentType.ToLower.Contains("charset=utf-8") - cEncoding = System.Text.Encoding.UTF8 - Case Else - cEncoding = System.Text.Encoding.GetEncoding(28591) - End Select - Using Ms As Stream = wrResponse.GetResponseStream - If wrResponse.ContentEncoding.ToLower = "gzip" Then - sResponse = New StreamReader(New GZipStream(Ms, CompressionMode.Decompress), cEncoding, True).ReadToEnd - ElseIf wrResponse.ContentEncoding.ToLower = "deflate" Then - sResponse = New StreamReader(New DeflateStream(Ms, CompressionMode.Decompress), cEncoding, True).ReadToEnd - Else - sResponse = New StreamReader(Ms, cEncoding, True).ReadToEnd - End If - End Using - Me._responseuri = wrResponse.ResponseUri.ToString - End Using - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error", False) - End Try - - Return sResponse - End Function - - Public Function DownloadFile(ByVal URL As String, ByVal LocalFile As String, ByVal ReportUpdate As Boolean, ByVal Type As String) As String - Dim outFile As String = String.Empty - Dim urlExt As String = String.Empty - - Me._cancel = False - Try - Me.wrRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest) - Me.wrRequest.Timeout = 20000 - - If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then - Dim wProxy As New WebProxy(Master.eSettings.ProxyURI, Master.eSettings.ProxyPort) - wProxy.BypassProxyOnLocal = True - If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) Then - wProxy.Credentials = Master.eSettings.ProxyCreds - Else - wProxy.Credentials = CredentialCache.DefaultCredentials - End If - Me.wrRequest.Proxy = wProxy - End If - - Try - urlExt = Path.GetExtension(URL) - Catch - End Try - - Using wrResponse As HttpWebResponse = DirectCast(Me.wrRequest.GetResponse(), HttpWebResponse) - Select Case True - Case Type = "trailer" AndAlso Master.eSettings.ValidExts.Contains(urlExt) - outFile = Path.Combine(Directory.GetParent(LocalFile).FullName, String.Concat(Path.GetFileNameWithoutExtension(LocalFile), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(URL))) - Case Type = "trailer" AndAlso Master.eSettings.ValidExts.Contains(Path.GetExtension(wrResponse.ResponseUri.AbsolutePath)) - outFile = Path.Combine(Directory.GetParent(LocalFile).FullName, String.Concat(Path.GetFileNameWithoutExtension(LocalFile), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(wrResponse.ResponseUri.AbsolutePath))) - Case Type = "trailer" AndAlso wrResponse.ContentType.Contains("mp4") - outFile = Path.Combine(Directory.GetParent(LocalFile).FullName, String.Concat(Path.GetFileNameWithoutExtension(LocalFile), If(Master.eSettings.DashTrailer, "-trailer.mp4", "[trailer].mp4"))) - Case Type = "trailer" AndAlso wrResponse.ContentType.Contains("flv") - outFile = Path.Combine(Directory.GetParent(LocalFile).FullName, String.Concat(Path.GetFileNameWithoutExtension(LocalFile), If(Master.eSettings.DashTrailer, "-trailer.flv", "[trailer].flv"))) - Case Type = "trailer" AndAlso wrResponse.ContentType.Contains("webm") - outFile = Path.Combine(Directory.GetParent(LocalFile).FullName, String.Concat(Path.GetFileNameWithoutExtension(LocalFile), If(Master.eSettings.DashTrailer, "-trailer.webm", "[trailer].webm"))) - Case Type = "other" - outFile = LocalFile - End Select - - If Not String.IsNullOrEmpty(outFile) AndAlso Not wrResponse.ContentLength = 0 Then - - If File.Exists(outFile) Then File.Delete(outFile) - - Using Ms As Stream = wrResponse.GetResponseStream - Using mStream As New FileStream(outFile, FileMode.Create, FileAccess.Write) - Dim StreamBuffer(4096) As Byte - Dim BlockSize As Integer - Dim iProgress As Integer - Dim iCurrent As Integer - Do - BlockSize = Ms.Read(StreamBuffer, 0, 4096) - iCurrent += BlockSize - If BlockSize > 0 Then - mStream.Write(StreamBuffer, 0, BlockSize) - If ReportUpdate Then - iProgress = Convert.ToInt32((iCurrent / wrResponse.ContentLength) * 100) - RaiseEvent ProgressUpdated(iProgress) - End If - End If - Loop While BlockSize > 0 AndAlso Not Me._cancel - StreamBuffer = Nothing - End Using - End Using - End If - - End Using - Catch ex As Exception - End Try - - Return outFile - End Function - - Public Sub DownloadImage() - Try - If StringUtils.isValidURL(Me._URL) Then - Me.wrRequest = DirectCast(HttpWebRequest.Create(Me._URL), HttpWebRequest) - Me.wrRequest.Timeout = 20000 - - If Me._cancel Then Return - - If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then - Dim wProxy As New WebProxy(Master.eSettings.ProxyURI, Master.eSettings.ProxyPort) - wProxy.BypassProxyOnLocal = True - If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) AndAlso _ - Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.Password) Then - wProxy.Credentials = Master.eSettings.ProxyCreds - Else - wProxy.Credentials = CredentialCache.DefaultCredentials - End If - Me.wrRequest.Proxy = wProxy - End If - - If Me._cancel Then Return - - Using wrResponse As WebResponse = Me.wrRequest.GetResponse() - If Me._cancel Then Return - Dim temp As String = wrResponse.ContentType.ToString - If wrResponse.ContentType.ToLower.Contains("image") Then - If Me._cancel Then Return - Me._image = Image.FromStream(wrResponse.GetResponseStream) - End If - End Using - End If - Catch - End Try - End Sub - - Public Function DownloadZip(ByVal URL As String) As Byte() - Me.wrRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest) - - Try - Me.wrRequest.Timeout = 20000 - - If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then - Dim wProxy As New WebProxy(Master.eSettings.ProxyURI, Master.eSettings.ProxyPort) - wProxy.BypassProxyOnLocal = True - If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) Then - wProxy.Credentials = Master.eSettings.ProxyCreds - Else - wProxy.Credentials = CredentialCache.DefaultCredentials - End If - Me.wrRequest.Proxy = wProxy - End If - - Using wrResponse As HttpWebResponse = DirectCast(Me.wrRequest.GetResponse(), HttpWebResponse) - Return Functions.ReadStreamToEnd(wrResponse.GetResponseStream) - End Using - Catch - End Try - - Return Nothing - End Function - - Public Function IsDownloading() As Boolean - Return Me.dThread.IsAlive - End Function - - Public Function IsValidURL(ByVal URL As String) As Boolean - Dim wrResponse As WebResponse - Try - Me.wrRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest) - - If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then - Dim wProxy As New WebProxy(Master.eSettings.ProxyURI, Master.eSettings.ProxyPort) - wProxy.BypassProxyOnLocal = True - If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) Then - wProxy.Credentials = Master.eSettings.ProxyCreds - Else - wProxy.Credentials = CredentialCache.DefaultCredentials - End If - Me.wrRequest.Proxy = wProxy - End If - - Dim noCachePolicy As System.Net.Cache.HttpRequestCachePolicy = New System.Net.Cache.HttpRequestCachePolicy(System.Net.Cache.HttpRequestCacheLevel.NoCacheNoStore) - Me.wrRequest.CachePolicy = noCachePolicy - Me.wrRequest.Timeout = Master.eSettings.TrailerTimeout * 1000 - wrResponse = Me.wrRequest.GetResponse() - Catch ex As Exception - Return False - End Try - wrResponse.Close() - wrResponse = Nothing - Return True - End Function - - Public Sub StartDownloadImage(ByVal sURL As String) - Me.Clear() - Me._URL = sURL - Me.dThread = New Threading.Thread(AddressOf DownloadImage) - Me.dThread.IsBackground = True - Me.dThread.Start() - End Sub - -#End Region 'Methods + Public Sub Cancel() + Me._cancel = True + If Not IsNothing(Me.wrRequest) Then Me.wrRequest.Abort() + End Sub + + Public Sub Clear() + Me._responseuri = String.Empty + Me._image = Nothing + Me._cancel = False + End Sub + + Public Function DownloadData(ByVal URL As String) As String + Dim sResponse As String = String.Empty + Dim cEncoding As System.Text.Encoding + + Me.Clear() + + Try + Me.wrRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest) + Me.wrRequest.Timeout = 20000 + Me.wrRequest.Headers.Add("Accept-Encoding", "gzip,deflate") + Me.wrRequest.KeepAlive = False + + If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then + Dim wProxy As New WebProxy(Master.eSettings.ProxyURI, Master.eSettings.ProxyPort) + wProxy.BypassProxyOnLocal = True + If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) Then + wProxy.Credentials = Master.eSettings.ProxyCreds + Else + wProxy.Credentials = CredentialCache.DefaultCredentials + End If + Me.wrRequest.Proxy = wProxy + End If + Using wrResponse As HttpWebResponse = DirectCast(Me.wrRequest.GetResponse(), HttpWebResponse) + Select Case True + 'for our purposes I think it's safe to assume that all xmls we will be dealing with will be UTF-8 encoded + Case wrResponse.ContentType.ToLower.Contains("/xml") OrElse wrResponse.ContentType.ToLower.Contains("charset=utf-8") + cEncoding = System.Text.Encoding.UTF8 + Case Else + cEncoding = System.Text.Encoding.GetEncoding(28591) + End Select + Using Ms As Stream = wrResponse.GetResponseStream + If wrResponse.ContentEncoding.ToLower = "gzip" Then + sResponse = New StreamReader(New GZipStream(Ms, CompressionMode.Decompress), cEncoding, True).ReadToEnd + ElseIf wrResponse.ContentEncoding.ToLower = "deflate" Then + sResponse = New StreamReader(New DeflateStream(Ms, CompressionMode.Decompress), cEncoding, True).ReadToEnd + Else + sResponse = New StreamReader(Ms, cEncoding, True).ReadToEnd + End If + End Using + Me._responseuri = wrResponse.ResponseUri.ToString + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error", False) + End Try + + Return sResponse + End Function + + Private Function MakePostFieldText(ByVal Boundary As String, ByVal name As String, ByVal value As String) As String + Return String.Concat(Boundary, vbCrLf, String.Format("Content-Disposition:form-data;name=""{0}""", name), vbCrLf, vbCrLf, value, vbCrLf) + End Function + + Private Function MakePostFieldFile(ByVal Boundary As String, ByVal name As String) As String + Return String.Concat(Boundary, vbCrLf, String.Format("Content-Disposition:form-data;name=""file"";filename=""{0}""", name), vbCrLf, "Content-Type: application/octet-stream", vbCrLf, vbCrLf) + End Function + + Public Function PostDownloadData(ByVal URL As String, ByVal postDataList As List(Of String())) As String + Dim sResponse As String = String.Empty + Dim cEncoding As System.Text.Encoding + Dim Idboundary As String = Convert.ToInt64(Functions.ConvertToUnixTimestamp(Now)).ToString + Dim Boundary As String = String.Format("--{0}", Idboundary) + Dim postDataBytes As New List(Of Byte()) + Me.Clear() + System.Net.ServicePointManager.Expect100Continue = False + Try + For Each s() As String In postDataList + If s.Count = 2 Then postDataBytes.Add(System.Text.Encoding.UTF8.GetBytes(String.Concat(MakePostFieldText(Boundary, s(0), s(1))))) + If s.Count = 3 Then + Select Case s(2) + Case "file" 'array in list is {filename,filepath,"file"} + postDataBytes.Add(System.Text.Encoding.UTF8.GetBytes(String.Concat(MakePostFieldFile(Boundary, s(0))))) + postDataBytes.Add(File.ReadAllBytes(s(1))) + postDataBytes.Add(System.Text.Encoding.UTF8.GetBytes(String.Concat(vbCrLf, Boundary, vbCrLf))) + End Select + End If + Next + postDataBytes.Add(System.Text.Encoding.UTF8.GetBytes(String.Concat(Boundary, vbCrLf))) + + Me.wrRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest) + Me.wrRequest.Timeout = 20000 + Me.wrRequest.Headers.Add("Accept-Encoding", "gzip,deflate") + If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then + Dim wProxy As New WebProxy(Master.eSettings.ProxyURI, Master.eSettings.ProxyPort) + wProxy.BypassProxyOnLocal = True + If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) Then + wProxy.Credentials = Master.eSettings.ProxyCreds + Else + wProxy.Credentials = CredentialCache.DefaultCredentials + End If + Me.wrRequest.Proxy = wProxy + End If + Me.wrRequest.Method = "POST" + Me.wrRequest.ContentType = String.Concat("multipart/form-data;boundary=", Idboundary) + Dim size As Integer = 0 + For i As Integer = 0 To postDataBytes.Count - 1 + size += postDataBytes(i).Length + Next + Me.wrRequest.ContentLength = size + Dim newStream As Stream = Me.wrRequest.GetRequestStream() + For i As Integer = 0 To postDataBytes.Count - 1 + newStream.Write(postDataBytes(i), 0, postDataBytes(i).Length) + Next + newStream.Close() + + Using wrResponse As HttpWebResponse = DirectCast(Me.wrRequest.GetResponse(), HttpWebResponse) + Select Case True + Case wrResponse.ContentType.ToLower.Contains("/xml") OrElse wrResponse.ContentType.ToLower.Contains("charset=utf-8") + cEncoding = System.Text.Encoding.UTF8 + Case Else + cEncoding = System.Text.Encoding.GetEncoding(28591) + End Select + Using Ms As Stream = wrResponse.GetResponseStream + If wrResponse.ContentEncoding.ToLower = "gzip" Then + sResponse = New StreamReader(New GZipStream(Ms, CompressionMode.Decompress), cEncoding, True).ReadToEnd + ElseIf wrResponse.ContentEncoding.ToLower = "deflate" Then + sResponse = New StreamReader(New DeflateStream(Ms, CompressionMode.Decompress), cEncoding, True).ReadToEnd + Else + sResponse = New StreamReader(Ms, cEncoding, True).ReadToEnd + End If + End Using + Me._responseuri = wrResponse.ResponseUri.ToString + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error", False) + End Try + + Return sResponse + End Function + + Public Function DownloadFile(ByVal URL As String, ByVal LocalFile As String, ByVal ReportUpdate As Boolean, ByVal Type As String) As String + Dim outFile As String = String.Empty + Dim urlExt As String = String.Empty + + Me._cancel = False + Try + Me.wrRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest) + Me.wrRequest.Timeout = 20000 + + If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then + Dim wProxy As New WebProxy(Master.eSettings.ProxyURI, Master.eSettings.ProxyPort) + wProxy.BypassProxyOnLocal = True + If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) Then + wProxy.Credentials = Master.eSettings.ProxyCreds + Else + wProxy.Credentials = CredentialCache.DefaultCredentials + End If + Me.wrRequest.Proxy = wProxy + End If + + Try + urlExt = Path.GetExtension(URL) + Catch + End Try + + Using wrResponse As HttpWebResponse = DirectCast(Me.wrRequest.GetResponse(), HttpWebResponse) + Select Case True + Case Type = "trailer" AndAlso Master.eSettings.ValidExts.Contains(urlExt) + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(LocalFile) Then + outFile = Path.Combine(Directory.GetParent(LocalFile).FullName, String.Concat(Path.GetFileNameWithoutExtension(LocalFile), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(URL))) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim LocalFileStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(LocalFile)) + outFile = String.Concat(Directory.GetParent(LocalFile).FullName, "\", LocalFileStack, If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(URL)) + Else + outFile = Path.Combine(Directory.GetParent(LocalFile).FullName, String.Concat(Path.GetFileNameWithoutExtension(LocalFile), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(URL))) + End If + Case Type = "trailer" AndAlso Master.eSettings.ValidExts.Contains(Path.GetExtension(wrResponse.ResponseUri.AbsolutePath)) + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(LocalFile) Then + outFile = Path.Combine(Directory.GetParent(LocalFile).FullName, String.Concat(Path.GetFileNameWithoutExtension(LocalFile), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(wrResponse.ResponseUri.AbsolutePath))) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim LocalFileStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(LocalFile)) + outFile = String.Concat(Directory.GetParent(LocalFile).FullName, "\", LocalFileStack, If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(wrResponse.ResponseUri.AbsolutePath)) + Else + outFile = Path.Combine(Directory.GetParent(LocalFile).FullName, String.Concat(Path.GetFileNameWithoutExtension(LocalFile), If(Master.eSettings.DashTrailer, "-trailer", "[trailer]"), Path.GetExtension(wrResponse.ResponseUri.AbsolutePath))) + End If + Case Type = "trailer" AndAlso wrResponse.ContentType.Contains("mp4") + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(LocalFile) Then + outFile = String.Concat(Directory.GetParent(Directory.GetParent(LocalFile).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer.mp4", "[trailer].mp4")) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim LocalFileStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(LocalFile)) + outFile = String.Concat(Directory.GetParent(LocalFile).FullName, "\", LocalFileStack, If(Master.eSettings.DashTrailer, "-trailer.mp4", "[trailer].mp4")) + Else + outFile = Path.Combine(Directory.GetParent(LocalFile).FullName, String.Concat(Path.GetFileNameWithoutExtension(LocalFile), If(Master.eSettings.DashTrailer, "-trailer.mp4", "[trailer].mp4"))) + End If + Case Type = "trailer" AndAlso wrResponse.ContentType.Contains("flv") + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(LocalFile) Then + outFile = String.Concat(Directory.GetParent(Directory.GetParent(LocalFile).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer.flv", "[trailer].flv")) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim LocalFileStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(LocalFile)) + outFile = String.Concat(Directory.GetParent(LocalFile).FullName, "\", LocalFileStack, If(Master.eSettings.DashTrailer, "-trailer.flv", "[trailer].flv")) + Else + outFile = Path.Combine(Directory.GetParent(LocalFile).FullName, String.Concat(Path.GetFileNameWithoutExtension(LocalFile), If(Master.eSettings.DashTrailer, "-trailer.flv", "[trailer].flv"))) + End If + Case Type = "trailer" AndAlso wrResponse.ContentType.Contains("webm") + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(LocalFile) Then + outFile = String.Concat(Directory.GetParent(Directory.GetParent(LocalFile).FullName).FullName, "\", "index", If(Master.eSettings.DashTrailer, "-trailer.webm", "[trailer].webm")) + ElseIf Master.eSettings.MovieNameNFOStack Then + Dim LocalFileStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(LocalFile)) + outFile = String.Concat(Directory.GetParent(LocalFile).FullName, "\", LocalFileStack, If(Master.eSettings.DashTrailer, "-trailer.webm", "[trailer].webm")) + Else + outFile = Path.Combine(Directory.GetParent(LocalFile).FullName, String.Concat(Path.GetFileNameWithoutExtension(LocalFile), If(Master.eSettings.DashTrailer, "-trailer.webm", "[trailer].webm"))) + End If + Case Type = "other" + outFile = LocalFile + End Select + + If Not String.IsNullOrEmpty(outFile) AndAlso Not wrResponse.ContentLength = 0 Then + + If File.Exists(outFile) Then File.Delete(outFile) + + Using Ms As Stream = wrResponse.GetResponseStream + Using mStream As New FileStream(outFile, FileMode.Create, FileAccess.Write) + Dim StreamBuffer(4096) As Byte + Dim BlockSize As Integer + Dim iProgress As Integer + Dim iCurrent As Integer + Do + BlockSize = Ms.Read(StreamBuffer, 0, 4096) + iCurrent += BlockSize + If BlockSize > 0 Then + mStream.Write(StreamBuffer, 0, BlockSize) + If ReportUpdate Then + iProgress = Convert.ToInt32((iCurrent / wrResponse.ContentLength) * 100) + RaiseEvent ProgressUpdated(iProgress) + End If + End If + Loop While BlockSize > 0 AndAlso Not Me._cancel + StreamBuffer = Nothing + End Using + End Using + End If + + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error", False) + End Try + + Return outFile + End Function + + Public Sub DownloadImage() + Try + Me._isJPG = False + If StringUtils.isValidURL(Me._URL) Then + Me.wrRequest = DirectCast(HttpWebRequest.Create(Me._URL), HttpWebRequest) + Me.wrRequest.Timeout = 20000 + + If Me._cancel Then Return + + If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then + Dim wProxy As New WebProxy(Master.eSettings.ProxyURI, Master.eSettings.ProxyPort) + wProxy.BypassProxyOnLocal = True + If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) AndAlso _ + Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.Password) Then + wProxy.Credentials = Master.eSettings.ProxyCreds + Else + wProxy.Credentials = CredentialCache.DefaultCredentials + End If + Me.wrRequest.Proxy = wProxy + End If + + If Me._cancel Then Return + + Using wrResponse As WebResponse = Me.wrRequest.GetResponse() + If Me._cancel Then Return + Dim temp As String = wrResponse.ContentType.ToString + If wrResponse.ContentType.ToLower.Contains("image") Then + If Me._cancel Then Return + If wrResponse.ContentType.ToLower.Contains("jpeg") Then + _isJPG = True + End If + Using SourceStream As System.IO.Stream = wrResponse.GetResponseStream() + Dim count = Convert.ToInt32(wrResponse.ContentLength) + Dim buffer = New Byte(count) {} + Dim bytesRead As Integer + Do + bytesRead += SourceStream.Read(buffer, bytesRead, count - bytesRead) + Loop Until bytesRead = count + SourceStream.Close() + Me._ms.Dispose() + Me._ms = New MemoryStream() + + Me._ms.Write(buffer, 0, bytesRead) + Me._ms.Flush() + Me._image = New Bitmap(Me._ms) + End Using + 'Me._image = Image.FromStream(wrResponse.GetResponseStream) + End If + End Using + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error", False) + End Try + End Sub + + Public Function DownloadZip(ByVal URL As String) As Byte() + Me.wrRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest) + + Try + Me.wrRequest.Timeout = 20000 + + If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then + Dim wProxy As New WebProxy(Master.eSettings.ProxyURI, Master.eSettings.ProxyPort) + wProxy.BypassProxyOnLocal = True + If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) Then + wProxy.Credentials = Master.eSettings.ProxyCreds + Else + wProxy.Credentials = CredentialCache.DefaultCredentials + End If + Me.wrRequest.Proxy = wProxy + End If + + Using wrResponse As HttpWebResponse = DirectCast(Me.wrRequest.GetResponse(), HttpWebResponse) + Return Functions.ReadStreamToEnd(wrResponse.GetResponseStream) + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error", False) + End Try + + Return Nothing + End Function + + Public Function IsDownloading() As Boolean + Return Me.dThread.IsAlive + End Function + + Public Function IsValidURL(ByVal URL As String) As Boolean + Dim wrResponse As WebResponse + Try + Me.wrRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest) + + If Not String.IsNullOrEmpty(Master.eSettings.ProxyURI) AndAlso Master.eSettings.ProxyPort >= 0 Then + Dim wProxy As New WebProxy(Master.eSettings.ProxyURI, Master.eSettings.ProxyPort) + wProxy.BypassProxyOnLocal = True + If Not String.IsNullOrEmpty(Master.eSettings.ProxyCreds.UserName) Then + wProxy.Credentials = Master.eSettings.ProxyCreds + Else + wProxy.Credentials = CredentialCache.DefaultCredentials + End If + Me.wrRequest.Proxy = wProxy + End If + + Dim noCachePolicy As System.Net.Cache.HttpRequestCachePolicy = New System.Net.Cache.HttpRequestCachePolicy(System.Net.Cache.HttpRequestCacheLevel.NoCacheNoStore) + Me.wrRequest.CachePolicy = noCachePolicy + Me.wrRequest.Timeout = Master.eSettings.TrailerTimeout * 1000 + wrResponse = Me.wrRequest.GetResponse() + Catch ex As Exception + Return False + End Try + wrResponse.Close() + wrResponse = Nothing + Return True + End Function + + Public Sub StartDownloadImage(ByVal sURL As String) + Me.Clear() + Me._URL = sURL + Me.dThread = New Threading.Thread(AddressOf DownloadImage) + Me.dThread.IsBackground = True + Me.dThread.Start() + End Sub + +#End Region 'Methods End Class \ No newline at end of file diff --git a/EmberAPI/clsAPIHashing.vb b/EmberAPI/clsAPIHashing.vb index 5218128..a440017 100644 --- a/EmberAPI/clsAPIHashing.vb +++ b/EmberAPI/clsAPIHashing.vb @@ -29,98 +29,100 @@ Public Class HashFile #Region "Methods" - Public Shared Function ComputeMovieHash(ByVal filename As String) As Byte() - Dim result As Byte() - Using input As Stream = File.OpenRead(filename) - result = ComputeMovieHash(input) - End Using - Return result - End Function - - Public Shared Function ComputeMovieHash(ByVal input As Stream) As Byte() - Dim lhash As System.Int64, streamsize As Long - streamsize = input.Length - lhash = streamsize - - Dim i As Long = 0 - Dim buffer As Byte() = New Byte(Marshal.SizeOf(GetType(Long)) - 1) {} - While i < 65536 / Marshal.SizeOf(GetType(Long)) AndAlso (input.Read(buffer, 0, Marshal.SizeOf(GetType(Long))) > 0) - i += 1 - - lhash += BitConverter.ToInt64(buffer, 0) - End While - - input.Position = Math.Max(0, streamsize - 65536) - i = 0 - While i < 65536 / Marshal.SizeOf(GetType(Long)) AndAlso (input.Read(buffer, 0, Marshal.SizeOf(GetType(Long))) > 0) - i += 1 - lhash += BitConverter.ToInt64(buffer, 0) - End While - input.Close() - Dim result As Byte() = BitConverter.GetBytes(lhash) - Array.Reverse(result) - Return result - End Function - - Public Shared Function CurrentETHashes(ByVal sPath As String) As List(Of String) - Dim ETHashes As New List(Of String) - Dim tPath As String = String.Empty - - If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(sPath) Then - tPath = Path.Combine(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "extrathumbs") - ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(sPath) Then - tPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName).FullName, "extrathumbs") - Else - tPath = Path.Combine(Directory.GetParent(sPath).FullName, "extrathumbs") - End If - - If Directory.Exists(tPath) Then - Dim fThumbs As New List(Of String) - - Try - fThumbs.AddRange(Directory.GetFiles(tPath, "thumb*.jpg")) - Catch - End Try - - For Each fThumb As String In fThumbs - ETHashes.Add(HashCalcFile(fThumb)) - Next - End If - - Return ETHashes - End Function - - Public Shared Function HashCalcFile(ByVal filepath As String) As String - Using reader As New FileStream(filepath, FileMode.Open, FileAccess.Read) - Dim KeyValue As Byte() = (New System.Text.UnicodeEncoding).GetBytes("HashingKey") - Using HMA As New HMACSHA1(KeyValue, True) - - Dim hash() As Byte = HMA.ComputeHash(reader) - - Return ByteArrayToString(hash) - - End Using - End Using - End Function - - Public Shared Function ToHexadecimal(ByVal bytes As Byte()) As String - Dim hexBuilder As New StringBuilder() - For i As Integer = 0 To bytes.Length - 1 - hexBuilder.Append(bytes(i).ToString("x2")) - Next - Return hexBuilder.ToString() - End Function - - Private Shared Function ByteArrayToString(ByVal arrInput() As Byte) As String - Dim sb As New StringBuilder(arrInput.Length * 2) - - For i As Integer = 0 To arrInput.Length - 1 - sb.Append(arrInput(i).ToString("X2")) - Next - - Return sb.ToString().ToLower - End Function - - #End Region 'Methods + 'Public Shared Function ComputeMovieHash(ByVal filename As String) As Byte() + ' Dim result As Byte() + ' Using input As Stream = File.OpenRead(filename) + ' result = ComputeMovieHash(input) + ' End Using + ' Return result + 'End Function + + 'Public Shared Function ComputeMovieHash(ByVal input As Stream) As Byte() + ' Dim lhash As System.Int64, streamsize As Long + ' streamsize = input.Length + ' lhash = streamsize + + ' Dim i As Long = 0 + ' Dim buffer As Byte() = New Byte(Marshal.SizeOf(GetType(Long)) - 1) {} + ' While i < 65536 / Marshal.SizeOf(GetType(Long)) AndAlso (input.Read(buffer, 0, Marshal.SizeOf(GetType(Long))) > 0) + ' i += 1 + + ' lhash += BitConverter.ToInt64(buffer, 0) + ' End While + + ' input.Position = Math.Max(0, streamsize - 65536) + ' i = 0 + ' While i < 65536 / Marshal.SizeOf(GetType(Long)) AndAlso (input.Read(buffer, 0, Marshal.SizeOf(GetType(Long))) > 0) + ' i += 1 + ' lhash += BitConverter.ToInt64(buffer, 0) + ' End While + ' input.Close() + ' Dim result As Byte() = BitConverter.GetBytes(lhash) + ' Array.Reverse(result) + ' Return result + 'End Function + + Public Shared Function CurrentETHashes(ByVal sPath As String) As List(Of String) + Dim ETHashes As New List(Of String) + Dim tPath As String = String.Empty + + If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(sPath) Then + tPath = Path.Combine(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(sPath) Then + tPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName).FullName, "extrathumbs") + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(sPath) Then + tPath = Path.Combine(Directory.GetParent(Directory.GetParent(sPath).FullName).FullName, "extrathumbs") + Else + tPath = Path.Combine(Directory.GetParent(sPath).FullName, "extrathumbs") + End If + + If Directory.Exists(tPath) Then + Dim fThumbs As New List(Of String) + + Try + fThumbs.AddRange(Directory.GetFiles(tPath, "thumb*.jpg")) + Catch + End Try + + For Each fThumb As String In fThumbs + ETHashes.Add(HashCalcFile(fThumb)) + Next + End If + + Return ETHashes + End Function + + Public Shared Function HashCalcFile(ByVal filepath As String) As String + Using reader As New FileStream(filepath, FileMode.Open, FileAccess.Read) + Dim KeyValue As Byte() = (New System.Text.UnicodeEncoding).GetBytes("HashingKey") + Using HMA As New HMACSHA1(KeyValue, True) + + Dim hash() As Byte = HMA.ComputeHash(reader) + + Return ByteArrayToString(hash) + + End Using + End Using + End Function + + 'Public Shared Function ToHexadecimal(ByVal bytes As Byte()) As String + ' Dim hexBuilder As New StringBuilder() + ' For i As Integer = 0 To bytes.Length - 1 + ' hexBuilder.Append(bytes(i).ToString("x2")) + ' Next + ' Return hexBuilder.ToString() + 'End Function + + Private Shared Function ByteArrayToString(ByVal arrInput() As Byte) As String + Dim sb As New StringBuilder(arrInput.Length * 2) + + For i As Integer = 0 To arrInput.Length - 1 + sb.Append(arrInput(i).ToString("X2")) + Next + + Return sb.ToString().ToLower + End Function + +#End Region 'Methods End Class \ No newline at end of file diff --git a/EmberAPI/clsAPIImageUtils.vb b/EmberAPI/clsAPIImageUtils.vb index baca209..c2af5c0 100644 --- a/EmberAPI/clsAPIImageUtils.vb +++ b/EmberAPI/clsAPIImageUtils.vb @@ -25,37 +25,41 @@ Public Class ImageUtils #Region "Methods" - Public Shared Function AddMissingStamp(ByVal oImage As Image) As Image - Dim nImage As New Bitmap(GrayScale(oImage)) + Public Shared Function AddMissingStamp(ByVal oImage As Images) As Images + Dim nImage As New Bitmap(GrayScale(oImage).Image) - 'now overlay "missing" image - Dim grOverlay As Graphics = Graphics.FromImage(nImage) - Dim oWidth As Integer = If(nImage.Width >= My.Resources.missing.Width, My.Resources.missing.Width, nImage.Width) - Dim oheight As Integer = If(nImage.Height >= My.Resources.missing.Height, My.Resources.missing.Height, nImage.Height) - grOverlay.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic - grOverlay.DrawImage(My.Resources.missing, 0, 0, oWidth, oheight) + 'now overlay "missing" image + Dim grOverlay As Graphics = Graphics.FromImage(nImage) + Dim oWidth As Integer = If(nImage.Width >= My.Resources.missing.Width, My.Resources.missing.Width, nImage.Width) + Dim oheight As Integer = If(nImage.Height >= My.Resources.missing.Height, My.Resources.missing.Height, nImage.Height) + grOverlay.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic + grOverlay.DrawImage(My.Resources.missing, 0, 0, oWidth, oheight) - Return nImage - End Function + oImage.UpdateMSfromImg(nImage) - Public Shared Function GrayScale(ByVal oImage As Image) As Image - Dim nImage As New Bitmap(oImage) + Return oImage + End Function - 'first let's convert the background to grayscale - Dim g As Graphics = Graphics.FromImage(nImage) - Dim cm As Imaging.ColorMatrix = New Imaging.ColorMatrix(New Single()() _ - {New Single() {0.5, 0.5, 0.5, 0, 0}, _ - New Single() {0.5, 0.5, 0.5, 0, 0}, _ - New Single() {0.5, 0.5, 0.5, 0, 0}, _ - New Single() {0, 0, 0, 1, 0}, _ - New Single() {0, 0, 0, 0, 1}}) + Public Shared Function GrayScale(ByVal oImage As Images) As Images + Dim nImage As New Bitmap(oImage.Image) - Dim ia As Imaging.ImageAttributes = New Imaging.ImageAttributes() - ia.SetColorMatrix(cm) - g.DrawImage(oImage, New Rectangle(0, 0, oImage.Width, oImage.Height), 0, 0, oImage.Width, oImage.Height, GraphicsUnit.Pixel, ia) + 'first let's convert the background to grayscale + Dim g As Graphics = Graphics.FromImage(nImage) + Dim cm As Imaging.ColorMatrix = New Imaging.ColorMatrix(New Single()() _ + {New Single() {0.5, 0.5, 0.5, 0, 0}, _ + New Single() {0.5, 0.5, 0.5, 0, 0}, _ + New Single() {0.5, 0.5, 0.5, 0, 0}, _ + New Single() {0, 0, 0, 1, 0}, _ + New Single() {0, 0, 0, 0, 1}}) - Return nImage - End Function + Dim ia As Imaging.ImageAttributes = New Imaging.ImageAttributes() + ia.SetColorMatrix(cm) + g.DrawImage(nImage, New Rectangle(0, 0, nImage.Width, nImage.Height), 0, 0, nImage.Width, nImage.Height, GraphicsUnit.Pixel, ia) + + oImage.UpdateMSfromImg(nImage) + + Return oImage + End Function Public Shared Sub DrawGradEllipse(ByRef graphics As Graphics, ByVal bounds As Rectangle, ByVal color1 As Color, ByVal color2 As Color) Try @@ -254,6 +258,47 @@ Public Class ImageUtils Return imgUnderlay End Function + 'cocotus, 2013/02 Export HTML expanded: configurable resizable images + ' New Image methods added here (resizing/compressing) + + ''' + ''' Compress JPEG Image and save result as local image + ''' + ''' Image which should be compressed/encoded + ''' Savepath of recoded image + ''' Quality Setting 0-100 + Public Shared Sub JPEGCompression(ByVal Image As Image, ByVal OutPutFile As String, ByVal Qualitiy As Integer) + Dim ImageCodecs() As Imaging.ImageCodecInfo + Dim ImageParameters As Imaging.EncoderParameters + + ImageCodecs = Imaging.ImageCodecInfo.GetImageEncoders() + ImageParameters = New Imaging.EncoderParameters(1) + ImageParameters.Param(0) = New Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qualitiy) + Image.Save(OutPutFile, ImageCodecs(1), ImageParameters) + End Sub + + ''' + ''' Resizes Image + ''' + ''' Image which should be resized + ''' Size of image + Public Shared Function ResizeImage(ByVal poImage As Image, ByVal poSize As Size) As Image + + Dim Original As Image = DirectCast(poImage.Clone(), Image) + Dim ResizedImage As Image = New Bitmap(poSize.Width, poSize.Height, Original.PixelFormat) + Dim oGraphic As Graphics = Graphics.FromImage(ResizedImage) + oGraphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality + oGraphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality + oGraphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic + Dim oRectangle As Rectangle = New Rectangle(0, 0, poSize.Width, poSize.Height) + oGraphic.DrawImage(Original, oRectangle) + oGraphic.Dispose() + Original.Dispose() + Return ResizedImage + End Function + + 'cocotus end + #End Region 'Methods End Class \ No newline at end of file diff --git a/EmberAPI/clsAPIImages.vb b/EmberAPI/clsAPIImages.vb index eaed4c1..824fffa 100644 --- a/EmberAPI/clsAPIImages.vb +++ b/EmberAPI/clsAPIImages.vb @@ -29,11 +29,11 @@ Public Class Images #Region "Fields" - Private ms As MemoryStream = New MemoryStream() + Private _ms As MemoryStream Private Ret As Byte() _ Private sHTTP As New HTTP - Private _image As Image + Private _image As Image Private _isedit As Boolean #End Region 'Fields @@ -57,40 +57,59 @@ Public Class Images End Set End Property - Public Property [Image]() As Image - Get - Return _image - End Get - Set(ByVal value As Image) - _image = value - End Set - End Property + Public ReadOnly Property [Image]() As Image + Get + Return _image + End Get + 'Set(ByVal value As Image) + ' _image = value + 'End Set + End Property #End Region 'Properties #Region "Methods" - Public Shared Function GetFanartDims(ByVal imgImage As Image) As Enums.FanartSize - '// - ' Check the size of the image and return a generic name for the size - '\\ + Public Sub UpdateMSfromImg(nImage As Bitmap) - Dim x As Integer = imgImage.Width - Dim y As Integer = imgImage.Height + Try + Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) + Dim EncPars As EncoderParameters = New EncoderParameters(2) - Try - If (y > 1000 AndAlso x > 750) OrElse (x > 1000 AndAlso y > 750) Then - Return Enums.FanartSize.Lrg - ElseIf (y > 700 AndAlso x > 400) OrElse (x > 700 AndAlso y > 400) Then - Return Enums.FanartSize.Mid - Else - Return Enums.FanartSize.Small - End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - Return Enums.FanartSize.Small - End Try - End Function + EncPars.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderNonProgressive) + + EncPars.Param(1) = New EncoderParameter(Encoder.Quality, 100) + _ms.Dispose() + _ms = New MemoryStream() + nImage.Save(_ms, ICI, EncPars) + _ms.Flush() + _image = New Bitmap(_ms) + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + End Sub + + Public Shared Function GetFanartDims(ByVal imgImage As Image) As Enums.FanartSize + '// + ' Check the size of the image and return a generic name for the size + '\\ + + Dim x As Integer = imgImage.Width + Dim y As Integer = imgImage.Height + + Try + If (y > 1000 AndAlso x > 750) OrElse (x > 1000 AndAlso y > 750) Then + Return Enums.FanartSize.Lrg + ElseIf (y > 700 AndAlso x > 400) OrElse (x > 700 AndAlso y > 400) Then + Return Enums.FanartSize.Mid + Else + Return Enums.FanartSize.Small + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return Enums.FanartSize.Small + End Try + End Function Public Shared Function GetPosterDims(ByVal imgImage As Image) As Enums.PosterSize '// @@ -120,9 +139,14 @@ Public Class Images End Function Public Sub Clear() - _isedit = False - _image = Nothing - End Sub + _isedit = False + If Not IsNothing(_ms) Or Not IsNothing(_image) Then + Me.Dispose() + Else + _image = Nothing + _ms = New MemoryStream() + End If + End Sub Public Sub Delete(ByVal sPath As String) If Not String.IsNullOrEmpty(sPath) Then @@ -170,21 +194,23 @@ Public Class Images Dim params As New List(Of Object)(New Object() {mMovie}) ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.OnMovieFanartDelete, params, Nothing, False) - If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(mMovie.Filename) Then + If (Master.eSettings.VideoTSParent OrElse Master.eSettings.VideoTSParentXBMC) AndAlso FileUtils.Common.isVideoTS(mMovie.Filename) Then If Master.eSettings.FanartJPG Then Delete(String.Concat(Directory.GetParent(tPath).FullName, "\", "fanart.jpg")) ElseIf Master.eSettings.MovieNameFanartJPG Then Delete(String.Concat(Path.Combine(Directory.GetParent(tPath).FullName, Directory.GetParent(tPath).Name), "-fanart.jpg")) + Delete(String.Concat(Directory.GetParent(tPath).FullName, "\", "fanart.jpg")) ElseIf Master.eSettings.MovieNameDotFanartJPG Then Delete(String.Concat(Path.Combine(Directory.GetParent(tPath).FullName, Directory.GetParent(tPath).Name), ".fanart.jpg")) Else Delete(String.Concat(Directory.GetParent(tPath).FullName, "\", "fanart.jpg")) End If - ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(mMovie.Filename) Then + ElseIf (Master.eSettings.VideoTSParent OrElse Master.eSettings.VideoTSParentXBMC) AndAlso FileUtils.Common.isBDRip(mMovie.Filename) Then If Master.eSettings.FanartJPG Then Delete(String.Concat(Directory.GetParent(Directory.GetParent(tPath).FullName).FullName, "\", "fanart.jpg")) ElseIf Master.eSettings.MovieNameFanartJPG Then Delete(String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(tPath).FullName).FullName, Directory.GetParent(Directory.GetParent(tPath).FullName).Name), "-fanart.jpg")) + Delete(String.Concat(Directory.GetParent(Directory.GetParent(tPath).FullName).FullName, "\", "fanart.jpg")) ElseIf Master.eSettings.MovieNameDotFanartJPG Then Delete(String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(tPath).FullName).FullName, Directory.GetParent(Directory.GetParent(tPath).FullName).Name), ".fanart.jpg")) Else @@ -218,7 +244,8 @@ Public Class Images Dim tPath As String = Directory.GetParent(mMovie.Filename).FullName Dim params As New List(Of Object)(New Object() {mMovie}) ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.OnMoviePosterDelete, params, Nothing, False) - If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(mMovie.Filename) Then + + If (Master.eSettings.VideoTSParent OrElse Master.eSettings.VideoTSParentXBMC) AndAlso FileUtils.Common.isVideoTS(mMovie.Filename) Then With Master.eSettings If .MovieNameJPG Then Delete(String.Concat(Path.Combine(Directory.GetParent(tPath).FullName, Directory.GetParent(tPath).Name), ".jpg")) @@ -231,14 +258,14 @@ Public Class Images ElseIf .MovieNameTBN Then Delete(String.Concat(Path.Combine(Directory.GetParent(tPath).FullName, Directory.GetParent(tPath).Name), ".tbn")) ElseIf .MovieNameDashPosterJPG Then - Delete(String.Concat(Path.Combine(Directory.GetParent(tPath).FullName, Directory.GetParent(tPath).Name), "-poster.jpg")) + Delete(String.Concat(Directory.GetParent(tPath).FullName, "\", "poster.jpg")) ElseIf .MovieTBN Then Delete(String.Concat(Directory.GetParent(tPath).FullName, "\", "movie.tbn")) ElseIf .PosterTBN Then Delete(String.Concat(Directory.GetParent(tPath).FullName, "\", "poster.tbn")) End If End With - ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(mMovie.Filename) Then + ElseIf (Master.eSettings.VideoTSParent OrElse Master.eSettings.VideoTSParentXBMC) AndAlso FileUtils.Common.isBDRip(mMovie.Filename) Then With Master.eSettings If .MovieNameJPG Then Delete(String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(tPath).FullName).FullName, Directory.GetParent(Directory.GetParent(tPath).FullName).Name), ".jpg")) @@ -251,7 +278,7 @@ Public Class Images ElseIf .MovieNameTBN Then Delete(String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(tPath).FullName).FullName, Directory.GetParent(Directory.GetParent(tPath).FullName).Name), ".tbn")) ElseIf .MovieNameDashPosterJPG Then - Delete(String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(tPath).FullName).FullName, Directory.GetParent(Directory.GetParent(tPath).FullName).Name), "-poster.jpg")) + Delete(String.Concat(Directory.GetParent(tPath).FullName, "\", "poster.jpg")) ElseIf .MovieTBN Then Delete(String.Concat(Directory.GetParent(Directory.GetParent(tPath).FullName).FullName, "\", "movie.tbn")) ElseIf .PosterTBN Then @@ -278,6 +305,7 @@ Public Class Images Dim pPath As String = Path.Combine(tPath, Path.GetFileNameWithoutExtension(mMovie.Filename)) Delete(String.Concat(pPath, ".tbn")) Delete(String.Concat(pPath, ".jpg")) + Delete(String.Concat(pPath, "-poster.jpg")) End If End If @@ -362,81 +390,149 @@ Public Class Images End Sub Public Sub Dispose() Implements IDisposable.Dispose - ms.Flush() - ms.Close() - ms.Dispose() - ms = Nothing - Clear() + If Not IsNothing(_ms) Then + _ms.Flush() + _ms.Close() + _ms.Dispose() + _ms = Nothing + End If + If Not IsNothing(_image) Then + _image.Dispose() + _image = Nothing + End If + _isedit = False End Sub - Public Sub FromFile(ByVal sPath As String) - If Not String.IsNullOrEmpty(sPath) AndAlso File.Exists(sPath) Then - Try - Using fsImage As New FileStream(sPath, FileMode.Open, FileAccess.Read) - ms.SetLength(fsImage.Length) - fsImage.Read(ms.GetBuffer(), 0, Convert.ToInt32(fsImage.Length)) - ms.Flush() - _image = New Bitmap(ms) - End Using - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error: " & sPath) - End Try - End If - End Sub + Public Sub FromFile(ByVal sPath As String) + Debug.Print("FromFile/t{0}", sPath) + If Not String.IsNullOrEmpty(sPath) AndAlso File.Exists(sPath) Then + Try + If Not IsNothing(Me._ms) Then + Me._ms.Dispose() + End If + Me._ms = New MemoryStream() + Using fsImage As New FileStream(sPath, FileMode.Open, FileAccess.Read) + Dim StreamBuffer(Convert.ToInt32(fsImage.Length - 1)) As Byte + + fsImage.Read(StreamBuffer, 0, StreamBuffer.Length) + Me._ms.Write(StreamBuffer, 0, StreamBuffer.Length) + + StreamBuffer = Nothing + '_ms.SetLength(fsImage.Length) + 'fsImage.Read(_ms.GetBuffer(), 0, Convert.ToInt32(fsImage.Length)) + Me._ms.Flush() + _image = New Bitmap(Me._ms) + End Using + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error: " & sPath) + End Try + End If + End Sub Public Sub FromWeb(ByVal sURL As String) Try sHTTP.StartDownloadImage(sURL) - + Debug.Print("FromWeb/t{0}", sURL) While sHTTP.IsDownloading Application.DoEvents() Threading.Thread.Sleep(50) End While - If Not IsNothing(sHTTP.Image) Then _image = New Bitmap(sHTTP.Image) + If Not IsNothing(sHTTP.Image) Then + If Not IsNothing(Me._ms) Then + Me._ms.Dispose() + End If + Me._ms = New MemoryStream() + + Dim retSave() As Byte + retSave = sHTTP.ms.ToArray + Me._ms.Write(retSave, 0, retSave.Length) + + 'Dim kkk As String = Path.Combine(Master.TempPath, sHTTP.ms.Length.ToString) + 'Using fs As New FileStream(kkk & "a.jpg", FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' fs.Close() + 'End Using + + 'retSave = _ms.ToArray() + 'Using fs As New FileStream(kkk & "a2.jpg", FileMode.Create, FileAccess.Write) + ' fs.Write(retSave, 0, retSave.Length) + ' fs.Flush() + ' fs.Close() + 'End Using + 'Me.Save(kkk & "b.jpg", , , False) + + 'I do not copy from the _ms as it could not be a JPG + _image = New Bitmap(sHTTP.Image) + + ' if is not a JPG we have to conver the memory stream to JPG format + If Not sHTTP.isJPG Then + UpdateMSfromImg(New Bitmap(_image)) + End If + End If + Catch End Try End Sub - Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean - Try - Select Case fType - Case Enums.ImageType.Fanart - If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ - (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) AndAlso _ - AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then - Return True - Else - Return False - End If - Case Else - If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ - (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ - Master.eSettings.MovieNameJPG OrElse Master.eSettings.MovieNameDashPosterJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) AndAlso _ - (AdvancedSettings.GetBooleanSetting("UseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then - Return True - Else - Return False - End If - End Select - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - Return False - End Try - End Function - - Public Sub ResizeExtraThumb(ByVal fromPath As String, ByVal toPath As String) - Me.FromFile(fromPath) - If Not Master.eSettings.ETNative Then - Dim iWidth As Integer = Master.eSettings.ETWidth - Dim iHeight As Integer = Master.eSettings.ETHeight - ImageUtils.ResizeImage(_image, iWidth, iHeight, Master.eSettings.ETPadding, Color.Black.ToArgb) - End If - Me.Save(toPath) - End Sub + Public Function IsAllowedToDownload(ByVal mMovie As Structures.DBMovie, ByVal fType As Enums.ImageType, Optional ByVal isChange As Boolean = False) As Boolean + Try + Select Case fType + Case Enums.ImageType.Fanart + If (isChange OrElse (String.IsNullOrEmpty(mMovie.FanartPath) OrElse Master.eSettings.OverwriteFanart)) AndAlso _ + (Master.eSettings.MovieNameDotFanartJPG OrElse Master.eSettings.MovieNameFanartJPG OrElse Master.eSettings.FanartJPG) Then + ' Removed as there is not ONLY the TMDB scraper. Also the GetSetting is bound the calling procedure, is always true + ' AndAlso AdvancedSettings.GetBooleanSetting("UseTMDB", True) Then + Return True + Else + Return False + End If + Case Else + If (isChange OrElse (String.IsNullOrEmpty(mMovie.PosterPath) OrElse Master.eSettings.OverwritePoster)) AndAlso _ + (Master.eSettings.MovieTBN OrElse Master.eSettings.MovieNameTBN OrElse Master.eSettings.MovieJPG OrElse _ + Master.eSettings.MovieNameJPG OrElse Master.eSettings.MovieNameDashPosterJPG OrElse Master.eSettings.PosterTBN OrElse Master.eSettings.PosterJPG OrElse Master.eSettings.FolderJPG) Then + ' Removed as there is not ONLY the Native scraper scraper. Also the GetSetting is bound the calling procedure, is always true + ' AndAlso (AdvancedSettings.GetBooleanSetting("UseIMPA", False) OrElse AdvancedSettings.GetBooleanSetting("UseMPDB", False) OrElse AdvancedSettings.GetBooleanSetting("UseTMDB", True)) Then + Return True + Else + Return False + End If + End Select + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + Return False + End Try + End Function + + Public Sub ResizeExtraThumb(ByVal fromPath As String, ByVal toPath As String) + Me.FromFile(fromPath) + If Not Master.eSettings.ETNative Then + Dim iWidth As Integer = Master.eSettings.ETWidth + Dim iHeight As Integer = Master.eSettings.ETHeight + ImageUtils.ResizeImage(_image, iWidth, iHeight, Master.eSettings.ETPadding, Color.Black.ToArgb) + End If + Me.Save(toPath) + End Sub - Public Sub Save(ByVal sPath As String, Optional ByVal iQuality As Long = 0, Optional ByVal sUrl As String = "") + Public Sub Save(ByVal sPath As String, Optional ByVal iQuality As Long = 0, Optional ByVal sUrl As String = "", Optional ByVal doResize As Boolean = False) + Dim retSave() As Byte Try + If Not doResize Then + 'EmberAPI.FileUtils.Common.MoveFileWithStream(sUrl, sPath) + retSave = _ms.ToArray + + 'make sure directory exists + Directory.CreateDirectory(Directory.GetParent(sPath).FullName) + If sPath.Length <= 260 Then + Using fs As New FileStream(sPath, FileMode.Create, FileAccess.Write) + fs.Write(retSave, 0, retSave.Length) + fs.Flush() + fs.Close() + End Using + End If + Return + End If If IsNothing(_image) Then Exit Sub Dim doesExist As Boolean = File.Exists(sPath) @@ -455,30 +551,13 @@ Public Class Images End If If Not sUrl = "" Then - 'TODO V3 API implementation to get ALL posters! http://docs.themoviedb.apiary.io/#configuration - ' GetsImagesFromTMDBv3("URL/MOVIEDID") - - Dim stroriginalurl As String = sUrl - 'Image Download from tmdb is special, need original size - If Not sUrl.Contains("impawards") AndAlso Not sUrl.Contains("movieposterdb") Then - 'Always get original image... - 'links to images (tmdb) have following structure: 'example: http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w92/x65b4vsFKYuA878pLN1mJiAsgIP.jpg - - Dim stringArray() As String = Split(stroriginalurl, "/") - If stringArray.Length > 4 Then - ' stringArray(5) contains values like "w185","original", "w154"...-->size -> we want original! - stringArray(5) = "original" - stroriginalurl = Join(stringArray, "/") - End If - End If Dim webclient As New Net.WebClient 'Download image! - webclient.DownloadFile(stroriginalurl, sPath) + webclient.DownloadFile(sUrl, sPath) Else Using msSave As New MemoryStream - Dim retSave() As Byte Dim ICI As ImageCodecInfo = GetEncoderInfo(ImageFormat.Jpeg) Dim EncPars As EncoderParameters = New EncoderParameters(If(iQuality > 0, 2, 1)) @@ -511,219 +590,270 @@ Public Class Images End Try End Sub - Public Function SaveAsAllSeasonPoster(ByVal mShow As Structures.DBTV) As String - Dim strReturn As String = String.Empty - - Try - Dim pPath As String = String.Empty + Public Function SaveAsAllSeasonPoster(ByVal mShow As Structures.DBTV, Optional sURL As String = "") As String + Dim strReturn As String = String.Empty + Dim doResize As Boolean = Master.eSettings.ResizeAllSPoster AndAlso (_image.Width > Master.eSettings.AllSPosterWidth OrElse _image.Height > Master.eSettings.AllSPosterHeight) - If Master.eSettings.ResizeAllSPoster AndAlso (_image.Width > Master.eSettings.AllSPosterWidth OrElse _image.Height > Master.eSettings.AllSPosterHeight) Then - ImageUtils.ResizeImage(_image, Master.eSettings.AllSPosterWidth, Master.eSettings.AllSPosterHeight) - End If - Try - Dim params As New List(Of Object)(New Object() {Enums.TVImageType.AllSeasonPoster, mShow, New List(Of String)}) - Dim doContinue As Boolean = True - ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) - For Each s As String In DirectCast(params(2), List(Of String)) - If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteAllSPoster) Then - Save(s, Master.eSettings.AllSPosterQuality) - If String.IsNullOrEmpty(strReturn) Then strReturn = s - End If - Next - If Not doContinue Then Return strReturn - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try + Try + Dim pPath As String = String.Empty - If Master.eSettings.SeasonAllJPG Then - pPath = Path.Combine(mShow.ShowPath, "season-all.jpg") - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteAllSPoster) Then - Save(pPath, Master.eSettings.AllSPosterQuality) - strReturn = pPath - End If - End If + If doResize Then + ImageUtils.ResizeImage(_image, Master.eSettings.AllSPosterWidth, Master.eSettings.AllSPosterHeight) + End If - If Master.eSettings.SeasonAllTBN Then - pPath = Path.Combine(mShow.ShowPath, "season-all.tbn") - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteAllSPoster) Then - Save(pPath, Master.eSettings.AllSPosterQuality) - strReturn = pPath - End If - End If + Try + Dim params As New List(Of Object)(New Object() {Enums.TVImageType.AllSeasonPoster, mShow, New List(Of String)}) + Dim doContinue As Boolean = True + ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) + For Each s As String In DirectCast(params(2), List(Of String)) + If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteAllSPoster) Then + Save(s, Master.eSettings.AllSPosterQuality, sURL, doResize) + If String.IsNullOrEmpty(strReturn) Then strReturn = s + End If + Next + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + If Master.eSettings.SeasonAllJPG Then + pPath = Path.Combine(mShow.ShowPath, "season-all.jpg") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteAllSPoster) Then + Save(pPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = pPath + End If + End If - If Master.eSettings.SeasonAllPosterJPG Then - pPath = Path.Combine(mShow.ShowPath, "season-all-poster.jpg") - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteAllSPoster) Then - Save(pPath, Master.eSettings.AllSPosterQuality) - strReturn = pPath - End If - End If + If Master.eSettings.SeasonAllTBN Then + pPath = Path.Combine(mShow.ShowPath, "season-all.tbn") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteAllSPoster) Then + Save(pPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = pPath + End If + End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try + If Master.eSettings.SeasonAllPosterJPG Then + pPath = Path.Combine(mShow.ShowPath, "season-all-poster.jpg") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteAllSPoster) Then + Save(pPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = pPath + End If + End If - Return strReturn - End Function + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try - Public Function SaveAsEpFanart(ByVal mShow As Structures.DBTV) As String - Dim strReturn As String = String.Empty + Return strReturn + End Function - Try - Dim tPath As String = String.Empty + Public Function SaveAsEpFanart(ByVal mShow As Structures.DBTV, Optional sURL As String = "") As String + Dim strReturn As String = String.Empty + Dim doResize As Boolean = Master.eSettings.ResizeEpFanart AndAlso (_image.Width > Master.eSettings.EpFanartWidth OrElse _image.Height > Master.eSettings.EpFanartHeight) - If Master.eSettings.ResizeEpFanart AndAlso (_image.Width > Master.eSettings.EpFanartWidth OrElse _image.Height > Master.eSettings.EpFanartHeight) Then - ImageUtils.ResizeImage(_image, Master.eSettings.EpFanartWidth, Master.eSettings.EpFanartHeight) - End If - Try - Dim params As New List(Of Object)(New Object() {Enums.TVImageType.EpisodeFanart, mShow, New List(Of String)}) - Dim doContinue As Boolean = True - ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) - For Each s As String In DirectCast(params(2), List(Of String)) - If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpFanart) Then - Save(s, Master.eSettings.EpFanartQuality) - If String.IsNullOrEmpty(strReturn) Then strReturn = s - End If - Next - If Not doContinue Then Return strReturn - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try + Try + Dim tPath As String = String.Empty - If Master.eSettings.EpisodeDotFanart Then - tPath = String.Concat(FileUtils.Common.RemoveExtFromPath(mShow.Filename), ".fanart.jpg") - If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpFanart) Then - Save(tPath, Master.eSettings.EpFanartQuality) - strReturn = tPath - End If - End If + If doResize Then + ImageUtils.ResizeImage(_image, Master.eSettings.EpFanartWidth, Master.eSettings.EpFanartHeight) + End If + Try + Dim params As New List(Of Object)(New Object() {Enums.TVImageType.EpisodeFanart, mShow, New List(Of String)}) + Dim doContinue As Boolean = True + ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) + For Each s As String In DirectCast(params(2), List(Of String)) + If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpFanart) Then + Save(s, Master.eSettings.AllSPosterQuality, sURL, doResize) + If String.IsNullOrEmpty(strReturn) Then strReturn = s + End If + Next + If Not doContinue Then + Return strReturn + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + If Master.eSettings.EpisodeDotFanart Then + tPath = String.Concat(FileUtils.Common.RemoveExtFromPath(mShow.Filename), ".fanart.jpg") + If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpFanart) Then + Save(tPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = tPath + End If + End If - If Master.eSettings.EpisodeDashFanart Then - tPath = String.Concat(FileUtils.Common.RemoveExtFromPath(mShow.Filename), "-fanart.jpg") - If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpFanart) Then - Save(tPath, Master.eSettings.EpFanartQuality) - strReturn = tPath - End If - End If + If Master.eSettings.EpisodeDashFanart Then + tPath = String.Concat(FileUtils.Common.RemoveExtFromPath(mShow.Filename), "-fanart.jpg") + If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpFanart) Then + Save(tPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = tPath + End If + End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return strReturn + End Function - Return strReturn - End Function + Public Function SaveAsEpPoster(ByVal mShow As Structures.DBTV, Optional sURL As String = "") As String + Dim strReturn As String = String.Empty + Dim doResize As Boolean = Master.eSettings.ResizeEpPoster AndAlso (_image.Width > Master.eSettings.EpPosterWidth OrElse _image.Height > Master.eSettings.EpPosterHeight) - Public Function SaveAsEpPoster(ByVal mShow As Structures.DBTV) As String - Dim strReturn As String = String.Empty + Try + Dim pPath As String = String.Empty - Try - Dim pPath As String = String.Empty + If doResize Then + ImageUtils.ResizeImage(_image, Master.eSettings.EpPosterWidth, Master.eSettings.EpPosterHeight) + End If + Try + Dim params As New List(Of Object)(New Object() {Enums.TVImageType.EpisodePoster, mShow, New List(Of String)}) + Dim doContinue As Boolean = True + ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) + For Each s As String In DirectCast(params(2), List(Of String)) + If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpPoster) Then + Save(s, Master.eSettings.AllSPosterQuality, sURL, doResize) + If String.IsNullOrEmpty(strReturn) Then strReturn = s + End If + Next + If Not doContinue Then + Return strReturn + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + If Master.eSettings.EpisodeJPG Then + pPath = String.Concat(FileUtils.Common.RemoveExtFromPath(mShow.Filename), ".jpg") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpPoster) Then + Save(pPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = pPath + End If + End If - If Master.eSettings.ResizeEpPoster AndAlso (_image.Width > Master.eSettings.EpPosterWidth OrElse _image.Height > Master.eSettings.EpPosterHeight) Then - ImageUtils.ResizeImage(_image, Master.eSettings.EpPosterWidth, Master.eSettings.EpPosterHeight) - End If - Try - Dim params As New List(Of Object)(New Object() {Enums.TVImageType.EpisodePoster, mShow, New List(Of String)}) - Dim doContinue As Boolean = True - ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) - For Each s As String In DirectCast(params(2), List(Of String)) - If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpPoster) Then - Save(s, Master.eSettings.EpPosterQuality) - If String.IsNullOrEmpty(strReturn) Then strReturn = s - End If - Next - If Not doContinue Then Return strReturn - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try + If Master.eSettings.EpisodeTBN Then + pPath = String.Concat(FileUtils.Common.RemoveExtFromPath(mShow.Filename), ".tbn") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpPoster) Then + Save(pPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = pPath + End If + End If - If Master.eSettings.EpisodeJPG Then - pPath = String.Concat(FileUtils.Common.RemoveExtFromPath(mShow.Filename), ".jpg") - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpPoster) Then - Save(pPath, Master.eSettings.EpPosterQuality) - strReturn = pPath - End If - End If + If Master.eSettings.EpisodeDashThumbJPG Then + pPath = String.Concat(FileUtils.Common.RemoveExtFromPath(mShow.Filename), "-thumb.jpg") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpPoster) Then + Save(pPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = pPath + End If + End If - If Master.eSettings.EpisodeTBN Then - pPath = String.Concat(FileUtils.Common.RemoveExtFromPath(mShow.Filename), ".tbn") - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpPoster) Then - Save(pPath, Master.eSettings.EpPosterQuality) - strReturn = pPath - End If - End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return strReturn + End Function - If Master.eSettings.EpisodeDashThumbJPG Then - pPath = String.Concat(FileUtils.Common.RemoveExtFromPath(mShow.Filename), "-thumb.jpg") - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteEpPoster) Then - Save(pPath, Master.eSettings.EpPosterQuality) - strReturn = pPath - End If - End If + Public Function SaveAsFanart(ByVal mMovie As Structures.DBMovie, Optional sURL As String = "") As String + Dim strReturn As String = String.Empty + Dim doResize As Boolean = Master.eSettings.ResizeFanart AndAlso (_image.Width > Master.eSettings.FanartWidth OrElse _image.Height > Master.eSettings.FanartHeight) - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try + Try + Dim fPath As String = String.Empty + Dim fPathStack As String = String.Empty + Dim tPath As String = String.Empty + + Try + Dim params As New List(Of Object)(New Object() {mMovie}) + ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.OnMovieFanartSave, params, _image, False) + Catch ex As Exception + End Try + + If doResize Then + ImageUtils.ResizeImage(_image, Master.eSettings.FanartWidth, Master.eSettings.FanartHeight) + End If - Return strReturn - End Function + If (Master.eSettings.VideoTSParent OrElse Master.eSettings.VideoTSParentXBMC) AndAlso FileUtils.Common.isVideoTS(mMovie.Filename) Then + With Master.eSettings + If .FanartJPG Then + fPath = String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, "\", "fanart.jpg") + If Not File.Exists(fPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(fPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = fPath + End If + End If - Public Function SaveAsFanart(ByVal mMovie As Structures.DBMovie) As String - Dim strReturn As String = String.Empty + If .MovieNameFanartJPG AndAlso Not Master.eSettings.VideoTSParentXBMC Then + fPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).Name), "-fanart.jpg") + If Not File.Exists(fPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(fPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = fPath + End If + End If - Try - Dim fPath As String = String.Empty - Dim tPath As String = String.Empty + If .MovieNameFanartJPG AndAlso Master.eSettings.VideoTSParentXBMC Then + fPath = String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, "\", "fanart.jpg") + If Not File.Exists(fPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(fPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = fPath + End If + End If - Try - Dim params As New List(Of Object)(New Object() {mMovie}) - ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.OnMovieFanartSave, params, _image, False) - Catch ex As Exception - End Try + If .MovieNameDotFanartJPG Then + fPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).Name), ".fanart.jpg") + If Not File.Exists(fPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(fPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = fPath + End If + End If + End With + + If Master.eSettings.AutoBD AndAlso Directory.Exists(Master.eSettings.BDPath) Then + Save(String.Concat(Master.eSettings.BDPath, Path.DirectorySeparatorChar, StringUtils.CleanFileName(mMovie.Movie.OriginalTitle), "_tt", mMovie.Movie.IMDBID, ".jpg"), Master.eSettings.AllSPosterQuality, sURL, doResize) + End If - If Master.eSettings.ResizeFanart AndAlso (_image.Width > Master.eSettings.FanartWidth OrElse _image.Height > Master.eSettings.FanartHeight) Then - ImageUtils.ResizeImage(_image, Master.eSettings.FanartWidth, Master.eSettings.FanartHeight) - End If + ElseIf (Master.eSettings.VideoTSParent OrElse Master.eSettings.VideoTSParentXBMC) AndAlso FileUtils.Common.isBDRip(mMovie.Filename) Then + With Master.eSettings + If .FanartJPG Then + fPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, "fanart.jpg")) + If Not File.Exists(fPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(fPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = fPath + End If + End If - If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(mMovie.Filename) Then - If Master.eSettings.FanartJPG Then - fPath = String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, "\", "fanart.jpg") - ElseIf Master.eSettings.MovieNameFanartJPG Then - fPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).Name), "-fanart.jpg") - ElseIf Master.eSettings.MovieNameDotFanartJPG Then - fPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).Name), ".fanart.jpg") - Else - fPath = String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, "\", "fanart.jpg") - End If + If .MovieNameFanartJPG AndAlso Not Master.eSettings.VideoTSParentXBMC Then + fPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).Name), "-fanart.jpg") + If Not File.Exists(fPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(fPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = fPath + End If + End If - If Not File.Exists(fPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then - Save(fPath, Master.eSettings.FanartQuality) - strReturn = fPath - If Master.eSettings.AutoBD AndAlso Directory.Exists(Master.eSettings.BDPath) Then - Save(Path.Combine(Master.eSettings.BDPath, Path.GetFileName(fPath)), Master.eSettings.FanartQuality) + If .MovieNameFanartJPG AndAlso Master.eSettings.VideoTSParentXBMC Then + fPath = String.Concat(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, "\", "fanart.jpg") + If Not File.Exists(fPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(fPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = fPath + End If End If - End If - ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(mMovie.Filename) Then - If Master.eSettings.FanartJPG Then - fPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, "fanart.jpg")) - ElseIf Master.eSettings.MovieNameFanartJPG Then - fPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).Name), "-fanart.jpg") - ElseIf Master.eSettings.MovieNameDotFanartJPG Then - fPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).Name), ".fanart.jpg") - Else - fPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, "fanart.jpg")) - End If - If Not File.Exists(fPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then - Save(fPath, Master.eSettings.FanartQuality) - strReturn = fPath - If Master.eSettings.AutoBD AndAlso Directory.Exists(Master.eSettings.BDPath) Then - Save(Path.Combine(Master.eSettings.BDPath, Path.GetFileName(fPath)), Master.eSettings.FanartQuality) + If .MovieNameDotFanartJPG Then + fPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).Name), ".fanart.jpg") + If Not File.Exists(fPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(fPath, Master.eSettings.AllSPosterQuality, sURL, doResize) + strReturn = fPath + End If End If + End With + + If Master.eSettings.AutoBD AndAlso Directory.Exists(Master.eSettings.BDPath) Then + Save(String.Concat(Master.eSettings.BDPath, Path.DirectorySeparatorChar, StringUtils.CleanFileName(mMovie.Movie.OriginalTitle), "_tt", mMovie.Movie.IMDBID, ".jpg"), Master.eSettings.AllSPosterQuality, sURL, doResize) End If + Else Dim tmpName As String = Path.GetFileNameWithoutExtension(mMovie.Filename) + Dim tmpNameStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(mMovie.Filename)) fPath = Path.Combine(Directory.GetParent(mMovie.Filename).FullName, tmpName) + fPathStack = Path.Combine(Directory.GetParent(mMovie.Filename).FullName, tmpNameStack) If Master.eSettings.MovieNameDotFanartJPG AndAlso (Not mMovie.isSingle OrElse Not Master.eSettings.MovieNameMultiOnly) Then If FileUtils.Common.isVideoTS(mMovie.Filename) Then @@ -734,17 +864,8 @@ Public Class Images tPath = String.Concat(fPath, ".fanart.jpg") End If If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteFanart) Then - Save(tPath, Master.eSettings.FanartQuality) + Save(tPath, Master.eSettings.FanartQuality, sURL, doResize) strReturn = tPath - If Master.eSettings.AutoBD AndAlso Directory.Exists(Master.eSettings.BDPath) Then - If FileUtils.Common.isVideoTS(mMovie.Filename) Then - Save(Path.Combine(Master.eSettings.BDPath, String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).Name, "-fanart.jpg")), Master.eSettings.FanartQuality) - ElseIf FileUtils.Common.isBDRip(mMovie.Filename) Then - Save(Path.Combine(Master.eSettings.BDPath, String.Concat(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).Name, "-fanart.jpg")), Master.eSettings.FanartQuality) - Else - Save(Path.Combine(Master.eSettings.BDPath, Path.GetFileName(tPath)), Master.eSettings.FanartQuality) - End If - End If End If End If @@ -754,133 +875,224 @@ Public Class Images ElseIf FileUtils.Common.isBDRip(mMovie.Filename) Then tPath = Path.Combine(Directory.GetParent(mMovie.Filename).FullName, "index-fanart.jpg") Else - tPath = String.Concat(fPath, "-fanart.jpg") + If Master.eSettings.VideoTSParentXBMC AndAlso tmpName.ToLower = "video_ts" Then + tPath = String.Concat(Directory.GetParent(fPath).FullName, "\", "fanart.jpg") + Else + tPath = String.Concat(fPathStack, "-fanart.jpg") + End If End If If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteFanart) Then - Save(tPath, Master.eSettings.FanartQuality) + Save(tPath, Master.eSettings.FanartQuality, sURL, doResize) strReturn = tPath - If Master.eSettings.AutoBD AndAlso Directory.Exists(Master.eSettings.BDPath) Then - If FileUtils.Common.isVideoTS(mMovie.Filename) Then - Save(Path.Combine(Master.eSettings.BDPath, String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).Name, "-fanart.jpg")), Master.eSettings.FanartQuality) - ElseIf FileUtils.Common.isBDRip(mMovie.Filename) Then - Save(Path.Combine(Master.eSettings.BDPath, String.Concat(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).Name, "-fanart.jpg")), Master.eSettings.FanartQuality) - Else - Save(Path.Combine(Master.eSettings.BDPath, Path.GetFileName(tPath)), Master.eSettings.FanartQuality) - End If - End If End If End If If Master.eSettings.FanartJPG AndAlso mMovie.isSingle Then tPath = Path.Combine(Directory.GetParent(mMovie.Filename).FullName, "fanart.jpg") If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteFanart) Then - Save(tPath, Master.eSettings.FanartQuality) + Save(tPath, Master.eSettings.FanartQuality, sURL, doResize) strReturn = tPath - If Master.eSettings.AutoBD AndAlso Directory.Exists(Master.eSettings.BDPath) Then - If FileUtils.Common.isVideoTS(mMovie.Filename) Then - Save(Path.Combine(Master.eSettings.BDPath, String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).Name, "-fanart.jpg")), Master.eSettings.FanartQuality) - ElseIf FileUtils.Common.isBDRip(mMovie.Filename) Then - Save(Path.Combine(Master.eSettings.BDPath, String.Concat(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).Name, "-fanart.jpg")), Master.eSettings.FanartQuality) - Else - Save(Path.Combine(Master.eSettings.BDPath, String.Concat(tmpName, "-fanart.jpg")), Master.eSettings.FanartQuality) - End If - End If End If End If + + If Master.eSettings.AutoBD AndAlso Directory.Exists(Master.eSettings.BDPath) Then + Save(String.Concat(Master.eSettings.BDPath, Path.DirectorySeparatorChar, StringUtils.CleanFileName(mMovie.Movie.OriginalTitle), "_tt", mMovie.Movie.IMDBID, ".jpg"), Master.eSettings.AllSPosterQuality, sURL, doResize) + End If End If + Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") End Try - Return strReturn - End Function + Return strReturn + End Function - Public Function SaveAsPoster(ByVal mMovie As Structures.DBMovie) As String - Dim strReturn As String = String.Empty + Public Function SaveAsPoster(ByVal mMovie As Structures.DBMovie, Optional sURL As String = "") As String + Dim strReturn As String = String.Empty + Dim doResize As Boolean = Master.eSettings.ResizePoster AndAlso (_image.Width > Master.eSettings.PosterWidth OrElse _image.Height > Master.eSettings.PosterHeight) - Try - Dim pPath As String = String.Empty - Try - Dim params As New List(Of Object)(New Object() {mMovie}) - ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.OnMoviePosterSave, params, _image, False) - Catch ex As Exception - End Try - If Master.eSettings.ResizePoster AndAlso (_image.Width > Master.eSettings.PosterWidth OrElse _image.Height > Master.eSettings.PosterHeight) Then - ImageUtils.ResizeImage(_image, Master.eSettings.PosterWidth, Master.eSettings.PosterHeight) - End If + Try + Dim pPath As String = String.Empty + Dim pPathStack As String = String.Empty + Try + Dim params As New List(Of Object)(New Object() {mMovie}) + ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.OnMoviePosterSave, params, _image, False) + Catch ex As Exception + End Try + + If doResize Then + ImageUtils.ResizeImage(_image, Master.eSettings.PosterWidth, Master.eSettings.PosterHeight) + End If - If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(mMovie.Filename) Then + If (Master.eSettings.VideoTSParent OrElse Master.eSettings.VideoTSParentXBMC) AndAlso FileUtils.Common.isVideoTS(mMovie.Filename) Then With Master.eSettings If .MovieNameJPG Then pPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).Name), ".jpg") - ElseIf .MovieJPG Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .MovieJPG Then pPath = String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, "\", "movie.jpg") - ElseIf .FolderJPG Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .FolderJPG Then pPath = String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, "\", "folder.jpg") - ElseIf .PosterJPG Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .PosterJPG Then pPath = String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, "\", "poster.jpg") - ElseIf .MovieNameTBN Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .MovieNameTBN Then pPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).Name), ".tbn") - ElseIf .MovieNameDashPosterJPG Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .MovieNameDashPosterJPG And Not Master.eSettings.VideoTSParentXBMC Then pPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).Name), "-poster.jpg") - ElseIf .MovieTBN Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .MovieNameDashPosterJPG And Master.eSettings.VideoTSParentXBMC Then + pPath = String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, "\", "poster.jpg") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .MovieTBN Then pPath = String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, "\", "movie.tbn") - ElseIf .PosterTBN Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .PosterTBN Then pPath = String.Concat(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName, "\", "poster.tbn") - Else - pPath = String.Empty + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If End If End With - - If Not pPath = String.Empty And (Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster)) Then - Save(pPath, Master.eSettings.PosterQuality) - strReturn = pPath - End If - ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(mMovie.Filename) Then + ElseIf (Master.eSettings.VideoTSParent OrElse Master.eSettings.VideoTSParentXBMC) AndAlso FileUtils.Common.isBDRip(mMovie.Filename) Then With Master.eSettings If .MovieNameJPG Then pPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).Name), ".jpg") - ElseIf .MovieJPG Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .MovieJPG Then pPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, "movie.jpg")) - ElseIf .FolderJPG Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .FolderJPG Then pPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, "folder.jpg")) - ElseIf .PosterJPG Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .PosterJPG Then pPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, "poster.jpg")) - ElseIf .MovieNameTBN Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .MovieNameTBN Then pPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).Name), ".tbn") - ElseIf .MovieNameDashPosterJPG Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .MovieNameDashPosterJPG And Not Master.eSettings.VideoTSParentXBMC Then pPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).Name), "-poster.jpg") - ElseIf .MovieTBN Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .MovieNameDashPosterJPG And Master.eSettings.VideoTSParentXBMC Then + pPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, "poster.jpg")) + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .MovieTBN Then pPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, "movie.tbn")) - ElseIf .PosterTBN Then + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If + End If + + If .PosterTBN Then pPath = String.Concat(Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(mMovie.Filename).FullName).FullName).FullName, "poster.tbn")) - Else - pPath = String.Empty + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(pPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath + End If End If End With - - If Not pPath = String.Empty And (Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster)) Then - Save(pPath, Master.eSettings.PosterQuality) - strReturn = pPath - End If Else Dim tPath As String = String.Empty + Dim parPath As String = Directory.GetParent(mMovie.Filename).FullName Dim tmpName As String = Path.GetFileNameWithoutExtension(mMovie.Filename) + Dim tmpNameStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(mMovie.Filename)) pPath = Path.Combine(Directory.GetParent(mMovie.Filename).FullName, tmpName) + pPathStack = Path.Combine(Directory.GetParent(mMovie.Filename).FullName, tmpNameStack) If Master.eSettings.FolderJPG AndAlso mMovie.isSingle Then tPath = Path.Combine(Directory.GetParent(mMovie.Filename).FullName, "folder.jpg") If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then - Save(tPath, Master.eSettings.PosterQuality) - strReturn = tPath + Save(tPath, Master.eSettings.PosterQuality, sURL, doResize) + strReturn = pPath End If End If If Master.eSettings.PosterJPG AndAlso mMovie.isSingle Then tPath = Path.Combine(Directory.GetParent(mMovie.Filename).FullName, "poster.jpg") If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then - Save(tPath, Master.eSettings.PosterQuality) + Save(tPath, Master.eSettings.PosterQuality, sURL, doResize) strReturn = tPath End If End If @@ -888,7 +1100,7 @@ Public Class Images If Master.eSettings.PosterTBN AndAlso mMovie.isSingle Then tPath = Path.Combine(Directory.GetParent(mMovie.Filename).FullName, "poster.tbn") If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then - Save(tPath, Master.eSettings.PosterQuality) + Save(tPath, Master.eSettings.PosterQuality, sURL, doResize) strReturn = tPath End If End If @@ -902,7 +1114,7 @@ Public Class Images tPath = String.Concat(pPath, ".jpg") End If If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then - Save(tPath, Master.eSettings.PosterQuality) + Save(tPath, Master.eSettings.PosterQuality, sURL, doResize) strReturn = tPath End If End If @@ -913,10 +1125,14 @@ Public Class Images ElseIf FileUtils.Common.isBDRip(mMovie.Filename) Then tPath = Path.Combine(Directory.GetParent(mMovie.Filename).FullName, "index-poster.jpg") Else - tPath = String.Concat(pPath, "-poster.jpg") + If Master.eSettings.VideoTSParentXBMC AndAlso tmpName.ToLower = "video_ts" Then + tPath = String.Concat(Directory.GetParent(pPath).FullName, "\", "poster.jpg") + Else + tPath = String.Concat(pPathStack, "-poster.jpg") + End If End If If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then - Save(tPath, Master.eSettings.PosterQuality) + Save(tPath, Master.eSettings.PosterQuality, sURL, doResize) strReturn = tPath End If End If @@ -924,7 +1140,7 @@ Public Class Images If Master.eSettings.MovieJPG AndAlso mMovie.isSingle Then tPath = Path.Combine(Directory.GetParent(mMovie.Filename).FullName, "movie.jpg") If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then - Save(tPath, Master.eSettings.PosterQuality) + Save(tPath, Master.eSettings.PosterQuality, sURL, doResize) strReturn = tPath End If End If @@ -938,7 +1154,7 @@ Public Class Images tPath = String.Concat(pPath, ".tbn") End If If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then - Save(tPath, Master.eSettings.PosterQuality) + Save(tPath, Master.eSettings.PosterQuality, sURL, doResize) strReturn = tPath End If End If @@ -946,7 +1162,7 @@ Public Class Images If Master.eSettings.MovieTBN AndAlso mMovie.isSingle Then tPath = Path.Combine(Directory.GetParent(mMovie.Filename).FullName, "movie.tbn") If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then - Save(tPath, Master.eSettings.PosterQuality) + Save(tPath, Master.eSettings.PosterQuality, sURL, doResize) strReturn = tPath End If End If @@ -954,43 +1170,58 @@ Public Class Images Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") End Try + Return strReturn + End Function - Return strReturn - End Function - Public Function SaveAsActorThumb(ByVal actor As MediaContainers.Person, ByVal fpath As String) As String - Dim tPath As String = String.Empty - tPath = Path.Combine(Path.Combine(fpath, ".actors"), String.Concat(actor.Name.Replace(" ", "_"), ".jpg")) - If Not Directory.Exists(Path.Combine(fpath, ".actors")) Then Directory.CreateDirectory(Path.Combine(fpath, ".actors")) - If Not File.Exists(tPath) Then ' OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then - Save(tPath, Master.eSettings.PosterQuality) - End If - Return tPath - End Function - Public Function SaveAsSeasonFanart(ByVal mShow As Structures.DBTV) As String - Dim strReturn As String = String.Empty + Public Function SaveAsActorThumb(ByVal actor As MediaContainers.Person, ByVal fpath As String, ByVal aMovie As Structures.DBMovie) As String + Dim tPath As String = String.Empty - Try + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(aMovie.Filename) Then + tPath = Path.Combine(Path.Combine(Directory.GetParent(fpath).FullName, ".actors"), String.Concat(actor.Name.Replace(" ", "_"), ".jpg")) + If Not Directory.Exists(Path.Combine(Directory.GetParent(fpath).FullName, ".actors")) Then Directory.CreateDirectory(Path.Combine(Directory.GetParent(fpath).FullName, ".actors")) + If Not File.Exists(tPath) Then ' OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(tPath, Master.eSettings.PosterQuality) + End If + Else + tPath = Path.Combine(Path.Combine(fpath, ".actors"), String.Concat(actor.Name.Replace(" ", "_"), ".jpg")) + If Not Directory.Exists(Path.Combine(fpath, ".actors")) Then Directory.CreateDirectory(Path.Combine(fpath, ".actors")) + If Not File.Exists(tPath) Then ' OrElse (IsEdit OrElse Master.eSettings.OverwritePoster) Then + Save(tPath, Master.eSettings.PosterQuality) + End If + End If + 'End If + Return tPath + End Function + + Public Function SaveAsSeasonFanart(ByVal mShow As Structures.DBTV, Optional sURL As String = "") As String + Dim strReturn As String = String.Empty + Dim doResize As Boolean = Master.eSettings.ResizeSeasonFanart AndAlso (_image.Width > Master.eSettings.SeasonFanartWidth OrElse _image.Height > Master.eSettings.SeasonFanartHeight) + + Try Dim pPath As String = String.Empty - If Master.eSettings.SeasonFanartJPG OrElse Master.eSettings.SeasonDashFanart OrElse Master.eSettings.SeasonXXDashFanartJPG OrElse Master.eSettings.SeasonDotFanart Then - If Master.eSettings.ResizeSeasonFanart AndAlso (_image.Width > Master.eSettings.SeasonFanartWidth OrElse _image.Height > Master.eSettings.SeasonFanartHeight) Then - ImageUtils.ResizeImage(_image, Master.eSettings.SeasonFanartWidth, Master.eSettings.SeasonFanartHeight) + If doResize Then + ImageUtils.ResizeImage(_image, Master.eSettings.SeasonFanartWidth, Master.eSettings.SeasonFanartHeight) + End If + Try + Dim params As New List(Of Object)(New Object() {Enums.TVImageType.SeasonFanart, mShow, New List(Of String)}) + Dim doContinue As Boolean = True + ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) + For Each s As String In DirectCast(params(2), List(Of String)) + If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonFanart) Then + + Save(s, Master.eSettings.SeasonFanartQuality, sURL, doResize) + If String.IsNullOrEmpty(strReturn) Then strReturn = s + End If + Next + If Not doContinue Then + Return strReturn End If - Try - Dim params As New List(Of Object)(New Object() {Enums.TVImageType.SeasonFanart, mShow, New List(Of String)}) - Dim doContinue As Boolean = True - ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) - For Each s As String In DirectCast(params(2), List(Of String)) - If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonFanart) Then - Save(s, Master.eSettings.SeasonFanartQuality) - If String.IsNullOrEmpty(strReturn) Then strReturn = s - End If - Next - If Not doContinue Then Return strReturn - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + If Master.eSettings.SeasonFanartJPG OrElse Master.eSettings.SeasonDashFanart OrElse Master.eSettings.SeasonXXDashFanartJPG OrElse Master.eSettings.SeasonDotFanart Then Dim tPath As String = String.Empty Try @@ -1003,7 +1234,7 @@ Public Class Images If Master.eSettings.SeasonDotFanart Then pPath = Path.Combine(tPath, String.Concat(FileUtils.Common.GetDirectory(tPath), ".fanart.jpg")) If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonFanart) Then - Save(pPath, Master.eSettings.SeasonFanartQuality) + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) strReturn = pPath End If End If @@ -1011,7 +1242,7 @@ Public Class Images If Master.eSettings.SeasonDashFanart Then pPath = Path.Combine(tPath, String.Concat(FileUtils.Common.GetDirectory(tPath), "-fanart.jpg")) If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonFanart) Then - Save(pPath, Master.eSettings.SeasonFanartQuality) + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) strReturn = pPath End If End If @@ -1019,7 +1250,7 @@ Public Class Images If Master.eSettings.SeasonFanartJPG Then pPath = Path.Combine(tPath, "Fanart.jpg") If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonFanart) Then - Save(pPath, Master.eSettings.SeasonFanartQuality) + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) strReturn = pPath End If End If @@ -1031,7 +1262,7 @@ Public Class Images pPath = Path.Combine(mShow.ShowPath, String.Format("season{0}-fanart.jpg", mShow.TVEp.Season.ToString.PadLeft(2, Convert.ToChar("0")))) End If If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonFanart) Then - Save(pPath, Master.eSettings.SeasonFanartQuality) + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) strReturn = pPath End If End If @@ -1044,278 +1275,277 @@ Public Class Images pPath = Path.Combine(mShow.ShowPath, String.Format("season{0}-fanart.jpg", mShow.TVEp.Season.ToString.PadLeft(2, Convert.ToChar("0")))) End If If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonFanart) Then - Save(pPath, Master.eSettings.SeasonFanartQuality) + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) strReturn = pPath End If End If End If End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - - Return strReturn - End Function - - Public Function SaveAsSeasonPoster(ByVal mShow As Structures.DBTV) As String - Dim strReturn As String = String.Empty - - Try - Dim pPath As String = String.Empty - - If Master.eSettings.ResizeSeasonPoster AndAlso (_image.Width > Master.eSettings.SeasonPosterWidth OrElse _image.Height > Master.eSettings.SeasonPosterHeight) Then - ImageUtils.ResizeImage(_image, Master.eSettings.SeasonPosterWidth, Master.eSettings.SeasonPosterHeight) - End If - - Try - Dim params As New List(Of Object)(New Object() {Enums.TVImageType.SeasonPoster, mShow, New List(Of String)}) - Dim doContinue As Boolean = True - ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) - For Each s As String In DirectCast(params(2), List(Of String)) - If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then - Save(s, Master.eSettings.SeasonPosterQuality) - If String.IsNullOrEmpty(strReturn) Then strReturn = s - End If - Next - If Not doContinue Then Return strReturn - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - - If Master.eSettings.SeasonPosterTBN OrElse Master.eSettings.SeasonPosterJPG OrElse Master.eSettings.SeasonNameTBN OrElse _ - Master.eSettings.SeasonNameJPG OrElse Master.eSettings.FolderJPG Then - Dim tPath As String = String.Empty - - - Try - tPath = Functions.GetSeasonDirectoryFromShowPath(mShow.ShowPath, mShow.TVEp.Season) - Catch - End Try - - If Not String.IsNullOrEmpty(tPath) Then - If Master.eSettings.SeasonPosterTBN Then - pPath = Path.Combine(tPath, "Poster.tbn") - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then - Save(pPath, Master.eSettings.SeasonPosterQuality) - strReturn = pPath - End If - End If - - If Master.eSettings.SeasonPosterJPG Then - pPath = Path.Combine(tPath, "Poster.jpg") - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then - Save(pPath, Master.eSettings.SeasonPosterQuality) - strReturn = pPath - End If - End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return strReturn + End Function - If Master.eSettings.SeasonNameTBN Then - pPath = Path.Combine(tPath, String.Concat(FileUtils.Common.GetDirectory(tPath), ".tbn")) - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then - Save(pPath, Master.eSettings.SeasonPosterQuality) - strReturn = pPath - End If - End If + Public Function SaveAsSeasonPoster(ByVal mShow As Structures.DBTV, Optional sURL As String = "") As String + Dim strReturn As String = String.Empty + Dim doResize As Boolean = Master.eSettings.ResizeSeasonPoster AndAlso (_image.Width > Master.eSettings.SeasonPosterWidth OrElse _image.Height > Master.eSettings.SeasonPosterHeight) - If Master.eSettings.SeasonNameJPG Then - pPath = Path.Combine(tPath, String.Concat(FileUtils.Common.GetDirectory(tPath), ".jpg")) - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then - Save(pPath, Master.eSettings.SeasonPosterQuality) - strReturn = pPath - End If - End If + Try + Dim pPath As String = String.Empty - If Master.eSettings.SeasonFolderJPG Then - pPath = Path.Combine(tPath, "Folder.jpg") - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then - Save(pPath, Master.eSettings.SeasonPosterQuality) - strReturn = pPath - End If - End If - End If - End If + If doResize Then + ImageUtils.ResizeImage(_image, Master.eSettings.SeasonPosterWidth, Master.eSettings.SeasonPosterHeight) + End If - If Master.eSettings.SeasonX Then - If mShow.TVEp.Season = 0 Then - pPath = Path.Combine(mShow.ShowPath, "season-specials.tbn") - Else - pPath = Path.Combine(mShow.ShowPath, String.Format("season{0}.tbn", mShow.TVEp.Season)) - End If - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then - Save(pPath, Master.eSettings.SeasonPosterQuality) - strReturn = pPath - End If - End If + Try + Dim params As New List(Of Object)(New Object() {Enums.TVImageType.SeasonPoster, mShow, New List(Of String)}) + Dim doContinue As Boolean = True + ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) + For Each s As String In DirectCast(params(2), List(Of String)) + If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then + Save(s, Master.eSettings.SeasonPosterQuality, sURL, doResize) + If String.IsNullOrEmpty(strReturn) Then strReturn = s + End If + Next + If Not doContinue Then + Return strReturn + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + If Master.eSettings.SeasonPosterTBN OrElse Master.eSettings.SeasonPosterJPG OrElse Master.eSettings.SeasonNameTBN OrElse _ + Master.eSettings.SeasonNameJPG OrElse Master.eSettings.FolderJPG Then + Dim tPath As String = String.Empty + Try + tPath = Functions.GetSeasonDirectoryFromShowPath(mShow.ShowPath, mShow.TVEp.Season) + Catch + End Try + + If Not String.IsNullOrEmpty(tPath) Then + If Master.eSettings.SeasonPosterTBN Then + pPath = Path.Combine(tPath, "Poster.tbn") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) + strReturn = pPath + End If + End If - If Master.eSettings.SeasonXX Then - If mShow.TVEp.Season = 0 Then - pPath = Path.Combine(mShow.ShowPath, "season-specials.tbn") - Else - pPath = Path.Combine(mShow.ShowPath, String.Format("season{0}.tbn", mShow.TVEp.Season.ToString.PadLeft(2, Convert.ToChar("0")))) - End If - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then - Save(pPath, Master.eSettings.SeasonPosterQuality) - strReturn = pPath - End If - End If + If Master.eSettings.SeasonPosterJPG Then + pPath = Path.Combine(tPath, "Poster.jpg") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) + strReturn = pPath + End If + End If - If Master.eSettings.SeasonXXDashPosterJPG Then - If mShow.TVEp.Season = 0 Then - pPath = Path.Combine(mShow.ShowPath, "season-specials-poster.jpg") - Else - pPath = Path.Combine(mShow.ShowPath, String.Format("season{0}-poster.jpg", mShow.TVEp.Season.ToString.PadLeft(2, Convert.ToChar("0")))) - End If - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then - Save(pPath, Master.eSettings.SeasonPosterQuality) - strReturn = pPath - End If - End If + If Master.eSettings.SeasonNameTBN Then + pPath = Path.Combine(tPath, String.Concat(FileUtils.Common.GetDirectory(tPath), ".tbn")) + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) + strReturn = pPath + End If + End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try + If Master.eSettings.SeasonNameJPG Then + pPath = Path.Combine(tPath, String.Concat(FileUtils.Common.GetDirectory(tPath), ".jpg")) + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) + strReturn = pPath + End If + End If - Return strReturn - End Function + If Master.eSettings.SeasonFolderJPG Then + pPath = Path.Combine(tPath, "Folder.jpg") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) + strReturn = pPath + End If + End If + End If + End If - Public Function SaveAsShowFanart(ByVal mShow As Structures.DBTV) As String - Dim strReturn As String = String.Empty + If Master.eSettings.SeasonX Then + If mShow.TVEp.Season = 0 Then + pPath = Path.Combine(mShow.ShowPath, "season-specials.tbn") + Else + pPath = Path.Combine(mShow.ShowPath, String.Format("season{0}.tbn", mShow.TVEp.Season)) + End If + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) + strReturn = pPath + End If + End If - Try - Dim tPath As String = String.Empty + If Master.eSettings.SeasonXX Then + If mShow.TVEp.Season = 0 Then + pPath = Path.Combine(mShow.ShowPath, "season-specials.tbn") + Else + pPath = Path.Combine(mShow.ShowPath, String.Format("season{0}.tbn", mShow.TVEp.Season.ToString.PadLeft(2, Convert.ToChar("0")))) + End If + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) + strReturn = pPath + End If + End If - If Master.eSettings.ResizeShowFanart AndAlso (_image.Width > Master.eSettings.ShowFanartWidth OrElse _image.Height > Master.eSettings.ShowFanartHeight) Then - ImageUtils.ResizeImage(_image, Master.eSettings.ShowFanartWidth, Master.eSettings.ShowFanartHeight) - End If + If Master.eSettings.SeasonXXDashPosterJPG Then + If mShow.TVEp.Season = 0 Then + pPath = Path.Combine(mShow.ShowPath, "season-specials-poster.jpg") + Else + pPath = Path.Combine(mShow.ShowPath, String.Format("season{0}-poster.jpg", mShow.TVEp.Season.ToString.PadLeft(2, Convert.ToChar("0")))) + End If + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteSeasonPoster) Then + Save(pPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) + strReturn = pPath + End If + End If - Try - Dim params As New List(Of Object)(New Object() {Enums.TVImageType.ShowFanart, mShow, New List(Of String)}) - Dim doContinue As Boolean = True - ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) - For Each s As String In DirectCast(params(2), List(Of String)) - If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowFanart) Then - Save(s, Master.eSettings.ShowFanartQuality) - If String.IsNullOrEmpty(strReturn) Then strReturn = s - End If - Next - If Not doContinue Then Return strReturn - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return strReturn + End Function - If Master.eSettings.ShowDotFanart Then - tPath = Path.Combine(mShow.ShowPath, String.Concat(FileUtils.Common.GetDirectory(mShow.ShowPath), ".fanart.jpg")) - If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowFanart) Then - Save(tPath, Master.eSettings.ShowFanartQuality) - strReturn = tPath - End If - End If + Public Function SaveAsShowFanart(ByVal mShow As Structures.DBTV, Optional sURL As String = "") As String + Dim strReturn As String = String.Empty + Dim doResize As Boolean = Master.eSettings.ResizeShowFanart AndAlso (_image.Width > Master.eSettings.ShowFanartWidth OrElse _image.Height > Master.eSettings.ShowFanartHeight) - If Master.eSettings.ShowDashFanart Then - tPath = Path.Combine(mShow.ShowPath, String.Concat(FileUtils.Common.GetDirectory(mShow.ShowPath), "-fanart.jpg")) - If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowFanart) Then - Save(tPath, Master.eSettings.ShowFanartQuality) - strReturn = tPath - End If - End If + Try + Dim tPath As String = String.Empty - If Master.eSettings.ShowFanartJPG Then - tPath = Path.Combine(mShow.ShowPath, "fanart.jpg") - If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowFanart) Then - Save(tPath, Master.eSettings.ShowFanartQuality) - strReturn = tPath - End If - End If + If doResize Then + ImageUtils.ResizeImage(_image, Master.eSettings.ShowFanartWidth, Master.eSettings.ShowFanartHeight) + End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try + Try + Dim params As New List(Of Object)(New Object() {Enums.TVImageType.ShowFanart, mShow, New List(Of String)}) + Dim doContinue As Boolean = True + ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) + For Each s As String In DirectCast(params(2), List(Of String)) + If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowFanart) Then + Save(s, Master.eSettings.SeasonFanartQuality, sURL, doResize) + If String.IsNullOrEmpty(strReturn) Then strReturn = s + End If + Next + If Not doContinue Then + Return strReturn + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + If Master.eSettings.ShowDotFanart Then + tPath = Path.Combine(mShow.ShowPath, String.Concat(FileUtils.Common.GetDirectory(mShow.ShowPath), ".fanart.jpg")) + If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowFanart) Then + Save(tPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) + strReturn = tPath + End If + End If - Return strReturn - End Function + If Master.eSettings.ShowDashFanart Then + tPath = Path.Combine(mShow.ShowPath, String.Concat(FileUtils.Common.GetDirectory(mShow.ShowPath), "-fanart.jpg")) + If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowFanart) Then + Save(tPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) + strReturn = tPath + End If + End If - Public Function SaveAsShowPoster(ByVal mShow As Structures.DBTV) As String - Dim strReturn As String = String.Empty + If Master.eSettings.ShowFanartJPG Then + tPath = Path.Combine(mShow.ShowPath, "fanart.jpg") + If Not File.Exists(tPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowFanart) Then + Save(tPath, Master.eSettings.SeasonFanartQuality, sURL, doResize) + strReturn = tPath + End If + End If - Try - Dim pPath As String = String.Empty + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return strReturn + End Function - If Master.eSettings.ResizeShowPoster AndAlso (_image.Width > Master.eSettings.ShowPosterWidth OrElse _image.Height > Master.eSettings.ShowPosterHeight) Then - ImageUtils.ResizeImage(_image, Master.eSettings.ShowPosterWidth, Master.eSettings.ShowPosterHeight) - End If + Public Function SaveAsShowPoster(ByVal mShow As Structures.DBTV, Optional sURL As String = "") As String + Dim strReturn As String = String.Empty + Dim doResize As Boolean = Master.eSettings.ResizeShowPoster AndAlso (_image.Width > Master.eSettings.ShowPosterWidth OrElse _image.Height > Master.eSettings.ShowPosterHeight) - Try - Dim params As New List(Of Object)(New Object() {Enums.TVImageType.ShowPoster, mShow, New List(Of String)}) - Dim doContinue As Boolean = True - ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) - For Each s As String In DirectCast(params(2), List(Of String)) - If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowPoster) Then - Save(s, Master.eSettings.ShowPosterQuality) - If String.IsNullOrEmpty(strReturn) Then strReturn = s - End If - Next - If Not doContinue Then Return strReturn - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try + Try + Dim pPath As String = String.Empty - If Master.eSettings.ShowPosterJPG Then - pPath = Path.Combine(mShow.ShowPath, "poster.jpg") - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowPoster) Then - Save(pPath, Master.eSettings.ShowPosterQuality) - strReturn = pPath - End If - End If + If doResize Then + ImageUtils.ResizeImage(_image, Master.eSettings.ShowPosterWidth, Master.eSettings.ShowPosterHeight) + End If - If Master.eSettings.ShowPosterTBN Then - pPath = Path.Combine(mShow.ShowPath, "poster.tbn") - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowPoster) Then - Save(pPath, Master.eSettings.ShowPosterQuality) - strReturn = pPath - End If - End If + Try + Dim params As New List(Of Object)(New Object() {Enums.TVImageType.ShowPoster, mShow, New List(Of String)}) + Dim doContinue As Boolean = True + ModulesManager.Instance.RunGeneric(Enums.ModuleEventType.TVImageNaming, params, doContinue) + For Each s As String In DirectCast(params(2), List(Of String)) + If Not File.Exists(s) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowPoster) Then + Save(s, Master.eSettings.SeasonFanartQuality, sURL, doResize) + If String.IsNullOrEmpty(strReturn) Then strReturn = s + End If + Next + If Not doContinue Then Return strReturn + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + + If Master.eSettings.ShowPosterJPG Then + pPath = Path.Combine(mShow.ShowPath, "poster.jpg") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowPoster) Then + Save(pPath, Master.eSettings.ShowPosterQuality, sURL, doResize) + strReturn = pPath + End If + End If - If Master.eSettings.ShowFolderJPG Then - pPath = Path.Combine(mShow.ShowPath, "folder.jpg") - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowPoster) Then - Save(pPath, Master.eSettings.ShowPosterQuality) - strReturn = pPath - End If - End If + If Master.eSettings.ShowPosterTBN Then + pPath = Path.Combine(mShow.ShowPath, "poster.tbn") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowPoster) Then + Save(pPath, Master.eSettings.ShowPosterQuality, sURL, doResize) + strReturn = pPath + End If + End If - If Master.eSettings.ShowJPG Then - pPath = Path.Combine(mShow.ShowPath, String.Concat(FileUtils.Common.GetDirectory(mShow.ShowPath), ".jpg")) - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowPoster) Then - Save(pPath, Master.eSettings.ShowPosterQuality) - strReturn = pPath - End If - End If + If Master.eSettings.ShowFolderJPG Then + pPath = Path.Combine(mShow.ShowPath, "folder.jpg") + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowPoster) Then + Save(pPath, Master.eSettings.ShowPosterQuality, sURL, doResize) + strReturn = pPath + End If + End If - If Master.eSettings.ShowTBN Then - pPath = Path.Combine(mShow.ShowPath, String.Concat(FileUtils.Common.GetDirectory(mShow.ShowPath), ".tbn")) - If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowPoster) Then - Save(pPath, Master.eSettings.ShowPosterQuality) - strReturn = pPath - End If - End If + If Master.eSettings.ShowJPG Then + pPath = Path.Combine(mShow.ShowPath, String.Concat(FileUtils.Common.GetDirectory(mShow.ShowPath), ".jpg")) + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowPoster) Then + Save(pPath, Master.eSettings.ShowPosterQuality, sURL, doResize) + strReturn = pPath + End If + End If - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try + If Master.eSettings.ShowTBN Then + pPath = Path.Combine(mShow.ShowPath, String.Concat(FileUtils.Common.GetDirectory(mShow.ShowPath), ".tbn")) + If Not File.Exists(pPath) OrElse (IsEdit OrElse Master.eSettings.OverwriteShowPoster) Then + Save(pPath, Master.eSettings.ShowPosterQuality, sURL, doResize) + strReturn = pPath + End If + End If - Return strReturn - End Function + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return strReturn + End Function Public Sub SaveFAasET(ByVal faPath As String, ByVal inPath As String) Dim iMod As Integer = 0 Dim iVal As Integer = 1 Dim extraPath As String = String.Empty - If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(inPath) Then + If Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(inPath) Then extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName, "extrathumbs") - ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(inPath) Then - extraPath = Path.Combine(Directory.GetParent(Directory.GetParent(Directory.GetParent(inPath).FullName).FullName).FullName, "extrathumbs") Else extraPath = Path.Combine(Directory.GetParent(inPath).FullName, "extrathumbs") End If @@ -1342,6 +1572,7 @@ Public Class Images Return Nothing End Function + #End Region 'Methods End Class \ No newline at end of file diff --git a/EmberAPI/clsAPIInterfaces.vb b/EmberAPI/clsAPIInterfaces.vb index e212f4b..8f495e5 100644 --- a/EmberAPI/clsAPIInterfaces.vb +++ b/EmberAPI/clsAPIInterfaces.vb @@ -63,154 +63,344 @@ Public Class Interfaces End Interface - Public Interface EmberMovieScraperModule + ' Public Interface EmberMovieScraperModule -#Region "Events" + '#Region "Events" - Event ModuleSettingsChanged() + ' Event ModuleSettingsChanged() - Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) + ' Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) - Event PostScraperSetupChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) + ' Event PostScraperSetupChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) - Event ScraperSetupChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) + ' Event ScraperSetupChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) - Sub ScraperOrderChanged() + ' Event SetupNeedsRestart() - Sub PostScraperOrderChanged() + ' Sub ScraperOrderChanged() -#End Region 'Events + ' Sub PostScraperOrderChanged() -#Region "Properties" + '#End Region 'Events - ReadOnly Property IsPostScraper() As Boolean + '#Region "Properties" - ReadOnly Property IsScraper() As Boolean + ' ReadOnly Property IsPostScraper() As Boolean - ReadOnly Property ModuleName() As String + ' ReadOnly Property IsScraper() As Boolean - ReadOnly Property ModuleVersion() As String + ' ReadOnly Property ModuleName() As String - Property PostScraperEnabled() As Boolean + ' ReadOnly Property ModuleVersion() As String - Property ScraperEnabled() As Boolean + ' Property PostScraperEnabled() As Boolean -#End Region 'Properties + ' Property ScraperEnabled() As Boolean + + '#End Region 'Properties + + '#Region "Methods" + + ' Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As ModuleResult + + ' Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef sStudio As List(Of String)) As ModuleResult + + ' Sub Init(ByVal sAssemblyName As String) + + ' Function InjectSetupPostScraper() As Containers.SettingsPanel + + ' Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean + + ' Function InjectSetupScraper() As Containers.SettingsPanel + + ' Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As ModuleResult + + ' Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) + + ' Sub SaveSetupScraper(ByVal DoDispose As Boolean) + + ' 'Movie is byref because some scrapper may run to update only some fields (defined in Scraper Setup) + ' 'Options is byref to allow field blocking in scraper chain + ' Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As ModuleResult + + ' Function SelectImageOfType(ByRef DBMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As ModuleResult + + '#End Region 'Methods + + ' End Interface + + + + ' ################################################################################ + ' # EMBER MEDIA MANAGER # + ' ################################################################################ + ' ################################################################################ + ' # NOTE: the following interfaces could be avoided with a single type # + ' # and some generic functions with generic Object return and type casting # + ' # # + ' # IT HAS BEEN DONE ON PURPOSE as we have seen the mess it has been created in # + ' # multi purpose Scrapers (data + image + trailers). # + ' # In this way evey scraper will have one precise object and development, debug # + ' # and maintenance will be far easier # + ' # # + ' # In the libraries there will be replicated code to manage the five lists # + ' # 3 for movies and 2 for TV episodes. Even if not optimal this is easier to # + ' # manage and debug # + ' # # + ' ################################################################################ + + Public Interface EmberMovieScraperModule_Data + +#Region "Events" + + Event ModuleSettingsChanged() + + Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) + + Event ScraperSetupChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) + + Event SetupNeedsRestart() + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property ModuleName() As String + + ReadOnly Property ModuleVersion() As String + + Property ScraperEnabled() As Boolean + +#End Region 'Properties #Region "Methods" - Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As ModuleResult + Sub ScraperOrderChanged() - Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef sStudio As List(Of String)) As ModuleResult + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef sStudio As List(Of String)) As ModuleResult - Sub Init(ByVal sAssemblyName As String) + Sub Init(ByVal sAssemblyName As String) - Function InjectSetupPostScraper() As Containers.SettingsPanel + Function InjectSetupScraper() As Containers.SettingsPanel - Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean + Sub SaveSetupScraper(ByVal DoDispose As Boolean) - Function InjectSetupScraper() As Containers.SettingsPanel + 'Movie is byref because some scrapper may run to update only some fields (defined in Scraper Setup) + 'Options is byref to allow field blocking in scraper chain + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As ModuleResult - Function PostScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As ModuleResult +#End Region 'Methods - Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) + End Interface - Sub SaveSetupScraper(ByVal DoDispose As Boolean) + Public Interface EmberMovieScraperModule_Poster - 'Movie is byref because some scrapper may run to update only some fields (defined in Scraper Setup) - 'Options is byref to allow field blocking in scraper chain - Function Scraper(ByRef DBMovie As Structures.DBMovie, ByRef ScrapeType As Enums.ScrapeType, ByRef Options As Structures.ScrapeOptions) As ModuleResult +#Region "Events" - Function SelectImageOfType(ByRef DBMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As ModuleResult + Event ModuleSettingsChanged() -#End Region 'Methods + Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) - End Interface + Event ScraperSetupChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) + + Event SetupNeedsRestart() + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property ModuleName() As String + + ReadOnly Property ModuleVersion() As String + + Property ScraperEnabled() As Boolean + +#End Region 'Properties + +#Region "Methods" + + Sub ScraperOrderChanged() + + Sub Init(ByVal sAssemblyName As String) + + Function InjectSetupScraper() As Containers.SettingsPanel + + Function QueryScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean + + Function Scraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As ModuleResult - Public Interface EmberTVScraperModule + Sub SaveSetupScraper(ByVal DoDispose As Boolean) + + Function ReturnImageList(ByRef DBMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As ModuleResult + + Function SelectImageOfType(ByRef DBMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As ModuleResult + +#End Region 'Methods + + End Interface + + Public Interface EmberMovieScraperModule_Trailer #Region "Events" - Event ModuleSettingsChanged() + Event ModuleSettingsChanged() - Event SetupPostScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) + Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) - Event SetupScraperChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) + Event ScraperSetupChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) - Event TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + Event SetupNeedsRestart() -#End Region 'Events +#End Region 'Events #Region "Properties" - ReadOnly Property IsBusy() As Boolean + ReadOnly Property ModuleName() As String - ReadOnly Property IsPostScraper() As Boolean + ReadOnly Property ModuleVersion() As String - ReadOnly Property IsScraper() As Boolean + Property ScraperEnabled() As Boolean - ReadOnly Property ModuleName() As String +#End Region 'Properties - ReadOnly Property ModuleVersion() As String +#Region "Methods" - Property PostScraperEnabled() As Boolean + Sub ScraperOrderChanged() - Property ScraperEnabled() As Boolean + Function DownloadTrailer(ByRef DBMovie As Structures.DBMovie, ByRef sURL As String) As ModuleResult -#End Region 'Properties + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie, ByRef sStudio As List(Of String)) As ModuleResult + + Sub Init(ByVal sAssemblyName As String) + + Function InjectSetupScraper() As Containers.SettingsPanel + + Function QueryTrailerScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean + + Function TrailerScraper(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As ModuleResult + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) + + Function ScraperTrailerList(ByRef DBMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As ModuleResult + +#End Region 'Methods + + End Interface + + Public Interface EmberTVScraperModule_Data + +#Region "Events" + + Event ModuleSettingsChanged() + + Event ScraperSetupChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) + + Event TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsBusy() As Boolean + + ReadOnly Property ModuleName() As String + + ReadOnly Property ModuleVersion() As String + + Property ScraperEnabled() As Boolean + +#End Region 'Properties #Region "Methods" - Sub CancelAsync() + Sub ScraperOrderChanged() - Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String, ByRef epDet As MediaContainers.EpisodeDetails) As ModuleResult + Sub CancelAsync() - Function GetLangs(ByVal sMirror As String, ByRef Langs As List(Of Containers.TVLanguage)) As ModuleResult + Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByRef epDetails As MediaContainers.EpisodeDetails) As ModuleResult - Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByRef epDetails As MediaContainers.EpisodeDetails) As ModuleResult + Sub Init(ByVal sAssemblyName As String) - Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Image, ByRef Image As Image) As ModuleResult + Function InjectSetupScraper() As Containers.SettingsPanel - Sub Init(ByVal sAssemblyName As String) + Sub SaveSetupScraper(ByVal DoDispose As Boolean) - Function InjectSetupPostScraper() As Containers.SettingsPanel + Function ScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As ModuleResult - Function InjectSetupScraper() As Containers.SettingsPanel + Function Scraper(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As ModuleResult - Function PostScraper(ByRef DBTV As Structures.DBTV, ByVal ScrapeType As Enums.ScrapeType) As ModuleResult + Function ScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As ModuleResult - Function SaveImages() As ModuleResult +#End Region 'Methods - Sub SaveSetupPostScraper(ByVal DoDispose As Boolean) + End Interface - Sub SaveSetupScraper(ByVal DoDispose As Boolean) + Public Interface EmberTVScraperModule_Poster - Function ScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As ModuleResult +#Region "Events" - Function Scraper(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As ModuleResult + Event ModuleSettingsChanged() - Function ScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As ModuleResult + Event ScraperSetupChanged(ByVal name As String, ByVal State As Boolean, ByVal difforder As Integer) -#End Region 'Methods + Event TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) - End Interface +#End Region 'Events + +#Region "Properties" + + ReadOnly Property IsBusy() As Boolean + + ReadOnly Property ModuleName() As String + + ReadOnly Property ModuleVersion() As String + + Property ScraperEnabled() As Boolean + +#End Region 'Properties + +#Region "Methods" + + Sub ScraperOrderChanged() + + Sub CancelAsync() + + Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String, ByRef epDet As MediaContainers.EpisodeDetails) As ModuleResult + + Function GetLangs(ByVal sMirror As String, ByRef Langs As List(Of Containers.TVLanguage)) As ModuleResult + + Function GetSingleImage(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images, ByRef Image As Images) As ModuleResult + + Sub Init(ByVal sAssemblyName As String) + + Function InjectSetupScraper() As Containers.SettingsPanel + + Function Scraper(ByRef DBTV As Structures.DBTV, ByVal ScrapeType As Enums.ScrapeType) As ModuleResult + + Function SaveImages() As ModuleResult + + Sub SaveSetupScraper(ByVal DoDispose As Boolean) + +#End Region 'Methods + + End Interface -#End Region 'Nested Interfaces +#End Region 'Nested Interfaces #Region "Nested Types" - Public Structure ModuleResult + Public Structure ModuleResult #Region "Fields" - Public breakChain As Boolean - Public Cancelled As Boolean - Public BoolProperty As Boolean + Public breakChain As Boolean + Public Cancelled As Boolean + Public BoolProperty As Boolean -#End Region 'Fields +#End Region 'Fields - End Structure + End Structure -#End Region 'Nested Types +#End Region 'Nested Types End Class \ No newline at end of file diff --git a/EmberAPI/clsAPIMediaContainers.vb b/EmberAPI/clsAPIMediaContainers.vb index 14cc876..7c721be 100644 --- a/EmberAPI/clsAPIMediaContainers.vb +++ b/EmberAPI/clsAPIMediaContainers.vb @@ -41,6 +41,7 @@ Namespace MediaContainers Private _poster As Images Private _posterurl As String Private _localfile As String + Private _playcount As String Private _fanart As Images #End Region 'Fields @@ -184,6 +185,16 @@ Namespace MediaContainers End Set End Property + _ + Public Property Playcount() As String + Get + Return Me._playcount + End Get + Set(ByVal value As String) + Me._playcount = value + End Set + End Property + _ Public ReadOnly Property CreditsSpecified() As Boolean Get @@ -288,6 +299,8 @@ Namespace MediaContainers End Set End Property + + #End Region 'Properties #Region "Methods" @@ -393,7 +406,7 @@ Namespace MediaContainers Private _runtime As String Private _trailer As String Private _playcount As String - Private _watched As String + 'Private _watched As String Private _actors As New List(Of Person) Private _thumb As New List(Of String) Private _fanart As New Fanart @@ -401,7 +414,8 @@ Namespace MediaContainers Private _ysets As New SetContainer Private _fileInfo As New MediaInfo.Fileinfo Private _lev As Integer - Private _videosource As String + Private _videosource As String + Private _TMDBID As String #End Region 'Fields #Region "Constructors" @@ -483,7 +497,8 @@ Namespace MediaContainers Set(ByVal value As String) Me.MovieID.ID = value End Set - End Property + End Property + _ Public Property IDMovieDB() As String Get @@ -494,6 +509,16 @@ Namespace MediaContainers End Set End Property + _ + Public Property TMDBID() As String + Get + Return Me._TMDBID + End Get + Set(ByVal value As String) + Me._TMDBID = value + End Set + End Property + _ Public Property IMDBID() As String Get @@ -901,22 +926,22 @@ Namespace MediaContainers End Get End Property - _ - Public Property Watched() As String - Get - Return Me._watched - End Get - Set(ByVal value As String) - Me._watched = value - End Set - End Property + ' _ + 'Public Property Watched() As String + ' Get + ' Return Me._watched + ' End Get + ' Set(ByVal value As String) + ' Me._watched = value + ' End Set + 'End Property - _ - Public ReadOnly Property WatchedSpecified() As Boolean - Get - Return Not String.IsNullOrEmpty(Me._watched) - End Get - End Property + ' _ + 'Public ReadOnly Property WatchedSpecified() As Boolean + ' Get + ' Return Not String.IsNullOrEmpty(Me._watched) + ' End Get + 'End Property _ Public Property Actors() As List(Of Person) @@ -1222,7 +1247,7 @@ Namespace MediaContainers Me._directors.Clear() Me._credits.Clear() Me._playcount = String.Empty - Me._watched = String.Empty + 'Me._watched = String.Empty Me._thumb.Clear() Me._fanart = New Fanart Me._actors.Clear() @@ -1492,7 +1517,7 @@ Namespace MediaContainers End Get End Property - _ + _ Public Property EpisodeGuideURL() As String Get Return Me._episodeguideurl diff --git a/EmberAPI/clsAPIMediaInfo.vb b/EmberAPI/clsAPIMediaInfo.vb index 5929b2a..74a67e2 100644 --- a/EmberAPI/clsAPIMediaInfo.vb +++ b/EmberAPI/clsAPIMediaInfo.vb @@ -78,6 +78,7 @@ Public Class MediaInfo 'DON'T clear it out 'miMovie.Movie.FileInfo = New MediaInfo.Fileinfo Dim tinfo = New MediaInfo.Fileinfo + Dim pExt As String = Path.GetExtension(miMovie.Filename).ToLower If Not pExt = ".rar" AndAlso (Master.CanScanDiscImage OrElse Not (pExt = ".iso" OrElse _ pExt = ".img" OrElse pExt = ".bin" OrElse pExt = ".cue" OrElse pExt = ".nrg")) Then @@ -86,6 +87,62 @@ Public Class MediaInfo MI.GetMIFromPath(tinfo, miMovie.Filename, False) If tinfo.StreamDetails.Video.Count > 0 OrElse tinfo.StreamDetails.Audio.Count > 0 OrElse tinfo.StreamDetails.Subtitle.Count > 0 Then ' overwrite only if it get something from Mediainfo + + + If Master.eSettings.LockLanguageV Then + Try + 'sets old language setting if setting is enabled (lock language) + 'First make sure that there is no completely new video source scanned of the movie --> if so (i.e. more streams) then update! + If tinfo.StreamDetails.Video.Count = miMovie.Movie.FileInfo.StreamDetails.Video.Count Then + For i = 0 To tinfo.StreamDetails.Video.Count - 1 + 'only preserve if language tag is filled --> else update! + If Not String.IsNullOrEmpty(miMovie.Movie.FileInfo.StreamDetails.Video.Item(i).LongLanguage) Then + tinfo.StreamDetails.Video.Item(i).Language = miMovie.Movie.FileInfo.StreamDetails.Video.Item(i).Language + tinfo.StreamDetails.Video.Item(i).LongLanguage = miMovie.Movie.FileInfo.StreamDetails.Video.Item(i).LongLanguage + End If + Next + End If + Catch ex As Exception + + End Try + End If + If Master.eSettings.LockLanguageA Then + Try + 'sets old language setting if setting is enabled (lock language) + 'First make sure that there is no completely new audio source scanned of the movie --> if so (i.e. more streams) then update! + If tinfo.StreamDetails.Audio.Count = miMovie.Movie.FileInfo.StreamDetails.Audio.Count Then + For i = 0 To tinfo.StreamDetails.Audio.Count - 1 + 'only preserve if language tag is filled --> else update! + If Not String.IsNullOrEmpty(miMovie.Movie.FileInfo.StreamDetails.Audio.Item(i).LongLanguage) Then + tinfo.StreamDetails.Audio.Item(i).Language = miMovie.Movie.FileInfo.StreamDetails.Audio.Item(i).Language + tinfo.StreamDetails.Audio.Item(i).LongLanguage = miMovie.Movie.FileInfo.StreamDetails.Audio.Item(i).LongLanguage + End If + Next + End If + + Catch ex As Exception + + End Try + End If + + If Master.eSettings.LockSubtitle Then + Try + 'sets old subinfo setting if setting is enabled (lock subs) + 'First make sure that there is no completely new source scanned of the movie --> if so (i.e. more streams) then update! + If tinfo.StreamDetails.Subtitle.Count = miMovie.Movie.FileInfo.StreamDetails.Subtitle.Count Then + For i = 0 To tinfo.StreamDetails.Subtitle.Count - 1 + 'only preserve if tag is filled --> else update! + If Not String.IsNullOrEmpty(miMovie.Movie.FileInfo.StreamDetails.Subtitle.Item(i).LongLanguage) Then + tinfo.StreamDetails.Subtitle.Item(i) = miMovie.Movie.FileInfo.StreamDetails.Subtitle.Item(i) + End If + Next + End If + + Catch ex As Exception + + End Try + End If + miMovie.Movie.FileInfo = tinfo End If If miMovie.Movie.FileInfo.StreamDetails.Video.Count > 0 AndAlso Master.eSettings.UseMIDuration Then @@ -101,6 +158,7 @@ Public Class MediaInfo _mi = MediaInfo.ApplyDefaults(pExt) If Not _mi Is Nothing Then miMovie.Movie.FileInfo = _mi End If + Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") End Try @@ -355,6 +413,17 @@ Public Class MediaInfo End If Return AdvancedSettings.GetSetting(String.Concat("AudioFormatConvert:", sFormat.ToLower), sFormat.ToLower) 'Return sFormat + 'cocotus, 2013/02 Fix2 for DTS Scan + ElseIf Not String.IsNullOrEmpty(sProfile) Then + If sProfile.ToUpper.Contains("MA") Then + sFormat = "dtshd_ma" 'Master Audio + ElseIf sProfile.ToUpper.Contains("HRA") Then + sFormat = "dtshd_hra" 'high resolution + ElseIf sProfile.ToLower.Contains("truehd") Then + sFormat = "truehd" 'Dolby TrueHD + End If + Return AdvancedSettings.GetSetting(String.Concat("AudioFormatConvert:", sFormat.ToLower), sFormat.ToLower) + 'cocotus end Else Return String.Empty End If @@ -450,6 +519,39 @@ Public Class MediaInfo Dim vCodec As String = String.Empty For v As Integer = 0 To VideoStreams - 1 miVideo = New Video + + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + 'map VideoBitrate from MediaInfoScan to Ember + + 'Bitrate handling: + Dim newstr As String = Me.Get_(StreamKind.Visual, v, "BitRate/String") + 'now consider bitrate number and calculate all values in KB instead of MB/KB + If newstr.ToUpper.IndexOf("K") > 0 Then + newstr = newstr.Substring(0, newstr.ToUpper.IndexOf("K")) + newstr = newstr.Replace(" ", "") + ElseIf newstr.ToUpper.IndexOf("M") > 0 Then + 'can happen if video is ripped from bluray + newstr = newstr.Substring(0, newstr.ToUpper.IndexOf("M")) + newstr = newstr.Replace(" ", "") + Try + newstr = (CDbl(newstr) * 100).ToString + Catch ex As Exception + End Try + End If + 'If no bitrate is read by MediaInfo, then set default 0 - I need value here because of comparing numbers later in HTML/Javascript template! + If newstr = "" Then + newstr = "0" + End If + 'now save cleaned bitrate + miVideo.Bitrate = newstr + + ' map multiview info (Support for 3D Movies) from MediaInfoScan to Ember (If > 1 -> 3D Movie) + miVideo.MultiView = Me.Get_(StreamKind.Visual, v, "MultiView_Count") + 'map used encoder-settings from MediaInfoScan to Ember + miVideo.EncodedSettings = Me.Get_(StreamKind.Visual, v, "Encoded_Library_Settings") + 'cocotus end + miVideo.Width = Me.Get_(StreamKind.Visual, v, "Width") miVideo.Height = Me.Get_(StreamKind.Visual, v, "Height") miVideo.Codec = ConvertVFormat(Me.Get_(StreamKind.Visual, v, "CodecID/Hint")) @@ -489,6 +591,52 @@ Public Class MediaInfo miAudio.Codec = If(IsNumeric(aCodec) OrElse String.IsNullOrEmpty(aCodec), ConvertAFormat(Me.Get_(StreamKind.Audio, a, "Format"), a_Profile), aCodec) End If miAudio.Channels = Me.Get_(StreamKind.Audio, a, "Channel(s)") + + 'cocotus 20130303 ChannelInfo fix + 'Channel(s)/sNumber might contain: "8 / 6" (7.1) so we must handle backslash and spaces --> XBMC/Ember only supports Number like 2,6,8... + If miAudio.Channels.Contains("/") Then + Dim mystring As String = "" + 'use regex to get rid of all letters(if that ever happens just in case) and also remove spaces + mystring = Text.RegularExpressions.Regex.Replace(miAudio.Channels, "[^/.0-9]", "").Trim + 'now get channel number + If mystring.Length > 0 Then + If Char.IsDigit(mystring(0)) Then + Try + 'In case of "x/y" this will return x which is highest number, i.e 8/6 -> 8 (highest number always first!) + miAudio.Channels = CStr(mystring(0)) + Catch ex As Exception + End Try + End If + End If + End If + 'cocotus end + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + 'map audio bitrate from MediaInfoScan to Ember + + 'Bitrate handling: + Dim newstr As String = Me.Get_(StreamKind.Audio, a, "BitRate/String") + 'now consider bitrate number and calculate all values in KB instead of MB/KB + If newstr.ToUpper.IndexOf("K") > 0 Then + newstr = newstr.Substring(0, newstr.ToUpper.IndexOf("K")) + newstr = newstr.Replace(" ", "") + ElseIf newstr.ToUpper.IndexOf("M") > 0 Then + 'can happen if video is ripped from bluray + newstr = newstr.Substring(0, newstr.ToUpper.IndexOf("M")) + newstr = newstr.Replace(" ", "") + Try + newstr = (CDbl(newstr) * 100).ToString + Catch ex As Exception + End Try + End If + 'If no bitrate is read by MediaInfo, then set default 0 - I need value here because of comparing numbers later in HTML/Javascript template! + If newstr = "" Then + newstr = "0" + End If + 'now save cleaned bitrate + miAudio.Bitrate = newstr + 'cocotus end + aLang = Me.Get_(StreamKind.Audio, a, "Language/String") If Not String.IsNullOrEmpty(aLang) Then miAudio.LongLanguage = aLang @@ -569,6 +717,10 @@ Public Class MediaInfo Private _language As String = String.Empty Private _longlanguage As String = String.Empty + 'cocotus, 2013/02 Added support for new MediaInfo-fields + Private _bitrate As String = String.Empty + 'cocotus end + #End Region 'Fields #Region "Properties" @@ -651,6 +803,19 @@ Public Class MediaInfo End Get End Property + 'cocotus, 2013/02 Added support for new MediaInfo-fields + 'add GETTER/Setter for new fields here.. + _ + Public Property Bitrate() As String + Get + Return Me._bitrate + End Get + Set(ByVal Value As String) + Me._bitrate = Value + End Set + End Property + 'end cocotus + #End Region 'Properties End Class @@ -842,6 +1007,12 @@ Public Class MediaInfo Private _scantype As String = String.Empty Private _width As String = String.Empty + 'cocotus, 2013/02 Added support for new MediaInfo-fields + Private _bitrate As String = String.Empty + Private _multiview As String = String.Empty + Private _encoded_Settings As String = String.Empty + 'cocotus end + #End Region 'Fields #Region "Properties" @@ -982,6 +1153,39 @@ Public Class MediaInfo End Get End Property + 'cocotus, 2013/02 Added support for new MediaInfo-fields + 'add GETTER/Setter for new fields here.. + + _ + Public Property Bitrate() As String + Get + Return Me._bitrate + End Get + Set(ByVal Value As String) + Me._bitrate = Value + End Set + End Property + + _ + Public Property MultiView() As String + Get + Return Me._multiview + End Get + Set(ByVal Value As String) + Me._multiview = Value + End Set + End Property + _ + Public Property EncodedSettings() As String + Get + Return Me._encoded_Settings + End Get + Set(ByVal Value As String) + Me._encoded_Settings = Value + End Set + End Property + 'cocotus end + #End Region 'Properties End Class diff --git a/EmberAPI/clsAPIModules.vb b/EmberAPI/clsAPIModules.vb index c59278f..5a8c3da 100644 --- a/EmberAPI/clsAPIModules.vb +++ b/EmberAPI/clsAPIModules.vb @@ -33,602 +33,733 @@ Public Class ModulesManager Public Shared VersionList As New List(Of VersionItem) Public externalProcessorModules As New List(Of _externalGenericModuleClass) - Public externalScrapersModules As New List(Of _externalScraperModuleClass) - Public externalTVScrapersModules As New List(Of _externalTVScraperModuleClass) - Public RuntimeObjects As New EmberRuntimeObjects + Public externalDataScrapersModules As New List(Of _externalScraperModuleClass_Data) + Public externalPosterScrapersModules As New List(Of _externalScraperModuleClass_Poster) + Public externalTrailerScrapersModules As New List(Of _externalScraperModuleClass_Trailer) + Public externalTVDataScrapersModules As New List(Of _externalTVScraperModuleClass_Data) + Public externalTVPosterScrapersModules As New List(Of _externalTVScraperModuleClass_Poster) + Public RuntimeObjects As New EmberRuntimeObjects - 'Singleton Instace for module manager .. allways use this one - Private Shared Singleton As ModulesManager = Nothing + 'Singleton Instace for module manager .. allways use this one + Private Shared Singleton As ModulesManager = Nothing - Private moduleLocation As String = Path.Combine(Functions.AppPath, "Modules") + Private moduleLocation As String = Path.Combine(Functions.AppPath, "Modules") -#End Region 'Fields +#End Region 'Fields #Region "Events" - Public Event GenericEvent(ByVal mType As Enums.ModuleEventType, ByRef _params As List(Of Object)) + Public Event GenericEvent(ByVal mType As Enums.ModuleEventType, ByRef _params As List(Of Object)) - ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' - Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) + ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + Event MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) - ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' - Event TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + Event TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) -#End Region 'Events +#End Region 'Events #Region "Properties" - Public Shared ReadOnly Property Instance() As ModulesManager - Get - If (Singleton Is Nothing) Then - Singleton = New ModulesManager() - End If - Return Singleton - End Get - End Property - - Public ReadOnly Property TVIsBusy() As Boolean - Get - Dim ret As Boolean = False - For Each _externaltvScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled) - ret = ret OrElse _externaltvScraperModule.ProcessorModule.IsBusy - Next - Return ret - End Get - End Property - -#End Region 'Properties + Public Shared ReadOnly Property Instance() As ModulesManager + Get + If (Singleton Is Nothing) Then + Singleton = New ModulesManager() + End If + Return Singleton + End Get + End Property + + Public ReadOnly Property TVIsBusy() As Boolean + Get + Dim ret As Boolean = False + For Each _externaltvScraperModule As _externalTVScraperModuleClass_Data In externalTVDataScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled) + ret = ret OrElse _externaltvScraperModule.ProcessorModule.IsBusy + Next + For Each _externaltvScraperModule As _externalTVScraperModuleClass_Poster In externalTVPosterScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled) + ret = ret OrElse _externaltvScraperModule.ProcessorModule.IsBusy + Next + Return ret + End Get + End Property + +#End Region 'Properties #Region "Methods" - Public Function GetScraperByIdx(ByVal idx As Integer) As _externalScraperModuleClass - Return externalScrapersModules(idx) - End Function - - Public Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As MediaContainers.EpisodeDetails - Dim epDetails As New MediaContainers.EpisodeDetails - - If Not String.IsNullOrEmpty(TVDBID) AndAlso Not String.IsNullOrEmpty(Lang) Then - Dim ret As Interfaces.ModuleResult - For Each _externaltvScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled) - ret = _externaltvScraperModule.ProcessorModule.GetSingleEpisode(ShowID, TVDBID, Season, Episode, Lang, Ordering, Options, epDetails) - If ret.breakChain Then Exit For - Next - End If - Return epDetails - End Function - - Public Sub GetVersions() - Dim dlgVersions As New dlgVersions - Dim li As ListViewItem - For Each v As VersionItem In VersionList - li = dlgVersions.lstVersions.Items.Add(v.Name) - li.SubItems.Add(v.Version) - Next - dlgVersions.ShowDialog() - End Sub - - Public Sub Handler_MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) - RaiseEvent MovieScraperEvent(eType, Parameter) - End Sub - - Public Sub Handler_TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) - RaiseEvent TVScraperEvent(eType, iProgress, Parameter) - End Sub - - Public Sub LoadAllModules() - loadModules() - loadScrapersModules() - loadTVScrapersModules() - BuildVersionList() + Public Function GetSingleEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As MediaContainers.EpisodeDetails + Dim epDetails As New MediaContainers.EpisodeDetails + + If Not String.IsNullOrEmpty(TVDBID) AndAlso Not String.IsNullOrEmpty(Lang) Then + Dim ret As Interfaces.ModuleResult + For Each _externaltvScraperModule As _externalTVScraperModuleClass_Data In externalTVDataScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) + ret = _externaltvScraperModule.ProcessorModule.GetSingleEpisode(ShowID, TVDBID, Season, Episode, Lang, Ordering, Options, epDetails) + If ret.breakChain Then Exit For + Next + End If + Return epDetails + End Function + + Public Sub GetVersions() + Dim dlgVersions As New dlgVersions + Dim li As ListViewItem + For Each v As VersionItem In VersionList + li = dlgVersions.lstVersions.Items.Add(v.Name) + li.SubItems.Add(v.Version) + Next + dlgVersions.ShowDialog() + End Sub + + Public Sub Handler_MovieScraperEvent(ByVal eType As Enums.MovieScraperEventType, ByVal Parameter As Object) + RaiseEvent MovieScraperEvent(eType, Parameter) + End Sub + + Public Sub Handler_TVScraperEvent(ByVal eType As Enums.TVScraperEventType, ByVal iProgress As Integer, ByVal Parameter As Object) + RaiseEvent TVScraperEvent(eType, iProgress, Parameter) + End Sub + + Public Sub LoadAllModules() + loadModules() + loadScrapersModules() + loadTVScrapersModules() + BuildVersionList() Master.eLang.LoadAllLanguage(Master.eSettings.Language) - End Sub - - ''' - ''' Load all Generic Modules and field in externalProcessorModules List - ''' - Public Sub loadModules(Optional ByVal modulefile As String = "*.dll") - If Directory.Exists(moduleLocation) Then - 'Assembly to load the file - Dim assembly As System.Reflection.Assembly - 'For each .dll file in the module directory - For Each file As String In System.IO.Directory.GetFiles(moduleLocation, modulefile) - Try - 'Load the assembly - assembly = System.Reflection.Assembly.LoadFile(file) - 'Loop through each of the assemeblies type - For Each fileType As Type In assembly.GetTypes - Try - 'Activate the located module - Dim t As Type = fileType.GetInterface("EmberExternalModule") - If Not t Is Nothing Then - Dim ProcessorModule As Interfaces.EmberExternalModule 'Object - ProcessorModule = CType(Activator.CreateInstance(fileType), Interfaces.EmberExternalModule) - 'Add the activated module to the arraylist - Dim _externalProcessorModule As New _externalGenericModuleClass - Dim filename As String = file - If String.IsNullOrEmpty(AssemblyList.FirstOrDefault(Function(x) x.AssemblyName = Path.GetFileNameWithoutExtension(filename)).AssemblyName) Then - AssemblyList.Add(New AssemblyListItem With {.AssemblyName = Path.GetFileNameWithoutExtension(filename), .Assembly = assembly}) - End If - _externalProcessorModule.ProcessorModule = ProcessorModule - _externalProcessorModule.AssemblyName = String.Concat(Path.GetFileNameWithoutExtension(file), ".", fileType.FullName) - _externalProcessorModule.AssemblyFileName = Path.GetFileName(file) - _externalProcessorModule.Type = ProcessorModule.ModuleType - externalProcessorModules.Add(_externalProcessorModule) + End Sub + + ''' + ''' Load all Generic Modules and field in externalProcessorModules List + ''' + Public Sub loadModules(Optional ByVal modulefile As String = "*.dll") + If Directory.Exists(moduleLocation) Then + 'Assembly to load the file + Dim assembly As System.Reflection.Assembly + 'For each .dll file in the module directory + For Each file As String In System.IO.Directory.GetFiles(moduleLocation, modulefile) + Try + 'Load the assembly + assembly = System.Reflection.Assembly.LoadFile(file) + 'Loop through each of the assemeblies type + For Each fileType As Type In assembly.GetTypes + Try + 'Activate the located module + Dim t As Type = fileType.GetInterface("EmberExternalModule") + If Not t Is Nothing Then + Dim ProcessorModule As Interfaces.EmberExternalModule 'Object + ProcessorModule = CType(Activator.CreateInstance(fileType), Interfaces.EmberExternalModule) + 'Add the activated module to the arraylist + Dim _externalProcessorModule As New _externalGenericModuleClass + Dim filename As String = file + If String.IsNullOrEmpty(AssemblyList.FirstOrDefault(Function(x) x.AssemblyName = Path.GetFileNameWithoutExtension(filename)).AssemblyName) Then + AssemblyList.Add(New AssemblyListItem With {.AssemblyName = Path.GetFileNameWithoutExtension(filename), .Assembly = assembly}) + End If + _externalProcessorModule.ProcessorModule = ProcessorModule + _externalProcessorModule.AssemblyName = String.Concat(Path.GetFileNameWithoutExtension(file), ".", fileType.FullName) + _externalProcessorModule.AssemblyFileName = Path.GetFileName(file) + _externalProcessorModule.Type = ProcessorModule.ModuleType + externalProcessorModules.Add(_externalProcessorModule) ProcessorModule.Init(_externalProcessorModule.AssemblyName, Path.GetFileNameWithoutExtension(file)) - Dim found As Boolean = False - For Each i In Master.eSettings.EmberModules - If i.AssemblyName = _externalProcessorModule.AssemblyName Then - _externalProcessorModule.ProcessorModule.Enabled = i.Enabled - found = True - End If - Next - If Not found AndAlso Path.GetFileNameWithoutExtension(file).Contains("generic.EmberCore") Then - _externalProcessorModule.ProcessorModule.Enabled = True - 'SetModuleEnable(_externalProcessorModule.AssemblyName, True) - End If - AddHandler ProcessorModule.GenericEvent, AddressOf GenericRunCallBack - 'ProcessorModule.Enabled = _externalProcessorModule.ProcessorModule.Enabled - End If - Catch ex As Exception - End Try - Next - Catch ex As Exception - End Try - Next - Dim c As Integer = 0 - For Each ext As _externalGenericModuleClass In externalProcessorModules.OrderBy(Function(x) x.ModuleOrder) - ext.ModuleOrder = c - c += 1 - Next - - End If - End Sub - - ''' - ''' Load all Scraper Modules and field in externalScrapersModules List - ''' - Public Sub loadScrapersModules(Optional ByVal modulefile As String = "*.dll") - Dim ScraperAnyEnabled As Boolean = False - Dim PostScraperAnyEnabled As Boolean = False - Dim ScraperFound As Boolean = False - If Directory.Exists(moduleLocation) Then - 'Assembly to load the file - Dim assembly As System.Reflection.Assembly - 'For each .dll file in the module directory - For Each file As String In System.IO.Directory.GetFiles(moduleLocation, modulefile) - Try - assembly = System.Reflection.Assembly.LoadFile(file) - 'Loop through each of the assemeblies type - For Each fileType As Type In assembly.GetTypes - - 'Activate the located module - Dim t As Type = fileType.GetInterface("EmberMovieScraperModule") - If Not t Is Nothing Then - Dim ProcessorModule As Interfaces.EmberMovieScraperModule - ProcessorModule = CType(Activator.CreateInstance(fileType), Interfaces.EmberMovieScraperModule) - 'Add the activated module to the arraylist - Dim _externalScraperModule As New _externalScraperModuleClass - Dim filename As String = file - If String.IsNullOrEmpty(AssemblyList.FirstOrDefault(Function(x) x.AssemblyName = Path.GetFileNameWithoutExtension(filename)).AssemblyName) Then - AssemblyList.Add(New AssemblyListItem With {.AssemblyName = Path.GetFileNameWithoutExtension(filename), .Assembly = assembly}) - End If - _externalScraperModule.ProcessorModule = ProcessorModule - _externalScraperModule.AssemblyName = String.Concat(Path.GetFileNameWithoutExtension(file), ".", fileType.FullName) - _externalScraperModule.AssemblyFileName = Path.GetFileName(file) - - externalScrapersModules.Add(_externalScraperModule) - _externalScraperModule.ProcessorModule.Init(_externalScraperModule.AssemblyName) - For Each i As _XMLEmberModuleClass In Master.eSettings.EmberModules.Where(Function(x) x.AssemblyName = _externalScraperModule.AssemblyName) - _externalScraperModule.ProcessorModule.ScraperEnabled = i.ScraperEnabled - ScraperAnyEnabled = ScraperAnyEnabled OrElse i.ScraperEnabled - PostScraperAnyEnabled = PostScraperAnyEnabled OrElse i.PostScraperEnabled - _externalScraperModule.ProcessorModule.PostScraperEnabled = i.PostScraperEnabled - PostScraperAnyEnabled = PostScraperAnyEnabled OrElse i.PostScraperEnabled - _externalScraperModule.ScraperOrder = i.ScraperOrder - _externalScraperModule.PostScraperOrder = i.PostScraperOrder - ScraperFound = True - Next - If Not ScraperFound Then - _externalScraperModule.ScraperOrder = 999 - _externalScraperModule.PostScraperOrder = 999 - End If - End If - Next - Catch ex As Exception - End Try - Next - Dim c As Integer = 0 - For Each ext As _externalScraperModuleClass In externalScrapersModules.OrderBy(Function(x) x.ScraperOrder) ' .Where(Function(x) x.ProcessorModule.ScraperEnabled) - ext.ScraperOrder = c - c += 1 - Next - c = 0 - For Each ext As _externalScraperModuleClass In externalScrapersModules.OrderBy(Function(x) x.PostScraperOrder) '.Where(Function(x) x.ProcessorModule.PostScraperEnabled) - ext.PostScraperOrder = c - c += 1 - Next - If Not ScraperAnyEnabled AndAlso Not ScraperFound Then - SetScraperEnable("scraper.EmberCore.EmberScraperModule.EmberNativeScraperModule", True) - 'SetScraperOrder("scraper.EmberCore.EmberScraperModule.EmberNativeScraperModule", 1) - End If - If Not PostScraperAnyEnabled AndAlso Not ScraperFound Then - SetPostScraperEnable("scraper.EmberCore.EmberScraperModule.EmberNativeScraperModule", True) - 'SetPostScraperOrder("scraper.EmberCore.EmberScraperModule.EmberNativeScraperModule", 1) - End If - End If - End Sub - - Public Sub loadTVScrapersModules() - Dim ScraperAnyEnabled As Boolean = False - Dim PostScraperAnyEnabled As Boolean = False - If Directory.Exists(moduleLocation) Then - 'Assembly to load the file - Dim assembly As System.Reflection.Assembly - 'For each .dll file in the module directory - For Each file As String In System.IO.Directory.GetFiles(moduleLocation, "*.dll") - Try - assembly = System.Reflection.Assembly.LoadFile(file) - 'Loop through each of the assemeblies type - - For Each fileType As Type In assembly.GetTypes - - 'Activate the located module - Dim t As Type = fileType.GetInterface("EmberTVScraperModule") - If Not t Is Nothing Then - Dim ProcessorModule As Interfaces.EmberTVScraperModule - ProcessorModule = CType(Activator.CreateInstance(fileType), Interfaces.EmberTVScraperModule) - 'Add the activated module to the arraylist - Dim _externaltvScraperModule As New _externalTVScraperModuleClass - Dim filename As String = file - If String.IsNullOrEmpty(AssemblyList.FirstOrDefault(Function(x) x.AssemblyName = Path.GetFileNameWithoutExtension(filename)).AssemblyName) Then - AssemblyList.Add(New AssemblyListItem With {.AssemblyName = Path.GetFileNameWithoutExtension(filename), .Assembly = assembly}) - End If - - _externaltvScraperModule.ProcessorModule = ProcessorModule - _externaltvScraperModule.AssemblyName = String.Concat(Path.GetFileNameWithoutExtension(file), ".", fileType.FullName) - _externaltvScraperModule.AssemblyFileName = Path.GetFileName(file) - Dim found As Boolean = False - externalTVScrapersModules.Add(_externaltvScraperModule) - _externaltvScraperModule.ProcessorModule.Init(_externaltvScraperModule.AssemblyName) - For Each i As _XMLEmberModuleClass In Master.eSettings.EmberModules.Where(Function(x) x.AssemblyName = _externaltvScraperModule.AssemblyName) - _externaltvScraperModule.ProcessorModule.ScraperEnabled = i.ScraperEnabled - ScraperAnyEnabled = ScraperAnyEnabled OrElse i.ScraperEnabled - _externaltvScraperModule.ProcessorModule.PostScraperEnabled = i.PostScraperEnabled - PostScraperAnyEnabled = PostScraperAnyEnabled OrElse i.PostScraperEnabled - _externaltvScraperModule.ScraperOrder = i.ScraperOrder - _externaltvScraperModule.PostScraperOrder = i.PostScraperOrder - found = True - Next - If Not found Then - _externaltvScraperModule.ScraperOrder = 999 - _externaltvScraperModule.PostScraperOrder = 999 - End If - AddHandler _externaltvScraperModule.ProcessorModule.TVScraperEvent, AddressOf Handler_TVScraperEvent - End If - Next - Catch ex As Exception - End Try - Next - Dim c As Integer = 0 - For Each ext As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(x) x.ProcessorModule.ScraperEnabled) - ext.ScraperOrder = c - c += 1 - Next - c = 0 - For Each ext As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(x) x.ProcessorModule.PostScraperEnabled) - ext.PostScraperOrder = c - c += 1 - Next - If Not ScraperAnyEnabled Then - SetTVScraperEnable("scraper.EmberCore.EmberScraperModule.EmberNativeTVScraperModule", True) - 'SetTVScraperOrder("scraper.EmberCore.EmberScraperModule.EmberNativeTVScraperModule", 1) - - End If - If Not PostScraperAnyEnabled Then - SetTVPostScraperEnable("scraper.EmberCore.EmberScraperModule.EmberNativeTVScraperModule", True) - 'SetTVPostScraperOrder("scraper.EmberCore.EmberScraperModule.EmberNativeTVScraperModule", 1) - End If - End If - End Sub - - Public Function MoviePostScrapeOnly(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult - Dim ret As Interfaces.ModuleResult - For Each _externalScraperModule As _externalScraperModuleClass In externalScrapersModules.Where(Function(e) e.ProcessorModule.IsPostScraper AndAlso e.ProcessorModule.PostScraperEnabled).OrderBy(Function(e) e.PostScraperOrder) - AddHandler _externalScraperModule.ProcessorModule.MovieScraperEvent, AddressOf Handler_MovieScraperEvent - Try - ret = _externalScraperModule.ProcessorModule.PostScraper(DBMovie, ScrapeType) - Catch ex As Exception - End Try - RemoveHandler _externalScraperModule.ProcessorModule.MovieScraperEvent, AddressOf Handler_MovieScraperEvent - If ret.breakChain Then Exit For - Next - Return ret - End Function - - Public Function MovieScrapeOnly(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As Boolean - Dim ret As Interfaces.ModuleResult - For Each _externalScraperModule As _externalScraperModuleClass In externalScrapersModules.Where(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled) - AddHandler _externalScraperModule.ProcessorModule.MovieScraperEvent, AddressOf Handler_MovieScraperEvent - Try - ret = _externalScraperModule.ProcessorModule.Scraper(DBMovie, ScrapeType, Options) - Catch ex As Exception - End Try - RemoveHandler _externalScraperModule.ProcessorModule.MovieScraperEvent, AddressOf Handler_MovieScraperEvent - If ret.breakChain Then Exit For - Next - Return ret.Cancelled - End Function - - Public Function RunGeneric(ByVal mType As Enums.ModuleEventType, ByRef _params As List(Of Object), Optional ByVal _refparam As Object = Nothing, Optional ByVal RunOnlyOne As Boolean = False) As Boolean - Dim ret As Interfaces.ModuleResult - Try - For Each _externalGenericModule As _externalGenericModuleClass In externalProcessorModules.Where(Function(e) e.ProcessorModule.ModuleType.Contains(mType) AndAlso e.ProcessorModule.Enabled) - Try - ret = _externalGenericModule.ProcessorModule.RunGeneric(mType, _params, _refparam) - Catch ex As Exception - End Try - If ret.breakChain OrElse RunOnlyOne Then Exit For - Next - Catch ex As Exception - Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") - End Try - Return ret.Cancelled - End Function - ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' - Public Sub SaveSettings() - Dim tmpForXML As New List(Of _XMLEmberModuleClass) - - For Each _externalProcessorModule As _externalGenericModuleClass In externalProcessorModules - Dim t As New _XMLEmberModuleClass - t.AssemblyName = _externalProcessorModule.AssemblyName - t.AssemblyFileName = _externalProcessorModule.AssemblyFileName - t.Enabled = _externalProcessorModule.ProcessorModule.Enabled - tmpForXML.Add(t) - Next - For Each _externalScraperModule As _externalScraperModuleClass In externalScrapersModules - Dim t As New _XMLEmberModuleClass - t.AssemblyName = _externalScraperModule.AssemblyName - t.AssemblyFileName = _externalScraperModule.AssemblyFileName - t.PostScraperEnabled = _externalScraperModule.ProcessorModule.PostScraperEnabled - t.ScraperEnabled = _externalScraperModule.ProcessorModule.ScraperEnabled - t.PostScraperOrder = _externalScraperModule.PostScraperOrder - t.ScraperOrder = _externalScraperModule.ScraperOrder - tmpForXML.Add(t) - Next - For Each _externalTVScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules - Dim t As New _XMLEmberModuleClass - t.AssemblyName = _externalTVScraperModule.AssemblyName - t.AssemblyFileName = _externalTVScraperModule.AssemblyFileName - t.PostScraperEnabled = _externalTVScraperModule.ProcessorModule.PostScraperEnabled - t.ScraperEnabled = _externalTVScraperModule.ProcessorModule.ScraperEnabled - t.PostScraperOrder = _externalTVScraperModule.PostScraperOrder - t.ScraperOrder = _externalTVScraperModule.ScraperOrder - tmpForXML.Add(t) - Next - Master.eSettings.EmberModules = tmpForXML - Master.eSettings.Save() - End Sub - - Public Function ScrapersCount() As Integer - Return externalScrapersModules.Count - End Function - - Public Sub SetModuleEnable(ByVal ModuleAssembly As String, ByVal value As Boolean) - For Each _externalProcessorModule As _externalGenericModuleClass In externalProcessorModules.Where(Function(p) p.AssemblyName = ModuleAssembly) - Try - _externalProcessorModule.ProcessorModule.Enabled = value - Catch ex As Exception - End Try - Next - End Sub - - Public Sub SetPostScraperEnable(ByVal ModuleAssembly As String, ByVal value As Boolean) - For Each _externalScraperModule As _externalScraperModuleClass In externalScrapersModules.Where(Function(p) p.AssemblyName = ModuleAssembly) - Try - _externalScraperModule.ProcessorModule.PostScraperEnabled = value - Catch ex As Exception - End Try - Next - End Sub - Public Sub SetScraperEnable(ByVal ModuleAssembly As String, ByVal value As Boolean) - For Each _externalScraperModule As _externalScraperModuleClass In externalScrapersModules.Where(Function(p) p.AssemblyName = ModuleAssembly) - Try - _externalScraperModule.ProcessorModule.ScraperEnabled = value - Catch ex As Exception - End Try - Next - End Sub - - Public Sub SetTVPostScraperEnable(ByVal ModuleAssembly As String, ByVal value As Boolean) - For Each _externalScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(p) p.AssemblyName = ModuleAssembly) - Try - _externalScraperModule.ProcessorModule.PostScraperEnabled = value - Catch ex As Exception - End Try - Next - End Sub - - Public Sub SetTVScraperEnable(ByVal ModuleAssembly As String, ByVal value As Boolean) - For Each _externalScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(p) p.AssemblyName = ModuleAssembly) - Try - _externalScraperModule.ProcessorModule.ScraperEnabled = value - Catch ex As Exception - End Try - Next - End Sub - - Public Sub TVCancelAsync() - For Each _externaltvScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled) - Try - _externaltvScraperModule.ProcessorModule.CancelAsync() - Catch ex As Exception - End Try - Next - End Sub - - Public Function TVGetLangs(ByVal sMirror As String) As List(Of Containers.TVLanguage) - Dim ret As Interfaces.ModuleResult - Dim Langs As New List(Of Containers.TVLanguage) - For Each _externaltvScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(e) e.ProcessorModule.IsPostScraper AndAlso e.ProcessorModule.PostScraperEnabled).OrderBy(Function(e) e.PostScraperOrder) - Try - ret = _externaltvScraperModule.ProcessorModule.GetLangs(sMirror, Langs) - Catch ex As Exception - End Try - If ret.breakChain Then Exit For - Next - Return Langs - End Function - - Public Function TVScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Boolean - Dim ret As Interfaces.ModuleResult - For Each _externaltvScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled) - Try - ret = _externaltvScraperModule.ProcessorModule.ScrapeEpisode(ShowID, ShowTitle, TVDBID, iEpisode, iSeason, Lang, Ordering, Options) - Catch ex As Exception - End Try - If ret.breakChain Then Exit For - Next - Return ret.Cancelled - End Function - - Public Function TVScrapeOnly(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As Boolean - Dim ret As Interfaces.ModuleResult - For Each _externaltvScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled) - Try - ret = _externaltvScraperModule.ProcessorModule.Scraper(ShowID, ShowTitle, TVDBID, Lang, Ordering, Options, ScrapeType, WithCurrent) - Catch ex As Exception - End Try - If ret.breakChain Then Exit For - Next - Return ret.Cancelled - End Function - - Public Function TVScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Boolean - Dim ret As Interfaces.ModuleResult - For Each _externaltvScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled) - Try - ret = _externaltvScraperModule.ProcessorModule.ScrapeSeason(ShowID, ShowTitle, TVDBID, iSeason, Lang, Ordering, Options) - Catch ex As Exception - End Try - If ret.breakChain Then Exit For - Next - Return ret.Cancelled - End Function - - Public Function TVSingleImageOnly(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Image) As Image - Dim Image As Image = Nothing - Dim ret As Interfaces.ModuleResult - For Each _externaltvScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled) - Try - ret = _externaltvScraperModule.ProcessorModule.GetSingleImage(Title, ShowID, TVDBID, Type, Season, Episode, Lang, Ordering, CurrentImage, Image) - Catch ex As Exception - End Try - If ret.breakChain Then Exit For - Next - Return Image - End Function - - Private Sub BuildVersionList() - VersionList.Clear() - VersionList.Add(New VersionItem With {.AssemblyFileName = "*EmberAPP", .Name = "Ember Application", .Version = My.Application.Info.Version.ToString()}) - VersionList.Add(New VersionItem With {.AssemblyFileName = "*EmberAPI", .Name = "Ember API", .Version = Functions.EmberAPIVersion()}) - For Each _externalScraperModule As _externalScraperModuleClass In externalScrapersModules - VersionList.Add(New VersionItem With {.Name = _externalScraperModule.ProcessorModule.ModuleName, _ - .AssemblyFileName = _externalScraperModule.AssemblyFileName, _ - .Version = _externalScraperModule.ProcessorModule.ModuleVersion}) - Next - For Each _externalModule As _externalGenericModuleClass In externalProcessorModules - VersionList.Add(New VersionItem With {.Name = _externalModule.ProcessorModule.ModuleName, _ - .AssemblyFileName = _externalModule.AssemblyFileName, _ - .Version = _externalModule.ProcessorModule.ModuleVersion}) - Next - For Each _externalTVScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules - VersionList.Add(New VersionItem With {.Name = _externalTVScraperModule.ProcessorModule.ModuleName, _ - .AssemblyFileName = _externalTVScraperModule.AssemblyFileName, _ - .Version = _externalTVScraperModule.ProcessorModule.ModuleVersion}) - Next - End Sub - - Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String) As MediaContainers.EpisodeDetails - Dim ret As Interfaces.ModuleResult - Dim epDetails As New MediaContainers.EpisodeDetails - For Each _externaltvScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(e) e.ProcessorModule.IsPostScraper AndAlso e.ProcessorModule.PostScraperEnabled).OrderBy(Function(e) e.PostScraperOrder) - Try - ret = _externaltvScraperModule.ProcessorModule.ChangeEpisode(ShowID, TVDBID, Lang, epDetails) - Catch ex As Exception - End Try - If ret.breakChain Then Exit For - Next - Return epDetails - End Function - - Private Sub GenericRunCallBack(ByVal mType As Enums.ModuleEventType, ByRef _params As List(Of Object)) - RaiseEvent GenericEvent(mType, _params) - End Sub - - Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean - Dim ret As Boolean = False - Dim sStudio As New List(Of String) - For Each _externalScraperModule As _externalScraperModuleClass In externalScrapersModules.Where(Function(e) e.ProcessorModule.IsPostScraper AndAlso e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) - Try - ret = _externalScraperModule.ProcessorModule.QueryPostScraperCapabilities(cap) - Catch ex As Exception - End Try - If ret Then Exit For - Next - Return ret - End Function - - Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie) As List(Of String) - Dim ret As Interfaces.ModuleResult - Dim sStudio As New List(Of String) - For Each _externalScraperModule As _externalScraperModuleClass In externalScrapersModules.Where(Function(e) e.ProcessorModule.IsScraper AndAlso e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) - Try - ret = _externalScraperModule.ProcessorModule.GetMovieStudio(DBMovie, sStudio) - Catch ex As Exception - End Try - If ret.breakChain Then Exit For - Next - Return sStudio - End Function - - Function ScraperDownloadTrailer(ByRef DBMovie As Structures.DBMovie) As String - Dim ret As Interfaces.ModuleResult - Dim sURL As String = String.Empty - For Each _externalScraperModule As _externalScraperModuleClass In externalScrapersModules.Where(Function(e) e.ProcessorModule.IsPostScraper AndAlso e.ProcessorModule.PostScraperEnabled).OrderBy(Function(e) e.PostScraperOrder) - Try - ret = _externalScraperModule.ProcessorModule.DownloadTrailer(DBMovie, sURL) - Catch ex As Exception - End Try - If ret.breakChain Then Exit For - Next - Return sURL - End Function - - Function ScraperSelectImageOfType(ByRef DBMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Boolean - Dim ret As Interfaces.ModuleResult - For Each _externalScraperModule As _externalScraperModuleClass In externalScrapersModules.Where(Function(e) e.ProcessorModule.IsPostScraper AndAlso e.ProcessorModule.PostScraperEnabled).OrderBy(Function(e) e.PostScraperOrder) - Try - ret = _externalScraperModule.ProcessorModule.SelectImageOfType(DBMovie, _DLType, pResults, _isEdit, preload) - Catch ex As Exception - End Try - If ret.breakChain Then Exit For - Next - Return ret.Cancelled - End Function - - Sub TVSaveImages() - Dim ret As Interfaces.ModuleResult - For Each _externaltvScraperModule As _externalTVScraperModuleClass In externalTVScrapersModules.Where(Function(e) e.ProcessorModule.IsPostScraper AndAlso e.ProcessorModule.PostScraperEnabled).OrderBy(Function(e) e.PostScraperOrder) - Try - ret = _externaltvScraperModule.ProcessorModule.SaveImages() - Catch ex As Exception - End Try - If ret.breakChain Then Exit For - Next - End Sub -#End Region 'Methods + Dim found As Boolean = False + For Each i In Master.eSettings.EmberModules + If i.AssemblyName = _externalProcessorModule.AssemblyName Then + _externalProcessorModule.ProcessorModule.Enabled = i.Enabled + found = True + End If + Next + If Not found AndAlso Path.GetFileNameWithoutExtension(file).Contains("generic.EmberCore") Then + _externalProcessorModule.ProcessorModule.Enabled = True + 'SetModuleEnable(_externalProcessorModule.AssemblyName, True) + End If + AddHandler ProcessorModule.GenericEvent, AddressOf GenericRunCallBack + 'ProcessorModule.Enabled = _externalProcessorModule.ProcessorModule.Enabled + End If + Catch ex As Exception + End Try + Next + Catch ex As Exception + End Try + Next + Dim c As Integer = 0 + For Each ext As _externalGenericModuleClass In externalProcessorModules.OrderBy(Function(x) x.ModuleOrder) + ext.ModuleOrder = c + c += 1 + Next + + End If + End Sub + + ''' + ''' Load all Scraper Modules and field in externalScrapersModules List + ''' + Public Sub loadScrapersModules(Optional ByVal modulefile As String = "*.dll") + Dim ScraperAnyEnabled As Boolean = False + Dim PostScraperAnyEnabled As Boolean = False + Dim TrailerScraperAnyEnabled As Boolean = False + Dim ScraperFound As Boolean = False + If Directory.Exists(moduleLocation) Then + 'Assembly to load the file + Dim assembly As System.Reflection.Assembly + 'For each .dll file in the module directory + For Each file As String In System.IO.Directory.GetFiles(moduleLocation, modulefile) + Try + assembly = System.Reflection.Assembly.LoadFile(file) + 'Loop through each of the assemeblies type + For Each fileType As Type In assembly.GetTypes + + 'Activate the located module + Dim t1 As Type = fileType.GetInterface("EmberMovieScraperModule_Data") + If Not t1 Is Nothing Then + Dim ProcessorModule As Interfaces.EmberMovieScraperModule_Data + ProcessorModule = CType(Activator.CreateInstance(fileType), Interfaces.EmberMovieScraperModule_Data) + 'Add the activated module to the arraylist + Dim _externalScraperModule As New _externalScraperModuleClass_Data + Dim filename As String = file + If String.IsNullOrEmpty(AssemblyList.FirstOrDefault(Function(x) x.AssemblyName = Path.GetFileNameWithoutExtension(filename)).AssemblyName) Then + AssemblyList.Add(New AssemblyListItem With {.AssemblyName = Path.GetFileNameWithoutExtension(filename), .Assembly = assembly}) + End If + _externalScraperModule.ProcessorModule = ProcessorModule + _externalScraperModule.AssemblyName = String.Concat(Path.GetFileNameWithoutExtension(file), ".", fileType.FullName) + _externalScraperModule.AssemblyFileName = Path.GetFileName(file) + + externalDataScrapersModules.Add(_externalScraperModule) + _externalScraperModule.ProcessorModule.Init(_externalScraperModule.AssemblyName) + For Each i As _XMLEmberModuleClass In Master.eSettings.EmberModules.Where(Function(x) x.AssemblyName = _externalScraperModule.AssemblyName) + _externalScraperModule.ProcessorModule.ScraperEnabled = i.ScraperEnabled + ScraperAnyEnabled = ScraperAnyEnabled OrElse i.ScraperEnabled + _externalScraperModule.ScraperOrder = i.ScraperOrder + ScraperFound = True + Next + If Not ScraperFound Then + _externalScraperModule.ScraperOrder = 999 + End If + Else + Dim t2 As Type = fileType.GetInterface("EmberMovieScraperModule_Poster") + If Not t2 Is Nothing Then + Dim ProcessorModule As Interfaces.EmberMovieScraperModule_Poster + ProcessorModule = CType(Activator.CreateInstance(fileType), Interfaces.EmberMovieScraperModule_Poster) + 'Add the activated module to the arraylist + Dim _externalScraperModule As New _externalScraperModuleClass_Poster + Dim filename As String = file + If String.IsNullOrEmpty(AssemblyList.FirstOrDefault(Function(x) x.AssemblyName = Path.GetFileNameWithoutExtension(filename)).AssemblyName) Then + AssemblyList.Add(New AssemblyListItem With {.AssemblyName = Path.GetFileNameWithoutExtension(filename), .Assembly = assembly}) + End If + _externalScraperModule.ProcessorModule = ProcessorModule + _externalScraperModule.AssemblyName = String.Concat(Path.GetFileNameWithoutExtension(file), ".", fileType.FullName) + _externalScraperModule.AssemblyFileName = Path.GetFileName(file) + + externalPosterScrapersModules.Add(_externalScraperModule) + _externalScraperModule.ProcessorModule.Init(_externalScraperModule.AssemblyName) + For Each i As _XMLEmberModuleClass In Master.eSettings.EmberModules.Where(Function(x) x.AssemblyName = _externalScraperModule.AssemblyName) + _externalScraperModule.ProcessorModule.ScraperEnabled = i.ScraperEnabled + PostScraperAnyEnabled = ScraperAnyEnabled OrElse i.ScraperEnabled + _externalScraperModule.ScraperOrder = i.ScraperOrder + ScraperFound = True + Next + If Not ScraperFound Then + _externalScraperModule.ScraperOrder = 999 + End If + Else + Dim t3 As Type = fileType.GetInterface("EmberMovieScraperModule_Trailer") + If Not t3 Is Nothing Then + Dim ProcessorModule As Interfaces.EmberMovieScraperModule_Trailer + ProcessorModule = CType(Activator.CreateInstance(fileType), Interfaces.EmberMovieScraperModule_Trailer) + 'Add the activated module to the arraylist + Dim _externalScraperModule As New _externalScraperModuleClass_Trailer + Dim filename As String = file + If String.IsNullOrEmpty(AssemblyList.FirstOrDefault(Function(x) x.AssemblyName = Path.GetFileNameWithoutExtension(filename)).AssemblyName) Then + AssemblyList.Add(New AssemblyListItem With {.AssemblyName = Path.GetFileNameWithoutExtension(filename), .Assembly = assembly}) + End If + _externalScraperModule.ProcessorModule = ProcessorModule + _externalScraperModule.AssemblyName = String.Concat(Path.GetFileNameWithoutExtension(file), ".", fileType.FullName) + _externalScraperModule.AssemblyFileName = Path.GetFileName(file) + + externalTrailerScrapersModules.Add(_externalScraperModule) + _externalScraperModule.ProcessorModule.Init(_externalScraperModule.AssemblyName) + For Each i As _XMLEmberModuleClass In Master.eSettings.EmberModules.Where(Function(x) x.AssemblyName = _externalScraperModule.AssemblyName) + _externalScraperModule.ProcessorModule.ScraperEnabled = i.ScraperEnabled + ScraperAnyEnabled = ScraperAnyEnabled OrElse i.ScraperEnabled + _externalScraperModule.ScraperOrder = i.ScraperOrder + ScraperFound = True + Next + If Not ScraperFound Then + _externalScraperModule.ScraperOrder = 999 + End If + End If + End If + End If + Next + Catch ex As Exception + End Try + Next + Dim c As Integer = 0 + For Each ext As _externalScraperModuleClass_Data In externalDataScrapersModules.OrderBy(Function(x) x.ScraperOrder) ' .Where(Function(x) x.ProcessorModule.ScraperEnabled) + ext.ScraperOrder = c + c += 1 + Next + c = 0 + For Each ext As _externalScraperModuleClass_Poster In externalPosterScrapersModules.OrderBy(Function(x) x.ScraperOrder) '.Where(Function(x) x.ProcessorModule.PostScraperEnabled) + ext.ScraperOrder = c + c += 1 + Next + c = 0 + For Each ext As _externalScraperModuleClass_Trailer In externalTrailerScrapersModules.OrderBy(Function(x) x.ScraperOrder) '.Where(Function(x) x.ProcessorModule.PostScraperEnabled) + ext.ScraperOrder = c + c += 1 + Next + 'If Not ScraperAnyEnabled AndAlso Not ScraperFound Then + ' SetScraperEnable("scraper.EmberCore.EmberScraperModule.EmberNativeScraperModule", True) + ' 'SetScraperOrder("scraper.EmberCore.EmberScraperModule.EmberNativeScraperModule", 1) + 'End If + ' If Not PostScraperAnyEnabled AndAlso Not ScraperFound Then + ' SetPostScraperEnable("scraper.EmberCore.EmberScraperModule.EmberNativeScraperModule", True) + ' 'SetPostScraperOrder("scraper.EmberCore.EmberScraperModule.EmberNativeScraperModule", 1) + ' End If + End If + End Sub + + Public Sub loadTVScrapersModules() + Dim ScraperAnyEnabled As Boolean = False + Dim PostScraperAnyEnabled As Boolean = False + If Directory.Exists(moduleLocation) Then + 'Assembly to load the file + Dim assembly As System.Reflection.Assembly + 'For each .dll file in the module directory + For Each file As String In System.IO.Directory.GetFiles(moduleLocation, "*.dll") + Try + assembly = System.Reflection.Assembly.LoadFile(file) + 'Loop through each of the assemeblies type + + For Each fileType As Type In assembly.GetTypes + + 'Activate the located module + Dim t1 As Type = fileType.GetInterface("EmberTVScraperModule_Data") + If Not t1 Is Nothing Then + Dim ProcessorModule As Interfaces.EmberTVScraperModule_Data + ProcessorModule = CType(Activator.CreateInstance(fileType), Interfaces.EmberTVScraperModule_Data) + 'Add the activated module to the arraylist + Dim _externaltvScraperModule As New _externalTVScraperModuleClass_Data + Dim filename As String = file + If String.IsNullOrEmpty(AssemblyList.FirstOrDefault(Function(x) x.AssemblyName = Path.GetFileNameWithoutExtension(filename)).AssemblyName) Then + AssemblyList.Add(New AssemblyListItem With {.AssemblyName = Path.GetFileNameWithoutExtension(filename), .Assembly = assembly}) + End If + + _externaltvScraperModule.ProcessorModule = ProcessorModule + _externaltvScraperModule.AssemblyName = String.Concat(Path.GetFileNameWithoutExtension(file), ".", fileType.FullName) + _externaltvScraperModule.AssemblyFileName = Path.GetFileName(file) + Dim ScraperFound As Boolean = False + externalTVDataScrapersModules.Add(_externaltvScraperModule) + _externaltvScraperModule.ProcessorModule.Init(_externaltvScraperModule.AssemblyName) + For Each i As _XMLEmberModuleClass In Master.eSettings.EmberModules.Where(Function(x) x.AssemblyName = _externaltvScraperModule.AssemblyName) + _externaltvScraperModule.ProcessorModule.ScraperEnabled = i.ScraperEnabled + ScraperAnyEnabled = ScraperAnyEnabled OrElse i.ScraperEnabled + _externaltvScraperModule.ScraperOrder = i.ScraperOrder + ScraperFound = True + Next + If Not ScraperFound Then + _externaltvScraperModule.ScraperOrder = 999 + End If + AddHandler _externaltvScraperModule.ProcessorModule.TVScraperEvent, AddressOf Handler_TVScraperEvent + Else + Dim t2 As Type = fileType.GetInterface("EmberTVScraperModule_Poster") + If Not t2 Is Nothing Then + Dim ProcessorModule As Interfaces.EmberTVScraperModule_Poster + ProcessorModule = CType(Activator.CreateInstance(fileType), Interfaces.EmberTVScraperModule_Poster) + 'Add the activated module to the arraylist + Dim _externaltvScraperModule As New _externalTVScraperModuleClass_Poster + Dim filename As String = file + If String.IsNullOrEmpty(AssemblyList.FirstOrDefault(Function(x) x.AssemblyName = Path.GetFileNameWithoutExtension(filename)).AssemblyName) Then + AssemblyList.Add(New AssemblyListItem With {.AssemblyName = Path.GetFileNameWithoutExtension(filename), .Assembly = assembly}) + End If + + _externaltvScraperModule.ProcessorModule = ProcessorModule + _externaltvScraperModule.AssemblyName = String.Concat(Path.GetFileNameWithoutExtension(file), ".", fileType.FullName) + _externaltvScraperModule.AssemblyFileName = Path.GetFileName(file) + Dim ScraperFound As Boolean = False + externalTVPosterScrapersModules.Add(_externaltvScraperModule) + _externaltvScraperModule.ProcessorModule.Init(_externaltvScraperModule.AssemblyName) + For Each i As _XMLEmberModuleClass In Master.eSettings.EmberModules.Where(Function(x) x.AssemblyName = _externaltvScraperModule.AssemblyName) + _externaltvScraperModule.ProcessorModule.ScraperEnabled = i.ScraperEnabled + ScraperAnyEnabled = ScraperAnyEnabled OrElse i.ScraperEnabled + _externaltvScraperModule.ScraperOrder = i.ScraperOrder + ScraperFound = True + Next + If Not ScraperFound Then + _externaltvScraperModule.ScraperOrder = 999 + End If + AddHandler _externaltvScraperModule.ProcessorModule.TVScraperEvent, AddressOf Handler_TVScraperEvent + End If + + End If + Next + Catch ex As Exception + End Try + Next + Dim c As Integer = 0 + For Each ext As _externalTVScraperModuleClass_Data In externalTVDataScrapersModules.Where(Function(x) x.ProcessorModule.ScraperEnabled) + ext.ScraperOrder = c + c += 1 + Next + c = 0 + For Each ext As _externalTVScraperModuleClass_Poster In externalTVPosterScrapersModules.Where(Function(x) x.ProcessorModule.ScraperEnabled) + ext.ScraperOrder = c + c += 1 + Next + 'If Not ScraperAnyEnabled Then + ' SetTVScraperEnable("scraper.EmberCore.EmberScraperModule.EmberNativeTVScraperModule", True) + ' 'SetTVScraperOrder("scraper.EmberCore.EmberScraperModule.EmberNativeTVScraperModule", 1) + + 'End If + 'If Not PostScraperAnyEnabled Then + ' SetTVPostScraperEnable("scraper.EmberCore.EmberScraperModule.EmberNativeTVScraperModule", True) + ' 'SetTVPostScraperOrder("scraper.EmberCore.EmberScraperModule.EmberNativeTVScraperModule", 1) + 'End If + End If + End Sub + + Public Function MoviePostScrapeOnly(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType) As Interfaces.ModuleResult + Dim ret As Interfaces.ModuleResult + For Each _externalScraperModule As _externalScraperModuleClass_Poster In externalPosterScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) + AddHandler _externalScraperModule.ProcessorModule.MovieScraperEvent, AddressOf Handler_MovieScraperEvent + Try + ret = _externalScraperModule.ProcessorModule.Scraper(DBMovie, ScrapeType) + Catch ex As Exception + End Try + RemoveHandler _externalScraperModule.ProcessorModule.MovieScraperEvent, AddressOf Handler_MovieScraperEvent + If ret.breakChain Then Exit For + Next + Return ret + End Function + + Public Function MovieScrapeOnly(ByRef DBMovie As Structures.DBMovie, ByVal ScrapeType As Enums.ScrapeType, ByVal Options As Structures.ScrapeOptions) As Boolean + Dim ret As Interfaces.ModuleResult + For Each _externalScraperModule As _externalScraperModuleClass_Data In externalDataScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) + AddHandler _externalScraperModule.ProcessorModule.MovieScraperEvent, AddressOf Handler_MovieScraperEvent + Try + ret = _externalScraperModule.ProcessorModule.Scraper(DBMovie, ScrapeType, Options) + Catch ex As Exception + End Try + RemoveHandler _externalScraperModule.ProcessorModule.MovieScraperEvent, AddressOf Handler_MovieScraperEvent + If ret.breakChain Then Exit For + Next + Return ret.Cancelled + End Function + + Public Function RunGeneric(ByVal mType As Enums.ModuleEventType, ByRef _params As List(Of Object), Optional ByVal _refparam As Object = Nothing, Optional ByVal RunOnlyOne As Boolean = False) As Boolean + Dim ret As Interfaces.ModuleResult + Try + For Each _externalGenericModule As _externalGenericModuleClass In externalProcessorModules.Where(Function(e) e.ProcessorModule.ModuleType.Contains(mType) AndAlso e.ProcessorModule.Enabled) + Try + ret = _externalGenericModule.ProcessorModule.RunGeneric(mType, _params, _refparam) + Catch ex As Exception + End Try + If ret.breakChain OrElse RunOnlyOne Then Exit For + Next + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return ret.Cancelled + End Function + ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + + Public Sub SaveSettings() + Dim tmpForXML As New List(Of _XMLEmberModuleClass) + + For Each _externalProcessorModule As _externalGenericModuleClass In externalProcessorModules + Dim t As New _XMLEmberModuleClass + t.AssemblyName = _externalProcessorModule.AssemblyName + t.AssemblyFileName = _externalProcessorModule.AssemblyFileName + t.Enabled = _externalProcessorModule.ProcessorModule.Enabled + tmpForXML.Add(t) + Next + For Each _externalScraperModule As _externalScraperModuleClass_Data In externalDataScrapersModules + Dim t As New _XMLEmberModuleClass + t.AssemblyName = _externalScraperModule.AssemblyName + t.AssemblyFileName = _externalScraperModule.AssemblyFileName + t.ScraperEnabled = _externalScraperModule.ProcessorModule.ScraperEnabled + t.ScraperOrder = _externalScraperModule.ScraperOrder + tmpForXML.Add(t) + Next + For Each _externalScraperModule As _externalScraperModuleClass_Poster In externalPosterScrapersModules + Dim t As New _XMLEmberModuleClass + t.AssemblyName = _externalScraperModule.AssemblyName + t.AssemblyFileName = _externalScraperModule.AssemblyFileName + t.ScraperEnabled = _externalScraperModule.ProcessorModule.ScraperEnabled + t.ScraperOrder = _externalScraperModule.ScraperOrder + tmpForXML.Add(t) + Next + For Each _externalScraperModule As _externalScraperModuleClass_Trailer In externalTrailerScrapersModules + Dim t As New _XMLEmberModuleClass + t.AssemblyName = _externalScraperModule.AssemblyName + t.AssemblyFileName = _externalScraperModule.AssemblyFileName + t.ScraperEnabled = _externalScraperModule.ProcessorModule.ScraperEnabled + t.ScraperOrder = _externalScraperModule.ScraperOrder + tmpForXML.Add(t) + Next + For Each _externalTVScraperModule As _externalTVScraperModuleClass_Data In externalTVDataScrapersModules + Dim t As New _XMLEmberModuleClass + t.AssemblyName = _externalTVScraperModule.AssemblyName + t.AssemblyFileName = _externalTVScraperModule.AssemblyFileName + t.ScraperEnabled = _externalTVScraperModule.ProcessorModule.ScraperEnabled + t.ScraperOrder = _externalTVScraperModule.ScraperOrder + tmpForXML.Add(t) + Next + For Each _externalTVScraperModule As _externalTVScraperModuleClass_Poster In externalTVPosterScrapersModules + Dim t As New _XMLEmberModuleClass + t.AssemblyName = _externalTVScraperModule.AssemblyName + t.AssemblyFileName = _externalTVScraperModule.AssemblyFileName + t.ScraperEnabled = _externalTVScraperModule.ProcessorModule.ScraperEnabled + t.ScraperOrder = _externalTVScraperModule.ScraperOrder + tmpForXML.Add(t) + Next + Master.eSettings.EmberModules = tmpForXML + Master.eSettings.Save() + End Sub + + Public Sub SetModuleEnable(ByVal ModuleAssembly As String, ByVal value As Boolean) + For Each _externalProcessorModule As _externalGenericModuleClass In externalProcessorModules.Where(Function(p) p.AssemblyName = ModuleAssembly) + Try + _externalProcessorModule.ProcessorModule.Enabled = value + Catch ex As Exception + End Try + Next + End Sub + + Public Sub SetTrailerScraperEnable(ByVal ModuleAssembly As String, ByVal value As Boolean) + For Each _externalScraperModule As _externalScraperModuleClass_Trailer In externalTrailerScrapersModules.Where(Function(p) p.AssemblyName = ModuleAssembly) + Try + _externalScraperModule.ProcessorModule.ScraperEnabled = value + Catch ex As Exception + End Try + Next + End Sub + + Public Sub SetPostScraperEnable(ByVal ModuleAssembly As String, ByVal value As Boolean) + For Each _externalScraperModule As _externalScraperModuleClass_Poster In externalPosterScrapersModules.Where(Function(p) p.AssemblyName = ModuleAssembly) + Try + _externalScraperModule.ProcessorModule.ScraperEnabled = value + Catch ex As Exception + End Try + Next + End Sub + + Public Sub SetScraperEnable(ByVal ModuleAssembly As String, ByVal value As Boolean) + For Each _externalScraperModule As _externalScraperModuleClass_Data In externalDataScrapersModules.Where(Function(p) p.AssemblyName = ModuleAssembly) + Try + _externalScraperModule.ProcessorModule.ScraperEnabled = value + Catch ex As Exception + End Try + Next + End Sub + + Public Sub SetTVPostScraperEnable(ByVal ModuleAssembly As String, ByVal value As Boolean) + For Each _externalScraperModule As _externalTVScraperModuleClass_Poster In externalTVPosterScrapersModules.Where(Function(p) p.AssemblyName = ModuleAssembly) + Try + _externalScraperModule.ProcessorModule.ScraperEnabled = value + Catch ex As Exception + End Try + Next + End Sub + + Public Sub SetTVScraperEnable(ByVal ModuleAssembly As String, ByVal value As Boolean) + For Each _externalScraperModule As _externalTVScraperModuleClass_Data In externalTVDataScrapersModules.Where(Function(p) p.AssemblyName = ModuleAssembly) + Try + _externalScraperModule.ProcessorModule.ScraperEnabled = value + Catch ex As Exception + End Try + Next + End Sub + + Public Sub TVCancelAsync() + For Each _externaltvScraperModule As _externalTVScraperModuleClass_Data In externalTVDataScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled) + Try + _externaltvScraperModule.ProcessorModule.CancelAsync() + Catch ex As Exception + End Try + Next + For Each _externaltvScraperModule As _externalTVScraperModuleClass_Poster In externalTVPosterScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled) + Try + _externaltvScraperModule.ProcessorModule.CancelAsync() + Catch ex As Exception + End Try + Next + End Sub + + Public Function TVGetLangs(ByVal sMirror As String) As List(Of Containers.TVLanguage) + Dim ret As Interfaces.ModuleResult + Dim Langs As New List(Of Containers.TVLanguage) + For Each _externaltvScraperModule As _externalTVScraperModuleClass_Poster In externalTVPosterScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) + Try + ret = _externaltvScraperModule.ProcessorModule.GetLangs(sMirror, Langs) + Catch ex As Exception + End Try + If ret.breakChain Then Exit For + Next + Return Langs + End Function + + Public Function TVScrapeEpisode(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iEpisode As Integer, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Boolean + Dim ret As Interfaces.ModuleResult + For Each _externaltvScraperModule As _externalTVScraperModuleClass_Data In externalTVDataScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled) + Try + ret = _externaltvScraperModule.ProcessorModule.ScrapeEpisode(ShowID, ShowTitle, TVDBID, iEpisode, iSeason, Lang, Ordering, Options) + Catch ex As Exception + End Try + If ret.breakChain Then Exit For + Next + Return ret.Cancelled + End Function + + Public Function TVScrapeOnly(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions, ByVal ScrapeType As Enums.ScrapeType, ByVal WithCurrent As Boolean) As Boolean + Dim ret As Interfaces.ModuleResult + For Each _externaltvScraperModule As _externalTVScraperModuleClass_Data In externalTVDataScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled) + Try + ret = _externaltvScraperModule.ProcessorModule.Scraper(ShowID, ShowTitle, TVDBID, Lang, Ordering, Options, ScrapeType, WithCurrent) + Catch ex As Exception + End Try + If ret.breakChain Then Exit For + Next + Return ret.Cancelled + End Function + + Public Function TVScrapeSeason(ByVal ShowID As Integer, ByVal ShowTitle As String, ByVal TVDBID As String, ByVal iSeason As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal Options As Structures.TVScrapeOptions) As Boolean + Dim ret As Interfaces.ModuleResult + For Each _externaltvScraperModule As _externalTVScraperModuleClass_Data In externalTVDataScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled) + Try + ret = _externaltvScraperModule.ProcessorModule.ScrapeSeason(ShowID, ShowTitle, TVDBID, iSeason, Lang, Ordering, Options) + Catch ex As Exception + End Try + If ret.breakChain Then Exit For + Next + Return ret.Cancelled + End Function + + Public Function TVSingleImageOnly(ByVal Title As String, ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Type As Enums.TVImageType, ByVal Season As Integer, ByVal Episode As Integer, ByVal Lang As String, ByVal Ordering As Enums.Ordering, ByVal CurrentImage As Images) As Images + Dim Image As Images = Nothing + Dim ret As Interfaces.ModuleResult + For Each _externaltvScraperModule As _externalTVScraperModuleClass_Poster In externalTVPosterScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) + Try + ret = _externaltvScraperModule.ProcessorModule.GetSingleImage(Title, ShowID, TVDBID, Type, Season, Episode, Lang, Ordering, CurrentImage, Image) + Catch ex As Exception + End Try + If ret.breakChain Then Exit For + Next + Return Image + End Function + + Private Sub BuildVersionList() + VersionList.Clear() + VersionList.Add(New VersionItem With {.AssemblyFileName = "*EmberAPP", .Name = "Ember Application", .Version = My.Application.Info.Version.ToString()}) + VersionList.Add(New VersionItem With {.AssemblyFileName = "*EmberAPI", .Name = "Ember API", .Version = Functions.EmberAPIVersion()}) + For Each _externalScraperModule As _externalScraperModuleClass_Data In externalDataScrapersModules + VersionList.Add(New VersionItem With {.Name = _externalScraperModule.ProcessorModule.ModuleName, _ + .AssemblyFileName = _externalScraperModule.AssemblyFileName, _ + .Version = _externalScraperModule.ProcessorModule.ModuleVersion}) + Next + For Each _externalScraperModule As _externalScraperModuleClass_Poster In externalPosterScrapersModules + VersionList.Add(New VersionItem With {.Name = _externalScraperModule.ProcessorModule.ModuleName, _ + .AssemblyFileName = _externalScraperModule.AssemblyFileName, _ + .Version = _externalScraperModule.ProcessorModule.ModuleVersion}) + Next + For Each _externalScraperModule As _externalScraperModuleClass_Trailer In externalTrailerScrapersModules + VersionList.Add(New VersionItem With {.Name = _externalScraperModule.ProcessorModule.ModuleName, _ + .AssemblyFileName = _externalScraperModule.AssemblyFileName, _ + .Version = _externalScraperModule.ProcessorModule.ModuleVersion}) + Next + For Each _externalScraperModule As _externalTVScraperModuleClass_Data In externalTVDataScrapersModules + VersionList.Add(New VersionItem With {.Name = _externalScraperModule.ProcessorModule.ModuleName, _ + .AssemblyFileName = _externalScraperModule.AssemblyFileName, _ + .Version = _externalScraperModule.ProcessorModule.ModuleVersion}) + Next + For Each _externalTVScraperModule As _externalTVScraperModuleClass_Poster In externalTVPosterScrapersModules + VersionList.Add(New VersionItem With {.Name = _externalTVScraperModule.ProcessorModule.ModuleName, _ + .AssemblyFileName = _externalTVScraperModule.AssemblyFileName, _ + .Version = _externalTVScraperModule.ProcessorModule.ModuleVersion}) + Next + For Each _externalModule As _externalGenericModuleClass In externalProcessorModules + VersionList.Add(New VersionItem With {.Name = _externalModule.ProcessorModule.ModuleName, _ + .AssemblyFileName = _externalModule.AssemblyFileName, _ + .Version = _externalModule.ProcessorModule.ModuleVersion}) + Next + End Sub + + Function ChangeEpisode(ByVal ShowID As Integer, ByVal TVDBID As String, ByVal Lang As String) As MediaContainers.EpisodeDetails + Dim ret As Interfaces.ModuleResult + Dim epDetails As New MediaContainers.EpisodeDetails + For Each _externaltvScraperModule As _externalTVScraperModuleClass_Poster In externalTVPosterScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) + Try + ret = _externaltvScraperModule.ProcessorModule.ChangeEpisode(ShowID, TVDBID, Lang, epDetails) + Catch ex As Exception + End Try + If ret.breakChain Then Exit For + Next + Return epDetails + End Function + + Private Sub GenericRunCallBack(ByVal mType As Enums.ModuleEventType, ByRef _params As List(Of Object)) + RaiseEvent GenericEvent(mType, _params) + End Sub + + Function QueryPostScraperCapabilities(ByVal cap As Enums.PostScraperCapabilities) As Boolean + Dim ret As Boolean = False + Dim sStudio As New List(Of String) + For Each _externalScraperModule As _externalScraperModuleClass_Poster In externalPosterScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) + Try + ret = _externalScraperModule.ProcessorModule.QueryScraperCapabilities(cap) + Catch ex As Exception + End Try + If ret Then Exit For + Next + Return ret + End Function + + Function GetMovieStudio(ByRef DBMovie As Structures.DBMovie) As List(Of String) + Dim ret As Interfaces.ModuleResult + Dim sStudio As New List(Of String) + For Each _externalScraperModule As _externalScraperModuleClass_Data In externalDataScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) + Try + ret = _externalScraperModule.ProcessorModule.GetMovieStudio(DBMovie, sStudio) + Catch ex As Exception + End Try + If ret.breakChain Then Exit For + Next + Return sStudio + End Function + + Function ScraperDownloadTrailer(ByRef DBMovie As Structures.DBMovie) As String + Dim ret As Interfaces.ModuleResult + Dim sURL As String = String.Empty + For Each _externalScraperModule As _externalScraperModuleClass_Trailer In externalTrailerScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) + Try + ret = _externalScraperModule.ProcessorModule.DownloadTrailer(DBMovie, sURL) + Catch ex As Exception + End Try + If ret.breakChain Then Exit For + Next + Return sURL + End Function + + Function ScraperSelectImageOfType(ByRef DBMovie As Structures.DBMovie, ByVal _DLType As Enums.ImageType, ByRef pResults As Containers.ImgResult, Optional ByVal _isEdit As Boolean = False, Optional ByVal preload As Boolean = False) As Boolean + Dim ret As Interfaces.ModuleResult + For Each _externalScraperModule As _externalScraperModuleClass_Poster In externalPosterScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) + Try + ret = _externalScraperModule.ProcessorModule.SelectImageOfType(DBMovie, _DLType, pResults, _isEdit, preload) + Catch ex As Exception + End Try + If ret.breakChain Then Exit For + Next + Return ret.Cancelled + End Function + + Sub TVSaveImages() + Dim ret As Interfaces.ModuleResult + For Each _externaltvScraperModule As _externalTVScraperModuleClass_Poster In externalTVPosterScrapersModules.Where(Function(e) e.ProcessorModule.ScraperEnabled).OrderBy(Function(e) e.ScraperOrder) + Try + ret = _externaltvScraperModule.ProcessorModule.SaveImages() + Catch ex As Exception + End Try + If ret.breakChain Then Exit For + Next + End Sub +#End Region 'Methods #Region "Nested Types" @@ -786,33 +917,70 @@ Public Class ModulesManager End Class - Class _externalScraperModuleClass + Class _externalScraperModuleClass_Data #Region "Fields" - Public AssemblyFileName As String - Public AssemblyName As String - Public PostScraperOrder As Integer - Public ProcessorModule As Interfaces.EmberMovieScraperModule 'Object - Public ScraperOrder As Integer + Public AssemblyFileName As String + Public AssemblyName As String + Public ProcessorModule As Interfaces.EmberMovieScraperModule_Data 'Object + Public ScraperOrder As Integer -#End Region 'Fields +#End Region 'Fields - End Class + End Class - Class _externalTVScraperModuleClass + Class _externalScraperModuleClass_Poster #Region "Fields" - Public AssemblyFileName As String - Public AssemblyName As String - Public PostScraperOrder As Integer - Public ProcessorModule As Interfaces.EmberTVScraperModule 'Object - Public ScraperOrder As Integer + Public AssemblyFileName As String + Public AssemblyName As String + Public ProcessorModule As Interfaces.EmberMovieScraperModule_Poster 'Object + Public ScraperOrder As Integer -#End Region 'Fields +#End Region 'Fields - End Class + End Class + + Class _externalScraperModuleClass_Trailer + +#Region "Fields" + + Public AssemblyFileName As String + Public AssemblyName As String + Public ProcessorModule As Interfaces.EmberMovieScraperModule_Trailer 'Object + Public ScraperOrder As Integer + +#End Region 'Fields + + End Class + + Class _externalTVScraperModuleClass_Data + +#Region "Fields" + + Public AssemblyFileName As String + Public AssemblyName As String + Public ProcessorModule As Interfaces.EmberTVScraperModule_Data 'Object + Public ScraperOrder As Integer + +#End Region 'Fields + + End Class + + Class _externalTVScraperModuleClass_Poster + +#Region "Fields" + + Public AssemblyFileName As String + Public AssemblyName As String + Public ProcessorModule As Interfaces.EmberTVScraperModule_Poster 'Object + Public ScraperOrder As Integer + +#End Region 'Fields + + End Class _ Class _XMLEmberModuleClass @@ -821,10 +989,8 @@ Public Class ModulesManager Public AssemblyFileName As String Public AssemblyName As String - Public Enabled As Boolean - Public PostScraperEnabled As Boolean - Public PostScraperOrder As Integer - Public ScraperEnabled As Boolean + Public Enabled As Boolean + Public ScraperEnabled As Boolean Public ScraperOrder As Integer #End Region 'Fields diff --git a/EmberAPI/clsAPINFO.vb b/EmberAPI/clsAPINFO.vb index fb09860..77338d6 100644 --- a/EmberAPI/clsAPINFO.vb +++ b/EmberAPI/clsAPINFO.vb @@ -62,6 +62,8 @@ Public Class NFO If Not String.IsNullOrEmpty(miVideo.Aspect) Then strOutput.AppendFormat("- {0}: {1}{2}", Master.eLang.GetString(614, "Aspect Ratio"), miVideo.Aspect, vbNewLine) If Not String.IsNullOrEmpty(miVideo.Scantype) Then strOutput.AppendFormat("- {0}: {1}{2}", Master.eLang.GetString(605, "Scan Type"), miVideo.Scantype, vbNewLine) If Not String.IsNullOrEmpty(miVideo.Codec) Then strOutput.AppendFormat("- {0}: {1}{2}", Master.eLang.GetString(604, "Codec"), miVideo.Codec, vbNewLine) + If Not String.IsNullOrEmpty(miVideo.Bitrate) Then strOutput.AppendFormat("- {0}: {1}{2}", "Bitrate", miVideo.Bitrate, vbNewLine) + If Not String.IsNullOrEmpty(miVideo.MultiView) Then strOutput.AppendFormat("- {0}: {1}{2}", "MultiView", miVideo.MultiView, vbNewLine) If Not String.IsNullOrEmpty(miVideo.Duration) Then strOutput.AppendFormat("- {0}: {1}", Master.eLang.GetString(609, "Duration"), miVideo.Duration) If Not String.IsNullOrEmpty(miVideo.LongLanguage) Then strOutput.AppendFormat("{0}- {1}: {2}", vbNewLine, Master.eLang.GetString(610, "Language"), miVideo.LongLanguage) iVS += 1 @@ -74,6 +76,7 @@ Public Class NFO strOutput.AppendFormat("{0}{1} {2}{0}", vbNewLine, Master.eLang.GetString(618, "Audio Stream"), iAS.ToString) If Not String.IsNullOrEmpty(miAudio.Codec) Then strOutput.AppendFormat("- {0}: {1}{2}", Master.eLang.GetString(604, "Codec"), miAudio.Codec, vbNewLine) If Not String.IsNullOrEmpty(miAudio.Channels) Then strOutput.AppendFormat("- {0}: {1}{2}", Master.eLang.GetString(611, "Channels"), miAudio.Channels, vbNewLine) + If Not String.IsNullOrEmpty(miAudio.Bitrate) Then strOutput.AppendFormat("- {0}: {1}{2}", "Bitrate", miAudio.Bitrate, vbNewLine) If Not String.IsNullOrEmpty(miAudio.LongLanguage) Then strOutput.AppendFormat("- {0}: {1}", Master.eLang.GetString(610, "Language"), miAudio.LongLanguage) iAS += 1 Next @@ -117,6 +120,10 @@ Public Class NFO fiaOut.Channels = String.Empty fiaOut.Language = String.Empty + 'cocotus, 2013/02 Added support for new MediaInfo-fields + fiaOut.Bitrate = String.Empty + 'cocotus end + For Each miAudio As MediaInfo.Audio In miFIA.StreamDetails.Audio If Not String.IsNullOrEmpty(miAudio.Channels) Then sinChans = NumUtils.ConvertToSingle(miAudio.Channels) @@ -125,6 +132,11 @@ Public Class NFO fiaOut.Codec = miAudio.Codec fiaOut.Channels = sinChans.ToString fiaOut.Language = miAudio.Language + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + fiaOut.Bitrate = miAudio.Bitrate + 'cocotus end + End If End If @@ -159,6 +171,11 @@ Public Class NFO fivOut.Duration = String.Empty fivOut.Scantype = String.Empty fivOut.Language = String.Empty + 'cocotus, 2013/02 Added support for new MediaInfo-fields + fivOut.Bitrate = String.Empty + fivOut.MultiView = String.Empty + fivOut.EncodedSettings = String.Empty + 'cocotus end For Each miVideo As MediaInfo.Video In miFIV.StreamDetails.Video If Not String.IsNullOrEmpty(miVideo.Width) Then @@ -172,6 +189,19 @@ Public Class NFO fivOut.Duration = miVideo.Duration fivOut.Scantype = miVideo.Scantype fivOut.Language = miVideo.Language + + 'cocotus, 2013/02 Added support for new MediaInfo-fields + + 'Multiview (3D) handling, simply map field + fivOut.MultiView = miVideo.MultiView + + 'EncodedSettings handling, simply map field + fivOut.EncodedSettings = miVideo.EncodedSettings + + 'Bitrate handling, simply map field + fivOut.Bitrate = miVideo.Bitrate + 'cocotus end + End If End If Next @@ -712,6 +742,7 @@ Public Class NFO Dim tPath As String = String.Empty Dim nPath As String = String.Empty + Dim nPathStack As String = String.Empty Dim doesExist As Boolean = False Dim fAtt As New FileAttributes Dim fAttWritable As Boolean = True @@ -782,7 +813,9 @@ Public Class NFO End If Else Dim tmpName As String = Path.GetFileNameWithoutExtension(movieToSave.Filename) + Dim tmpNameStack As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(movieToSave.Filename)) nPath = Path.Combine(Directory.GetParent(movieToSave.Filename).FullName, tmpName) + nPathStack = Path.Combine(Directory.GetParent(movieToSave.Filename).FullName, tmpNameStack) If Master.eSettings.MovieNameNFO AndAlso (Not movieToSave.isSingle OrElse Not Master.eSettings.MovieNameMultiOnly) Then If FileUtils.Common.isVideoTS(movieToSave.Filename) Then @@ -818,6 +851,40 @@ Public Class NFO End If End If + If Master.eSettings.MovieNameNFOStack AndAlso (Not movieToSave.isSingle OrElse Not Master.eSettings.MovieNameMultiOnly) Then + If FileUtils.Common.isVideoTS(movieToSave.Filename) Then + tPath = Path.Combine(Directory.GetParent(movieToSave.Filename).FullName, "video_ts.nfo") + ElseIf FileUtils.Common.isBDRip(movieToSave.Filename) Then + tPath = Path.Combine(Directory.GetParent(Directory.GetParent(movieToSave.Filename).FullName).FullName, "index.nfo") + Else + tPath = String.Concat(nPathStack, ".nfo") + End If + + If Not Master.eSettings.OverwriteNfo Then + RenameNonConfNfo(tPath, False) + End If + + doesExist = File.Exists(tPath) + If Not doesExist OrElse (Not CBool(File.GetAttributes(tPath) And FileAttributes.ReadOnly)) Then + + If doesExist Then + fAtt = File.GetAttributes(tPath) + Try + File.SetAttributes(tPath, FileAttributes.Normal) + Catch ex As Exception + fAttWritable = False + End Try + End If + + Using xmlSW As New StreamWriter(tPath) + movieToSave.NfoPath = tPath + xmlSer.Serialize(xmlSW, movieToSave.Movie) + End Using + + If doesExist And fAttWritable Then File.SetAttributes(tPath, fAtt) + End If + End If + If movieToSave.isSingle AndAlso Master.eSettings.MovieNFO Then tPath = Path.Combine(Directory.GetParent(nPath).FullName, "movie.nfo") diff --git a/EmberAPI/clsAPIScanner.vb b/EmberAPI/clsAPIScanner.vb index d0c3473..46be93b 100644 --- a/EmberAPI/clsAPIScanner.vb +++ b/EmberAPI/clsAPIScanner.vb @@ -187,6 +187,11 @@ Public Class Scanner Episode.Poster = fList.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) End If + If String.IsNullOrEmpty(Episode.Poster) AndAlso AdvancedSettings.GetBooleanSetting("YAMJEpisodePoster", False, "multi.Compatibility") Then + fName = String.Concat(tmpName, ".videoimage.jpg") + Episode.Poster = fList.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) + End If + If Master.eSettings.EpisodeDashFanart Then fName = String.Concat(tmpName, "-fanart.jpg") Episode.Fanart = fList.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) @@ -217,7 +222,9 @@ Public Class Scanner Dim currname As String = String.Empty Dim parPath As String = String.Empty Dim isYAMJ As Boolean = False + Dim isXBMC As Boolean = False Dim fList As New List(Of String) + Dim pList As New List(Of String) Try If Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isVideoTS(Movie.Filename) Then @@ -235,6 +242,22 @@ Public Class Scanner If Movie.isSingle AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName, Path.DirectorySeparatorChar, "extrathumbs", Path.DirectorySeparatorChar, "thumb1.jpg")) Then Movie.Extra = String.Concat(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName, Path.DirectorySeparatorChar, "extrathumbs", Path.DirectorySeparatorChar, "thumb1.jpg") End If + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isVideoTS(Movie.Filename) Then + isXBMC = True + + Try + fList.AddRange(Directory.GetFiles(Directory.GetParent(Movie.Filename).FullName)) + fList.AddRange(Directory.GetFiles(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName)) + Catch + End Try + + parPath = Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName.ToLower + tmpName = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).Name)).ToLower + tmpNameNoStack = Path.Combine(parPath, Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).Name).ToLower + + If Movie.isSingle AndAlso File.Exists(String.Concat(Directory.GetParent(Movie.Filename).FullName, Path.DirectorySeparatorChar, "extrathumbs", Path.DirectorySeparatorChar, "thumb1.jpg")) Then + Movie.Extra = String.Concat(Directory.GetParent(Movie.Filename).FullName, Path.DirectorySeparatorChar, "extrathumbs", Path.DirectorySeparatorChar, "thumb1.jpg") + End If ElseIf Master.eSettings.VideoTSParent AndAlso FileUtils.Common.isBDRip(Movie.Filename) Then isYAMJ = True @@ -250,39 +273,54 @@ Public Class Scanner If Movie.isSingle AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName, Path.DirectorySeparatorChar, "extrathumbs", Path.DirectorySeparatorChar, "thumb1.jpg")) Then Movie.Extra = String.Concat(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName, Path.DirectorySeparatorChar, "extrathumbs", Path.DirectorySeparatorChar, "thumb1.jpg") End If - Else - If Movie.isSingle Then - fList.AddRange(Directory.GetFiles(Directory.GetParent(Movie.Filename).FullName)) - Else - Try - Dim sName As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Movie.Filename), True) - fList.AddRange(Directory.GetFiles(Directory.GetParent(Movie.Filename).FullName, If(sName.EndsWith("*"), sName, String.Concat(sName, "*")))) - Catch - End Try - End If + ElseIf Master.eSettings.VideoTSParentXBMC AndAlso FileUtils.Common.isBDRip(Movie.Filename) Then + isXBMC = True - parPath = Directory.GetParent(Movie.Filename).FullName.ToLower - tmpName = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Movie.Filename))).ToLower - tmpNameNoStack = Path.Combine(parPath, Path.GetFileNameWithoutExtension(Movie.Filename)).ToLower + Try + fList.AddRange(Directory.GetFiles(Directory.GetParent(Movie.Filename).FullName)) + fList.AddRange(Directory.GetFiles(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName)) + fList.AddRange(Directory.GetFiles(Directory.GetParent(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName).FullName)) + Catch + End Try - If Movie.isSingle AndAlso File.Exists(String.Concat(Directory.GetParent(Movie.Filename).FullName, Path.DirectorySeparatorChar, "extrathumbs", Path.DirectorySeparatorChar, "thumb1.jpg")) Then - Movie.Extra = String.Concat(Directory.GetParent(Movie.Filename).FullName, Path.DirectorySeparatorChar, "extrathumbs", Path.DirectorySeparatorChar, "thumb1.jpg") - End If - End If + parPath = Directory.GetParent(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName).FullName.ToLower + tmpName = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Directory.GetParent(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName).Name)).ToLower + tmpNameNoStack = Path.Combine(parPath, Directory.GetParent(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName).Name).ToLower - For Each fFile As String In fList - 'fanart - If String.IsNullOrEmpty(Movie.Fanart) Then + If Movie.isSingle AndAlso File.Exists(String.Concat(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName, Path.DirectorySeparatorChar, "extrathumbs", Path.DirectorySeparatorChar, "thumb1.jpg")) Then + Movie.Extra = String.Concat(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName).FullName, Path.DirectorySeparatorChar, "extrathumbs", Path.DirectorySeparatorChar, "thumb1.jpg") + End If + Else + If Movie.isSingle Then + fList.AddRange(Directory.GetFiles(Directory.GetParent(Movie.Filename).FullName)) + Else + Try + Dim sName As String = StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Movie.Filename), True) + fList.AddRange(Directory.GetFiles(Directory.GetParent(Movie.Filename).FullName, If(sName.EndsWith("*"), sName, String.Concat(sName, "*")))) + Catch + End Try + End If + + parPath = Directory.GetParent(Movie.Filename).FullName.ToLower + tmpName = Path.Combine(parPath, StringUtils.CleanStackingMarkers(Path.GetFileNameWithoutExtension(Movie.Filename))).ToLower + tmpNameNoStack = Path.Combine(parPath, Path.GetFileNameWithoutExtension(Movie.Filename)).ToLower + + If Movie.isSingle AndAlso File.Exists(String.Concat(Directory.GetParent(Movie.Filename).FullName, Path.DirectorySeparatorChar, "extrathumbs", Path.DirectorySeparatorChar, "thumb1.jpg")) Then + Movie.Extra = String.Concat(Directory.GetParent(Movie.Filename).FullName, Path.DirectorySeparatorChar, "extrathumbs", Path.DirectorySeparatorChar, "thumb1.jpg") + End If + End If + + For Each fFile As String In fList + 'fanart + If String.IsNullOrEmpty(Movie.Fanart) Then If (Movie.isSingle AndAlso Master.eSettings.FanartJPG AndAlso fFile.ToLower = Path.Combine(parPath, "fanart.jpg")) _ - OrElse ((Not Movie.isSingle OrElse Not Master.eSettings.MovieNameMultiOnly) AndAlso _ - ((Master.eSettings.MovieNameFanartJPG AndAlso fFile.ToLower = String.Concat(tmpNameNoStack, "-fanart.jpg")) _ - OrElse (Master.eSettings.MovieNameFanartJPG AndAlso fFile.ToLower = String.Concat(tmpName, "-fanart.jpg")) _ - OrElse (Master.eSettings.MovieNameFanartJPG AndAlso (fFile.ToLower = Path.Combine(parPath, "video_ts-fanart.jpg") OrElse fFile.ToLower = Path.Combine(parPath, "index-fanart.jpg")))) _ + OrElse (Movie.isSingle AndAlso isXBMC AndAlso fFile.ToLower = Path.Combine(parPath, "fanart.jpg")) _ + OrElse ((Not Movie.isSingle OrElse Not Master.eSettings.MovieNameMultiOnly) AndAlso ((Master.eSettings.MovieNameFanartJPG AndAlso fFile.ToLower = String.Concat(tmpNameNoStack, "-fanart.jpg")) _ + OrElse (Master.eSettings.MovieNameFanartJPG AndAlso Not isXBMC AndAlso fFile.ToLower = String.Concat(tmpName, "-fanart.jpg")) _ + OrElse (Master.eSettings.MovieNameFanartJPG AndAlso Not isXBMC AndAlso ((fFile.ToLower = Path.Combine(parPath, "fanart.jpg") AndAlso Movie.Filename.ToLower = String.Concat(parPath, "\", "video_ts.ifo") OrElse Movie.Filename.ToLower = String.Concat(parPath, "\", "00000.m2ts")) OrElse fFile.ToLower = Path.Combine(parPath, "video_ts-fanart.jpg") OrElse fFile.ToLower = Path.Combine(parPath, "index-fanart.jpg")))) _ OrElse (Master.eSettings.MovieNameDotFanartJPG AndAlso (fFile.ToLower = Path.Combine(parPath, "video_ts.fanart.jpg") OrElse fFile.ToLower = Path.Combine(parPath, "index.fanart.jpg")))) _ - OrElse ((Not Movie.isSingle OrElse isYAMJ OrElse Not Master.eSettings.MovieNameMultiOnly) AndAlso _ - (((Master.eSettings.MovieNameDotFanartJPG OrElse isYAMJ) AndAlso fFile.ToLower = String.Concat(tmpName, ".fanart.jpg")) _ + OrElse ((Not Movie.isSingle OrElse isYAMJ OrElse Not Master.eSettings.MovieNameMultiOnly) AndAlso (((Master.eSettings.MovieNameDotFanartJPG OrElse isYAMJ) AndAlso fFile.ToLower = String.Concat(tmpName, ".fanart.jpg")) _ OrElse ((Master.eSettings.MovieNameDotFanartJPG OrElse isYAMJ) AndAlso fFile.ToLower = String.Concat(tmpNameNoStack, ".fanart.jpg")))) Then - Movie.Fanart = fFile Continue For End If @@ -295,21 +333,19 @@ Public Class Scanner OrElse (Master.eSettings.MovieJPG AndAlso fFile.ToLower = Path.Combine(parPath, "movie.jpg")) _ OrElse (Master.eSettings.PosterJPG AndAlso fFile.ToLower = Path.Combine(parPath, "poster.jpg")) _ OrElse (Master.eSettings.FolderJPG AndAlso fFile.ToLower = Path.Combine(parPath, "folder.jpg"))) _ - OrElse ((Not Movie.isSingle OrElse Not Master.eSettings.MovieNameMultiOnly) AndAlso _ - ((Master.eSettings.MovieNameTBN AndAlso fFile.ToLower = Path.Combine(parPath, "video_ts.tbn")) _ + OrElse ((Not Movie.isSingle OrElse Not Master.eSettings.MovieNameMultiOnly) AndAlso ((Master.eSettings.MovieNameTBN AndAlso fFile.ToLower = Path.Combine(parPath, "video_ts.tbn")) _ OrElse (Master.eSettings.MovieNameJPG AndAlso fFile.ToLower = Path.Combine(parPath, "video_ts.jpg")) _ - OrElse (Master.eSettings.MovieNameDashPosterJPG AndAlso fFile.ToLower = Path.Combine(parPath, "video_ts-poster.jpg"))) _ - OrElse ((Not Movie.isSingle OrElse Not Master.eSettings.MovieNameMultiOnly) AndAlso _ - ((Master.eSettings.MovieNameTBN AndAlso fFile.ToLower = Path.Combine(parPath, "index.tbn")) _ + OrElse (Master.eSettings.MovieNameDashPosterJPG AndAlso Not isXBMC AndAlso (fFile.ToLower = Path.Combine(parPath, "video_ts-poster.jpg") OrElse (fFile.ToLower = Path.Combine(parPath, "poster.jpg") AndAlso Movie.Filename.ToLower = String.Concat(parPath, "\", "video_ts.ifo") OrElse Movie.Filename.ToLower = String.Concat(parPath, "\", "00000.m2ts"))))) _ + OrElse ((Not Movie.isSingle OrElse Not Master.eSettings.MovieNameMultiOnly) AndAlso ((Master.eSettings.MovieNameTBN AndAlso fFile.ToLower = Path.Combine(parPath, "index.tbn")) _ OrElse (Master.eSettings.MovieNameJPG AndAlso fFile.ToLower = Path.Combine(parPath, "index.jpg")) _ - OrElse (Master.eSettings.MovieNameDashPosterJPG AndAlso fFile.ToLower = Path.Combine(parPath, "index-poster.jpg"))))) _ - OrElse ((Not Movie.isSingle OrElse isYAMJ OrElse Not Master.eSettings.MovieNameMultiOnly) AndAlso _ - (((Master.eSettings.MovieNameTBN OrElse isYAMJ) AndAlso fFile.ToLower = String.Concat(tmpNameNoStack, ".tbn")) _ + OrElse (Master.eSettings.MovieNameDashPosterJPG AndAlso Not isXBMC AndAlso fFile.ToLower = Path.Combine(parPath, "index-poster.jpg"))))) _ + OrElse ((Not Movie.isSingle OrElse isYAMJ OrElse Not Master.eSettings.MovieNameMultiOnly) AndAlso (((Master.eSettings.MovieNameTBN OrElse isYAMJ) AndAlso fFile.ToLower = String.Concat(tmpNameNoStack, ".tbn")) _ OrElse ((Master.eSettings.MovieNameTBN OrElse isYAMJ) AndAlso fFile.ToLower = String.Concat(tmpName, ".tbn")) _ OrElse ((Master.eSettings.MovieNameJPG OrElse isYAMJ) AndAlso fFile.ToLower = String.Concat(tmpNameNoStack, ".jpg")) _ OrElse ((Master.eSettings.MovieNameJPG OrElse isYAMJ) AndAlso fFile.ToLower = String.Concat(tmpName, ".jpg")) _ - OrElse ((Master.eSettings.MovieNameDashPosterJPG OrElse isYAMJ) AndAlso fFile.ToLower = String.Concat(tmpNameNoStack, "-poster.jpg")) _ - OrElse ((Master.eSettings.MovieNameDashPosterJPG OrElse isYAMJ) AndAlso fFile.ToLower = String.Concat(tmpName, "-poster.jpg")))) Then + OrElse ((Master.eSettings.MovieNameDashPosterJPG AndAlso Not isXBMC) AndAlso fFile.ToLower = String.Concat(tmpNameNoStack, "-poster.jpg")) _ + OrElse ((Master.eSettings.MovieNameDashPosterJPG AndAlso Not isXBMC) AndAlso fFile.ToLower = String.Concat(tmpName, "-poster.jpg")) _ + OrElse ((Master.eSettings.MovieNameDashPosterJPG AndAlso isXBMC) AndAlso fFile.ToLower = Path.Combine(parPath, "poster.jpg")))) Then Movie.Poster = fFile Continue For End If @@ -318,16 +354,19 @@ Public Class Scanner 'nfo If String.IsNullOrEmpty(Movie.Nfo) Then If (Movie.isSingle AndAlso Master.eSettings.MovieNFO AndAlso fFile.ToLower = Path.Combine(parPath, "movie.nfo")) _ + OrElse (Movie.isSingle AndAlso isXBMC AndAlso fFile.ToLower = String.Concat(Directory.GetParent(Movie.Filename).FullName.ToLower, Path.DirectorySeparatorChar, "video_ts.nfo")) _ + OrElse (Movie.isSingle AndAlso isXBMC AndAlso fFile.ToLower = String.Concat(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName.ToLower).FullName.ToLower, Path.DirectorySeparatorChar, "index.nfo")) _ OrElse ((Not Movie.isSingle OrElse isYAMJ OrElse Not Master.eSettings.MovieNameMultiOnly) AndAlso _ - (((Master.eSettings.MovieNameNFO OrElse isYAMJ) AndAlso (fFile.ToLower = String.Concat(tmpNameNoStack, ".nfo") OrElse _ - fFile.ToLower = String.Concat(tmpName, ".nfo") OrElse _ - fFile.ToLower = Path.Combine(parPath, "video_ts.nfo") OrElse _ - fFile.ToLower = Path.Combine(parPath, "index.nfo"))))) Then + (((Master.eSettings.MovieNameNFO OrElse Master.eSettings.MovieNameNFOStack OrElse isYAMJ) AndAlso Not isXBMC AndAlso (fFile.ToLower = String.Concat(tmpNameNoStack, ".nfo") OrElse _ + fFile.ToLower = String.Concat(tmpName, ".nfo") OrElse _ + fFile.ToLower = Path.Combine(parPath, "video_ts.nfo") OrElse _ + fFile.ToLower = Path.Combine(parPath, "index.nfo"))))) Then Movie.Nfo = fFile Continue For End If End If + 'subs If String.IsNullOrEmpty(Movie.Subs) Then If Regex.IsMatch(fFile.ToLower, String.Concat("^", Regex.Escape(tmpNameNoStack), AdvancedSettings.GetSetting("SubtitleExtension", ".*\.(sst|srt|sub|ssa|aqt|smi|sami|jss|mpl|rt|idx|ass)$")), RegexOptions.IgnoreCase) OrElse _ Regex.IsMatch(fFile.ToLower, String.Concat("^", Regex.Escape(tmpName), AdvancedSettings.GetSetting("SubtitleExtension", ".*\.(sst|srt|sub|ssa|aqt|smi|sami|jss|mpl|rt|idx|ass)$")), RegexOptions.IgnoreCase) Then @@ -336,10 +375,17 @@ Public Class Scanner End If End If + 'trailer If String.IsNullOrEmpty(Movie.Trailer) Then For Each t As String In Master.eSettings.ValidExts Select Case True - Case fFile.ToLower = String.Concat(tmpNameNoStack, "-trailer", t.ToLower) + Case fFile.ToLower = String.Concat(Directory.GetParent(Movie.Filename).FullName.ToLower, Path.DirectorySeparatorChar, "video_ts-trailer", t.ToLower) + Movie.Trailer = fFile + Exit For + Case fFile.ToLower = String.Concat(Directory.GetParent(Directory.GetParent(Movie.Filename).FullName.ToLower).FullName.ToLower, Path.DirectorySeparatorChar, "index-trailer", t.ToLower) + Movie.Trailer = fFile + Exit For + Case Not Master.eSettings.MovieNameNFOStack AndAlso fFile.ToLower = String.Concat(tmpNameNoStack, "-trailer", t.ToLower) Movie.Trailer = fFile Exit For Case fFile.ToLower = String.Concat(tmpName, "-trailer", t.ToLower) @@ -368,7 +414,7 @@ Public Class Scanner End If Next - Catch ex As Exception + Catch ex As Exception Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") End Try @@ -426,11 +472,55 @@ Public Class Scanner End If End If + If AdvancedSettings.GetBooleanSetting("YAMJTVImageNaming", False, "multi.Compatibility") Then + + Try + lFiles.AddRange(Directory.GetFiles(ShowPath, "*.jpg")) + Catch + End Try + + If String.IsNullOrEmpty(TVDB.SeasonPosterPath) AndAlso AdvancedSettings.GetBooleanSetting("YAMJSeasonPoster", False, "multi.Compatibility") Then + Dim tPath As String = String.Empty + Dim epPath As String = String.Empty + If Not String.IsNullOrEmpty(TVDB.Filename) AndAlso Not Path.GetFileNameWithoutExtension(TVDB.Filename).ToLower = "file" Then + epPath = TVDB.Filename + End If + If String.IsNullOrEmpty(epPath) Then + Dim dtEpisodes As New DataTable + Master.DB.FillDataTable(dtEpisodes, String.Concat("SELECT * FROM TVEps INNER JOIN TVEpPaths ON (TVEpPaths.ID = TVEpPathid) WHERE TVShowID = ", TVDB.ShowID, " AND Season = ", TVDB.TVEp.Season, " ORDER BY Episode;")) + If dtEpisodes.Rows.Count > 0 Then + epPath = dtEpisodes.Rows(0).Item("TVEpPath").ToString + End If + End If + fName = Path.Combine(Path.GetDirectoryName(epPath), String.Concat(Path.GetFileNameWithoutExtension(epPath), ".jpg")) + TVDB.SeasonPosterPath = lFiles.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) + End If + + If String.IsNullOrEmpty(TVDB.SeasonFanartPath) AndAlso AdvancedSettings.GetBooleanSetting("YAMJSeasonFanart", False, "multi.Compatibility") Then + Dim tPath As String = String.Empty + Dim epPath As String = String.Empty + If Not String.IsNullOrEmpty(TVDB.Filename) AndAlso Not Path.GetFileNameWithoutExtension(TVDB.Filename).ToLower = "file" Then + epPath = TVDB.Filename + End If + If String.IsNullOrEmpty(epPath) Then + Dim dtEpisodes As New DataTable + Master.DB.FillDataTable(dtEpisodes, String.Concat("SELECT * FROM TVEps INNER JOIN TVEpPaths ON (TVEpPaths.ID = TVEpPathid) WHERE TVShowID = ", TVDB.ShowID, " AND Season = ", TVDB.TVEp.Season, " ORDER BY Episode;")) + If dtEpisodes.Rows.Count > 0 Then + epPath = dtEpisodes.Rows(0).Item("TVEpPath").ToString + End If + End If + fName = Path.Combine(Path.GetDirectoryName(epPath), String.Concat(Path.GetFileNameWithoutExtension(epPath), ".fanart.jpg")) + TVDB.SeasonFanartPath = lFiles.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) + End If + End If + If bInside AndAlso ((Master.eSettings.SeasonPosterTBN OrElse Master.eSettings.SeasonPosterJPG OrElse _ Master.eSettings.SeasonNameTBN OrElse Master.eSettings.SeasonNameJPG OrElse _ - Master.eSettings.SeasonFolderJPG AndAlso String.IsNullOrEmpty(TVDB.SeasonPosterPath)) OrElse _ + Master.eSettings.SeasonFolderJPG OrElse AdvancedSettings.GetBooleanSetting("YAMJSeasonPoster", False, "multi.Compatibility") AndAlso _ + String.IsNullOrEmpty(TVDB.SeasonPosterPath)) OrElse _ (Master.eSettings.SeasonFanartJPG OrElse Master.eSettings.SeasonDashFanart OrElse _ - Master.eSettings.SeasonDotFanart AndAlso String.IsNullOrEmpty(TVDB.SeasonFanartPath))) Then + Master.eSettings.SeasonDotFanart OrElse AdvancedSettings.GetBooleanSetting("YAMJSeasonFanart", False, "multi.Compatibility") AndAlso _ + String.IsNullOrEmpty(TVDB.SeasonFanartPath))) Then SeasonPath = Directory.GetParent(TVDB.Filename).FullName @@ -467,6 +557,23 @@ Public Class Scanner fName = Path.Combine(SeasonPath, "folder.jpg") TVDB.SeasonPosterPath = lFiles.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) End If + + If String.IsNullOrEmpty(TVDB.SeasonPosterPath) AndAlso AdvancedSettings.GetBooleanSetting("YAMJSeasonPoster", False, "multi.Compatibility") Then + Dim tPath As String = String.Empty + Dim epPath As String = String.Empty + If Not String.IsNullOrEmpty(TVDB.Filename) AndAlso Not Path.GetFileNameWithoutExtension(TVDB.Filename).ToLower = "file" Then + epPath = TVDB.Filename + End If + If String.IsNullOrEmpty(epPath) Then + Dim dtEpisodes As New DataTable + Master.DB.FillDataTable(dtEpisodes, String.Concat("SELECT * FROM TVEps INNER JOIN TVEpPaths ON (TVEpPaths.ID = TVEpPathid) WHERE TVShowID = ", TVDB.ShowID, " AND Season = ", TVDB.TVEp.Season, " ORDER BY Episode;")) + If dtEpisodes.Rows.Count > 0 Then + epPath = dtEpisodes.Rows(0).Item("TVEpPath").ToString + End If + End If + fName = Path.Combine(Path.GetDirectoryName(epPath), String.Concat(Path.GetFileNameWithoutExtension(epPath), ".jpg")) + TVDB.SeasonPosterPath = lFiles.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) + End If End If If String.IsNullOrEmpty(TVDB.SeasonFanartPath) Then @@ -484,6 +591,23 @@ Public Class Scanner fName = Path.Combine(SeasonPath, String.Concat(Directory.GetParent(TVDB.Filename).Name, ".fanart.jpg")) TVDB.SeasonFanartPath = lFiles.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) End If + + If String.IsNullOrEmpty(TVDB.SeasonFanartPath) AndAlso AdvancedSettings.GetBooleanSetting("YAMJSeasonFanart", False, "multi.Compatibility") Then + Dim tPath As String = String.Empty + Dim epPath As String = String.Empty + If Not String.IsNullOrEmpty(TVDB.Filename) AndAlso Not Path.GetFileNameWithoutExtension(TVDB.Filename).ToLower = "file" Then + epPath = TVDB.Filename + End If + If String.IsNullOrEmpty(epPath) Then + Dim dtEpisodes As New DataTable + Master.DB.FillDataTable(dtEpisodes, String.Concat("SELECT * FROM TVEps INNER JOIN TVEpPaths ON (TVEpPaths.ID = TVEpPathid) WHERE TVShowID = ", TVDB.ShowID, " AND Season = ", TVDB.TVEp.Season, " ORDER BY Episode;")) + If dtEpisodes.Rows.Count > 0 Then + epPath = dtEpisodes.Rows(0).Item("TVEpPath").ToString + End If + End If + fName = Path.Combine(Path.GetDirectoryName(epPath), String.Concat(Path.GetFileNameWithoutExtension(epPath), ".fanart.jpg")) + TVDB.SeasonFanartPath = lFiles.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) + End If End If Else @@ -516,10 +640,10 @@ Public Class Scanner End Sub ''' - ''' Check if a directory contains supporting files (nfo, poster) + ''' Check if a directory contains supporting files (nfo, poster, fanart) ''' ''' TVShowContainer object. - Public Sub GetShowFolderContents(ByRef tShow As TVShowContainer) + Public Sub GetShowFolderContents(ByRef tShow As TVShowContainer, Optional ByVal ID As Long = 0) Dim parPath As String = tShow.ShowPath Dim fList As New List(Of String) Dim fName As String = String.Empty @@ -585,6 +709,72 @@ Public Class Scanner tShow.Fanart = fList.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) End If + If String.IsNullOrEmpty(tShow.Poster) AndAlso AdvancedSettings.GetBooleanSetting("YAMJShowPoster", False, "multi.Compatibility") Then + Dim tPath As String = String.Empty + Dim seasonPath As String = String.Empty + If tShow.Episodes.Count > 0 Then + seasonPath = Directory.GetParent(tShow.Episodes.FirstOrDefault.Filename).FullName + End If + If String.IsNullOrEmpty(seasonPath) Then + Dim dtSeasons As New DataTable + Master.DB.FillDataTable(dtSeasons, String.Concat("SELECT * FROM TVEps INNER JOIN TVEpPaths ON (TVEpPaths.ID = TVEpPathid) WHERE TVShowID = ", ID, " ORDER BY Season, Episode;")) + If dtSeasons.Rows.Count > 0 Then + seasonPath = Functions.GetSeasonDirectoryFromShowPath(parPath, Convert.ToInt32(dtSeasons.Rows(0).Item("Season").ToString)) + End If + End If + Try + fList.AddRange(Directory.GetFiles(seasonPath)) + Catch + End Try + tPath = Path.Combine(parPath, seasonPath) + fName = Path.Combine(tPath, String.Concat("Set_", FileUtils.Common.GetDirectory(parPath), "_1.jpg")) + tShow.Poster = fList.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) + End If + + If String.IsNullOrEmpty(tShow.AllSeasonPoster) AndAlso AdvancedSettings.GetBooleanSetting("YAMJAllSeasonPoster", False, "multi.Compatibility") Then + Dim tPath As String = String.Empty + Dim seasonPath As String = String.Empty + If tShow.Episodes.Count > 0 Then + seasonPath = Directory.GetParent(tShow.Episodes.FirstOrDefault.Filename).FullName + End If + If String.IsNullOrEmpty(seasonPath) Then + Dim dtSeasons As New DataTable + Master.DB.FillDataTable(dtSeasons, String.Concat("SELECT * FROM TVEps INNER JOIN TVEpPaths ON (TVEpPaths.ID = TVEpPathid) WHERE TVShowID = ", ID, " ORDER BY Season, Episode;")) + If dtSeasons.Rows.Count > 0 Then + seasonPath = Functions.GetSeasonDirectoryFromShowPath(parPath, Convert.ToInt32(dtSeasons.Rows(0).Item("Season").ToString)) + End If + End If + Try + fList.AddRange(Directory.GetFiles(seasonPath)) + Catch + End Try + tPath = Path.Combine(parPath, seasonPath) + fName = Path.Combine(tPath, String.Concat("Set_", FileUtils.Common.GetDirectory(parPath), "_1.banner.jpg")) + tShow.AllSeasonPoster = fList.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) + End If + + If String.IsNullOrEmpty(tShow.Fanart) AndAlso AdvancedSettings.GetBooleanSetting("YAMJShowFanart", False, "multi.Compatibility") Then + Dim tPath As String = String.Empty + Dim seasonPath As String = String.Empty + If tShow.Episodes.Count > 0 Then + seasonPath = Directory.GetParent(tShow.Episodes.FirstOrDefault.Filename).FullName + End If + If String.IsNullOrEmpty(seasonPath) Then + Dim dtSeasons As New DataTable + Master.DB.FillDataTable(dtSeasons, String.Concat("SELECT * FROM TVEps INNER JOIN TVEpPaths ON (TVEpPaths.ID = TVEpPathid) WHERE TVShowID = ", ID, " ORDER BY Season, Episode;")) + If dtSeasons.Rows.Count > 0 Then + seasonPath = Functions.GetSeasonDirectoryFromShowPath(parPath, Convert.ToInt32(dtSeasons.Rows(0).Item("Season").ToString)) + End If + End If + Try + fList.AddRange(Directory.GetFiles(seasonPath)) + Catch + End Try + tPath = Path.Combine(parPath, seasonPath) + fName = Path.Combine(tPath, String.Concat("Set_", FileUtils.Common.GetDirectory(parPath), "_1.fanart.jpg")) + tShow.Fanart = fList.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) + End If + fName = Path.Combine(parPath, "tvshow.nfo") tShow.Nfo = fList.FirstOrDefault(Function(s) s.ToLower = fName.ToLower) diff --git a/EmberAPI/clsAPISettings.vb b/EmberAPI/clsAPISettings.vb index 58d5d21..f6493ed 100644 --- a/EmberAPI/clsAPISettings.vb +++ b/EmberAPI/clsAPISettings.vb @@ -86,6 +86,7 @@ Public Class Settings Private _episodejpg As Boolean Private _episodedashthumbjpg As Boolean Private _episodenfocol As Boolean + Private _episodewatchedcol As Boolean Private _episodepostercol As Boolean Private _episodetbn As Boolean Private _eplockplot As Boolean @@ -147,6 +148,11 @@ Public Class Settings Private _lockoutline As Boolean Private _lockplot As Boolean Private _lockrating As Boolean + Private _locklanguageV As Boolean + Private _locklanguageA As Boolean + Private _lockMPAA As Boolean + Private _lockSubtitle As Boolean + Private _useMPAAForFSK As Boolean Private _lockstudio As Boolean Private _locktagline As Boolean Private _locktitle As Boolean @@ -172,6 +178,7 @@ Public Class Settings Private _movienamedashposterjpg As Boolean Private _movienamemultionly As Boolean Private _movienamenfo As Boolean + Private _movienamenfostack As Boolean Private _movienametbn As Boolean Private _movienfo As Boolean Private _movieposterCol As Boolean @@ -179,6 +186,7 @@ Public Class Settings Private _movietbn As Boolean Private _movietheme As String Private _movietrailerCol As Boolean + Private _moviewatchedCol As Boolean Private _nodisplayfanart As Boolean Private _nodisplayposter As Boolean Private _noepfilters As Boolean @@ -230,6 +238,7 @@ Public Class Settings Private _scmainstate As Integer Private _scshowstate As Integer Private _scseasonstate As Integer + Private _scraperactorthumbs As Boolean Private _scraperepactors As Boolean Private _scraperepaired As Boolean Private _scraperepcredits As Boolean @@ -339,12 +348,25 @@ Public Class Settings Private _validexts As List(Of String) Private _version As String Private _videotsparent As Boolean + Private _videotsparentxbmc As Boolean Private _windowloc As New Point Private _windowsize As New Size Private _windowstate As FormWindowState Private _yamjsetscompatible As Boolean Private _username As String Private _password As String + ' cocotus 2013/02 Trakt.tv syncing + 'Adding Settings + Private _traktuser As String + Private _traktpassword As String + Private _usetrakt As Boolean + 'cocotus end + + 'cocotus 20130303 Special DateAddvalue + 'Adding Settings + Private _usespecialdateadd As Boolean + 'cocotus end + #End Region 'Fields @@ -847,6 +869,15 @@ Public Class Settings End Set End Property + Public Property EpisodeWatchedCol() As Boolean + Get + Return Me._episodewatchedcol + End Get + Set(ByVal value As Boolean) + Me._episodewatchedcol = value + End Set + End Property + Public Property EpisodePosterCol() As Boolean Get Return Me._episodepostercol @@ -1405,6 +1436,46 @@ Public Class Settings End Set End Property + Public Property LockLanguageV() As Boolean + Get + Return Me._locklanguageV + End Get + Set(ByVal value As Boolean) + Me._locklanguageV = value + End Set + End Property + Public Property LockLanguageA() As Boolean + Get + Return Me._locklanguageA + End Get + Set(ByVal value As Boolean) + Me._locklanguageA = value + End Set + End Property + Public Property LockMPAA() As Boolean + Get + Return Me._lockMPAA + End Get + Set(ByVal value As Boolean) + Me._lockMPAA = value + End Set + End Property + Public Property LockSubtitle() As Boolean + Get + Return Me._lockSubtitle + End Get + Set(ByVal value As Boolean) + Me._lockSubtitle = value + End Set + End Property + Public Property UseMPAAForFSK() As Boolean + Get + Return Me._useMPAAForFSK + End Get + Set(ByVal value As Boolean) + Me._useMPAAForFSK = value + End Set + End Property Public Property LockStudio() As Boolean Get Return Me._lockstudio @@ -1630,6 +1701,15 @@ Public Class Settings End Set End Property + Public Property MovieNameNFOStack() As Boolean + Get + Return Me._movienamenfostack + End Get + Set(ByVal value As Boolean) + Me._movienamenfostack = value + End Set + End Property + Public Property MovieNameTBN() As Boolean Get Return Me._movienametbn @@ -1693,6 +1773,15 @@ Public Class Settings End Set End Property + Public Property MovieWatchedCol() As Boolean + Get + Return Me._moviewatchedCol + End Get + Set(ByVal value As Boolean) + Me._moviewatchedCol = value + End Set + End Property + Public Property NoDisplayFanart() As Boolean Get Return Me._nodisplayfanart @@ -2215,6 +2304,15 @@ Public Class Settings End Set End Property + Public Property ScraperActorThumbs() As Boolean + Get + Return Me._scraperactorthumbs + End Get + Set(ByVal value As Boolean) + Me._scraperactorthumbs = value + End Set + End Property + Public Property ScraperEpActors() As Boolean Get Return Me._scraperepactors @@ -3160,6 +3258,15 @@ Public Class Settings End Set End Property + Public Property VideoTSParentXBMC() As Boolean + Get + Return Me._videotsparentxbmc + End Get + Set(ByVal value As Boolean) + Me._videotsparentxbmc = value + End Set + End Property + Public Property WindowLoc() As Point Get Return Me._windowloc @@ -3213,13 +3320,53 @@ Public Class Settings Me._password = value End Set End Property + ' cocotus 2013/02 Trakt.tv syncing + 'Adding new settings + Public Property TraktUser() As String + Get + Return Me._traktuser + End Get + Set(ByVal value As String) + Me._traktuser = value + End Set + End Property + 'Adding new settings + Public Property TraktPassword() As String + Get + Return Me._traktpassword + End Get + Set(ByVal value As String) + Me._traktpassword = value + End Set + End Property + + Public Property UseTrakt() As Boolean + Get + Return Me._usetrakt + End Get + Set(ByVal value As Boolean) + Me._usetrakt = value + End Set + End Property + 'cocotus end + + 'cocotus 20130303 Special DateAddvalue + Public Property UseSpecialDateAddvalue() As Boolean + Get + Return Me._usespecialdateadd + End Get + Set(ByVal value As Boolean) + Me._usespecialdateadd = value + End Set + End Property + 'cocotus end #End Region 'Properties #Region "Methods" Public Function AllSeasonPosterEnabled() As Boolean - Return Me._seasonalltbn OrElse Me._seasonalljpg OrElse Me._seasonallposterjpg + Return Me._seasonalltbn OrElse Me._seasonalljpg OrElse Me._seasonallposterjpg OrElse AdvancedSettings.GetBooleanSetting("YAMJAllSeasonPoster", False, "multi.Compatibility") End Function Public Sub Clear() @@ -3241,6 +3388,7 @@ Public Class Settings Me._moviefanartCol = False Me._movieinfoCol = False Me._movietrailerCol = False + Me._moviewatchedCol = False Me._moviesubCol = False Me._movieextraCol = False Me._cleanfolderJpg = False @@ -3315,9 +3463,11 @@ Public Class Settings Me._movienamedotfanartjpg = False Me._movienfo = True Me._movienamenfo = True + Me._movienamenfostack = True Me._movienamemultionly = False Me._dashtrailer = True Me._videotsparent = False + Me._videotsparentxbmc = False Me._lockplot = False Me._lockoutline = False Me._locktitle = False @@ -3490,6 +3640,7 @@ Public Class Settings Me._episodepostercol = False Me._episodefanartcol = True Me._episodenfocol = False + Me._episodewatchedcol = False Me._proxyuri = String.Empty Me._proxyport = -1 Me._proxycredentials = New NetworkCredential @@ -3515,6 +3666,7 @@ Public Class Settings Me._eplocktitle = False Me._eplockplot = False Me._eplockrating = False + Me._scraperactorthumbs = False Me._scrapershowtitle = True Me._scrapershowegu = True Me._scrapershowgenre = True @@ -3579,7 +3731,7 @@ Public Class Settings End Sub Public Function SeasonFanartEnabled() As Boolean - Return Master.eSettings.SeasonFanartJPG OrElse Master.eSettings.SeasonDashFanart OrElse Master.eSettings.SeasonDotFanart OrElse Master.eSettings.SeasonXXDashFanartJPG + Return Master.eSettings.SeasonFanartJPG OrElse Master.eSettings.SeasonDashFanart OrElse Master.eSettings.SeasonDotFanart OrElse Master.eSettings.SeasonXXDashFanartJPG OrElse AdvancedSettings.GetBooleanSetting("YAMJSeasonFanart", False, "multi.Compatibility") End Function Public Sub SetDefaultsForLists(ByVal Type As Enums.DefaultType, ByVal Force As Boolean) @@ -3675,7 +3827,7 @@ Public Class Settings If (Type = Enums.DefaultType.All OrElse Type = Enums.DefaultType.ValidExts) AndAlso (Force OrElse Master.eSettings.ValidExts.Count <= 0) Then Master.eSettings.ValidExts.Clear() - Master.eSettings.ValidExts.AddRange(Strings.Split(".avi,.divx,.mkv,.iso,.mpg,.mp4,.mpeg,.wmv,.wma,.mov,.mts,.m2t,.img,.dat,.bin,.cue,.ifo,.vob,.dvb,.evo,.asf,.asx,.avs,.nsv,.ram,.ogg,.ogm,.ogv,.flv,.swf,.nut,.viv,.rar,.m2ts,.dvr-ms,.ts,.m4v,.rmvb", ",")) + Master.eSettings.ValidExts.AddRange(Strings.Split(".avi,.divx,.mkv,.iso,.mpg,.mp4,.mpeg,.wmv,.wma,.mov,.mts,.m2t,.img,.dat,.bin,.cue,.ifo,.vob,.dvb,.evo,.asf,.asx,.avs,.nsv,.ram,.ogg,.ogm,.ogv,.flv,.swf,.nut,.viv,.rar,.m2ts,.dvr-ms,.ts,.m4v,.rmvb,.webm", ",")) End If If (Type = Enums.DefaultType.All OrElse Type = Enums.DefaultType.ShowRegex) AndAlso (Force OrElse Master.eSettings.TVShowRegexes.Count <= 0) Then diff --git a/EmberAPI/clsAPIStringUtils.vb b/EmberAPI/clsAPIStringUtils.vb index 6ed102c..caa70f2 100644 --- a/EmberAPI/clsAPIStringUtils.vb +++ b/EmberAPI/clsAPIStringUtils.vb @@ -37,10 +37,36 @@ Public Class StringUtils End If End Function + Public Shared Function GenreFilter(aGenres As String) As String + + If Not String.IsNullOrEmpty(Master.eSettings.GenreFilter) Then + Dim sGenres() As String = Strings.Split(aGenres, "/") + Dim fGenres() As String = APIXML.GetGenreListString + Dim tGenres As String + Dim rGenres As New List(Of String) + + For Each Genre As String In fGenres + If sGenres.Contains(Genre) Then + rGenres.Add(Genre) + End If + Next + + If rGenres.Count > 0 Then + tGenres = Strings.Join(rGenres.ToArray, "/").Trim + Return tGenres + Else + Return "" + End If + Else + Return aGenres + End If + + End Function + Public Shared Function CleanStackingMarkers(ByVal sPath As String, Optional ByVal Asterisk As Boolean = False) As String If AdvancedSettings.GetBooleanSetting("DisableMultiPartMedia", False) Then Return sPath If String.IsNullOrEmpty(sPath) Then Return String.Empty - Dim sReturn As String = Regex.Replace(sPath, AdvancedSettings.GetSetting("DeleteStackMarkers", "\|?\-*\.*((cd|dvd|part|dis[ck])([0-9]))"), If(Asterisk, "*", " "), RegexOptions.IgnoreCase).Trim + Dim sReturn As String = Regex.Replace(sPath, AdvancedSettings.GetSetting("DeleteStackMarkers", "[\s_\-\.]?((cd|dvd|p(?:ar)?t|dis[ck])[\s_\-\.]*([0-9]+))"), If(Asterisk, "*", " "), RegexOptions.IgnoreCase).Trim If Not sReturn = sPath Then Return Regex.Replace(sReturn, "\s\s(\s+)?", " ").Trim Else @@ -276,7 +302,7 @@ Public Class StringUtils Public Shared Function FormatSeasonText(ByVal sSeason As Integer) As String If sSeason > 0 Then - Return String.Concat(Master.eLang.GetString(654, "Season "), sSeason.ToString.PadLeft(2, Convert.ToChar("0"))) + Return String.Concat(Master.eLang.GetString(654, "Season"), " ", sSeason.ToString.PadLeft(2, Convert.ToChar("0"))) ElseIf sSeason = 0 Then Return Master.eLang.GetString(655, "Season Specials") Else @@ -398,6 +424,24 @@ Public Class StringUtils Return String.Empty End Function + Public Shared Function CleanFileName(ByVal fName As String) As String + + If Not String.IsNullOrEmpty(fName) Then + fName = fName.Replace(":", " -") + fName = fName.Replace("/", String.Empty) + 'pattern = pattern.Replace("\", String.Empty) + fName = fName.Replace("|", String.Empty) + fName = fName.Replace("<", String.Empty) + fName = fName.Replace(">", String.Empty) + fName = fName.Replace("?", String.Empty) + fName = fName.Replace("*", String.Empty) + fName = fName.Replace(" ", " ") + Return fName + End If + + Return fName + End Function + #End Region 'Methods #Region "Nested Types" diff --git a/EmberAPI/clsAPIXML.vb b/EmberAPI/clsAPIXML.vb index 5f94097..d8934ff 100644 --- a/EmberAPI/clsAPIXML.vb +++ b/EmberAPI/clsAPIXML.vb @@ -306,6 +306,36 @@ Public Class APIXML Return retGenre.ToArray End Function + Public Shared Function GetGenreListString(Optional ByVal LangsOnly As Boolean = False) As String() + Dim retGenre As New List(Of String) + Try + If LangsOnly Then + Dim xGenre = From xGen In GenreXML....Descendants Select xGen.Value + If xGenre.Count > 0 Then + retGenre.AddRange(xGenre.ToArray) + End If + Else + Dim splitLang() As String + Dim xGenre = From xGen In GenreXML... Select xGen.@searchstring, xGen.@language + If xGenre.Count > 0 Then + For i As Integer = 0 To xGenre.Count - 1 + If Not IsNothing(xGenre(i).language) Then + splitLang = xGenre(i).language.Split(Convert.ToChar("|")) + For Each strGen As String In splitLang + If Not retGenre.Contains(xGenre(i).searchstring) AndAlso (Master.eSettings.GenreFilter.Contains(String.Format("{0}", Master.eLang.GetString(569, Master.eLang.All))) OrElse Master.eSettings.GenreFilter.Split(Convert.ToChar(",")).Contains(strGen)) Then + retGenre.Add(xGenre(i).searchstring) + End If + Next + End If + Next + End If + End If + Catch ex As Exception + Master.eLog.WriteToErrorLog(ex.Message, ex.StackTrace, "Error") + End Try + Return retGenre.ToArray + End Function + Public Shared Function GetRatingImage(ByVal strRating As String) As Image '// ' Parse the floating Rating box diff --git a/EmberAPI/clsAdvancedSettings.vb b/EmberAPI/clsAdvancedSettings.vb index 3f13d1f..0152caa 100644 --- a/EmberAPI/clsAdvancedSettings.vb +++ b/EmberAPI/clsAdvancedSettings.vb @@ -129,35 +129,35 @@ Public Class AdvancedSettings End Try End Function - Public Shared Sub CleanSetting(ByVal key As String, Optional ByVal cAssembly As String = "") - Dim Assembly As String = cAssembly - If Assembly = "" Then - Assembly = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetCallingAssembly().Location) - If Assembly = "Ember Media Manager" OrElse Assembly = "EmberAPI" Then - Assembly = "*EmberAPP" - End If - End If - Dim v = From e In _AdvancedSettings.Where(Function(f) f.Name = key AndAlso f.Section = Assembly) - If Not v(0) Is Nothing Then - _AdvancedSettings.Remove(v(0)) - If Not _DoNotSave Then Save() - End If - End Sub - - Public Shared Sub ClearComplexSetting(ByVal key As String, Optional ByVal cAssembly As String = "") - Try - Dim Assembly As String = cAssembly - If Assembly = "" Then - Assembly = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetCallingAssembly().Location) - If Assembly = "Ember Media Manager" OrElse Assembly = "EmberAPI" Then - Assembly = "*EmberAPP" - End If - End If - Dim v = _ComplexAdvancedSettings.FirstOrDefault(Function(f) f.Name = key AndAlso f.Section = Assembly) - If Not v Is Nothing Then v.TableItem.Clear() - Catch ex As Exception - End Try - End Sub + Public Shared Sub CleanSetting(ByVal key As String, Optional ByVal cAssembly As String = "") + Dim Assembly As String = cAssembly + If Assembly = "" Then + Assembly = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetCallingAssembly().Location) + If Assembly = "Ember Media Manager" OrElse Assembly = "EmberAPI" Then + Assembly = "*EmberAPP" + End If + End If + Dim v = From e In _AdvancedSettings.Where(Function(f) f.Name = key AndAlso f.Section = Assembly) + If Not v(0) Is Nothing Then + _AdvancedSettings.Remove(v(0)) + If Not _DoNotSave Then Save() + End If + End Sub + + Public Shared Sub ClearComplexSetting(ByVal key As String, Optional ByVal cAssembly As String = "") + Try + Dim Assembly As String = cAssembly + If Assembly = "" Then + Assembly = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetCallingAssembly().Location) + If Assembly = "Ember Media Manager" OrElse Assembly = "EmberAPI" Then + Assembly = "*EmberAPP" + End If + End If + Dim v = _ComplexAdvancedSettings.FirstOrDefault(Function(f) f.Name = key AndAlso f.Section = Assembly) + If Not v Is Nothing Then v.TableItem.Clear() + Catch ex As Exception + End Try + End Sub Public Shared Function GetComplexSetting(ByVal key As String, Optional ByVal cAssembly As String = "") As Hashtable Try @@ -343,6 +343,8 @@ Public Class AdvancedSettings SetSetting("AudioFormatConvert:wma2", "wmav2", "*EmberAPP", True) SetSetting("AudioFormatConvert:a_dts", "dca", "*EmberAPP", True) SetSetting("AudioFormatConvert:dts", "dca", "*EmberAPP", True) + SetSetting("AudioFormatConvert:a_truehd", "truehd", "*EmberAPP", True) + End If If Not loadSingle OrElse section = "VideoFormatConvert" Then @@ -359,11 +361,12 @@ Public Class AdvancedSettings SetSetting("VideoFormatConvert:3iv1", "3ivx", "*EmberAPP", True) SetSetting("VideoFormatConvert:3iv2", "3ivx", "*EmberAPP", True) SetSetting("VideoFormatConvert:3ivd", "3ivx", "*EmberAPP", True) + End If If Not loadSingle Then - SetSetting("CheckStackMarkers", "\|?((cd|dvd|part|dis[ck])([0-9]))", "*EmberAPP", True) - SetSetting("DeleteStackMarkers", "\|?((cd|dvd|part|dis[ck])([0-9]))", "*EmberAPP", True) + SetSetting("CheckStackMarkers", "[\s_\-\.]?((cd|dvd|p(?:ar)?t|dis[ck])[\s_\-\.]*([0-9]+))", "*EmberAPP", True) + SetSetting("DeleteStackMarkers", "[\s_\-\.]?((cd|dvd|p(?:ar)?t|dis[ck])[\s_\-\.]*([0-9]+))", "*EmberAPP", True) SetBooleanSetting("DisableMultiPartMedia", False) SetSetting("SubtitleExtension", ".*\.(sst|srt|sub|ssa|aqt|smi|sami|jss|mpl|rt|idx|ass)$", "*EmberAPP", True) @@ -372,10 +375,9 @@ Public Class AdvancedSettings SetSetting("NotValidDirIs", "extrathumbs|video_ts|bdmv|audio_ts|recycler|subs|subtitles|.trashes", "*EmberAPP", True) SetSetting("NotValidDirContains", "-trailer|[trailer|temporary files|(noscan)|$recycle.bin|lost+found|system volume information|sample", "*EmberAPP", True) - SetSetting("ForceTitle", "Argentina|Australia|Belgium|Brazil|Canada: English title|Canada: French title|Finland|France|Germany|Hong Kong|Iceland|Ireland|Netherlands|New Zealand|Peru|Portugal|Singapore|South Korea|Spain|Sweden|Switzerland|UK|USA", "*EmberAPP", True) + SetSetting("ForceTitle", "Argentina|Australia|Belgium|Brazil|Canada: English title|Canada: French title|Denmark|Finland|France|Germany|Hong Kong|Iceland|Ireland|Italy|Netherlands|New Zealand|Peru|Portugal|Singapore|South Korea|Spain|Sweden|Switzerland|UK|USA", "*EmberAPP", True) SetBooleanSetting("StudioTagAlwaysOn", False, "*EmberAPP", True) - SetBooleanSetting("ScrapeActorsThumbs", False, "*EmberAPP", True) SetBooleanSetting("PosterGlassOverlay", True, "*EmberAPP", True) End If @@ -415,4 +417,4 @@ Public Class AdvancedSettings #End Region 'Nested Types -End Class \ No newline at end of file +End Class diff --git a/EmberAPI/dlgCompatibility.Designer.vb b/EmberAPI/dlgCompatibility.Designer.vb new file mode 100644 index 0000000..23db437 --- /dev/null +++ b/EmberAPI/dlgCompatibility.Designer.vb @@ -0,0 +1,95 @@ + _ +Partial Class dlgCompatibility + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.lblHeader = New System.Windows.Forms.Label() + Me.lblBody = New System.Windows.Forms.Label() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.btnOK = New System.Windows.Forms.Button() + Me.Panel1.SuspendLayout() + Me.SuspendLayout() + ' + 'lblHeader + ' + Me.lblHeader.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblHeader.Location = New System.Drawing.Point(45, 9) + Me.lblHeader.Name = "lblHeader" + Me.lblHeader.Size = New System.Drawing.Size(398, 29) + Me.lblHeader.TabIndex = 1 + Me.lblHeader.Text = "Database is not compatible!" + Me.lblHeader.TextAlign = System.Drawing.ContentAlignment.TopCenter + ' + 'lblBody + ' + Me.lblBody.Location = New System.Drawing.Point(47, 38) + Me.lblBody.Name = "lblBody" + Me.lblBody.Size = New System.Drawing.Size(395, 52) + Me.lblBody.TabIndex = 0 + Me.lblBody.Text = "Your database is not compatible with this version of Ember!" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "You can ...." + Me.lblBody.TextAlign = System.Drawing.ContentAlignment.MiddleCenter + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.White + Me.Panel1.Controls.Add(Me.lblBody) + Me.Panel1.Controls.Add(Me.lblHeader) + Me.Panel1.Location = New System.Drawing.Point(1, 2) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(489, 97) + Me.Panel1.TabIndex = 1 + ' + 'btnOK + ' + Me.btnOK.Anchor = System.Windows.Forms.AnchorStyles.None + Me.btnOK.Location = New System.Drawing.Point(213, 105) + Me.btnOK.Name = "btnOK" + Me.btnOK.Size = New System.Drawing.Size(67, 23) + Me.btnOK.TabIndex = 0 + Me.btnOK.Text = "OK" + ' + 'dlgCompatibility + ' + Me.AcceptButton = Me.btnOK + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.ClientSize = New System.Drawing.Size(492, 140) + Me.Controls.Add(Me.btnOK) + Me.Controls.Add(Me.Panel1) + Me.Font = New System.Drawing.Font("Segoe UI", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "dlgCompatibility" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Database Compatibility" + Me.Panel1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Friend WithEvents lblHeader As System.Windows.Forms.Label + Friend WithEvents lblBody As System.Windows.Forms.Label + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents btnOK As System.Windows.Forms.Button + +End Class diff --git a/EmberAPI/dlgCompatibility.resx b/EmberAPI/dlgCompatibility.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/EmberAPI/dlgCompatibility.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/EmberAPI/dlgCompatibility.vb b/EmberAPI/dlgCompatibility.vb new file mode 100644 index 0000000..da75ff0 --- /dev/null +++ b/EmberAPI/dlgCompatibility.vb @@ -0,0 +1,43 @@ +' ################################################################################ +' # EMBER MEDIA MANAGER # +' ################################################################################ +' ################################################################################ +' # This file is part of Ember Media Manager. # +' # # +' # Ember Media Manager is free software: you can redistribute it and/or modify # +' # it under the terms of the GNU General Public License as published by # +' # the Free Software Foundation, either version 3 of the License, or # +' # (at your option) any later version. # +' # # +' # Ember Media Manager is distributed in the hope that it will be useful, # +' # but WITHOUT ANY WARRANTY; without even the implied warranty of # +' # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +' # GNU General Public License for more details. # +' # # +' # You should have received a copy of the GNU General Public License # +' # along with Ember Media Manager. If not, see . # +' ################################################################################ + +Imports System.Windows.Forms +Imports EmberAPI + +Public Class dlgCompatibility + + Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub dlgRestart_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + Me.SetUp() + End Sub + + Private Sub SetUp() + Me.Text = Master.eLang.GetString(888, "Database Compatibility") + Me.lblHeader.Text = Master.eLang.GetString(889, "Database is not compatible!") + Me.lblBody.Text = Master.eLang.GetString(890, "Your database is not compatible with this version of Ember!\n\nYou can ....").Replace("\n", vbCrLf) + + Me.btnOK.Text = Master.eLang.GetString(179, "OK") + 'Me.btnAbort.Text = Master.eLang.GetString(887, "Cancel") + End Sub +End Class diff --git a/FanartTVAPI/FanartTV/FanartTV.Async.cs b/FanartTVAPI/FanartTV/FanartTV.Async.cs new file mode 100644 index 0000000..bb6967c --- /dev/null +++ b/FanartTVAPI/FanartTV/FanartTV.Async.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; +using System.Net; + +namespace FanartTV.V1 +{ + public partial class FanartTV + { + #region Process Execution + + private void ProcessAsyncRequest(RestRequest request, Action> callback) + where T : new() + { + var client = new RestClient(BASE_URL); + client.AddHandler("application/json", new WatJsonDeserializer()); + client.AddHandler("application/json charset=utf-8", new WatJsonDeserializer()); + + if (Timeout.HasValue) + client.Timeout = Timeout.Value; + +#if !WINDOWS_PHONE + if (Proxy != null) + client.Proxy = Proxy; +#endif + + Error = null; + + //request.AddHeader("Accept", "application/json"); + //request.AddParameter("api_key", ApiKey); + + ++AsyncCount; + var asyncHandle = client.ExecuteAsync(request, resp => + { + --AsyncCount; + var result = new FanartTVAsyncResult + { + Data = resp.Data != null ? resp.Data : default(T), + UserState = request.UserState + }; + + ResponseContent = resp.Content; + ResponseHeaders = resp.Headers.ToDictionary(k => k.Name, v => v.Value); + + switch (resp.ResponseStatus) + { + case ResponseStatus.Completed: + switch (resp.StatusCode) + { + case HttpStatusCode.OK: + if (resp.Content == "Please specify a valid API key") + result.Error = resp.Content; + break; + default: + result.Error = resp.Content; + break; + } + break; + default: + result.Error = "HTTP Error"; + break; + } + + Error = result.Error; + + callback(result); + }); + } + + + #endregion + + private static bool CheckQuery(string query, object userState, Action> callback) + where T : class + { + if (string.IsNullOrEmpty(query)) + { + callback(new FanartTVAsyncResult + { + Data = null, + Error = "Search cannot be empty", + UserState = userState + }); + return false; + } + + return true; + } + + #region Movie Info + + /// + /// Retrieve all the basic movie information for a particular movie by FanartTV reference. + /// http://fanart.tv/api-docs/movie-api/ + /// + /// FanartTV movie id + /// optional - ISO 639-1 language code + /// The following parameters are optional but if you want to change any from the default value you must specify all optional parameters before the one you are changing (so if you are changing just format you don’t have to specify type, but if you want to change the sort you MUST also specify the format and type) + /// Returns the results in the requested format - json (default) / php (returns a php serialized object) + /// Returns the requested image types - all (default) / movielogo / movieart / moviedisc + /// 1 – Sorted by most popular image then newest(default) / 2 – Sorted by newest uploaded image / 3 – Sorted by oldest uploaded image + /// Value is either 1 (1 image) or 2 (all images – default), for example, when automatically downloading images you might only want to return the first result so the user doesn’t have to provide input, whereas with a manual download you might want the user to see all the options. + /// + public void GetMovieInfo(FanartTVRequest Request, Action> callback) + { + //ProcessAsyncRequest(BuildGetMovieInfoRequest(MovieID, language, UserState), callback); + ProcessAsyncRequest(Generator.GetMovieInfo(Request), callback); + } + #endregion + } +} diff --git a/FanartTVAPI/FanartTV/FanartTV.Sync.cs b/FanartTVAPI/FanartTV/FanartTV.Sync.cs new file mode 100644 index 0000000..407639c --- /dev/null +++ b/FanartTVAPI/FanartTV/FanartTV.Sync.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; +using System.Net; + +namespace FanartTV.V1 +{ + public partial class FanartTV + { + #region Process Execution + + private T ProcessRequest(RestRequest request) + where T : new() + { + var client = new RestClient(BASE_URL); + client.AddHandler("application/json", new WatJsonDeserializer()); + client.AddHandler("application/json charset=utf-8", new WatJsonDeserializer()); + + if (Timeout.HasValue) + client.Timeout = Timeout.Value; + +#if !WINDOWS_PHONE + if (Proxy != null) + client.Proxy = Proxy; +#endif + + var resp = client.Execute(request); + + ResponseContent = resp.Content; + ResponseHeaders = resp.Headers.ToDictionary(k => k.Name, v => v.Value); + + switch (resp.ResponseStatus) + { + case ResponseStatus.Completed: + switch (resp.StatusCode) + { + case HttpStatusCode.OK: + if (resp.Content == "Please specify a valid API key") + Error = resp.Content; + return resp.Data; + break; + default: + Error = resp.Content; + return default(T); + break; + } + break; + default: + Error = "HTTP Error"; + return default(T); + break; + } + } + + #endregion + + + #region Movie Info + /// + /// Retrieve all the basic movie information for a particular movie by FanartTV reference. + /// http://fanart.tv/api-docs/movie-api/ + /// + /// FanartTV movie id + /// optional - ISO 639-1 language code + /// The following parameters are optional but if you want to change any from the default value you must specify all optional parameters before the one you are changing (so if you are changing just format you don’t have to specify type, but if you want to change the sort you MUST also specify the format and type) + /// Returns the results in the requested format - json (default) / php (returns a php serialized object) + /// Returns the requested image types - all (default) / movielogo / movieart / moviedisc + /// 1 – Sorted by most popular image then newest(default) / 2 – Sorted by newest uploaded image / 3 – Sorted by oldest uploaded image + /// Value is either 1 (1 image) or 2 (all images – default), for example, when automatically downloading images you might only want to return the first result so the user doesn’t have to provide input, whereas with a manual download you might want the user to see all the options. + /// + public FanartTVMovie GetMovieInfo(FanartTVRequest Request) + { + //return ProcessRequest(BuildGetMovieInfoRequest(MovieID, language)); + return ProcessRequest(Generator.GetMovieInfo(Request)); + } + #endregion + } +} diff --git a/FanartTVAPI/FanartTV/FanartTV.cs b/FanartTVAPI/FanartTV/FanartTV.cs new file mode 100644 index 0000000..23eea88 --- /dev/null +++ b/FanartTVAPI/FanartTV/FanartTV.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp.Deserializers; +using System.Net; +using RestSharp; +using FanartTV.Utilities; + +namespace FanartTV.V1 +{ + public partial class FanartTV + { + private const string BASE_URL = "http://api.fanart.tv/webservice/"; + + public FanartTV(string apiKey) + { + ApiKey = apiKey; + Error = null; + Timeout = null; + + Deserializer = new JsonDeserializer(); + Generator = new RequestGenerator(apiKey); + } + + #region Properties + + private RequestGenerator Generator { get; set; } + + private RequestGenerator ETagGenerator { get; set; } + + private string ApiKey { get; set; } + + private string Language { get; set; } + + private JsonDeserializer Deserializer; + + #endregion + + /// + /// Current count of outstanding Async calls awaiting callback response + /// + public int AsyncCount = 0; + + /// + /// Error message + /// + public string Error { get; set; } + + /// + /// String representation of response content + /// + public string ResponseContent { get; set; } + + /// + /// Dictionary of Header values in response + /// http://fanart.tv/api-docs/movie-api/ + /// + public Dictionary ResponseHeaders { get; set; } + + +#if !WINDOWS_PHONE + /// + /// Proxy to use for requests made. Passed on to underying WebRequest if set. + /// + public IWebProxy Proxy { get; set; } +#endif + /// + /// Timeout in milliseconds to use for requests made. + /// + public int? Timeout { get; set; } + + + + + } + +} diff --git a/FanartTVAPI/FanartTVAPI.csproj b/FanartTVAPI/FanartTVAPI.csproj new file mode 100644 index 0000000..14ab954 --- /dev/null +++ b/FanartTVAPI/FanartTVAPI.csproj @@ -0,0 +1,73 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {70F651C6-6BB4-4E4D-AD6C-25C36CA1E9E6} + Library + Properties + FanartTVAPI + FanartTVAPI + v3.5 + 512 + ..\ + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\RestSharp.104.1\lib\net35\RestSharp.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FanartTVAPI/Properties/AssemblyInfo.cs b/FanartTVAPI/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..83f0b31 --- /dev/null +++ b/FanartTVAPI/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FanartTVAPI")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("m.savazzi")] +[assembly: AssemblyProduct("FanartTVAPI")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("9ff623b4-3e53-43bc-9176-ebe5c91b5cb3")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/FanartTVAPI/Utilities/Constants.cs b/FanartTVAPI/Utilities/Constants.cs new file mode 100644 index 0000000..25c79ab --- /dev/null +++ b/FanartTVAPI/Utilities/Constants.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace FanartTV.Utilities +{ + /// + /// Retrieve all the basic movie information for a particular movie by FanartTV reference. + /// http://fanart.tv/api-docs/movie-api/ + /// + /// FanartTV movie id + /// optional - ISO 639-1 language code + /// The following parameters are optional but if you want to change any from the default value you must specify all optional parameters before the one you are changing (so if you are changing just format you don’t have to specify type, but if you want to change the sort you MUST also specify the format and type) + /// Returns the results in the requested format - json (default) / php (returns a php serialized object) + /// Returns the requested image types - all (default) / movielogo / movieart / moviedisc + /// 1 – Sorted by most popular image then newest(default) / 2 – Sorted by newest uploaded image / 3 – Sorted by oldest uploaded image + /// Value is either 1 (1 image) or 2 (all images – default), for example, when automatically downloading images you might only want to return the first result so the user doesn’t have to provide input, whereas with a manual download you might want the user to see all the options. + /// + internal partial class RequestGenerator + { + + #region Request Constants + public const string REQUEST_MOVIE = "movie/{api_key}/{id}/{format}/{type}/{sort}/{limit}"; + #endregion + + } + + + internal partial class RequestBuilder + { + + #region Parameter Constants + public const string PARAMETER_APIKEY = "api_key"; + public const string PARAMETER_FORMAT = "format"; + public const string PARAMETER_TYPE = "type"; + public const string PARAMETER_SORT = "sort"; + public const string PARAMETER_ID = "id"; + public const string PARAMETER_LIMIT = "limit"; + #endregion + + } +} diff --git a/FanartTVAPI/Utilities/RequestBuilder.cs b/FanartTVAPI/Utilities/RequestBuilder.cs new file mode 100644 index 0000000..610cf33 --- /dev/null +++ b/FanartTVAPI/Utilities/RequestBuilder.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; +using System.Globalization; + +namespace FanartTV.Utilities +{ + internal partial class RequestBuilder + { + public RequestBuilder(string resource, Method method) + { + Request = new RestRequest(resource, method); + Request.AddHeader("Accept", "application/json"); + } + + #region Properties + + private RestRequest Request { get; set; } + + private Method Method + { + get { return Request.Method; } + set { Request.Method = value; } + } + + private object UserState + { + get { return Request.UserState; } + set { if (value != null) Request.UserState = value; } + } + + #endregion + + public RestRequest GetRequest() + { + return Request; + } + + public RequestBuilder SetUserState(object userState) + { + UserState = userState; + return this; + } + + public RequestBuilder AddParameter(string name, bool? value) + { + if (!value.HasValue) return this; + + Request.AddParameter(name, value.Value ? "true" : "false"); + return this; + } + + public RequestBuilder AddParameter(string name, int? value) + { + if (!value.HasValue) return this; + + Request.AddParameter(name, value.Value); + return this; + } + + public RequestBuilder AddParameter(string name, string value) + { + if (string.IsNullOrEmpty(value)) return this; + value = value.EscapeString(); + + Request.AddParameter(name, value); + return this; + } + + public RequestBuilder AddParameter(string name, DateTime? value) + { + if (!value.HasValue) return this; + + Request.AddParameter(name, value.Value.ToString("yyyy-MM-dd")); + return this; + } + + public RequestBuilder AddParameter(string name, object value) + { + if (value == null) return this; + + Request.AddParameter(name, value); + return this; + } + + public RequestBuilder AddUrlSegment(string name, int? value) + { + if (!value.HasValue) return this; + + Request.AddUrlSegment(name, value.Value.ToString(CultureInfo.InvariantCulture)); + return this; + } + + public RequestBuilder AddUrlSegment(string name, string value) + { + if (string.IsNullOrEmpty(value)) return this; + value = value.EscapeString(); + + Request.AddUrlSegment(name, value); + return this; + } + } +} diff --git a/FanartTVAPI/Utilities/RequestGenerator.cs b/FanartTVAPI/Utilities/RequestGenerator.cs new file mode 100644 index 0000000..2787901 --- /dev/null +++ b/FanartTVAPI/Utilities/RequestGenerator.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; + +namespace FanartTV.Utilities +{ + internal partial class RequestGenerator + { + #region Properties + + private Method Method { get; set; } + private string ApiKey { get; set; } + + #endregion + + public RequestGenerator(string apiKey, Method method = Method.GET) + { + Method = method; + ApiKey = apiKey; + } + + private RequestBuilder GetBuilder(string request) + { + return new RequestBuilder(request, Method) + .AddUrlSegment(RequestBuilder.PARAMETER_APIKEY, ApiKey); + } + + #region Movie Info + + internal RestRequest GetMovieInfo(FanartTV.V1.FanartTVRequest Request, object userState = null) + { + return GetBuilder(REQUEST_MOVIE) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, Request.MovieID) + .AddUrlSegment(RequestBuilder.PARAMETER_FORMAT, Request.format) + .AddUrlSegment(RequestBuilder.PARAMETER_LIMIT, Request.limit) + .AddUrlSegment(RequestBuilder.PARAMETER_SORT, Request.sort) + .AddUrlSegment(RequestBuilder.PARAMETER_TYPE, Request.type) + .GetRequest(); + } + + #endregion + } +} diff --git a/FanartTVAPI/Utilities/Utility.cs b/FanartTVAPI/Utilities/Utility.cs new file mode 100644 index 0000000..21d0e7f --- /dev/null +++ b/FanartTVAPI/Utilities/Utility.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.IO; + +namespace FanartTV +{ + public static class Utility + { + // remove invalid characters for use in URL + public static string EscapeString(this string s) + { + if (string.IsNullOrEmpty(s)) + return string.Empty; + +#if WINDOWS_PHONE + return Regex.Replace(s, "[" + Regex.Escape(new String(Path.GetInvalidPathChars())) + "]", "-"); +#else + return Regex.Replace(s, "[" + Regex.Escape(new String(Path.GetInvalidFileNameChars())) + "]", "-"); +#endif + } + } +} diff --git a/FanartTVAPI/V1/FanartTVAsyncResult.cs b/FanartTVAPI/V1/FanartTVAsyncResult.cs new file mode 100644 index 0000000..269d83c --- /dev/null +++ b/FanartTVAPI/V1/FanartTVAsyncResult.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace FanartTV.V1 +{ + public class FanartTVAsyncResult + { + public T Data { get; set; } + public string Error { get; set; } + public object UserState { get; set; } + } + + public class TmdbAsyncETagResult + { + public string ETag { get; set; } + public object UserState { get; set; } + } +} diff --git a/FanartTVAPI/V1/FanartTVError.cs b/FanartTVAPI/V1/FanartTVError.cs new file mode 100644 index 0000000..4381ee2 --- /dev/null +++ b/FanartTVAPI/V1/FanartTVError.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace FanartTVAPI.V1 +{ + class FanartTVError + { + public string status_message { get; set; } + } +} diff --git a/FanartTVAPI/V1/FanartTVMovie.cs b/FanartTVAPI/V1/FanartTVMovie.cs new file mode 100644 index 0000000..c11bf3c --- /dev/null +++ b/FanartTVAPI/V1/FanartTVMovie.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace FanartTV.V1 +{ + public class MovieLogo + { + public string id { get; set; } + public string url { get; set; } + public string lang { get; set; } + public string likes { get; set; } + } + + public class MovieArt + { + public string id { get; set; } + public string url { get; set; } + public string lang { get; set; } + public string likes { get; set; } + } + + public class MovieBackground + { + public string id { get; set; } + public string url { get; set; } + public string lang { get; set; } + public string likes { get; set; } + } + + public class MovieDisc + { + public string id { get; set; } + public string url { get; set; } + public string lang { get; set; } + public string likes { get; set; } + public string disc { get; set; } + public string disc_type { get; set; } + } + + public class MovieThumb + { + public string id { get; set; } + public string url { get; set; } + public string lang { get; set; } + public string likes { get; set; } + } + + public class HDMovieLogo + { + public string id { get; set; } + public string url { get; set; } + public string lang { get; set; } + public string likes { get; set; } + } + + public class HDMovieClearArt + { + public string id { get; set; } + public string url { get; set; } + public string lang { get; set; } + public string likes { get; set; } + } + + public class FanartTVMovie_detail + { + public string tmdb_id { get; set; } + public string imdb_id { get; set; } + public List movielogo { get; set; } + public List movieart { get; set; } + public List moviebackground { get; set; } + public List moviedisc { get; set; } + public List moviethumb { get; set; } + public List hdmovielogo { get; set; } + public List hdmovieclearart { get; set; } + } + + public class FanartTVMovie + { + public string title { get; set; } + public FanartTVMovie_detail movieinfo { get; set; } + } +} diff --git a/FanartTVAPI/V1/FanartTVRequest.cs b/FanartTVAPI/V1/FanartTVRequest.cs new file mode 100644 index 0000000..34bcb7e --- /dev/null +++ b/FanartTVAPI/V1/FanartTVRequest.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace FanartTV.V1 +{ + public partial class FanartTVRequest + { + public string MovieID { get; set; } + public string format { get; set; } + public string type { get; set; } + public int sort { get; set; } + public int limit { get; set; } + + //public FanartTVRequest(string _MovieID, string _format, string _type, int _sort, int _limit) + //{ + // MovieID = _MovieID; + // format = _format; + // type = _type; + // sort = _sort; + // limit = _limit; + //} + + public FanartTVRequest(string _MovieID, string _format, string _type, int _sort, int _limit) + { + MovieID = _MovieID; + format = _format; + type = _type; + sort = _sort; + limit = _limit; + } + } +} diff --git a/FanartTVAPI/V1/WatJsonDeserializer.cs b/FanartTVAPI/V1/WatJsonDeserializer.cs new file mode 100644 index 0000000..63dd33c --- /dev/null +++ b/FanartTVAPI/V1/WatJsonDeserializer.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp.Deserializers; + +namespace FanartTV.V1 +{ + public class WatJsonDeserializer : IDeserializer + { + #region IDeserializer Members + + public T Deserialize(RestSharp.IRestResponse response) + { + if (response.Content == null) + return default(T); + if (response.Content == "null") + return default(T); + + // handle custom answer + string astr = @"{""title"":" + response.Content.Substring(1, response.Content.Length - 1); + int pos = astr.IndexOf(@""":{""tmdb_id"""); + astr = astr.Substring(0, pos+1) + @",""movieinfo" + astr.Substring(pos, astr.Length - pos); + response.Content = astr; + + var deserializer = new JsonDeserializer(); + var data = deserializer.Deserialize(response); + + return data; + } + + public string DateFormat { get; set; } + public string Namespace { get; set; } + public string RootElement { get; set; } + + #endregion + } +} diff --git a/FanartTVAPI/packages.config b/FanartTVAPI/packages.config new file mode 100644 index 0000000..1de19f7 --- /dev/null +++ b/FanartTVAPI/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Packages.dgml b/Packages.dgml new file mode 100644 index 0000000..558aef9 --- /dev/null +++ b/Packages.dgml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RottenTomatoesAPI/Properties/AssemblyInfo.cs b/RottenTomatoesAPI/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b4e904d --- /dev/null +++ b/RottenTomatoesAPI/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RottenTomatoesAPI")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("m.savazzi")] +[assembly: AssemblyProduct("RottenTomatoesAPI")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("ACB20A8C-45DA-4E9B-83EE-FCC2ED50A47A")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/RottenTomatoesAPI/RottenTomatoes/RottenTomatoes.Async.cs b/RottenTomatoesAPI/RottenTomatoes/RottenTomatoes.Async.cs new file mode 100644 index 0000000..1fa8351 --- /dev/null +++ b/RottenTomatoesAPI/RottenTomatoes/RottenTomatoes.Async.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; +using System.Net; + +namespace RottenTomatoes.V1 +{ + public partial class RottenTomatoes + { + #region Process Execution + + private void ProcessAsyncRequest(RestRequest request, Action> callback) + where T : new() + { + var client = new RestClient(BASE_URL); + client.AddHandler("application/json", new WatJsonDeserializer()); + client.AddHandler("application/json charset=utf-8", new WatJsonDeserializer()); + + if (Timeout.HasValue) + client.Timeout = Timeout.Value; + +#if !WINDOWS_PHONE + if (Proxy != null) + client.Proxy = Proxy; +#endif + + Error = null; + + //request.AddHeader("Accept", "application/json"); + //request.AddParameter("api_key", ApiKey); + + ++AsyncCount; + var asyncHandle = client.ExecuteAsync(request, resp => + { + --AsyncCount; + var result = new RottenTomatoesAsyncResult + { + Data = resp.Data != null ? resp.Data : default(T), + UserState = request.UserState + }; + + ResponseContent = resp.Content; + ResponseHeaders = resp.Headers.ToDictionary(k => k.Name, v => v.Value); + + switch (resp.ResponseStatus) + { + case ResponseStatus.Completed: + switch (resp.StatusCode) + { + case HttpStatusCode.OK: + if (resp.Content == "Please specify a valid API key") + result.Error = resp.Content; + break; + default: + result.Error = resp.Content; + break; + } + break; + default: + result.Error = "HTTP Error"; + break; + } + + Error = result.Error; + + callback(result); + }); + } + + + #endregion + + private static bool CheckQuery(string query, object userState, Action> callback) + where T : class + { + if (string.IsNullOrEmpty(query)) + { + callback(new RottenTomatoesAsyncResult + { + Data = null, + Error = "Search cannot be empty", + UserState = userState + }); + return false; + } + + return true; + } + + #region Movie Info + + /// + /// Retrieve all the basic movie information for a particular movie by RottenTomatoes reference. + /// http://api.rottentomatoes.com/api/public/v1.0/movies/.json?apikey= + /// + /// RottenTomatoes movie id + /// + public void GetMovieInfo(RottenTomatoesRequest Request, Action> callback) + { + ProcessAsyncRequest(Generator.GetMovieInfo(Request),callback); + } + + /// + /// Retrieve all the basic movie information for a particular movie by RottenTomatoes reference. + /// http://api.rottentomatoes.com/api/public/v1.0/movies//clips.json?apikey= + /// + /// RottenTomatoes movie id + /// + public void GetMovieInfo(RottenTomatoesRequest Request, Action> callback) + { + ProcessAsyncRequest(Generator.GetMovieInfo(Request),callback); + } + + /// + /// Retrieve all the basic movie information for a particular movie by RottenTomatoes reference. + /// http://api.rottentomatoes.com/api/public/v1.0/movies//cast.json?apikey= + /// + /// RottenTomatoes movie id + /// + public void GetMovieCast(RottenTomatoesRequest Request, Action> callback) + { + ProcessAsyncRequest(Generator.GetMovieInfo(Request), callback); + } + + /// + /// Retrieve all the basic movie information for a particular movie by RottenTomatoes reference. + /// http://api.rottentomatoes.com/api/public/v1.0/movies//cast.json?apikey= + /// + /// IMDB movie id without the initial tt + /// + public void GetMoviesAlias(RottenTomatoesRequest Request, Action> callback) + { + if (Request.MovieID.Substring(0, 2).ToLower() == "tt") + Request.MovieID = Request.MovieID.Substring(2, Request.MovieID.Length - 2); + + ProcessAsyncRequest(Generator.GetMovieInfo(Request),callback ); + } + + #endregion + } +} diff --git a/RottenTomatoesAPI/RottenTomatoes/RottenTomatoes.Sync.cs b/RottenTomatoesAPI/RottenTomatoes/RottenTomatoes.Sync.cs new file mode 100644 index 0000000..b48d1d9 --- /dev/null +++ b/RottenTomatoesAPI/RottenTomatoes/RottenTomatoes.Sync.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; +using System.Net; + +namespace RottenTomatoes.V1 +{ + public partial class RottenTomatoes + { + #region Process Execution + + private T ProcessRequest(RestRequest request) + where T : new() + { + var client = new RestClient(BASE_URL); + client.AddHandler("application/json", new WatJsonDeserializer()); + + if (Timeout.HasValue) + client.Timeout = Timeout.Value; + +#if !WINDOWS_PHONE + if (Proxy != null) + client.Proxy = Proxy; +#endif + + var resp = client.Execute(request); + + ResponseContent = resp.Content; + ResponseHeaders = resp.Headers.ToDictionary(k => k.Name, v => v.Value); + + switch (resp.ResponseStatus) + { + case ResponseStatus.Completed: + switch (resp.StatusCode) + { + case HttpStatusCode.OK: + if (resp.Content == "Please specify a valid API key") + Error = resp.Content; + return resp.Data; + break; + default: + Error = resp.Content; + return default(T); + break; + } + break; + default: + Error = "HTTP Error"; + return default(T); + break; + } + return default(T); + } + + #endregion + + + #region Movie Info + /// + /// Retrieve all the basic movie information for a particular movie by RottenTomatoes reference. + /// http://api.rottentomatoes.com/api/public/v1.0/movies/.json?apikey= + /// + /// RottenTomatoes movie id + /// + public RottenTomatoesMovieInfo GetMovieInfo(RottenTomatoesRequest Request) + { + return ProcessRequest(Generator.GetMovieInfo(Request)); + } + + /// + /// Retrieve all the basic movie information for a particular movie by RottenTomatoes reference. + /// http://api.rottentomatoes.com/api/public/v1.0/movies//clips.json?apikey= + /// + /// RottenTomatoes movie id + /// + public RottenTomatoesMovieClips GetMovieClips(RottenTomatoesRequest Request) + { + return ProcessRequest(Generator.GetMovieInfo(Request)); + } + + /// + /// Retrieve all the basic movie information for a particular movie by RottenTomatoes reference. + /// http://api.rottentomatoes.com/api/public/v1.0/movies//cast.json?apikey= + /// + /// RottenTomatoes movie id + /// + public RottenTomatoesCastInfo GetMovieCast(RottenTomatoesRequest Request) + { + return ProcessRequest(Generator.GetMovieInfo(Request)); + } + + /// + /// Retrieve all the basic movie information for a particular movie by RottenTomatoes reference. + /// http://api.rottentomatoes.com/api/public/v1.0/movies//cast.json?apikey= + /// + /// IMDB movie id without the initial tt + /// + public RottenTomatoesMovieInfo GetMoviesAlias(RottenTomatoesRequest Request) + { + if (Request.MovieID.Substring(0, 2).ToLower() == "tt") + Request.MovieID = Request.MovieID.Substring(2, Request.MovieID.Length - 2); + + return ProcessRequest(Generator.GetMovieInfo(Request)); + } + + #endregion + } +} diff --git a/RottenTomatoesAPI/RottenTomatoes/RottenTomatoes.cs b/RottenTomatoesAPI/RottenTomatoes/RottenTomatoes.cs new file mode 100644 index 0000000..1b36ca8 --- /dev/null +++ b/RottenTomatoesAPI/RottenTomatoes/RottenTomatoes.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp.Deserializers; +using System.Net; +using RestSharp; +using RottenTomatoes.Utilities; + +namespace RottenTomatoes.V1 +{ + public partial class RottenTomatoes + { + private const string BASE_URL = "http://api.rottentomatoes.com/api/public/v1.0/"; + + public RottenTomatoes(string apiKey) + { + ApiKey = apiKey; + Error = null; + Timeout = null; + + Deserializer = new JsonDeserializer(); + Generator = new RequestGenerator(apiKey); + } + + #region Properties + + private RequestGenerator Generator { get; set; } + + private RequestGenerator ETagGenerator { get; set; } + + private string ApiKey { get; set; } + + private string Language { get; set; } + + private JsonDeserializer Deserializer; + + #endregion + + /// + /// Current count of outstanding Async calls awaiting callback response + /// + public int AsyncCount = 0; + + /// + /// Error message + /// + public string Error { get; set; } + + /// + /// String representation of response content + /// + public string ResponseContent { get; set; } + + /// + /// Dictionary of Header values in response + /// http://fanart.tv/api-docs/movie-api/ + /// + public Dictionary ResponseHeaders { get; set; } + + +#if !WINDOWS_PHONE + /// + /// Proxy to use for requests made. Passed on to underying WebRequest if set. + /// + public IWebProxy Proxy { get; set; } +#endif + /// + /// Timeout in milliseconds to use for requests made. + /// + public int? Timeout { get; set; } + + + + + } + +} diff --git a/RottenTomatoesAPI/RottenTomatoesAPI.csproj b/RottenTomatoesAPI/RottenTomatoesAPI.csproj new file mode 100644 index 0000000..bc80657 --- /dev/null +++ b/RottenTomatoesAPI/RottenTomatoesAPI.csproj @@ -0,0 +1,76 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {8DAFAF56-AD78-4B47-866F-E8179511AF5B} + Library + Properties + RottenTomatoesAPI + RottenTomatoesAPI + v3.5 + 512 + ..\ + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AnyCPU + + + + ..\packages\RestSharp.104.1\lib\net35\RestSharp.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RottenTomatoesAPI/Utilities/Constants.cs b/RottenTomatoesAPI/Utilities/Constants.cs new file mode 100644 index 0000000..3f8e279 --- /dev/null +++ b/RottenTomatoesAPI/Utilities/Constants.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace RottenTomatoes.Utilities +{ + /// + /// Retrieve all the basic movie information for a particular movie by RottenTomatoes reference. + /// http://fanart.tv/api-docs/movie-api/ + /// + /// RottenTomatoes movie id + /// optional - ISO 639-1 language code + /// The following parameters are optional but if you want to change any from the default value you must specify all optional parameters before the one you are changing (so if you are changing just format you don’t have to specify type, but if you want to change the sort you MUST also specify the format and type) + /// Returns the results in the requested format - json (default) / php (returns a php serialized object) + /// Returns the requested image types - all (default) / movielogo / movieart / moviedisc + /// 1 – Sorted by most popular image then newest(default) / 2 – Sorted by newest uploaded image / 3 – Sorted by oldest uploaded image + /// Value is either 1 (1 image) or 2 (all images – default), for example, when automatically downloading images you might only want to return the first result so the user doesn’t have to provide input, whereas with a manual download you might want the user to see all the options. + /// + internal partial class RequestGenerator + { + + #region Request Constants + // http://api.rottentomatoes.com/api/public/v1.0/movies/.json?apikey= + public const string REQUEST_MOVIE = "movies/{id}.json"; + // http://api.rottentomatoes.com/api/public/v1.0/movies//cast.json?apikey= + public const string REQUEST_MOVIECAST = "movies/{id}/cast.json"; + // http://api.rottentomatoes.com/api/public/v1.0/movies//clips.json?apikey= + public const string REQUEST_MOVIECLIPS = "movies/{id}/clips.json"; + // api.rottentomatoes.com/api/public/v1.0/movie_alias.json?id=0187393&type=imdb&apikey= + public const string REQUEST_MOVIEALIAS = "movies_alias.json"; + #endregion + + } + + + internal partial class RequestBuilder + { + + #region Parameter Constants + public const string PARAMETER_APIKEY = "apikey"; + public const string PARAMETER_TYPE = "type"; + public const string PARAMETER_ID = "id"; + #endregion + + } +} diff --git a/RottenTomatoesAPI/Utilities/RequestBuilder.cs b/RottenTomatoesAPI/Utilities/RequestBuilder.cs new file mode 100644 index 0000000..d77a9ef --- /dev/null +++ b/RottenTomatoesAPI/Utilities/RequestBuilder.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; +using System.Globalization; + +namespace RottenTomatoes.Utilities +{ + internal partial class RequestBuilder + { + public RequestBuilder(string resource, Method method) + { + Request = new RestRequest(resource, method); + Request.AddHeader("Accept", "application/json"); + } + + #region Properties + + private RestRequest Request { get; set; } + + private Method Method + { + get { return Request.Method; } + set { Request.Method = value; } + } + + private object UserState + { + get { return Request.UserState; } + set { if (value != null) Request.UserState = value; } + } + + #endregion + + public RestRequest GetRequest() + { + return Request; + } + + public RequestBuilder SetUserState(object userState) + { + UserState = userState; + return this; + } + + public RequestBuilder AddParameter(string name, bool? value) + { + if (!value.HasValue) return this; + + Request.AddParameter(name, value.Value ? "true" : "false"); + return this; + } + + public RequestBuilder AddParameter(string name, int? value) + { + if (!value.HasValue) return this; + + Request.AddParameter(name, value.Value); + return this; + } + + public RequestBuilder AddParameter(string name, string value) + { + if (string.IsNullOrEmpty(value)) return this; + value = value.EscapeString(); + + Request.AddParameter(name, value); + return this; + } + + public RequestBuilder AddParameter(string name, DateTime? value) + { + if (!value.HasValue) return this; + + Request.AddParameter(name, value.Value.ToString("yyyy-MM-dd")); + return this; + } + + public RequestBuilder AddParameter(string name, object value) + { + if (value == null) return this; + + Request.AddParameter(name, value); + return this; + } + + public RequestBuilder AddUrlSegment(string name, int? value) + { + if (!value.HasValue) return this; + + Request.AddUrlSegment(name, value.Value.ToString(CultureInfo.InvariantCulture)); + return this; + } + + public RequestBuilder AddUrlSegment(string name, string value) + { + if (string.IsNullOrEmpty(value)) return this; + value = value.EscapeString(); + + Request.AddUrlSegment(name, value); + return this; + } + } +} diff --git a/RottenTomatoesAPI/Utilities/RequestGenerator.cs b/RottenTomatoesAPI/Utilities/RequestGenerator.cs new file mode 100644 index 0000000..e87bb2d --- /dev/null +++ b/RottenTomatoesAPI/Utilities/RequestGenerator.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; + +namespace RottenTomatoes.Utilities +{ + internal partial class RequestGenerator + { + #region Properties + + private Method Method { get; set; } + private string ApiKey { get; set; } + + #endregion + + public RequestGenerator(string apiKey, Method method = Method.GET) + { + Method = method; + ApiKey = apiKey; + } + + private RequestBuilder GetBuilder(string request) + { + return new RequestBuilder(request, Method); + } + + #region Movie Info + + internal RestRequest GetMovieInfo(RottenTomatoes.V1.RottenTomatoesRequest Request, object userState = null) + { + return GetBuilder(REQUEST_MOVIE) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, Request.MovieID) + .AddParameter(RequestBuilder.PARAMETER_APIKEY, ApiKey ) + .GetRequest(); + } + + internal RestRequest GetMovieClips(RottenTomatoes.V1.RottenTomatoesRequest Request, object userState = null) + { + return GetBuilder(REQUEST_MOVIECLIPS) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, Request.MovieID) + .AddParameter(RequestBuilder.PARAMETER_APIKEY, ApiKey) + .GetRequest(); + } + + internal RestRequest GetMovieCast(RottenTomatoes.V1.RottenTomatoesRequest Request, object userState = null) + { + return GetBuilder(REQUEST_MOVIECAST) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, Request.MovieID) + .AddParameter(RequestBuilder.PARAMETER_APIKEY, ApiKey) + .GetRequest(); + } + + internal RestRequest GetMovieAlias(RottenTomatoes.V1.RottenTomatoesRequest Request, object userState = null) + { + return GetBuilder(REQUEST_MOVIECAST) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_ID, Request.MovieID) + .AddParameter(RequestBuilder.PARAMETER_APIKEY, ApiKey) + .AddParameter(RequestBuilder.PARAMETER_TYPE , "imdb") + .GetRequest(); + } + + #endregion + } +} diff --git a/RottenTomatoesAPI/Utilities/Utility.cs b/RottenTomatoesAPI/Utilities/Utility.cs new file mode 100644 index 0000000..7357aab --- /dev/null +++ b/RottenTomatoesAPI/Utilities/Utility.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.IO; + +namespace RottenTomatoes +{ + public static class Utility + { + // remove invalid characters for use in URL + public static string EscapeString(this string s) + { + if (string.IsNullOrEmpty(s)) + return string.Empty; + +#if WINDOWS_PHONE + return Regex.Replace(s, "[" + Regex.Escape(new String(Path.GetInvalidPathChars())) + "]", "-"); +#else + return Regex.Replace(s, "[" + Regex.Escape(new String(Path.GetInvalidFileNameChars())) + "]", "-"); +#endif + } + } +} diff --git a/RottenTomatoesAPI/V1/RottenTomatoesAsyncResult.cs b/RottenTomatoesAPI/V1/RottenTomatoesAsyncResult.cs new file mode 100644 index 0000000..0cfd950 --- /dev/null +++ b/RottenTomatoesAPI/V1/RottenTomatoesAsyncResult.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace RottenTomatoes.V1 +{ + public class RottenTomatoesAsyncResult + { + public T Data { get; set; } + public string Error { get; set; } + public object UserState { get; set; } + } + + public class TmdbAsyncETagResult + { + public string ETag { get; set; } + public object UserState { get; set; } + } +} diff --git a/RottenTomatoesAPI/V1/RottenTomatoesCastInfo.cs b/RottenTomatoesAPI/V1/RottenTomatoesCastInfo.cs new file mode 100644 index 0000000..44aee57 --- /dev/null +++ b/RottenTomatoesAPI/V1/RottenTomatoesCastInfo.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace RottenTomatoes.V1 +{ + public class Cast + { + public string id { get; set; } + public string name { get; set; } + public List characters { get; set; } + } + + public class CastLinks + { + public string rel { get; set; } + } + + public class RottenTomatoesCastInfo + { + public List cast { get; set; } + public CastLinks links { get; set; } + } +} diff --git a/RottenTomatoesAPI/V1/RottenTomatoesError.cs b/RottenTomatoesAPI/V1/RottenTomatoesError.cs new file mode 100644 index 0000000..def35b9 --- /dev/null +++ b/RottenTomatoesAPI/V1/RottenTomatoesError.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace RottenTomatoesAPI.V1 +{ + class RottenTomatoesError + { + public string status_message { get; set; } + } +} diff --git a/RottenTomatoesAPI/V1/RottenTomatoesMovieClips.cs b/RottenTomatoesAPI/V1/RottenTomatoesMovieClips.cs new file mode 100644 index 0000000..3e1b488 --- /dev/null +++ b/RottenTomatoesAPI/V1/RottenTomatoesMovieClips.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace RottenTomatoes.V1 +{ + public class MovieClipLinks + { + public string alternate { get; set; } + } + + public class Clip + { + public string title { get; set; } + public string duration { get; set; } + public string thumbnail { get; set; } + public MovieClipLinks links { get; set; } + } + + public class Links2 + { + public string self { get; set; } + public string alternate { get; set; } + public string rel { get; set; } + } + + public class RottenTomatoesMovieClips + { + public List clips { get; set; } + public Links2 links { get; set; } + } +} diff --git a/RottenTomatoesAPI/V1/RottenTomatoesMovieInfo.cs b/RottenTomatoesAPI/V1/RottenTomatoesMovieInfo.cs new file mode 100644 index 0000000..608cf45 --- /dev/null +++ b/RottenTomatoesAPI/V1/RottenTomatoesMovieInfo.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace RottenTomatoes.V1 +{ + public class ReleaseDates + { + public string theater { get; set; } + public string dvd { get; set; } + } + + public class Ratings + { + public string critics_rating { get; set; } + public int critics_score { get; set; } + public string audience_rating { get; set; } + public int audience_score { get; set; } + } + + public class Posters + { + public string thumbnail { get; set; } + public string profile { get; set; } + public string detailed { get; set; } + public string original { get; set; } + } + + public class AbridgedCast + { + public string name { get; set; } + public string id { get; set; } + public List characters { get; set; } + } + + public class AbridgedDirector + { + public string name { get; set; } + } + + public class AlternateIds + { + public string imdb { get; set; } + } + + public class Links + { + public string self { get; set; } + public string alternate { get; set; } + public string cast { get; set; } + public string clips { get; set; } + public string reviews { get; set; } + public string similar { get; set; } + } + + public class RottenTomatoesMovieInfo + { + public int id { get; set; } + public string title { get; set; } + public int year { get; set; } + public List genres { get; set; } + public string mpaa_rating { get; set; } + public int runtime { get; set; } + public string critics_consensus { get; set; } + public ReleaseDates release_dates { get; set; } + public Ratings ratings { get; set; } + public string synopsis { get; set; } + public Posters posters { get; set; } + public List abridged_cast { get; set; } + public List abridged_directors { get; set; } + public string studio { get; set; } + public AlternateIds alternate_ids { get; set; } + public Links links { get; set; } + } +} diff --git a/RottenTomatoesAPI/V1/RottenTomatoesRequest.cs b/RottenTomatoesAPI/V1/RottenTomatoesRequest.cs new file mode 100644 index 0000000..e8784ff --- /dev/null +++ b/RottenTomatoesAPI/V1/RottenTomatoesRequest.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace RottenTomatoes.V1 +{ + public partial class RottenTomatoesRequest + { + public string MovieID { get; set; } + + + //public RottenTomatoesRequest(string _MovieID, string _format, string _type, int _sort, int _limit) + //{ + // MovieID = _MovieID; + // format = _format; + // type = _type; + // sort = _sort; + // limit = _limit; + //} + + public RottenTomatoesRequest(string _MovieID) + { + MovieID = _MovieID; + } + } +} diff --git a/RottenTomatoesAPI/V1/WatJsonDeserializer.cs b/RottenTomatoesAPI/V1/WatJsonDeserializer.cs new file mode 100644 index 0000000..3760583 --- /dev/null +++ b/RottenTomatoesAPI/V1/WatJsonDeserializer.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp.Deserializers; + +namespace RottenTomatoes.V1 +{ + public class WatJsonDeserializer : IDeserializer + { + #region IDeserializer Members + + public T Deserialize(RestSharp.IRestResponse response) + { + if (response.Content == null) + return default(T); + + // 2012-07-26 - attempt to handle some of the bad json content, eg Similar Movies for id 80271 containing null values + // amongst the other objects in the results array + // eg ...."vote_average":0.0,"vote_count":0},null,null,{"backdrop_path":null,"id":73736,"original_title":... + // ^^^^ ^^^^ + // Causes "Object reference not set to an instance of an object" exception during deserialization + string astr = @"{""title"":" + response.Content.Substring(1, response.Content.Length - 1); + int pos = astr.IndexOf(@""":{""tmdb_id"""); + astr = astr.Substring(0, pos+1) + @",""movieinfo" + astr.Substring(pos, astr.Length - pos); + response.Content = astr; + + var deserializer = new JsonDeserializer(); + var data = deserializer.Deserialize(response); + + return data; + } + + public string DateFormat { get; set; } + public string Namespace { get; set; } + public string RootElement { get; set; } + + #endregion + } +} diff --git a/RottenTomatoesAPI/packages.config b/RottenTomatoesAPI/packages.config new file mode 100644 index 0000000..1de19f7 --- /dev/null +++ b/RottenTomatoesAPI/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/WatTmdb/Properties/AssemblyInfo.cs b/WatTmdb/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..cda59a0 --- /dev/null +++ b/WatTmdb/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WatTmdb")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Watway")] +[assembly: AssemblyProduct("WatTmdb")] +[assembly: AssemblyCopyright("Copyright © Watway 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5b410834-16c6-4953-b6ed-f04c9e9d20a7")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.6.0.0")] +[assembly: AssemblyFileVersion("0.6.0.0")] diff --git a/WatTmdb/Tmdb/Tmdb.Async.cs b/WatTmdb/Tmdb/Tmdb.Async.cs new file mode 100644 index 0000000..2326618 --- /dev/null +++ b/WatTmdb/Tmdb/Tmdb.Async.cs @@ -0,0 +1,1210 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; +using System.Net; + +namespace WatTmdb.V3 +{ + public partial class Tmdb + { + #region Process Execution + + private void ProcessAsyncRequest(RestRequest request, Action> callback) + where T : new() + { + var client = new RestClient(BASE_URL); + client.AddHandler("application/json", new WatJsonDeserializer()); + if (Timeout.HasValue) + client.Timeout = Timeout.Value; + +#if !WINDOWS_PHONE + if (Proxy != null) + client.Proxy = Proxy; +#endif + + Error = null; + + //request.AddHeader("Accept", "application/json"); + //request.AddParameter("api_key", ApiKey); + + ++AsyncCount; + var asyncHandle = client.ExecuteAsync(request, resp => + { + --AsyncCount; + var result = new TmdbAsyncResult + { + Data = resp.Data != null ? resp.Data : default(T), + UserState = request.UserState + }; + + ResponseContent = resp.Content; + ResponseHeaders = resp.Headers.ToDictionary(k => k.Name, v => v.Value); + + if (resp.ResponseStatus != ResponseStatus.Completed) + { + if (resp.Content.Contains("status_message")) + result.Error = Deserializer.Deserialize(resp); + else if (resp.ErrorException != null) + throw resp.ErrorException; + else + result.Error = new TmdbError { status_message = resp.Content }; + } + + Error = result.Error; + + callback(result); + }); + } + + private void ProcessAsyncRequestETag(RestRequest request, Action callback) + { + var client = new RestClient(BASE_URL); + if (Timeout.HasValue) + client.Timeout = Timeout.Value; + +#if !WINDOWS_PHONE + if (Proxy != null) + client.Proxy = Proxy; +#endif + + Error = null; + + request.Method = Method.HEAD; + //request.AddHeader("Accept", "application/json"); + //request.AddParameter("api_key", ApiKey); + + var asyncHandle = client.ExecuteAsync(request, resp => + { + ResponseContent = resp.Content; + ResponseHeaders = resp.Headers.ToDictionary(k => k.Name, v => v.Value); + + var result = new TmdbAsyncETagResult + { + ETag = ResponseETag, + UserState = request.UserState + }; + + if (resp.ResponseStatus != ResponseStatus.Completed && resp.ErrorException != null) + throw resp.ErrorException; + + callback(result); + }); + } + + #endregion + + + private static bool CheckQuery(string query, object userState, Action> callback) + where T : class + { + if (string.IsNullOrEmpty(query)) + { + callback(new TmdbAsyncResult + { + Data = null, + Error = new TmdbError { status_message = "Search cannot be empty" }, + UserState = userState + }); + return false; + } + + return true; + } + + #region Configuration + /// + /// Retrieve configuration data from TMDB + /// (http://help.themoviedb.org/kb/api/configuration) + /// + /// User object to include in callback + /// + public void GetConfiguration(object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetConfigurationRequest(UserState), callback); + ProcessAsyncRequest(Generator.GetConfiguration(UserState), callback); + } + + public void GetConfigurationETag(object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetConfigurationRequest(UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetConfiguration(UserState), callback); + } + #endregion + + + #region Authentication Methods + /// + /// Generate a valid request token for user based authentication. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fauthentication%2Ftoken%2Fnew + /// + /// + /// + public void GetAuthToken(object userState, Action> callback) + { + ProcessAsyncRequest(Generator.GetAuthToken(userState), callback); + } + + /// + /// Generate a session id for user based authentication. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fauthentication%2Fsession%2Fnew + /// + /// + /// + /// + public void GetAuthSession(string RequestToken, object userState, Action> callback) + { + ProcessAsyncRequest(Generator.GetAuthSession(RequestToken, userState), callback); + } + + /// + /// Generate a Guest Session id + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fauthentication%2Fguest_session%2Fnew + /// + /// + /// + public void GetGuestSession(object userState, Action> callback) + { + ProcessAsyncRequest(Generator.GetGuestSession(userState), callback); + } + #endregion + + + #region Account Methods + /// + /// Get the basic information for an account. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Faccount + /// + /// + /// + /// + public void GetAccountInfo(string SessionID, object userState, Action> callback) + { + ProcessAsyncRequest(Generator.GetAccountInfo(SessionID, userState), callback); + } + + /// + /// Get the lists that you have created and marked as a favorite. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Faccount%2F%7Bid%7D%2Flists + /// + /// + /// + /// + /// + /// + /// + public void GetAccountLists(int AccountID, string SessionID, int page, string language, object userState, Action> callback) + { + ProcessAsyncRequest(Generator.GetAccountLists(AccountID, SessionID, page, language, userState), callback); + } + + /// + /// Get the list of favourite movies for an account + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Faccount%2F%7Bid%7D%2Ffavorite_movies + /// + /// + /// + /// + /// + /// + /// + public void GetAccountFavouriteMovies(int AccountID, string SessionID, int page, string language, object userState, Action> callback) + { + ProcessAsyncRequest(Generator.GetAccountFavouriteMovies(AccountID, SessionID, page, language, userState), callback); + } + + /// + /// Get the list of rated movies for an account + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Faccount%2F%7Bid%7D%2Frated_movies + /// + /// + /// + /// + /// + /// + /// + public void GetAccountRatedMovies(int AccountID, string SessionID, int page, string language, object userState, Action> callback) + { + ProcessAsyncRequest(Generator.GetAccountRatedMovies(AccountID, SessionID, page, language, userState), callback); + } + + /// + /// Get the list of movies on an accounts watchlist + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Faccount%2F%7Bid%7D%2Fmovie_watchlist + /// + /// + /// + /// + /// + /// + /// + public void GetAccountWatchlistMovies(int AccountID, string SessionID, int page, string language, object userState, Action> callback) + { + ProcessAsyncRequest(Generator.GetAccountWatchlistMovies(AccountID, SessionID, page, language, userState), callback); + } + #endregion + + + #region Search + /// + /// Search for movies that are listed in TMDB + /// (http://help.themoviedb.org/kb/api/search-movies) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// optional - include adult items in your search, (Default=false) + /// optional - to get a closer result + /// User object to include in callback + /// + public void SearchMovie(string query, int page, string language, bool? includeAdult, int? year, object UserState, Action> callback) + { + if (CheckQuery(query, UserState, callback) == false) + return; + + //ProcessAsyncRequest(BuildSearchMovieRequest(query, page, language, includeAdult, year, UserState), callback); + ProcessAsyncRequest(Generator.SearchMovie(query, page, language, includeAdult, year, UserState), callback); + } + + /// + /// Search for movies that are listed in TMDB + /// (http://help.themoviedb.org/kb/api/search-movies) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// User object to include in callback + /// + public void SearchMovie(string query, int page, object UserState, Action> callback) + { + SearchMovie(query, page, Language, null, null, UserState, callback); + } + + /// + /// Search for people that are listed in TMDB. + /// (http://help.themoviedb.org/kb/api/search-people) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void SearchPerson(string query, int page, string language, object UserState, Action> callback) + { + if (CheckQuery(query, UserState, callback) == false) + return; + + //ProcessAsyncRequest(BuildSearchPersonRequest(query, page, language, UserState), callback); + ProcessAsyncRequest(Generator.SearchPerson(query, page, language, UserState), callback); + } + + /// + /// Search for people that are listed in TMDB. + /// (http://help.themoviedb.org/kb/api/search-people) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// User object to include in callback + /// + public void SearchPerson(string query, int page, object UserState, Action> callback) + { + SearchPerson(query, page, Language, UserState, callback); + } + + /// + /// Search for production companies that are part of TMDB. + /// (http://help.themoviedb.org/kb/api/search-companies) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// User object to include in callback + /// + public void SearchCompany(string query, int page, object UserState, Action> callback) + { + if (CheckQuery(query, UserState, callback) == false) + return; + + //ProcessAsyncRequest(BuildSearchCompanyRequest(query, page, UserState), callback); + ProcessAsyncRequest(Generator.SearchCompany(query, page, UserState), callback); + } + + /// + /// Search for keywords by name. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fsearch%2Fkeyword + /// + /// + /// + /// + /// + public void SearchKeyword(string query, int page, object UserState, Action> callback) + { + if (CheckQuery(query, UserState, callback) == false) + return; + + ProcessAsyncRequest(Generator.SearchKeyword(query, page, UserState), callback); + } + + /// + /// Search for collections by name + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fsearch%2Fcollection + /// + /// + /// + /// + /// + /// + public void SearchCollection(string query, int page, string language, object UserState, Action> callback) + { + if (CheckQuery(query, UserState, callback) == false) + return; + + ProcessAsyncRequest(Generator.SearchCollection(query, page, language, UserState), callback); + } + + #endregion + + + #region Collections + /// + /// Get all of the basic information about a movie collection. + /// (http://help.themoviedb.org/kb/api/collection-info) + /// + /// Collection ID, available in TmdbMovie::belongs_to_collection + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetCollectionInfo(int CollectionID, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetCollectionInfoRequest(CollectionID, language, UserState), callback); + ProcessAsyncRequest(Generator.GetCollectionInfo(CollectionID, language, UserState), callback); + } + + public void GetCollectionInfoETag(int CollectionID, string language, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetCollectionInfoRequest(CollectionID, language, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetCollectionInfo(CollectionID, language, UserState), callback); + } + + /// + /// Get all of the basic information about a movie collection. + /// (http://help.themoviedb.org/kb/api/collection-info) + /// + /// Collection ID, available in TmdbMovie::belongs_to_collection + /// User object to include in callback + /// + public void GetCollectionInfo(int CollectionID, object UserState, Action> callback) + { + GetCollectionInfo(CollectionID, Language, UserState, callback); + } + + public void GetCollectionInfoETag(int CollectionID, object UserState, Action callback) + { + GetCollectionInfoETag(CollectionID, Language, UserState, callback); + } + + /// + /// Get all the images for a movie collection + /// http://help.themoviedb.org/kb/api/collection-images + /// + /// Collection ID, available in TmdbMovie::belongs_to_collection + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetCollectionImages(int CollectionID, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetCollectionImagesRequest(CollectionID, language, UserState), callback); + ProcessAsyncRequest(Generator.GetCollectionImages(CollectionID, language, UserState), callback); + } + + public void GetCollectionImagesETag(int CollectionID, string language, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetCollectionImagesRequest(CollectionID, language, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetCollectionImages(CollectionID, language, UserState), callback); + } + + /// + /// Get all the images for a movie collection + /// http://help.themoviedb.org/kb/api/collection-images + /// + /// Collection ID, available in TmdbMovie::belongs_to_collection + /// User object to include in callback + /// + public void GetCollectionImages(int CollectionID, object UserState, Action> callback) + { + GetCollectionImages(CollectionID, Language, UserState, callback); + } + + public void GetCollectionImagesETag(int CollectionID, object UserState, Action callback) + { + GetCollectionImagesETag(CollectionID, Language, UserState, callback); + } + #endregion + + + #region Movie Info + /// + /// Retrieve all the basic movie information for a particular movie by TMDB reference. + /// (http://help.themoviedb.org/kb/api/movie-info) + /// + /// TMDB movie id + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetMovieInfo(int MovieID, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetMovieInfoRequest(MovieID, language, UserState), callback); + ProcessAsyncRequest(Generator.GetMovieInfo(MovieID, language, UserState), callback); + } + + public void GetMovieInfoETag(int MovieID, string language, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetMovieInfoRequest(MovieID, language, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetMovieInfo(MovieID, language, UserState), callback); + } + + /// + /// Retrieve all the basic movie information for a particular movie by TMDB reference. + /// (http://help.themoviedb.org/kb/api/movie-info) + /// + /// TMDB movie id + /// User object to include in callback + /// + public void GetMovieInfo(int MovieID, object UserState, Action> callback) + { + GetMovieInfo(MovieID, Language, UserState, callback); + } + + public void GetMovieInfoETag(int MovieID, object UserState, Action callback) + { + GetMovieInfoETag(MovieID, Language, UserState, callback); + } + + /// + /// Retrieve all the basic movie information for a particular movie by IMDB reference. + /// (http://help.themoviedb.org/kb/api/movie-info) + /// + /// IMDB movie id + /// + public void GetMovieByIMDB(string IMDB_ID, string language, object UserState, Action> callback) + { + if (CheckQuery(IMDB_ID, UserState, callback) == false) + return; + + //ProcessAsyncRequest(BuildGetMovieByIMDBRequest(IMDB_ID, language, UserState), callback); + ProcessAsyncRequest(Generator.GetMovieByIMDB(IMDB_ID, language, UserState), callback); + } + + public void GetMovieByIMDB(string IMDB_ID, object UserState, Action> callback) + { + GetMovieByIMDB(IMDB_ID, Language, UserState, callback); + } + + /// + /// Get list of all the alternative titles for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-alternative-titles) + /// + /// TMDB movie id + /// ISO 3166-1 country code (optional) + /// User object to include in callback + /// + public void GetMovieAlternateTitles(int MovieID, string Country, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetMovieAlternateTitlesRequest(MovieID, Country, UserState), callback); + ProcessAsyncRequest(Generator.GetMovieAlternateTitles(MovieID, Country, UserState), callback); + } + + public void GetMovieAlternateTitlesETag(int MovieID, string Country, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetMovieAlternateTitlesRequest(MovieID, Country, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetMovieAlternateTitles(MovieID, Country, UserState), callback); + } + + /// + /// Get list of all the cast information for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-casts) + /// + /// TMDB movie id + /// User object to include in callback + /// + public void GetMovieCast(int MovieID, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetMovieCastRequest(MovieID, UserState), callback); + ProcessAsyncRequest(Generator.GetMovieCast(MovieID, UserState), callback); + } + + public void GetMovieCastETag(int MovieID, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetMovieCastRequest(MovieID, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetMovieCast(MovieID, UserState), callback); + } + + /// + /// Get list of all the images for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-images) + /// + /// TMDB movie id + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetMovieImages(int MovieID, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetMovieImagesRequest(MovieID, language, UserState), callback); + ProcessAsyncRequest(Generator.GetMovieImages(MovieID, language, UserState), callback); + } + + public void GetMovieImagesETag(int MovieID, string language, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetMovieImagesRequest(MovieID, language, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetMovieImages(MovieID, language, UserState), callback); + } + + /// + /// Get list of all the images for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-images) + /// + /// TMDB movie id + /// User object to include in callback + /// + public void GetMovieImages(int MovieID, object UserState, Action> callback) + { + GetMovieImages(MovieID, Language, UserState, callback); + } + + public void GetMovieImagesETag(int MovieID, object UserState, Action callback) + { + GetMovieImagesETag(MovieID, Language, UserState, callback); + } + + /// + /// Get list of all the keywords that have been added to a particular movie. Only English keywords exist currently. + /// (http://help.themoviedb.org/kb/api/movie-keywords) + /// + /// TMDB movie id + /// User object to include in callback + /// + public void GetMovieKeywords(int MovieID, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetMovieKeywordsRequest(MovieID, UserState), callback); + ProcessAsyncRequest(Generator.GetMovieKeywords(MovieID, UserState), callback); + } + + public void GetMovieKeywordsETag(int MovieID, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetMovieKeywordsRequest(MovieID, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetMovieKeywords(MovieID, UserState), callback); + } + + /// + /// Get all the release and certification data in TMDB for a particular movie + /// (http://help.themoviedb.org/kb/api/movie-release-info) + /// + /// TMDB movie id + /// User object to include in callback + /// + public void GetMovieReleases(int MovieID, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetMovieReleasesRequest(MovieID, UserState), callback); + ProcessAsyncRequest(Generator.GetMovieReleases(MovieID, UserState), callback); + } + + public void GetMovieReleasesETag(int MovieID, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetMovieReleasesRequest(MovieID, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetMovieReleases(MovieID, UserState), callback); + } + + /// + /// Get list of trailers for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-trailers) + /// + /// TMDB movie id + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetMovieTrailers(int MovieID, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetMovieTrailersRequest(MovieID, language, UserState), callback); + ProcessAsyncRequest(Generator.GetMovieTrailers(MovieID, language, UserState), callback); + } + + public void GetMovieTrailersETag(int MovieID, string language, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetMovieTrailersRequest(MovieID, language, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetMovieTrailers(MovieID, language, UserState), callback); + } + + /// + /// Get list of trailers for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-trailers) + /// + /// TMDB movie id + /// User object to include in callback + /// + public void GetMovieTrailers(int MovieID, object UserState, Action> callback) + { + GetMovieTrailers(MovieID, Language, UserState, callback); + } + + public void GetMovieTrailersETag(int MovieID, object UserState, Action callback) + { + GetMovieTrailersETag(MovieID, Language, UserState, callback); + } + + /// + /// Get list of all available translations for a specific movie. + /// (http://help.themoviedb.org/kb/api/movie-translations) + /// + /// TMDB movie id + /// + /// User object to include in callback + /// + public void GetMovieTranslations(int MovieID, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetMovieTranslationsRequest(MovieID, UserState), callback); + ProcessAsyncRequest(Generator.GetMovieTranslations(MovieID, UserState), callback); + } + + public void GetMovieTranslationsETag(int MovieID, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetMovieTranslationsRequest(MovieID, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetMovieTranslations(MovieID, UserState), callback); + } + + /// + /// Get the lists that the movie belongs to. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fmovie%2F%7Bid%7D%2Flists + /// + /// + /// + /// + /// + /// + public void GetMovieLists(int MovieID, int page, string language, object UserState, Action> callback) + { + ProcessAsyncRequest(Generator.GetMovieLists(MovieID, page, language, UserState), callback); + } + + /// + /// Get list of changes for a specific movie, grouped by key and ordered by date in descending order. + /// (http://docs.themoviedb.apiary.io/#get-%2F3%2Fmovie%2F%7Bid%7D%2Fchanges) + /// + /// + /// + /// + public void GetMovieChanges(int MovieID, object userState, Action> callback) + { + ProcessAsyncRequest(Generator.GetMovieChanges(MovieID, userState), callback); + } + + public void GetMovieChangesETag(int MovieID, object userState, Action callback) + { + ProcessAsyncRequestETag(ETagGenerator.GetMovieChanges(MovieID, userState), callback); + } + + /// + /// Get list of similar movies for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-similar-movies) + /// + /// TMDB movie id + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetSimilarMovies(int MovieID, int page, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetSimilarMoviesRequest(MovieID, page, language, UserState), callback); + ProcessAsyncRequest(Generator.GetSimilarMovies(MovieID, page, language, UserState), callback); + } + + /// + /// Get list of similar movies for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-similar-movies) + /// + /// TMDB movie id + /// Result page to retrieve (1 based) + /// User object to include in callback + /// + public void GetSimilarMovies(int MovieID, int page, object UserState, Action> callback) + { + GetSimilarMovies(MovieID, page, Language, UserState, callback); + } + + /// + /// Get list of movies that are arriving to theatres in the next few weeks. + /// (http://help.themoviedb.org/kb/api/upcoming-movies) + /// + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetUpcomingMovies(int page, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetUpcomingMoviesRequest(page, language, UserState), callback); + ProcessAsyncRequest(Generator.GetUpcomingMovies(page, language, UserState), callback); + } + + /// + /// Get list of movies that are arriving to theatres in the next few weeks. + /// (http://help.themoviedb.org/kb/api/upcoming-movies) + /// + /// Result page to retrieve (1 based) + /// User object to include in callback + /// + public void GetUpcomingMovies(int page, object UserState, Action> callback) + { + GetUpcomingMovies(page, Language, UserState, callback); + } + + #endregion + + + #region Person Info + /// + /// Get all of the basic information for a person. + /// (http://help.themoviedb.org/kb/api/person-info) + /// + /// Person ID + /// User object to include in callback + /// + public void GetPersonInfo(int PersonID, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetPersonInfoRequest(PersonID, UserState), callback); + ProcessAsyncRequest(Generator.GetPersonInfo(PersonID, UserState), callback); + } + + public void GetPersonInfoETag(int PersonID, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetPersonInfoRequest(PersonID, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetPersonInfo(PersonID, UserState), callback); + } + + /// + /// Get list of cast and crew information for a person. + /// (http://help.themoviedb.org/kb/api/person-credits) + /// + /// Person ID + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetPersonCredits(int PersonID, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetPersonCreditsRequest(PersonID, language, UserState), callback); + ProcessAsyncRequest(Generator.GetPersonCredits(PersonID, language, UserState), callback); + } + + public void GetPersonCreditsETag(int PersonID, string language, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetPersonCreditsRequest(PersonID, language, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetPersonCredits(PersonID, language, UserState), callback); + } + + /// + /// Get list of cast and crew information for a person. + /// (http://help.themoviedb.org/kb/api/person-credits) + /// + /// Person ID + /// User object to include in callback + /// + public void GetPersonCredits(int PersonID, object UserState, Action> callback) + { + GetPersonCredits(PersonID, Language, UserState, callback); + } + + public void GetPersonCreditsETag(int PersonID, object UserState, Action callback) + { + GetPersonCreditsETag(PersonID, Language, UserState, callback); + } + + /// + /// Get list of images for a person. + /// (http://help.themoviedb.org/kb/api/person-images) + /// + /// Person ID + /// User object to include in callback + /// + public void GetPersonImages(int PersonID, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetPersonImagesRequest(PersonID, UserState), callback); + ProcessAsyncRequest(Generator.GetPersonImages(PersonID, UserState), callback); + } + + public void GetPersonImagesETag(int PersonID, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetPersonImagesRequest(PersonID, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetPersonImages(PersonID, UserState), callback); + } + + /// + /// Get the list of changes for a specific person. Changes are grouped by key and ordered by date in descending order. + /// (http://docs.themoviedb.apiary.io/#get-%2F3%2Fperson%2F%7Bid%7D%2Fchanges) + /// + /// + /// + /// + public void GetPersonChanges(int PersonID, object userState, Action> callback) + { + ProcessAsyncRequest(Generator.GetPersonChanges(PersonID, userState), callback); + } + + public void GetPersonChangesETag(int PersonID, object userState, Action callback) + { + ProcessAsyncRequestETag(ETagGenerator.GetPersonChanges(PersonID, userState), callback); + } + #endregion + + + #region Miscellaneous Movie + /// + /// Get the newest movie added to the TMDB. + /// (http://help.themoviedb.org/kb/api/latest-movie) + /// + /// User object to include in callback + /// + /// + public void GetLatestMovie(object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetLatestMovieRequest(UserState), callback); + ProcessAsyncRequest(Generator.GetLatestMovies(UserState), callback); + } + + public void GetLatestMovieETag(object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetLatestMovieRequest(UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetLatestMovies(UserState), callback); + } + + /// + /// Get the list of movies currently in theatres. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/now-playing-movies) + /// + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetNowPlayingMovies(int page, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetNowPlayingMoviesRequest(page, language, UserState), callback); + ProcessAsyncRequest(Generator.GetNowPlayingMovies(page, language, UserState), callback); + } + + public void GetNowPlayingMoviesETag(int page, string language, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetNowPlayingMoviesRequest(page, language, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetNowPlayingMovies(page, language, UserState), callback); + } + + /// + /// Get the list of movies currently in theatres. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/now-playing-movies) + /// + /// Result page to retrieve (1 based) + /// User object to include in callback + /// + public void GetNowPlayingMovies(int page, object UserState, Action> callback) + { + GetNowPlayingMovies(page, Language, UserState, callback); + } + + public void GetNowPlayingMoviesETag(int page, object UserState, Action callback) + { + GetNowPlayingMoviesETag(page, Language, UserState, callback); + } + + /// + /// Get the daily popularity list of movies. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/popular-movie-list) + /// + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetPopularMovies(int page, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetPopularMoviesRequest(page, language, UserState), callback); + ProcessAsyncRequest(Generator.GetPopularMovies(page, language, UserState), callback); + } + + public void GetPopularMoviesETag(int page, string language, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetPopularMoviesRequest(page, language, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetPopularMovies(page, language, UserState), callback); + } + + /// + /// Get the daily popularity list of movies. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/popular-movie-list) + /// + /// Result page to retrieve (1 based) + /// User object to include in callback + /// + public void GetPopularMovies(int page, object UserState, Action> callback) + { + GetPopularMovies(page, Language, UserState, callback); + } + + public void GetPopularMoviesETag(int page, object UserState, Action callback) + { + GetPopularMoviesETag(page, Language, UserState, callback); + } + + /// + /// Get list of movies that have over 10 votes on TMDB. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/top-rated-movies) + /// + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetTopRatedMovies(int page, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetTopRatedMoviesRequest(page, language, UserState), callback); + ProcessAsyncRequest(Generator.GetTopRatedMovies(page, language, UserState), callback); + } + + public void GetTopRatedMoviesETag(int page, string language, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetTopRatedMoviesRequest(page, language, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetTopRatedMovies(page, language, UserState), callback); + } + + /// + /// Get list of movies that have over 10 votes on TMDB. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/top-rated-movies) + /// + /// Result page to retrieve (1 based) + /// User object to include in callback + /// + public void GetTopRatedMovies(int page, object UserState, Action> callback) + { + GetTopRatedMovies(page, Language, UserState, callback); + } + + public void GetTopRatedMoviesETag(int page, object UserState, Action callback) + { + GetTopRatedMoviesETag(page, Language, UserState, callback); + } + + #endregion + + + #region Lists Methods + + /// + /// Get a list by id + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Flist%2F%7Bid%7D + /// + /// + /// + /// + public void GetList(string ListID, object UserState, Action> callback) + { + ProcessAsyncRequest(Generator.GetList(ListID, UserState), callback); + } + + #endregion + + + #region Company Info + /// + /// Get basic information about a production company from TMDB. + /// (http://help.themoviedb.org/kb/api/company-info) + /// + /// Company ID + /// User object to include in callback + /// + public void GetCompanyInfo(int CompanyID, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetCompanyInfoRequest(CompanyID, UserState), callback); + ProcessAsyncRequest(Generator.GetCompanyInfo(CompanyID, UserState), callback); + } + + public void GetCompanyInfoETag(int CompanyID, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetCompanyInfoRequest(CompanyID, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetCompanyInfo(CompanyID, UserState), callback); + } + + /// + /// Get list of movies associated with a company. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/company-movies) + /// + /// Company ID + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetCompanyMovies(int CompanyID, int page, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetCompanyMoviesRequest(CompanyID, page, language, UserState), callback); + ProcessAsyncRequest(Generator.GetCompanyMovies(CompanyID, page, language, UserState), callback); + } + + public void GetCompanyMoviesETag(int CompanyID, int page, string language, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetCompanyMoviesRequest(CompanyID, page, language, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetCompanyMovies(CompanyID, page, language, UserState), callback); + } + + /// + /// Get list of movies associated with a company. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/company-movies) + /// + /// Company ID + /// Result page to retrieve (1 based) + /// User object to include in callback + /// + public void GetCompanyMovies(int CompanyID, int page, object UserState, Action> callback) + { + GetCompanyMovies(CompanyID, page, Language, UserState, callback); + } + + public void GetCompanyMoviesETag(int CompanyID, int page, object UserState, Action callback) + { + GetCompanyMoviesETag(CompanyID, page, Language, UserState, callback); + } + #endregion + + + #region Genre Info + /// + /// Get list of genres used in TMDB. The ids will correspond to those found in movie calls. + /// (http://help.themoviedb.org/kb/api/genre-list) + /// + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetGenreList(string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetGenreListRequest(language, UserState), callback); + ProcessAsyncRequest(Generator.GetGenreList(language, UserState), callback); + } + + public void GetGenreListETag(string language, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetGenreListRequest(language, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetGenreList(language, UserState), callback); + } + + /// + /// Get list of genres used in TMDB. The ids will correspond to those found in movie calls. + /// (http://help.themoviedb.org/kb/api/genre-list) + /// + /// User object to include in callback + /// + public void GetGenreList(object UserState, Action> callback) + { + GetGenreList(Language, UserState, callback); + } + + public void GetGenreListETag(object UserState, Action callback) + { + GetGenreListETag(Language, UserState, callback); + } + + /// + /// Get list of movies in a Genre. Note that only movies with more than 10 votes get listed. + /// (http://help.themoviedb.org/kb/api/genre-movies) + /// + /// TMDB Genre ID + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// User object to include in callback + /// + public void GetGenreMovies(int GenreID, int page, string language, object UserState, Action> callback) + { + //ProcessAsyncRequest(BuildGetGenreMoviesRequest(GenreID, page, language, UserState), callback); + ProcessAsyncRequest(Generator.GetGenreMovies(GenreID, page, language, UserState), callback); + } + + public void GetGenreMoviesETag(int GenreID, int page, string language, object UserState, Action callback) + { + //ProcessAsyncRequestETag(BuildGetGenreMoviesRequest(GenreID, page, language, UserState), callback); + ProcessAsyncRequestETag(ETagGenerator.GetGenreMovies(GenreID, page, language, UserState), callback); + } + + /// + /// Get list of movies in a Genre. Note that only movies with more than 10 votes get listed. + /// (http://help.themoviedb.org/kb/api/genre-movies) + /// + /// TMDB Genre ID + /// Result page to retrieve (1 based) + /// User object to include in callback + /// + public void GetGenreMovies(int GenreID, int page, object UserState, Action> callback) + { + GetGenreMovies(GenreID, page, Language, UserState, callback); + } + + public void GetGenreMoviesETag(int GenreID, int page, object UserState, Action callback) + { + GetGenreMoviesETag(GenreID, page, Language, UserState, callback); + } + #endregion + + + #region Keyword methods + + /// + /// Get the basic information for a specific keyword id. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fkeyword%2F%7Bid%7D + /// + /// + /// + /// + public void GetKeyword(int KeywordID, object UserState, Action> callback) + { + ProcessAsyncRequest(Generator.GetKeyword(KeywordID, UserState), callback); + } + + /// + /// Get the list of movies for a particular keyword by id. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fkeyword%2F%7Bid%7D%2Fmovies + /// + /// + /// + /// + /// + /// + public void GetKeywordMovies(int KeywordID, int page, string Language, object UserState, Action> callback) + { + ProcessAsyncRequest(Generator.GetKeywordMovies(KeywordID, page, Language, UserState), callback); + } + + #endregion + + + #region Changes methods + + /// + /// Get a list of movie ids that have been edited. By default results include the last 24 hours with + /// 100 items per page. Then use the method GetMovieChanges to get the data that has changed. + /// (http://docs.themoviedb.apiary.io/#get-%2F3%2Fmovie%2Fchanges) + /// + /// + /// + /// + /// + /// + public void GetChangesByMovie(int page, DateTime? StartDate, DateTime? EndDate, object userState, Action> callback) + { + ProcessAsyncRequest(Generator.GetChangesByMovie(page, StartDate, EndDate, userState), callback); + } + + /// + /// Get a list of person ids that have been edited. By default results include the last 24 hours with + /// 100 items per page. Then use the method GetPersonChanges to get the data that has changed. + /// (http://docs.themoviedb.apiary.io/#get-%2F3%2Fperson%2Fchanges) + /// + /// + /// + /// + /// + /// + public void GetChangesByPerson(int page, DateTime? StartDate, DateTime? EndDate, object userState, Action> callback) + { + ProcessAsyncRequest(Generator.GetChangesByPerson(page, StartDate, EndDate, userState), callback); + } + + #endregion + } +} diff --git a/WatTmdb/Tmdb/Tmdb.Sync.cs b/WatTmdb/Tmdb/Tmdb.Sync.cs new file mode 100644 index 0000000..f15788e --- /dev/null +++ b/WatTmdb/Tmdb/Tmdb.Sync.cs @@ -0,0 +1,885 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; +using System.Net; + +namespace WatTmdb.V3 +{ + public partial class Tmdb + { + #region Process Execution + + private T ProcessRequest(RestRequest request) + where T : new() + { + var client = new RestClient(BASE_URL); + client.AddHandler("application/json", new WatJsonDeserializer()); + + if (Timeout.HasValue) + client.Timeout = Timeout.Value; + +#if !WINDOWS_PHONE + if (Proxy != null) + client.Proxy = Proxy; +#endif + + Error = null; + + //request.AddHeader("Accept", "application/json"); + //request.AddParameter("api_key", ApiKey); + + var resp = client.Execute(request); + + ResponseContent = resp.Content; + ResponseHeaders = resp.Headers.ToDictionary(k => k.Name, v => v.Value); + + if (resp.ResponseStatus == ResponseStatus.Completed) + { + if (resp.Content.Contains("status_message")) + Error = Deserializer.Deserialize(resp); + + return resp.Data; + } + else + { + if (resp.Content.Contains("status_message")) + Error = Deserializer.Deserialize(resp); + else if (resp.ErrorException != null) + throw resp.ErrorException; + else + Error = new TmdbError { status_message = resp.ErrorMessage }; + } + + return default(T); + } + + private string ProcessRequestETag(RestRequest request) + { + var client = new RestClient(BASE_URL); + if (Timeout.HasValue) + client.Timeout = Timeout.Value; + +#if !WINDOWS_PHONE + if (Proxy != null) + client.Proxy = Proxy; +#endif + Error = null; + + request.Method = Method.HEAD; + //request.AddHeader("Accept", "application/json"); + //request.AddParameter("api_key", ApiKey); + + var resp = client.Execute(request); + ResponseContent = resp.Content; + ResponseHeaders = resp.Headers.ToDictionary(k => k.Name, v => v.Value); + + if (resp.ResponseStatus != ResponseStatus.Completed && resp.ErrorException != null) + throw resp.ErrorException; + + return this.ResponseETag; + } + + #endregion + + + #region Configuration + /// + /// Retrieve configuration data from TMDB + /// (http://help.themoviedb.org/kb/api/configuration) + /// + /// + public TmdbConfiguration GetConfiguration() + { + //return ProcessRequest(BuildGetConfigurationRequest()); + return ProcessRequest(Generator.GetConfiguration()); + } + + public string GetConfigurationETag() + { + //return ProcessRequestETag(BuildGetConfigurationRequest()); + return ProcessRequestETag(Generator.GetConfiguration()); + } + + #endregion + + + #region Authentication + + /// + /// Generate a valid request token for user based authentication. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fauthentication%2Ftoken%2Fnew + /// + /// + public TmdbAuthToken GetAuthToken() + { + return ProcessRequest(Generator.GetAuthToken()); + } + + /// + /// Generate a session id for user based authentication. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fauthentication%2Fsession%2Fnew + /// + /// + /// + public TmdbAuthSession GetAuthSession(string RequestToken) + { + return ProcessRequest(Generator.GetAuthSession(RequestToken)); + } + + /// + /// Generate a Guest Session id + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fauthentication%2Fguest_session%2Fnew + /// + /// + public TmdbGuestSession GetGuestSession() + { + return ProcessRequest(Generator.GetGuestSession()); + } + + #endregion + + + #region Account Methods + + /// + /// Get the basic information for an account. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Faccount + /// + /// + /// + public TmdbAccount GetAccountInfo(string SessionID) + { + return ProcessRequest(Generator.GetAccountInfo(SessionID)); + } + + /// + /// Get the lists that you have created and marked as a favorite. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Faccount%2F%7Bid%7D%2Flists + /// + /// + /// + /// + /// + /// + public TmdbList GetAccountLists(int AccountID, string SessionID, int page, string language = "") + { + return ProcessRequest(Generator.GetAccountLists(AccountID, SessionID, page, language)); + } + + /// + /// Get the list of favourite movies for an account + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Faccount%2F%7Bid%7D%2Ffavorite_movies + /// + /// + /// + /// + /// + /// + public TmdbAccountMovies GetAccountFavouriteMovies(int AccountID, string SessionID, int page, string language = "") + { + return ProcessRequest(Generator.GetAccountFavouriteMovies(AccountID, SessionID, page, language)); + } + + /// + /// Get the list of rated movies for an account + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Faccount%2F%7Bid%7D%2Frated_movies + /// + /// + /// + /// + /// + /// + public TmdbAccountMovies GetAccountRatedMovies(int AccountID, string SessionID, int page, string language = "") + { + return ProcessRequest(Generator.GetAccountRatedMovies(AccountID, SessionID, page, language)); + } + + /// + /// Get the list of movies on an accounts watchlist + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Faccount%2F%7Bid%7D%2Fmovie_watchlist + /// + /// + /// + /// + /// + /// + public TmdbAccountMovies GetAccountWatchlistMovies(int AccountID, string SessionID, int page, string language = "") + { + return ProcessRequest(Generator.GetAccountWatchlistMovies(AccountID, SessionID, page, language)); + } + + #endregion + + + #region Search + /// + /// Search for movies that are listed in TMDB + /// (http://help.themoviedb.org/kb/api/search-movies) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// optional - include adult items in your search, (Default=false) + /// optional - to get a closer result + /// + public TmdbMovieSearch SearchMovie(string query, int page, string language = "", bool? includeAdult = null, int? year = null) + { + if (string.IsNullOrEmpty(query)) + throw new ArgumentException("Search must be supplied"); + + //return ProcessRequest(BuildSearchMovieRequest(query, page, language, includeAdult, year)); + return ProcessRequest(Generator.SearchMovie(query, page, language, includeAdult, year)); + } + + /// + /// Search for people that are listed in TMDB. + /// (http://help.themoviedb.org/kb/api/search-people) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbPersonSearch SearchPerson(string query, int page, string language = "") + { + if (string.IsNullOrEmpty(query)) + throw new ArgumentException("Search must be supplied"); + + //return ProcessRequest(BuildSearchPersonRequest(query, page, language)); + return ProcessRequest(Generator.SearchPerson(query, page, language)); + } + + /// + /// Search for production companies that are part of TMDB. + /// (http://help.themoviedb.org/kb/api/search-companies) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// + public TmdbCompanySearch SearchCompany(string query, int page) + { + if (string.IsNullOrEmpty(query)) + throw new ArgumentException("Search must be supplied"); + + //return ProcessRequest(BuildSearchCompanyRequest(query, page)); + return ProcessRequest(Generator.SearchCompany(query, page)); + } + + /// + /// Search for keywords by name. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fsearch%2Fkeyword + /// + /// + /// + /// + public TmdbKeywordSearch SearchKeyword(string query, int page) + { + if (string.IsNullOrEmpty(query)) + throw new ArgumentException("Search must be supplied"); + + return ProcessRequest(Generator.SearchKeyword(query, page)); + } + + /// + /// Search for collections by name + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fsearch%2Fcollection + /// + /// + /// + /// + public TmdbCollectionSearch SearchCollection(string query, int page, string language = "") + { + if (string.IsNullOrEmpty(query)) + throw new ArgumentException("Search must be supplied"); + + return ProcessRequest(Generator.SearchCollection(query, page, language)); + } + + #endregion + + + #region Collections + /// + /// Get all of the basic information about a movie collection. + /// (http://help.themoviedb.org/kb/api/collection-info) + /// + /// Collection ID, available in TmdbMovie::belongs_to_collection + /// optional - ISO 639-1 language code + /// + public TmdbCollection GetCollectionInfo(int CollectionID, string language = "") + { + //return ProcessRequest(BuildGetCollectionInfoRequest(CollectionID, language)); + return ProcessRequest(Generator.GetCollectionInfo(CollectionID, language)); + } + + public string GetCollectionInfoETag(int CollectionID, string language = "") + { + //return ProcessRequestETag(BuildGetCollectionInfoRequest(CollectionID, language)); + return ProcessRequestETag(ETagGenerator.GetCollectionInfo(CollectionID, language)); + } + + /// + /// Get all the images for a movie collection + /// http://help.themoviedb.org/kb/api/collection-images + /// + /// Collection ID, available in TmdbMovie::belongs_to_collection + /// optional - ISO 639-1 language code + /// + public TmdbCollectionImages GetCollectionImages(int CollectionID, string language = "") + { + //return ProcessRequest(BuildGetCollectionImagesRequest(CollectionID, language)); + return ProcessRequest(Generator.GetCollectionImages(CollectionID, language)); + } + + public string GetCollectionImagesETag(int CollectionID, string language = "") + { + //return ProcessRequestETag(BuildGetCollectionImagesRequest(CollectionID, language)); + return ProcessRequestETag(ETagGenerator.GetCollectionImages(CollectionID, language)); + } + + #endregion + + + #region Movie Info + /// + /// Retrieve all the basic movie information for a particular movie by TMDB reference. + /// (http://help.themoviedb.org/kb/api/movie-info) + /// + /// TMDB movie id + /// optional - ISO 639-1 language code + /// + public TmdbMovie GetMovieInfo(int MovieID, string language = "") + { + //return ProcessRequest(BuildGetMovieInfoRequest(MovieID, language)); + return ProcessRequest(Generator.GetMovieInfo(MovieID, language)); + } + + public string GetMovieInfoETag(int MovieID, string language = "") + { + //return ProcessRequestETag(BuildGetMovieInfoRequest(MovieID, language)); + return ProcessRequestETag(ETagGenerator.GetMovieInfo(MovieID, language)); + } + + /// + /// Retrieve all the basic movie information for a particular movie by IMDB reference. + /// (http://help.themoviedb.org/kb/api/movie-info) + /// + /// IMDB movie id + /// + public TmdbMovie GetMovieByIMDB(string imdbId, string language = "") + { + if (string.IsNullOrEmpty(imdbId)) + throw new ArgumentException("IMDB_ID must be supplied"); + + //return ProcessRequest(BuildGetMovieByIMDBRequest(imdbId, language)); + return ProcessRequest(Generator.GetMovieByIMDB(imdbId, language)); + } + + /// + /// Get list of all the alternative titles for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-alternative-titles) + /// + /// TMDB movie id + /// ISO 3166-1 country code (optional) + /// + public TmdbMovieAlternateTitles GetMovieAlternateTitles(int MovieID, string Country) + { + //return ProcessRequest(BuildGetMovieAlternateTitlesRequest(MovieID, Country)); + return ProcessRequest(Generator.GetMovieAlternateTitles(MovieID, Country)); + } + + public string GetMovieAlternateTitlesETag(int MovieID, string Country) + { + //return ProcessRequestETag(BuildGetMovieAlternateTitlesRequest(MovieID, Country)); + return ProcessRequestETag(ETagGenerator.GetMovieAlternateTitles(MovieID, Country)); + } + + /// + /// Get list of all the cast information for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-casts) + /// + /// TMDB movie id + /// + public TmdbMovieCast GetMovieCast(int MovieID) + { + //return ProcessRequest(BuildGetMovieCastRequest(MovieID)); + return ProcessRequest(Generator.GetMovieCast(MovieID)); + } + + public string GetMovieCastETag(int MovieID) + { + //return ProcessRequestETag(BuildGetMovieCastRequest(MovieID)); + return ProcessRequestETag(ETagGenerator.GetMovieCast(MovieID)); + } + + /// + /// Get list of all the images for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-images) + /// + /// TMDB movie id + /// optional - ISO 639-1 language code + /// + public TmdbMovieImages GetMovieImages(int MovieID, string language = "") + { + //return ProcessRequest(BuildGetMovieImagesRequest(MovieID, language)); + return ProcessRequest(Generator.GetMovieImages(MovieID, language)); + } + + public string GetMovieImagesETag(int MovieID, string language = "") + { + //return ProcessRequestETag(BuildGetMovieImagesRequest(MovieID, language)); + return ProcessRequestETag(ETagGenerator.GetMovieImages(MovieID, language)); + } + + /// + /// Get list of all the keywords that have been added to a particular movie. Only English keywords exist currently. + /// (http://help.themoviedb.org/kb/api/movie-keywords) + /// + /// TMDB movie id + /// + public TmdbMovieKeywords GetMovieKeywords(int MovieID) + { + //return ProcessRequest(BuildGetMovieKeywordsRequest(MovieID)); + return ProcessRequest(Generator.GetMovieKeywords(MovieID)); + } + + public string GetMovieKeywordsETag(int MovieID) + { + //return ProcessRequestETag(BuildGetMovieKeywordsRequest(MovieID)); + return ProcessRequestETag(ETagGenerator.GetMovieKeywords(MovieID)); + } + + /// + /// Get all the release and certification data in TMDB for a particular movie + /// (http://help.themoviedb.org/kb/api/movie-release-info) + /// + /// TMDB movie id + /// + public TmdbMovieReleases GetMovieReleases(int MovieID) + { + //return ProcessRequest(BuildGetMovieReleasesRequest(MovieID)); + return ProcessRequest(Generator.GetMovieReleases(MovieID)); + } + + public string GetMovieReleasesETag(int MovieID) + { + //return ProcessRequestETag(BuildGetMovieReleasesRequest(MovieID)); + return ProcessRequestETag(ETagGenerator.GetMovieReleases(MovieID)); + } + + /// + /// Get list of trailers for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-trailers) + /// + /// TMDB movie id + /// optional - ISO 639-1 language code + /// + public TmdbMovieTrailers GetMovieTrailers(int MovieID, string language = "") + { + //return ProcessRequest(BuildGetMovieTrailersRequest(MovieID, language)); + return ProcessRequest(Generator.GetMovieTrailers(MovieID, language)); + } + + public string GetMovieTrailersETag(int MovieID, string language = "") + { + //return ProcessRequestETag(BuildGetMovieTrailersRequest(MovieID, language)); + return ProcessRequestETag(ETagGenerator.GetMovieTrailers(MovieID, language)); + } + + /// + /// Get list of similar movies for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-similar-movies) + /// + /// TMDB movie id + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbSimilarMovies GetSimilarMovies(int MovieID, int page, string language = null) + { + //return ProcessRequest(BuildGetSimilarMoviesRequest(MovieID, page, language)); + return ProcessRequest(Generator.GetSimilarMovies(MovieID, page, language)); + } + + /// + /// Get list of all available translations for a specific movie. + /// (http://help.themoviedb.org/kb/api/movie-translations) + /// + /// TMDB movie id + /// + public TmdbTranslations GetMovieTranslations(int MovieID) + { + //return ProcessRequest(BuildGetMovieTranslationsRequest(MovieID)); + return ProcessRequest(Generator.GetMovieTranslations(MovieID)); + } + + public string GetMovieTranslationsETag(int MovieID) + { + //return ProcessRequestETag(BuildGetMovieTranslationsRequest(MovieID)); + return ProcessRequestETag(ETagGenerator.GetMovieTranslations(MovieID)); + } + + /// + /// Get the lists that the movie belongs to. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fmovie%2F%7Bid%7D%2Flists + /// + /// + /// + /// + /// + public TmdbList GetMovieLists(int MovieID, int page, string language = null) + { + return ProcessRequest(Generator.GetMovieLists(MovieID, page, language)); + } + + /// + /// Get list of changes for a specific movie, grouped by key and ordered by date in descending order. + /// (http://docs.themoviedb.apiary.io/#get-%2F3%2Fmovie%2F%7Bid%7D%2Fchanges) + /// + /// TMDB Movie ID + /// + public TmdbMovieChanges GetMovieChanges(int MovieID) + { + return ProcessRequest(Generator.GetMovieChanges(MovieID)); + } + + public string GetMovieChangesETag(int MovieID) + { + return ProcessRequestETag(ETagGenerator.GetMovieChanges(MovieID)); + } + #endregion + + + #region Person Info + /// + /// Get all of the basic information for a person. + /// (http://help.themoviedb.org/kb/api/person-info) + /// + /// Person ID + /// + public TmdbPerson GetPersonInfo(int PersonID) + { + //return ProcessRequest(BuildGetPersonInfoRequest(PersonID)); + return ProcessRequest(Generator.GetPersonInfo(PersonID)); + } + + public string GetPersonInfoETag(int PersonID) + { + //return ProcessRequestETag(BuildGetPersonInfoRequest(PersonID)); + return ProcessRequestETag(ETagGenerator.GetPersonInfo(PersonID)); + } + + /// + /// Get list of cast and crew information for a person. + /// (http://help.themoviedb.org/kb/api/person-credits) + /// + /// Person ID + /// optional - ISO 639-1 language code + /// + public TmdbPersonCredits GetPersonCredits(int PersonID, string language = null) + { + //return ProcessRequest(BuildGetPersonCreditsRequest(PersonID, language)); + return ProcessRequest(Generator.GetPersonCredits(PersonID, language)); + } + + public string GetPersonCreditsETag(int PersonID, string language = null) + { + //return ProcessRequestETag(BuildGetPersonCreditsRequest(PersonID, language)); + return ProcessRequestETag(ETagGenerator.GetPersonCredits(PersonID, language)); + } + + /// + /// Get list of images for a person. + /// (http://help.themoviedb.org/kb/api/person-images) + /// + /// Person ID + /// + public TmdbPersonImages GetPersonImages(int PersonID) + { + //return ProcessRequest(BuildGetPersonImagesRequest(PersonID)); + return ProcessRequest(Generator.GetPersonImages(PersonID)); + } + + public string GetPersonImagesETag(int PersonID) + { + //return ProcessRequestETag(BuildGetPersonImagesRequest(PersonID)); + return ProcessRequestETag(ETagGenerator.GetPersonImages(PersonID)); + } + + /// + /// Get the list of changes for a specific person. Changes are grouped by key and ordered by date in descending order. + /// (http://docs.themoviedb.apiary.io/#get-%2F3%2Fperson%2F%7Bid%7D%2Fchanges) + /// + /// + /// + public TmdbPersonChanges GetPersonChanges(int PersonID) + { + return ProcessRequest(Generator.GetPersonChanges(PersonID)); + } + + public string GetPersonChangesETag(int PersonID) + { + return ProcessRequestETag(ETagGenerator.GetPersonChanges(PersonID)); + } + #endregion + + + #region Miscellaneous Movie + /// + /// Get the newest movie added to the TMDB. + /// (http://help.themoviedb.org/kb/api/latest-movie) + /// + /// + public TmdbLatestMovie GetLatestMovie() + { + //return ProcessRequest(BuildGetLatestMovieRequest()); + return ProcessRequest(Generator.GetLatestMovies()); + } + + public string GetLatestMovieETag() + { + //return ProcessRequestETag(BuildGetLatestMovieRequest()); + return ProcessRequestETag(ETagGenerator.GetLatestMovies()); + } + + /// + /// Get the list of movies currently in theatres. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/now-playing-movies) + /// + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbNowPlaying GetNowPlayingMovies(int page, string language = "") + { + //return ProcessRequest(BuildGetNowPlayingMoviesRequest(page, language)); + return ProcessRequest(Generator.GetNowPlayingMovies(page, language)); + } + + public string GetNowPlayingMoviesETag(int page, string language = null) + { + //return ProcessRequestETag(BuildGetNowPlayingMoviesRequest(page, language)); + return ProcessRequestETag(ETagGenerator.GetNowPlayingMovies(page, language)); + } + + /// + /// Get the daily popularity list of movies. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/popular-movie-list) + /// + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbPopular GetPopularMovies(int page, string language = null) + { + //return ProcessRequest(BuildGetPopularMoviesRequest(page, language)); + return ProcessRequest(Generator.GetPopularMovies(page, language)); + } + + public string GetPopularMoviesETag(int page, string language = null) + { + //return ProcessRequestETag(BuildGetPopularMoviesRequest(page, language)); + return ProcessRequestETag(ETagGenerator.GetPopularMovies(page, language)); + } + + /// + /// Get list of movies that have over 10 votes on TMDB. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/top-rated-movies) + /// + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbTopRated GetTopRatedMovies(int page, string language = null) + { + //return ProcessRequest(BuildGetTopRatedMoviesRequest(page, language)); + return ProcessRequest(Generator.GetTopRatedMovies(page, language)); + } + + public string GetTopRatedMoviesETag(int page, string language = null) + { + //return ProcessRequestETag(BuildGetTopRatedMoviesRequest(page, language)); + return ProcessRequestETag(ETagGenerator.GetTopRatedMovies(page, language)); + } + + /// + /// Get list of movies that are arriving to theatres in the next few weeks. + /// (http://help.themoviedb.org/kb/api/upcoming-movies) + /// + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbUpcoming GetUpcomingMovies(int page, string language = null) + { + //return ProcessRequest(BuildGetUpcomingMoviesRequest(page, language)); + return ProcessRequest(Generator.GetUpcomingMovies(page, language)); + } + + public string GetUpcomingMoviesETag(int page, string language = null) + { + //return ProcessRequestETag(BuildGetUpcomingMoviesRequest(page, language)); + return ProcessRequestETag(ETagGenerator.GetUpcomingMovies(page, language)); + } + + #endregion + + + #region Lists Methods + + /// + /// Get a list by id + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Flist%2F%7Bid%7D + /// + /// + /// + public TmdbListItem GetList(string ListID) + { + return ProcessRequest(Generator.GetList(ListID)); + } + + #endregion + + + #region Company Info + /// + /// Get basic information about a production company from TMDB. + /// (http://help.themoviedb.org/kb/api/company-info) + /// + /// Company ID + /// + public TmdbCompany GetCompanyInfo(int CompanyID) + { + //return ProcessRequest(BuildGetCompanyInfoRequest(CompanyID)); + return ProcessRequest(Generator.GetCompanyInfo(CompanyID)); + } + + public string GetCompanyInfoETag(int CompanyID) + { + //return ProcessRequestETag(BuildGetCompanyInfoRequest(CompanyID)); + return ProcessRequestETag(ETagGenerator.GetCompanyInfo(CompanyID)); + } + + /// + /// Get list of movies associated with a company. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/company-movies) + /// + /// Company ID + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbCompanyMovies GetCompanyMovies(int CompanyID, int page, string language = null) + { + //return ProcessRequest(BuildGetCompanyMoviesRequest(CompanyID, page, language)); + return ProcessRequest(Generator.GetCompanyMovies(CompanyID, page, language)); + } + + public string GetCompanyMoviesETag(int CompanyID, int page, string language = null) + { + //return ProcessRequestETag(BuildGetCompanyMoviesRequest(CompanyID, page, language)); + return ProcessRequestETag(ETagGenerator.GetCompanyMovies(CompanyID, page, language)); + } + + #endregion + + + #region Genre Info + /// + /// Get list of genres used in TMDB. The ids will correspond to those found in movie calls. + /// (http://help.themoviedb.org/kb/api/genre-list) + /// + /// optional - ISO 639-1 language code + /// + public TmdbGenre GetGenreList(string language = null) + { + //return ProcessRequest(BuildGetGenreListRequest(language)); + return ProcessRequest(Generator.GetGenreList(language)); + } + + public string GetGenreListETag(string language = null) + { + //return ProcessRequestETag(BuildGetGenreListRequest(language)); + return ProcessRequestETag(ETagGenerator.GetGenreList(language)); + } + + /// + /// Get list of movies in a Genre. Note that only movies with more than 10 votes get listed. + /// (http://help.themoviedb.org/kb/api/genre-movies) + /// + /// TMDB Genre ID + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbGenreMovies GetGenreMovies(int GenreID, int page, string language = null) + { + //return ProcessRequest(BuildGetGenreMoviesRequest(GenreID, page, language)); + return ProcessRequest(Generator.GetGenreMovies(GenreID, page, language)); + } + + public string GetGenreMoviesETag(int GenreID, int page, string language = null) + { + //return ProcessRequestETag(BuildGetGenreMoviesRequest(GenreID, page, language)); + return ProcessRequestETag(ETagGenerator.GetGenreMovies(GenreID, page, language)); + } + + #endregion + + + #region Keyword Methods + + /// + /// Get the basic information for a specific keyword id. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fkeyword%2F%7Bid%7D + /// + /// + /// + public TmdbKeyword GetKeyword(int KeywordID) + { + return ProcessRequest(Generator.GetKeyword(KeywordID)); + } + + /// + /// Get the list of movies for a particular keyword by id. + /// http://docs.themoviedb.apiary.io/#get-%2F3%2Fkeyword%2F%7Bid%7D%2Fmovies + /// + /// + /// + /// + /// + public TmdbKeywordMovies GetKeywordMovies(int KeywordID, int page, string language = "") + { + return ProcessRequest(Generator.GetKeywordMovies(KeywordID, page, language)); + } + + #endregion + + + #region Changes methods + + /// + /// Get a list of movie ids that have been edited. By default results include the last 24 hours with + /// 100 items per page. Then use the method GetMovieChanges to get the data that has changed. + /// (http://docs.themoviedb.apiary.io/#get-%2F3%2Fmovie%2Fchanges) + /// + /// + /// + /// + /// + public TmdbChanges GetChangesByMovie(int page, DateTime? StartDate = null, DateTime? EndDate = null) + { + return ProcessRequest(Generator.GetChangesByMovie(page, StartDate, EndDate)); + } + + /// + /// Get a list of person ids that have been edited. By default results include the last 24 hours with + /// 100 items per page. Then use the method GetPersonChanges to get the data that has changed. + /// (http://docs.themoviedb.apiary.io/#get-%2F3%2Fperson%2Fchanges) + /// + /// + /// + /// + /// + public TmdbChanges GetChangesByPerson(int page, DateTime? StartDate = null, DateTime? EndDate = null) + { + return ProcessRequest(Generator.GetChangesByPerson(page, StartDate, EndDate)); + } + + #endregion + } +} diff --git a/WatTmdb/Tmdb/Tmdb.cs b/WatTmdb/Tmdb/Tmdb.cs new file mode 100644 index 0000000..599fb88 --- /dev/null +++ b/WatTmdb/Tmdb/Tmdb.cs @@ -0,0 +1,472 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp.Deserializers; +using System.Net; +using RestSharp; +using WatTmdb.Utilities; + +namespace WatTmdb.V3 +{ + public partial class Tmdb + { + private const string BASE_URL = "http://api.themoviedb.org/3"; + + public Tmdb(string apiKey) : this(apiKey, null) { } + + public Tmdb(string apiKey, string language) + { + Error = null; + ApiKey = apiKey; + Language = language; + Timeout = null; + + Deserializer = new JsonDeserializer(); + Generator = new RequestGenerator(apiKey, Language); + ETagGenerator = new RequestGenerator(apiKey, Language, Method.HEAD); + } + + #region Properties + + private RequestGenerator Generator { get; set; } + + private RequestGenerator ETagGenerator { get; set; } + + private string ApiKey { get; set; } + + private string Language { get; set; } + + private JsonDeserializer Deserializer; + + #endregion + + /// + /// Current count of outstanding Async calls awaiting callback response + /// + public int AsyncCount = 0; + + public TmdbError Error { get; set; } + + /// + /// String representation of response content + /// + public string ResponseContent { get; set; } + + /// + /// Dictionary of Header values in response + /// http://help.themoviedb.org/kb/api/content-versioning + /// + public Dictionary ResponseHeaders { get; set; } + + /// + /// ETag pulled out of the response header for the last request + /// http://help.themoviedb.org/kb/api/content-versioning + /// + public string ResponseETag + { + get + { + if (ResponseHeaders == null || ResponseHeaders.ContainsKey("ETag") == false) + return null; + + return Convert.ToString(ResponseHeaders["ETag"]).Trim('"'); + } + } + +#if !WINDOWS_PHONE + /// + /// Proxy to use for requests made. Passed on to underying WebRequest if set. + /// + public IWebProxy Proxy { get; set; } +#endif + /// + /// Timeout in milliseconds to use for requests made. + /// + public int? Timeout { get; set; } + + + + #region Build Requests - DEPRECATED, moved to a builder pattern + + + //#region Configuration Methods + //private static RestRequest BuildGetConfigurationRequest(object userState = null) + //{ + // var request = new RestRequest("configuration", Method.GET); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + //#endregion + + + //#region Search Methods + //private static RestRequest BuildSearchMovieRequest(string query, int page, string language, bool? includeAdult = null, int? year = null, object userState = null) + //{ + // var request = new RestRequest("search/movie", Method.GET); + // request.AddParameter("query", query.EscapeString()); + // request.AddParameter("page", page); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // if (includeAdult.HasValue) + // request.AddParameter("include_adult", includeAdult.Value ? "true" : "false"); + // if (year.HasValue) + // request.AddParameter("year", year.Value); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildSearchPersonRequest(string query, int page, string language, object userState = null) + //{ + // var request = new RestRequest("search/person", Method.GET); + // request.AddParameter("query", query.EscapeString()); + // request.AddParameter("page", page); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildSearchCompanyRequest(string query, int page, object userState = null) + //{ + // var request = new RestRequest("search/company", Method.GET); + // request.AddParameter("query", query.EscapeString()); + // request.AddParameter("page", page); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + //#endregion + + + //#region Collections + //private static RestRequest BuildGetCollectionInfoRequest(int CollectionID, string language, object userState = null) + //{ + // var request = new RestRequest("collection/{id}", Method.GET); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddUrlSegment("id", CollectionID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetCollectionImagesRequest(int CollectionID, string language, object userState = null) + //{ + // var request = new RestRequest("collection/{id}/images", Method.GET); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddUrlSegment("id", CollectionID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + //#endregion + + + //#region Movie Info + //private static RestRequest BuildGetMovieInfoRequest(int MovieID, string language, object userState = null) + //{ + // var request = new RestRequest("movie/{id}", Method.GET); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddUrlSegment("id", MovieID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetMovieByIMDBRequest(string IMDB_ID, string language, object userState = null) + //{ + // var request = new RestRequest("movie/{id}", Method.GET); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddUrlSegment("id", IMDB_ID.EscapeString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetMovieAlternateTitlesRequest(int MovieID, string Country, object userState = null) + //{ + // var request = new RestRequest("movie/{id}/alternative_titles", Method.GET); + // if (string.IsNullOrEmpty(Country) == false) + // request.AddParameter("country", Country); + // request.AddUrlSegment("id", MovieID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetMovieCastRequest(int MovieID, object userState = null) + //{ + // var request = new RestRequest("movie/{id}/casts", Method.GET); + // request.AddUrlSegment("id", MovieID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetMovieImagesRequest(int MovieID, string language, object userState = null) + //{ + // var request = new RestRequest("movie/{id}/images", Method.GET); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddUrlSegment("id", MovieID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetMovieKeywordsRequest(int MovieID, object userState = null) + //{ + // var request = new RestRequest("movie/{id}/keywords", Method.GET); + // request.AddUrlSegment("id", MovieID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetMovieReleasesRequest(int MovieID, object userState = null) + //{ + // var request = new RestRequest("movie/{id}/releases", Method.GET); + // request.AddUrlSegment("id", MovieID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetMovieTrailersRequest(int MovieID, string language, object userState = null) + //{ + // var request = new RestRequest("movie/{id}/trailers", Method.GET); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddUrlSegment("id", MovieID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetSimilarMoviesRequest(int MovieID, int page, string language, object userState = null) + //{ + // var request = new RestRequest("movie/{id}/similar_movies", Method.GET); + // request.AddParameter("page", page); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddUrlSegment("id", MovieID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetMovieTranslationsRequest(int MovieID, object userState = null) + //{ + // var request = new RestRequest("movie/{id}/translations", Method.GET); + // request.AddUrlSegment("id", MovieID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + //#endregion + + + //#region Person Info + //private static RestRequest BuildGetPersonInfoRequest(int PersonID, object userState = null) + //{ + // var request = new RestRequest("person/{id}", Method.GET); + // request.AddUrlSegment("id", PersonID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetPersonCreditsRequest(int PersonID, string language, object userState = null) + //{ + // var request = new RestRequest("person/{id}/credits", Method.GET); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddUrlSegment("id", PersonID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetPersonImagesRequest(int PersonID, object userState = null) + //{ + // var request = new RestRequest("person/{id}/images", Method.GET); + // request.AddUrlSegment("id", PersonID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + //#endregion + + + //#region Miscellaneous Movie + //private static RestRequest BuildGetLatestMovieRequest(object userState = null) + //{ + // var request = new RestRequest("movie/latest", Method.GET); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetNowPlayingMoviesRequest(int page, string language, object userState = null) + //{ + // var request = new RestRequest("movie/now_playing", Method.GET); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddParameter("page", page); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetPopularMoviesRequest(int page, string language, object userState = null) + //{ + // var request = new RestRequest("movie/popular", Method.GET); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddParameter("page", page); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetTopRatedMoviesRequest(int page, string language, object userState = null) + //{ + // var request = new RestRequest("movie/top_rated", Method.GET); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddParameter("page", page); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetUpcomingMoviesRequest(int page, string language, object userState = null) + //{ + // var request = new RestRequest("movie/upcoming", Method.GET); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddParameter("page", page); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + //#endregion + + + //#region Company Info + //private static RestRequest BuildGetCompanyInfoRequest(int CompanyID, object userState = null) + //{ + // var request = new RestRequest("company/{id}", Method.GET); + // request.AddUrlSegment("id", CompanyID.ToString()); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetCompanyMoviesRequest(int CompanyID, int page, string language, object userState = null) + //{ + // var request = new RestRequest("company/{id}/movies", Method.GET); + // request.AddUrlSegment("id", CompanyID.ToString()); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddParameter("page", page); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + //#endregion + + + //#region Genre Info + //private static RestRequest BuildGetGenreListRequest(string language, object userState = null) + //{ + // var request = new RestRequest("genre/list", Method.GET); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetGenreMoviesRequest(int GenreID, int page, string language, object userState = null) + //{ + // var request = new RestRequest("genre/{id}/movies", Method.GET); + // request.AddUrlSegment("id", GenreID.ToString()); + // if (string.IsNullOrEmpty(language) == false) + // request.AddParameter("language", language); + // request.AddParameter("page", page); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + //#endregion + + //#region Changes methods + //private static RestRequest BuildGetMovieChangesRequest(int page, DateTime? StartDate, DateTime? EndDate, object userState = null) + //{ + // var request = new RestRequest("movie/changes", Method.GET); + // request.AddParameter("page", page); + // if (StartDate.HasValue) + // request.AddParameter("start_date", StartDate.Value.ToString("yyyy-MM-dd")); + // if (EndDate.HasValue) + // request.AddParameter("end_date", EndDate.Value.ToString("yyyy-MM-dd")); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + + //private static RestRequest BuildGetPersonChangesRequest(int page, DateTime? StartDate, DateTime? EndDate, object userState = null) + //{ + // var request = new RestRequest("person/changes", Method.GET); + // request.AddParameter("page", page); + // if (StartDate.HasValue) + // request.AddParameter("start_date", StartDate.Value.ToString("yyyy-MM-dd")); + // if (EndDate.HasValue) + // request.AddParameter("end_date", EndDate.Value.ToString("yyyy-MM-dd")); + // if (userState != null) + // request.UserState = userState; + + // return request; + //} + //#endregion + + #endregion + } + +} diff --git a/WatTmdb/Utilities/Constants.cs b/WatTmdb/Utilities/Constants.cs new file mode 100644 index 0000000..0bd7d75 --- /dev/null +++ b/WatTmdb/Utilities/Constants.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.Utilities +{ + internal partial class RequestGenerator + { + + #region Request Constants + public const string REQUEST_AUTH_TOKEN = "authentication/token/new"; + public const string REQUEST_AUTH_SESSION = "authentication/session/new"; + public const string REQUEST_AUTH_GUESTSESSION = "authentication/guest_session/new"; + + public const string REQUEST_ACCOUNT = "account"; + public const string REQUEST_ACCOUNT_LISTS = "account/{id}/lists"; + public const string REQUEST_ACCOUNT_FAVOURITE = "account/{id}/favorite_movies"; + public const string REQUEST_ACCOUNT_RATED = "account/{id}/rated_movies"; + public const string REQUEST_ACCOUNT_WATCHLIST = "account/{id}/movie_watchlist"; + + public const string REQUEST_CONFIG = "configuration"; + + public const string REQUEST_SEARCH_MOVIE = "search/movie"; + public const string REQUEST_SEARCH_PERSON = "search/person"; + public const string REQUEST_SEARCH_COMPANY = "search/company"; + public const string REQUEST_SEARCH_KEYWORD = "search/keyword"; + public const string REQUEST_SEARCH_COLLECTION = "search/collection"; + + public const string REQUEST_COLLECTION = "collection/{id}"; + public const string REQUEST_COLLECTION_IMAGES = "collection/{id}/images"; + + public const string REQUEST_MOVIE = "movie/{id}"; + public const string REQUEST_MOVIE_TITLES = "movie/{id}/alternative_titles"; + public const string REQUEST_MOVIE_CAST = "movie/{id}/casts"; + public const string REQUEST_MOVIE_IMAGES = "movie/{id}/images"; + public const string REQUEST_MOVIE_KEYWORDS = "movie/{id}/keywords"; + public const string REQUEST_MOVIE_RELEASES = "movie/{id}/releases"; + public const string REQUEST_MOVIE_TRAILERS = "movie/{id}/trailers"; + public const string REQUEST_MOVIE_SIMILAR = "movie/{id}/similar_movies"; + public const string REQUEST_MOVIE_TRANSLATIONS = "movie/{id}/translations"; + public const string REQUEST_MOVIE_LISTS = "movie/{id}/lists"; + public const string REQUEST_MOVIE_CHANGES = "movie/{id}/changes"; + + public const string REQUEST_MOVIE_LATEST = "movie/latest"; + public const string REQUEST_MOVIE_PLAYING = "movie/now_playing"; + public const string REQUEST_MOVIE_POPULAR = "movie/popular"; + public const string REQUEST_MOVIE_TOP = "movie/top_rated"; + public const string REQUEST_MOVIE_UPCOMING = "movie/upcoming"; + + public const string REQUEST_PERSON = "person/{id}"; + public const string REQUEST_PERSON_CREDITS = "person/{id}/credits"; + public const string REQUEST_PERSON_IMAGES = "person/{id}/images"; + public const string REQUEST_PERSON_CHANGES = "person/{id}/changes"; + + public const string REQUEST_LIST = "list/{id}"; + + public const string REQUEST_COMPANY = "company/{id}"; + public const string REQUEST_COMPANY_MOVIES = "company/{id}/movies"; + + public const string REQUEST_GENRE = "genre/list"; + public const string REQUEST_GENRE_MOVIES = "genre/{id}/movies"; + + public const string REQUEST_KEYWORD = "keyword/{id}"; + public const string REQUEST_KEYWORD_MOVIES = "keyword/{id}/movies"; + + public const string REQUEST_CHANGES_MOVIES = "movie/changes"; + public const string REQUEST_CHANGES_PERSON = "person/changes"; + + #endregion + + } + + + internal partial class RequestBuilder + { + + #region Parameter Constants + public const string PARAMETER_APIKEY = "api_key"; + public const string PARAMETER_QUERY = "query"; + public const string PARAMETER_PAGE = "page"; + public const string PARAMETER_LANGUAGE = "language"; + public const string PARAMETER_ADULT = "include_adult"; + public const string PARAMETER_YEAR = "year"; + public const string PARAMETER_ID = "id"; + public const string PARAMETER_COUNTRY = "country"; + public const string PARAMETER_STARTDATE = "start_date"; + public const string PARAMETER_ENDDATE = "end_date"; + public const string PARAMETER_REQUESTOKEN = "request_token"; + public const string PARAMETER_SESSIONID = "session_id"; + #endregion + + } +} diff --git a/WatTmdb/Utilities/RequestBuilder.cs b/WatTmdb/Utilities/RequestBuilder.cs new file mode 100644 index 0000000..db9860d --- /dev/null +++ b/WatTmdb/Utilities/RequestBuilder.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; +using System.Globalization; + +namespace WatTmdb.Utilities +{ + internal partial class RequestBuilder + { + public RequestBuilder(string resource, Method method) : this(resource, method, string.Empty) { } + + public RequestBuilder(string resource, Method method, string language) + { + Request = new RestRequest(resource, method); + DefaultLanguage = language; + Request.AddHeader("Accept", "application/json"); + } + + #region Properties + + private RestRequest Request { get; set; } + + private Method Method + { + get { return Request.Method; } + set { Request.Method = value; } + } + + private string DefaultLanguage { get; set; } + + private object UserState + { + get { return Request.UserState; } + set { if (value != null) Request.UserState = value; } + } + + #endregion + + public RestRequest GetRequest() + { + return Request; + } + + public RequestBuilder SetUserState(object userState) + { + UserState = userState; + return this; + } + + public RequestBuilder AddParameter(string name, bool? value) + { + if (!value.HasValue) return this; + + Request.AddParameter(name, value.Value ? "true" : "false"); + return this; + } + + public RequestBuilder AddParameter(string name, int? value) + { + if (!value.HasValue) return this; + + Request.AddParameter(name, value.Value); + return this; + } + + public RequestBuilder AddParameter(string name, string value) + { + if (name == PARAMETER_LANGUAGE && string.IsNullOrEmpty(value)) + value = DefaultLanguage; + + if (string.IsNullOrEmpty(value)) return this; + value = value.EscapeString(); + + Request.AddParameter(name, value); + return this; + } + + public RequestBuilder AddParameter(string name, DateTime? value) + { + if (!value.HasValue) return this; + + Request.AddParameter(name, value.Value.ToString("yyyy-MM-dd")); + return this; + } + + public RequestBuilder AddParameter(string name, object value) + { + if (value == null) return this; + + Request.AddParameter(name, value); + return this; + } + + public RequestBuilder AddUrlSegment(string name, int? value) + { + if (!value.HasValue) return this; + + Request.AddUrlSegment(name, value.Value.ToString(CultureInfo.InvariantCulture)); + return this; + } + + public RequestBuilder AddUrlSegment(string name, string value) + { + if (string.IsNullOrEmpty(value)) return this; + value = value.EscapeString(); + + Request.AddUrlSegment(name, value); + return this; + } + } +} diff --git a/WatTmdb/Utilities/RequestGenerator.cs b/WatTmdb/Utilities/RequestGenerator.cs new file mode 100644 index 0000000..f90fd72 --- /dev/null +++ b/WatTmdb/Utilities/RequestGenerator.cs @@ -0,0 +1,508 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; + +namespace WatTmdb.Utilities +{ + internal partial class RequestGenerator + { + #region Properties + + private Method Method { get; set; } + private string DefaultLanguage { get; set; } + private string ApiKey { get; set; } + + #endregion + + public RequestGenerator(string apiKey, string language, Method method = Method.GET) + { + DefaultLanguage = language; + Method = method; + ApiKey = apiKey; + } + + private RequestBuilder GetBuilder(string request) + { + return new RequestBuilder(request, Method, DefaultLanguage) + .AddParameter(RequestBuilder.PARAMETER_APIKEY, ApiKey); + } + + #region Authentication Methods + + internal RestRequest GetAuthToken(object userState = null) + { + return GetBuilder(REQUEST_AUTH_TOKEN) + .SetUserState(userState) + .GetRequest(); + } + + internal RestRequest GetAuthSession(string token, object userState = null) + { + return GetBuilder(REQUEST_AUTH_SESSION) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_REQUESTOKEN, token) + .GetRequest(); + } + + internal RestRequest GetGuestSession(object userState = null) + { + return GetBuilder(REQUEST_AUTH_GUESTSESSION) + .SetUserState(userState) + .GetRequest(); + } + + #endregion + + + #region Account Methods + + internal RestRequest GetAccountInfo(string SessionID, object userState = null) + { + return GetBuilder(REQUEST_ACCOUNT) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_SESSIONID, SessionID) + .GetRequest(); + } + + internal RestRequest GetAccountLists(int AccountID, string SessionID, int? page, string language, object userState = null) + { + return GetBuilder(REQUEST_ACCOUNT_LISTS) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, AccountID) + .AddParameter(RequestBuilder.PARAMETER_SESSIONID, SessionID) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .GetRequest(); + } + + internal RestRequest GetAccountFavouriteMovies(int AccountID, string SessionID, int? page, string language, object userState = null) + { + return GetBuilder(REQUEST_ACCOUNT_FAVOURITE) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, AccountID) + .AddParameter(RequestBuilder.PARAMETER_SESSIONID, SessionID) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .GetRequest(); + } + + internal RestRequest GetAccountRatedMovies(int AccountID, string SessionID, int? page, string language, object userState = null) + { + return GetBuilder(REQUEST_ACCOUNT_RATED) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, AccountID) + .AddParameter(RequestBuilder.PARAMETER_SESSIONID, SessionID) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .GetRequest(); + } + + internal RestRequest GetAccountWatchlistMovies(int AccountID, string SessionID, int? page, string language, object userState = null) + { + return GetBuilder(REQUEST_ACCOUNT_WATCHLIST) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, AccountID) + .AddParameter(RequestBuilder.PARAMETER_SESSIONID, SessionID) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .GetRequest(); + } + + #endregion + + + #region Configuration Methods + + internal RestRequest GetConfiguration(object userState = null) + { + return GetBuilder(REQUEST_CONFIG) + .SetUserState(userState) + .GetRequest(); + } + + #endregion + + + #region Search Methods + + internal RestRequest SearchMovie(string query, int page, string language, bool? includeAdult = null, int? year = null, object userState = null) + { + return GetBuilder(REQUEST_SEARCH_MOVIE) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_QUERY, query) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddParameter(RequestBuilder.PARAMETER_ADULT, includeAdult) + .AddParameter(RequestBuilder.PARAMETER_YEAR, year) + .GetRequest(); + } + + internal RestRequest SearchPerson(string query, int page, string language, object userState = null) + { + return GetBuilder(REQUEST_SEARCH_PERSON) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_QUERY, query) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .GetRequest(); + } + + internal RestRequest SearchCompany(string query, int page, object userState = null) + { + return GetBuilder(REQUEST_SEARCH_COMPANY) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_QUERY, query) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .GetRequest(); + } + + internal RestRequest SearchKeyword(string query, int page, object userState = null) + { + return GetBuilder(REQUEST_SEARCH_KEYWORD) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_QUERY, query) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .GetRequest(); + } + + internal RestRequest SearchCollection(string query, int page, string language, object userState = null) + { + return GetBuilder(REQUEST_SEARCH_COLLECTION) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_QUERY, query) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .GetRequest(); + } + + #endregion + + + #region Collections + + internal RestRequest GetCollectionInfo(int CollectionID, string language, object userState = null) + { + return GetBuilder(REQUEST_COLLECTION) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, CollectionID) + .GetRequest(); + } + + internal RestRequest GetCollectionImages(int CollectionID, string language, object userState = null) + { + return GetBuilder(REQUEST_COLLECTION_IMAGES) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, CollectionID) + .GetRequest(); + } + + #endregion + + + #region Movie Info + + internal RestRequest GetMovieInfo(int MovieID, string language, object userState = null) + { + return GetBuilder(REQUEST_MOVIE) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, MovieID) + .GetRequest(); + } + + internal RestRequest GetMovieByIMDB(string imdbId, string language, object userState = null) + { + return GetBuilder(REQUEST_MOVIE) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, imdbId) + .GetRequest(); + } + + internal RestRequest GetMovieAlternateTitles(int MovieID, string Country, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_TITLES) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_COUNTRY, Country) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, MovieID) + .GetRequest(); + } + + internal RestRequest GetMovieCast(int MovieID, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_CAST) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, MovieID) + .GetRequest(); + } + + internal RestRequest GetMovieImages(int MovieID, string language, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_IMAGES) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, MovieID) + .GetRequest(); + } + + internal RestRequest GetMovieKeywords(int MovieID, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_KEYWORDS) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, MovieID) + .GetRequest(); + } + + internal RestRequest GetMovieReleases(int MovieID, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_RELEASES) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, MovieID) + .GetRequest(); + } + + internal RestRequest GetMovieTrailers(int MovieID, string language, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_TRAILERS) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, MovieID) + .GetRequest(); + } + + internal RestRequest GetSimilarMovies(int MovieID, int page, string language, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_SIMILAR) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, MovieID) + .GetRequest(); + } + + internal RestRequest GetMovieTranslations(int MovieID, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_TRANSLATIONS) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, MovieID) + .GetRequest(); + } + + internal RestRequest GetMovieLists(int MovieID, int page, string language, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_LISTS) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, MovieID) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .GetRequest(); + } + + internal RestRequest GetMovieChanges(int MovieID, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_CHANGES) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, MovieID) + .GetRequest(); + } + + #endregion + + + #region Person Info + + internal RestRequest GetPersonInfo(int PersonID, object userState = null) + { + return GetBuilder(REQUEST_PERSON) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, PersonID) + .GetRequest(); + } + + internal RestRequest GetPersonCredits(int PersonID, string language, object userState = null) + { + return GetBuilder(REQUEST_PERSON_CREDITS) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, PersonID) + .GetRequest(); + } + + internal RestRequest GetPersonImages(int PersonID, object userState = null) + { + return GetBuilder(REQUEST_PERSON_IMAGES) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, PersonID) + .GetRequest(); + } + + internal RestRequest GetPersonChanges(int PersonID, object userState = null) + { + return GetBuilder(REQUEST_PERSON_CHANGES) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, PersonID) + .GetRequest(); + } + + #endregion + + + #region Miscellaneous Movie + + internal RestRequest GetLatestMovies(object userState = null) + { + return GetBuilder(REQUEST_MOVIE_LATEST) + .SetUserState(userState) + .GetRequest(); + } + + internal RestRequest GetNowPlayingMovies(int page, string language, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_PLAYING) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .GetRequest(); + } + + internal RestRequest GetPopularMovies(int page, string language, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_POPULAR) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .GetRequest(); + } + + internal RestRequest GetTopRatedMovies (int page, string language, object userState = null) + { + return GetBuilder (REQUEST_MOVIE_TOP) + .SetUserState (userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .GetRequest(); + } + + internal RestRequest GetUpcomingMovies(int page, string language, object userState = null) + { + return GetBuilder(REQUEST_MOVIE_UPCOMING) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .GetRequest(); + } + + #endregion + + + #region Lists + + internal RestRequest GetList(string ListID, object userState = null) + { + return GetBuilder(REQUEST_LIST) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, ListID) + .GetRequest(); + } + + #endregion + + + #region Company Info + + internal RestRequest GetCompanyInfo(int CompanyID, object userState = null) + { + return GetBuilder(REQUEST_COMPANY) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, CompanyID) + .GetRequest(); + } + + internal RestRequest GetCompanyMovies(int CompanyID, int page, string language, object userState = null) + { + return GetBuilder(REQUEST_COMPANY_MOVIES) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, CompanyID) + .GetRequest(); + } + + #endregion + + + #region Genre Info + + internal RestRequest GetGenreList(string language, object userState = null) + { + return GetBuilder(REQUEST_GENRE) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .GetRequest(); + } + + internal RestRequest GetGenreMovies(int GenreID, int page, string language, object userState = null) + { + return GetBuilder(REQUEST_GENRE_MOVIES) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, GenreID) + .GetRequest(); + } + + #endregion + + + #region Keyword Methods + + internal RestRequest GetKeyword(int KeywordID, object userState = null) + { + return GetBuilder(REQUEST_KEYWORD) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, KeywordID) + .GetRequest(); + } + + internal RestRequest GetKeywordMovies(int KeywordID, int page, string language, object userState = null) + { + return GetBuilder(REQUEST_KEYWORD_MOVIES) + .SetUserState(userState) + .AddUrlSegment(RequestBuilder.PARAMETER_ID, KeywordID) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddParameter(RequestBuilder.PARAMETER_LANGUAGE, language) + .GetRequest(); + } + + #endregion + + + #region Changes Methods + + internal RestRequest GetChangesByMovie(int page, DateTime? StartDate, DateTime? EndDate, object userState = null) + { + return GetBuilder(REQUEST_CHANGES_MOVIES) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddParameter(RequestBuilder.PARAMETER_STARTDATE, StartDate) + .AddParameter(RequestBuilder.PARAMETER_ENDDATE, EndDate) + .GetRequest(); + } + + internal RestRequest GetChangesByPerson(int page, DateTime? StartDate, DateTime? EndDate, object userState = null) + { + return GetBuilder(REQUEST_CHANGES_PERSON) + .SetUserState(userState) + .AddParameter(RequestBuilder.PARAMETER_PAGE, page) + .AddParameter(RequestBuilder.PARAMETER_STARTDATE, StartDate) + .AddParameter(RequestBuilder.PARAMETER_ENDDATE, EndDate) + .GetRequest(); + } + + #endregion + } +} diff --git a/WatTmdb/Utilities/Utility.cs b/WatTmdb/Utilities/Utility.cs new file mode 100644 index 0000000..3261d7e --- /dev/null +++ b/WatTmdb/Utilities/Utility.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.IO; + +namespace WatTmdb +{ + public static class Utility + { + // remove invalid characters for use in URL + public static string EscapeString(this string s) + { + if (string.IsNullOrEmpty(s)) + return string.Empty; + +#if WINDOWS_PHONE + return Regex.Replace(s, "[" + Regex.Escape(new String(Path.GetInvalidPathChars())) + "]", "-"); +#else + return Regex.Replace(s, "[" + Regex.Escape(new String(Path.GetInvalidFileNameChars())) + "]", "-"); +#endif + } + } +} diff --git a/WatTmdb/Utilities/WatJsonDeserializer.cs b/WatTmdb/Utilities/WatJsonDeserializer.cs new file mode 100644 index 0000000..f9ebf21 --- /dev/null +++ b/WatTmdb/Utilities/WatJsonDeserializer.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp.Deserializers; + +namespace WatTmdb.V3 +{ + public class WatJsonDeserializer : IDeserializer + { + #region IDeserializer Members + + public T Deserialize(RestSharp.IRestResponse response) + { + if (response.Content == null) + return default(T); + + // 2012-07-26 - attempt to handle some of the bad json content, eg Similar Movies for id 80271 containing null values + // amongst the other objects in the results array + // eg ...."vote_average":0.0,"vote_count":0},null,null,{"backdrop_path":null,"id":73736,"original_title":... + // ^^^^ ^^^^ + // Causes "Object reference not set to an instance of an object" exception during deserialization + while (response.Content.IndexOf("},null,") != -1) + { + response.Content = response.Content.Replace("},null,", "},"); + } + + while (response.Content.IndexOf("[null,") != -1) + { + response.Content = response.Content.Replace("[null,", "["); + } + + var deserializer = new JsonDeserializer(); + var data = deserializer.Deserialize(response); + + return data; + } + + public string DateFormat { get; set; } + public string Namespace { get; set; } + public string RootElement { get; set; } + + #endregion + } +} diff --git a/WatTmdb/Utility.cs b/WatTmdb/Utility.cs new file mode 100644 index 0000000..8de4572 --- /dev/null +++ b/WatTmdb/Utility.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.IO; + +namespace WatTmdb +{ + public static class Utility + { + // remove invalid characters for use in URL + public static string EscapeString(this string s) + { +#if WINDOWS_PHONE + return Regex.Replace(s, "[" + Regex.Escape(new String(Path.GetInvalidPathChars())) + "]", "-"); +#else + return Regex.Replace(s, "[" + Regex.Escape(new String(Path.GetInvalidFileNameChars())) + "]", "-"); +#endif + } + } +} diff --git a/WatTmdb/V3/Tmdb.Sync.cs b/WatTmdb/V3/Tmdb.Sync.cs new file mode 100644 index 0000000..84465df --- /dev/null +++ b/WatTmdb/V3/Tmdb.Sync.cs @@ -0,0 +1,831 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp; +using System.Net; + +namespace WatTmdb.V3 +{ + public partial class Tmdb + { + private T ProcessRequest(RestRequest request) + where T : new() + { + var client = new RestClient(BASE_URL); + client.AddHandler("application/json", new WatJsonDeserializer()); + + if (Timeout.HasValue) + client.Timeout = Timeout.Value; + +#if !WINDOWS_PHONE + if (Proxy != null) + client.Proxy = Proxy; +#endif + + Error = null; + + request.AddHeader("Accept", "application/json"); + request.AddParameter("api_key", ApiKey); + + var resp = client.Execute(request); + + ResponseContent = resp.Content; + ResponseHeaders = resp.Headers.ToDictionary(k => k.Name, v => v.Value); + + if (resp.ResponseStatus == ResponseStatus.Completed) + { + if (resp.Content.Contains("status_message")) + Error = jsonDeserializer.Deserialize(resp); + + return resp.Data; + } + else + { + if (resp.Content.Contains("status_message")) + Error = jsonDeserializer.Deserialize(resp); + else if (resp.ErrorException != null) + throw resp.ErrorException; + else + Error = new TmdbError { status_message = resp.ErrorMessage }; + } + + return default(T); + } + + private string ProcessRequestETag(RestRequest request) + { + var client = new RestClient(BASE_URL); + if (Timeout.HasValue) + client.Timeout = Timeout.Value; + +#if !WINDOWS_PHONE + if (Proxy != null) + client.Proxy = Proxy; +#endif + Error = null; + + request.Method = Method.HEAD; + request.AddHeader("Accept", "application/json"); + request.AddParameter("api_key", ApiKey); + + var resp = client.Execute(request); + ResponseContent = resp.Content; + ResponseHeaders = resp.Headers.ToDictionary(k => k.Name, v => v.Value); + + if (resp.ResponseStatus != ResponseStatus.Completed && resp.ErrorException != null) + throw resp.ErrorException; + + return this.ResponseETag; + } + + + #region Configuration + /// + /// Retrieve configuration data from TMDB + /// (http://help.themoviedb.org/kb/api/configuration) + /// + /// + public TmdbConfiguration GetConfiguration() + { + return ProcessRequest(BuildGetConfigurationRequest()); + } + + public string GetConfigurationETag() + { + return ProcessRequestETag(BuildGetConfigurationRequest()); + } + + #endregion + + + #region Authentication + //public TmdbAuthToken GetAuthToken() + //{ + // var request = new RestRequest("authentication/token/new", Method.GET); + // return ProcessRequest(request); + //} + + //public TmdbAuthSession GetAuthSession(string RequestToken) + //{ + // var request = new RestRequest("authentication/session/new", Method.GET); + // request.AddParameter("request_token", RequestToken); + // return ProcessRequest(request); + //} + #endregion + + + #region Search + /// + /// Search for movies that are listed in TMDB + /// (http://help.themoviedb.org/kb/api/search-movies) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// optional - include adult items in your search, (Default=false) + /// optional - to get a closer result + /// + public TmdbMovieSearch SearchMovie(string query, int page, string language, bool? includeAdult = null, int? year = null) + { + if (string.IsNullOrEmpty(query)) + throw new ArgumentException("Search must be supplied"); + + return ProcessRequest(BuildSearchMovieRequest(query, page, language, includeAdult, year)); + } + + /// + /// Search for movies that are listed in TMDB + /// (http://help.themoviedb.org/kb/api/search-movies) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// + public TmdbMovieSearch SearchMovie(string query, int page) + { + return SearchMovie(query, page, Language); + } + + /// + /// Search for people that are listed in TMDB. + /// (http://help.themoviedb.org/kb/api/search-people) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbPersonSearch SearchPerson(string query, int page, string language) + { + if (string.IsNullOrEmpty(query)) + throw new ArgumentException("Search must be supplied"); + + return ProcessRequest(BuildSearchPersonRequest(query, page, language)); + } + + /// + /// Search for people that are listed in TMDB. + /// (http://help.themoviedb.org/kb/api/search-people) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// + public TmdbPersonSearch SearchPerson(string query, int page) + { + return SearchPerson(query, page, Language); + } + + /// + /// Search for production companies that are part of TMDB. + /// (http://help.themoviedb.org/kb/api/search-companies) + /// + /// Is your search text. + /// Result page to retrieve (1 based) + /// + public TmdbCompanySearch SearchCompany(string query, int page) + { + if (string.IsNullOrEmpty(query)) + throw new ArgumentException("Search must be supplied"); + + return ProcessRequest(BuildSearchCompanyRequest(query, page)); + } + + #endregion + + + #region Collections + /// + /// Get all of the basic information about a movie collection. + /// (http://help.themoviedb.org/kb/api/collection-info) + /// + /// Collection ID, available in TmdbMovie::belongs_to_collection + /// optional - ISO 639-1 language code + /// + public TmdbCollection GetCollectionInfo(int CollectionID, string language) + { + return ProcessRequest(BuildGetCollectionInfoRequest(CollectionID, language)); + } + + public string GetCollectionInfoETag(int CollectionID, string language) + { + return ProcessRequestETag(BuildGetCollectionInfoRequest(CollectionID, language)); + } + + /// + /// Get all of the basic information about a movie collection. + /// (http://help.themoviedb.org/kb/api/collection-info) + /// + /// Collection ID, available in TmdbMovie::belongs_to_collection + /// + public TmdbCollection GetCollectionInfo(int CollectionID) + { + return GetCollectionInfo(CollectionID, Language); + } + + public string GetCollectionInfoETag(int CollectionID) + { + return GetCollectionInfoETag(CollectionID, Language); + } + + /// + /// Get all the images for a movie collection + /// http://help.themoviedb.org/kb/api/collection-images + /// + /// Collection ID, available in TmdbMovie::belongs_to_collection + /// optional - ISO 639-1 language code + /// + public TmdbCollectionImages GetCollectionImages(int CollectionID, string language) + { + return ProcessRequest(BuildGetCollectionImagesRequest(CollectionID, language)); + } + + public string GetCollectionImagesETag(int CollectionID, string language) + { + return ProcessRequestETag(BuildGetCollectionImagesRequest(CollectionID, language)); + } + + /// + /// Get all the images for a movie collection + /// http://help.themoviedb.org/kb/api/collection-images + /// + /// Collection ID, available in TmdbMovie::belongs_to_collection + /// + public TmdbCollectionImages GetCollectionImages(int CollectionID) + { + return GetCollectionImages(CollectionID, Language); + } + + public string GetCollectionImagesETag(int CollectionID) + { + return GetCollectionImagesETag(CollectionID, Language); + } + #endregion + + + #region Movie Info + /// + /// Retrieve all the basic movie information for a particular movie by TMDB reference. + /// (http://help.themoviedb.org/kb/api/movie-info) + /// + /// TMDB movie id + /// optional - ISO 639-1 language code + /// + public TmdbMovie GetMovieInfo(int MovieID, string language) + { + return ProcessRequest(BuildGetMovieInfoRequest(MovieID, language)); + } + + public string GetMovieInfoETag(int MovieID, string language) + { + return ProcessRequestETag(BuildGetMovieInfoRequest(MovieID, language)); + } + + /// + /// Retrieve all the basic movie information for a particular movie by TMDB reference. + /// (http://help.themoviedb.org/kb/api/movie-info) + /// + /// TMDB movie id + /// + public TmdbMovie GetMovieInfo(int MovieID) + { + return GetMovieInfo(MovieID, Language); + } + + public string GetMovieInfoETag(int MovieID) + { + return GetMovieInfoETag(MovieID, Language); + } + + /// + /// Retrieve all the basic movie information for a particular movie by IMDB reference. + /// (http://help.themoviedb.org/kb/api/movie-info) + /// + /// IMDB movie id + /// + public TmdbMovie GetMovieByIMDB(string IMDB_ID, string language) + { + if (string.IsNullOrEmpty(IMDB_ID)) + throw new ArgumentException("IMDB_ID must be supplied"); + + return ProcessRequest(BuildGetMovieByIMDBRequest(IMDB_ID, language)); + } + + public TmdbMovie GetMovieByIMDB(string IMDB_ID) + { + return GetMovieByIMDB(IMDB_ID, Language); + } + + /// + /// Get list of all the alternative titles for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-alternative-titles) + /// + /// TMDB movie id + /// ISO 3166-1 country code (optional) + /// + public TmdbMovieAlternateTitles GetMovieAlternateTitles(int MovieID, string Country) + { + return ProcessRequest(BuildGetMovieAlternateTitlesRequest(MovieID, Country)); + } + + public string GetMovieAlternateTitlesETag(int MovieID, string Country) + { + return ProcessRequestETag(BuildGetMovieAlternateTitlesRequest(MovieID, Country)); + } + + /// + /// Get list of all the cast information for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-casts) + /// + /// TMDB movie id + /// + public TmdbMovieCast GetMovieCast(int MovieID) + { + return ProcessRequest(BuildGetMovieCastRequest(MovieID)); + } + + public string GetMovieCastETag(int MovieID) + { + return ProcessRequestETag(BuildGetMovieCastRequest(MovieID)); + } + + /// + /// Get list of all the images for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-images) + /// + /// TMDB movie id + /// optional - ISO 639-1 language code + /// + public TmdbMovieImages GetMovieImages(int MovieID, string language) + { + return ProcessRequest(BuildGetMovieImagesRequest(MovieID, language)); + } + + public string GetMovieImagesETag(int MovieID, string language) + { + return ProcessRequestETag(BuildGetMovieImagesRequest(MovieID, language)); + } + + /// + /// Get list of all the images for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-images) + /// + /// TMDB movie id + /// + public TmdbMovieImages GetMovieImages(int MovieID) + { + return GetMovieImages(MovieID, Language); + } + + public string GetMovieImagesETag(int MovieID) + { + return GetMovieImagesETag(MovieID, Language); + } + + /// + /// Get list of all the keywords that have been added to a particular movie. Only English keywords exist currently. + /// (http://help.themoviedb.org/kb/api/movie-keywords) + /// + /// TMDB movie id + /// + public TmdbMovieKeywords GetMovieKeywords(int MovieID) + { + return ProcessRequest(BuildGetMovieKeywordsRequest(MovieID)); + } + + public string GetMovieKeywordsETag(int MovieID) + { + return ProcessRequestETag(BuildGetMovieKeywordsRequest(MovieID)); + } + + /// + /// Get all the release and certification data in TMDB for a particular movie + /// (http://help.themoviedb.org/kb/api/movie-release-info) + /// + /// TMDB movie id + /// + public TmdbMovieReleases GetMovieReleases(int MovieID) + { + return ProcessRequest(BuildGetMovieReleasesRequest(MovieID)); + } + + public string GetMovieReleasesETag(int MovieID) + { + return ProcessRequestETag(BuildGetMovieReleasesRequest(MovieID)); + } + + /// + /// Get list of trailers for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-trailers) + /// + /// TMDB movie id + /// optional - ISO 639-1 language code + /// + public TmdbMovieTrailers GetMovieTrailers(int MovieID, string language) + { + return ProcessRequest(BuildGetMovieTrailersRequest(MovieID, language)); + } + + public string GetMovieTrailersETag(int MovieID, string language) + { + return ProcessRequestETag(BuildGetMovieTrailersRequest(MovieID, language)); + } + + /// + /// Get list of trailers for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-trailers) + /// + /// TMDB movie id + /// + public TmdbMovieTrailers GetMovieTrailers(int MovieID) + { + return GetMovieTrailers(MovieID, Language); + } + + public string GetMovieTrailersETag(int MovieID) + { + return GetMovieTrailersETag(MovieID, Language); + } + + /// + /// Get list of similar movies for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-similar-movies) + /// + /// TMDB movie id + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbSimilarMovies GetSimilarMovies(int MovieID, int page, string language) + { + return ProcessRequest(BuildGetSimilarMoviesRequest(MovieID, page, language)); + } + + /// + /// Get list of similar movies for a particular movie. + /// (http://help.themoviedb.org/kb/api/movie-similar-movies) + /// + /// TMDB movie id + /// Result page to retrieve (1 based) + /// + public TmdbSimilarMovies GetSimilarMovies(int MovieID, int page) + { + return GetSimilarMovies(MovieID, page, Language); + } + + /// + /// Get list of all available translations for a specific movie. + /// (http://help.themoviedb.org/kb/api/movie-translations) + /// + /// TMDB movie id + /// + public TmdbTranslations GetMovieTranslations(int MovieID) + { + return ProcessRequest(BuildGetMovieTranslationsRequest(MovieID)); + } + + public string GetMovieTranslationsETag(int MovieID) + { + return ProcessRequestETag(BuildGetMovieTranslationsRequest(MovieID)); + } + #endregion + + + #region Person Info + /// + /// Get all of the basic information for a person. + /// (http://help.themoviedb.org/kb/api/person-info) + /// + /// Person ID + /// + public TmdbPerson GetPersonInfo(int PersonID) + { + return ProcessRequest(BuildGetPersonInfoRequest(PersonID)); + } + + public string GetPersonInfoETag(int PersonID) + { + return ProcessRequestETag(BuildGetPersonInfoRequest(PersonID)); + } + + /// + /// Get list of cast and crew information for a person. + /// (http://help.themoviedb.org/kb/api/person-credits) + /// + /// Person ID + /// optional - ISO 639-1 language code + /// + public TmdbPersonCredits GetPersonCredits(int PersonID, string language) + { + return ProcessRequest(BuildGetPersonCreditsRequest(PersonID, language)); + } + + public string GetPersonCreditsETag(int PersonID, string language) + { + return ProcessRequestETag(BuildGetPersonCreditsRequest(PersonID, language)); + } + + /// + /// Get list of cast and crew information for a person. + /// (http://help.themoviedb.org/kb/api/person-credits) + /// + /// Person ID + /// + public TmdbPersonCredits GetPersonCredits(int PersonID) + { + return GetPersonCredits(PersonID, Language); + } + + public string GetPersonCreditsETag(int PersonID) + { + return GetPersonCreditsETag(PersonID, Language); + } + + /// + /// Get list of images for a person. + /// (http://help.themoviedb.org/kb/api/person-images) + /// + /// Person ID + /// + public TmdbPersonImages GetPersonImages(int PersonID) + { + return ProcessRequest(BuildGetPersonImagesRequest(PersonID)); + } + + public string GetPersonImagesETag(int PersonID) + { + return ProcessRequestETag(BuildGetPersonImagesRequest(PersonID)); + } + #endregion + + + #region Miscellaneous Movie + /// + /// Get the newest movie added to the TMDB. + /// (http://help.themoviedb.org/kb/api/latest-movie) + /// + /// + public TmdbLatestMovie GetLatestMovie() + { + return ProcessRequest(BuildGetLatestMovieRequest()); + } + + public string GetLatestMovieETag() + { + return ProcessRequestETag(BuildGetLatestMovieRequest()); + } + + /// + /// Get the list of movies currently in theatres. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/now-playing-movies) + /// + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbNowPlaying GetNowPlayingMovies(int page, string language) + { + return ProcessRequest(BuildGetNowPlayingMoviesRequest(page, language)); + } + + public string GetNowPlayingMoviesETag(int page, string language) + { + return ProcessRequestETag(BuildGetNowPlayingMoviesRequest(page, language)); + } + + /// + /// Get the list of movies currently in theatres. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/now-playing-movies) + /// + /// Result page to retrieve (1 based) + /// + public TmdbNowPlaying GetNowPlayingMovies(int page) + { + return GetNowPlayingMovies(page, Language); + } + + public string GetNowPlayingMoviesETag(int page) + { + return GetNowPlayingMoviesETag(page, Language); + } + + /// + /// Get the daily popularity list of movies. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/popular-movie-list) + /// + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbPopular GetPopularMovies(int page, string language) + { + return ProcessRequest(BuildGetPopularMoviesRequest(page, language)); + } + + public string GetPopularMoviesETag(int page, string language) + { + return ProcessRequestETag(BuildGetPopularMoviesRequest(page, language)); + } + + /// + /// Get the daily popularity list of movies. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/popular-movie-list) + /// + /// Result page to retrieve (1 based) + /// + public TmdbPopular GetPopularMovies(int page) + { + return GetPopularMovies(page, Language); + } + + public string GetPopularMoviesETag(int page) + { + return GetPopularMoviesETag(page, Language); + } + + /// + /// Get list of movies that have over 10 votes on TMDB. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/top-rated-movies) + /// + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbTopRated GetTopRatedMovies(int page, string language) + { + return ProcessRequest(BuildGetTopRatedMoviesRequest(page, language)); + } + + public string GetTopRatedMoviesETag(int page, string language) + { + return ProcessRequestETag(BuildGetTopRatedMoviesRequest(page, language)); + } + + /// + /// Get list of movies that have over 10 votes on TMDB. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/top-rated-movies) + /// + /// Result page to retrieve (1 based) + /// + public TmdbTopRated GetTopRatedMovies(int page) + { + return GetTopRatedMovies(page, Language); + } + + public string GetTopRatedMoviesETag(int page) + { + return GetTopRatedMoviesETag(page, Language); + } + + /// + /// Get list of movies that are arriving to theatres in the next few weeks. + /// (http://help.themoviedb.org/kb/api/upcoming-movies) + /// + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbUpcoming GetUpcomingMovies(int page, string language) + { + return ProcessRequest(BuildGetUpcomingMoviesRequest(page, language)); + } + + public string GetUpcomingMoviesETag(int page, string language) + { + return ProcessRequestETag(BuildGetUpcomingMoviesRequest(page, language)); + } + + /// + /// Get list of movies that are arriving to theatres in the next few weeks. + /// (http://help.themoviedb.org/kb/api/upcoming-movies) + /// + /// Result page to retrieve (1 based) + /// + public TmdbUpcoming GetUpcomingMovies(int page) + { + return GetUpcomingMovies(page, Language); + } + + public string GetUpcomingMoviesETag(int page) + { + return GetUpcomingMoviesETag(page, Language); + } + #endregion + + + #region Company Info + /// + /// Get basic information about a production company from TMDB. + /// (http://help.themoviedb.org/kb/api/company-info) + /// + /// Company ID + /// + public TmdbCompany GetCompanyInfo(int CompanyID) + { + return ProcessRequest(BuildGetCompanyInfoRequest(CompanyID)); + } + + public string GetCompanyInfoETag(int CompanyID) + { + return ProcessRequestETag(BuildGetCompanyInfoRequest(CompanyID)); + } + + /// + /// Get list of movies associated with a company. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/company-movies) + /// + /// Company ID + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbCompanyMovies GetCompanyMovies(int CompanyID, int page, string language) + { + return ProcessRequest(BuildGetCompanyMoviesRequest(CompanyID, page, language)); + } + + public string GetCompanyMoviesETag(int CompanyID, int page, string language) + { + return ProcessRequestETag(BuildGetCompanyMoviesRequest(CompanyID, page, language)); + } + + /// + /// Get list of movies associated with a company. Response will contain 20 movies per page. + /// (http://help.themoviedb.org/kb/api/company-movies) + /// + /// Company ID + /// Result page to retrieve (1 based) + /// + public TmdbCompanyMovies GetCompanyMovies(int CompanyID, int page) + { + return GetCompanyMovies(CompanyID, page, Language); + } + + public string GetCompanyMoviesETag(int CompanyID, int page) + { + return GetCompanyMoviesETag(CompanyID, page, Language); + } + #endregion + + + #region Genre Info + /// + /// Get list of genres used in TMDB. The ids will correspond to those found in movie calls. + /// (http://help.themoviedb.org/kb/api/genre-list) + /// + /// optional - ISO 639-1 language code + /// + public TmdbGenre GetGenreList(string language) + { + return ProcessRequest(BuildGetGenreListRequest(language)); + } + + public string GetGenreListETag(string language) + { + return ProcessRequestETag(BuildGetGenreListRequest(language)); + } + + /// + /// Get list of genres used in TMDB. The ids will correspond to those found in movie calls. + /// (http://help.themoviedb.org/kb/api/genre-list) + /// + /// + public TmdbGenre GetGenreList() + { + return GetGenreList(Language); + } + + public string GetGenreListETag() + { + return GetGenreListETag(Language); + } + + /// + /// Get list of movies in a Genre. Note that only movies with more than 10 votes get listed. + /// (http://help.themoviedb.org/kb/api/genre-movies) + /// + /// TMDB Genre ID + /// Result page to retrieve (1 based) + /// optional - ISO 639-1 language code + /// + public TmdbGenreMovies GetGenreMovies(int GenreID, int page, string language) + { + return ProcessRequest(BuildGetGenreMoviesRequest(GenreID, page, language)); + } + + public string GetGenreMoviesETag(int GenreID, int page, string language) + { + return ProcessRequestETag(BuildGetGenreMoviesRequest(GenreID, page, language)); + } + + /// + /// Get list of movies in a Genre. Note that only movies with more than 10 votes get listed. + /// (http://help.themoviedb.org/kb/api/genre-movies) + /// + /// TMDB Genre ID + /// Result page to retrieve (1 based) + /// + public TmdbGenreMovies GetGenreMovies(int GenreID, int page) + { + return GetGenreMovies(GenreID, page, Language); + } + + public string GetGenreMoviesETag(int GenreID, int page) + { + return GetGenreMoviesETag(GenreID, page, Language); + } + #endregion + } +} diff --git a/WatTmdb/V3/TmdbAccount.cs b/WatTmdb/V3/TmdbAccount.cs new file mode 100644 index 0000000..ea8a9f7 --- /dev/null +++ b/WatTmdb/V3/TmdbAccount.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class TmdbAccount + { + public int id { get; set; } + public bool include_adult { get; set; } + public string iso_3166_1 { get; set; } + public string iso_639_1 { get; set; } + public string name { get; set; } + public string username { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbAccountMovies.cs b/WatTmdb/V3/TmdbAccountMovies.cs new file mode 100644 index 0000000..e671a51 --- /dev/null +++ b/WatTmdb/V3/TmdbAccountMovies.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class AccountMovie + { + public string backdrop_path { get; set; } + public int id { get; set; } + public string original_title { get; set; } + public string release_date { get; set; } + public string poster_path { get; set; } + public string title { get; set; } + public double vote_average { get; set; } + public int vote_count { get; set; } + } + + public class TmdbAccountMovies : TmdbSearchResultBase + { } +} diff --git a/WatTmdb/V3/TmdbAsyncResult.cs b/WatTmdb/V3/TmdbAsyncResult.cs new file mode 100644 index 0000000..def1957 --- /dev/null +++ b/WatTmdb/V3/TmdbAsyncResult.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class TmdbAsyncResult + { + public T Data { get; set; } + public TmdbError Error { get; set; } + public object UserState { get; set; } + } + + public class TmdbAsyncETagResult + { + public string ETag { get; set; } + public object UserState { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbAuthSession.cs b/WatTmdb/V3/TmdbAuthSession.cs new file mode 100644 index 0000000..52717e2 --- /dev/null +++ b/WatTmdb/V3/TmdbAuthSession.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class TmdbAuthSession + { + public string session_id { get; set; } + public bool success { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbAuthToken.cs b/WatTmdb/V3/TmdbAuthToken.cs new file mode 100644 index 0000000..492b6d6 --- /dev/null +++ b/WatTmdb/V3/TmdbAuthToken.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class TmdbAuthToken + { + public string expires_at { get; set; } + public string request_token { get; set; } + public bool success { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbChanges.cs b/WatTmdb/V3/TmdbChanges.cs new file mode 100644 index 0000000..9a32837 --- /dev/null +++ b/WatTmdb/V3/TmdbChanges.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class ChangesItem + { + public int id { get; set; } + public bool adult { get; set; } + } + + public class TmdbChanges : TmdbSearchResultBase + { } +} diff --git a/WatTmdb/V3/TmdbCollection.cs b/WatTmdb/V3/TmdbCollection.cs new file mode 100644 index 0000000..093c3ad --- /dev/null +++ b/WatTmdb/V3/TmdbCollection.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class CollectionPart + { + public string title { get; set; } + public int id { get; set; } + public string release_date { get; set; } + public string poster_path { get; set; } + public string backdrop_path { get; set; } + + public override string ToString() + { + return title; + } + } + + public class TmdbCollection + { + public int id { get; set; } + public string name { get; set; } + public string poster_path { get; set; } + public string backdrop_path { get; set; } + public List parts { get; set; } + + public override string ToString() + { + return name; + } + } + + public class CollectionSearch + { + public int id { get; set; } + public string backdrop_path { get; set; } + public string name { get; set; } + public string poster_path { get; set; } + + public override string ToString() + { + return name; + } + } + + public class TmdbCollectionSearch : TmdbSearchResultBase + { } +} diff --git a/WatTmdb/V3/TmdbCollectionImages.cs b/WatTmdb/V3/TmdbCollectionImages.cs new file mode 100644 index 0000000..1348c4a --- /dev/null +++ b/WatTmdb/V3/TmdbCollectionImages.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class CollectionBackdrop + { + public string file_path { get; set; } + public int width { get; set; } + public int height { get; set; } + public string iso_639_1 { get; set; } + public double aspect_ratio { get; set; } + } + + public class CollectionPoster + { + public string file_path { get; set; } + public int width { get; set; } + public int height { get; set; } + public string iso_639_1 { get; set; } + public double aspect_ratio { get; set; } + } + + public class TmdbCollectionImages + { + public List backdrops { get; set; } + public List posters { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbCompany.cs b/WatTmdb/V3/TmdbCompany.cs new file mode 100644 index 0000000..8b11fbf --- /dev/null +++ b/WatTmdb/V3/TmdbCompany.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class ParentCompany + { + public string name { get; set; } + public int id { get; set; } + public string logo_path { get; set; } + + public override string ToString() + { + return name; + } + } + + public class TmdbCompany + { + public string description { get; set; } + public string headquarters { get; set; } + public string homepage { get; set; } + public int id { get; set; } + public string logo_path { get; set; } + public string name { get; set; } + public ParentCompany parent_company { get; set; } + + public override string ToString() + { + return name; + } + } +} diff --git a/WatTmdb/V3/TmdbCompanyMovies.cs b/WatTmdb/V3/TmdbCompanyMovies.cs new file mode 100644 index 0000000..235b1b1 --- /dev/null +++ b/WatTmdb/V3/TmdbCompanyMovies.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class CompanyMovie + { + public string backdrop_path { get; set; } + public int id { get; set; } + public string original_title { get; set; } + public string release_date { get; set; } + public string poster_path { get; set; } + public string title { get; set; } + public double vote_average { get; set; } + public int vote_count { get; set; } + + public override string ToString() + { + return title; + } + } + + public class TmdbCompanyMovies : TmdbSearchResultBase + { + public int id { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbCompanySearch.cs b/WatTmdb/V3/TmdbCompanySearch.cs new file mode 100644 index 0000000..a72073d --- /dev/null +++ b/WatTmdb/V3/TmdbCompanySearch.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class CompanyResult + { + public int id { get; set; } + public string logo_path { get; set; } + public string name { get; set; } + + public override string ToString() + { + return name; + } + } + + public class TmdbCompanySearch : TmdbSearchResultBase + { } +} diff --git a/WatTmdb/V3/TmdbConfiguration.cs b/WatTmdb/V3/TmdbConfiguration.cs new file mode 100644 index 0000000..99d8d2a --- /dev/null +++ b/WatTmdb/V3/TmdbConfiguration.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class ImageConfiguration + { + public string base_url { get; set; } + public string secure_base_url { get; set; } + public List poster_sizes { get; set; } + public List backdrop_sizes { get; set; } + public List profile_sizes { get; set; } + public List logo_sizes { get; set; } + } + + public class TmdbConfiguration + { + public ImageConfiguration images { get; set; } + public List change_keys { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbError.cs b/WatTmdb/V3/TmdbError.cs new file mode 100644 index 0000000..7d298c2 --- /dev/null +++ b/WatTmdb/V3/TmdbError.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class TmdbError + { + public int status_code { get; set; } + public string status_message { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbGenre.cs b/WatTmdb/V3/TmdbGenre.cs new file mode 100644 index 0000000..f347dae --- /dev/null +++ b/WatTmdb/V3/TmdbGenre.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class TmdbGenre + { + public List genres { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbGenreMovies.cs b/WatTmdb/V3/TmdbGenreMovies.cs new file mode 100644 index 0000000..dd61a80 --- /dev/null +++ b/WatTmdb/V3/TmdbGenreMovies.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class GenreMovie : TmdbMovieBase { } + + public class TmdbGenreMovies : TmdbSearchResultBase + { + public int id { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbGuestSession.cs b/WatTmdb/V3/TmdbGuestSession.cs new file mode 100644 index 0000000..cca1ed2 --- /dev/null +++ b/WatTmdb/V3/TmdbGuestSession.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class TmdbGuestSession + { + public string guest_session_id { get; set; } + public string expires_at { get; set; } + public bool success { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbKeywords.cs b/WatTmdb/V3/TmdbKeywords.cs new file mode 100644 index 0000000..8b1fb2e --- /dev/null +++ b/WatTmdb/V3/TmdbKeywords.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class TmdbKeyword + { + public int id { get; set; } + public string name { get; set; } + } + + public class KeywordMovie + { + public string backdrop_path { get; set; } + public int id { get; set; } + public string original_title { get; set; } + public string release_date { get; set; } + public string poster_path { get; set; } + public string title { get; set; } + public double vote_average { get; set; } + public int vote_count { get; set; } + + public override string ToString() + { + return title; + } + } + + public class TmdbKeywordMovies : TmdbSearchResultBase + { + public int id { get; set; } + } + + public class TmdbKeywordSearch : TmdbSearchResultBase + { } +} diff --git a/WatTmdb/V3/TmdbLatestMovie.cs b/WatTmdb/V3/TmdbLatestMovie.cs new file mode 100644 index 0000000..181f7e1 --- /dev/null +++ b/WatTmdb/V3/TmdbLatestMovie.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class TmdbLatestMovie + { + public bool adult { get; set; } + public string backdrop_path { get; set; } + public BelongsToCollection belongs_to_collection { get; set; } + public int budget { get; set; } + public List genres { get; set; } + public string homepage { get; set; } + public int id { get; set; } + public string imdb_id { get; set; } + public string original_title { get; set; } + public string overview { get; set; } + public double popularity { get; set; } + public string poster_path { get; set; } + public List production_companies { get; set; } + public List production_countries { get; set; } + public string release_date { get; set; } + public Int64 revenue { get; set; } + public int runtime { get; set; } + public List spoken_languages { get; set; } + public string tagline { get; set; } + public string title { get; set; } + public double vote_average { get; set; } + public int vote_count { get; set; } + + public override string ToString() + { + return title; + } + } +} diff --git a/WatTmdb/V3/TmdbList.cs b/WatTmdb/V3/TmdbList.cs new file mode 100644 index 0000000..a7f17a1 --- /dev/null +++ b/WatTmdb/V3/TmdbList.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class ListItem + { + public string description { get; set; } + public int favorite_count { get; set; } + public string id { get; set; } + public int item_count { get; set; } + public string iso_639_1 { get; set; } + public string list_type { get; set; } + public string name { get; set; } + public string poster_path { get; set; } + + public override string ToString() + { + return name; + } + } + + public class TmdbList : TmdbSearchResultBase + { } + + public class ListMovie + { + public string backdrop_path { get; set; } + public int id { get; set; } + public string original_title { get; set; } + public string release_date { get; set; } + public string poster_path { get; set; } + public string title { get; set; } + public double vote_average { get; set; } + public int vote_count { get; set; } + + public override string ToString() + { + return title; + } + } + + public class TmdbListItem + { + public string created_by { get; set; } + public string description { get; set; } + public int favorite_count { get; set; } + public string id { get; set; } + public List items { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbMovie.cs b/WatTmdb/V3/TmdbMovie.cs new file mode 100644 index 0000000..3eec861 --- /dev/null +++ b/WatTmdb/V3/TmdbMovie.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class BelongsToCollection + { + public int id { get; set; } + public string name { get; set; } + public string poster_path { get; set; } + public string backdrop_path { get; set; } + } + + public class MovieGenre + { + public int id { get; set; } + public string name { get; set; } + + public override string ToString() + { + return name; + } + } + + public class ProductionCompany + { + public string name { get; set; } + public int id { get; set; } + + public override string ToString() + { + return name; + } + } + + public class ProductionCountry + { + public string iso_3166_1 { get; set; } + public string name { get; set; } + + public override string ToString() + { + return name; + } + } + + public class SpokenLanguage + { + public string iso_639_1 { get; set; } + public string name { get; set; } + + public override string ToString() + { + return name; + } + } + + public class TmdbMovie + { + public bool adult { get; set; } + public string backdrop_path { get; set; } + public BelongsToCollection belongs_to_collection { get; set; } + public int budget { get; set; } + public List genres { get; set; } + public string homepage { get; set; } + public int id { get; set; } + public string imdb_id { get; set; } + public string original_title { get; set; } + public string overview { get; set; } + public double popularity { get; set; } + public string poster_path { get; set; } + public List production_companies { get; set; } + public List production_countries { get; set; } + public string release_date { get; set; } + public Int64 revenue { get; set; } + public int runtime { get; set; } + public List spoken_languages { get; set; } + public string tagline { get; set; } + public string title { get; set; } + public double vote_average { get; set; } + public int vote_count { get; set; } + + public override string ToString() + { + return title; + } + } +} diff --git a/WatTmdb/V3/TmdbMovieAlternateTitles.cs b/WatTmdb/V3/TmdbMovieAlternateTitles.cs new file mode 100644 index 0000000..50667e3 --- /dev/null +++ b/WatTmdb/V3/TmdbMovieAlternateTitles.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class AlternateTitle + { + public string iso_3166_1 { get; set; } + public string title { get; set; } + + public override string ToString() + { + return title; + } + } + + public class TmdbMovieAlternateTitles + { + public int id { get; set; } + public List titles { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbMovieBase.cs b/WatTmdb/V3/TmdbMovieBase.cs new file mode 100644 index 0000000..0251624 --- /dev/null +++ b/WatTmdb/V3/TmdbMovieBase.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class TmdbMovieBase + { + public string backdrop_path { get; set; } + public int id { get; set; } + public string original_title { get; set; } + public string release_date { get; set; } + public string poster_path { get; set; } + public string title { get; set; } + public double vote_average { get; set; } + public int vote_count { get; set; } + + public override string ToString() + { + return title; + } + } +} diff --git a/WatTmdb/V3/TmdbMovieCast.cs b/WatTmdb/V3/TmdbMovieCast.cs new file mode 100644 index 0000000..6f5a846 --- /dev/null +++ b/WatTmdb/V3/TmdbMovieCast.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class Cast + { + public int id { get; set; } + public string name { get; set; } + public string character { get; set; } + public int order { get; set; } + public string profile_path { get; set; } + + public override string ToString() + { + return name; + } + } + + public class Crew + { + public int id { get; set; } + public string name { get; set; } + public string department { get; set; } + public string job { get; set; } + public string profile_path { get; set; } + + public override string ToString() + { + return name; + } + } + + public class TmdbMovieCast + { + public int id { get; set; } + public List cast { get; set; } + public List crew { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbMovieChanges.cs b/WatTmdb/V3/TmdbMovieChanges.cs new file mode 100644 index 0000000..0e19f96 --- /dev/null +++ b/WatTmdb/V3/TmdbMovieChanges.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class MovieChangeItem + { + public string id { get; set; } + public string action { get; set; } + public string time { get; set; } + public string value { get; set; } + public string iso_639_1 { get; set; } + public string original_value { get; set; } + } + + public class MovieChange + { + public string key { get; set; } + public List items { get; set; } + } + + public class TmdbMovieChanges + { + public List changes { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbMovieImages.cs b/WatTmdb/V3/TmdbMovieImages.cs new file mode 100644 index 0000000..ff28f8d --- /dev/null +++ b/WatTmdb/V3/TmdbMovieImages.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class Backdrop + { + public string file_path { get; set; } + public int width { get; set; } + public int height { get; set; } + public string iso_639_1 { get; set; } + public double aspect_ratio { get; set; } + public double vote_average { get; set; } + public int vote_count { get; set; } + } + + public class Poster + { + public string file_path { get; set; } + public int width { get; set; } + public int height { get; set; } + public string iso_639_1 { get; set; } + public double aspect_ratio { get; set; } + public double vote_average { get; set; } + public int vote_count { get; set; } + } + + public class TmdbMovieImages + { + public int id { get; set; } + public List backdrops { get; set; } + public List posters { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbMovieKeywords.cs b/WatTmdb/V3/TmdbMovieKeywords.cs new file mode 100644 index 0000000..e03d7aa --- /dev/null +++ b/WatTmdb/V3/TmdbMovieKeywords.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class MovieKeyword + { + public int id { get; set; } + public string name { get; set; } + + public override string ToString() + { + return name; + } + } + + public class TmdbMovieKeywords + { + public int id { get; set; } + public List keywords { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbMovieReleases.cs b/WatTmdb/V3/TmdbMovieReleases.cs new file mode 100644 index 0000000..215e7d1 --- /dev/null +++ b/WatTmdb/V3/TmdbMovieReleases.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class ReleaseCountry + { + public string iso_3166_1 { get; set; } + public string certification { get; set; } + public string release_date { get; set; } + } + + public class TmdbMovieReleases + { + public int id { get; set; } + public List countries { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbMovieSearch.cs b/WatTmdb/V3/TmdbMovieSearch.cs new file mode 100644 index 0000000..047631b --- /dev/null +++ b/WatTmdb/V3/TmdbMovieSearch.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class MovieResult : TmdbMovieBase + { + public bool adult { get; set; } + public double popularity { get; set; } + } + + public class TmdbMovieSearch : TmdbSearchResultBase + { } +} diff --git a/WatTmdb/V3/TmdbMovieTrailers.cs b/WatTmdb/V3/TmdbMovieTrailers.cs new file mode 100644 index 0000000..f005a6f --- /dev/null +++ b/WatTmdb/V3/TmdbMovieTrailers.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class Youtube + { + public string name { get; set; } + public string size { get; set; } + public string source { get; set; } + + public override string ToString() + { + return name; + } + } + + public class TmdbMovieTrailers + { + public int id { get; set; } + //public List quicktime { get; set; } + public List youtube { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbNowPlaying.cs b/WatTmdb/V3/TmdbNowPlaying.cs new file mode 100644 index 0000000..756260e --- /dev/null +++ b/WatTmdb/V3/TmdbNowPlaying.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class NowPlaying : TmdbMovieBase { } + + public class TmdbNowPlaying : TmdbSearchResultBase + { } +} diff --git a/WatTmdb/V3/TmdbPerson.cs b/WatTmdb/V3/TmdbPerson.cs new file mode 100644 index 0000000..f2b8738 --- /dev/null +++ b/WatTmdb/V3/TmdbPerson.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class TmdbPerson + { + public bool adult { get; set; } + //public List also_known_as { get; set; } + public string biography { get; set; } + public string birthday { get; set; } + public string deathday { get; set; } + public string homepage { get; set; } + public int id { get; set; } + public string name { get; set; } + public string place_of_birth { get; set; } + public string profile_path { get; set; } + + public override string ToString() + { + return name; + } + } +} diff --git a/WatTmdb/V3/TmdbPersonChanges.cs b/WatTmdb/V3/TmdbPersonChanges.cs new file mode 100644 index 0000000..7cac54b --- /dev/null +++ b/WatTmdb/V3/TmdbPersonChanges.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class PersonChangeItem + { + public string id { get; set; } + public string action { get; set; } + public string time { get; set; } + public string value { get; set; } + } + + public class PersonChange + { + public string key { get; set; } + public List items { get; set; } + } + + public class TmdbPersonChanges + { + public List changes { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbPersonCredits.cs b/WatTmdb/V3/TmdbPersonCredits.cs new file mode 100644 index 0000000..fee30c7 --- /dev/null +++ b/WatTmdb/V3/TmdbPersonCredits.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class CastCredit + { + public int id { get; set; } + public string title { get; set; } + public string character { get; set; } + public string original_title { get; set; } + public string poster_path { get; set; } + public string release_date { get; set; } + + public override string ToString() + { + return title; + } + } + + public class CrewCredit + { + public int id { get; set; } + public string title { get; set; } + public string original_title { get; set; } + public string department { get; set; } + public string job { get; set; } + public string poster_path { get; set; } + public string release_date { get; set; } + + public override string ToString() + { + return title; + } + } + + public class TmdbPersonCredits + { + public List cast { get; set; } + public List crew { get; set; } + public int id { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbPersonImages.cs b/WatTmdb/V3/TmdbPersonImages.cs new file mode 100644 index 0000000..f93430a --- /dev/null +++ b/WatTmdb/V3/TmdbPersonImages.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class PersonImageProfile + { + public string file_path { get; set; } + public int width { get; set; } + public int height { get; set; } + public object iso_639_1 { get; set; } + public double aspect_ratio { get; set; } + } + + public class TmdbPersonImages + { + public int id { get; set; } + public List profiles { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbPersonSearch.cs b/WatTmdb/V3/TmdbPersonSearch.cs new file mode 100644 index 0000000..bca70f9 --- /dev/null +++ b/WatTmdb/V3/TmdbPersonSearch.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class PersonResult + { + public bool adult { get; set; } + public int id { get; set; } + public string name { get; set; } + public string profile_path { get; set; } + + public override string ToString() + { + return name; + } + } + + public class TmdbPersonSearch : TmdbSearchResultBase + { } +} diff --git a/WatTmdb/V3/TmdbPopular.cs b/WatTmdb/V3/TmdbPopular.cs new file mode 100644 index 0000000..4c3de16 --- /dev/null +++ b/WatTmdb/V3/TmdbPopular.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class PopularMovie : TmdbMovieBase { } + + public class TmdbPopular : TmdbSearchResultBase + { } +} diff --git a/WatTmdb/V3/TmdbSearchResultBase.cs b/WatTmdb/V3/TmdbSearchResultBase.cs new file mode 100644 index 0000000..0f2273a --- /dev/null +++ b/WatTmdb/V3/TmdbSearchResultBase.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public abstract class TmdbSearchResultBase + { + public int page { get; set; } + public List results { get; set; } + public int total_pages { get; set; } + public int total_results { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbSimilarMovies.cs b/WatTmdb/V3/TmdbSimilarMovies.cs new file mode 100644 index 0000000..aaf57e9 --- /dev/null +++ b/WatTmdb/V3/TmdbSimilarMovies.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class SimilarMovie : TmdbMovieBase { } + + public class TmdbSimilarMovies : TmdbSearchResultBase + { } +} diff --git a/WatTmdb/V3/TmdbTopRated.cs b/WatTmdb/V3/TmdbTopRated.cs new file mode 100644 index 0000000..f140e53 --- /dev/null +++ b/WatTmdb/V3/TmdbTopRated.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class TopRated : TmdbMovieBase { } + + public class TmdbTopRated : TmdbSearchResultBase + { } +} diff --git a/WatTmdb/V3/TmdbTranslations.cs b/WatTmdb/V3/TmdbTranslations.cs new file mode 100644 index 0000000..bc039a6 --- /dev/null +++ b/WatTmdb/V3/TmdbTranslations.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class Translation + { + public string iso_639_1 { get; set; } + public string name { get; set; } + public string english_name { get; set; } + } + + public class TmdbTranslations + { + public int id { get; set; } + public List translations { get; set; } + } +} diff --git a/WatTmdb/V3/TmdbUpcoming.cs b/WatTmdb/V3/TmdbUpcoming.cs new file mode 100644 index 0000000..7058004 --- /dev/null +++ b/WatTmdb/V3/TmdbUpcoming.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WatTmdb.V3 +{ + public class UpcomingResult : TmdbMovieBase { } + + public class TmdbUpcoming : TmdbSearchResultBase + { } +} diff --git a/WatTmdb/V3/WatJsonDeserializer.cs b/WatTmdb/V3/WatJsonDeserializer.cs new file mode 100644 index 0000000..f9ebf21 --- /dev/null +++ b/WatTmdb/V3/WatJsonDeserializer.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using RestSharp.Deserializers; + +namespace WatTmdb.V3 +{ + public class WatJsonDeserializer : IDeserializer + { + #region IDeserializer Members + + public T Deserialize(RestSharp.IRestResponse response) + { + if (response.Content == null) + return default(T); + + // 2012-07-26 - attempt to handle some of the bad json content, eg Similar Movies for id 80271 containing null values + // amongst the other objects in the results array + // eg ...."vote_average":0.0,"vote_count":0},null,null,{"backdrop_path":null,"id":73736,"original_title":... + // ^^^^ ^^^^ + // Causes "Object reference not set to an instance of an object" exception during deserialization + while (response.Content.IndexOf("},null,") != -1) + { + response.Content = response.Content.Replace("},null,", "},"); + } + + while (response.Content.IndexOf("[null,") != -1) + { + response.Content = response.Content.Replace("[null,", "["); + } + + var deserializer = new JsonDeserializer(); + var data = deserializer.Deserialize(response); + + return data; + } + + public string DateFormat { get; set; } + public string Namespace { get; set; } + public string RootElement { get; set; } + + #endregion + } +} diff --git a/WatTmdb/WatTmdb.csproj b/WatTmdb/WatTmdb.csproj new file mode 100644 index 0000000..ef2aa5d --- /dev/null +++ b/WatTmdb/WatTmdb.csproj @@ -0,0 +1,111 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {EFC11645-FAB4-4C30-A498-29F5ECDF77E8} + Library + Properties + WatTmdb + WatTmdb + v3.5 + 512 + ..\ + true + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\RestSharp.104.1\lib\net35\RestSharp.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WatTmdb/packages.config b/WatTmdb/packages.config new file mode 100644 index 0000000..1de19f7 --- /dev/null +++ b/WatTmdb/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/packages/RestSharp.104.1/RestSharp.104.1.nupkg b/packages/RestSharp.104.1/RestSharp.104.1.nupkg new file mode 100644 index 0000000..c9822a3 Binary files /dev/null and b/packages/RestSharp.104.1/RestSharp.104.1.nupkg differ diff --git a/packages/RestSharp.104.1/RestSharp.104.1.nuspec b/packages/RestSharp.104.1/RestSharp.104.1.nuspec new file mode 100644 index 0000000..ed4338e --- /dev/null +++ b/packages/RestSharp.104.1/RestSharp.104.1.nuspec @@ -0,0 +1,22 @@ + + + + RestSharp + 104.1 + John Sheehan, RestSharp Community + John Sheehan, RestSharp Community + https://github.com/restsharp/RestSharp/blob/master/LICENSE.txt + http://restsharp.org/ + http://dl.dropbox.com/u/1827/restsharp100.png + false + Simple REST and HTTP API Client + For full release notes see https://github.com/restsharp/RestSharp/blob/master/releasenotes.markdown + en-US + REST HTTP API JSON XML + + + + + + + \ No newline at end of file diff --git a/packages/RestSharp.104.1/lib/net35-client/RestSharp.dll b/packages/RestSharp.104.1/lib/net35-client/RestSharp.dll new file mode 100644 index 0000000..66e3817 Binary files /dev/null and b/packages/RestSharp.104.1/lib/net35-client/RestSharp.dll differ diff --git a/packages/RestSharp.104.1/lib/net35-client/RestSharp.xml b/packages/RestSharp.104.1/lib/net35-client/RestSharp.xml new file mode 100644 index 0000000..28de9da --- /dev/null +++ b/packages/RestSharp.104.1/lib/net35-client/RestSharp.xml @@ -0,0 +1,2611 @@ + + + + RestSharp + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authoriztion header value as "OAuth accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + Converts a string to camel case + + String to convert + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + HttpWebRequest wrapper (sync methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (async methods) + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute an async POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + URL to call for this request + + + + + Proxy info to be sent with request + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + + + + + + + + + + + + + + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = "http://example.com"; + + + + + Proxy to use for requests made by this client instance. + Passed on to underying WebRequest if set. + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + diff --git a/packages/RestSharp.104.1/lib/net35/RestSharp.dll b/packages/RestSharp.104.1/lib/net35/RestSharp.dll new file mode 100644 index 0000000..66e3817 Binary files /dev/null and b/packages/RestSharp.104.1/lib/net35/RestSharp.dll differ diff --git a/packages/RestSharp.104.1/lib/net35/RestSharp.xml b/packages/RestSharp.104.1/lib/net35/RestSharp.xml new file mode 100644 index 0000000..28de9da --- /dev/null +++ b/packages/RestSharp.104.1/lib/net35/RestSharp.xml @@ -0,0 +1,2611 @@ + + + + RestSharp + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authoriztion header value as "OAuth accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + Converts a string to camel case + + String to convert + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + HttpWebRequest wrapper (sync methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (async methods) + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute an async POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + URL to call for this request + + + + + Proxy info to be sent with request + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + + + + + + + + + + + + + + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = "http://example.com"; + + + + + Proxy to use for requests made by this client instance. + Passed on to underying WebRequest if set. + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + diff --git a/packages/RestSharp.104.1/lib/net4-client/RestSharp.dll b/packages/RestSharp.104.1/lib/net4-client/RestSharp.dll new file mode 100644 index 0000000..c1da1b5 Binary files /dev/null and b/packages/RestSharp.104.1/lib/net4-client/RestSharp.dll differ diff --git a/packages/RestSharp.104.1/lib/net4-client/RestSharp.xml b/packages/RestSharp.104.1/lib/net4-client/RestSharp.xml new file mode 100644 index 0000000..a681102 --- /dev/null +++ b/packages/RestSharp.104.1/lib/net4-client/RestSharp.xml @@ -0,0 +1,2680 @@ + + + + RestSharp + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authoriztion header value as "OAuth accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + Converts a string to camel case + + String to convert + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Execute an async POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + URL to call for this request + + + + + Proxy info to be sent with request + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + + + + + + + + + + + + + + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = "http://example.com"; + + + + + Proxy to use for requests made by this client instance. + Passed on to underying WebRequest if set. + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Provides implementation for type conversion operations. Classes derived from the class can override this method to specify dynamic behavior for operations that convert an object from one type to another. + + Provides information about the conversion operation. The binder.Type property provides the type to which the object must be converted. For example, for the statement (String)sampleObject in C# (CType(sampleObject, Type) in Visual Basic), where sampleObject is an instance of the class derived from the class, binder.Type returns the type. The binder.Explicit property provides information about the kind of conversion that occurs. It returns true for explicit conversion and false for implicit conversion. + The result of the type conversion operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic. + + Provides information about the deletion. + + Alwasy returns true. + + + + + Provides the implementation for operations that get a value by index. Classes derived from the class can override this method to specify dynamic behavior for indexing operations. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] operation in C# (sampleObject(3) in Visual Basic), where sampleObject is derived from the DynamicObject class, is equal to 3. + The result of the index operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that get member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as getting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The result of the get operation. For example, if the method is called for a property, you can assign the property value to . + + Alwasy returns true. + + + + + Provides the implementation for operations that set a value by index. Classes derived from the class can override this method to specify dynamic behavior for operations that access objects by a specified index. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 3. + The value to set to the object that has the specified index. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 10. + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown. + + + + + Provides the implementation for operations that set member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as setting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member to which the value is being assigned. For example, for the statement sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The value to set to the member. For example, for sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, the is "Test". + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.) + + + + + Returns the enumeration of all dynamic member names. + + + A sequence that contains dynamic member names. + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + diff --git a/packages/RestSharp.104.1/lib/net4/RestSharp.dll b/packages/RestSharp.104.1/lib/net4/RestSharp.dll new file mode 100644 index 0000000..c1da1b5 Binary files /dev/null and b/packages/RestSharp.104.1/lib/net4/RestSharp.dll differ diff --git a/packages/RestSharp.104.1/lib/net4/RestSharp.xml b/packages/RestSharp.104.1/lib/net4/RestSharp.xml new file mode 100644 index 0000000..a681102 --- /dev/null +++ b/packages/RestSharp.104.1/lib/net4/RestSharp.xml @@ -0,0 +1,2680 @@ + + + + RestSharp + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authoriztion header value as "OAuth accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + Converts a string to camel case + + String to convert + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Execute an async POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + URL to call for this request + + + + + Proxy info to be sent with request + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + + + + + + + + + + + + + + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = "http://example.com"; + + + + + Proxy to use for requests made by this client instance. + Passed on to underying WebRequest if set. + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Provides implementation for type conversion operations. Classes derived from the class can override this method to specify dynamic behavior for operations that convert an object from one type to another. + + Provides information about the conversion operation. The binder.Type property provides the type to which the object must be converted. For example, for the statement (String)sampleObject in C# (CType(sampleObject, Type) in Visual Basic), where sampleObject is an instance of the class derived from the class, binder.Type returns the type. The binder.Explicit property provides information about the kind of conversion that occurs. It returns true for explicit conversion and false for implicit conversion. + The result of the type conversion operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic. + + Provides information about the deletion. + + Alwasy returns true. + + + + + Provides the implementation for operations that get a value by index. Classes derived from the class can override this method to specify dynamic behavior for indexing operations. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] operation in C# (sampleObject(3) in Visual Basic), where sampleObject is derived from the DynamicObject class, is equal to 3. + The result of the index operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that get member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as getting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The result of the get operation. For example, if the method is called for a property, you can assign the property value to . + + Alwasy returns true. + + + + + Provides the implementation for operations that set a value by index. Classes derived from the class can override this method to specify dynamic behavior for operations that access objects by a specified index. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 3. + The value to set to the object that has the specified index. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 10. + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown. + + + + + Provides the implementation for operations that set member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as setting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member to which the value is being assigned. For example, for the statement sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The value to set to the member. For example, for sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, the is "Test". + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.) + + + + + Returns the enumeration of all dynamic member names. + + + A sequence that contains dynamic member names. + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + diff --git a/packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.dll b/packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.dll new file mode 100644 index 0000000..c686797 Binary files /dev/null and b/packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.dll differ diff --git a/packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.xml b/packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.xml new file mode 100644 index 0000000..ea7e43f --- /dev/null +++ b/packages/RestSharp.104.1/lib/sl4-wp71/RestSharp.WindowsPhone.xml @@ -0,0 +1,3494 @@ + + + + RestSharp.WindowsPhone + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authoriztion header value as "OAuth accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Calculates a 32bit Cyclic Redundancy Checksum (CRC) using the same polynomial + used by Zip. This type is used internally by DotNetZip; it is generally not used + directly by applications wishing to create, read, or manipulate zip archive + files. + + + + + Returns the CRC32 for the specified stream. + + The stream over which to calculate the CRC32 + the CRC32 calculation + + + + Returns the CRC32 for the specified stream, and writes the input into the + output stream. + + The stream over which to calculate the CRC32 + The stream into which to deflate the input + the CRC32 calculation + + + + Get the CRC32 for the given (word,byte) combo. This is a computation + defined by PKzip. + + The word to start with. + The byte to combine it with. + The CRC-ized result. + + + + Update the value for the running CRC32 using the given block of bytes. + This is useful when using the CRC32() class in a Stream. + + block of bytes to slurp + starting point in the block + how many bytes within the block to slurp + + + + indicates the total number of bytes read on the CRC stream. + This is used when writing the ZipDirEntry when compressing files. + + + + + Indicates the current CRC for all blocks slurped in. + + + + + A Stream that calculates a CRC32 (a checksum) on all bytes read, + or on all bytes written. + + + + + This class can be used to verify the CRC of a ZipEntry when + reading from a stream, or to calculate a CRC when writing to a + stream. The stream should be used to either read, or write, but + not both. If you intermix reads and writes, the results are not + defined. + + + + This class is intended primarily for use internally by the + DotNetZip library. + + + + + + The default constructor. + + + Instances returned from this constructor will leave the underlying stream + open upon Close(). + + The underlying stream + + + + The constructor allows the caller to specify how to handle the underlying + stream at close. + + The underlying stream + true to leave the underlying stream + open upon close of the CrcCalculatorStream.; false otherwise. + + + + A constructor allowing the specification of the length of the stream to read. + + + Instances returned from this constructor will leave the underlying stream open + upon Close(). + + The underlying stream + The length of the stream to slurp + + + + A constructor allowing the specification of the length of the stream to + read, as well as whether to keep the underlying stream open upon Close(). + + The underlying stream + The length of the stream to slurp + true to leave the underlying stream + open upon close of the CrcCalculatorStream.; false otherwise. + + + + Read from the stream + + the buffer to read + the offset at which to start + the number of bytes to read + the number of bytes actually read + + + + Write to the stream. + + the buffer from which to write + the offset at which to start writing + the number of bytes to write + + + + Flush the stream. + + + + + Not implemented. + + N/A + N/A + N/A + + + + Not implemented. + + N/A + + + + Closes the stream. + + + + + Gets the total number of bytes run through the CRC32 calculator. + + + + This is either the total number of bytes read, or the total number of bytes + written, depending on the direction of this stream. + + + + + Provides the current CRC for all blocks slurped in. + + + + + Indicates whether the underlying stream will be left open when the + CrcCalculatorStream is Closed. + + + + + Indicates whether the stream supports reading. + + + + + Indicates whether the stream supports seeking. + + + + + Indicates whether the stream supports writing. + + + + + Not implemented. + + + + + Not implemented. + + + + + Describes how to flush the current deflate operation. + + + The different FlushType values are useful when using a Deflate in a streaming application. + + + + No flush at all. + + + Closes the current block, but doesn't flush it to + the output. Used internally only in hypothetical + scenarios. This was supposed to be removed by Zlib, but it is + still in use in some edge cases. + + + + + Use this during compression to specify that all pending output should be + flushed to the output buffer and the output should be aligned on a byte + boundary. You might use this in a streaming communication scenario, so that + the decompressor can get all input data available so far. When using this + with a ZlibCodec, AvailableBytesIn will be zero after the call if + enough output space has been provided before the call. Flushing will + degrade compression and so it should be used only when necessary. + + + + + Use this during compression to specify that all output should be flushed, as + with FlushType.Sync, but also, the compression state should be reset + so that decompression can restart from this point if previous compressed + data has been damaged or if random access is desired. Using + FlushType.Full too often can significantly degrade the compression. + + + + Signals the end of the compression/decompression stream. + + + + A class for compressing and decompressing GZIP streams. + + + + + The GZipStream is a Decorator on a . It adds GZIP compression or decompression to any stream. + + + Like the Compression.GZipStream in the .NET Base + Class Library, the Ionic.Zlib.GZipStream can compress while writing, or decompress + while reading, but not vice versa. The compression method used is GZIP, which is + documented in IETF RFC 1952, + "GZIP file format specification version 4.3". + + A GZipStream can be used to decompress data (through Read()) or to compress + data (through Write()), but not both. + + If you wish to use the GZipStream to compress data, you must wrap it around a + write-able stream. As you call Write() on the GZipStream, the data will be + compressed into the GZIP format. If you want to decompress data, you must wrap the + GZipStream around a readable stream that contains an IETF RFC 1952-compliant stream. + The data will be decompressed as you call Read() on the GZipStream. + + Though the GZIP format allows data from multiple files to be concatenated + together, this stream handles only a single segment of GZIP format, typically + representing a single file. + + + This class is similar to and . + ZlibStream handles RFC1950-compliant streams. + handles RFC1951-compliant streams. This class handles RFC1952-compliant streams. + + + + + + + + + + The last modified time for the GZIP stream. + + + GZIP allows the storage of a last modified time with each GZIP entry. + When compressing data, you can set this before the first call to Write(). When + decompressing, you can retrieve this value any time after the first call to + Read(). + + + + Create a GZipStream using the specified CompressionMode and the specified CompressionLevel, + and explicitly specify whether the stream should be left open after Deflation or Inflation. + + + + This constructor allows the application to request that the captive stream remain open after + the deflation or inflation occurs. By default, after Close() is called on the stream, the + captive stream is also closed. In some cases this is not desired, for example if the stream + is a memory stream that will be re-read after compressed data has been written to it. Specify true for the + leaveOpen parameter to leave the stream open. + + + As noted in the class documentation, + the CompressionMode (Compress or Decompress) also establishes the "direction" of the stream. + A GZipStream with CompressionMode.Compress works only through Write(). A GZipStream with + CompressionMode.Decompress works only through Read(). + + + + This example shows how to use a DeflateStream to compress data. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream which will be read or written. + Indicates whether the GZipStream will compress or decompress. + true if the application would like the stream to remain open after inflation/deflation. + A tuning knob to trade speed for effectiveness. + + + + Dispose the stream. + + + This may or may not result in a Close() call on the captive stream. + See the ctor's with leaveOpen parameters for more information. + + + + + Flush the stream. + + + + + Read and decompress data from the source stream. + + + With a GZipStream, decompression is done through reading. + + + + byte[] working = new byte[WORKING_BUFFER_SIZE]; + using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) + { + using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + { + using (var output = System.IO.File.Create(_DecompressedFile)) + { + int n; + while ((n= decompressor.Read(working, 0, working.Length)) !=0) + { + output.Write(working, 0, n); + } + } + } + } + + + The buffer into which the decompressed data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Calling this method always throws a . + + irrelevant; it will always throw! + irrelevant; it will always throw! + irrelevant! + + + + Calling this method always throws a NotImplementedException. + + irrelevant; this method will always throw! + + + + The Comment on the GZIP stream. + + + + The GZIP format allows for each file to optionally have an associated comment stored with the + file. The comment is encoded with the ISO-8859-1 code page. To include a comment in + a GZIP stream you create, set this property before calling Write() for the first time + on the GZipStream. + + + + When using GZipStream to decompress, you can retrieve this property after the first + call to Read(). If no comment has been set in the GZIP bytestream, the Comment + property will return null (Nothing in VB). + + + + + + The FileName for the GZIP stream. + + + + The GZIP format optionally allows each file to have an associated filename. When + compressing data (through Write()), set this FileName before calling Write() the first + time on the GZipStream. The actual filename is encoded into the GZIP bytestream with + the ISO-8859-1 code page, according to RFC 1952. It is the application's responsibility to + insure that the FileName can be encoded and decoded correctly with this code page. + + + When decompressing (through Read()), you can retrieve this value any time after the + first Read(). In the case where there was no filename encoded into the GZIP + bytestream, the property will return null (Nothing in VB). + + + + + + The CRC on the GZIP stream. + + + This is used for internal error checking. You probably don't need to look at this property. + + + + + This property sets the flush behavior on the stream. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is 1024 bytes. + The minimum size is 128 bytes. You may get better performance with a larger buffer. + Then again, you might not. You would have to test it. + + + + Set this before the first call to Read() or Write() on the stream. If you try to set it + afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a NotImplementedException. + + + + + The position of the stream pointer. + + + Writing this property always throws a NotImplementedException. Reading will + return the total bytes written out, if used in writing, or the total bytes + read in, if used in reading. The count may refer to compressed bytes or + uncompressed bytes, depending on how you've used the stream. + + + + + A general purpose exception class for exceptions in the Zlib library. + + + + + The ZlibException class captures exception information generated + by the Zlib library. + + + + + This ctor collects a message attached to the exception. + + + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + Reads a number of characters from the current source TextReader and writes the data to the target array at the specified index. + The source TextReader to read from + Contains the array of characteres read from the source TextReader. + The starting index of the target array. + The maximum number of characters to read from the source TextReader. + The number of characters read. The number will be less than or equal to count depending on the data available in the source TextReader. Returns -1 if the end of the stream is reached. + + + + Computes an Adler-32 checksum. + + + The Adler checksum is similar to a CRC checksum, but faster to compute, though less + reliable. It is used in producing RFC1950 compressed streams. The Adler checksum + is a required part of the "ZLIB" standard. Applications will almost never need to + use this class directly. + + + + + Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). + + + + This class compresses and decompresses data according to the Deflate algorithm + and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. + + + + + The buffer from which data is taken. + + + + + An index into the InputBuffer array, indicating where to start reading. + + + + + The number of bytes available in the InputBuffer, starting at NextIn. + + + Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes read so far, through all calls to Inflate()/Deflate(). + + + + + Buffer to store output data. + + + + + An index into the OutputBuffer array, indicating where to start writing. + + + + + The number of bytes available in the OutputBuffer, starting at NextOut. + + + Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). + + + + + used for diagnostics, when something goes wrong! + + + + + The number of Window Bits to use. + + + This gauges the size of the sliding window, and hence the + compression effectiveness as well as memory consumption. It's best to just leave this + setting alone if you don't know what it is. The maximum value is 15 bits, which implies + a 32k window. + + + + + Create a ZlibCodec that decompresses. + + + + + Initialize the inflation state. + + + It is not necessary to call this before using the ZlibCodec to inflate data; + It is implicitly called when you call the constructor. + + Z_OK if everything goes well. + + + + Initialize the inflation state with an explicit flag to + govern the handling of RFC1950 header bytes. + + + + By default, the ZLIB header defined in RFC 1950 is expected. If + you want to read a zlib stream you should specify true for + expectRfc1950Header. If you have a deflate stream, you will want to specify + false. It is only necessary to invoke this initializer explicitly if you + want to specify false. + + + whether to expect an RFC1950 header byte + pair when reading the stream of data to be inflated. + + Z_OK if everything goes well. + + + + Initialize the ZlibCodec for inflation, with the specified number of window bits. + + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if all goes well. + + + + Initialize the inflation state with an explicit flag to govern the handling of + RFC1950 header bytes. + + + + If you want to read a zlib stream you should specify true for + expectRfc1950Header. In this case, the library will expect to find a ZLIB + header, as defined in RFC + 1950, in the compressed stream. If you will be reading a DEFLATE or + GZIP stream, which does not have such a header, you will want to specify + false. + + + whether to expect an RFC1950 header byte pair when reading + the stream of data to be inflated. + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if everything goes well. + + + + Inflate the data in the InputBuffer, placing the result in the OutputBuffer. + + + You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and + AvailableBytesOut before calling this method. + + + + private void InflateBuffer() + { + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + ZlibCodec decompressor = new ZlibCodec(); + + Console.WriteLine("\n============================================"); + Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); + MemoryStream ms = new MemoryStream(DecompressedBytes); + + int rc = decompressor.InitializeInflate(); + + decompressor.InputBuffer = CompressedBytes; + decompressor.NextIn = 0; + decompressor.AvailableBytesIn = CompressedBytes.Length; + + decompressor.OutputBuffer = buffer; + + // pass 1: inflate + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(ZlibConstants.Z_NO_FLUSH); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new Exception("inflating: " + decompressor.Message); + + ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + // pass 2: finish and flush + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(ZlibConstants.Z_FINISH); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + throw new Exception("inflating: " + decompressor.Message); + + if (buffer.Length - decompressor.AvailableBytesOut > 0) + ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + decompressor.EndInflate(); + } + + + + The flush to use when inflating. + Z_OK if everything goes well. + + + + Ends an inflation session. + + + Call this after successively calling Inflate(). This will cause all buffers to be flushed. + After calling this you cannot call Inflate() without a intervening call to one of the + InitializeInflate() overloads. + + Z_OK if everything goes well. + + + + I don't know what this does! + + Z_OK if everything goes well. + + + + Set the dictionary to be used for either Inflation or Deflation. + + The dictionary bytes to use. + Z_OK if all goes well. + + + + The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. + + + + + A bunch of constants used in the Zlib interface. + + + + + The maximum number of window bits for the Deflate algorithm. + + + + + The default number of window bits for the Deflate algorithm. + + + + + indicates everything is A-OK + + + + + Indicates that the last operation reached the end of the stream. + + + + + The operation ended in need of a dictionary. + + + + + There was an error with the stream - not enough data, not open and readable, etc. + + + + + There was an error with the data - not enough data, bad data, etc. + + + + + There was an error with the working buffer. + + + + + The size of the working buffer used in the ZlibCodec class. Defaults to 8192 bytes. + + + + + The minimum size of the working buffer used in the ZlibCodec class. Currently it is 128 bytes. + + + + + Represents a Zlib stream for compression or decompression. + + + + + The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any + stream. + + + Using this stream, applications can compress or decompress data via + stream Read and Write operations. Either compresssion or + decompression can occur through either reading or writing. The compression + format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed + Data Format Specification version 3.3". This implementation of ZLIB always uses + DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE + Compressed Data Format Specification version 1.3.") + + + The ZLIB format allows for varying compression methods, window sizes, and dictionaries. + This implementation always uses the DEFLATE compression method, a preset dictionary, + and 15 window bits by default. + + + + This class is similar to , except that it adds the + RFC1950 header and trailer bytes to a compressed stream when compressing, or expects + the RFC1950 header and trailer bytes when decompressing. It is also similar to the + . + + + + + + + + Dispose the stream. + + + This may or may not result in a Close() call on the captive stream. + See the constructors that have a leaveOpen parameter for more information. + + + + + Flush the stream. + + + + + Read data from the stream. + + + + + + If you wish to use the ZlibStream to compress data while reading, you can create a + ZlibStream with CompressionMode.Compress, providing an uncompressed data stream. Then + call Read() on that ZlibStream, and the data read will be compressed. If you wish to + use the ZlibStream to decompress data while reading, you can create a ZlibStream with + CompressionMode.Decompress, providing a readable compressed data stream. Then call + Read() on that ZlibStream, and the data will be decompressed as it is read. + + + + A ZlibStream can be used for Read() or Write(), but not both. + + + The buffer into which the read data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + + + + Calling this method always throws a NotImplementedException. + + + + + Calling this method always throws a NotImplementedException. + + + + + Write data to the stream. + + + + + + If you wish to use the ZlibStream to compress data while writing, you can create a + ZlibStream with CompressionMode.Compress, and a writable output stream. Then call + Write() on that ZlibStream, providing uncompressed data as input. The data sent to + the output stream will be the compressed form of the data written. If you wish to use + the ZlibStream to decompress data while writing, you can create a ZlibStream with + CompressionMode.Decompress, and a writable output stream. Then call Write() on that + stream, providing previously compressed data. The data sent to the output stream will + be the decompressed form of the data written. + + + + A ZlibStream can be used for Read() or Write(), but not both. + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Uncompress a byte array into a single string. + + + + A buffer containing ZLIB-compressed data. + + + + + Uncompress a byte array into a byte array. + + + + + A buffer containing ZLIB-compressed data. + + + + + This property sets the flush behavior on the stream. + Sorry, though, not sure exactly how to describe all the various settings. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is 1024 bytes. + The minimum size is 128 bytes. You may get better performance with a larger buffer. + Then again, you might not. You would have to test it. + + + + Set this before the first call to Read() or Write() on the stream. If you try to set it + afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a NotImplementedException. + + + + + The position of the stream pointer. + + + Writing this property always throws a NotImplementedException. Reading will + return the total bytes written out, if used in writing, or the total bytes + read in, if used in reading. The count may refer to compressed bytes or + uncompressed bytes, depending on how you've used the stream. + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + Converts a string to camel case + + String to convert + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + + + Execute an async POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + URL to call for this request + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + + + + + + + + + + + + + + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = "http://example.com"; + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + diff --git a/packages/RestSharp.104.1/lib/sl4/RestSharp.Silverlight.dll b/packages/RestSharp.104.1/lib/sl4/RestSharp.Silverlight.dll new file mode 100644 index 0000000..c6b2687 Binary files /dev/null and b/packages/RestSharp.104.1/lib/sl4/RestSharp.Silverlight.dll differ diff --git a/packages/RestSharp.104.1/lib/sl4/RestSharp.Silverlight.xml b/packages/RestSharp.104.1/lib/sl4/RestSharp.Silverlight.xml new file mode 100644 index 0000000..fbe07a7 --- /dev/null +++ b/packages/RestSharp.104.1/lib/sl4/RestSharp.Silverlight.xml @@ -0,0 +1,2429 @@ + + + + RestSharp.Silverlight + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authoriztion header value as "OAuth accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + Converts a string to camel case + + String to convert + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + + + Execute an async POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + Collection of files to be sent with request + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + URL to call for this request + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + + + + + + + + + + + + + + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = "http://example.com"; + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + + The object to serialize + This request + + + + Calls AddParameter() for all public, readable properties specified in the white list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + diff --git a/packages/RestSharp.104.1/readme.txt b/packages/RestSharp.104.1/readme.txt new file mode 100644 index 0000000..dca2fa6 --- /dev/null +++ b/packages/RestSharp.104.1/readme.txt @@ -0,0 +1,19 @@ +*** IMPORTANT CHANGE IN RESTSHARP VERSION 103 *** + +In 103.0, JSON.NET was removed as a dependency. + +If this is still installed in your project and no other libraries depend on +it you may remove it from your installed packages. + +There is one breaking change: the default Json*Serializer* is no longer +compatible with Json.NET. To use Json.NET for serialization, copy the code +from https://github.com/restsharp/RestSharp/blob/86b31f9adf049d7fb821de8279154f41a17b36f7/RestSharp/Serializers/JsonSerializer.cs +and register it with your client: + +var client = new RestClient(); +client.JsonSerializer = new YourCustomSerializer(); + +The default Json*Deserializer* should be 100% compatible. + +If you run into any compatibility issues with deserialization, +please report it to http://groups.google.com/group/restsharp \ No newline at end of file diff --git a/packages/repositories.config b/packages/repositories.config index 47f002d..4e4e1f5 100644 --- a/packages/repositories.config +++ b/packages/repositories.config @@ -5,8 +5,12 @@ + + + + \ No newline at end of file diff --git a/sync.bat b/sync.bat new file mode 100644 index 0000000..b36b536 --- /dev/null +++ b/sync.bat @@ -0,0 +1,6 @@ +:: follow the instruction here to create a link to the upstream repository +:: https://help.github.com/articles/syncing-a-fork +:: then this batch will sync with upstream +git fetch upstream +git checkout 1.3.0.x +git merge upstream/1.3.0.x diff --git a/xmwq1pfw.1wj.txt b/xmwq1pfw.1wj.txt new file mode 100644 index 0000000..0d05681 --- /dev/null +++ b/xmwq1pfw.1wj.txt @@ -0,0 +1,61 @@ + +# Please enter the commit message for your changes. Lines starting +# with '#' will be ignored, and an empty message aborts the commit. +# On branch 1.3.0.x +# Changes to be committed: +# (use "git reset HEAD ..." to unstage) +# +# modified: Addons/generic.EmberCore.BulkRename/clsAPIRenamer.vb +# modified: Addons/generic.EmberCore.BulkRename/dlgBulkRename.vb +# modified: Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.English_(en_US)-Help.xml +# modified: Addons/generic.EmberCore.MovieExport/Langs/generic.EmberCore.MovieExporter.English_(en_US).xml +# modified: Addons/generic.EmberCore.MovieExport/Module.MovieExporter.vb +# modified: Addons/generic.EmberCore.MovieExport/dlgExportMovies.designer.vb +# modified: Addons/generic.EmberCore.MovieExport/dlgExportMovies.resx +# modified: Addons/generic.EmberCore.MovieExport/dlgExportMovies.vb +# modified: Addons/generic.EmberCore.MovieExport/frmSettingsHolder.Designer.vb +# modified: Addons/generic.EmberCore.MovieExport/frmSettingsHolder.vb +# modified: Addons/multi.Compatibility/Langs/multi.Compatibility.English_(en_US).xml +# modified: Addons/multi.Compatibility/frmYAMJ.designer.vb +# modified: Addons/multi.Compatibility/frmYAMJ.vb +# modified: Addons/multi.Compatibility/genericYAMJ.vb +# modified: Addons/scraper.EmberCore.TMDB/Scraper/clsScrapeTMDBg.vb +# modified: Addons/scraper.EmberCore.TMDB/Scraper/dlgTMDBSearchResults.vb +# modified: Addons/scraper.EmberCore/Scraper/clsScrapeIMDB.vb +# modified: Addons/scraper.EmberCore/Scraper/dlgIMDBSearchResults.vb +# modified: Addons/scraper.EmberCore/scraperMovieNativeModule.vb +# modified: Ember Media Manager/Bin/ffmpeg.exe +# modified: Ember Media Manager/Ember Media Manager.vbproj +# modified: Ember Media Manager/Langs/English_(en_US)-Help.xml +# modified: Ember Media Manager/Langs/English_(en_US).xml +# modified: Ember Media Manager/Langs/html/template MovieHomepage/English_(en_US).html +# modified: Ember Media Manager/Langs/html/template MovieHomepage/German_(de_DE).html +# modified: Ember Media Manager/Langs/html/template MovieHomepage/function.js +# new file: Ember Media Manager/Resources/haswatched.png +# modified: Ember Media Manager/dlgEditEpisode.Designer.vb +# modified: Ember Media Manager/dlgEditEpisode.resx +# modified: Ember Media Manager/dlgEditEpisode.vb +# modified: Ember Media Manager/dlgEditMovie.Designer.vb +# modified: Ember Media Manager/dlgEditMovie.vb +# modified: Ember Media Manager/dlgSettings.Designer.vb +# modified: Ember Media Manager/dlgSettings.resx +# modified: Ember Media Manager/dlgSettings.vb +# modified: Ember Media Manager/frmMain.Designer.vb +# modified: Ember Media Manager/frmMain.resx +# modified: Ember Media Manager/frmMain.vb +# modified: EmberAPI/EmberAPI.vbproj +# modified: EmberAPI/Resources/MediaDatabaseSQL_v1.txt +# modified: EmberAPI/clsAPICommon.vb +# modified: EmberAPI/clsAPIDatabase.vb +# modified: EmberAPI/clsAPIImages.vb +# modified: EmberAPI/clsAPIMediaContainers.vb +# modified: EmberAPI/clsAPIMediaInfo.vb +# modified: EmberAPI/clsAPIScanner.vb +# modified: EmberAPI/clsAPISettings.vb +# modified: EmberAPI/clsAPIStringUtils.vb +# modified: EmberAPI/clsAdvancedSettings.vb +# new file: EmberAPI/dlgCompatibility.Designer.vb +# new file: EmberAPI/dlgCompatibility.resx +# new file: EmberAPI/dlgCompatibility.vb +# +